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

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

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

revision 1.2 by adcroft, Fri Feb 2 21:04:47 2001 UTC revision 1.10 by adcroft, Tue Feb 26 19:50:12 2002 UTC
# Line 1  Line 1 
1  C $Header$  C $Header$
2    C $Name$
3    
4  #include "CPP_OPTIONS.h"  #include "CPP_OPTIONS.h"
5    
6    CBOP
7    C     !ROUTINE: CONVECTIVE_ADJUSTMENT
8    C     !INTERFACE:
9        SUBROUTINE CONVECTIVE_ADJUSTMENT(        SUBROUTINE CONVECTIVE_ADJUSTMENT(
10       I       bi, bj, iMin, iMax, jMin, jMax,       I       bi, bj, iMin, iMax, jMin, jMax,
11       I       myTime, myIter, myThid )       I       myTime, myIter, myThid )
12  C     /==========================================================\  C     !DESCRIPTION: \bv
13  C     | SUBROUTINE CONVECTIVE_ADJUSTMENT                         |  C     *==========================================================*
14  C     | o Calls vertical mixing or similar parameterization      |  C     | SUBROUTINE CONVECTIVE_ADJUSTMENT                          
15  C     \==========================================================/  C     | o Driver for vertical mixing or similar parameterization      
16        IMPLICIT NONE  C     *==========================================================*
17    C     \ev
18    
19    C     !USES:
20          IMPLICIT NONE
21  C     == Global data ==  C     == Global data ==
22  #include "SIZE.h"  #include "SIZE.h"
23  #include "EEPARAMS.h"  #include "EEPARAMS.h"
24  #include "PARAMS.h"  #include "PARAMS.h"
25  #include "DYNVARS.h"  #include "DYNVARS.h"
26  #include "GRID.h"  #include "GRID.h"
27    #ifdef ALLOW_TIMEAVE
28    #include "TIMEAVE_STATV.h"
29    #endif
30    #ifdef ALLOW_AUTODIFF_TAMC
31    #include "tamc.h"
32    #include "tamc_keys.h"
33    #endif /* ALLOW_AUTODIFF_TAMC */
34        EXTERNAL DIFFERENT_MULTIPLE        EXTERNAL DIFFERENT_MULTIPLE
35        LOGICAL  DIFFERENT_MULTIPLE        LOGICAL  DIFFERENT_MULTIPLE
36    
37    C     !INPUT/OUTPUT PARAMETERS:
38  C     == Routine arguments ==  C     == Routine arguments ==
39  C     bi,bj,iMin,iMax,jMin,jMax,K - Loop counters  C     bi,bj,iMin,iMax,jMin,jMax,K - Loop counters
40  C     myTime - Current time in simulation  C     myTime - Current time in simulation
# Line 33  C     myThid - Thread number of this ins Line 47  C     myThid - Thread number of this ins
47    
48  #ifdef INCLUDE_CONVECT_CALL  #ifdef INCLUDE_CONVECT_CALL
49    
50    C     !LOCAL VARIABLES:
51  C     == Local variables ==  C     == Local variables ==
52        INTEGER K  C     rhoKm1, rhoK :: Density at adjacent levels (common ref. level)
53    C     ConvectCount :: Convection mixing freq. counter.
54          INTEGER i, j, K
55        _RL rhoKm1(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rhoKm1(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
56        _RL rhoK  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rhoK  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
57        _RL ConvectCount(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL ConvectCount(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
58          _RL weightA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
59          _RL weightB(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
60    CEOP
61    
62  C--   Check to see if should convect now  C--   Check to see if should convect now
63        IF ( DIFFERENT_MULTIPLE(cAdjFreq,myTime,myTime-deltaTClock) ) THEN        IF ( DIFFERENT_MULTIPLE(cAdjFreq,myTime,myTime-deltaTClock) ) THEN
64    
65    C-      Initialisation of Convection Counter
66            DO K=1,Nr
67             DO j=1-OLy,sNy+OLy
68              DO i=1-OLx,sNx+OLx
69               ConvectCount(i,j,k) = 0.
70              ENDDO
71             ENDDO
72            ENDDO
73    
74    #ifdef ALLOW_AUTODIFF_TAMC
75              act1 = bi - myBxLo(myThid)
76              max1 = myBxHi(myThid) - myBxLo(myThid) + 1
77              act2 = bj - myByLo(myThid)
78              max2 = myByHi(myThid) - myByLo(myThid) + 1
79              act3 = myThid - 1
80              max3 = nTx*nTy
81              act4 = ikey_dynamics - 1
82              ikey = (act1 + 1) + act2*max1
83         &                      + act3*max1*max2
84         &                      + act4*max1*max2*max3
85    #endif /* ALLOW_AUTODIFF_TAMC */
86    
87  #ifdef  ALLOW_KPP  #ifdef  ALLOW_KPP
88          IF (          IF (
89       &      (.NOT.useKPP) ! CONVECT not needed with KPP mixing       &      (.NOT.useKPP) ! CONVECT not needed with KPP mixing
# Line 52  C--       Loop over all *interior* layer Line 94  C--       Loop over all *interior* layer
94            DO K=2,Nr            DO K=2,Nr
95    
96  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
97  CADJ STORE theta(:,:,k-1,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte              kkey = (ikey-1)*Nr + k
98  CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE theta(:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
99    CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
100  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
101  C-          Density of K-1 layer (above W(K)) reference to K-1 T-level  C-          Density of K-1 layer (above W(K)) reference to K-1 T-level
102              CALL FIND_RHO(              CALL FIND_RHO(
# Line 64  C-          Density of K-1 layer (above Line 107  C-          Density of K-1 layer (above
107    
108  C-          Density of K layer (below W(K)) reference to K-1 T-level.  C-          Density of K layer (below W(K)) reference to K-1 T-level.
109  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
110  CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
111  CADJ STORE salt (:,:,k,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE salt (:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
112  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
113              CALL FIND_RHO(              CALL FIND_RHO(
114       I           bi,bj,iMin,iMax,jMin,jMax,K,K-1,eosType,       I           bi,bj,iMin,iMax,jMin,jMax,K,K-1,eosType,
# Line 74  CADJ STORE salt (:,:,k,bi,bj) = comlev1_ Line 117  CADJ STORE salt (:,:,k,bi,bj) = comlev1_
117       I           myThid )       I           myThid )
118    
119  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
120  CADJ STORE rhoKm1(:,:)  = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE rhoKm1(:,:)  = comlev1_bibj_k, key = kkey, byte = isbyte
121  CADJ STORE rhoKp1(:,:)  = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE rhoK  (:,:)  = comlev1_bibj_k, key = kkey, byte = isbyte
122  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
123  C-          Check static stability with layer below and mix as needed.  C-          Check static stability with layer below and mix as needed.
124              CALL CONVECT(  c           CALL CONVECT(
125       I           bi,bj,iMin,iMax,jMin,jMax,K,rhoKm1,rhoK,  c    I           bi,bj,iMin,iMax,jMin,jMax,K,rhoKm1,rhoK,
126       U           ConvectCount,  c    U           ConvectCount,
127       I           myTime,myIter,myThid)  c    I           myTime,myIter,myThid)
128    
129    C-          Pre-calculate mixing weights for interface K
130                CALL CONVECTIVE_WEIGHTS(
131         I           bi,bj,K,rhoKm1,rhoK,
132         O           weightA,weightB,ConvectCount,
133         I           myThid)
134    
135    C-          Convectively mix heat across interface K
136                CALL CONVECTIVELY_MIXTRACER(
137         I                              bi,bj,k,weightA,weightB,
138         U                              theta,
139         I                              myThid)
140    
141    C-          Convectively mix salt across interface K
142                CALL CONVECTIVELY_MIXTRACER(
143         I                              bi,bj,k,weightA,weightB,
144         U                              salt,
145         I                              myThid)
146    
147    #ifdef ALLOW_PASSIVE_TRACER
148    C-          Convectively mix passive tracer across interface K
149                CALL CONVECTIVELY_MIXTRACER(
150         I                              bi,bj,k,weightA,weightB,
151         U                              Tr1,
152         I                              myThid)
153    #endif /* ALLOW_PASSIVE_TRACER */
154    
155  C--       End DO K=1,Nr  C--       End DO K=1,Nr
156            ENDDO            ENDDO
157                
158    #ifdef ALLOW_TIMEAVE
159              IF (myIter.ne.nIter0 .AND. taveFreq.GT.0.) THEN
160                CALL TIMEAVE_CUMULATE(ConvectCountTave, ConvectCount, Nr,
161         I                               deltaTclock, bi, bj, myThid)
162              ENDIF
163    #endif /* ALLOW_TIMEAVE */
164    
165  #ifdef  ALLOW_KPP  #ifdef  ALLOW_KPP
166  C--     End IF (.NOT.useKPP)  C--     End IF (.NOT.useKPP)
167          ENDIF          ENDIF

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

  ViewVC Help
Powered by ViewVC 1.1.22