/[MITgcm]/MITgcm/model/src/dynamics.F
ViewVC logotype

Diff of /MITgcm/model/src/dynamics.F

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

revision 1.67 by heimbach, Mon May 14 21:46:17 2001 UTC revision 1.74 by heimbach, Mon Jul 30 20:37:45 2001 UTC
# Line 29  C     == Global variables === Line 29  C     == Global variables ===
29  #include "PARAMS.h"  #include "PARAMS.h"
30  #include "DYNVARS.h"  #include "DYNVARS.h"
31  #include "GRID.h"  #include "GRID.h"
32    #ifdef ALLOW_PASSIVE_TRACER
33    #include "TR1.h"
34    #endif
35    
36  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
37  # include "tamc.h"  # include "tamc.h"
# Line 61  C                              transport Line 64  C                              transport
64  C                              o uTrans: Zonal transport  C                              o uTrans: Zonal transport
65  C                              o vTrans: Meridional transport  C                              o vTrans: Meridional transport
66  C                              o rTrans: Vertical transport  C                              o rTrans: Vertical transport
67  C     maskC,maskUp             o maskC: land/water mask for tracer cells  C     maskUp                   o maskUp: land/water mask for W points
 C                              o maskUp: land/water mask for W points  
68  C     fVer[STUV]               o fVer: Vertical flux term - note fVer  C     fVer[STUV]               o fVer: Vertical flux term - note fVer
69  C                                      is "pipelined" in the vertical  C                                      is "pipelined" in the vertical
70  C                                      so we need an fVer for each  C                                      so we need an fVer for each
# Line 83  C     bi, bj Line 85  C     bi, bj
85  C     k, kup,        - Index for layer above and below. kup and kDown  C     k, kup,        - Index for layer above and below. kup and kDown
86  C     kDown, km1       are switched with layer to be the appropriate  C     kDown, km1       are switched with layer to be the appropriate
87  C                      index into fVerTerm.  C                      index into fVerTerm.
88    C     tauAB - Adams-Bashforth timestepping weight: 0=forward ; 1/2=Adams-Bashf.
89        _RS xA      (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RS xA      (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
90        _RS yA      (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RS yA      (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
91        _RL uTrans  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL uTrans  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
92        _RL vTrans  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL vTrans  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
93        _RL rTrans  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rTrans  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
       _RS maskC   (1-OLx:sNx+OLx,1-OLy:sNy+OLy)  
94        _RS maskUp  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RS maskUp  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
95        _RL fVerT   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)        _RL fVerT   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)
96        _RL fVerS   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)        _RL fVerS   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)
97          _RL fVerTr1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)
98        _RL fVerU   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)        _RL fVerU   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)
99        _RL fVerV   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)        _RL fVerV   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)
100        _RL phiHyd  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL phiHyd  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
# Line 106  C                      index into fVerTe Line 109  C                      index into fVerTe
109        _RL sigmaX  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL sigmaX  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
110        _RL sigmaY  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL sigmaY  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
111        _RL sigmaR  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL sigmaR  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
112          _RL tauAB
113    
114  C This is currently used by IVDC and Diagnostics  C This is currently used by IVDC and Diagnostics
115        _RL ConvectCount (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL ConvectCount (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
# Line 192  C     uninitialised but inert locations. Line 196  C     uninitialised but inert locations.
196          ENDDO          ENDDO
197          rhoKM1 (i,j) = 0. _d 0          rhoKM1 (i,j) = 0. _d 0
198          rhok   (i,j) = 0. _d 0          rhok   (i,j) = 0. _d 0
         maskC  (i,j) = 0. _d 0  
199          phiSurfX(i,j) = 0. _d 0          phiSurfX(i,j) = 0. _d 0
200          phiSurfY(i,j) = 0. _d 0          phiSurfY(i,j) = 0. _d 0
201         ENDDO         ENDDO
# Line 209  CHPF$ INDEPENDENT Line 212  CHPF$ INDEPENDENT
212  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
213  C--    HPF directive to help TAMC  C--    HPF directive to help TAMC
214  CHPF$  INDEPENDENT, NEW (rTrans,fVerT,fVerS,fVerU,fVerV  CHPF$  INDEPENDENT, NEW (rTrans,fVerT,fVerS,fVerU,fVerV
215  CHPF$&                  ,phiHyd,utrans,vtrans,maskc,xA,yA  CHPF$&                  ,phiHyd,utrans,vtrans,xA,yA
216  CHPF$&                  ,KappaRT,KappaRS,KappaRU,KappaRV  CHPF$&                  ,KappaRT,KappaRS,KappaRU,KappaRV
217  CHPF$&                  )  CHPF$&                  )
218  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
# Line 236  CHPF$&                  ) Line 239  CHPF$&                  )
239  C--     Set up work arrays that need valid initial values  C--     Set up work arrays that need valid initial values
240          DO j=1-OLy,sNy+OLy          DO j=1-OLy,sNy+OLy
241           DO i=1-OLx,sNx+OLx           DO i=1-OLx,sNx+OLx
242            rTrans(i,j)   = 0. _d 0            rTrans (i,j)   = 0. _d 0
243            fVerT (i,j,1) = 0. _d 0            fVerT  (i,j,1) = 0. _d 0
244            fVerT (i,j,2) = 0. _d 0            fVerT  (i,j,2) = 0. _d 0
245            fVerS (i,j,1) = 0. _d 0            fVerS  (i,j,1) = 0. _d 0
246            fVerS (i,j,2) = 0. _d 0            fVerS  (i,j,2) = 0. _d 0
247            fVerU (i,j,1) = 0. _d 0            fVerTr1(i,j,1) = 0. _d 0
248            fVerU (i,j,2) = 0. _d 0            fVerTr1(i,j,2) = 0. _d 0
249            fVerV (i,j,1) = 0. _d 0            fVerU  (i,j,1) = 0. _d 0
250            fVerV (i,j,2) = 0. _d 0            fVerU  (i,j,2) = 0. _d 0
251              fVerV  (i,j,1) = 0. _d 0
252              fVerV  (i,j,2) = 0. _d 0
253           ENDDO           ENDDO
254          ENDDO          ENDDO
255    
# Line 270  CADJ STORE theta(:,:,:,bi,bj) = comlev1_ Line 275  CADJ STORE theta(:,:,:,bi,bj) = comlev1_
275  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte
276  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte
277  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte
278    #ifdef ALLOW_PASSIVE_TRACER
279    CADJ STORE tr1  (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte
280    #endif
281  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
282    
283  C--     Start of diagnostic loop  C--     Start of diagnostic loop
# Line 439  CADJ STORE theta(:,:,:,bi,bj) = comlev1_ Line 447  CADJ STORE theta(:,:,:,bi,bj) = comlev1_
447  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte
448  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte
449  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte
450    #ifdef ALLOW_PASSIVE_TRACER
451    CADJ STORE tr1  (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte
452    #endif
453  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
454    
455  #ifdef ALLOW_AIM  #ifdef ALLOW_AIM
# Line 446  C       AIM - atmospheric intermediate m Line 457  C       AIM - atmospheric intermediate m
457  C note(jmc) : phiHyd=0 at this point but is not really used in Molteni Physics  C note(jmc) : phiHyd=0 at this point but is not really used in Molteni Physics
458          IF ( useAIM ) THEN          IF ( useAIM ) THEN
459           CALL TIMER_START('AIM_DO_ATMOS_PHYS      [DYNAMICS]', myThid)           CALL TIMER_START('AIM_DO_ATMOS_PHYS      [DYNAMICS]', myThid)
460           CALL AIM_DO_ATMOS_PHYSICS( phiHyd, myTime, myThid )           CALL AIM_DO_ATMOS_PHYSICS( phiHyd, bi, bj, myTime, myThid )
461           CALL TIMER_STOP ('AIM_DO_ATMOS_PHYS      [DYNAMICS]', myThid)           CALL TIMER_STOP ('AIM_DO_ATMOS_PHYS      [DYNAMICS]', myThid)
462          ENDIF          ENDIF
463  #endif /* ALLOW_AIM */  #endif /* ALLOW_AIM */
# Line 469  C--       kDown  Cycles through 2,1 to p Line 480  C--       kDown  Cycles through 2,1 to p
480            kup  = 1+MOD(k+1,2)            kup  = 1+MOD(k+1,2)
481            kDown= 1+MOD(k,2)            kDown= 1+MOD(k,2)
482    
483            iMin = 1-OLx+2            iMin = 1-OLx
484            iMax = sNx+OLx-1            iMax = sNx+OLx
485            jMin = 1-OLy+2            jMin = 1-OLy
486            jMax = sNy+OLy-1            jMax = sNy+OLy
487    
488  C--      Get temporary terms used by tendency routines  C--       Get temporary terms used by tendency routines
489           CALL CALC_COMMON_FACTORS (            CALL CALC_COMMON_FACTORS (
490       I        bi,bj,iMin,iMax,jMin,jMax,k,km1,kup,kDown,       I         bi,bj,iMin,iMax,jMin,jMax,k,
491       O        xA,yA,uTrans,vTrans,rTrans,maskC,maskUp,       O         xA,yA,uTrans,vTrans,rTrans,maskUp,
492       I        myThid)       I         myThid)
493    
494  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
495  CADJ STORE KappaRT(:,:,k)    = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE KappaRT(:,:,k)    = comlev1_bibj_k, key=kkey, byte=isbyte
# Line 489  CADJ STORE KappaRS(:,:,k)    = comlev1_b Line 500  CADJ STORE KappaRS(:,:,k)    = comlev1_b
500  C--      Calculate the total vertical diffusivity  C--      Calculate the total vertical diffusivity
501           CALL CALC_DIFFUSIVITY(           CALL CALC_DIFFUSIVITY(
502       I        bi,bj,iMin,iMax,jMin,jMax,k,       I        bi,bj,iMin,iMax,jMin,jMax,k,
503       I        maskC,maskup,       I        maskUp,
504       O        KappaRT,KappaRS,KappaRU,KappaRV,       O        KappaRT,KappaRS,KappaRU,KappaRV,
505       I        myThid)       I        myThid)
506  #endif  #endif
507    
508              iMin = 1-OLx+2
509              iMax = sNx+OLx-1
510              jMin = 1-OLy+2
511              jMax = sNy+OLy-1
512    
513  C--      Calculate active tracer tendencies (gT,gS,...)  C--      Calculate active tracer tendencies (gT,gS,...)
514  C        and step forward storing result in gTnm1, gSnm1, etc.  C        and step forward storing result in gTnm1, gSnm1, etc.
515           IF ( tempStepping ) THEN           IF ( tempStepping ) THEN
516             CALL CALC_GT(             CALL CALC_GT(
517       I         bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown,       I         bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown,
518       I         xA,yA,uTrans,vTrans,rTrans,maskUp,maskC,       I         xA,yA,uTrans,vTrans,rTrans,maskUp,
519       I         KappaRT,       I         KappaRT,
520       U         fVerT,       U         fVerT,
521       I         myTime, myThid)       I         myTime, myThid)
522               tauAB = 0.5d0 + abEps
523             CALL TIMESTEP_TRACER(             CALL TIMESTEP_TRACER(
524       I         bi,bj,iMin,iMax,jMin,jMax,k,       I         bi,bj,iMin,iMax,jMin,jMax,k,tauAB,
525       I         theta, gT,       I         theta, gT,
526       U         gTnm1,       U         gTnm1,
527       I         myIter, myThid)       I         myIter, myThid)
# Line 512  C        and step forward storing result Line 529  C        and step forward storing result
529           IF ( saltStepping ) THEN           IF ( saltStepping ) THEN
530             CALL CALC_GS(             CALL CALC_GS(
531       I         bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown,       I         bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown,
532       I         xA,yA,uTrans,vTrans,rTrans,maskUp,maskC,       I         xA,yA,uTrans,vTrans,rTrans,maskUp,
533       I         KappaRS,       I         KappaRS,
534       U         fVerS,       U         fVerS,
535       I         myTime, myThid)       I         myTime, myThid)
536               tauAB = 0.5d0 + abEps
537             CALL TIMESTEP_TRACER(             CALL TIMESTEP_TRACER(
538       I         bi,bj,iMin,iMax,jMin,jMax,k,       I         bi,bj,iMin,iMax,jMin,jMax,k,tauAB,
539       I         salt, gS,       I         salt, gS,
540       U         gSnm1,       U         gSnm1,
541       I         myIter, myThid)       I         myIter, myThid)
542           ENDIF           ENDIF
543    #ifdef ALLOW_PASSIVE_TRACER
544             IF ( tr1Stepping ) THEN
545               CALL CALC_GTR1(
546         I         bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown,
547         I         xA,yA,uTrans,vTrans,rTrans,maskUp,
548         I         KappaRT,
549         U         fVerTr1,
550         I         myTime, myThid)
551               tauAB = 0.5d0 + abEps
552               CALL TIMESTEP_TRACER(
553         I         bi,bj,iMin,iMax,jMin,jMax,k,tauAB,
554         I         Tr1, gTr1,
555         U         gTr1NM1,
556         I         myIter, myThid)
557             ENDIF
558    #endif
559    
560  #ifdef   ALLOW_OBCS  #ifdef   ALLOW_OBCS
561  C--      Apply open boundary conditions  C--      Apply open boundary conditions
# Line 580  CADJ STORE gSNm1(:,:,:,bi,bj) = comlev1_ Line 614  CADJ STORE gSNm1(:,:,:,bi,bj) = comlev1_
614       I         myThid )       I         myThid )
615           ENDIF           ENDIF
616    
617    #ifdef ALLOW_PASSIVE_TRACER
618             IF (tr1Stepping) THEN
619    #ifdef ALLOW_AUTODIFF_TAMC
620    CADJ STORE gTr1Nm1(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte
621    #endif /* ALLOW_AUTODIFF_TAMC */
622              CALL IMPLDIFF(
623         I      bi, bj, iMin, iMax, jMin, jMax,
624         I      deltaTtracer, KappaRT, recip_HFacC,
625         U      gTr1Nm1,
626         I      myThid )
627             ENDIF
628    #endif
629    
630  #ifdef   ALLOW_OBCS  #ifdef   ALLOW_OBCS
631  C--      Apply open boundary conditions  C--      Apply open boundary conditions
632           IF (useOBCS) THEN           IF (useOBCS) THEN
# Line 738  Cjmc(end) Line 785  Cjmc(end)
785    
786  #ifdef ALLOW_TIMEAVE  #ifdef ALLOW_TIMEAVE
787          IF (taveFreq.GT.0.) THEN          IF (taveFreq.GT.0.) THEN
788            CALL TIMEAVE_CUMULATE(phiHydtave, phiHyd, Nr,            CALL TIMEAVE_CUMUL_1T(phiHydtave, phiHyd, Nr,
789       I                              deltaTclock, bi, bj, myThid)       I                              deltaTclock, bi, bj, myThid)
790            IF (ivdc_kappa.NE.0.) THEN            IF (ivdc_kappa.NE.0.) THEN
791              CALL TIMEAVE_CUMULATE(ConvectCountTave, ConvectCount, Nr,              CALL TIMEAVE_CUMULATE(ConvectCountTave, ConvectCount, Nr,
# Line 750  Cjmc(end) Line 797  Cjmc(end)
797         ENDDO         ENDDO
798        ENDDO        ENDDO
799    
800    #ifndef EXCLUDE_DEBUGMODE
801          If (debugMode) THEN
802           CALL DEBUG_STATS_RL(1,EtaN,'EtaN (DYNAMICS)',myThid)
803           CALL DEBUG_STATS_RL(Nr,uVel,'Uvel (DYNAMICS)',myThid)
804           CALL DEBUG_STATS_RL(Nr,vVel,'Vvel (DYNAMICS)',myThid)
805           CALL DEBUG_STATS_RL(Nr,wVel,'Wvel (DYNAMICS)',myThid)
806           CALL DEBUG_STATS_RL(Nr,theta,'Theta (DYNAMICS)',myThid)
807           CALL DEBUG_STATS_RL(Nr,salt,'Salt (DYNAMICS)',myThid)
808           CALL DEBUG_STATS_RL(Nr,Gu,'Gu (DYNAMICS)',myThid)
809           CALL DEBUG_STATS_RL(Nr,Gv,'Gv (DYNAMICS)',myThid)
810           CALL DEBUG_STATS_RL(Nr,Gt,'Gt (DYNAMICS)',myThid)
811           CALL DEBUG_STATS_RL(Nr,Gs,'Gs (DYNAMICS)',myThid)
812           CALL DEBUG_STATS_RL(Nr,GuNm1,'GuNm1 (DYNAMICS)',myThid)
813           CALL DEBUG_STATS_RL(Nr,GvNm1,'GvNm1 (DYNAMICS)',myThid)
814           CALL DEBUG_STATS_RL(Nr,GtNm1,'GtNm1 (DYNAMICS)',myThid)
815           CALL DEBUG_STATS_RL(Nr,GsNm1,'GsNm1 (DYNAMICS)',myThid)
816          ENDIF
817    #endif
818    
819        RETURN        RETURN
820        END        END

Legend:
Removed from v.1.67  
changed lines
  Added in v.1.74

  ViewVC Help
Powered by ViewVC 1.1.22