/[MITgcm]/MITgcm/pkg/ctrl/ctrl_map_ini.F
ViewVC logotype

Diff of /MITgcm/pkg/ctrl/ctrl_map_ini.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.2 by heimbach, Fri Jul 13 13:40:17 2001 UTC revision 1.13 by heimbach, Fri Sep 17 23:02:01 2004 UTC
# Line 2  C $Header$ Line 2  C $Header$
2    
3  #include "CTRL_CPPOPTIONS.h"  #include "CTRL_CPPOPTIONS.h"
4    
5    CBOP
6    C     !ROUTINE: ctrl_map_ini
7    C     !INTERFACE:
8          subroutine ctrl_map_ini( mythid )
9    
10    C     !DESCRIPTION: \bv
11    c     *=================================================================
12    c     | SUBROUTINE ctrl_map_ini
13    c     | Add the temperature, salinity, and diffusivity parts of the
14    c     | control vector to the model state and update the tile halos.
15    c     | The control vector is defined in the header file "ctrl.h".
16    c     *=================================================================
17    C     \ev
18    
19        subroutine ctrl_map_ini(  C     !USES:
      I                     mythid  
      &                   )  
   
 c     ==================================================================  
 c     SUBROUTINE ctrl_map_ini  
 c     ==================================================================  
 c  
 c     o Add the temperature and salinity parts of the control vector to  
 c       the model state and update the tile edges. The control vector is  
 c       defined in the header file "ctrl.h".  
 c  
 c     started: Christian Eckert eckert@mit.edu 30-Jun-1999  
 c  
 c     changed: Christian Eckert eckert@mit.edu 23-Feb-2000  
 c  
 c              - Restructured the code in order to create a package  
 c                for the MITgcmUV.  
 c  
 c     ==================================================================  
 c     SUBROUTINE ctrl_map_ini  
 c     ==================================================================  
   
20        implicit none        implicit none
21    
22  c     == global variables ==  c     == global variables ==
   
 #include "EEPARAMS.h"  
23  #include "SIZE.h"  #include "SIZE.h"
24    #include "EEPARAMS.h"
25    #include "PARAMS.h"
26  #include "DYNVARS.h"  #include "DYNVARS.h"
27  #include "TR1.h"  #include "GRID.h"
   
28  #include "ctrl.h"  #include "ctrl.h"
29  #include "ctrl_dummy.h"  #include "ctrl_dummy.h"
30  #include "optim.h"  #include "optim.h"
31    #ifdef ALLOW_PTRACERS
32    # include "PTRACERS_SIZE.h"
33    # include "PTRACERS.h"
34    #endif
35    #ifdef ALLOW_ECCO
36    # include "ecco_cost.h"
37    #endif
38    
39    C     !INPUT/OUTPUT PARAMETERS:
40  c     == routine arguments ==  c     == routine arguments ==
   
41        integer mythid        integer mythid
42    
43    C     !LOCAL VARIABLES:
44  c     == local variables ==  c     == local variables ==
45    
       _RL     fac  
46        integer bi,bj        integer bi,bj
47        integer i,j,k        integer i,j,k
48        integer itlo,ithi        integer itlo,ithi
# Line 61  c     == local variables == Line 58  c     == local variables ==
58        character*( 80)   fnametheta        character*( 80)   fnametheta
59        character*( 80)   fnamesalt        character*( 80)   fnamesalt
60        character*( 80)   fnametr1        character*( 80)   fnametr1
61          character*( 80)   fnamediffkr
62          character*( 80)   fnamekapgm
63          character*( 80)   fnameefluxy
64          character*( 80)   fnameefluxp
65          character*( 80)   fnamebottomdrag
66    
67  c     == external ==        _RL     fac
68          _RL tmptest
69    
70    c     == external ==
71        integer  ilnblnk        integer  ilnblnk
72        external ilnblnk        external ilnblnk
73    
74  c     == end of interface ==  c     == end of interface ==
75    CEOP
76    
77        jtlo = mybylo(mythid)        jtlo = mybylo(mythid)
78        jthi = mybyhi(mythid)        jthi = mybyhi(mythid)
79        itlo = mybxlo(mythid)        itlo = mybxlo(mythid)
80        ithi = mybxhi(mythid)        ithi = mybxhi(mythid)
81        jmin = 1-oly        jmin = 1
82        jmax = sny+oly        jmax = sny
83        imin = 1-olx        imin = 1
84        imax = snx+olx        imax = snx
85    
86        doglobalread = .false.        doglobalread = .false.
87        ladinit      = .false.        ladinit      = .false.
# Line 94  c--   Temperature field. Line 99  c--   Temperature field.
99        il=ilnblnk( xx_theta_file )        il=ilnblnk( xx_theta_file )
100        write(fnametheta(1:80),'(2a,i10.10)')        write(fnametheta(1:80),'(2a,i10.10)')
101       &     xx_theta_file(1:il),'.',optimcycle       &     xx_theta_file(1:il),'.',optimcycle
102        call active_read_xyz( fnametheta, tmpfld3d, 1,        call active_read_xyz_loc( fnametheta, tmpfld3d, 1,
103       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
104       &                      mythid, xx_theta_dummy )       &                      mythid, xx_theta_dummy )
105    
# Line 103  c--   Temperature field. Line 108  c--   Temperature field.
108            do k = 1,nr            do k = 1,nr
109              do j = jmin,jmax              do j = jmin,jmax
110                do i = imin,imax                do i = imin,imax
111    #ifdef ALLOW_ECCO
112                   IF (abs(tmpfld3d(i,j,k,bi,bj)).gt.
113         $          2.0/sqrt(wtheta(k,bi,bj)))
114         $          tmpfld3d(i,j,k,bi,bj)=
115         $          sign(2.0/sqrt(wtheta(k,bi,bj)),tmpfld3d(i,j,k,bi,bj))
116    #endif
117                  theta(i,j,k,bi,bj) = theta(i,j,k,bi,bj) +                  theta(i,j,k,bi,bj) = theta(i,j,k,bi,bj) +
118       &                               fac*tmpfld3d(i,j,k,bi,bj)       &                               fac*tmpfld3d(i,j,k,bi,bj)
119                  gtNm1(i,j,k,bi,bj) = gtNm1(i,j,k,bi,bj) +                  if(theta(i,j,k,bi,bj).lt.-2.0)
120       &                               fac*tmpfld3d(i,j,k,bi,bj)       &               theta(i,j,k,bi,bj)= -2.0
121                enddo                enddo
122              enddo              enddo
123            enddo            enddo
124         enddo         enddo
125        enddo        enddo
126    
127  #endif  #endif
128    
129  #ifdef ALLOW_SALT0_CONTROL  #ifdef ALLOW_SALT0_CONTROL
# Line 119  c--   Temperature field. Line 131  c--   Temperature field.
131        il=ilnblnk( xx_salt_file )        il=ilnblnk( xx_salt_file )
132        write(fnamesalt(1:80),'(2a,i10.10)')        write(fnamesalt(1:80),'(2a,i10.10)')
133       &     xx_salt_file(1:il),'.',optimcycle       &     xx_salt_file(1:il),'.',optimcycle
134        call active_read_xyz( fnamesalt, tmpfld3d, 1,        call active_read_xyz_loc( fnamesalt, tmpfld3d, 1,
135       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
136       &                      mythid, xx_salt_dummy )       &                      mythid, xx_salt_dummy )
137    
# Line 128  c--   Temperature field. Line 140  c--   Temperature field.
140            do k = 1,nr            do k = 1,nr
141              do j = jmin,jmax              do j = jmin,jmax
142                do i = imin,imax                do i = imin,imax
143    #ifdef ALLOW_ECCO
144                   IF (abs(tmpfld3d(i,j,k,bi,bj)).gt.
145         $          2.0/sqrt(wsalt(k,bi,bj)))
146         $          tmpfld3d(i,j,k,bi,bj)=
147         $          sign(2.0/sqrt(wsalt(k,bi,bj)),tmpfld3d(i,j,k,bi,bj))
148    #endif
149                  salt(i,j,k,bi,bj) = salt(i,j,k,bi,bj) +                  salt(i,j,k,bi,bj) = salt(i,j,k,bi,bj) +
150       &                               fac*tmpfld3d(i,j,k,bi,bj)       &                               fac*tmpfld3d(i,j,k,bi,bj)
151                  gsNm1(i,j,k,bi,bj) = gsNm1(i,j,k,bi,bj) +  
      &                               fac*tmpfld3d(i,j,k,bi,bj)  
152                enddo                enddo
153              enddo              enddo
154            enddo            enddo
155         enddo         enddo
156        enddo        enddO
157  #endif  #endif
158    
159  #ifdef ALLOW_TR10_CONTROL  #ifdef ALLOW_TR10_CONTROL
160    #ifdef ALLOW_PTRACERS
161  c--   Temperature field.  c--   Temperature field.
162        il=ilnblnk( xx_tr1_file )        il=ilnblnk( xx_tr1_file )
163        write(fnametr1(1:80),'(2a,i10.10)')        write(fnametr1(1:80),'(2a,i10.10)')
164       &     xx_tr1_file(1:il),'.',optimcycle       &     xx_tr1_file(1:il),'.',optimcycle
165        call active_read_xyz( fnametr1, tmpfld3d, 1,        call active_read_xyz_loc( fnametr1, tmpfld3d, 1,
166       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
167       &                      mythid, xx_tr1_dummy )       &                      mythid, xx_tr1_dummy )
168    
# Line 153  c--   Temperature field. Line 171  c--   Temperature field.
171            do k = 1,nr            do k = 1,nr
172              do j = jmin,jmax              do j = jmin,jmax
173                do i = imin,imax                do i = imin,imax
174                  tr1(i,j,k,bi,bj) = tr1(i,j,k,bi,bj) +                  ptracer(i,j,k,bi,bj,1) = ptracer(i,j,k,bi,bj,1) +
      &                               fac*tmpfld3d(i,j,k,bi,bj)  
                 gsNm1(i,j,k,bi,bj) = gsNm1(i,j,k,bi,bj) +  
175       &                               fac*tmpfld3d(i,j,k,bi,bj)       &                               fac*tmpfld3d(i,j,k,bi,bj)
176                enddo                enddo
177              enddo              enddo
# Line 163  c--   Temperature field. Line 179  c--   Temperature field.
179         enddo         enddo
180        enddo        enddo
181  #endif  #endif
182    #endif
183    
184    #ifdef ALLOW_DIFFKR_CONTROL
185    c--   diffkr.
186          il=ilnblnk( xx_diffkr_file )
187          write(fnamediffkr(1:80),'(2a,i10.10)')
188         &     xx_diffkr_file(1:il),'.',optimcycle
189          call active_read_xyz_loc( fnamediffkr, tmpfld3d, 1,
190         &                      doglobalread, ladinit, optimcycle,
191         &                      mythid, xx_diffkr_dummy )
192          do bj = jtlo,jthi
193            do bi = itlo,ithi
194              do k = 1,nr
195                do j = jmin,jmax
196                  do i = imin,imax
197                    diffkr(i,j,k,bi,bj) = diffkr(i,j,k,bi,bj) +
198         &                                tmpfld3d(i,j,k,bi,bj)
199                  enddo
200                enddo
201              enddo
202           enddo
203          enddo
204    #endif
205    
206    #ifdef ALLOW_KAPGM_CONTROL
207    c--   kapgm.
208          il=ilnblnk( xx_kapgm_file )
209          write(fnamekapgm(1:80),'(2a,i10.10)')
210         &     xx_kapgm_file(1:il),'.',optimcycle
211          call active_read_xyz_loc( fnamekapgm, tmpfld3d, 1,
212         &                      doglobalread, ladinit, optimcycle,
213         &                      mythid, xx_kapgm_dummy )
214          do bj = jtlo,jthi
215            do bi = itlo,ithi
216              do k = 1,nr
217                do j = jmin,jmax
218                  do i = imin,imax
219                    kapgm(i,j,k,bi,bj) = kapgm(i,j,k,bi,bj) +
220         &                               tmpfld3d(i,j,k,bi,bj)
221                  enddo
222                enddo
223              enddo
224           enddo
225          enddo
226    #endif
227    
228    #ifdef ALLOW_EFLUXY0_CONTROL
229    c--   y-component EP-flux field.
230          il=ilnblnk( xx_efluxy_file )
231          write(fnameefluxy(1:80),'(2a,i10.10)')
232         &     xx_efluxy_file(1:il),'.',optimcycle
233          call active_read_xyz_loc( fnameefluxy, tmpfld3d, 1,
234         &                      doglobalread, ladinit, optimcycle,
235         &                      mythid, xx_efluxy_dummy )
236    
237          do bj = jtlo,jthi
238            do bi = itlo,ithi
239              do k = 1,nr
240                do j = jmin,jmax
241                  do i = imin,imax
242                    EfluxY(i,j,k,bi,bj) = EfluxY(i,j,k,bi,bj)
243         &                                - fac*tmpfld3d(i,j,k,bi,bj)
244         &                                  *maskS(i,j,k,bi,bj)
245    cph                EfluxY(i,j,k,bi,bj) = EfluxY(i,j,k,bi,bj)
246    cph     &                                - rSphere*cosFacU(J,bi,bj)
247    cph     &                                  *fac*tmpfld3d(i,j,k,bi,bj)
248                  enddo
249                enddo
250              enddo
251           enddo
252          enddo
253    #endif
254    
255    #ifdef ALLOW_EFLUXP0_CONTROL
256    c--   p-component EP-flux field.
257          il=ilnblnk( xx_efluxp_file )
258          write(fnameefluxp(1:80),'(2a,i10.10)')
259         &     xx_efluxp_file(1:il),'.',optimcycle
260          call active_read_xyz_loc( fnameefluxp, tmpfld3d, 1,
261         &                      doglobalread, ladinit, optimcycle,
262         &                      mythid, xx_efluxp_dummy )
263    
264          do bj = jtlo,jthi
265            do bi = itlo,ithi
266              do k = 1,nr
267                do j = jmin,jmax
268                  do i = imin,imax
269                    EfluxP(i,j,k,bi,bj) = EfluxP(i,j,k,bi,bj)
270         &                                + fCori(i,j,bi,bj)
271         &                                  *fac*tmpfld3d(i,j,k,bi,bj)
272         &                                  *hFacV(i,j,k,bi,bj)
273    cph                EfluxP(i,j,k,bi,bj) = EfluxP(i,j,k,bi,bj)
274    cph     &                                + fCori(i,j,bi,bj)
275    cph     &                                  *rSphere*cosFacU(J,bi,bj)
276    cph     &                                  *fac*tmpfld3d(i,j,k,bi,bj)
277                  enddo
278                enddo
279              enddo
280           enddo
281          enddo
282    #endif
283    
284    #ifdef ALLOW_BOTTOMDRAG_CONTROL
285    c--   bottom drag
286          il=ilnblnk( xx_bottomdrag_file )
287          write(fnamebottomdrag(1:80),'(2a,i10.10)')
288         &     xx_bottomdrag_file(1:il),'.',optimcycle
289          call active_read_xy_loc ( fnamebottomdrag, tmpfld2d, 1,
290         &                      doglobalread, ladinit, optimcycle,
291         &                      mythid, xx_bottomdrag_dummy )
292          do bj = jtlo,jthi
293            do bi = itlo,ithi
294              do j = jmin,jmax
295                do i = imin,imax
296                  bottomdragfld(i,j,bi,bj) = bottomdragfld(i,j,bi,bj)
297         &                                   + tmpfld2d(i,j,bi,bj)
298                enddo
299              enddo
300            enddo
301          enddo
302    #endif
303    
304    
305  c--   Update the tile edges.  c--   Update the tile edges.
306    
307  #ifdef ALLOW_THETA0_CONTROL  #ifdef ALLOW_THETA0_CONTROL
308        _EXCH_XYZ_R8( theta, mythid )        _EXCH_XYZ_R8( theta, mythid )
       _EXCH_XYZ_R8( gtNm1, mythid )  
309  #endif  #endif
310  #ifdef ALLOW_SALT0_CONTROL  #ifdef ALLOW_SALT0_CONTROL
311        _EXCH_XYZ_R8(  salt, mythid )        _EXCH_XYZ_R8(  salt, mythid )
       _EXCH_XYZ_R8( gsNm1, mythid )  
312  #endif  #endif
313  #ifdef ALLOW_TR10_CONTROL  #ifdef ALLOW_TR10_CONTROL
314        _EXCH_XYZ_R8(  tr1, mythid )  #ifdef ALLOW_PTRACERS
315        _EXCH_XYZ_R8( gTr1Nm1, mythid )        _EXCH_XYZ_R8(pTracer(1-Olx,1-Oly,1,1,1,1),myThid)
316    #endif
317    #endif
318    #ifdef ALLOW_DIFFKR_CONTROL
319          _EXCH_XYZ_R8( diffkr, mythid)
320  #endif  #endif
321    #ifdef ALLOW_KAPGM_CONTROL
322          _EXCH_XYZ_R8( kapgm, mythid)
323    #endif
324    #ifdef ALLOW_EFLUXY0_CONTROL
325          _EXCH_XYZ_R8( EfluxY, mythid )
326    #endif
327    #ifdef ALLOW_EFLUXP0_CONTROL
328          _EXCH_XYZ_R8( EfluxP, mythid )
329    #endif
330    #ifdef ALLOW_BOTTOMDRAG_CONTROL
331          _EXCH_XY_R8( bottomdragfld, mythid )
332    #endif
333    
334    
335        return        return
336        end        end

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.13

  ViewVC Help
Powered by ViewVC 1.1.22