/[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.3 by heimbach, Mon Aug 13 18:10:26 2001 UTC revision 1.14 by heimbach, Tue Nov 16 05:42:12 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 63  c     == local variables == Line 60  c     == local variables ==
60        character*( 80)   fnametr1        character*( 80)   fnametr1
61        character*( 80)   fnamediffkr        character*( 80)   fnamediffkr
62        character*( 80)   fnamekapgm        character*( 80)   fnamekapgm
63          character*( 80)   fnameefluxy
64          character*( 80)   fnameefluxp
65          character*( 80)   fnamebottomdrag
66          character*( 80)   fnamesss
67          character*( 80)   fnamesst
68    
69  c     == external ==        _RL     fac
70          _RL tmptest
71    
72    c     == external ==
73        integer  ilnblnk        integer  ilnblnk
74        external ilnblnk        external ilnblnk
75    
76  c     == end of interface ==  c     == end of interface ==
77    CEOP
78    
79        jtlo = mybylo(mythid)        jtlo = mybylo(mythid)
80        jthi = mybyhi(mythid)        jthi = mybyhi(mythid)
81        itlo = mybxlo(mythid)        itlo = mybxlo(mythid)
82        ithi = mybxhi(mythid)        ithi = mybxhi(mythid)
83        jmin = 1-oly        jmin = 1
84        jmax = sny+oly        jmax = sny
85        imin = 1-olx        imin = 1
86        imax = snx+olx        imax = snx
87    
88        doglobalread = .false.        doglobalread = .false.
89        ladinit      = .false.        ladinit      = .false.
# Line 96  c--   Temperature field. Line 101  c--   Temperature field.
101        il=ilnblnk( xx_theta_file )        il=ilnblnk( xx_theta_file )
102        write(fnametheta(1:80),'(2a,i10.10)')        write(fnametheta(1:80),'(2a,i10.10)')
103       &     xx_theta_file(1:il),'.',optimcycle       &     xx_theta_file(1:il),'.',optimcycle
104        call active_read_xyz( fnametheta, tmpfld3d, 1,        call active_read_xyz_loc( fnametheta, tmpfld3d, 1,
105       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
106       &                      mythid, xx_theta_dummy )       &                      mythid, xx_theta_dummy )
107    
# Line 105  c--   Temperature field. Line 110  c--   Temperature field.
110            do k = 1,nr            do k = 1,nr
111              do j = jmin,jmax              do j = jmin,jmax
112                do i = imin,imax                do i = imin,imax
113    #ifdef ALLOW_ECCO
114                   IF (abs(tmpfld3d(i,j,k,bi,bj)).gt.
115         $          2.0/sqrt(wtheta(k,bi,bj)))
116         $          tmpfld3d(i,j,k,bi,bj)=
117         $          sign(2.0/sqrt(wtheta(k,bi,bj)),tmpfld3d(i,j,k,bi,bj))
118    #endif
119                  theta(i,j,k,bi,bj) = theta(i,j,k,bi,bj) +                  theta(i,j,k,bi,bj) = theta(i,j,k,bi,bj) +
120       &                               fac*tmpfld3d(i,j,k,bi,bj)       &                               fac*tmpfld3d(i,j,k,bi,bj)
121                  gtNm1(i,j,k,bi,bj) = gtNm1(i,j,k,bi,bj) +                  if(theta(i,j,k,bi,bj).lt.-2.0)
122       &                               fac*tmpfld3d(i,j,k,bi,bj)       &               theta(i,j,k,bi,bj)= -2.0
123                enddo                enddo
124              enddo              enddo
125            enddo            enddo
126         enddo         enddo
127        enddo        enddo
128    
129  #endif  #endif
130    
131  #ifdef ALLOW_SALT0_CONTROL  #ifdef ALLOW_SALT0_CONTROL
# Line 121  c--   Temperature field. Line 133  c--   Temperature field.
133        il=ilnblnk( xx_salt_file )        il=ilnblnk( xx_salt_file )
134        write(fnamesalt(1:80),'(2a,i10.10)')        write(fnamesalt(1:80),'(2a,i10.10)')
135       &     xx_salt_file(1:il),'.',optimcycle       &     xx_salt_file(1:il),'.',optimcycle
136        call active_read_xyz( fnamesalt, tmpfld3d, 1,        call active_read_xyz_loc( fnamesalt, tmpfld3d, 1,
137       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
138       &                      mythid, xx_salt_dummy )       &                      mythid, xx_salt_dummy )
139    
# Line 130  c--   Temperature field. Line 142  c--   Temperature field.
142            do k = 1,nr            do k = 1,nr
143              do j = jmin,jmax              do j = jmin,jmax
144                do i = imin,imax                do i = imin,imax
145    #ifdef ALLOW_ECCO
146                   IF (abs(tmpfld3d(i,j,k,bi,bj)).gt.
147         $          2.0/sqrt(wsalt(k,bi,bj)))
148         $          tmpfld3d(i,j,k,bi,bj)=
149         $          sign(2.0/sqrt(wsalt(k,bi,bj)),tmpfld3d(i,j,k,bi,bj))
150    #endif
151                  salt(i,j,k,bi,bj) = salt(i,j,k,bi,bj) +                  salt(i,j,k,bi,bj) = salt(i,j,k,bi,bj) +
152       &                               fac*tmpfld3d(i,j,k,bi,bj)       &                               fac*tmpfld3d(i,j,k,bi,bj)
153                  gsNm1(i,j,k,bi,bj) = gsNm1(i,j,k,bi,bj) +  
      &                               fac*tmpfld3d(i,j,k,bi,bj)  
154                enddo                enddo
155              enddo              enddo
156            enddo            enddo
157         enddo         enddo
158        enddo        enddO
159  #endif  #endif
160    
161  #ifdef ALLOW_TR10_CONTROL  #ifdef ALLOW_TR10_CONTROL
162    #ifdef ALLOW_PTRACERS
163  c--   Temperature field.  c--   Temperature field.
164        il=ilnblnk( xx_tr1_file )        il=ilnblnk( xx_tr1_file )
165        write(fnametr1(1:80),'(2a,i10.10)')        write(fnametr1(1:80),'(2a,i10.10)')
166       &     xx_tr1_file(1:il),'.',optimcycle       &     xx_tr1_file(1:il),'.',optimcycle
167        call active_read_xyz( fnametr1, tmpfld3d, 1,        call active_read_xyz_loc( fnametr1, tmpfld3d, 1,
168       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
169       &                      mythid, xx_tr1_dummy )       &                      mythid, xx_tr1_dummy )
170    
# Line 155  c--   Temperature field. Line 173  c--   Temperature field.
173            do k = 1,nr            do k = 1,nr
174              do j = jmin,jmax              do j = jmin,jmax
175                do i = imin,imax                do i = imin,imax
176                  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) +  
177       &                               fac*tmpfld3d(i,j,k,bi,bj)       &                               fac*tmpfld3d(i,j,k,bi,bj)
178                enddo                enddo
179              enddo              enddo
# Line 165  c--   Temperature field. Line 181  c--   Temperature field.
181         enddo         enddo
182        enddo        enddo
183  #endif  #endif
184    #endif
185    
186    #ifdef ALLOW_SST0_CONTROL
187    c--   sst0.
188          il=ilnblnk( xx_sst_file )
189          write(fnamesst(1:80),'(2a,i10.10)')
190         &     xx_sst_file(1:il),'.',optimcycle
191          call active_read_xy_loc ( fnamesst, tmpfld2d, 1,
192         &                      doglobalread, ladinit, optimcycle,
193         &                      mythid, xx_sst_dummy )
194          do bj = jtlo,jthi
195            do bi = itlo,ithi
196              do j = jmin,jmax
197                do i = imin,imax
198    cph              sst(i,j,bi,bj) = sst(i,j,bi,bj) + tmpfld2d(i,j,bi,bj)
199                  theta(i,j,1,bi,bj) = theta(i,j,1,bi,bj)
200         &                             + tmpfld2d(i,j,bi,bj)
201                enddo
202              enddo
203            enddo
204          enddo
205    #endif
206    
207    #ifdef ALLOW_SSS0_CONTROL
208    c--   sss0.
209          il=ilnblnk( xx_sss_file )
210          write(fnamesss(1:80),'(2a,i10.10)')
211         &     xx_sss_file(1:il),'.',optimcycle
212          call active_read_xy_loc ( fnamesss, tmpfld2d, 1,
213         &                      doglobalread, ladinit, optimcycle,
214         &                      mythid, xx_sss_dummy )
215          do bj = jtlo,jthi
216            do bi = itlo,ithi
217              do j = jmin,jmax
218                do i = imin,imax
219    cph              sss(i,j,bi,bj) = sss(i,j,bi,bj) + tmpfld2d(i,j,bi,bj)
220                  salt(i,j,1,bi,bj) = salt(i,j,1,bi,bj)
221         &                             + tmpfld2d(i,j,bi,bj)
222                enddo
223              enddo
224            enddo
225          enddo
226    #endif
227    
228  #ifdef ALLOW_DIFFKR_CONTROL  #ifdef ALLOW_DIFFKR_CONTROL
229  c--   diffkr.  c--   diffkr.
230        il=ilnblnk( xx_diffkr_file )        il=ilnblnk( xx_diffkr_file )
231        write(fnamediffkr(1:80),'(2a,i10.10)')        write(fnamediffkr(1:80),'(2a,i10.10)')
232       &     xx_diffkr_file(1:il),'.',optimcycle       &     xx_diffkr_file(1:il),'.',optimcycle
233        call active_read_xyz( fnamediffkr, tmpfld3d, 1,        call active_read_xyz_loc( fnamediffkr, tmpfld3d, 1,
234       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
235       &                      mythid, xx_diffkr_dummy )       &                      mythid, xx_diffkr_dummy )
236        do bj = jtlo,jthi        do bj = jtlo,jthi
# Line 193  c--   kapgm. Line 252  c--   kapgm.
252        il=ilnblnk( xx_kapgm_file )        il=ilnblnk( xx_kapgm_file )
253        write(fnamekapgm(1:80),'(2a,i10.10)')        write(fnamekapgm(1:80),'(2a,i10.10)')
254       &     xx_kapgm_file(1:il),'.',optimcycle       &     xx_kapgm_file(1:il),'.',optimcycle
255        call active_read_xyz( fnamekapgm, tmpfld3d, 1,        call active_read_xyz_loc( fnamekapgm, tmpfld3d, 1,
256       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
257       &                      mythid, xx_kapgm_dummy )       &                      mythid, xx_kapgm_dummy )
258        do bj = jtlo,jthi        do bj = jtlo,jthi
# Line 210  c--   kapgm. Line 269  c--   kapgm.
269        enddo        enddo
270  #endif  #endif
271    
272    #ifdef ALLOW_EFLUXY0_CONTROL
273    c--   y-component EP-flux field.
274          il=ilnblnk( xx_efluxy_file )
275          write(fnameefluxy(1:80),'(2a,i10.10)')
276         &     xx_efluxy_file(1:il),'.',optimcycle
277          call active_read_xyz_loc( fnameefluxy, tmpfld3d, 1,
278         &                      doglobalread, ladinit, optimcycle,
279         &                      mythid, xx_efluxy_dummy )
280    
281          do bj = jtlo,jthi
282            do bi = itlo,ithi
283              do k = 1,nr
284                do j = jmin,jmax
285                  do i = imin,imax
286                    EfluxY(i,j,k,bi,bj) = EfluxY(i,j,k,bi,bj)
287         &                                - fac*tmpfld3d(i,j,k,bi,bj)
288         &                                  *maskS(i,j,k,bi,bj)
289    cph                EfluxY(i,j,k,bi,bj) = EfluxY(i,j,k,bi,bj)
290    cph     &                                - rSphere*cosFacU(J,bi,bj)
291    cph     &                                  *fac*tmpfld3d(i,j,k,bi,bj)
292                  enddo
293                enddo
294              enddo
295           enddo
296          enddo
297    #endif
298    
299    #ifdef ALLOW_EFLUXP0_CONTROL
300    c--   p-component EP-flux field.
301          il=ilnblnk( xx_efluxp_file )
302          write(fnameefluxp(1:80),'(2a,i10.10)')
303         &     xx_efluxp_file(1:il),'.',optimcycle
304          call active_read_xyz_loc( fnameefluxp, tmpfld3d, 1,
305         &                      doglobalread, ladinit, optimcycle,
306         &                      mythid, xx_efluxp_dummy )
307    
308          do bj = jtlo,jthi
309            do bi = itlo,ithi
310              do k = 1,nr
311                do j = jmin,jmax
312                  do i = imin,imax
313                    EfluxP(i,j,k,bi,bj) = EfluxP(i,j,k,bi,bj)
314         &                                + fCori(i,j,bi,bj)
315         &                                  *fac*tmpfld3d(i,j,k,bi,bj)
316         &                                  *hFacV(i,j,k,bi,bj)
317    cph                EfluxP(i,j,k,bi,bj) = EfluxP(i,j,k,bi,bj)
318    cph     &                                + fCori(i,j,bi,bj)
319    cph     &                                  *rSphere*cosFacU(J,bi,bj)
320    cph     &                                  *fac*tmpfld3d(i,j,k,bi,bj)
321                  enddo
322                enddo
323              enddo
324           enddo
325          enddo
326    #endif
327    
328    #ifdef ALLOW_BOTTOMDRAG_CONTROL
329    c--   bottom drag
330          il=ilnblnk( xx_bottomdrag_file )
331          write(fnamebottomdrag(1:80),'(2a,i10.10)')
332         &     xx_bottomdrag_file(1:il),'.',optimcycle
333          call active_read_xy_loc ( fnamebottomdrag, tmpfld2d, 1,
334         &                      doglobalread, ladinit, optimcycle,
335         &                      mythid, xx_bottomdrag_dummy )
336          do bj = jtlo,jthi
337            do bi = itlo,ithi
338              do j = jmin,jmax
339                do i = imin,imax
340                  bottomdragfld(i,j,bi,bj) = bottomdragfld(i,j,bi,bj)
341         &                                   + tmpfld2d(i,j,bi,bj)
342                enddo
343              enddo
344            enddo
345          enddo
346    #endif
347    
348    
349  c--   Update the tile edges.  c--   Update the tile edges.
350    
351  #ifdef ALLOW_THETA0_CONTROL  #if (defined (ALLOW_THETA0_CONTROL) || defined (ALLOW_SST0_CONTROL))
352        _EXCH_XYZ_R8( theta, mythid )        _EXCH_XYZ_R8( theta, mythid )
       _EXCH_XYZ_R8( gtNm1, mythid )  
353  #endif  #endif
354  #ifdef ALLOW_SALT0_CONTROL  #if (defined (ALLOW_SALT0_CONTROL) || defined (ALLOW_SSS0_CONTROL))
355        _EXCH_XYZ_R8(  salt, mythid )        _EXCH_XYZ_R8(  salt, mythid )
       _EXCH_XYZ_R8( gsNm1, mythid )  
356  #endif  #endif
357  #ifdef ALLOW_TR10_CONTROL  #ifdef ALLOW_TR10_CONTROL
358        _EXCH_XYZ_R8(     tr1, mythid )  #ifdef ALLOW_PTRACERS
359        _EXCH_XYZ_R8( gTr1Nm1, mythid )        _EXCH_XYZ_R8(pTracer(1-Olx,1-Oly,1,1,1,1),myThid)
360    #endif
361  #endif  #endif
362  #ifdef ALLOW_DIFFKR_CONTROL  #ifdef ALLOW_DIFFKR_CONTROL
363        _EXCH_XYZ_R8( diffkr, mythid)        _EXCH_XYZ_R8( diffkr, mythid)
# Line 231  c--   Update the tile edges. Line 365  c--   Update the tile edges.
365  #ifdef ALLOW_KAPGM_CONTROL  #ifdef ALLOW_KAPGM_CONTROL
366        _EXCH_XYZ_R8( kapgm, mythid)        _EXCH_XYZ_R8( kapgm, mythid)
367  #endif  #endif
368    #ifdef ALLOW_EFLUXY0_CONTROL
369          _EXCH_XYZ_R8( EfluxY, mythid )
370    #endif
371    #ifdef ALLOW_EFLUXP0_CONTROL
372          _EXCH_XYZ_R8( EfluxP, mythid )
373    #endif
374    #ifdef ALLOW_BOTTOMDRAG_CONTROL
375          _EXCH_XY_R8( bottomdragfld, mythid )
376    #endif
377    
378    
379        return        return

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.14

  ViewVC Help
Powered by ViewVC 1.1.22