/[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.1 by heimbach, Sun Mar 25 22:33:55 2001 UTC revision 1.15 by heimbach, Mon Feb 28 17:29:38 2005 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 "GRID.h"
27  #include "DYNVARS.h"  #include "DYNVARS.h"
28    #include "FFIELDS.h"
29  #include "ctrl.h"  #include "ctrl.h"
30  #include "ctrl_dummy.h"  #include "ctrl_dummy.h"
31    #include "optim.h"
32    #ifdef ALLOW_PTRACERS
33    # include "PTRACERS_SIZE.h"
34    # include "PTRACERS.h"
35    #endif
36    #ifdef ALLOW_ECCO
37    # include "ecco_cost.h"
38    #endif
39    
40    C     !INPUT/OUTPUT PARAMETERS:
41  c     == routine arguments ==  c     == routine arguments ==
   
42        integer mythid        integer mythid
43    
44    C     !LOCAL VARIABLES:
45  c     == local variables ==  c     == local variables ==
46    
       _RL     fac  
47        integer bi,bj        integer bi,bj
48        integer i,j,k        integer i,j,k
49        integer itlo,ithi        integer itlo,ithi
# Line 58  c     == local variables == Line 58  c     == local variables ==
58    
59        character*( 80)   fnametheta        character*( 80)   fnametheta
60        character*( 80)   fnamesalt        character*( 80)   fnamesalt
61          character*( 80)   fnametr1
62          character*( 80)   fnamediffkr
63          character*( 80)   fnamekapgm
64          character*( 80)   fnameefluxy
65          character*( 80)   fnameefluxp
66          character*( 80)   fnamebottomdrag
67          character*( 80)   fnamesss
68          character*( 80)   fnamesst
69          character*( 80)   fnameedtaux
70          character*( 80)   fnameedtauy
71    
72  c     == external ==        _RL     fac
73          _RL tmptest
74    
75    c     == external ==
76        integer  ilnblnk        integer  ilnblnk
77        external ilnblnk        external ilnblnk
78    
79  c     == end of interface ==  c     == end of interface ==
80    CEOP
81    
82        jtlo = mybylo(mythid)        jtlo = mybylo(mythid)
83        jthi = mybyhi(mythid)        jthi = mybyhi(mythid)
84        itlo = mybxlo(mythid)        itlo = mybxlo(mythid)
85        ithi = mybxhi(mythid)        ithi = mybxhi(mythid)
86        jmin = 1-oly        jmin = 1
87        jmax = sny+oly        jmax = sny
88        imin = 1-olx        imin = 1
89        imax = snx+olx        imax = snx
90    
91        doglobalread = .false.        doglobalread = .false.
92        ladinit      = .false.        ladinit      = .false.
# Line 91  c--   Temperature field. Line 104  c--   Temperature field.
104        il=ilnblnk( xx_theta_file )        il=ilnblnk( xx_theta_file )
105        write(fnametheta(1:80),'(2a,i10.10)')        write(fnametheta(1:80),'(2a,i10.10)')
106       &     xx_theta_file(1:il),'.',optimcycle       &     xx_theta_file(1:il),'.',optimcycle
107        call active_read_xyz( fnametheta, tmpfld3d, 1,        call active_read_xyz_loc( fnametheta, tmpfld3d, 1,
108       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
109       &                      mythid, xx_theta_dummy )       &                      mythid, xx_theta_dummy )
110    
# Line 100  c--   Temperature field. Line 113  c--   Temperature field.
113            do k = 1,nr            do k = 1,nr
114              do j = jmin,jmax              do j = jmin,jmax
115                do i = imin,imax                do i = imin,imax
116    #ifdef ALLOW_ECCO
117                   IF (abs(tmpfld3d(i,j,k,bi,bj)).gt.
118         $          2.0/sqrt(wtheta(k,bi,bj)))
119         $          tmpfld3d(i,j,k,bi,bj)=
120         $          sign(2.0/sqrt(wtheta(k,bi,bj)),tmpfld3d(i,j,k,bi,bj))
121    #endif
122                  theta(i,j,k,bi,bj) = theta(i,j,k,bi,bj) +                  theta(i,j,k,bi,bj) = theta(i,j,k,bi,bj) +
123       &                               fac*tmpfld3d(i,j,k,bi,bj)       &                               fac*tmpfld3d(i,j,k,bi,bj)
124                  gtNm1(i,j,k,bi,bj) = gtNm1(i,j,k,bi,bj) +                  if(theta(i,j,k,bi,bj).lt.-2.0)
125       &                               fac*tmpfld3d(i,j,k,bi,bj)       &               theta(i,j,k,bi,bj)= -2.0
126                enddo                enddo
127              enddo              enddo
128            enddo            enddo
129         enddo         enddo
130        enddo        enddo
131    
132  #endif  #endif
133    
134  #ifdef ALLOW_SALT0_CONTROL  #ifdef ALLOW_SALT0_CONTROL
# Line 116  c--   Temperature field. Line 136  c--   Temperature field.
136        il=ilnblnk( xx_salt_file )        il=ilnblnk( xx_salt_file )
137        write(fnamesalt(1:80),'(2a,i10.10)')        write(fnamesalt(1:80),'(2a,i10.10)')
138       &     xx_salt_file(1:il),'.',optimcycle       &     xx_salt_file(1:il),'.',optimcycle
139        call active_read_xyz( fnamesalt, tmpfld3d, 1,        call active_read_xyz_loc( fnamesalt, tmpfld3d, 1,
140       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
141       &                      mythid, xx_salt_dummy )       &                      mythid, xx_salt_dummy )
142    
# Line 125  c--   Temperature field. Line 145  c--   Temperature field.
145            do k = 1,nr            do k = 1,nr
146              do j = jmin,jmax              do j = jmin,jmax
147                do i = imin,imax                do i = imin,imax
148    #ifdef ALLOW_ECCO
149                   IF (abs(tmpfld3d(i,j,k,bi,bj)).gt.
150         $          2.0/sqrt(wsalt(k,bi,bj)))
151         $          tmpfld3d(i,j,k,bi,bj)=
152         $          sign(2.0/sqrt(wsalt(k,bi,bj)),tmpfld3d(i,j,k,bi,bj))
153    #endif
154                  salt(i,j,k,bi,bj) = salt(i,j,k,bi,bj) +                  salt(i,j,k,bi,bj) = salt(i,j,k,bi,bj) +
155       &                               fac*tmpfld3d(i,j,k,bi,bj)       &                               fac*tmpfld3d(i,j,k,bi,bj)
156                  gsNm1(i,j,k,bi,bj) = gsNm1(i,j,k,bi,bj) +  
157                  enddo
158                enddo
159              enddo
160           enddo
161          enddO
162    #endif
163    
164    #ifdef ALLOW_TR10_CONTROL
165    #ifdef ALLOW_PTRACERS
166    c--   Temperature field.
167          il=ilnblnk( xx_tr1_file )
168          write(fnametr1(1:80),'(2a,i10.10)')
169         &     xx_tr1_file(1:il),'.',optimcycle
170          call active_read_xyz_loc( fnametr1, tmpfld3d, 1,
171         &                      doglobalread, ladinit, optimcycle,
172         &                      mythid, xx_tr1_dummy )
173    
174          do bj = jtlo,jthi
175            do bi = itlo,ithi
176              do k = 1,nr
177                do j = jmin,jmax
178                  do i = imin,imax
179                    ptracer(i,j,k,bi,bj,1) = ptracer(i,j,k,bi,bj,1) +
180       &                               fac*tmpfld3d(i,j,k,bi,bj)       &                               fac*tmpfld3d(i,j,k,bi,bj)
181                enddo                enddo
182              enddo              enddo
# Line 135  c--   Temperature field. Line 184  c--   Temperature field.
184         enddo         enddo
185        enddo        enddo
186  #endif  #endif
187    #endif
188    
189    #ifdef ALLOW_SST0_CONTROL
190    c--   sst0.
191          il=ilnblnk( xx_sst_file )
192          write(fnamesst(1:80),'(2a,i10.10)')
193         &     xx_sst_file(1:il),'.',optimcycle
194          call active_read_xy_loc ( fnamesst, tmpfld2d, 1,
195         &                      doglobalread, ladinit, optimcycle,
196         &                      mythid, xx_sst_dummy )
197          do bj = jtlo,jthi
198            do bi = itlo,ithi
199              do j = jmin,jmax
200                do i = imin,imax
201    cph              sst(i,j,bi,bj) = sst(i,j,bi,bj) + tmpfld2d(i,j,bi,bj)
202                  theta(i,j,1,bi,bj) = theta(i,j,1,bi,bj)
203         &                             + tmpfld2d(i,j,bi,bj)
204                enddo
205              enddo
206            enddo
207          enddo
208    #endif
209    
210    #ifdef ALLOW_SSS0_CONTROL
211    c--   sss0.
212          il=ilnblnk( xx_sss_file )
213          write(fnamesss(1:80),'(2a,i10.10)')
214         &     xx_sss_file(1:il),'.',optimcycle
215          call active_read_xy_loc ( fnamesss, tmpfld2d, 1,
216         &                      doglobalread, ladinit, optimcycle,
217         &                      mythid, xx_sss_dummy )
218          do bj = jtlo,jthi
219            do bi = itlo,ithi
220              do j = jmin,jmax
221                do i = imin,imax
222    cph              sss(i,j,bi,bj) = sss(i,j,bi,bj) + tmpfld2d(i,j,bi,bj)
223                  salt(i,j,1,bi,bj) = salt(i,j,1,bi,bj)
224         &                             + tmpfld2d(i,j,bi,bj)
225                enddo
226              enddo
227            enddo
228          enddo
229    #endif
230    
231    #ifdef ALLOW_DIFFKR_CONTROL
232    c--   diffkr.
233          il=ilnblnk( xx_diffkr_file )
234          write(fnamediffkr(1:80),'(2a,i10.10)')
235         &     xx_diffkr_file(1:il),'.',optimcycle
236          call active_read_xyz_loc( fnamediffkr, tmpfld3d, 1,
237         &                      doglobalread, ladinit, optimcycle,
238         &                      mythid, xx_diffkr_dummy )
239          do bj = jtlo,jthi
240            do bi = itlo,ithi
241              do k = 1,nr
242                do j = jmin,jmax
243                  do i = imin,imax
244                    diffkr(i,j,k,bi,bj) = diffkr(i,j,k,bi,bj) +
245         &                                tmpfld3d(i,j,k,bi,bj)
246                  enddo
247                enddo
248              enddo
249           enddo
250          enddo
251    #endif
252    
253    #ifdef ALLOW_KAPGM_CONTROL
254    c--   kapgm.
255          il=ilnblnk( xx_kapgm_file )
256          write(fnamekapgm(1:80),'(2a,i10.10)')
257         &     xx_kapgm_file(1:il),'.',optimcycle
258          call active_read_xyz_loc( fnamekapgm, tmpfld3d, 1,
259         &                      doglobalread, ladinit, optimcycle,
260         &                      mythid, xx_kapgm_dummy )
261          do bj = jtlo,jthi
262            do bi = itlo,ithi
263              do k = 1,nr
264                do j = jmin,jmax
265                  do i = imin,imax
266                    kapgm(i,j,k,bi,bj) = kapgm(i,j,k,bi,bj) +
267         &                               tmpfld3d(i,j,k,bi,bj)
268                  enddo
269                enddo
270              enddo
271           enddo
272          enddo
273    #endif
274    
275    #ifdef ALLOW_EFLUXY0_CONTROL
276    c--   y-component EP-flux field.
277          il=ilnblnk( xx_efluxy_file )
278          write(fnameefluxy(1:80),'(2a,i10.10)')
279         &     xx_efluxy_file(1:il),'.',optimcycle
280          call active_read_xyz_loc( fnameefluxy, tmpfld3d, 1,
281         &                      doglobalread, ladinit, optimcycle,
282         &                      mythid, xx_efluxy_dummy )
283    
284          do bj = jtlo,jthi
285            do bi = itlo,ithi
286              do k = 1,nr
287                do j = jmin,jmax
288                  do i = imin,imax
289                    EfluxY(i,j,k,bi,bj) = EfluxY(i,j,k,bi,bj)
290         &                                - fac*tmpfld3d(i,j,k,bi,bj)
291         &                                  *maskS(i,j,k,bi,bj)
292    cph                EfluxY(i,j,k,bi,bj) = EfluxY(i,j,k,bi,bj)
293    cph     &                                - rSphere*cosFacU(J,bi,bj)
294    cph     &                                  *fac*tmpfld3d(i,j,k,bi,bj)
295                  enddo
296                enddo
297              enddo
298           enddo
299          enddo
300    #endif
301    
302    #ifdef ALLOW_EFLUXP0_CONTROL
303    c--   p-component EP-flux field.
304          il=ilnblnk( xx_efluxp_file )
305          write(fnameefluxp(1:80),'(2a,i10.10)')
306         &     xx_efluxp_file(1:il),'.',optimcycle
307          call active_read_xyz_loc( fnameefluxp, tmpfld3d, 1,
308         &                      doglobalread, ladinit, optimcycle,
309         &                      mythid, xx_efluxp_dummy )
310    
311          do bj = jtlo,jthi
312            do bi = itlo,ithi
313              do k = 1,nr
314                do j = jmin,jmax
315                  do i = imin,imax
316                    EfluxP(i,j,k,bi,bj) = EfluxP(i,j,k,bi,bj)
317         &                                + fCori(i,j,bi,bj)
318         &                                  *fac*tmpfld3d(i,j,k,bi,bj)
319         &                                  *hFacV(i,j,k,bi,bj)
320    cph                EfluxP(i,j,k,bi,bj) = EfluxP(i,j,k,bi,bj)
321    cph     &                                + fCori(i,j,bi,bj)
322    cph     &                                  *rSphere*cosFacU(J,bi,bj)
323    cph     &                                  *fac*tmpfld3d(i,j,k,bi,bj)
324                  enddo
325                enddo
326              enddo
327           enddo
328          enddo
329    #endif
330    
331    #ifdef ALLOW_BOTTOMDRAG_CONTROL
332    c--   bottom drag
333          il=ilnblnk( xx_bottomdrag_file )
334          write(fnamebottomdrag(1:80),'(2a,i10.10)')
335         &     xx_bottomdrag_file(1:il),'.',optimcycle
336          call active_read_xy_loc ( fnamebottomdrag, tmpfld2d, 1,
337         &                      doglobalread, ladinit, optimcycle,
338         &                      mythid, xx_bottomdrag_dummy )
339          do bj = jtlo,jthi
340            do bi = itlo,ithi
341              do j = jmin,jmax
342                do i = imin,imax
343                  bottomdragfld(i,j,bi,bj) = bottomdragfld(i,j,bi,bj)
344         &                                   + tmpfld2d(i,j,bi,bj)
345                enddo
346              enddo
347            enddo
348          enddo
349    #endif
350    
351    fdef ALLOW_EDTAUX_CONTROL
352    c-- zonal eddy stress : edtaux
353          il=ilnblnk( xx_edtaux_file )
354          write(fnameedtaux(1:80),'(2a,i10.10)')
355         &     xx_edtaux_file(1:il),'.',optimcycle
356          call active_read_xyz( fnameedtaux, tmpfld3d, 1,
357         &                      doglobalread, ladinit, optimcycle,
358         &                      mythid, xx_edtaux_dummy )
359          do bj = jtlo,jthi
360            do bi = itlo,ithi
361              do k = 1,nr
362                do j = jmin,jmax
363                  do i = imin,imax
364                    Eddytaux(i,j,k,bi,bj) = Eddytaux(i,j,k,bi,bj) +
365         &                                tmpfld3d(i,j,k,bi,bj)
366                  enddo
367                enddo
368              enddo
369           enddo
370          enddo
371    #endif
372    
373    #ifdef ALLOW_EDTAUY_CONTROL
374    c-- meridional eddy stress : edtauy
375          il=ilnblnk( xx_edtauy_file )
376          write(fnameedtauy(1:80),'(2a,i10.10)')
377         &     xx_edtauy_file(1:il),'.',optimcycle
378          call active_read_xyz( fnameedtauy, tmpfld3d, 1,
379         &                      doglobalread, ladinit, optimcycle,
380         &                      mythid, xx_edtauy_dummy )
381          do bj = jtlo,jthi
382            do bi = itlo,ithi
383              do k = 1,nr
384                do j = jmin,jmax
385                  do i = imin,imax
386                    Eddytauy(i,j,k,bi,bj) = Eddytauy(i,j,k,bi,bj) +
387         &                                tmpfld3d(i,j,k,bi,bj)
388                  enddo
389                enddo
390              enddo
391           enddo
392          enddo
393    #endif
394    
395  c--   Update the tile edges.  c--   Update the tile edges.
396    
397  #ifdef ALLOW_THETA0_CONTROL  #if (defined (ALLOW_THETA0_CONTROL) || defined (ALLOW_SST0_CONTROL))
398        _EXCH_XYZ_R8( theta, mythid )        _EXCH_XYZ_R8( theta, mythid )
       _EXCH_XYZ_R8( gtNm1, mythid )  
399  #endif  #endif
400  #ifdef ALLOW_SALT0_CONTROL  #if (defined (ALLOW_SALT0_CONTROL) || defined (ALLOW_SSS0_CONTROL))
401        _EXCH_XYZ_R8(  salt, mythid )        _EXCH_XYZ_R8(  salt, mythid )
402        _EXCH_XYZ_R8( gsNm1, mythid )  #endif
403    #ifdef ALLOW_TR10_CONTROL
404    #ifdef ALLOW_PTRACERS
405          _EXCH_XYZ_R8(pTracer(1-Olx,1-Oly,1,1,1,1),myThid)
406    #endif
407    #endif
408    #ifdef ALLOW_DIFFKR_CONTROL
409          _EXCH_XYZ_R8( diffkr, mythid)
410    #endif
411    #ifdef ALLOW_KAPGM_CONTROL
412          _EXCH_XYZ_R8( kapgm, mythid)
413    #endif
414    #ifdef ALLOW_EFLUXY0_CONTROL
415          _EXCH_XYZ_R8( EfluxY, mythid )
416    #endif
417    #ifdef ALLOW_EFLUXP0_CONTROL
418          _EXCH_XYZ_R8( EfluxP, mythid )
419    #endif
420    #ifdef ALLOW_BOTTOMDRAG_CONTROL
421          _EXCH_XY_R8( bottomdragfld, mythid )
422    #endif
423    
424    #if (defined (ALLOW_EDTAUX_CONTROL) && defined (ALLOW_EDTAUY_CONTROL))
425           CALL EXCH_UV_XYZ_RS(Eddytaux,Eddytauy,.TRUE.,myThid)
426    #elif (defined (ALLOW_EDTAUX_CONTROL) || defined (ALLOW_EDTAUY_CONTROL))
427           STOP 'ctrl_map_forcing: need BOTH ALLOW_EDTAU[X,Y]_CONTROL'
428  #endif  #endif
429    
430        return        return

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.15

  ViewVC Help
Powered by ViewVC 1.1.22