/[MITgcm]/MITgcm_contrib/jscott/code_rafmod/thermodynamics.F
ViewVC logotype

Diff of /MITgcm_contrib/jscott/code_rafmod/thermodynamics.F

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

revision 1.1 by jscott, Tue Aug 21 16:34:17 2007 UTC revision 1.2 by jscott, Thu Sep 3 20:40:01 2009 UTC
# Line 6  C $Name$ Line 6  C $Name$
6  #ifdef ALLOW_GENERIC_ADVDIFF  #ifdef ALLOW_GENERIC_ADVDIFF
7  # include "GAD_OPTIONS.h"  # include "GAD_OPTIONS.h"
8  #endif  #endif
9    #ifdef ALLOW_LONGSTEP
10    #include "LONGSTEP_OPTIONS.h"
11    #endif
12    
13  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
14  # ifdef ALLOW_GMREDI  # ifdef ALLOW_GMREDI
# Line 78  C     == Global variables === Line 81  C     == Global variables ===
81  #include "SIZE.h"  #include "SIZE.h"
82  #include "EEPARAMS.h"  #include "EEPARAMS.h"
83  #include "PARAMS.h"  #include "PARAMS.h"
84    #include "RESTART.h"
85  #include "DYNVARS.h"  #include "DYNVARS.h"
86  #include "GRID.h"  #include "GRID.h"
87  #ifdef ALLOW_GENERIC_ADVDIFF  #ifdef ALLOW_GENERIC_ADVDIFF
# Line 85  C     == Global variables === Line 89  C     == Global variables ===
89  # include "GAD_SOM_VARS.h"  # include "GAD_SOM_VARS.h"
90  #endif  #endif
91  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
92    #ifndef ALLOW_LONGSTEP
93  # include "PTRACERS_SIZE.h"  # include "PTRACERS_SIZE.h"
94  # include "PTRACERS.h"  # include "PTRACERS_PARAMS.h"
95    # include "PTRACERS_FIELDS.h"
96    #endif
97  #endif  #endif
98  #ifdef ALLOW_TIMEAVE  #ifdef ALLOW_TIMEAVE
99  # include "TIMEAVE_STATV.h"  # include "TIMEAVE_STATV.h"
# Line 96  C     == Global variables === Line 103  C     == Global variables ===
103  # include "tamc.h"  # include "tamc.h"
104  # include "tamc_keys.h"  # include "tamc_keys.h"
105  # include "FFIELDS.h"  # include "FFIELDS.h"
106    # include "SURFACE.h"
107  # include "EOS.h"  # include "EOS.h"
108  # ifdef ALLOW_KPP  # ifdef ALLOW_KPP
109  #  include "KPP.h"  #  include "KPP.h"
# Line 134  C                                      s Line 142  C                                      s
142  C                                      variable.  C                                      variable.
143  C     kappaRT,       - Total diffusion in vertical at level k, for T and S  C     kappaRT,       - Total diffusion in vertical at level k, for T and S
144  C     kappaRS          (background + spatially varying, isopycnal term).  C     kappaRS          (background + spatially varying, isopycnal term).
145  C     kappaRTr       - Total diffusion in vertical at level k,  C     kappaRTr       - Total diffusion in vertical at level k,
146  C                      for each passive Tracer  C                      for each passive Tracer
147  C     kappaRk        - Total diffusion in vertical, all levels, 1 tracer  C     kappaRk        - Total diffusion in vertical, all levels, 1 tracer
148  C     useVariableK   = T when vertical diffusion is not constant  C     useVariableK   = T when vertical diffusion is not constant
# Line 142  C     iMin, iMax     - Ranges and sub-bl Line 150  C     iMin, iMax     - Ranges and sub-bl
150  C     jMin, jMax       are applied.  C     jMin, jMax       are applied.
151  C     bi, bj  C     bi, bj
152  C     k, kup,        - Index for layer above and below. kup and kDown  C     k, kup,        - Index for layer above and below. kup and kDown
153  C     kDown, km1       are switched with layer to be the appropriate  C     kDown, km1       are switched with layer to be the appropriate
154  C                      index into fVerTerm.  C                      index into fVerTerm.
155        _RS xA      (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RS xA      (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
156        _RS yA      (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RS yA      (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
# Line 159  C                      index into fVerTe Line 167  C                      index into fVerTe
167        _RL kappaRT (1-Olx:sNx+Olx,1-Oly:sNy+Oly)        _RL kappaRT (1-Olx:sNx+Olx,1-Oly:sNy+Oly)
168        _RL kappaRS (1-Olx:sNx+Olx,1-Oly:sNy+Oly)        _RL kappaRS (1-Olx:sNx+Olx,1-Oly:sNy+Oly)
169  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
170    #ifndef ALLOW_LONGSTEP
171        _RL fVerP   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2,PTRACERS_num)        _RL fVerP   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2,PTRACERS_num)
172        _RL kappaRTr(1-Olx:sNx+Olx,1-Oly:sNy+Oly,PTRACERS_num)        _RL kappaRTr(1-Olx:sNx+Olx,1-Oly:sNy+Oly,PTRACERS_num)
173  #endif  #endif
174    #endif
175        _RL kappaRk (1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)        _RL kappaRk (1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
176        _RL diffKh3d_x (1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)        _RL diffKh3d_x (1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
177        _RL diffKh3d_y (1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)        _RL diffKh3d_y (1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
178        INTEGER iMin, iMax         INTEGER iMin, iMax
179        INTEGER jMin, jMax        INTEGER jMin, jMax
180        INTEGER bi, bj        INTEGER bi, bj
181        INTEGER i, j        INTEGER i, j
# Line 177  C                      index into fVerTe Line 187  C                      index into fVerTe
187        LOGICAL useVariableK        LOGICAL useVariableK
188  #endif  #endif
189  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
190    #ifndef ALLOW_LONGSTEP
191        INTEGER iTracer, ip        INTEGER iTracer, ip
192  #endif  #endif
193    #endif
194    
195  CEOP  CEOP
196    
# Line 199  CHPF$ INDEPENDENT Line 211  CHPF$ INDEPENDENT
211  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
212    
213  C-- Compute correction at the surface for Lin Free Surf.  C-- Compute correction at the surface for Lin Free Surf.
214        IF (linFSConserveTr)  #ifdef ALLOW_AUTODIFF_TAMC
215       &   CALL CALC_WSURF_TR(theta,salt,wVel,        TsurfCor = 0. _d 0
216       &                      myTime,myIter,myThid)        SsurfCor = 0. _d 0
217    #endif
218          IF (linFSConserveTr) THEN
219    #ifdef ALLOW_AUTODIFF_TAMC
220    CADJ STORE theta,salt,wvel = comlev1, key = ikey_dynamics, byte=isbyte
221    #endif
222           CALL CALC_WSURF_TR(theta,salt,wVel,
223         &                    myTime,myIter,myThid)
224          ENDIF
225    
226        DO bj=myByLo(myThid),myByHi(myThid)        DO bj=myByLo(myThid),myByHi(myThid)
227    
# Line 212  CHPF$&                  ,utrans,vtrans,x Line 232  CHPF$&                  ,utrans,vtrans,x
232  CHPF$&                  ,kappaRT,kappaRS  CHPF$&                  ,kappaRT,kappaRS
233  CHPF$&                  )  CHPF$&                  )
234  # ifdef ALLOW_PTRACERS  # ifdef ALLOW_PTRACERS
235    # ifndef ALLOW_LONGSTEP
236  CHPF$  INDEPENDENT, NEW (fVerP,kappaRTr)  CHPF$  INDEPENDENT, NEW (fVerP,kappaRTr)
237  # endif  # endif
238    # endif
239  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
240    
241         DO bi=myBxLo(myThid),myBxHi(myThid)         DO bi=myBxLo(myThid),myBxHi(myThid)
# Line 267  C- tracer tendency needs to be set to ze Line 289  C- tracer tendency needs to be set to ze
289          ENDDO          ENDDO
290    
291  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
292    #ifndef ALLOW_LONGSTEP
293          IF ( usePTRACERS ) THEN          IF ( usePTRACERS ) THEN
294           DO ip=1,PTRACERS_num           DO ip=1,PTRACERS_num
295             DO j=1-OLy,sNy+OLy             DO j=1-OLy,sNy+OLy
# Line 289  C-      set tracer tendency to zero: Line 312  C-      set tracer tendency to zero:
312           ENDDO           ENDDO
313          ENDIF          ENDIF
314  #endif  #endif
315    #endif
316    
317  #ifdef ALLOW_ADAMSBASHFORTH_3  #ifdef ALLOW_ADAMSBASHFORTH_3
318  C-      Apply AB on T,S :  C-      Apply AB on T,S :
# Line 318  cph avoids recomputation of integrate_fo Line 342  cph avoids recomputation of integrate_fo
342  CADJ STORE wvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE wvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
343  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
344    
345  C--     Attention: by defining "SINGLE_LAYER_MODE" in CPP_OPTIONS.h  C--     Attention: by defining "SINGLE_LAYER_MODE" in CPP_OPTIONS.h
346  C--     MOST of THERMODYNAMICS will be disabled  C--     MOST of THERMODYNAMICS will be disabled
347  #ifndef SINGLE_LAYER_MODE  #ifndef SINGLE_LAYER_MODE
348    
# Line 344  C to be able to exclude this scheme to a Line 368  C to be able to exclude this scheme to a
368  C recomputation. It *is* differentiable, if you need it.  C recomputation. It *is* differentiable, if you need it.
369  C Edit GAD_OPTIONS.h and #define DISABLE_MULTIDIM_ADVECTION to  C Edit GAD_OPTIONS.h and #define DISABLE_MULTIDIM_ADVECTION to
370  C disable this section of code.  C disable this section of code.
371  #ifdef GAD_ALLOW_SOM_ADVECT  #ifdef GAD_ALLOW_TS_SOM_ADV
372          IF ( tempSOM_Advection ) THEN          IF ( tempSOM_Advection ) THEN
373  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
374            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
# Line 352  C disable this section of code. Line 376  C disable this section of code.
376  #endif  #endif
377            CALL GAD_SOM_ADVECT(            CALL GAD_SOM_ADVECT(
378       I             tempImplVertAdv, tempAdvScheme, tempVertAdvScheme,       I             tempImplVertAdv, tempAdvScheme, tempVertAdvScheme,
379       I             GAD_TEMPERATURE,       I             GAD_TEMPERATURE, dTtracerLev,
380       I             uVel, vVel, wVel, theta,       I             uVel, vVel, wVel, theta,
381       U             som_T,       U             som_T,
382       O             gT,       O             gT,
383       I             bi,bj,myTime,myIter,myThid)       I             bi,bj,myTime,myIter,myThid)
384          ELSEIF (tempMultiDimAdvec) THEN          ELSEIF (tempMultiDimAdvec) THEN
385  #else /* GAD_ALLOW_SOM_ADVECT */  #else /* GAD_ALLOW_TS_SOM_ADV */
386          IF (tempMultiDimAdvec) THEN          IF (tempMultiDimAdvec) THEN
387  #endif /* GAD_ALLOW_SOM_ADVECT */  #endif /* GAD_ALLOW_TS_SOM_ADV */
388  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
389            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
390       &     CALL DEBUG_CALL('GAD_ADVECTION',myThid)       &     CALL DEBUG_CALL('GAD_ADVECTION',myThid)
391  #endif  #endif
392            CALL GAD_ADVECTION(            CALL GAD_ADVECTION(
393       I             tempImplVertAdv, tempAdvScheme, tempVertAdvScheme,       I             tempImplVertAdv, tempAdvScheme, tempVertAdvScheme,
394       I             GAD_TEMPERATURE,       I             GAD_TEMPERATURE, dTtracerLev,
395       I             uVel, vVel, wVel, theta,       I             uVel, vVel, wVel, theta,
396       O             gT,       O             gT,
397       I             bi,bj,myTime,myIter,myThid)       I             bi,bj,myTime,myIter,myThid)
398          ENDIF          ENDIF
399  #ifdef GAD_ALLOW_SOM_ADVECT  #ifdef GAD_ALLOW_TS_SOM_ADV
400          IF ( saltSOM_Advection ) THEN          IF ( saltSOM_Advection ) THEN
401  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
402            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
# Line 380  C disable this section of code. Line 404  C disable this section of code.
404  #endif  #endif
405            CALL GAD_SOM_ADVECT(            CALL GAD_SOM_ADVECT(
406       I             saltImplVertAdv, saltAdvScheme, saltVertAdvScheme,       I             saltImplVertAdv, saltAdvScheme, saltVertAdvScheme,
407       I             GAD_SALINITY,       I             GAD_SALINITY, dTtracerLev,
408       I             uVel, vVel, wVel, salt,       I             uVel, vVel, wVel, salt,
409       U             som_S,       U             som_S,
410       O             gS,       O             gS,
411       I             bi,bj,myTime,myIter,myThid)       I             bi,bj,myTime,myIter,myThid)
412          ELSEIF (saltMultiDimAdvec) THEN          ELSEIF (saltMultiDimAdvec) THEN
413  #else /* GAD_ALLOW_SOM_ADVECT */  #else /* GAD_ALLOW_TS_SOM_ADV */
414          IF (saltMultiDimAdvec) THEN          IF (saltMultiDimAdvec) THEN
415  #endif /* GAD_ALLOW_SOM_ADVECT */  #endif /* GAD_ALLOW_TS_SOM_ADV */
416  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
417            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
418       &     CALL DEBUG_CALL('GAD_ADVECTION',myThid)       &     CALL DEBUG_CALL('GAD_ADVECTION',myThid)
419  #endif  #endif
420            CALL GAD_ADVECTION(            CALL GAD_ADVECTION(
421       I             saltImplVertAdv, saltAdvScheme, saltVertAdvScheme,       I             saltImplVertAdv, saltAdvScheme, saltVertAdvScheme,
422       I             GAD_SALINITY,       I             GAD_SALINITY, dTtracerLev,
423       I             uVel, vVel, wVel, salt,       I             uVel, vVel, wVel, salt,
424       O             gS,       O             gS,
425       I             bi,bj,myTime,myIter,myThid)       I             bi,bj,myTime,myIter,myThid)
# Line 405  C Since passive tracers are configurable Line 429  C Since passive tracers are configurable
429  C call the multi-dimensional method for PTRACERS regardless  C call the multi-dimensional method for PTRACERS regardless
430  C of whether multiDimAdvection is set or not.  C of whether multiDimAdvection is set or not.
431  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
432    #ifndef ALLOW_LONGSTEP
433          IF ( usePTRACERS ) THEN          IF ( usePTRACERS ) THEN
434  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
435            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
# Line 412  C of whether multiDimAdvection is set or Line 437  C of whether multiDimAdvection is set or
437  #endif  #endif
438           CALL PTRACERS_ADVECTION( bi,bj,myIter,myTime,myThid )           CALL PTRACERS_ADVECTION( bi,bj,myIter,myTime,myThid )
439          ENDIF          ENDIF
440    #endif /* ALLOW_LONGSTEP */
441  #endif /* ALLOW_PTRACERS */  #endif /* ALLOW_PTRACERS */
442  #endif /* DISABLE_MULTIDIM_ADVECTION */  #endif /* DISABLE_MULTIDIM_ADVECTION */
443    
# Line 421  C of whether multiDimAdvection is set or Line 447  C of whether multiDimAdvection is set or
447  #endif  #endif
448    
449  Cjrs  Cjrs
450          IF (diffKhT.ne.0) THEN          IF (diffKhT.NE.0) THEN
451             CALL CALC_MLD(bi,bj,diffkh3d_x,diffkh3d_y,myThid)             CALL CALC_MLD(bi,bj,diffkh3d_x,diffkh3d_y,myThid)
452          ENDIF          ENDIF
453    
454    
455  C--     Start of thermodynamics loop  C--     Start of thermodynamics loop
456          DO k=Nr,1,-1          DO k=Nr,1,-1
457  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
458  C? Patrick Is this formula correct?  C? Patrick Is this formula correct?
459  cph Yes, but I rewrote it.  cph Yes, but I rewrote it.
460  cph Also, the kappaR? need the index and subscript k!  cph Also, the kappaR? need the index and subscript k!
# Line 508  C--   Residual transp = Bolus transp + E Line 535  C--   Residual transp = Bolus transp + E
535              ENDIF              ENDIF
536            ENDIF            ENDIF
537  # ifdef ALLOW_AUTODIFF_TAMC  # ifdef ALLOW_AUTODIFF_TAMC
538  CADJ STORE rTrans(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE rTrans(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte
539  CADJ STORE wfld(:,:)      = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE wfld(:,:)      = comlev1_bibj_k, key=kkey, byte=isbyte
540  # ifdef GM_BOLUS_ADVEC  # ifdef GM_BOLUS_ADVEC
541  CADJ STORE ufld(:,:)      = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE ufld(:,:)      = comlev1_bibj_k, key=kkey, byte=isbyte
542  CADJ STORE vfld(:,:)      = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE vfld(:,:)      = comlev1_bibj_k, key=kkey, byte=isbyte
# Line 528  C--      Calculate the total vertical di Line 555  C--      Calculate the total vertical di
555       O          kappaRT,kappaRS,       O          kappaRT,kappaRS,
556       I          myThid)       I          myThid)
557            ENDIF            ENDIF
558  # ifdef ALLOW_AUTODIFF_TAMC  # ifdef ALLOW_AUTODIFF_TAMC
559  CADJ STORE kappaRT(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE kappaRT(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte
560  CADJ STORE kappaRS(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE kappaRS(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte
561  # endif /* ALLOW_AUTODIFF_TAMC */  # endif /* ALLOW_AUTODIFF_TAMC */
# Line 542  CADJ STORE kappaRS(:,:)    = comlev1_bib Line 569  CADJ STORE kappaRS(:,:)    = comlev1_bib
569  C--      Calculate active tracer tendencies (gT,gS,...)  C--      Calculate active tracer tendencies (gT,gS,...)
570  C        and step forward storing result in gT, gS, etc.  C        and step forward storing result in gT, gS, etc.
571  C--  C--
572  # ifdef ALLOW_AUTODIFF_TAMC  # ifdef ALLOW_AUTODIFF_TAMC
573  #  if ((defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)) && (defined ALLOW_GMREDI)  #  if ((defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)) && (defined ALLOW_GMREDI)
574    #   ifdef GM_NON_UNITY_DIAGONAL
575  CADJ STORE kux(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE kux(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
576  CADJ STORE kvy(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE kvy(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
577    #   endif
578  #   ifdef GM_EXTRA_DIAGONAL  #   ifdef GM_EXTRA_DIAGONAL
579  CADJ STORE kuz(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE kuz(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
580  CADJ STORE kvz(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE kvz(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
# Line 553  CADJ STORE kvz(:,:,k,bi,bj) = comlev1_bi Line 582  CADJ STORE kvz(:,:,k,bi,bj) = comlev1_bi
582  #  endif  #  endif
583  # endif /* ALLOW_AUTODIFF_TAMC */  # endif /* ALLOW_AUTODIFF_TAMC */
584  C  C
585  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
586  # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)  # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
587  cph-test  cph-test
588  CADJ STORE uFld(:,:), vFld(:,:), wFld(:,:)  CADJ STORE uFld(:,:), vFld(:,:), wFld(:,:)
# Line 566  CADJ &     = comlev1_bibj_k, key=kkey, b Line 595  CADJ &     = comlev1_bibj_k, key=kkey, b
595  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
596  C  C
597           IF ( tempStepping ) THEN           IF ( tempStepping ) THEN
598  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
599  CADJ STORE gTnm1(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE gTnm1(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
600  # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)  # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
601  CADJ STORE gt(:,:,:,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE gt(:,:,:,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
# Line 583  CADJ STORE fvert(:,:,:)    = comlev1_bib Line 612  CADJ STORE fvert(:,:,:)    = comlev1_bib
612  #ifdef ALLOW_ADAMSBASHFORTH_3  #ifdef ALLOW_ADAMSBASHFORTH_3
613            IF ( AdamsBashforth_T ) THEN            IF ( AdamsBashforth_T ) THEN
614             CALL TIMESTEP_TRACER(             CALL TIMESTEP_TRACER(
615       I         bi,bj,iMin,iMax,jMin,jMax,k,tempAdvScheme,       I         bi,bj,iMin,iMax,jMin,jMax,k,tempAdvScheme,dTtracerLev(k),
616       I         gtNm(1-Olx,1-Oly,1,1,1,m2),       I         gtNm(1-Olx,1-Oly,1,1,1,m2),
617       U         gT,       U         gT,
618       I         myIter, myThid)       I         myIter, myThid)
619            ELSE            ELSE
620  #endif  #endif
621             CALL TIMESTEP_TRACER(             CALL TIMESTEP_TRACER(
622       I         bi,bj,iMin,iMax,jMin,jMax,k,tempAdvScheme,       I         bi,bj,iMin,iMax,jMin,jMax,k,tempAdvScheme,dTtracerLev(k),
623       I         theta,       I         theta,
624       U         gT,       U         gT,
625       I         myIter, myThid)       I         myIter, myThid)
# Line 617  CADJ STORE fvers(:,:,:)       = comlev1_ Line 646  CADJ STORE fvers(:,:,:)       = comlev1_
646  #ifdef ALLOW_ADAMSBASHFORTH_3  #ifdef ALLOW_ADAMSBASHFORTH_3
647            IF ( AdamsBashforth_S ) THEN            IF ( AdamsBashforth_S ) THEN
648             CALL TIMESTEP_TRACER(             CALL TIMESTEP_TRACER(
649       I         bi,bj,iMin,iMax,jMin,jMax,k,saltAdvScheme,       I         bi,bj,iMin,iMax,jMin,jMax,k,saltAdvScheme,dTtracerLev(k),
650       I         gsNm(1-Olx,1-Oly,1,1,1,m2),       I         gsNm(1-Olx,1-Oly,1,1,1,m2),
651       U         gS,       U         gS,
652       I         myIter, myThid)       I         myIter, myThid)
653            ELSE            ELSE
654  #endif  #endif
655             CALL TIMESTEP_TRACER(             CALL TIMESTEP_TRACER(
656       I         bi,bj,iMin,iMax,jMin,jMax,k,saltAdvScheme,       I         bi,bj,iMin,iMax,jMin,jMax,k,saltAdvScheme,dTtracerLev(k),
657       I         salt,       I         salt,
658       U         gS,       U         gS,
659       I         myIter, myThid)       I         myIter, myThid)
# Line 634  CADJ STORE fvers(:,:,:)       = comlev1_ Line 663  CADJ STORE fvers(:,:,:)       = comlev1_
663           ENDIF           ENDIF
664    
665  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
666    #ifndef ALLOW_LONGSTEP
667           IF ( usePTRACERS ) THEN           IF ( usePTRACERS ) THEN
668             IF ( .NOT.implicitDiffusion ) THEN             IF ( .NOT.implicitDiffusion ) THEN
669               CALL PTRACERS_CALC_DIFF(               CALL PTRACERS_CALC_DIFF(
# Line 642  CADJ STORE fvers(:,:,:)       = comlev1_ Line 672  CADJ STORE fvers(:,:,:)       = comlev1_
672       O            kappaRTr,       O            kappaRTr,
673       I            myThid)       I            myThid)
674             ENDIF             ENDIF
675  # ifdef ALLOW_AUTODIFF_TAMC  # ifdef ALLOW_AUTODIFF_TAMC
676  CADJ STORE kappaRTr(:,:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE kappaRTr(:,:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte
677  # endif /* ALLOW_AUTODIFF_TAMC */  # endif /* ALLOW_AUTODIFF_TAMC */
678             CALL PTRACERS_INTEGRATE(             CALL PTRACERS_INTEGRATE(
679       I          bi,bj,k,       I          bi,bj,k,
680       I          xA, yA, maskUp, uFld, vFld, wFld,       I          xA, yA, maskUp, uFld, vFld, wFld,
681       I          uTrans, vTrans, rTrans, rTransKp1,       I          uTrans, vTrans, rTrans, rTransKp1,
682       I          kappaRTr,       I          kappaRTr,diffKh3d_x,diffKh3d_y,
683       U          fVerP,       U          fVerP,
684       I          myTime,myIter,myThid)       I          myTime,myIter,myThid)
685           ENDIF           ENDIF
686    #endif /*ALLOW_LONGSTEP */
687  #endif /* ALLOW_PTRACERS */  #endif /* ALLOW_PTRACERS */
688    
689  #ifdef   ALLOW_OBCS  #ifdef   ALLOW_OBCS
# Line 664  C--      Apply open boundary conditions Line 695  C--      Apply open boundary conditions
695    
696  C--      Freeze water  C--      Freeze water
697  C  this bit of code is left here for backward compatibility.  C  this bit of code is left here for backward compatibility.
698  C  freezing at surface level has been moved to FORWARD_STEP  C  freezing at surface level has been moved to FORWARD_STEP
699           IF ( useOldFreezing .AND. .NOT. useSEAICE           IF ( useOldFreezing .AND. .NOT. useSEAICE
700       &       .AND. .NOT.(useThSIce.AND.k.EQ.1) ) THEN       &       .AND. .NOT.(useThSIce.AND.k.EQ.1) ) THEN
701  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
# Line 677  CADJ &   , key = kkey, byte = isbyte Line 708  CADJ &   , key = kkey, byte = isbyte
708  C--     end of thermodynamic k loop (Nr:1)  C--     end of thermodynamic k loop (Nr:1)
709          ENDDO          ENDDO
710    
711  C       All explicit advection/diffusion/sources should now be  #ifdef ALLOW_DOWN_SLOPE
712  C       done. The updated tracer field is in gPtr. Accumalate          IF ( tempStepping .AND. useDOWN_SLOPE ) THEN
713  C       explicit tendency and also reset gPtr to initial tracer            IF ( usingPCoords ) THEN
714                CALL DWNSLP_APPLY(
715         I                  GAD_TEMPERATURE, bi, bj, kSurfC,
716         I                  recip_drF, recip_hFacC, recip_rA,
717         I                  dTtracerLev,
718         I                  theta,
719         U                  gT,
720         I                  myTime, myIter, myThid )
721              ELSE
722                CALL DWNSLP_APPLY(
723         I                  GAD_TEMPERATURE, bi, bj, kLowC,
724         I                  recip_drF, recip_hFacC, recip_rA,
725         I                  dTtracerLev,
726         I                  theta,
727         U                  gT,
728         I                  myTime, myIter, myThid )
729              ENDIF
730            ENDIF
731            IF ( saltStepping .AND. useDOWN_SLOPE ) THEN
732              IF ( usingPCoords ) THEN
733                CALL DWNSLP_APPLY(
734         I                  GAD_SALINITY, bi, bj, kSurfC,
735         I                  recip_drF, recip_hFacC, recip_rA,
736         I                  dTtracerLev,
737         I                  salt,
738         U                  gS,
739         I                  myTime, myIter, myThid )
740              ELSE
741                CALL DWNSLP_APPLY(
742         I                  GAD_SALINITY, bi, bj, kLowC,
743         I                  recip_drF, recip_hFacC, recip_rA,
744         I                  dTtracerLev,
745         I                  salt,
746         U                  gS,
747         I                  myTime, myIter, myThid )
748              ENDIF
749            ENDIF
750    #ifdef ALLOW_PTRACERS
751    #ifndef ALLOW_LONGSTEP
752            IF ( usePTRACERS .AND. useDOWN_SLOPE ) THEN
753              CALL PTRACERS_DWNSLP_APPLY(
754         I                  bi, bj, myTime, myIter, myThid )
755            ENDIF
756    #endif /*ALLOW_LONGSTEP */
757    #endif /* ALLOW_PTRACERS */
758    #endif /* ALLOW_DOWN_SLOPE */
759    
760    C       All explicit advection/diffusion/sources should now be
761    C       done. The updated tracer field is in gPtr. Accumalate
762    C       explicit tendency and also reset gPtr to initial tracer
763  C       field for implicit matrix calculation  C       field for implicit matrix calculation
764    
765  #ifdef ALLOW_MATRIX  #ifdef ALLOW_MATRIX
766          IF (useMATRIX)          IF (useMATRIX)
767       &    CALL MATRIX_STORE_TENDENCY_EXP(bi,bj, myTime,myIter,myThid)       &    CALL MATRIX_STORE_TENDENCY_EXP(bi,bj, myTime,myIter,myThid)
768  #endif  #endif
769    
770          iMin = 1          iMin = 1
771          iMax = sNx          iMax = sNx
772          jMin = 1          jMin = 1
773          jMax = sNy          jMax = sNy
774    
775  C--     Implicit vertical advection & diffusion  C--     Implicit vertical advection & diffusion
776          IF ( tempStepping .AND. implicitDiffusion ) THEN          IF ( tempStepping .AND. implicitDiffusion ) THEN
777            CALL CALC_3D_DIFFUSIVITY(            CALL CALC_3D_DIFFUSIVITY(
778       I         bi,bj,iMin,iMax,jMin,jMax,       I         bi,bj,iMin,iMax,jMin,jMax,
# Line 704  C--     Implicit vertical advection & di Line 784  C--     Implicit vertical advection & di
784          IF ( tempImplVertAdv ) THEN          IF ( tempImplVertAdv ) THEN
785            CALL GAD_IMPLICIT_R(            CALL GAD_IMPLICIT_R(
786       I         tempImplVertAdv, tempAdvScheme, GAD_TEMPERATURE,       I         tempImplVertAdv, tempAdvScheme, GAD_TEMPERATURE,
787         I         dTtracerLev,
788       I         kappaRk, wVel, theta,       I         kappaRk, wVel, theta,
789       U         gT,       U         gT,
790       I         bi, bj, myTime, myIter, myThid )       I         bi, bj, myTime, myIter, myThid )
# Line 734  c          CALL TIMEAVE_CUMUL_DIF_1T(Tdi Line 815  c          CALL TIMEAVE_CUMUL_DIF_1T(Tdi
815  c    I                        Nr, 3, deltaTclock, bi, bj, myThid)  c    I                        Nr, 3, deltaTclock, bi, bj, myThid)
816           ENDIF           ENDIF
817          ENDIF          ENDIF
818  #endif /* ALLOW_TIMEAVE */  #endif /* ALLOW_TIMEAVE */
819    
820          IF ( saltStepping .AND. implicitDiffusion ) THEN          IF ( saltStepping .AND. implicitDiffusion ) THEN
821            CALL CALC_3D_DIFFUSIVITY(            CALL CALC_3D_DIFFUSIVITY(
# Line 748  c    I                        Nr, 3, del Line 829  c    I                        Nr, 3, del
829          IF ( saltImplVertAdv ) THEN          IF ( saltImplVertAdv ) THEN
830            CALL GAD_IMPLICIT_R(            CALL GAD_IMPLICIT_R(
831       I         saltImplVertAdv, saltAdvScheme, GAD_SALINITY,       I         saltImplVertAdv, saltAdvScheme, GAD_SALINITY,
832         I         dTtracerLev,
833       I         kappaRk, wVel, salt,       I         kappaRk, wVel, salt,
834       U         gS,       U         gS,
835       I         bi, bj, myTime, myIter, myThid )       I         bi, bj, myTime, myIter, myThid )
# Line 767  CADJ STORE gS(:,:,:,bi,bj) = comlev1_bib Line 849  CADJ STORE gS(:,:,:,bi,bj) = comlev1_bib
849          ENDIF          ENDIF
850    
851  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
852    #ifndef ALLOW_LONGSTEP
853          IF     ( usePTRACERS ) THEN          IF     ( usePTRACERS ) THEN
854  C--     Vertical advection/diffusion (implicit) for passive tracers  C--     Vertical advection/diffusion (implicit) for passive tracers
855             CALL PTRACERS_IMPLICIT(             CALL PTRACERS_IMPLICIT(
856       U                             kappaRk,       U                             kappaRk,
857       I                             bi, bj, myTime, myIter, myThid )       I                             bi, bj, myTime, myIter, myThid )
858          ENDIF          ENDIF
859    #endif /* ALLOW_LONGSTEP */
860  #endif /* ALLOW_PTRACERS */  #endif /* ALLOW_PTRACERS */
861    
862  #ifdef   ALLOW_OBCS  #ifdef   ALLOW_OBCS
# Line 807  C--   end bi,bj loops. Line 891  C--   end bi,bj loops.
891         CALL DEBUG_STATS_RL(Nr,gsNm1,'GsNm1 (THERMODYNAMICS)',myThid)         CALL DEBUG_STATS_RL(Nr,gsNm1,'GsNm1 (THERMODYNAMICS)',myThid)
892  #endif  #endif
893  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
894    #ifndef ALLOW_LONGSTEP
895         IF ( usePTRACERS ) THEN         IF ( usePTRACERS ) THEN
896           CALL PTRACERS_DEBUG(myThid)           CALL PTRACERS_DEBUG(myThid)
897         ENDIF         ENDIF
898    #endif /* ALLOW_LONGSTEP */
899  #endif /* ALLOW_PTRACERS */  #endif /* ALLOW_PTRACERS */
900        ENDIF        ENDIF
901  #endif /* ALLOW_DEBUG */  #endif /* ALLOW_DEBUG */

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

  ViewVC Help
Powered by ViewVC 1.1.22