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

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

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


Revision 1.24 - (hide annotations) (download)
Sat Dec 4 05:59:50 2004 UTC (19 years, 6 months ago) by dimitri
Branch: MAIN
CVS Tags: checkpoint57b_post, checkpoint57d_post, checkpoint57, checkpoint57a_post, checkpoint57c_post, checkpoint57c_pre, checkpoint57e_post, eckpoint57e_pre, checkpoint57f_pre, checkpoint57a_pre
Changes since 1.23: +3 -3 lines
Added CPP option MINIMAL_TAVE_OUTPUT for minimal time-averaged output:
S, T, U, V, W, ETA, and phiHydLow.

1 dimitri 1.24 C $Header: /u/gcmpack/MITgcm/model/src/convective_adjustment.F,v 1.23 2004/10/19 02:39:58 jmc Exp $
2 cnh 1.8 C $Name: $
3 adcroft 1.2
4 edhill 1.19 #include "PACKAGES_CONFIG.h"
5 adcroft 1.2 #include "CPP_OPTIONS.h"
6    
7 cnh 1.8 CBOP
8     C !ROUTINE: CONVECTIVE_ADJUSTMENT
9     C !INTERFACE:
10 adcroft 1.2 SUBROUTINE CONVECTIVE_ADJUSTMENT(
11     I bi, bj, iMin, iMax, jMin, jMax,
12     I myTime, myIter, myThid )
13 cnh 1.8 C !DESCRIPTION: \bv
14     C *==========================================================*
15     C | SUBROUTINE CONVECTIVE_ADJUSTMENT
16     C | o Driver for vertical mixing or similar parameterization
17     C *==========================================================*
18     C \ev
19    
20     C !USES:
21 adcroft 1.2 IMPLICIT NONE
22     C == Global data ==
23     #include "SIZE.h"
24     #include "EEPARAMS.h"
25     #include "PARAMS.h"
26     #include "DYNVARS.h"
27     #include "GRID.h"
28 jmc 1.5 #ifdef ALLOW_TIMEAVE
29     #include "TIMEAVE_STATV.h"
30 jmc 1.4 #endif
31 heimbach 1.6 #ifdef ALLOW_AUTODIFF_TAMC
32     #include "tamc.h"
33     #include "tamc_keys.h"
34     #endif /* ALLOW_AUTODIFF_TAMC */
35 adcroft 1.2 EXTERNAL DIFFERENT_MULTIPLE
36     LOGICAL DIFFERENT_MULTIPLE
37    
38 cnh 1.8 C !INPUT/OUTPUT PARAMETERS:
39 adcroft 1.2 C == Routine arguments ==
40     C bi,bj,iMin,iMax,jMin,jMax,K - Loop counters
41     C myTime - Current time in simulation
42     C myIter - Current iteration in simulation
43     C myThid - Thread number of this instance of S/R CONVECT
44     INTEGER bi,bj,iMin,iMax,jMin,jMax
45     _RL myTime
46     INTEGER myIter
47     INTEGER myThid
48    
49     #ifdef INCLUDE_CONVECT_CALL
50    
51 cnh 1.8 C !LOCAL VARIABLES:
52 adcroft 1.2 C == Local variables ==
53 cnh 1.8 C rhoKm1, rhoK :: Density at adjacent levels (common ref. level)
54     C ConvectCount :: Convection mixing freq. counter.
55 heimbach 1.17 INTEGER i, j, K, kTop, kBottom, kDir, deltaK
56 adcroft 1.2 _RL rhoKm1(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
57     _RL rhoK (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
58     _RL ConvectCount(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
59 adcroft 1.10 _RL weightA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
60     _RL weightB(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
61 cnh 1.8 CEOP
62 adcroft 1.2
63     C-- Check to see if should convect now
64     IF ( DIFFERENT_MULTIPLE(cAdjFreq,myTime,myTime-deltaTClock) ) THEN
65    
66 heimbach 1.17 C-- Initialise counters
67     kTop = 0
68     kBottom = 0
69     kDir = 0
70     deltaK = 0
71    
72 jmc 1.4 C- Initialisation of Convection Counter
73     DO K=1,Nr
74     DO j=1-OLy,sNy+OLy
75     DO i=1-OLx,sNx+OLx
76     ConvectCount(i,j,k) = 0.
77     ENDDO
78     ENDDO
79     ENDDO
80    
81 heimbach 1.6 #ifdef ALLOW_AUTODIFF_TAMC
82     act1 = bi - myBxLo(myThid)
83     max1 = myBxHi(myThid) - myBxLo(myThid) + 1
84     act2 = bj - myByLo(myThid)
85     max2 = myByHi(myThid) - myByLo(myThid) + 1
86     act3 = myThid - 1
87     max3 = nTx*nTy
88     act4 = ikey_dynamics - 1
89     ikey = (act1 + 1) + act2*max1
90     & + act3*max1*max2
91     & + act4*max1*max2*max3
92     #endif /* ALLOW_AUTODIFF_TAMC */
93    
94 jmc 1.23 IF ( rkFac*gravitySign .LT. 0. ) THEN
95     C- <=> usingZCoords:
96 heimbach 1.17 kTop = 2
97 mlosch 1.15 kBottom = Nr
98 heimbach 1.17 kDir = 1
99     deltaK = -1
100 jmc 1.23 ELSE
101     C- <=> usingPCoords:
102 mlosch 1.16 kTop = Nr
103     kBottom = 2
104 mlosch 1.15 kDir = -1
105 heimbach 1.17 deltaK = 0
106 jmc 1.23 ENDIF
107 mlosch 1.15
108 adcroft 1.2 C-- Loop over all *interior* layers
109 mlosch 1.15 DO K=kTop,kBottom,kDir
110    
111 adcroft 1.2 #ifdef ALLOW_AUTODIFF_TAMC
112 heimbach 1.7 kkey = (ikey-1)*Nr + k
113     CADJ STORE theta(:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
114     CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
115 adcroft 1.2 #endif /* ALLOW_AUTODIFF_TAMC */
116     C- Density of K-1 layer (above W(K)) reference to K-1 T-level
117     CALL FIND_RHO(
118 heimbach 1.17 I bi,bj,iMin,iMax,jMin,jMax,K-1,K+deltaK,
119 adcroft 1.2 I theta,salt,
120     O rhoKm1,
121     I myThid )
122    
123     C- Density of K layer (below W(K)) reference to K-1 T-level.
124     #ifdef ALLOW_AUTODIFF_TAMC
125 heimbach 1.7 CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
126     CADJ STORE salt (:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
127 adcroft 1.2 #endif /* ALLOW_AUTODIFF_TAMC */
128     CALL FIND_RHO(
129 heimbach 1.17 I bi,bj,iMin,iMax,jMin,jMax,K,K+deltaK,
130 adcroft 1.2 I theta,salt,
131     O rhoK,
132     I myThid )
133    
134     #ifdef ALLOW_AUTODIFF_TAMC
135 heimbach 1.7 CADJ STORE rhoKm1(:,:) = comlev1_bibj_k, key = kkey, byte = isbyte
136     CADJ STORE rhoK (:,:) = comlev1_bibj_k, key = kkey, byte = isbyte
137 adcroft 1.2 #endif /* ALLOW_AUTODIFF_TAMC */
138     C- Check static stability with layer below and mix as needed.
139 adcroft 1.10 c CALL CONVECT(
140     c I bi,bj,iMin,iMax,jMin,jMax,K,rhoKm1,rhoK,
141     c U ConvectCount,
142     c I myTime,myIter,myThid)
143    
144     C- Pre-calculate mixing weights for interface K
145     CALL CONVECTIVE_WEIGHTS(
146     I bi,bj,K,rhoKm1,rhoK,
147     O weightA,weightB,ConvectCount,
148     I myThid)
149    
150     C- Convectively mix heat across interface K
151     CALL CONVECTIVELY_MIXTRACER(
152     I bi,bj,k,weightA,weightB,
153     U theta,
154     I myThid)
155    
156     C- Convectively mix salt across interface K
157     CALL CONVECTIVELY_MIXTRACER(
158     I bi,bj,k,weightA,weightB,
159     U salt,
160     I myThid)
161    
162 adcroft 1.11 #ifdef ALLOW_PTRACERS
163     C- Convectively mix passive tracers across interface K
164     IF ( usePTRACERS ) THEN
165     CALL PTRACERS_CONVECT(
166     I bi,bj,k,weightA,weightB,myThid)
167     ENDIF
168     #endif /* ALLOW_PTRACERS */
169 jmc 1.4
170 adcroft 1.2 C-- End DO K=1,Nr
171     ENDDO
172    
173 jmc 1.5 #ifdef ALLOW_TIMEAVE
174 dimitri 1.24 #ifndef MINIMAL_TAVE_OUTPUT
175 edhill 1.19 ceh3 needs an IF ( useTIMEAVE ) THEN
176 jmc 1.5 IF (myIter.ne.nIter0 .AND. taveFreq.GT.0.) THEN
177 jmc 1.18 CALL TIMEAVE_CUMUL_1T(ConvectCountTave, ConvectCount,
178     I Nr, deltaTclock, bi, bj, myThid)
179 jmc 1.5 ENDIF
180 dimitri 1.24 #endif /* ndef MINIMAL_TAVE_OUTPUT */
181 jmc 1.5 #endif /* ALLOW_TIMEAVE */
182 adcroft 1.2
183     C-- End IF (DIFFERENT_MULTIPLE)
184     ENDIF
185    
186     #endif /* INCLUDE_CONVECT_CALL */
187    
188     RETURN
189     END

  ViewVC Help
Powered by ViewVC 1.1.22