1 |
C $Header: $ |
2 |
C $Name: $ |
3 |
|
4 |
#include "AIM_OPTIONS.h" |
5 |
|
6 |
SUBROUTINE CONVMF (PSA,dpFac,SE,QA,QSAT, |
7 |
O IDEPTH,CBMF,PRECNV,DFSE,DFQA, |
8 |
I kGrd,bi,bj,myThid) |
9 |
C-- |
10 |
C-- SUBROUTINE CONVMF (PSA,SE,QA,QSAT, |
11 |
C-- * IDEPTH,CBMF,PRECNV,DFSE,DFQA) |
12 |
C-- |
13 |
C-- Purpose: Compute convective fluxes of dry static energy and moisture |
14 |
C-- using a simplified mass-flux scheme |
15 |
C-- Input: PSA = norm. surface pressure [p/p0] (2-dim) |
16 |
C dpFac = cell delta_P fraction (3-dim) |
17 |
C-- SE = dry static energy (3-dim) |
18 |
C-- QA = specific humidity [g/kg] (3-dim) |
19 |
C-- QSAT = saturation spec. hum. [g/kg] (3-dim) |
20 |
C-- Output: IDEPTH = convection depth in layers (2-dim) |
21 |
C-- CBMF = cloud-base mass flux (2-dim) |
22 |
C-- PRECNV = convective precipitation [g/(m^2 s)] (2-dim) |
23 |
C-- DFSE = net flux of d.s.en. into each atm. layer (3-dim) |
24 |
C-- DFQA = net flux of sp.hum. into each atm. layer (3-dim) |
25 |
C Input: kGrd = Ground level index (2-dim) |
26 |
C bi,bj = tile index |
27 |
C myThid = Thread number for this instance of the routine |
28 |
C------- |
29 |
C Note: dry static energy has been replaced by Pot.Temp. |
30 |
C------- |
31 |
|
32 |
IMPLICIT NONE |
33 |
|
34 |
C Resolution parameters |
35 |
|
36 |
C-- size for MITgcm & Physics package : |
37 |
#include "AIM_SIZE.h" |
38 |
|
39 |
#include "EEPARAMS.h" |
40 |
|
41 |
C Physical constants + functions of sigma and latitude |
42 |
|
43 |
#include "com_physcon.h" |
44 |
|
45 |
C Convection constants |
46 |
|
47 |
#include "com_cnvcon.h" |
48 |
|
49 |
C-- Routine arguments: |
50 |
_RL PSA(NGP), SE(NGP,NLEV), QA(NGP,NLEV), QSAT(NGP,NLEV) |
51 |
_RL dpFac(NGP,NLEV) |
52 |
INTEGER IDEPTH(NGP) |
53 |
_RL CBMF(NGP), PRECNV(NGP), DFSE(NGP,NLEV), DFQA(NGP,NLEV) |
54 |
INTEGER kGrd(NGP) |
55 |
INTEGER bi,bj,myThid |
56 |
|
57 |
#ifdef ALLOW_AIM |
58 |
|
59 |
C-- Local variables: |
60 |
INTEGER ITOP(NGP) |
61 |
c_FM REAL SM(NGP,NLEV), QATHR(NGP), ENTR(2:NLEV-1) |
62 |
_RL QATHR(NGP), ENTR(2:NLEV-1) |
63 |
_RL ENTR_PS(NGP,2:NLEV-1), FM0(NGP) |
64 |
|
65 |
INTEGER J, K, K1, Ktmp |
66 |
_RL dSEdp(NGP,NLEV), factP, PSA_1 |
67 |
_RL dSEdpTot, stab_crit, FDMUS |
68 |
C- jmc: declare all local variables: |
69 |
_RL QMAX, DELQ, QB, QSATB, FMASS, ENMASS, SENTR |
70 |
_RL FPSA, FQMAX, RDPS, FUQ, FDQ, FSQ |
71 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
72 |
|
73 |
C-- 1. Initialization of output and workspace arrays |
74 |
|
75 |
PSA_1 = 1. |
76 |
FQMAX= 5. |
77 |
|
78 |
RDPS = 2. _d 0 /(1. _d 0 - PSMIN) |
79 |
c_FM FM0=P0*DSIG(NLEV)/(GG*TRCNV*3600) |
80 |
c_FM FPSA=PSA(J)*MIN(1.,(PSA(J)-PSMIN)*RDPS) |
81 |
C- compute FM0(J) = FM0*FPSA |
82 |
DO J=1,NGP |
83 |
FM0(J)=0. |
84 |
Ktmp = kGrd(J) |
85 |
IF ( Ktmp .NE. 0 ) THEN |
86 |
FPSA = MIN(1. _d 0 ,(PSA(J)-PSMIN)*RDPS) |
87 |
FM0(J)=P0*DSIG(Ktmp)*dpFac(J,Ktmp)/(GG*TRCNV*3600. _d 0) |
88 |
ENDIF |
89 |
ENDDO |
90 |
|
91 |
DO K=1,NLEV |
92 |
DO J=1,NGP |
93 |
DFSE(J,K)=0.0 |
94 |
DFQA(J,K)=0.0 |
95 |
ENDDO |
96 |
ENDDO |
97 |
DO K=2,NLEV-1 |
98 |
DO J=1,NGP |
99 |
ENTR_PS(J,K)=0. |
100 |
ENDDO |
101 |
ENDDO |
102 |
|
103 |
DO J=1,NGP |
104 |
ITOP(J) =kGrd(J) |
105 |
CBMF(J) =0.0 |
106 |
PRECNV(J)=0.0 |
107 |
ENDDO |
108 |
|
109 |
C Saturation moist static energy |
110 |
c_FM DO K=1,NLEV |
111 |
c_FM DO J=1,NGP |
112 |
c_FM SM(J,K)=SE(J,K)+ALHC*QSAT(J,K) |
113 |
c_FM ENDDO |
114 |
c_FM ENDDO |
115 |
|
116 |
C --------------------------------------------- |
117 |
C Write Conditional stability based on Pot.Temp : |
118 |
C dSEdp(K) = Delta[Static-Energy] between 2 Plevels(k,k+1) |
119 |
C and corresponds to SE(K+1)-SE(K) in the original code |
120 |
C ------- |
121 |
DO K=1,NLEV-1 |
122 |
factP = CP*SIGH(K)**(RD/CP) |
123 |
DO J=1,NGP |
124 |
dSEdp(J,K)=(SE(J,K+1)-SE(J,K))*factP |
125 |
ENDDO |
126 |
ENDDO |
127 |
|
128 |
C Entrainment profile (up to sigma = 0.5) |
129 |
|
130 |
c_FM SENTR=0. |
131 |
c_FM DO K=2,NLEV-1 |
132 |
c_FM ENTR(K)=( MAX( 0. _d 0, SIG(K)-0.5 _d 0) )**2 |
133 |
c_FM SENTR=SENTR+ENTR(K) |
134 |
c_FM ENDDO |
135 |
|
136 |
c_FM SENTR=ENTMAX/SENTR |
137 |
c_FM DO K=2,NLEV-1 |
138 |
c_FM ENTR(K)=ENTR(K)*SENTR |
139 |
c_FM ENDDO |
140 |
|
141 |
DO J=1,NGP |
142 |
DO K=2,NLEV-1 |
143 |
ENTR_PS(J,K)=0. |
144 |
ENDDO |
145 |
Ktmp = kGrd(J) |
146 |
IF (Ktmp.GT.2) THEN |
147 |
SENTR=0. |
148 |
DO K=2,Ktmp-1 |
149 |
ENTR(K)= ( MAX( 0. _d 0, SIG(K)/PSA(J) - 0.5 _d 0) )**2 |
150 |
SENTR=SENTR+ENTR(K) |
151 |
ENDDO |
152 |
IF (SENTR.GT.0.) THEN |
153 |
SENTR=ENTMAX/SENTR |
154 |
DO K=2,Ktmp-1 |
155 |
ENTR_PS(J,K) = ENTR(K)*SENTR*PSA(J) |
156 |
ENDDO |
157 |
ENDIF |
158 |
ENDIF |
159 |
ENDDO |
160 |
|
161 |
C-- 2. Check of conditions for convection |
162 |
|
163 |
C 2.1 Conditional instability |
164 |
|
165 |
c_FM DO K=NLEV-2,2,-1 |
166 |
c_FM DO J=1,NGP |
167 |
c_FM SMB=SM(J,K)+WVI(K,2)*(SM(J,K+1)-SM(J,K)) |
168 |
c_FM IF (SM(J,NLEV).GT.SMB) ITOP(J)=K |
169 |
c_FM ENDDO |
170 |
c_FM ENDDO |
171 |
|
172 |
DO J=1,NGP |
173 |
Ktmp = kGrd(J) |
174 |
IF ( Ktmp .GE. 2 ) THEN |
175 |
dSEdpTot = dSEdp(J,Ktmp-1) |
176 |
DO k=Ktmp-2,2,-1 |
177 |
dSEdpTot = dSEdpTot + dSEdp(J,K) |
178 |
stab_crit = dSEdpTot + ALHC*(QSAT(J,Ktmp)-QSAT(J,K)) |
179 |
& -WVI(K,2)*(dSEdp(J,K) + ALHC*(QSAT(J,K+1)-QSAT(J,K)) ) |
180 |
IF (stab_crit.GT.0.) ITOP(J) = K |
181 |
ENDDO |
182 |
ENDIF |
183 |
ENDDO |
184 |
|
185 |
|
186 |
C 2.2 Humidity exceeding prescribed threshold |
187 |
|
188 |
DO J=1,NGP |
189 |
Ktmp = kGrd(J) |
190 |
IF ( Ktmp .NE. 0 ) THEN |
191 |
QATHR(J)=MIN(QBL,RHBL*QSAT(J,Ktmp)) |
192 |
IF (QA(J,Ktmp).LT.QATHR(J).OR.PSA(J).LT.PSMIN) |
193 |
& ITOP(J)=Ktmp |
194 |
ENDIF |
195 |
IDEPTH(J)=Ktmp-ITOP(J) |
196 |
ENDDO |
197 |
|
198 |
C-- 3. Convection over selected grid-points |
199 |
|
200 |
DO 300 J=1,NGP |
201 |
Ktmp = kGrd(J) |
202 |
IF (ITOP(J).EQ.Ktmp) GO TO 300 |
203 |
|
204 |
C- 3.1 Boundary layer (cloud base) |
205 |
|
206 |
K = Ktmp |
207 |
K1=K-1 |
208 |
|
209 |
C Maximum specific humidity in the PBL |
210 |
QMAX=MAX(1.01 _d 0 *QA(J,K),QSAT(J,K)) |
211 |
|
212 |
C Dry static energy and moisture at upper boundary |
213 |
c_FM SB=SE(J,K1)+WVI(K1,2)*(SE(J,K)-SE(J,K1)) |
214 |
QB=QA(J,K1)+WVI(K1,2)*(QA(J,K)-QA(J,K1)) |
215 |
QB=MIN(QB,QA(J,K)) |
216 |
|
217 |
C Cloud-base mass flux, computed to satisfy: |
218 |
C fmass*(qmax-qb)*(g/dp)=(q-qthr)/trcnv |
219 |
|
220 |
c_FM FPSA=PSA(J)*MIN(1.,(PSA(J)-PSMIN)*RDPS) |
221 |
c_FM FMASS=FM0*FPSA*MIN(FQMAX,(QA(J,K)-QATHR(J))/(QMAX-QB)) |
222 |
FMASS = FM0(J)*MIN(FQMAX,(QA(J,K)-QATHR(J))/(QMAX-QB)) |
223 |
CBMF(J)=FMASS |
224 |
|
225 |
C Upward fluxes at upper boundary |
226 |
c_FM FUS=FMASS*SE(J,K) |
227 |
FUQ=FMASS*QMAX |
228 |
|
229 |
C Downward fluxes at upper boundary |
230 |
c_FM FDS=FMASS*SB |
231 |
FDQ=FMASS*QB |
232 |
|
233 |
C Net flux of dry static energy and moisture |
234 |
FDMUS = FMASS*dSEdp(J,K1)*(WVI(K1,2)-1.) |
235 |
DFSE(J,K)=FDMUS |
236 |
c_FM DFSE(J,K)=FDS-FUS |
237 |
DFQA(J,K)=FDQ-FUQ |
238 |
|
239 |
C- 3.2 Intermediate layers (entrainment) |
240 |
|
241 |
DO K=Ktmp-1,ITOP(J)+1,-1 |
242 |
K1=K-1 |
243 |
|
244 |
C Fluxes at lower boundary |
245 |
c_FM DFSE(J,K)=FUS-FDS |
246 |
DFQA(J,K)=FUQ-FDQ |
247 |
|
248 |
C Mass entrainment |
249 |
c_FM ENMASS=ENTR(K)*PSA(J)*CBMF(J) |
250 |
ENMASS=ENTR_PS(J,K) * CBMF(J) |
251 |
FMASS=FMASS+ENMASS |
252 |
|
253 |
C Upward fluxes at upper boundary |
254 |
c_FM FUS=FUS+ENMASS*SE(J,K) |
255 |
FUQ=FUQ+ENMASS*QA(J,K) |
256 |
|
257 |
C Downward fluxes at upper boundary |
258 |
c_FM SB=SE(J,K1)+WVI(K1,2)*(SE(J,K)-SE(J,K1)) |
259 |
QB=QA(J,K1)+WVI(K1,2)*(QA(J,K)-QA(J,K1)) |
260 |
c_FM FDS=FMASS*SB |
261 |
FDQ=FMASS*QB |
262 |
|
263 |
C Net flux of dry static energy and moisture |
264 |
DFSE(J,K) = FMASS*(WVI(K1,2)-1.)*dSEdp(J,K1) |
265 |
& -(FMASS-ENMASS)*WVI(K,2)*dSEdp(J,K) |
266 |
FDMUS = FDMUS + DFSE(J,K) |
267 |
c_FM DFSE(J,K)=DFSE(J,K)+FDS-FUS |
268 |
DFQA(J,K)=DFQA(J,K)+FDQ-FUQ |
269 |
|
270 |
C Secondary moisture flux |
271 |
DELQ=RHIL*QSAT(J,K)-QA(J,K) |
272 |
IF (DELQ.GT.0.0) THEN |
273 |
FSQ=SMF*CBMF(J)*DELQ |
274 |
DFQA(J,K) =DFQA(J,K) +FSQ |
275 |
DFQA(J,Ktmp)=DFQA(J,Ktmp)-FSQ |
276 |
ENDIF |
277 |
|
278 |
ENDDO |
279 |
|
280 |
C- 3.3 Top layer (condensation and detrainment) |
281 |
|
282 |
K=ITOP(J) |
283 |
|
284 |
C Flux of convective precipitation |
285 |
QSATB=QSAT(J,K)+WVI(K,2)*(QSAT(J,K+1)-QSAT(J,K)) |
286 |
PRECNV(J)=MAX(FUQ-FMASS*QSATB, 0. _d 0) |
287 |
|
288 |
C Net flux of dry static energy and moisture |
289 |
DFSE(J,K)= -FDMUS+ALHC*PRECNV(J) |
290 |
c_FM DFSE(J,K)=FUS-FDS+ALHC*PRECNV(J) |
291 |
DFQA(J,K)=FUQ-FDQ-PRECNV(J) |
292 |
|
293 |
300 CONTINUE |
294 |
|
295 |
#endif /* ALLOW_AIM */ |
296 |
|
297 |
RETURN |
298 |
END |