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

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

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

revision 1.4 by jmc, Fri Dec 6 01:55:42 2013 UTC revision 1.5 by jmc, Fri Dec 27 15:46:46 2013 UTC
# Line 11  CBOP Line 11  CBOP
11  C     !ROUTINE: TEMP_INTEGRATE  C     !ROUTINE: TEMP_INTEGRATE
12  C     !INTERFACE:  C     !INTERFACE:
13        SUBROUTINE TEMP_INTEGRATE(        SUBROUTINE TEMP_INTEGRATE(
14       I           bi, bj,       I           bi, bj, recip_hFac,
15       I           uFld, vFld, wFld,       I           uFld, vFld, wFld,
16       U           KappaRk,       U           KappaRk,
17       I           myTime, myIter, myThid )       I           myTime, myIter, myThid )
# Line 48  C     !USES: Line 48  C     !USES:
48        IMPLICIT NONE        IMPLICIT NONE
49  C     == GLobal variables ==  C     == GLobal variables ==
50  #include "SIZE.h"  #include "SIZE.h"
 #include "DYNVARS.h"  
51  #include "EEPARAMS.h"  #include "EEPARAMS.h"
52  #include "PARAMS.h"  #include "PARAMS.h"
53    #include "GRID.h"
54    #include "DYNVARS.h"
55  #include "RESTART.h"  #include "RESTART.h"
56  #ifdef ALLOW_GENERIC_ADVDIFF  #ifdef ALLOW_GENERIC_ADVDIFF
57  # include "GAD.h"  # include "GAD.h"
58  # include "GAD_SOM_VARS.h"  # include "GAD_SOM_VARS.h"
59  #endif  #endif
60    #ifdef ALLOW_TIMEAVE
61    # include "TIMEAVE_STATV.h"
62    #endif
63  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
64  # include "tamc.h"  # include "tamc.h"
65  # include "tamc_keys.h"  # include "tamc_keys.h"
# Line 63  C     == GLobal variables == Line 67  C     == GLobal variables ==
67    
68  C     !INPUT/OUTPUT PARAMETERS:  C     !INPUT/OUTPUT PARAMETERS:
69  C     == Routine arguments ==  C     == Routine arguments ==
70  C     bi, bj,   :: tile indices  C     bi, bj,    :: tile indices
71  C     uFld,vFld :: Local copy of horizontal velocity field  C     recip_hFac :: reciprocal of cell open-depth factor (@ next iter)
72  C     wFld      :: Local copy of vertical velocity field  C     uFld,vFld  :: Local copy of horizontal velocity field
73  C     KappaRk   :: Vertical diffusion for Tempertature  C     wFld       :: Local copy of vertical velocity field
74  C     myTime    :: current time  C     KappaRk    :: Vertical diffusion for Tempertature
75  C     myIter    :: current iteration number  C     myTime     :: current time
76  C     myThid    :: my Thread Id. number  C     myIter     :: current iteration number
77    C     myThid     :: my Thread Id. number
78        INTEGER bi, bj        INTEGER bi, bj
79        _RL uFld   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RS recip_hFac(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
80        _RL vFld   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL uFld      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
81        _RL wFld   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL vFld      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
82        _RL KappaRk(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL wFld      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
83          _RL KappaRk   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
84        _RL     myTime        _RL     myTime
85        INTEGER myIter        INTEGER myIter
86        INTEGER myThid        INTEGER myThid
# Line 82  CEOP Line 88  CEOP
88    
89  #ifdef ALLOW_GENERIC_ADVDIFF  #ifdef ALLOW_GENERIC_ADVDIFF
90  C     !LOCAL VARIABLES:  C     !LOCAL VARIABLES:
91  C     iMin,iMax :: Range of points for which calculation  C     iMin, iMax :: 1rst index loop range
92  C     jMin,jMax ::       results will be set.  C     jMin, jMax :: 2nd  index loop range
93  C     k         :: vertical index  C     k          :: vertical index
94  C     kM1       :: =k-1 for k>1, =1 for k=1  C     kM1        :: =k-1 for k>1, =1 for k=1
95  C     kUp       :: index into 2 1/2D array, toggles between 1|2  C     kUp        :: index into 2 1/2D array, toggles between 1|2
96  C     kDown     :: index into 2 1/2D array, toggles between 2|1  C     kDown      :: index into 2 1/2D array, toggles between 2|1
97  C     xA        :: Tracer cell face area normal to X  C     xA         :: Tracer cell face area normal to X
98  C     yA        :: Tracer cell face area normal to X  C     yA         :: Tracer cell face area normal to X
99  C     maskUp    :: Land/water mask for Wvel points (interface k)  C     maskUp     :: Land/water mask for Wvel points (interface k)
100  C     uTrans    :: Zonal volume transport through cell face  C     uTrans     :: Zonal volume transport through cell face
101  C     vTrans    :: Meridional volume transport through cell face  C     vTrans     :: Meridional volume transport through cell face
102  C     rTrans    ::   Vertical volume transport at interface k  C     rTrans     ::   Vertical volume transport at interface k
103  C     rTransKp  :: Vertical volume transport at inteface k+1  C     rTransKp   :: Vertical volume transport at inteface k+1
104  C     fVerT     :: Flux of temperature (T) in the vertical direction  C     fZon       :: Flux of temperature (T) in the zonal direction
105  C                  at the upper(U) and lower(D) faces of a cell.  C     fMer       :: Flux of temperature (T) in the meridional direction
106    C     fVer       :: Flux of temperature (T) in the vertical direction
107    C                   at the upper(U) and lower(D) faces of a cell.
108    C   useVariableK :: T when vertical diffusion is not constant
109        INTEGER iMin, iMax, jMin, jMax        INTEGER iMin, iMax, jMin, jMax
110        INTEGER i, j, k        INTEGER i, j, k
111        INTEGER kUp, kDown, kM1        INTEGER kUp, kDown, kM1
# Line 107  C                  at the upper(U) and l Line 116  C                  at the upper(U) and l
116        _RL vTrans  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL vTrans  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
117        _RL rTrans  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rTrans  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
118        _RL rTransKp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rTransKp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
119        _RL fVerT   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)        _RL fZon    (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
120          _RL fMer    (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
121          _RL fVer    (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)
122        _RL gt_AB   (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL gt_AB   (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
123        LOGICAL calcAdvection        LOGICAL calcAdvection
124        INTEGER iterNb        INTEGER iterNb
125  #ifdef ALLOW_ADAMSBASHFORTH_3  #ifdef ALLOW_ADAMSBASHFORTH_3
126        INTEGER m1, m2        INTEGER m1, m2
127  #endif  #endif
128    #ifdef ALLOW_TIMEAVE
129          LOGICAL useVariableK
130    #endif
131    
132  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
133    
134  C-    Loop ranges for daughter routines  C-    Loop ranges for daughter routines
# Line 123  C-    Loop ranges for daughter routines Line 138  C-    Loop ranges for daughter routines
138        jMax = sNy+OLy-1        jMax = sNy+OLy-1
139    
140        iterNb = myIter        iterNb = myIter
141        IF (staggerTimeStep) iterNb = myIter -1        IF (staggerTimeStep) iterNb = myIter - 1
142    
143  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
144            act1 = bi - myBxLo(myThid)            act1 = bi - myBxLo(myThid)
# Line 148  C-    Tracer tendency needs to be set to Line 163  C-    Tracer tendency needs to be set to
163        ENDDO        ENDDO
164        DO j=1-OLy,sNy+OLy        DO j=1-OLy,sNy+OLy
165         DO i=1-OLx,sNx+OLx         DO i=1-OLx,sNx+OLx
166           fVerT(i,j,1) = 0. _d 0           fVer(i,j,1) = 0. _d 0
167           fVerT(i,j,2) = 0. _d 0           fVer(i,j,2) = 0. _d 0
168         ENDDO         ENDDO
169        ENDDO        ENDDO
170  #ifdef ALLOW_AUTODIFF  #ifdef ALLOW_AUTODIFF
# Line 160  C-    Tracer tendency needs to be set to Line 175  C-    Tracer tendency needs to be set to
175          ENDDO          ENDDO
176         ENDDO         ENDDO
177        ENDDO        ENDDO
178    CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte
179    CADJ STORE wFld(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte
180  #endif /* ALLOW_AUTODIFF */  #endif /* ALLOW_AUTODIFF */
181    
182  #ifdef INCLUDE_CALC_DIFFUSIVITY_CALL  #ifdef INCLUDE_CALC_DIFFUSIVITY_CALL
183        IF ( .NOT. implicitDiffusion ) THEN        CALL CALC_3D_DIFFUSIVITY(
         CALL CALC_3D_DIFFUSIVITY(  
184       I         bi, bj, iMin, iMax, jMin, jMax,       I         bi, bj, iMin, iMax, jMin, jMax,
185       I         GAD_TEMPERATURE, useGMredi, useKPP,       I         GAD_TEMPERATURE, useGMredi, useKPP,
186       O         kappaRk,       O         kappaRk,
187       I         myThid )       I         myThid )
       ENDIF  
188  #endif /* INCLUDE_CALC_DIFFUSIVITY_CALL */  #endif /* INCLUDE_CALC_DIFFUSIVITY_CALL */
189    
190  #ifndef DISABLE_MULTIDIM_ADVECTION  #ifndef DISABLE_MULTIDIM_ADVECTION
# Line 227  C-    Start vertical index (k) loop (Nr: Line 242  C-    Start vertical index (k) loop (Nr:
242          kDown= 1+MOD(k,2)          kDown= 1+MOD(k,2)
243    
244  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
245  CADJ STORE fVerT(:,:,:) = comlev1_bibj_k, key=kkey,  CADJ STORE fVer(:,:,:) = comlev1_bibj_k, key=kkey,
246  CADJ &     byte=isbyte,  kind = isbyte  CADJ &     byte=isbyte,  kind = isbyte
247  CADJ STORE gT(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey,  CADJ STORE gT(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey,
248  CADJ &     byte=isbyte,  kind = isbyte  CADJ &     byte=isbyte,  kind = isbyte
# Line 261  CADJ &     byte=isbyte,  kind = isbyte Line 276  CADJ &     byte=isbyte,  kind = isbyte
276       I           GAD_TEMPERATURE, tempAdvScheme, tempVertAdvScheme,       I           GAD_TEMPERATURE, tempAdvScheme, tempVertAdvScheme,
277       I           calcAdvection, tempImplVertAdv, AdamsBashforth_T,       I           calcAdvection, tempImplVertAdv, AdamsBashforth_T,
278       I           tempVertDiff4, useGMRedi, useKPP,       I           tempVertDiff4, useGMRedi, useKPP,
279       U           fVerT, gT,       O           fZon, fMer,
280         U           fVer, gT,
281       I           myTime, myIter, myThid )       I           myTime, myIter, myThid )
282  #else /* ALLOW_ADAMSBASHFORTH_3 */  #else /* ALLOW_ADAMSBASHFORTH_3 */
283          CALL GAD_CALC_RHS(          CALL GAD_CALC_RHS(
# Line 274  CADJ &     byte=isbyte,  kind = isbyte Line 290  CADJ &     byte=isbyte,  kind = isbyte
290       I           GAD_TEMPERATURE, tempAdvScheme, tempVertAdvScheme,       I           GAD_TEMPERATURE, tempAdvScheme, tempVertAdvScheme,
291       I           calcAdvection, tempImplVertAdv, AdamsBashforth_T,       I           calcAdvection, tempImplVertAdv, AdamsBashforth_T,
292       I           tempVertDiff4, useGMRedi, useKPP,       I           tempVertDiff4, useGMRedi, useKPP,
293       U           fVerT, gT,       O           fZon, fMer,
294         U           fVer, gT,
295       I           myTime, myIter, myThid )       I           myTime, myIter, myThid )
296  #endif  #endif
297    
# Line 362  CADJ &     byte=isbyte,  kind = isbyte Line 379  CADJ &     byte=isbyte,  kind = isbyte
379  C-    end of vertical index (k) loop (Nr:1)  C-    end of vertical index (k) loop (Nr:1)
380        ENDDO        ENDDO
381    
382    #ifdef ALLOW_DOWN_SLOPE
383          IF ( useDOWN_SLOPE ) THEN
384            IF ( usingPCoords ) THEN
385              CALL DWNSLP_APPLY(
386         I                  GAD_TEMPERATURE, bi, bj, kSurfC,
387         I                  recip_drF, recip_hFacC, recip_rA,
388         I                  dTtracerLev,
389         I                  theta,
390         U                  gT,
391         I                  myTime, myIter, myThid )
392            ELSE
393              CALL DWNSLP_APPLY(
394         I                  GAD_TEMPERATURE, bi, bj, kLowC,
395         I                  recip_drF, recip_hFacC, recip_rA,
396         I                  dTtracerLev,
397         I                  theta,
398         U                  gT,
399         I                  myTime, myIter, myThid )
400            ENDIF
401          ENDIF
402    #endif /* ALLOW_DOWN_SLOPE */
403    
404          iMin = 0
405          iMax = sNx+1
406          jMin = 0
407          jMax = sNy+1
408    
409    C--   Implicit vertical advection & diffusion
410    
411    #ifdef INCLUDE_IMPLVERTADV_CODE
412          IF ( tempImplVertAdv ) THEN
413    #ifdef ALLOW_AUTODIFF_TAMC
414    CADJ STORE gT(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte
415    #endif /* ALLOW_AUTODIFF_TAMC */
416            CALL GAD_IMPLICIT_R(
417         I         tempImplVertAdv, tempVertAdvScheme, GAD_TEMPERATURE,
418         I         dTtracerLev,
419         I         kappaRk, recip_hFac, wFld, theta,
420         U         gT,
421         I         bi, bj, myTime, myIter, myThid )
422          ELSEIF ( implicitDiffusion ) THEN
423    #else /* INCLUDE_IMPLVERTADV_CODE */
424          IF     ( implicitDiffusion ) THEN
425    #endif /* INCLUDE_IMPLVERTADV_CODE */
426    #ifdef ALLOW_AUTODIFF_TAMC
427    CADJ STORE gT(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte
428    #endif /* ALLOW_AUTODIFF_TAMC */
429            CALL IMPLDIFF(
430         I         bi, bj, iMin, iMax, jMin, jMax,
431         I         GAD_TEMPERATURE, kappaRk, recip_hFac,
432         U         gT,
433         I         myThid )
434          ENDIF
435    
436    #ifdef ALLOW_TIMEAVE
437          useVariableK = useKPP .OR. usePP81 .OR. useMY82 .OR. useGGL90
438         &       .OR. useGMredi .OR. ivdc_kappa.NE.0.
439          IF ( taveFreq.GT.0. .AND. useVariableK
440         &                    .AND.implicitDiffusion ) THEN
441            CALL TIMEAVE_CUMUL_DIF_1T(TdiffRtave, gT, kappaRk,
442         I                        Nr, 3, deltaTClock, bi, bj, myThid)
443          ENDIF
444    #endif /* ALLOW_TIMEAVE */
445    
446  #endif /* ALLOW_GENERIC_ADVDIFF */  #endif /* ALLOW_GENERIC_ADVDIFF */
447    
448        RETURN        RETURN

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5

  ViewVC Help
Powered by ViewVC 1.1.22