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

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

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

revision 1.88 by dimitri, Fri Dec 17 19:17:56 2004 UTC revision 1.105 by jmc, Sun Jun 18 23:22:43 2006 UTC
# Line 19  C     !INTERFACE: Line 19  C     !INTERFACE:
19        SUBROUTINE THERMODYNAMICS(myTime, myIter, myThid)        SUBROUTINE THERMODYNAMICS(myTime, myIter, myThid)
20  C     !DESCRIPTION: \bv  C     !DESCRIPTION: \bv
21  C     *==========================================================*  C     *==========================================================*
22  C     | SUBROUTINE THERMODYNAMICS                                  C     | SUBROUTINE THERMODYNAMICS
23  C     | o Controlling routine for the prognostic part of the        C     | o Controlling routine for the prognostic part of the
24  C     |   thermo-dynamics.                                          C     |   thermo-dynamics.
25  C     *===========================================================  C     *===========================================================
26  C     | The algorithm...  C     | The algorithm...
27  C     |  C     |
# Line 80  C     == Global variables === Line 80  C     == Global variables ===
80  #ifdef ALLOW_GENERIC_ADVDIFF  #ifdef ALLOW_GENERIC_ADVDIFF
81  #include "GAD.h"  #include "GAD.h"
82  #endif  #endif
 #ifdef ALLOW_OFFLINE  
 #include "OFFLINE.h"  
 #endif  
83  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
84  #include "PTRACERS_SIZE.h"  #include "PTRACERS_SIZE.h"
85  #include "PTRACERS.h"  #include "PTRACERS.h"
# Line 107  C     == Global variables === Line 104  C     == Global variables ===
104  # endif  # endif
105  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
106    
   
107  C     !INPUT/OUTPUT PARAMETERS:  C     !INPUT/OUTPUT PARAMETERS:
108  C     == Routine arguments ==  C     == Routine arguments ==
109  C     myTime - Current time in simulation  C     myTime - Current time in simulation
# Line 121  C     myThid - Thread number for this in Line 117  C     myThid - Thread number for this in
117  C     !LOCAL VARIABLES:  C     !LOCAL VARIABLES:
118  C     == Local variables  C     == Local variables
119  C     xA, yA                 - Per block temporaries holding face areas  C     xA, yA                 - Per block temporaries holding face areas
120  C     uTrans, vTrans, rTrans - Per block temporaries holding flow  C     uFld, vFld, wFld       - Local copy of velocity field (3 components)
121  C                              transport  C     uTrans, vTrans, rTrans - Per block temporaries holding flow transport
122  C                              o uTrans: Zonal transport  C                              o uTrans: Zonal transport
123  C                              o vTrans: Meridional transport  C                              o vTrans: Meridional transport
124  C                              o rTrans: Vertical transport  C                              o rTrans: Vertical transport
# Line 136  C     kappaRT,       - Total diffusion i Line 132  C     kappaRT,       - Total diffusion i
132  C     kappaRS          (background + spatially varying, isopycnal term).  C     kappaRS          (background + spatially varying, isopycnal term).
133  C     kappaRTr       - Total diffusion in vertical at level k,  C     kappaRTr       - Total diffusion in vertical at level k,
134  C                      for each passive Tracer  C                      for each passive Tracer
135  C     kappaRk        - Total diffusion in vertical, all levels, 1 tracer    C     kappaRk        - Total diffusion in vertical, all levels, 1 tracer
136  C     useVariableK   = T when vertical diffusion is not constant  C     useVariableK   = T when vertical diffusion is not constant
137  C     iMin, iMax     - Ranges and sub-block indices on which calculations  C     iMin, iMax     - Ranges and sub-block indices on which calculations
138  C     jMin, jMax       are applied.  C     jMin, jMax       are applied.
# Line 146  C     kDown, km1       are switched with Line 142  C     kDown, km1       are switched with
142  C                      index into fVerTerm.  C                      index into fVerTerm.
143        _RS xA      (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RS xA      (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
144        _RS yA      (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RS yA      (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
145          _RL uFld    (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
146          _RL vFld    (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
147          _RL wFld    (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
148        _RL uTrans  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL uTrans  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
149        _RL vTrans  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL vTrans  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
150        _RL rTrans  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rTrans  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
# Line 160  C                      index into fVerTe Line 159  C                      index into fVerTe
159        _RL kappaRTr(1-Olx:sNx+Olx,1-Oly:sNy+Oly,PTRACERS_num)        _RL kappaRTr(1-Olx:sNx+Olx,1-Oly:sNy+Oly,PTRACERS_num)
160  #endif  #endif
161        _RL kappaRk (1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)        _RL kappaRk (1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
       _RL kp1Msk  
       LOGICAL useVariableK  
162        INTEGER iMin, iMax        INTEGER iMin, iMax
163        INTEGER jMin, jMax        INTEGER jMin, jMax
164        INTEGER bi, bj        INTEGER bi, bj
165        INTEGER i, j        INTEGER i, j
166        INTEGER k, km1, kup, kDown        INTEGER k, km1, kup, kDown
167    #ifdef ALLOW_ADAMSBASHFORTH_3
168          INTEGER iterNb, m1, m2
169    #endif
170    #ifdef ALLOW_TIMEAVE
171          LOGICAL useVariableK
172    #endif
173    #ifdef ALLOW_PTRACERS
174        INTEGER iTracer, ip        INTEGER iTracer, ip
175    #endif
176    
177  CEOP  CEOP
178    
# Line 175  CEOP Line 180  CEOP
180           IF ( debugLevel .GE. debLevB )           IF ( debugLevel .GE. debLevB )
181       &    CALL DEBUG_ENTER('THERMODYNAMICS',myThid)       &    CALL DEBUG_ENTER('THERMODYNAMICS',myThid)
182  #endif  #endif
183    
184  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
185  C--   dummy statement to end declaration part  C--   dummy statement to end declaration part
186        ikey = 1        ikey = 1
# Line 195  CHPF$  INDEPENDENT, NEW (rTrans,fVerT,fV Line 200  CHPF$  INDEPENDENT, NEW (rTrans,fVerT,fV
200  CHPF$&                  ,utrans,vtrans,xA,yA  CHPF$&                  ,utrans,vtrans,xA,yA
201  CHPF$&                  ,kappaRT,kappaRS  CHPF$&                  ,kappaRT,kappaRS
202  CHPF$&                  )  CHPF$&                  )
203    # ifdef ALLOW_PTRACERS
204    CHPF$  INDEPENDENT, NEW (fVerP,kappaRTr)
205    # endif
206  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
207    
208         DO bi=myBxLo(myThid),myBxHi(myThid)         DO bi=myBxLo(myThid),myBxHi(myThid)
# Line 232  C     uninitialised but inert locations. Line 240  C     uninitialised but inert locations.
240            fVerS  (i,j,2) = 0. _d 0            fVerS  (i,j,2) = 0. _d 0
241            kappaRT(i,j)   = 0. _d 0            kappaRT(i,j)   = 0. _d 0
242            kappaRS(i,j)   = 0. _d 0            kappaRS(i,j)   = 0. _d 0
 #ifdef ALLOW_PTRACERS  
           DO ip=1,PTRACERS_num  
            fVerP  (i,j,1,ip) = 0. _d 0  
            fVerP  (i,j,2,ip) = 0. _d 0  
            kappaRTr(i,j,ip)  = 0. _d 0  
           ENDDO  
 #endif  
243           ENDDO           ENDDO
244          ENDDO          ENDDO
245    
# Line 250  C This is currently also used by IVDC an Line 251  C This is currently also used by IVDC an
251  C- tracer tendency needs to be set to zero (moved here from gad_calc_rhs):  C- tracer tendency needs to be set to zero (moved here from gad_calc_rhs):
252             gT(i,j,k,bi,bj)   = 0. _d 0             gT(i,j,k,bi,bj)   = 0. _d 0
253             gS(i,j,k,bi,bj)   = 0. _d 0             gS(i,j,k,bi,bj)   = 0. _d 0
 # ifdef ALLOW_PTRACERS  
            DO iTracer=1,PTRACERS_numInUse  
             gPTr(i,j,k,bi,bj,itracer) = 0. _d 0  
            ENDDO  
 # endif  
254            ENDDO            ENDDO
255           ENDDO           ENDDO
256          ENDDO          ENDDO
257    
258    #ifdef ALLOW_PTRACERS
259            IF ( usePTRACERS ) THEN
260             DO ip=1,PTRACERS_num
261               DO j=1-OLy,sNy+OLy
262                DO i=1-OLx,sNx+OLx
263                 fVerP  (i,j,1,ip) = 0. _d 0
264                 fVerP  (i,j,2,ip) = 0. _d 0
265                 kappaRTr(i,j,ip)  = 0. _d 0
266                ENDDO
267               ENDDO
268             ENDDO
269    C-      set tracer tendency to zero:
270             DO iTracer=1,PTRACERS_num
271              DO k=1,Nr
272               DO j=1-OLy,sNy+OLy
273                DO i=1-OLx,sNx+OLx
274                 gPTr(i,j,k,bi,bj,itracer) = 0. _d 0
275                ENDDO
276               ENDDO
277              ENDDO
278             ENDDO
279            ENDIF
280    #endif
281    
282    #ifdef ALLOW_ADAMSBASHFORTH_3
283    C-      Apply AB on T,S :
284            iterNb = myIter
285            IF (staggerTimeStep) iterNb = myIter - 1
286            m1 = 1 + MOD(iterNb+1,2)
287            m2 = 1 + MOD( iterNb ,2)
288    C       compute T^n+1/2 (stored in gtNm) extrapolating T forward in time
289            IF ( AdamsBashforth_T ) CALL ADAMS_BASHFORTH3(
290         I                                  bi, bj, 0,
291         U                                  theta, gtNm,
292         I                                  tempStartAB, iterNb, myThid )
293    C       compute S^n+1/2 (stored in gsNm) extrapolating S forward in time
294            IF ( AdamsBashforth_S ) CALL ADAMS_BASHFORTH3(
295         I                                  bi, bj, 0,
296         U                                  salt, gsNm,
297         I                                  saltStartAB, iterNb, myThid )
298    #endif /* ALLOW_ADAMSBASHFORTH_3 */
299    
300  c       iMin = 1-OLx  c       iMin = 1-OLx
301  c       iMax = sNx+OLx  c       iMax = sNx+OLx
302  c       jMin = 1-OLy  c       jMin = 1-OLy
# Line 278  CADJ STORE theta(:,:,:,bi,bj) = comlev1_ Line 316  CADJ STORE theta(:,:,:,bi,bj) = comlev1_
316  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
317  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
318  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
319  #ifdef ALLOW_PTRACERS  cph-test
320  cph-- moved to forward_step to avoid key computation  # ifdef ALLOW_DEPTH_CONTROL
321  cphCADJ STORE ptracer(:,:,:,bi,bj,itracer) = comlev1_bibj,  CADJ STORE gtnm1(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
322  cphCADJ &                              key=itdkey, byte=isbyte  CADJ STORE gsnm1(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
323  #endif  # endif
324  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
325    
326  #ifndef DISABLE_MULTIDIM_ADVECTION  #ifndef DISABLE_MULTIDIM_ADVECTION
# Line 296  C to be able to exclude this scheme to a Line 334  C to be able to exclude this scheme to a
334  C recomputation. It *is* differentiable, if you need it.  C recomputation. It *is* differentiable, if you need it.
335  C Edit GAD_OPTIONS.h and #define DISABLE_MULTIDIM_ADVECTION to  C Edit GAD_OPTIONS.h and #define DISABLE_MULTIDIM_ADVECTION to
336  C disable this section of code.  C disable this section of code.
 #ifndef ALLOW_OFFLINE  
337          IF (tempMultiDimAdvec) THEN          IF (tempMultiDimAdvec) THEN
338  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
339            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
# Line 309  C disable this section of code. Line 346  C disable this section of code.
346       O             gT,       O             gT,
347       I             bi,bj,myTime,myIter,myThid)       I             bi,bj,myTime,myIter,myThid)
348          ENDIF          ENDIF
 #endif  
 #ifndef ALLOW_OFFLINE  
349          IF (saltMultiDimAdvec) THEN          IF (saltMultiDimAdvec) THEN
350  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
351            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
# Line 323  C disable this section of code. Line 358  C disable this section of code.
358       O             gS,       O             gS,
359       I             bi,bj,myTime,myIter,myThid)       I             bi,bj,myTime,myIter,myThid)
360          ENDIF          ENDIF
361  #endif  
362  C Since passive tracers are configurable separately from T,S we  C Since passive tracers are configurable separately from T,S we
363  C call the multi-dimensional method for PTRACERS regardless  C call the multi-dimensional method for PTRACERS regardless
364  C of whether multiDimAdvection is set or not.  C of whether multiDimAdvection is set or not.
# Line 365  C--       kDown  Cycles through 2,1 to p Line 400  C--       kDown  Cycles through 2,1 to p
400            jMin = 1-OLy            jMin = 1-OLy
401            jMax = sNy+OLy            jMax = sNy+OLy
402    
403            kp1Msk=1.            IF (k.EQ.Nr) THEN
404            IF (k.EQ.Nr) kp1Msk=0.             DO j=1-Oly,sNy+Oly
405                DO i=1-Olx,sNx+Olx
406                 rTransKp1(i,j) = 0. _d 0
407                ENDDO
408               ENDDO
409              ELSE
410             DO j=1-Oly,sNy+Oly             DO j=1-Oly,sNy+Oly
411              DO i=1-Olx,sNx+Olx              DO i=1-Olx,sNx+Olx
412               rTransKp1(i,j) = kp1Msk*rTrans(i,j)               rTransKp1(i,j) = rTrans(i,j)
413              ENDDO              ENDDO
414             ENDDO             ENDDO
415              ENDIF
416  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
417  CADJ STORE rTransKp1(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE rTransKp1(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
418  #endif  #endif
419    
420  C--       Get temporary terms used by tendency routines  C--       Get temporary terms used by tendency routines :
421    C-        Calculate horizontal "volume transport" through tracer cell face
422            CALL CALC_COMMON_FACTORS (            CALL CALC_COMMON_FACTORS (
423       I         bi,bj,iMin,iMax,jMin,jMax,k,       I         uVel, vVel,
424       O         xA,yA,uTrans,vTrans,rTrans,maskUp,       O         uFld, vFld, uTrans, vTrans, xA, yA,
425       I         myThid)       I         k,bi,bj, myThid )
426    
427    C-        Calculate vertical "volume transport" through tracer cell face
428            IF (k.EQ.1) THEN            IF (k.EQ.1) THEN
429  C- Surface interface :  C-         Surface interface :
430             DO j=1-Oly,sNy+Oly             DO j=1-Oly,sNy+Oly
431              DO i=1-Olx,sNx+Olx              DO i=1-Olx,sNx+Olx
432               rTrans(i,j) = 0.               wFld(i,j)   = 0. _d 0
433                 maskUp(i,j) = 0. _d 0
434                 rTrans(i,j) = 0. _d 0
435              ENDDO              ENDDO
436             ENDDO             ENDDO
437            ELSE            ELSE
438  C- Interior interface :  C-         Interior interface :
439             DO j=1-Oly,sNy+Oly             DO j=1-Oly,sNy+Oly
440              DO i=1-Olx,sNx+Olx              DO i=1-Olx,sNx+Olx
441               rTrans(i,j) = rTrans(i,j)*maskC(i,j,k-1,bi,bj)               wFld(i,j)   = wVel(i,j,k,bi,bj)
442                 maskUp(i,j) = maskC(i,j,k-1,bi,bj)*maskC(i,j,k,bi,bj)
443                 rTrans(i,j) = wFld(i,j)*rA(i,j,bi,bj)*maskUp(i,j)
444              ENDDO              ENDDO
445             ENDDO             ENDDO
446            ENDIF            ENDIF
447    
448  #ifdef ALLOW_GMREDI  #ifdef ALLOW_GMREDI
   
449  C--   Residual transp = Bolus transp + Eulerian transp  C--   Residual transp = Bolus transp + Eulerian transp
450            IF (useGMRedi) THEN            IF (useGMRedi) THEN
451              CALL GMREDI_CALC_UVFLOW(              CALL GMREDI_CALC_UVFLOW(
452       &            uTrans, vTrans, bi, bj, k, myThid)       U                  uFld, vFld, uTrans, vTrans,
453         I                  k, bi, bj, myThid )
454              IF (K.GE.2) CALL GMREDI_CALC_WFLOW(              IF (K.GE.2) CALL GMREDI_CALC_WFLOW(
455       &                    rTrans, bi, bj, k, myThid)       U                  wFld, rTrans,
456         I                  k, bi, bj, myThid )
457            ENDIF            ENDIF
458    # ifdef ALLOW_AUTODIFF_TAMC
 #ifdef ALLOW_AUTODIFF_TAMC  
459  CADJ STORE rTrans(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE rTrans(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte
460  #ifdef GM_BOLUS_ADVEC  # ifdef GM_BOLUS_ADVEC
461  CADJ STORE uTrans(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE uTrans(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte
462  CADJ STORE vTrans(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE vTrans(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte
463  #endif  # endif
464  #endif /* ALLOW_AUTODIFF_TAMC */  # endif /* ALLOW_AUTODIFF_TAMC */
   
465  #endif /* ALLOW_GMREDI */  #endif /* ALLOW_GMREDI */
466    
467  #ifdef  INCLUDE_CALC_DIFFUSIVITY_CALL  #ifdef  INCLUDE_CALC_DIFFUSIVITY_CALL
# Line 439  CADJ STORE kappaRS(:,:)    = comlev1_bib Line 485  CADJ STORE kappaRS(:,:)    = comlev1_bib
485            jMax = sNy+OLy-1            jMax = sNy+OLy-1
486    
487  C--      Calculate active tracer tendencies (gT,gS,...)  C--      Calculate active tracer tendencies (gT,gS,...)
488  C        and step forward storing result in gTnm1, gSnm1, etc.  C        and step forward storing result in gT, gS, etc.
489  #ifndef ALLOW_OFFLINE  C--
490    # ifdef ALLOW_AUTODIFF_TAMC
491    #  if ((defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)) && (defined ALLOW_GMREDI)
492    CADJ STORE kux(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
493    CADJ STORE kvy(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
494    #   ifdef GM_EXTRA_DIAGONAL
495    CADJ STORE kuz(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
496    CADJ STORE kvz(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
497    #   endif
498    #  endif
499    # endif /* ALLOW_AUTODIFF_TAMC */
500           IF ( tempStepping ) THEN           IF ( tempStepping ) THEN
501             CALL CALC_GT(  #ifdef ALLOW_AUTODIFF_TAMC
502    CADJ STORE gTnm1(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
503    # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
504    CADJ STORE gT(:,:,k,bi,bj)    = comlev1_bibj_k, key=kkey, byte=isbyte
505    # endif
506    #endif /* ALLOW_AUTODIFF_TAMC */
507              CALL CALC_GT(
508       I         bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown,       I         bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown,
509       I         xA,yA,uTrans,vTrans,rTrans,rTransKp1,maskUp,       I         xA, yA, maskUp, uFld, vFld, wFld,
510         I         uTrans, vTrans, rTrans, rTransKp1,
511       I         kappaRT,       I         kappaRT,
512       U         fVerT,       U         fVerT,
513       I         myTime,myIter,myThid)       I         myTime,myIter,myThid)
514    #ifdef ALLOW_ADAMSBASHFORTH_3
515              IF ( AdamsBashforth_T ) THEN
516             CALL TIMESTEP_TRACER(             CALL TIMESTEP_TRACER(
517       I         bi,bj,iMin,iMax,jMin,jMax,k,tempAdvScheme,       I         bi,bj,iMin,iMax,jMin,jMax,k,tempAdvScheme,
518       I         theta, gT,       I         gtNm(1-Olx,1-Oly,1,1,1,m2),
519         U         gT,
520       I         myIter, myThid)       I         myIter, myThid)
521           ENDIF            ELSE
522  #endif  #endif
523               CALL TIMESTEP_TRACER(
524         I         bi,bj,iMin,iMax,jMin,jMax,k,tempAdvScheme,
525         I         theta,
526         U         gT,
527         I         myIter, myThid)
528    #ifdef ALLOW_ADAMSBASHFORTH_3
529              ENDIF
530    #endif
531             ENDIF
532    
 #ifndef ALLOW_OFFLINE  
533           IF ( saltStepping ) THEN           IF ( saltStepping ) THEN
534             CALL CALC_GS(  #ifdef ALLOW_AUTODIFF_TAMC
535    CADJ STORE gSnm1(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
536    # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
537    CADJ STORE gS(:,:,k,bi,bj)    = comlev1_bibj_k, key=kkey, byte=isbyte
538    # endif
539    #endif /* ALLOW_AUTODIFF_TAMC */
540              CALL CALC_GS(
541       I         bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown,       I         bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown,
542       I         xA,yA,uTrans,vTrans,rTrans,rTransKp1,maskUp,       I         xA, yA, maskUp, uFld, vFld, wFld,
543         I         uTrans, vTrans, rTrans, rTransKp1,
544       I         kappaRS,       I         kappaRS,
545       U         fVerS,       U         fVerS,
546       I         myTime,myIter,myThid)       I         myTime,myIter,myThid)
547    #ifdef ALLOW_ADAMSBASHFORTH_3
548              IF ( AdamsBashforth_S ) THEN
549             CALL TIMESTEP_TRACER(             CALL TIMESTEP_TRACER(
550       I         bi,bj,iMin,iMax,jMin,jMax,k,saltAdvScheme,       I         bi,bj,iMin,iMax,jMin,jMax,k,saltAdvScheme,
551       I         salt, gS,       I         gsNm(1-Olx,1-Oly,1,1,1,m2),
552         U         gS,
553       I         myIter, myThid)       I         myIter, myThid)
554           ENDIF            ELSE
555    #endif
556               CALL TIMESTEP_TRACER(
557         I         bi,bj,iMin,iMax,jMin,jMax,k,saltAdvScheme,
558         I         salt,
559         U         gS,
560         I         myIter, myThid)
561    #ifdef ALLOW_ADAMSBASHFORTH_3
562              ENDIF
563  #endif  #endif
564             ENDIF
565    
566  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
567           IF ( usePTRACERS ) THEN           IF ( usePTRACERS ) THEN
568             IF ( .NOT.implicitDiffusion ) THEN             IF ( .NOT.implicitDiffusion ) THEN
# Line 478  C        and step forward storing result Line 572  C        and step forward storing result
572       O            kappaRTr,       O            kappaRTr,
573       I            myThid)       I            myThid)
574             ENDIF             ENDIF
575    # ifdef ALLOW_AUTODIFF_TAMC
576    CADJ STORE kappaRTr(:,:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte
577    # endif /* ALLOW_AUTODIFF_TAMC */
578             CALL PTRACERS_INTEGRATE(             CALL PTRACERS_INTEGRATE(
579       I         bi,bj,k,       I          bi,bj,k,
580       I         xA,yA,uTrans,vTrans,rTrans,rTransKp1,maskUp,       I          xA, yA, maskUp, uFld, vFld, wFld,
581       U         fVerP,       I          uTrans, vTrans, rTrans, rTransKp1,
582       I         kappaRTr,       I          kappaRTr,
583       I         myIter,myTime,myThid)       U          fVerP,
584         I          myTime,myIter,myThid)
585           ENDIF           ENDIF
586  #endif /* ALLOW_PTRACERS */  #endif /* ALLOW_PTRACERS */
587    
# Line 497  C--      Apply open boundary conditions Line 595  C--      Apply open boundary conditions
595  C--      Freeze water  C--      Freeze water
596  C  this bit of code is left here for backward compatibility.  C  this bit of code is left here for backward compatibility.
597  C  freezing at surface level has been moved to FORWARD_STEP  C  freezing at surface level has been moved to FORWARD_STEP
 #ifndef ALLOW_OFFLINE  
598           IF ( useOldFreezing .AND. .NOT. useSEAICE           IF ( useOldFreezing .AND. .NOT. useSEAICE
599       &       .AND. .NOT.(useThSIce.AND.k.EQ.1) ) THEN       &       .AND. .NOT.(useThSIce.AND.k.EQ.1) ) THEN
600  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
# Line 506  CADJ &   , key = kkey, byte = isbyte Line 603  CADJ &   , key = kkey, byte = isbyte
603  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
604              CALL FREEZE( bi, bj, iMin, iMax, jMin, jMax, k, myThid )              CALL FREEZE( bi, bj, iMin, iMax, jMin, jMax, k, myThid )
605           ENDIF           ENDIF
 #endif  
606    
607  C--     end of thermodynamic k loop (Nr:1)  C--     end of thermodynamic k loop (Nr:1)
608          ENDDO          ENDDO
609    
610    C       All explicit advection/diffusion/sources should now be
611    C       done. The updated tracer field is in gPtr. Accumalate
612    C       explicit tendency and also reset gPtr to initial tracer
613    C       field for implicit matrix calculation
614    
615    #ifdef ALLOW_MATRIX
616            IF (useMATRIX)
617         &    CALL MATRIX_STORE_TENDENCY_EXP(bi,bj, myTime,myIter,myThid)
618    #endif
619    
620          iMin = 1          iMin = 1
621          iMax = sNx          iMax = sNx
622          jMin = 1          jMin = 1
623          jMax = sNy          jMax = sNy
624    
625  C--     Implicit vertical advection & diffusion  C--     Implicit vertical advection & diffusion
 #ifndef ALLOW_OFFLINE  
626          IF ( tempStepping .AND. implicitDiffusion ) THEN          IF ( tempStepping .AND. implicitDiffusion ) THEN
627            CALL CALC_3D_DIFFUSIVITY(            CALL CALC_3D_DIFFUSIVITY(
628       I         bi,bj,iMin,iMax,jMin,jMax,       I         bi,bj,iMin,iMax,jMin,jMax,
# Line 529  C--     Implicit vertical advection & di Line 634  C--     Implicit vertical advection & di
634          IF ( tempImplVertAdv ) THEN          IF ( tempImplVertAdv ) THEN
635            CALL GAD_IMPLICIT_R(            CALL GAD_IMPLICIT_R(
636       I         tempImplVertAdv, tempAdvScheme, GAD_TEMPERATURE,       I         tempImplVertAdv, tempAdvScheme, GAD_TEMPERATURE,
637       I         kappaRk, wVel, theta,       I         kappaRk, wVel, theta,
638       U         gT,       U         gT,
639       I         bi, bj, myTime, myIter, myThid )       I         bi, bj, myTime, myIter, myThid )
640          ELSEIF ( tempStepping .AND. implicitDiffusion ) THEN          ELSEIF ( tempStepping .AND. implicitDiffusion ) THEN
# Line 546  CADJ STORE gT(:,:,:,bi,bj) = comlev1_bib Line 651  CADJ STORE gT(:,:,:,bi,bj) = comlev1_bib
651       U         gT,       U         gT,
652       I         myThid )       I         myThid )
653          ENDIF          ENDIF
 #endif /* ndef ALLOW_OFFLINE */  
654    
655  #ifdef ALLOW_TIMEAVE  #ifdef ALLOW_TIMEAVE
 #ifndef MINIMAL_TAVE_OUTPUT  
656          useVariableK = useKPP .OR. usePP81 .OR. useMY82 .OR. useGGL90          useVariableK = useKPP .OR. usePP81 .OR. useMY82 .OR. useGGL90
657       &       .OR. useGMredi .OR. ivdc_kappa.NE.0.       &       .OR. useGMredi .OR. ivdc_kappa.NE.0.
658          IF (taveFreq.GT.0. .AND. useVariableK ) THEN          IF (taveFreq.GT.0. .AND. useVariableK ) THEN
# Line 561  c          CALL TIMEAVE_CUMUL_DIF_1T(Tdi Line 664  c          CALL TIMEAVE_CUMUL_DIF_1T(Tdi
664  c    I                        Nr, 3, deltaTclock, bi, bj, myThid)  c    I                        Nr, 3, deltaTclock, bi, bj, myThid)
665           ENDIF           ENDIF
666          ENDIF          ENDIF
 #endif /* ndef MINIMAL_TAVE_OUTPUT */  
667  #endif /* ALLOW_TIMEAVE */  #endif /* ALLOW_TIMEAVE */
668    
 #ifndef ALLOW_OFFLINE  
669          IF ( saltStepping .AND. implicitDiffusion ) THEN          IF ( saltStepping .AND. implicitDiffusion ) THEN
670            CALL CALC_3D_DIFFUSIVITY(            CALL CALC_3D_DIFFUSIVITY(
671       I         bi,bj,iMin,iMax,jMin,jMax,       I         bi,bj,iMin,iMax,jMin,jMax,
# Line 577  c    I                        Nr, 3, del Line 678  c    I                        Nr, 3, del
678          IF ( saltImplVertAdv ) THEN          IF ( saltImplVertAdv ) THEN
679            CALL GAD_IMPLICIT_R(            CALL GAD_IMPLICIT_R(
680       I         saltImplVertAdv, saltAdvScheme, GAD_SALINITY,       I         saltImplVertAdv, saltAdvScheme, GAD_SALINITY,
681       I         kappaRk, wVel, salt,       I         kappaRk, wVel, salt,
682       U         gS,       U         gS,
683       I         bi, bj, myTime, myIter, myThid )       I         bi, bj, myTime, myIter, myThid )
684          ELSEIF ( saltStepping .AND. implicitDiffusion ) THEN          ELSEIF ( saltStepping .AND. implicitDiffusion ) THEN
# Line 594  CADJ STORE gS(:,:,:,bi,bj) = comlev1_bib Line 695  CADJ STORE gS(:,:,:,bi,bj) = comlev1_bib
695       U         gS,       U         gS,
696       I         myThid )       I         myThid )
697          ENDIF          ENDIF
 #endif  
698    
699  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
700          IF     ( usePTRACERS ) THEN          IF     ( usePTRACERS ) THEN
701  C--     Vertical advection/diffusion (implicit) for passive tracers  C--     Vertical advection/diffusion (implicit) for passive tracers
702             CALL PTRACERS_IMPLICIT(             CALL PTRACERS_IMPLICIT(
703       U                             kappaRk,       U                             kappaRk,
704       I                             bi, bj, myTime, myIter, myThid )       I                             bi, bj, myTime, myIter, myThid )
705          ENDIF          ENDIF
# Line 617  C--      Apply open boundary conditions Line 717  C--      Apply open boundary conditions
717          ENDIF          ENDIF
718  #endif   /* ALLOW_OBCS */  #endif   /* ALLOW_OBCS */
719    
 #ifdef ALLOW_TIMEAVE  
         IF ( taveFreq.GT. 0. _d 0 .AND. fluidIsWater ) THEN  
           CALL TIMEAVE_SURF_FLUX( bi, bj, myTime, myIter, myThid)  
         ENDIF  
 #ifndef MINIMAL_TAVE_OUTPUT  
         IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN  
           CALL TIMEAVE_CUMULATE(ConvectCountTave, IVDConvCount,  
      I                           Nr, deltaTclock, bi, bj, myThid)  
         ENDIF  
 #endif /* ndef MINIMAL_TAVE_OUTPUT */  
 #endif /* ALLOW_TIMEAVE */  
   
 #ifdef ALLOW_DIAGNOSTICS  
         IF ( usediagnostics ) CALL DIAGNOSTICS_FILL_SURF_FLUX(myThid)  
 #endif  
   
720  #endif /* SINGLE_LAYER_MODE */  #endif /* SINGLE_LAYER_MODE */
721    
722  C--   end bi,bj loops.  C--   end bi,bj loops.
# Line 646  C--   end bi,bj loops. Line 730  C--   end bi,bj loops.
730         CALL DEBUG_STATS_RL(Nr,wVel,'Wvel (THERMODYNAMICS)',myThid)         CALL DEBUG_STATS_RL(Nr,wVel,'Wvel (THERMODYNAMICS)',myThid)
731         CALL DEBUG_STATS_RL(Nr,theta,'Theta (THERMODYNAMICS)',myThid)         CALL DEBUG_STATS_RL(Nr,theta,'Theta (THERMODYNAMICS)',myThid)
732         CALL DEBUG_STATS_RL(Nr,salt,'Salt (THERMODYNAMICS)',myThid)         CALL DEBUG_STATS_RL(Nr,salt,'Salt (THERMODYNAMICS)',myThid)
733         CALL DEBUG_STATS_RL(Nr,Gt,'Gt (THERMODYNAMICS)',myThid)         CALL DEBUG_STATS_RL(Nr,gT,'Gt (THERMODYNAMICS)',myThid)
734         CALL DEBUG_STATS_RL(Nr,Gs,'Gs (THERMODYNAMICS)',myThid)         CALL DEBUG_STATS_RL(Nr,gS,'Gs (THERMODYNAMICS)',myThid)
735         CALL DEBUG_STATS_RL(Nr,GtNm1,'GtNm1 (THERMODYNAMICS)',myThid)  #ifndef ALLOW_ADAMSBASHFORTH_3
736         CALL DEBUG_STATS_RL(Nr,GsNm1,'GsNm1 (THERMODYNAMICS)',myThid)         CALL DEBUG_STATS_RL(Nr,gtNm1,'GtNm1 (THERMODYNAMICS)',myThid)
737           CALL DEBUG_STATS_RL(Nr,gsNm1,'GsNm1 (THERMODYNAMICS)',myThid)
738    #endif
739  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
740         IF ( usePTRACERS ) THEN         IF ( usePTRACERS ) THEN
741           CALL PTRACERS_DEBUG(myThid)           CALL PTRACERS_DEBUG(myThid)
742         ENDIF         ENDIF
743  #endif /* ALLOW_PTRACERS */  #endif /* ALLOW_PTRACERS */
744        ENDIF        ENDIF
745  #endif  #endif /* ALLOW_DEBUG */
746    
747  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
748           IF ( debugLevel .GE. debLevB )           IF ( debugLevel .GE. debLevB )
749       &    CALL DEBUG_LEAVE('THERMODYNAMICS',myThid)       &    CALL DEBUG_LEAVE('THERMODYNAMICS',myThid)
750  #endif  #endif
751    

Legend:
Removed from v.1.88  
changed lines
  Added in v.1.105

  ViewVC Help
Powered by ViewVC 1.1.22