/[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.23 by utke, Wed Jun 6 16:59:35 2007 UTC revision 1.32 by jmc, Tue Apr 28 18:09:28 2009 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 116  c--   Temperature field. Line 118  c--   Temperature field.
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  #endif  #endif
121                  if(theta(i,j,k,bi,bj).lt.-2.0)  #ifndef DISABLE_CTRL_THETA_LIMIT
122       &               theta(i,j,k,bi,bj)= -2.0                  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 200  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 229  cph              sss(i,j,bi,bj) = sss(i, Line 233  cph              sss(i,j,bi,bj) = sss(i,
233        enddo        enddo
234  #endif  #endif
235    
236    #ifdef ALLOW_AUTODIFF
237  #ifdef ALLOW_DIFFKR_CONTROL  #ifdef ALLOW_DIFFKR_CONTROL
238  c--   diffkr.  c--   diffkr.
239        il=ilnblnk( xx_diffkr_file )        il=ilnblnk( xx_diffkr_file )
# Line 242  c--   diffkr. Line 247  c--   diffkr.
247            do k = 1,nr            do k = 1,nr
248              do j = jmin,jmax              do j = jmin,jmax
249                do i = imin,imax                do i = imin,imax
250    #ifdef ALLOW_AUTODIFF_OPENAD
251                    diffkr(i,j,k,bi,bj) = diffkr(i,j,k,bi,bj) +
252         &                                xx_diffkr(i,j,k,bi,bj) +
253         &                                tmpfld3d(i,j,k,bi,bj)
254    #else
255                  diffkr(i,j,k,bi,bj) = diffkr(i,j,k,bi,bj) +                  diffkr(i,j,k,bi,bj) = diffkr(i,j,k,bi,bj) +
256       &                                tmpfld3d(i,j,k,bi,bj)       &                                tmpfld3d(i,j,k,bi,bj)
257    #endif
258                enddo                enddo
259              enddo              enddo
260            enddo            enddo
261         enddo         enddo
262        enddo        enddo
263  #endif  #endif
264    #endif
265    
266    #ifdef ALLOW_AUTODIFF
267  #ifdef ALLOW_KAPGM_CONTROL  #ifdef ALLOW_KAPGM_CONTROL
268  c--   kapgm.  c--   kapgm.
269        il=ilnblnk( xx_kapgm_file )        il=ilnblnk( xx_kapgm_file )
# Line 264  c--   kapgm. Line 277  c--   kapgm.
277            do k = 1,nr            do k = 1,nr
278              do j = jmin,jmax              do j = jmin,jmax
279                do i = imin,imax                do i = imin,imax
280    #ifdef ALLOW_AUTODIFF_OPENAD
281                    kapgm(i,j,k,bi,bj) = kapgm(i,j,k,bi,bj) +
282         &                               xx_kapgm(i,j,k,bi,bj) +
283         &                               tmpfld3d(i,j,k,bi,bj)
284    #else
285                  kapgm(i,j,k,bi,bj) = kapgm(i,j,k,bi,bj) +                  kapgm(i,j,k,bi,bj) = kapgm(i,j,k,bi,bj) +
286       &                               tmpfld3d(i,j,k,bi,bj)       &                               tmpfld3d(i,j,k,bi,bj)
287    #endif
288                  enddo
289                enddo
290              enddo
291           enddo
292          enddo
293    #endif
294    #endif
295    
296    #ifdef ALLOW_AUTODIFF
297    #ifdef ALLOW_KAPREDI_CONTROL
298    c--   kapredi.
299          il=ilnblnk( xx_kapredi_file )
300          write(fnamegeneric(1:80),'(2a,i10.10)')
301         &     xx_kapredi_file(1:il),'.',optimcycle
302          call active_read_xyz( fnamegeneric, tmpfld3d, 1,
303         &                      doglobalread, ladinit, optimcycle,
304         &                      mythid, xx_kapredi_dummy )
305          do bj = jtlo,jthi
306            do bi = itlo,ithi
307              do k = 1,nr
308                do j = jmin,jmax
309                  do i = imin,imax
310                    kapredi(i,j,k,bi,bj) = kapredi(i,j,k,bi,bj) +
311         &                               tmpfld3d(i,j,k,bi,bj)
312                enddo                enddo
313              enddo              enddo
314            enddo            enddo
315         enddo         enddo
316        enddo        enddo
317  #endif  #endif
318    #endif
319    
320  #ifdef ALLOW_EFLUXY0_CONTROL  #ifdef ALLOW_EFLUXY0_CONTROL
321  c--   y-component EP-flux field.  c--   y-component EP-flux field.
# Line 341  c--   bottom drag Line 385  c--   bottom drag
385          do bi = itlo,ithi          do bi = itlo,ithi
386            do j = jmin,jmax            do j = jmin,jmax
387              do i = imin,imax              do i = imin,imax
388                bottomdragfld(i,j,bi,bj) = bottomdragfld(i,j,bi,bj)                bottomdragfld(i,j,bi,bj) = bottomdragfld(i,j,bi,bj)
389       &                                   + tmpfld2d(i,j,bi,bj)       &                                   + tmpfld2d(i,j,bi,bj)
390              enddo              enddo
391            enddo            enddo
# Line 349  c--   bottom drag Line 393  c--   bottom drag
393        enddo        enddo
394  #endif  #endif
395    
396  #ifdef ALLOW_EDTAUX_CONTROL  #ifdef ALLOW_EDDYPSI_CONTROL
397  c-- zonal eddy stress : edtaux  c-- zonal eddy streamfunction : eddyPsiX
398        il=ilnblnk( xx_edtaux_file )        il=ilnblnk( xx_edtaux_file )
399        write(fnamegeneric(1:80),'(2a,i10.10)')        write(fnamegeneric(1:80),'(2a,i10.10)')
400       &     xx_edtaux_file(1:il),'.',optimcycle       &     xx_edtaux_file(1:il),'.',optimcycle
# Line 362  c-- zonal eddy stress : edtaux Line 406  c-- zonal eddy stress : edtaux
406            do k = 1,nr            do k = 1,nr
407              do j = jmin,jmax              do j = jmin,jmax
408                do i = imin,imax                do i = imin,imax
409                  eddyTauX(i,j,k,bi,bj) = eddyTauX(i,j,k,bi,bj) +                  eddyPsiX(i,j,k,bi,bj) = eddyPsiX(i,j,k,bi,bj) +
410       &            fCori(i,j,bi,bj)*tmpfld3d(i,j,k,bi,bj)       &            tmpfld3d(i,j,k,bi,bj)
411                enddo                enddo
412              enddo              enddo
413            enddo            enddo
414         enddo         enddo
415        enddo        enddo
416  #endif  c-- meridional eddy streamfunction : eddyPsiY
   
 #ifdef ALLOW_EDTAUY_CONTROL  
 c-- meridional eddy stress : edtauy  
417        il=ilnblnk( xx_edtauy_file )        il=ilnblnk( xx_edtauy_file )
418        write(fnamegeneric(1:80),'(2a,i10.10)')        write(fnamegeneric(1:80),'(2a,i10.10)')
419       &     xx_edtauy_file(1:il),'.',optimcycle       &     xx_edtauy_file(1:il),'.',optimcycle
# Line 384  c-- meridional eddy stress : edtauy Line 425  c-- meridional eddy stress : edtauy
425            do k = 1,nr            do k = 1,nr
426              do j = jmin,jmax              do j = jmin,jmax
427                do i = imin,imax                do i = imin,imax
428                  eddyTauY(i,j,k,bi,bj) = eddyTauY(i,j,k,bi,bj) +                  eddyPsiY(i,j,k,bi,bj) = eddyPsiY(i,j,k,bi,bj) +
429       &            fCoriG(i,j,bi,bj)*tmpfld3d(i,j,k,bi,bj)       &            tmpfld3d(i,j,k,bi,bj)
430                enddo                enddo
431              enddo              enddo
432            enddo            enddo
# Line 463  c--   initial Eta. Line 504  c--   initial Eta.
504                etaN(i,j,bi,bj) = etaN(i,j,bi,bj) +                etaN(i,j,bi,bj) = etaN(i,j,bi,bj) +
505       &                              fac*xx_etan(i,j,bi,bj)       &                              fac*xx_etan(i,j,bi,bj)
506  #else  #else
507                etaN(i,j,bi,bj) = etaN(i,j,bi,bj) +                etaN(i,j,bi,bj) = etaN(i,j,bi,bj) +
508       &                              fac*tmpfld2d(i,j,bi,bj)       &                              fac*tmpfld2d(i,j,bi,bj)
509  #endif  #endif
510              enddo              enddo
# Line 484  c--   SST relaxation coefficient. Line 525  c--   SST relaxation coefficient.
525          do bi = itlo,ithi          do bi = itlo,ithi
526            do j = jmin,jmax            do j = jmin,jmax
527              do i = imin,imax              do i = imin,imax
528                lambdaThetaClimRelax(i,j,bi,bj) =                lambdaThetaClimRelax(i,j,bi,bj) =
529       &              lambdaThetaClimRelax(i,j,bi,bj)       &              lambdaThetaClimRelax(i,j,bi,bj)
530       &              + tmpfld2d(i,j,bi,bj)       &              + tmpfld2d(i,j,bi,bj)
531              enddo              enddo
532            enddo            enddo
# Line 505  c--   SSS relaxation coefficient. Line 546  c--   SSS relaxation coefficient.
546          do bi = itlo,ithi          do bi = itlo,ithi
547            do j = jmin,jmax            do j = jmin,jmax
548              do i = imin,imax              do i = imin,imax
549                lambdaSaltClimRelax(i,j,bi,bj) =                lambdaSaltClimRelax(i,j,bi,bj) =
550       &              lambdaSaltClimRelax(i,j,bi,bj)       &              lambdaSaltClimRelax(i,j,bi,bj)
551       &              + tmpfld2d(i,j,bi,bj)       &              + tmpfld2d(i,j,bi,bj)
552              enddo              enddo
553            enddo            enddo
# Line 514  c--   SSS relaxation coefficient. Line 555  c--   SSS relaxation coefficient.
555        enddo        enddo
556  #endif  #endif
557    
558    #ifdef ALLOW_SEAICE
559          call seaice_ctrl_map_ini( mythid )
560    #endif
561    
562  c--   Update the tile edges.  c--   Update the tile edges.
563    
564  #if (defined (ALLOW_THETA0_CONTROL) || defined (ALLOW_SST0_CONTROL))  #if (defined (ALLOW_THETA0_CONTROL) || defined (ALLOW_SST0_CONTROL))
565        _EXCH_XYZ_R8( theta, mythid )        _EXCH_XYZ_RL( theta, mythid )
566  #endif  #endif
567  #if (defined (ALLOW_SALT0_CONTROL) || defined (ALLOW_SSS0_CONTROL))  #if (defined (ALLOW_SALT0_CONTROL) || defined (ALLOW_SSS0_CONTROL))
568        _EXCH_XYZ_R8(  salt, mythid )        _EXCH_XYZ_RL(  salt, mythid )
569  #endif  #endif
570  #ifdef ALLOW_TR10_CONTROL  #ifdef ALLOW_TR10_CONTROL
571  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
572        _EXCH_XYZ_R8(pTracer(1-Olx,1-Oly,1,1,1,1),myThid)        _EXCH_XYZ_RL(pTracer(1-Olx,1-Oly,1,1,1,1),myThid)
573  #endif  #endif
574  #endif  #endif
575  #ifdef ALLOW_DIFFKR_CONTROL  
576        _EXCH_XYZ_R8( diffkr, mythid)  #ifdef ALLOW_AUTODIFF
577  #endif  # ifdef ALLOW_DIFFKR_CONTROL
578  #ifdef ALLOW_KAPGM_CONTROL        _EXCH_XYZ_RL( diffkr, mythid)
579        _EXCH_XYZ_R8( kapgm, mythid)  # endif
580    # ifdef ALLOW_KAPGM_CONTROL
581          _EXCH_XYZ_RL( kapgm, mythid)
582    # endif
583    # ifdef ALLOW_KAPREDI_CONTROL
584          _EXCH_XYZ_RL( kapredi, mythid)
585    # endif
586  #endif  #endif
587    
588  #ifdef ALLOW_EFLUXY0_CONTROL  #ifdef ALLOW_EFLUXY0_CONTROL
589        _EXCH_XYZ_R8( EfluxY, mythid )        _EXCH_XYZ_RL( EfluxY, mythid )
590  #endif  #endif
591  #ifdef ALLOW_EFLUXP0_CONTROL  #ifdef ALLOW_EFLUXP0_CONTROL
592        _EXCH_XYZ_R8( EfluxP, mythid )        _EXCH_XYZ_RL( EfluxP, mythid )
593  #endif  #endif
594  #ifdef ALLOW_BOTTOMDRAG_CONTROL  #ifdef ALLOW_BOTTOMDRAG_CONTROL
595        _EXCH_XY_R8( bottomdragfld, mythid )        _EXCH_XY_RL( bottomdragfld, mythid )
596  #endif  #endif
597    
598  #if (defined (ALLOW_EDTAUX_CONTROL) && defined (ALLOW_EDTAUY_CONTROL))  #ifdef ALLOW_EDDYPSI_CONTROL
599         CALL EXCH_UV_XYZ_RS(eddyTauX,eddyTauY,.TRUE.,myThid)         CALL EXCH_UV_XYZ_RS(eddyPsiX,eddyPsiY,.TRUE.,myThid)
 #elif (defined (ALLOW_EDTAUX_CONTROL) || defined (ALLOW_EDTAUY_CONTROL))  
        STOP 'ctrl_map_forcing: need BOTH ALLOW_EDTAU[X,Y]_CONTROL'  
600  #endif  #endif
601    
602  #ifdef ALLOW_UVEL0_CONTROL  #ifdef ALLOW_UVEL0_CONTROL
603        _EXCH_XYZ_R8( uVel, mythid)        _EXCH_XYZ_RL( uVel, mythid)
604  #endif  #endif
605    
606  #ifdef ALLOW_VVEL0_CONTROL  #ifdef ALLOW_VVEL0_CONTROL
607        _EXCH_XYZ_R8( vVel, mythid)        _EXCH_XYZ_RL( vVel, mythid)
608  #endif  #endif
609    
610  #ifdef ALLOW_ETAN0_CONTROL  #ifdef ALLOW_ETAN0_CONTROL
611        _EXCH_XY_R8( etaN, mythid )        _EXCH_XY_RL( etaN, mythid )
612  #endif  #endif
613    
614  #ifdef ALLOW_RELAXSST_CONTROL  #ifdef ALLOW_RELAXSST_CONTROL
615        _EXCH_XY_R4( lambdaThetaClimRelax, mythid )        _EXCH_XY_RS( lambdaThetaClimRelax, mythid )
616  #endif  #endif
617    
618  #ifdef ALLOW_RELAXSSS_CONTROL  #ifdef ALLOW_RELAXSSS_CONTROL
619        _EXCH_XY_R4( lambdaThetaClimRelax, mythid )        _EXCH_XY_RS( lambdaThetaClimRelax, mythid )
620  #endif  #endif
621    
622        return        return

Legend:
Removed from v.1.23  
changed lines
  Added in v.1.32

  ViewVC Help
Powered by ViewVC 1.1.22