/[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.17 by heimbach, Thu Apr 7 23:38:43 2005 UTC revision 1.27 by jmc, Mon Nov 5 18:56:37 2007 UTC
# Line 1  Line 1 
1  C $Header$  C $Header$
2    C $Name$
3    
4  #include "CTRL_CPPOPTIONS.h"  #include "CTRL_CPPOPTIONS.h"
5    
# Line 10  C     !INTERFACE: Line 11  C     !INTERFACE:
11  C     !DESCRIPTION: \bv  C     !DESCRIPTION: \bv
12  c     *=================================================================  c     *=================================================================
13  c     | SUBROUTINE ctrl_map_ini  c     | SUBROUTINE ctrl_map_ini
14  c     | Add the temperature, salinity, and diffusivity parts of the  c     | Add the temperature, salinity, and diffusivity parts of the
15  c     | control vector to the model state and update the tile halos.  c     | control vector to the model state and update the tile halos.
16  c     | The control vector is defined in the header file "ctrl.h".  c     | The control vector is defined in the header file "ctrl.h".
17  c     *=================================================================  c     *=================================================================
18  C     \ev  C     \ev
# Line 31  c     == global variables == Line 32  c     == global variables ==
32  #include "optim.h"  #include "optim.h"
33  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
34  # include "PTRACERS_SIZE.h"  # include "PTRACERS_SIZE.h"
35  # include "PTRACERS.h"  c#include "PTRACERS_PARAMS.h"
36    # include "PTRACERS_FIELDS.h"
37  #endif  #endif
38  #ifdef ALLOW_ECCO  #ifdef ALLOW_ECCO
39  # include "ecco_cost.h"  # include "ecco_cost.h"
# Line 93  c--   Temperature field. Line 95  c--   Temperature field.
95        il=ilnblnk( xx_theta_file )        il=ilnblnk( xx_theta_file )
96        write(fnamegeneric(1:80),'(2a,i10.10)')        write(fnamegeneric(1:80),'(2a,i10.10)')
97       &     xx_theta_file(1:il),'.',optimcycle       &     xx_theta_file(1:il),'.',optimcycle
98        call active_read_xyz_loc( fnamegeneric, tmpfld3d, 1,        call active_read_xyz( fnamegeneric, tmpfld3d, 1,
99       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
100       &                      mythid, xx_theta_dummy )       &                      mythid, xx_theta_dummy )
101    
# Line 108  c--   Temperature field. Line 110  c--   Temperature field.
110       $          tmpfld3d(i,j,k,bi,bj)=       $          tmpfld3d(i,j,k,bi,bj)=
111       $          sign(2.0/sqrt(wtheta(k,bi,bj)),tmpfld3d(i,j,k,bi,bj))       $          sign(2.0/sqrt(wtheta(k,bi,bj)),tmpfld3d(i,j,k,bi,bj))
112  #endif  #endif
113    #ifdef ALLOW_AUTODIFF_OPENAD
114                    theta(i,j,k,bi,bj) = theta(i,j,k,bi,bj) +
115         &                               fac*xx_theta(i,j,k,bi,bj) +
116         &                               fac*tmpfld3d(i,j,k,bi,bj)
117    #else
118                  theta(i,j,k,bi,bj) = theta(i,j,k,bi,bj) +                  theta(i,j,k,bi,bj) = theta(i,j,k,bi,bj) +
119       &                               fac*tmpfld3d(i,j,k,bi,bj)       &                               fac*tmpfld3d(i,j,k,bi,bj)
120                  if(theta(i,j,k,bi,bj).lt.-2.0)  #endif
121       &               theta(i,j,k,bi,bj)= -2.0  #ifndef DISABLE_CTRL_THETA_LIMIT
122                    if(theta(i,j,k,bi,bj).lt.-2.0)
123         &               theta(i,j,k,bi,bj)= -2.0
124    #endif
125                enddo                enddo
126              enddo              enddo
127            enddo            enddo
# Line 125  c--   Temperature field. Line 135  c--   Temperature field.
135        il=ilnblnk( xx_salt_file )        il=ilnblnk( xx_salt_file )
136        write(fnamegeneric(1:80),'(2a,i10.10)')        write(fnamegeneric(1:80),'(2a,i10.10)')
137       &     xx_salt_file(1:il),'.',optimcycle       &     xx_salt_file(1:il),'.',optimcycle
138        call active_read_xyz_loc( fnamegeneric, tmpfld3d, 1,        call active_read_xyz( fnamegeneric, tmpfld3d, 1,
139       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
140       &                      mythid, xx_salt_dummy )       &                      mythid, xx_salt_dummy )
141    
# Line 140  c--   Temperature field. Line 150  c--   Temperature field.
150       $          tmpfld3d(i,j,k,bi,bj)=       $          tmpfld3d(i,j,k,bi,bj)=
151       $          sign(2.0/sqrt(wsalt(k,bi,bj)),tmpfld3d(i,j,k,bi,bj))       $          sign(2.0/sqrt(wsalt(k,bi,bj)),tmpfld3d(i,j,k,bi,bj))
152  #endif  #endif
153    #ifdef ALLOW_AUTODIFF_OPENAD
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*xx_salt(i,j,k,bi,bj) +
156       &                               fac*tmpfld3d(i,j,k,bi,bj)       &                               fac*tmpfld3d(i,j,k,bi,bj)
157    #else
158                    salt(i,j,k,bi,bj) = salt(i,j,k,bi,bj) +
159         &                               fac*tmpfld3d(i,j,k,bi,bj)
160    #endif
161    
162                enddo                enddo
163              enddo              enddo
# Line 156  c--   Temperature field. Line 172  c--   Temperature field.
172        il=ilnblnk( xx_tr1_file )        il=ilnblnk( xx_tr1_file )
173        write(fnamegeneric(1:80),'(2a,i10.10)')        write(fnamegeneric(1:80),'(2a,i10.10)')
174       &     xx_tr1_file(1:il),'.',optimcycle       &     xx_tr1_file(1:il),'.',optimcycle
175        call active_read_xyz_loc( fnamegeneric, tmpfld3d, 1,        call active_read_xyz( fnamegeneric, tmpfld3d, 1,
176       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
177       &                      mythid, xx_tr1_dummy )       &                      mythid, xx_tr1_dummy )
178    
# Line 180  c--   sst0. Line 196  c--   sst0.
196        il=ilnblnk( xx_sst_file )        il=ilnblnk( xx_sst_file )
197        write(fnamegeneric(1:80),'(2a,i10.10)')        write(fnamegeneric(1:80),'(2a,i10.10)')
198       &     xx_sst_file(1:il),'.',optimcycle       &     xx_sst_file(1:il),'.',optimcycle
199        call active_read_xy_loc ( fnamegeneric, tmpfld2d, 1,        call active_read_xy ( fnamegeneric, tmpfld2d, 1,
200       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
201       &                      mythid, xx_sst_dummy )       &                      mythid, xx_sst_dummy )
202        do bj = jtlo,jthi        do bj = jtlo,jthi
# Line 188  c--   sst0. Line 204  c--   sst0.
204            do j = jmin,jmax            do j = jmin,jmax
205              do i = imin,imax              do i = imin,imax
206  cph              sst(i,j,bi,bj) = sst(i,j,bi,bj) + tmpfld2d(i,j,bi,bj)  cph              sst(i,j,bi,bj) = sst(i,j,bi,bj) + tmpfld2d(i,j,bi,bj)
207                theta(i,j,1,bi,bj) = theta(i,j,1,bi,bj)                theta(i,j,1,bi,bj) = theta(i,j,1,bi,bj)
208       &                             + tmpfld2d(i,j,bi,bj)       &                             + tmpfld2d(i,j,bi,bj)
209              enddo              enddo
210            enddo            enddo
# Line 201  c--   sss0. Line 217  c--   sss0.
217        il=ilnblnk( xx_sss_file )        il=ilnblnk( xx_sss_file )
218        write(fnamegeneric(1:80),'(2a,i10.10)')        write(fnamegeneric(1:80),'(2a,i10.10)')
219       &     xx_sss_file(1:il),'.',optimcycle       &     xx_sss_file(1:il),'.',optimcycle
220        call active_read_xy_loc ( fnamegeneric, tmpfld2d, 1,        call active_read_xy ( fnamegeneric, tmpfld2d, 1,
221       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
222       &                      mythid, xx_sss_dummy )       &                      mythid, xx_sss_dummy )
223        do bj = jtlo,jthi        do bj = jtlo,jthi
# Line 222  c--   diffkr. Line 238  c--   diffkr.
238        il=ilnblnk( xx_diffkr_file )        il=ilnblnk( xx_diffkr_file )
239        write(fnamegeneric(1:80),'(2a,i10.10)')        write(fnamegeneric(1:80),'(2a,i10.10)')
240       &     xx_diffkr_file(1:il),'.',optimcycle       &     xx_diffkr_file(1:il),'.',optimcycle
241        call active_read_xyz_loc( fnamegeneric, tmpfld3d, 1,        call active_read_xyz( fnamegeneric, tmpfld3d, 1,
242       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
243       &                      mythid, xx_diffkr_dummy )       &                      mythid, xx_diffkr_dummy )
244        do bj = jtlo,jthi        do bj = jtlo,jthi
# Line 244  c--   kapgm. Line 260  c--   kapgm.
260        il=ilnblnk( xx_kapgm_file )        il=ilnblnk( xx_kapgm_file )
261        write(fnamegeneric(1:80),'(2a,i10.10)')        write(fnamegeneric(1:80),'(2a,i10.10)')
262       &     xx_kapgm_file(1:il),'.',optimcycle       &     xx_kapgm_file(1:il),'.',optimcycle
263        call active_read_xyz_loc( fnamegeneric, tmpfld3d, 1,        call active_read_xyz( fnamegeneric, tmpfld3d, 1,
264       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
265       &                      mythid, xx_kapgm_dummy )       &                      mythid, xx_kapgm_dummy )
266        do bj = jtlo,jthi        do bj = jtlo,jthi
# Line 266  c--   y-component EP-flux field. Line 282  c--   y-component EP-flux field.
282        il=ilnblnk( xx_efluxy_file )        il=ilnblnk( xx_efluxy_file )
283        write(fnamegeneric(1:80),'(2a,i10.10)')        write(fnamegeneric(1:80),'(2a,i10.10)')
284       &     xx_efluxy_file(1:il),'.',optimcycle       &     xx_efluxy_file(1:il),'.',optimcycle
285        call active_read_xyz_loc( fnamegeneric, tmpfld3d, 1,        call active_read_xyz( fnamegeneric, tmpfld3d, 1,
286       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
287       &                      mythid, xx_efluxy_dummy )       &                      mythid, xx_efluxy_dummy )
288    
# Line 293  c--   p-component EP-flux field. Line 309  c--   p-component EP-flux field.
309        il=ilnblnk( xx_efluxp_file )        il=ilnblnk( xx_efluxp_file )
310        write(fnamegeneric(1:80),'(2a,i10.10)')        write(fnamegeneric(1:80),'(2a,i10.10)')
311       &     xx_efluxp_file(1:il),'.',optimcycle       &     xx_efluxp_file(1:il),'.',optimcycle
312        call active_read_xyz_loc( fnamegeneric, tmpfld3d, 1,        call active_read_xyz( fnamegeneric, tmpfld3d, 1,
313       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
314       &                      mythid, xx_efluxp_dummy )       &                      mythid, xx_efluxp_dummy )
315    
# Line 322  c--   bottom drag Line 338  c--   bottom drag
338        il=ilnblnk( xx_bottomdrag_file )        il=ilnblnk( xx_bottomdrag_file )
339        write(fnamegeneric(1:80),'(2a,i10.10)')        write(fnamegeneric(1:80),'(2a,i10.10)')
340       &     xx_bottomdrag_file(1:il),'.',optimcycle       &     xx_bottomdrag_file(1:il),'.',optimcycle
341        call active_read_xy_loc ( fnamegeneric, tmpfld2d, 1,        call active_read_xy ( fnamegeneric, tmpfld2d, 1,
342       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
343       &                      mythid, xx_bottomdrag_dummy )       &                      mythid, xx_bottomdrag_dummy )
344        do bj = jtlo,jthi        do bj = jtlo,jthi
345          do bi = itlo,ithi          do bi = itlo,ithi
346            do j = jmin,jmax            do j = jmin,jmax
347              do i = imin,imax              do i = imin,imax
348                bottomdragfld(i,j,bi,bj) = bottomdragfld(i,j,bi,bj)                bottomdragfld(i,j,bi,bj) = bottomdragfld(i,j,bi,bj)
349       &                                   + tmpfld2d(i,j,bi,bj)       &                                   + tmpfld2d(i,j,bi,bj)
350              enddo              enddo
351            enddo            enddo
# Line 350  c-- zonal eddy stress : edtaux Line 366  c-- zonal eddy stress : edtaux
366            do k = 1,nr            do k = 1,nr
367              do j = jmin,jmax              do j = jmin,jmax
368                do i = imin,imax                do i = imin,imax
369                  Eddytaux(i,j,k,bi,bj) = Eddytaux(i,j,k,bi,bj) +                  eddyTauX(i,j,k,bi,bj) = eddyTauX(i,j,k,bi,bj) +
370       &                                tmpfld3d(i,j,k,bi,bj)       &            fCori(i,j,bi,bj)*tmpfld3d(i,j,k,bi,bj)
371                enddo                enddo
372              enddo              enddo
373            enddo            enddo
# Line 372  c-- meridional eddy stress : edtauy Line 388  c-- meridional eddy stress : edtauy
388            do k = 1,nr            do k = 1,nr
389              do j = jmin,jmax              do j = jmin,jmax
390                do i = imin,imax                do i = imin,imax
391                  Eddytauy(i,j,k,bi,bj) = Eddytauy(i,j,k,bi,bj) +                  eddyTauY(i,j,k,bi,bj) = eddyTauY(i,j,k,bi,bj) +
392       &                                tmpfld3d(i,j,k,bi,bj)       &            fCoriG(i,j,bi,bj)*tmpfld3d(i,j,k,bi,bj)
393                enddo                enddo
394              enddo              enddo
395            enddo            enddo
# Line 394  c-- initial zonal velocity Line 410  c-- initial zonal velocity
410            do k = 1,nr            do k = 1,nr
411              do j = jmin,jmax              do j = jmin,jmax
412                do i = imin,imax                do i = imin,imax
413    #ifdef ALLOW_AUTODIFF_OPENAD
414                    uVel(i,j,k,bi,bj) = uVel(i,j,k,bi,bj) +
415         &                                  fac*xx_uvel(i,j,k,bi,bj)
416    #else
417                  uVel(i,j,k,bi,bj) = uVel(i,j,k,bi,bj) +                  uVel(i,j,k,bi,bj) = uVel(i,j,k,bi,bj) +
418       &                              tmpfld3d(i,j,k,bi,bj)       &                                  fac*tmpfld3d(i,j,k,bi,bj)
419    #endif
420                enddo                enddo
421              enddo              enddo
422            enddo            enddo
# Line 416  c-- initial merid. velocity Line 437  c-- initial merid. velocity
437            do k = 1,nr            do k = 1,nr
438              do j = jmin,jmax              do j = jmin,jmax
439                do i = imin,imax                do i = imin,imax
440    #ifdef ALLOW_AUTODIFF_OPENAD
441                  vVel(i,j,k,bi,bj) = vVel(i,j,k,bi,bj) +                  vVel(i,j,k,bi,bj) = vVel(i,j,k,bi,bj) +
442       &                              tmpfld3d(i,j,k,bi,bj)       &                                  fac*xx_vvel(i,j,k,bi,bj)
443    #else
444                    vVel(i,j,k,bi,bj) = vVel(i,j,k,bi,bj) +
445         &                                  fac*tmpfld3d(i,j,k,bi,bj)
446    #endif
447                enddo                enddo
448              enddo              enddo
449            enddo            enddo
# Line 430  c--   initial Eta. Line 456  c--   initial Eta.
456        il=ilnblnk( xx_etan_file )        il=ilnblnk( xx_etan_file )
457        write(fnamegeneric(1:80),'(2a,i10.10)')        write(fnamegeneric(1:80),'(2a,i10.10)')
458       &     xx_etan_file(1:il),'.',optimcycle       &     xx_etan_file(1:il),'.',optimcycle
459        call active_read_xy_loc ( fnamegeneric, tmpfld2d, 1,        call active_read_xy ( fnamegeneric, tmpfld2d, 1,
460       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
461       &                      mythid, xx_etan_dummy )       &                      mythid, xx_etan_dummy )
462        do bj = jtlo,jthi        do bj = jtlo,jthi
463          do bi = itlo,ithi          do bi = itlo,ithi
464            do j = jmin,jmax            do j = jmin,jmax
465              do i = imin,imax              do i = imin,imax
466                etaN(i,j,bi,bj) = etaN(i,j,bi,bj) + tmpfld2d(i,j,bi,bj)  #ifdef ALLOW_AUTODIFF_OPENAD
467                  etaN(i,j,bi,bj) = etaN(i,j,bi,bj) +
468         &                              fac*xx_etan(i,j,bi,bj)
469    #else
470                  etaN(i,j,bi,bj) = etaN(i,j,bi,bj) +
471         &                              fac*tmpfld2d(i,j,bi,bj)
472    #endif
473              enddo              enddo
474            enddo            enddo
475          enddo          enddo
# Line 449  c--   SST relaxation coefficient. Line 481  c--   SST relaxation coefficient.
481        il=ilnblnk( xx_relaxsst_file )        il=ilnblnk( xx_relaxsst_file )
482        write(fnamegeneric(1:80),'(2a,i10.10)')        write(fnamegeneric(1:80),'(2a,i10.10)')
483       &     xx_relaxsst_file(1:il),'.',optimcycle       &     xx_relaxsst_file(1:il),'.',optimcycle
484        call active_read_xy_loc ( fnamegeneric, tmpfld2d, 1,        call active_read_xy ( fnamegeneric, tmpfld2d, 1,
485       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
486       &                      mythid, xx_relaxsst_dummy )       &                      mythid, xx_relaxsst_dummy )
487        do bj = jtlo,jthi        do bj = jtlo,jthi
488          do bi = itlo,ithi          do bi = itlo,ithi
489            do j = jmin,jmax            do j = jmin,jmax
490              do i = imin,imax              do i = imin,imax
491                lambdaThetaClimRelax(i,j,bi,bj) =                lambdaThetaClimRelax(i,j,bi,bj) =
492       &              lambdaThetaClimRelax(i,j,bi,bj)       &              lambdaThetaClimRelax(i,j,bi,bj)
493       &              + tmpfld2d(i,j,bi,bj)       &              + tmpfld2d(i,j,bi,bj)
494              enddo              enddo
495            enddo            enddo
# Line 470  c--   SSS relaxation coefficient. Line 502  c--   SSS relaxation coefficient.
502        il=ilnblnk( xx_relaxsss_file )        il=ilnblnk( xx_relaxsss_file )
503        write(fnamegeneric(1:80),'(2a,i10.10)')        write(fnamegeneric(1:80),'(2a,i10.10)')
504       &     xx_relaxsss_file(1:il),'.',optimcycle       &     xx_relaxsss_file(1:il),'.',optimcycle
505        call active_read_xy_loc ( fnamegeneric, tmpfld2d, 1,        call active_read_xy ( fnamegeneric, tmpfld2d, 1,
506       &                      doglobalread, ladinit, optimcycle,       &                      doglobalread, ladinit, optimcycle,
507       &                      mythid, xx_relaxsss_dummy )       &                      mythid, xx_relaxsss_dummy )
508        do bj = jtlo,jthi        do bj = jtlo,jthi
509          do bi = itlo,ithi          do bi = itlo,ithi
510            do j = jmin,jmax            do j = jmin,jmax
511              do i = imin,imax              do i = imin,imax
512                lambdaSaltClimRelax(i,j,bi,bj) =                lambdaSaltClimRelax(i,j,bi,bj) =
513       &              lambdaSaltClimRelax(i,j,bi,bj)       &              lambdaSaltClimRelax(i,j,bi,bj)
514       &              + tmpfld2d(i,j,bi,bj)       &              + tmpfld2d(i,j,bi,bj)
515              enddo              enddo
516            enddo            enddo
# Line 486  c--   SSS relaxation coefficient. Line 518  c--   SSS relaxation coefficient.
518        enddo        enddo
519  #endif  #endif
520    
521    #ifdef ALLOW_SEAICE
522          call seaice_ctrl_map_ini( mythid )
523    #endif
524    
525  c--   Update the tile edges.  c--   Update the tile edges.
526    
527  #if (defined (ALLOW_THETA0_CONTROL) || defined (ALLOW_SST0_CONTROL))  #if (defined (ALLOW_THETA0_CONTROL) || defined (ALLOW_SST0_CONTROL))
# Line 516  c--   Update the tile edges. Line 552  c--   Update the tile edges.
552  #endif  #endif
553    
554  #if (defined (ALLOW_EDTAUX_CONTROL) && defined (ALLOW_EDTAUY_CONTROL))  #if (defined (ALLOW_EDTAUX_CONTROL) && defined (ALLOW_EDTAUY_CONTROL))
555         CALL EXCH_UV_XYZ_RS(Eddytaux,Eddytauy,.TRUE.,myThid)         CALL EXCH_UV_XYZ_RS(eddyTauX,eddyTauY,.TRUE.,myThid)
556  #elif (defined (ALLOW_EDTAUX_CONTROL) || defined (ALLOW_EDTAUY_CONTROL))  #elif (defined (ALLOW_EDTAUX_CONTROL) || defined (ALLOW_EDTAUY_CONTROL))
557         STOP 'ctrl_map_forcing: need BOTH ALLOW_EDTAU[X,Y]_CONTROL'         STOP 'ctrl_map_forcing: need BOTH ALLOW_EDTAU[X,Y]_CONTROL'
558  #endif  #endif

Legend:
Removed from v.1.17  
changed lines
  Added in v.1.27

  ViewVC Help
Powered by ViewVC 1.1.22