1 | !********************************************************************** |
---|
2 | ! Copyright 1998,1999,2000,2001,2002,2005,2007,2008,2009,2010 * |
---|
3 | ! Andreas Stohl, Petra Seibert, A. Frank, Gerhard Wotawa, * |
---|
4 | ! Caroline Forster, Sabine Eckhardt, John Burkhart, Harald Sodemann * |
---|
5 | ! * |
---|
6 | ! This file is part of FLEXPART. * |
---|
7 | ! * |
---|
8 | ! FLEXPART is free software: you can redistribute it and/or modify * |
---|
9 | ! it under the terms of the GNU General Public License as published by* |
---|
10 | ! the Free Software Foundation, either version 3 of the License, or * |
---|
11 | ! (at your option) any later version. * |
---|
12 | ! * |
---|
13 | ! FLEXPART is distributed in the hope that it will be useful, * |
---|
14 | ! but WITHOUT ANY WARRANTY; without even the implied warranty of * |
---|
15 | ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
---|
16 | ! GNU General Public License for more details. * |
---|
17 | ! * |
---|
18 | ! You should have received a copy of the GNU General Public License * |
---|
19 | ! along with FLEXPART. If not, see <http://www.gnu.org/licenses/>. * |
---|
20 | !********************************************************************** |
---|
21 | |
---|
22 | !************************************************************************** |
---|
23 | !**** SUBROUTINE CONVECT ***** |
---|
24 | !**** VERSION 4.3c ***** |
---|
25 | !**** 20 May, 2002 ***** |
---|
26 | !**** Kerry Emanuel ***** |
---|
27 | !************************************************************************** |
---|
28 | ! |
---|
29 | SUBROUTINE CONVECT & |
---|
30 | (ND, NL, DELT, IFLAG, & |
---|
31 | PRECIP, WD, TPRIME, QPRIME, CBMF ) |
---|
32 | ! |
---|
33 | !-cv ************************************************************************* |
---|
34 | !-cv C. Forster, November 2003 - May 2004: |
---|
35 | !-cv |
---|
36 | !-cv The subroutine has been downloaded from Kerry Emanuel's homepage, |
---|
37 | !-cv where further infos on the convection scheme can be found |
---|
38 | !-cv http://www-paoc.mit.edu/~emanuel/home.html |
---|
39 | !-cv |
---|
40 | !-cv The following changes have been made to integrate this subroutine |
---|
41 | !-cv into FLEXPART |
---|
42 | !-cv |
---|
43 | !-cv Putting most of the variables in a new common block |
---|
44 | !-cv renaming eps to eps0 because there is some eps already in includepar |
---|
45 | !-cv |
---|
46 | !-cv removing the arrays U,V,TRA and related arrays |
---|
47 | !-cv |
---|
48 | !-cv renaming the original arrays T,Q,QS,P,PH to |
---|
49 | !-cv TCONV,QCONV,QSCONV,PCONV_HPA,PHCONV_HPA |
---|
50 | !-cv |
---|
51 | !-cv Initialization of variables has been put into parameter statements |
---|
52 | !-cv instead of assignment of values at each call, in order to save |
---|
53 | !-cv computation time. |
---|
54 | !*************************************************************************** |
---|
55 | ! |
---|
56 | !----------------------------------------------------------------------------- |
---|
57 | ! *** On input: *** |
---|
58 | ! |
---|
59 | !T: Array of absolute temperature (K) of dimension ND, with first |
---|
60 | ! index corresponding to lowest model level. Note that this array |
---|
61 | ! will be altered by the subroutine if dry convective adjustment |
---|
62 | ! occurs and if IPBL is not equal to 0. |
---|
63 | ! |
---|
64 | !Q: Array of specific humidity (gm/gm) of dimension ND, with first |
---|
65 | ! index corresponding to lowest model level. Must be defined |
---|
66 | ! at same grid levels as T. Note that this array will be altered |
---|
67 | ! if dry convective adjustment occurs and if IPBL is not equal to 0. |
---|
68 | ! |
---|
69 | !QS: Array of saturation specific humidity of dimension ND, with first |
---|
70 | ! index corresponding to lowest model level. Must be defined |
---|
71 | ! at same grid levels as T. Note that this array will be altered |
---|
72 | ! if dry convective adjustment occurs and if IPBL is not equal to 0. |
---|
73 | ! |
---|
74 | !U: Array of zonal wind velocity (m/s) of dimension ND, witth first |
---|
75 | ! index corresponding with the lowest model level. Defined at |
---|
76 | ! same levels as T. Note that this array will be altered if |
---|
77 | ! dry convective adjustment occurs and if IPBL is not equal to 0. |
---|
78 | ! |
---|
79 | !V: Same as U but for meridional velocity. |
---|
80 | ! |
---|
81 | !TRA: Array of passive tracer mixing ratio, of dimensions (ND,NTRA), |
---|
82 | ! where NTRA is the number of different tracers. If no |
---|
83 | ! convective tracer transport is needed, define a dummy |
---|
84 | ! input array of dimension (ND,1). Tracers are defined at |
---|
85 | ! same vertical levels as T. Note that this array will be altered |
---|
86 | ! if dry convective adjustment occurs and if IPBL is not equal to 0. |
---|
87 | ! |
---|
88 | !P: Array of pressure (mb) of dimension ND, with first |
---|
89 | ! index corresponding to lowest model level. Must be defined |
---|
90 | ! at same grid levels as T. |
---|
91 | ! |
---|
92 | !PH: Array of pressure (mb) of dimension ND+1, with first index |
---|
93 | ! corresponding to lowest level. These pressures are defined at |
---|
94 | ! levels intermediate between those of P, T, Q and QS. The first |
---|
95 | ! value of PH should be greater than (i.e. at a lower level than) |
---|
96 | ! the first value of the array P. |
---|
97 | ! |
---|
98 | !ND: The dimension of the arrays T,Q,QS,P,PH,FT and FQ |
---|
99 | ! |
---|
100 | !NL: The maximum number of levels to which convection can |
---|
101 | ! penetrate, plus 1. |
---|
102 | ! NL MUST be less than or equal to ND-1. |
---|
103 | ! |
---|
104 | !NTRA:The number of different tracers. If no tracer transport |
---|
105 | ! is needed, set this equal to 1. (On most compilers, setting |
---|
106 | ! NTRA to 0 will bypass tracer calculation, saving some CPU.) |
---|
107 | ! |
---|
108 | !DELT: The model time step (sec) between calls to CONVECT |
---|
109 | ! |
---|
110 | !---------------------------------------------------------------------------- |
---|
111 | ! *** On Output: *** |
---|
112 | ! |
---|
113 | !IFLAG: An output integer whose value denotes the following: |
---|
114 | ! |
---|
115 | ! VALUE INTERPRETATION |
---|
116 | ! ----- -------------- |
---|
117 | ! 0 No moist convection; atmosphere is not |
---|
118 | ! unstable, or surface temperature is less |
---|
119 | ! than 250 K or surface specific humidity |
---|
120 | ! is non-positive. |
---|
121 | ! |
---|
122 | ! 1 Moist convection occurs. |
---|
123 | ! |
---|
124 | ! 2 No moist convection: lifted condensation |
---|
125 | ! level is above the 200 mb level. |
---|
126 | ! |
---|
127 | ! 3 No moist convection: cloud base is higher |
---|
128 | ! then the level NL-1. |
---|
129 | ! |
---|
130 | ! 4 Moist convection occurs, but a CFL condition |
---|
131 | ! on the subsidence warming is violated. This |
---|
132 | ! does not cause the scheme to terminate. |
---|
133 | ! |
---|
134 | !FT: Array of temperature tendency (K/s) of dimension ND, defined at same |
---|
135 | ! grid levels as T, Q, QS and P. |
---|
136 | ! |
---|
137 | !FQ: Array of specific humidity tendencies ((gm/gm)/s) of dimension ND, |
---|
138 | ! defined at same grid levels as T, Q, QS and P. |
---|
139 | ! |
---|
140 | !FU: Array of forcing of zonal velocity (m/s^2) of dimension ND, |
---|
141 | ! defined at same grid levels as T. |
---|
142 | ! |
---|
143 | !FV: Same as FU, but for forcing of meridional velocity. |
---|
144 | ! |
---|
145 | !FTRA: Array of forcing of tracer content, in tracer mixing ratio per |
---|
146 | ! second, defined at same levels as T. Dimensioned (ND,NTRA). |
---|
147 | ! |
---|
148 | !PRECIP: Scalar convective precipitation rate (mm/day). |
---|
149 | ! |
---|
150 | !WD: A convective downdraft velocity scale. For use in surface |
---|
151 | ! flux parameterizations. See convect.ps file for details. |
---|
152 | ! |
---|
153 | !TPRIME: A convective downdraft temperature perturbation scale (K). |
---|
154 | ! For use in surface flux parameterizations. See convect.ps |
---|
155 | ! file for details. |
---|
156 | ! |
---|
157 | !QPRIME: A convective downdraft specific humidity |
---|
158 | ! perturbation scale (gm/gm). |
---|
159 | ! For use in surface flux parameterizations. See convect.ps |
---|
160 | ! file for details. |
---|
161 | ! |
---|
162 | !CBMF: The cloud base mass flux ((kg/m**2)/s). THIS SCALAR VALUE MUST |
---|
163 | ! BE STORED BY THE CALLING PROGRAM AND RETURNED TO CONVECT AT |
---|
164 | ! ITS NEXT CALL. That is, the value of CBMF must be "remembered" |
---|
165 | ! by the calling program between calls to CONVECT. |
---|
166 | ! |
---|
167 | !----------------------------------------------------------------------------- |
---|
168 | ! |
---|
169 | ! *** THE PARAMETER NA SHOULD IN GENERAL BE GREATER THAN *** |
---|
170 | ! *** OR EQUAL TO ND + 1 *** |
---|
171 | ! |
---|
172 | ! |
---|
173 | use par_mod, only: na |
---|
174 | use conv_mod, only: sub, fmass, tconv, ft, fq, nconvtop, qconv, pconv_hpa, & |
---|
175 | phconv_hpa, qsconv |
---|
176 | ! writes: sub, fmass, ft, fq, nconvtop |
---|
177 | |
---|
178 | implicit none |
---|
179 | ! |
---|
180 | !-cv====>Begin Module CONVECT File convect.f Undeclared variables |
---|
181 | ! |
---|
182 | !Argument variables |
---|
183 | ! |
---|
184 | integer :: iflag, nd, nl |
---|
185 | ! |
---|
186 | real :: cbmf, delt, precip, qprime, tprime, wd |
---|
187 | ! |
---|
188 | !Local variables |
---|
189 | ! |
---|
190 | integer :: i, icb, ihmin, inb, inb1, j, jtt, k |
---|
191 | integer :: nk |
---|
192 | ! |
---|
193 | real :: ad, afac, ahmax, ahmin, alt, altem |
---|
194 | real :: am, amp1, anum, asij, awat, b6, bf2, bsum, by |
---|
195 | real :: byp, c6, cape, capem, cbmfold, chi, coeff |
---|
196 | real :: cpinv, cwat, damps, dbo, dbosum |
---|
197 | real :: defrac, dei, delm, delp, delt0, delti, denom, dhdp |
---|
198 | real :: dpinv, dtma, dtmin, dtpbl, elacrit, ents |
---|
199 | real :: epmax, fac, fqold, frac, ftold |
---|
200 | real :: plcl, qp1, qsm, qstm, qti, rat |
---|
201 | real :: rdcp, revap, rh, scrit, sigt, sjmax |
---|
202 | real :: sjmin, smid, smin, stemp, tca |
---|
203 | real :: tvaplcl, tvpplcl, tvx, tvy, wdtrain |
---|
204 | |
---|
205 | !integer jc,jn |
---|
206 | !real alvnew,a2,ahm,alv,rm,sum,qnew,dphinv,tc,thbar,tnew,x |
---|
207 | |
---|
208 | real :: FUP(NA),FDOWN(NA) |
---|
209 | ! |
---|
210 | !-cv====>End Module CONVECT File convect.f |
---|
211 | |
---|
212 | INTEGER :: NENT(NA) |
---|
213 | REAL :: M(NA),MP(NA),MENT(NA,NA),QENT(NA,NA),ELIJ(NA,NA) |
---|
214 | REAL :: SIJ(NA,NA),TVP(NA),TV(NA),WATER(NA) |
---|
215 | REAL :: QP(NA),EP(NA),TH(NA),WT(NA),EVAP(NA),CLW(NA) |
---|
216 | REAL :: SIGP(NA),TP(NA),CPN(NA) |
---|
217 | REAL :: LV(NA),LVCP(NA),H(NA),HP(NA),GZ(NA),HM(NA) |
---|
218 | !REAL TOLD(NA) |
---|
219 | ! |
---|
220 | ! ----------------------------------------------------------------------- |
---|
221 | ! |
---|
222 | ! *** Specify Switches *** |
---|
223 | ! |
---|
224 | ! *** IPBL: Set to zero to bypass dry adiabatic adjustment *** |
---|
225 | ! *** Any other value results in dry adiabatic adjustment *** |
---|
226 | ! *** (Zero value recommended for use in models with *** |
---|
227 | ! *** boundary layer schemes) *** |
---|
228 | ! |
---|
229 | ! *** MINORIG: Lowest level from which convection may originate *** |
---|
230 | ! *** (Should be first model level at which T is defined *** |
---|
231 | ! *** for models using bulk PBL schemes; otherwise, it should *** |
---|
232 | ! *** be the first model level at which T is defined above *** |
---|
233 | ! *** the surface layer) *** |
---|
234 | ! |
---|
235 | INTEGER,PARAMETER :: IPBL=0 |
---|
236 | INTEGER,PARAMETER :: MINORIG=1 |
---|
237 | ! |
---|
238 | !------------------------------------------------------------------------------ |
---|
239 | ! |
---|
240 | ! *** SPECIFY PARAMETERS *** |
---|
241 | ! |
---|
242 | ! *** ELCRIT IS THE AUTOCONVERSION THERSHOLD WATER CONTENT (gm/gm) *** |
---|
243 | ! *** TLCRIT IS CRITICAL TEMPERATURE BELOW WHICH THE AUTO- *** |
---|
244 | ! *** CONVERSION THRESHOLD IS ASSUMED TO BE ZERO *** |
---|
245 | ! *** (THE AUTOCONVERSION THRESHOLD VARIES LINEARLY *** |
---|
246 | ! *** BETWEEN 0 C AND TLCRIT) *** |
---|
247 | ! *** ENTP IS THE COEFFICIENT OF MIXING IN THE ENTRAINMENT *** |
---|
248 | ! *** FORMULATION *** |
---|
249 | ! *** SIGD IS THE FRACTIONAL AREA COVERED BY UNSATURATED DNDRAFT *** |
---|
250 | ! *** SIGS IS THE FRACTION OF PRECIPITATION FALLING OUTSIDE *** |
---|
251 | ! *** OF CLOUD *** |
---|
252 | ! *** OMTRAIN IS THE ASSUMED FALL SPEED (P/s) OF RAIN *** |
---|
253 | ! *** OMTSNOW IS THE ASSUMED FALL SPEED (P/s) OF SNOW *** |
---|
254 | ! *** COEFFR IS A COEFFICIENT GOVERNING THE RATE OF EVAPORATION *** |
---|
255 | ! *** OF RAIN *** |
---|
256 | ! *** COEFFS IS A COEFFICIENT GOVERNING THE RATE OF EVAPORATION *** |
---|
257 | ! *** OF SNOW *** |
---|
258 | ! *** CU IS THE COEFFICIENT GOVERNING CONVECTIVE MOMENTUM *** |
---|
259 | ! *** TRANSPORT *** |
---|
260 | ! *** DTMAX IS THE MAXIMUM NEGATIVE TEMPERATURE PERTURBATION *** |
---|
261 | ! *** A LIFTED PARCEL IS ALLOWED TO HAVE BELOW ITS LFC *** |
---|
262 | ! *** ALPHA AND DAMP ARE PARAMETERS THAT CONTROL THE RATE OF *** |
---|
263 | ! *** APPROACH TO QUASI-EQUILIBRIUM *** |
---|
264 | ! *** (THEIR STANDARD VALUES ARE 0.20 AND 0.1, RESPECTIVELY) *** |
---|
265 | ! *** (DAMP MUST BE LESS THAN 1) *** |
---|
266 | ! |
---|
267 | REAL,PARAMETER :: ELCRIT=.0011 |
---|
268 | REAL,PARAMETER :: TLCRIT=-55.0 |
---|
269 | REAL,PARAMETER :: ENTP=1.5 |
---|
270 | REAL,PARAMETER :: SIGD=0.05 |
---|
271 | REAL,PARAMETER :: SIGS=0.12 |
---|
272 | REAL,PARAMETER :: OMTRAIN=50.0 |
---|
273 | REAL,PARAMETER :: OMTSNOW=5.5 |
---|
274 | REAL,PARAMETER :: COEFFR=1.0 |
---|
275 | REAL,PARAMETER :: COEFFS=0.8 |
---|
276 | REAL,PARAMETER :: CU=0.7 |
---|
277 | REAL,PARAMETER :: BETA=10.0 |
---|
278 | REAL,PARAMETER :: DTMAX=0.9 |
---|
279 | REAL,PARAMETER :: ALPHA=0.025 !original 0.2 |
---|
280 | REAL,PARAMETER :: DAMP=0.1 |
---|
281 | ! |
---|
282 | ! *** ASSIGN VALUES OF THERMODYNAMIC CONSTANTS, *** |
---|
283 | ! *** GRAVITY, AND LIQUID WATER DENSITY. *** |
---|
284 | ! *** THESE SHOULD BE CONSISTENT WITH *** |
---|
285 | ! *** THOSE USED IN CALLING PROGRAM *** |
---|
286 | ! *** NOTE: THESE ARE ALSO SPECIFIED IN SUBROUTINE TLIFT *** |
---|
287 | ! |
---|
288 | REAL,PARAMETER :: CPD=1005.7 |
---|
289 | REAL,PARAMETER :: CPV=1870.0 |
---|
290 | REAL,PARAMETER :: CL=2500.0 |
---|
291 | REAL,PARAMETER :: RV=461.5 |
---|
292 | REAL,PARAMETER :: RD=287.04 |
---|
293 | REAL,PARAMETER :: LV0=2.501E6 |
---|
294 | REAL,PARAMETER :: G=9.81 |
---|
295 | REAL,PARAMETER :: ROWL=1000.0 |
---|
296 | ! |
---|
297 | REAL,PARAMETER :: CPVMCL=CL-CPV |
---|
298 | REAL,PARAMETER :: EPS0=RD/RV |
---|
299 | REAL,PARAMETER :: EPSI=1./EPS0 |
---|
300 | REAL,PARAMETER :: GINV=1.0/G |
---|
301 | REAL,PARAMETER :: EPSILON=1.e-20 |
---|
302 | |
---|
303 | ! EPSILON IS A SMALL NUMBER USED TO EXCLUDE MASS FLUXES OF ZERO |
---|
304 | ! |
---|
305 | DELTI=1.0/DELT |
---|
306 | ! |
---|
307 | ! *** INITIALIZE OUTPUT ARRAYS AND PARAMETERS *** |
---|
308 | ! |
---|
309 | |
---|
310 | DO I=1,NL+1 |
---|
311 | FT(I)=0.0 |
---|
312 | FQ(I)=0.0 |
---|
313 | FDOWN(I)=0.0 |
---|
314 | SUB(I)=0.0 |
---|
315 | FUP(I)=0.0 |
---|
316 | M(I)=0.0 |
---|
317 | MP(I)=0.0 |
---|
318 | DO J=1,NL+1 |
---|
319 | FMASS(I,J)=0.0 |
---|
320 | MENT(I,J)=0.0 |
---|
321 | END DO |
---|
322 | END DO |
---|
323 | DO I=1,NL+1 |
---|
324 | RDCP=(RD*(1.-QCONV(I))+QCONV(I)*RV)/ & |
---|
325 | (CPD*(1.-QCONV(I))+QCONV(I)*CPV) |
---|
326 | TH(I)=TCONV(I)*(1000.0/PCONV_HPA(I))**RDCP |
---|
327 | END DO |
---|
328 | PRECIP=0.0 |
---|
329 | WD=0.0 |
---|
330 | TPRIME=0.0 |
---|
331 | QPRIME=0.0 |
---|
332 | IFLAG=0 |
---|
333 | ! |
---|
334 | ! IF(IPBL.NE.0)THEN |
---|
335 | ! |
---|
336 | !*** PERFORM DRY ADIABATIC ADJUSTMENT *** |
---|
337 | ! |
---|
338 | ! JC=0 |
---|
339 | ! DO 30 I=NL-1,1,-1 |
---|
340 | ! JN=0 |
---|
341 | ! SUM=TH(I)*(1.+QCONV(I)*EPSI-QCONV(I)) |
---|
342 | ! DO 10 J=I+1,NL |
---|
343 | ! SUM=SUM+TH(J)*(1.+QCONV(J)*EPSI-QCONV(J)) |
---|
344 | ! THBAR=SUM/REAL(J+1-I) |
---|
345 | ! IF((TH(J)*(1.+QCONV(J)*EPSI-QCONV(J))).LT.THBAR)JN=J |
---|
346 | ! 10 CONTINUE |
---|
347 | ! IF(I.EQ.1)JN=MAX(JN,2) |
---|
348 | ! IF(JN.EQ.0)GOTO 30 |
---|
349 | ! 12 CONTINUE |
---|
350 | ! AHM=0.0 |
---|
351 | ! RM=0.0 |
---|
352 | ! DO 15 J=I,JN |
---|
353 | ! AHM=AHM+(CPD*(1.-QCONV(J))+QCONV(J)*CPV)*TCONV(J)* |
---|
354 | ! + (PHCONV_HPA(J)-PHCONV_HPA(J+1)) |
---|
355 | ! RM=RM+QCONV(J)*(PHCONV_HPA(J)-PHCONV_HPA(J+1)) |
---|
356 | ! 15 CONTINUE |
---|
357 | ! DPHINV=1./(PHCONV_HPA(I)-PHCONV_HPA(JN+1)) |
---|
358 | ! RM=RM*DPHINV |
---|
359 | ! A2=0.0 |
---|
360 | ! DO 20 J=I,JN |
---|
361 | ! QCONV(J)=RM |
---|
362 | ! RDCP=(RD*(1.-QCONV(J))+QCONV(J)*RV)/ |
---|
363 | ! 1 (CPD*(1.-QCONV(J))+QCONV(J)*CPV) |
---|
364 | ! X=(0.001*PCONV_HPA(J))**RDCP |
---|
365 | ! TOLD(J)=TCONV(J) |
---|
366 | ! TCONV(J)=X |
---|
367 | ! A2=A2+(CPD*(1.-QCONV(J))+QCONV(J)*CPV)*X* |
---|
368 | ! 1 (PHCONV_HPA(J)-PHCONV_HPA(J+1)) |
---|
369 | ! 20 CONTINUE |
---|
370 | ! DO 25 J=I,JN |
---|
371 | ! TH(J)=AHM/A2 |
---|
372 | ! TCONV(J)=TCONV(J)*TH(J) |
---|
373 | ! TC=TOLD(J)-273.15 |
---|
374 | ! ALV=LV0-CPVMCL*TC |
---|
375 | ! QSCONV(J)=QSCONV(J)+QSCONV(J)*(1.+QSCONV(J)*(EPSI-1.))*ALV* |
---|
376 | ! 1 (TCONV(J)- TOLD(J))/(RV*TOLD(J)*TOLD(J)) |
---|
377 | ! if (qslev(j) .lt. 0.) then |
---|
378 | ! write(*,*) 'qslev.lt.0 ',j,qslev |
---|
379 | ! endif |
---|
380 | ! 25 CONTINUE |
---|
381 | ! IF((TH(JN+1)*(1.+QCONV(JN+1)*EPSI-QCONV(JN+1))).LT. |
---|
382 | ! 1 (TH(JN)*(1.+QCONV(JN)*EPSI-QCONV(JN))))THEN |
---|
383 | ! JN=JN+1 |
---|
384 | ! GOTO 12 |
---|
385 | ! END IF |
---|
386 | ! IF(I.EQ.1)JC=JN |
---|
387 | ! 30 CONTINUE |
---|
388 | ! |
---|
389 | ! *** Remove any supersaturation that results from adjustment *** |
---|
390 | ! |
---|
391 | !IF(JC.GT.1)THEN |
---|
392 | ! DO 38 J=1,JC |
---|
393 | ! IF(QSCONV(J).LT.QCONV(J))THEN |
---|
394 | ! ALV=LV0-CPVMCL*(TCONV(J)-273.15) |
---|
395 | ! TNEW=TCONV(J)+ALV*(QCONV(J)-QSCONV(J))/(CPD*(1.-QCONV(J))+ |
---|
396 | ! 1 CL*QCONV(J)+QSCONV(J)*(CPV-CL+ALV*ALV/(RV*TCONV(J)*TCONV(J)))) |
---|
397 | ! ALVNEW=LV0-CPVMCL*(TNEW-273.15) |
---|
398 | ! QNEW=(ALV*QCONV(J)-(TNEW-TCONV(J))*(CPD*(1.-QCONV(J)) |
---|
399 | ! 1 +CL*QCONV(J)))/ALVNEW |
---|
400 | ! PRECIP=PRECIP+24.*3600.*1.0E5*(PHCONV_HPA(J)-PHCONV_HPA(J+1))* |
---|
401 | ! 1 (QCONV(J)-QNEW)/(G*DELT*ROWL) |
---|
402 | ! TCONV(J)=TNEW |
---|
403 | ! QCONV(J)=QNEW |
---|
404 | ! QSCONV(J)=QNEW |
---|
405 | ! END IF |
---|
406 | ! 38 CONTINUE |
---|
407 | !END IF |
---|
408 | ! |
---|
409 | !END IF |
---|
410 | ! |
---|
411 | ! *** CALCULATE ARRAYS OF GEOPOTENTIAL, HEAT CAPACITY AND STATIC ENERGY |
---|
412 | ! |
---|
413 | GZ(1)=0.0 |
---|
414 | CPN(1)=CPD*(1.-QCONV(1))+QCONV(1)*CPV |
---|
415 | H(1)=TCONV(1)*CPN(1) |
---|
416 | LV(1)=LV0-CPVMCL*(TCONV(1)-273.15) |
---|
417 | HM(1)=LV(1)*QCONV(1) |
---|
418 | TV(1)=TCONV(1)*(1.+QCONV(1)*EPSI-QCONV(1)) |
---|
419 | AHMIN=1.0E12 |
---|
420 | IHMIN=NL |
---|
421 | DO I=2,NL+1 |
---|
422 | TVX=TCONV(I)*(1.+QCONV(I)*EPSI-QCONV(I)) |
---|
423 | TVY=TCONV(I-1)*(1.+QCONV(I-1)*EPSI-QCONV(I-1)) |
---|
424 | GZ(I)=GZ(I-1)+0.5*RD*(TVX+TVY)*(PCONV_HPA(I-1)-PCONV_HPA(I))/ & |
---|
425 | PHCONV_HPA(I) |
---|
426 | CPN(I)=CPD*(1.-QCONV(I))+CPV*QCONV(I) |
---|
427 | H(I)=TCONV(I)*CPN(I)+GZ(I) |
---|
428 | LV(I)=LV0-CPVMCL*(TCONV(I)-273.15) |
---|
429 | HM(I)=(CPD*(1.-QCONV(I))+CL*QCONV(I))*(TCONV(I)-TCONV(1))+ & |
---|
430 | LV(I)*QCONV(I)+GZ(I) |
---|
431 | TV(I)=TCONV(I)*(1.+QCONV(I)*EPSI-QCONV(I)) |
---|
432 | ! |
---|
433 | ! *** Find level of minimum moist static energy *** |
---|
434 | ! |
---|
435 | IF(I.GE.MINORIG.AND.HM(I).LT.AHMIN.AND.HM(I).LT.HM(I-1))THEN |
---|
436 | AHMIN=HM(I) |
---|
437 | IHMIN=I |
---|
438 | END IF |
---|
439 | END DO |
---|
440 | IHMIN=MIN(IHMIN, NL-1) |
---|
441 | ! |
---|
442 | ! *** Find that model level below the level of minimum moist *** |
---|
443 | ! *** static energy that has the maximum value of moist static energy *** |
---|
444 | ! |
---|
445 | AHMAX=0.0 |
---|
446 | ! *** bug fixed: need to assign an initial value to NK |
---|
447 | ! HSO, 05.08.2009 |
---|
448 | NK=MINORIG |
---|
449 | DO I=MINORIG,IHMIN |
---|
450 | IF(HM(I).GT.AHMAX)THEN |
---|
451 | NK=I |
---|
452 | AHMAX=HM(I) |
---|
453 | END IF |
---|
454 | END DO |
---|
455 | ! |
---|
456 | ! *** CHECK WHETHER PARCEL LEVEL TEMPERATURE AND SPECIFIC HUMIDITY *** |
---|
457 | ! *** ARE REASONABLE *** |
---|
458 | ! *** Skip convection if HM increases monotonically upward *** |
---|
459 | ! |
---|
460 | IF(TCONV(NK).LT.250.0.OR.QCONV(NK).LE.0.0.OR.IHMIN.EQ.(NL-1)) & |
---|
461 | THEN |
---|
462 | IFLAG=0 |
---|
463 | CBMF=0.0 |
---|
464 | RETURN |
---|
465 | END IF |
---|
466 | ! |
---|
467 | ! *** CALCULATE LIFTED CONDENSATION LEVEL OF AIR AT PARCEL ORIGIN LEVEL *** |
---|
468 | ! *** (WITHIN 0.2% OF FORMULA OF BOLTON, MON. WEA. REV.,1980) *** |
---|
469 | ! |
---|
470 | RH=QCONV(NK)/QSCONV(NK) |
---|
471 | CHI=TCONV(NK)/(1669.0-122.0*RH-TCONV(NK)) |
---|
472 | PLCL=PCONV_HPA(NK)*(RH**CHI) |
---|
473 | IF(PLCL.LT.200.0.OR.PLCL.GE.2000.0)THEN |
---|
474 | IFLAG=2 |
---|
475 | CBMF=0.0 |
---|
476 | RETURN |
---|
477 | END IF |
---|
478 | ! |
---|
479 | ! *** CALCULATE FIRST LEVEL ABOVE LCL (=ICB) *** |
---|
480 | ! |
---|
481 | ICB=NL-1 |
---|
482 | DO I=NK+1,NL |
---|
483 | IF(PCONV_HPA(I).LT.PLCL)THEN |
---|
484 | ICB=MIN(ICB,I) |
---|
485 | END IF |
---|
486 | END DO |
---|
487 | IF(ICB.GE.(NL-1))THEN |
---|
488 | IFLAG=3 |
---|
489 | CBMF=0.0 |
---|
490 | RETURN |
---|
491 | END IF |
---|
492 | ! |
---|
493 | ! *** FIND TEMPERATURE UP THROUGH ICB AND TEST FOR INSTABILITY *** |
---|
494 | ! |
---|
495 | ! *** SUBROUTINE TLIFT CALCULATES PART OF THE LIFTED PARCEL VIRTUAL *** |
---|
496 | ! *** TEMPERATURE, THE ACTUAL TEMPERATURE AND THE ADIABATIC *** |
---|
497 | ! *** LIQUID WATER CONTENT *** |
---|
498 | ! |
---|
499 | CALL TLIFT(GZ,ICB,NK,TVP,TP,CLW,ND,NL,1) |
---|
500 | DO I=NK,ICB |
---|
501 | TVP(I)=TVP(I)-TP(I)*QCONV(NK) |
---|
502 | END DO |
---|
503 | ! |
---|
504 | ! *** If there was no convection at last time step and parcel *** |
---|
505 | ! *** is stable at ICB then skip rest of calculation *** |
---|
506 | ! |
---|
507 | IF(CBMF.EQ.0.0.AND.TVP(ICB).LE.(TV(ICB)-DTMAX))THEN |
---|
508 | IFLAG=0 |
---|
509 | RETURN |
---|
510 | END IF |
---|
511 | ! |
---|
512 | ! *** IF THIS POINT IS REACHED, MOIST CONVECTIVE ADJUSTMENT IS NECESSARY *** |
---|
513 | ! |
---|
514 | IF(IFLAG.NE.4)IFLAG=1 |
---|
515 | ! |
---|
516 | ! *** FIND THE REST OF THE LIFTED PARCEL TEMPERATURES *** |
---|
517 | ! |
---|
518 | CALL TLIFT(GZ,ICB,NK,TVP,TP,CLW,ND,NL,2) |
---|
519 | ! |
---|
520 | ! *** SET THE PRECIPITATION EFFICIENCIES AND THE FRACTION OF *** |
---|
521 | ! *** PRECIPITATION FALLING OUTSIDE OF CLOUD *** |
---|
522 | ! *** THESE MAY BE FUNCTIONS OF TP(I), PCONV_HPA(I) AND CLW(I) *** |
---|
523 | ! |
---|
524 | DO I=1,NK |
---|
525 | EP(I)=0.0 |
---|
526 | SIGP(I)=SIGS |
---|
527 | END DO |
---|
528 | DO I=NK+1,NL |
---|
529 | TCA=TP(I)-273.15 |
---|
530 | IF(TCA.GE.0.0)THEN |
---|
531 | ELACRIT=ELCRIT |
---|
532 | ELSE |
---|
533 | ELACRIT=ELCRIT*(1.0-TCA/TLCRIT) |
---|
534 | END IF |
---|
535 | ELACRIT=MAX(ELACRIT,0.0) |
---|
536 | EPMAX=0.999 |
---|
537 | EP(I)=EPMAX*(1.0-ELACRIT/MAX(CLW(I),1.0E-8)) |
---|
538 | EP(I)=MAX(EP(I),0.0) |
---|
539 | EP(I)=MIN(EP(I),EPMAX) |
---|
540 | SIGP(I)=SIGS |
---|
541 | END DO |
---|
542 | ! |
---|
543 | ! *** CALCULATE VIRTUAL TEMPERATURE AND LIFTED PARCEL *** |
---|
544 | ! *** VIRTUAL TEMPERATURE *** |
---|
545 | ! |
---|
546 | DO I=ICB+1,NL |
---|
547 | TVP(I)=TVP(I)-TP(I)*QCONV(NK) |
---|
548 | END DO |
---|
549 | TVP(NL+1)=TVP(NL)-(GZ(NL+1)-GZ(NL))/CPD |
---|
550 | ! |
---|
551 | ! *** NOW INITIALIZE VARIOUS ARRAYS USED IN THE COMPUTATIONS *** |
---|
552 | ! |
---|
553 | DO I=1,NL+1 |
---|
554 | HP(I)=H(I) |
---|
555 | NENT(I)=0 |
---|
556 | WATER(I)=0.0 |
---|
557 | EVAP(I)=0.0 |
---|
558 | WT(I)=OMTSNOW |
---|
559 | LVCP(I)=LV(I)/CPN(I) |
---|
560 | DO J=1,NL+1 |
---|
561 | QENT(I,J)=QCONV(J) |
---|
562 | ELIJ(I,J)=0.0 |
---|
563 | SIJ(I,J)=0.0 |
---|
564 | END DO |
---|
565 | END DO |
---|
566 | QP(1)=QCONV(1) |
---|
567 | DO I=2,NL+1 |
---|
568 | QP(I)=QCONV(I-1) |
---|
569 | END DO |
---|
570 | ! |
---|
571 | ! *** FIND THE FIRST MODEL LEVEL (INB1) ABOVE THE PARCEL'S *** |
---|
572 | ! *** HIGHEST LEVEL OF NEUTRAL BUOYANCY *** |
---|
573 | ! *** AND THE HIGHEST LEVEL OF POSITIVE CAPE (INB) *** |
---|
574 | ! |
---|
575 | CAPE=0.0 |
---|
576 | CAPEM=0.0 |
---|
577 | INB=ICB+1 |
---|
578 | INB1=INB |
---|
579 | BYP=0.0 |
---|
580 | DO I=ICB+1,NL-1 |
---|
581 | BY=(TVP(I)-TV(I))*(PHCONV_HPA(I)-PHCONV_HPA(I+1))/PCONV_HPA(I) |
---|
582 | CAPE=CAPE+BY |
---|
583 | IF(BY.GE.0.0)INB1=I+1 |
---|
584 | IF(CAPE.GT.0.0)THEN |
---|
585 | INB=I+1 |
---|
586 | BYP=(TVP(I+1)-TV(I+1))*(PHCONV_HPA(I+1)-PHCONV_HPA(I+2))/ & |
---|
587 | PCONV_HPA(I+1) |
---|
588 | CAPEM=CAPE |
---|
589 | END IF |
---|
590 | END DO |
---|
591 | INB=MAX(INB,INB1) |
---|
592 | CAPE=CAPEM+BYP |
---|
593 | DEFRAC=CAPEM-CAPE |
---|
594 | DEFRAC=MAX(DEFRAC,0.001) |
---|
595 | FRAC=-CAPE/DEFRAC |
---|
596 | FRAC=MIN(FRAC,1.0) |
---|
597 | FRAC=MAX(FRAC,0.0) |
---|
598 | ! |
---|
599 | ! *** CALCULATE LIQUID WATER STATIC ENERGY OF LIFTED PARCEL *** |
---|
600 | ! |
---|
601 | DO I=ICB,INB |
---|
602 | HP(I)=H(NK)+(LV(I)+(CPD-CPV)*TCONV(I))*EP(I)*CLW(I) |
---|
603 | END DO |
---|
604 | ! |
---|
605 | ! *** CALCULATE CLOUD BASE MASS FLUX AND RATES OF MIXING, M(I), *** |
---|
606 | ! *** AT EACH MODEL LEVEL *** |
---|
607 | ! |
---|
608 | DBOSUM=0.0 |
---|
609 | ! |
---|
610 | ! *** INTERPOLATE DIFFERENCE BETWEEN LIFTED PARCEL AND *** |
---|
611 | ! *** ENVIRONMENTAL TEMPERATURES TO LIFTED CONDENSATION LEVEL *** |
---|
612 | ! |
---|
613 | TVPPLCL=TVP(ICB-1)-RD*TVP(ICB-1)*(PCONV_HPA(ICB-1)-PLCL)/ & |
---|
614 | (CPN(ICB-1)*PCONV_HPA(ICB-1)) |
---|
615 | TVAPLCL=TV(ICB)+(TVP(ICB)-TVP(ICB+1))*(PLCL-PCONV_HPA(ICB))/ & |
---|
616 | (PCONV_HPA(ICB)-PCONV_HPA(ICB+1)) |
---|
617 | DTPBL=0.0 |
---|
618 | DO I=NK,ICB-1 |
---|
619 | DTPBL=DTPBL+(TVP(I)-TV(I))*(PHCONV_HPA(I)-PHCONV_HPA(I+1)) |
---|
620 | END DO |
---|
621 | DTPBL=DTPBL/(PHCONV_HPA(NK)-PHCONV_HPA(ICB)) |
---|
622 | DTMIN=TVPPLCL-TVAPLCL+DTMAX+DTPBL |
---|
623 | DTMA=DTMIN |
---|
624 | ! |
---|
625 | ! *** ADJUST CLOUD BASE MASS FLUX *** |
---|
626 | ! |
---|
627 | CBMFOLD=CBMF |
---|
628 | ! *** C. Forster: adjustment of CBMF is not allowed to depend on FLEXPART timestep |
---|
629 | DELT0=DELT/3. |
---|
630 | DAMPS=DAMP*DELT/DELT0 |
---|
631 | CBMF=(1.-DAMPS)*CBMF+0.1*ALPHA*DTMA |
---|
632 | CBMF=MAX(CBMF,0.0) |
---|
633 | ! |
---|
634 | ! *** If cloud base mass flux is zero, skip rest of calculation *** |
---|
635 | ! |
---|
636 | IF(CBMF.EQ.0.0.AND.CBMFOLD.EQ.0.0)THEN |
---|
637 | RETURN |
---|
638 | END IF |
---|
639 | |
---|
640 | ! |
---|
641 | ! *** CALCULATE RATES OF MIXING, M(I) *** |
---|
642 | ! |
---|
643 | M(ICB)=0.0 |
---|
644 | DO I=ICB+1,INB |
---|
645 | K=MIN(I,INB1) |
---|
646 | DBO=ABS(TV(K)-TVP(K))+ & |
---|
647 | ENTP*0.02*(PHCONV_HPA(K)-PHCONV_HPA(K+1)) |
---|
648 | DBOSUM=DBOSUM+DBO |
---|
649 | M(I)=CBMF*DBO |
---|
650 | END DO |
---|
651 | DO I=ICB+1,INB |
---|
652 | M(I)=M(I)/DBOSUM |
---|
653 | END DO |
---|
654 | ! |
---|
655 | ! *** CALCULATE ENTRAINED AIR MASS FLUX (MENT), TOTAL WATER MIXING *** |
---|
656 | ! *** RATIO (QENT), TOTAL CONDENSED WATER (ELIJ), AND MIXING *** |
---|
657 | ! *** FRACTION (SIJ) *** |
---|
658 | ! |
---|
659 | DO I=ICB+1,INB |
---|
660 | QTI=QCONV(NK)-EP(I)*CLW(I) |
---|
661 | DO J=ICB,INB |
---|
662 | BF2=1.+LV(J)*LV(J)*QSCONV(J)/(RV*TCONV(J)*TCONV(J)*CPD) |
---|
663 | ANUM=H(J)-HP(I)+(CPV-CPD)*TCONV(J)*(QTI-QCONV(J)) |
---|
664 | DENOM=H(I)-HP(I)+(CPD-CPV)*(QCONV(I)-QTI)*TCONV(J) |
---|
665 | DEI=DENOM |
---|
666 | IF(ABS(DEI).LT.0.01)DEI=0.01 |
---|
667 | SIJ(I,J)=ANUM/DEI |
---|
668 | SIJ(I,I)=1.0 |
---|
669 | ALTEM=SIJ(I,J)*QCONV(I)+(1.-SIJ(I,J))*QTI-QSCONV(J) |
---|
670 | ALTEM=ALTEM/BF2 |
---|
671 | CWAT=CLW(J)*(1.-EP(J)) |
---|
672 | STEMP=SIJ(I,J) |
---|
673 | IF((STEMP.LT.0.0.OR.STEMP.GT.1.0.OR. & |
---|
674 | ALTEM.GT.CWAT).AND.J.GT.I)THEN |
---|
675 | ANUM=ANUM-LV(J)*(QTI-QSCONV(J)-CWAT*BF2) |
---|
676 | DENOM=DENOM+LV(J)*(QCONV(I)-QTI) |
---|
677 | IF(ABS(DENOM).LT.0.01)DENOM=0.01 |
---|
678 | SIJ(I,J)=ANUM/DENOM |
---|
679 | ALTEM=SIJ(I,J)*QCONV(I)+(1.-SIJ(I,J))*QTI-QSCONV(J) |
---|
680 | ALTEM=ALTEM-(BF2-1.)*CWAT |
---|
681 | END IF |
---|
682 | IF(SIJ(I,J).GT.0.0.AND.SIJ(I,J).LT.0.9)THEN |
---|
683 | QENT(I,J)=SIJ(I,J)*QCONV(I)+(1.-SIJ(I,J))*QTI |
---|
684 | ELIJ(I,J)=ALTEM |
---|
685 | ELIJ(I,J)=MAX(0.0,ELIJ(I,J)) |
---|
686 | MENT(I,J)=M(I)/(1.-SIJ(I,J)) |
---|
687 | NENT(I)=NENT(I)+1 |
---|
688 | END IF |
---|
689 | SIJ(I,J)=MAX(0.0,SIJ(I,J)) |
---|
690 | SIJ(I,J)=MIN(1.0,SIJ(I,J)) |
---|
691 | END DO |
---|
692 | ! |
---|
693 | ! *** IF NO AIR CAN ENTRAIN AT LEVEL I ASSUME THAT UPDRAFT DETRAINS *** |
---|
694 | ! *** AT THAT LEVEL AND CALCULATE DETRAINED AIR FLUX AND PROPERTIES *** |
---|
695 | ! |
---|
696 | IF(NENT(I).EQ.0)THEN |
---|
697 | MENT(I,I)=M(I) |
---|
698 | QENT(I,I)=QCONV(NK)-EP(I)*CLW(I) |
---|
699 | ELIJ(I,I)=CLW(I) |
---|
700 | SIJ(I,I)=1.0 |
---|
701 | END IF |
---|
702 | END DO |
---|
703 | SIJ(INB,INB)=1.0 |
---|
704 | ! |
---|
705 | ! *** NORMALIZE ENTRAINED AIR MASS FLUXES TO REPRESENT EQUAL *** |
---|
706 | ! *** PROBABILITIES OF MIXING *** |
---|
707 | ! |
---|
708 | DO I=ICB+1,INB |
---|
709 | IF(NENT(I).NE.0)THEN |
---|
710 | QP1=QCONV(NK)-EP(I)*CLW(I) |
---|
711 | ANUM=H(I)-HP(I)-LV(I)*(QP1-QSCONV(I)) |
---|
712 | DENOM=H(I)-HP(I)+LV(I)*(QCONV(I)-QP1) |
---|
713 | IF(ABS(DENOM).LT.0.01)DENOM=0.01 |
---|
714 | SCRIT=ANUM/DENOM |
---|
715 | ALT=QP1-QSCONV(I)+SCRIT*(QCONV(I)-QP1) |
---|
716 | IF(ALT.LT.0.0)SCRIT=1.0 |
---|
717 | SCRIT=MAX(SCRIT,0.0) |
---|
718 | ASIJ=0.0 |
---|
719 | SMIN=1.0 |
---|
720 | DO J=ICB,INB |
---|
721 | IF(SIJ(I,J).GT.0.0.AND.SIJ(I,J).LT.0.9)THEN |
---|
722 | IF(J.GT.I)THEN |
---|
723 | SMID=MIN(SIJ(I,J),SCRIT) |
---|
724 | SJMAX=SMID |
---|
725 | SJMIN=SMID |
---|
726 | IF(SMID.LT.SMIN.AND.SIJ(I,J+1).LT.SMID)THEN |
---|
727 | SMIN=SMID |
---|
728 | SJMAX=MIN(SIJ(I,J+1),SIJ(I,J),SCRIT) |
---|
729 | SJMIN=MAX(SIJ(I,J-1),SIJ(I,J)) |
---|
730 | SJMIN=MIN(SJMIN,SCRIT) |
---|
731 | END IF |
---|
732 | ELSE |
---|
733 | SJMAX=MAX(SIJ(I,J+1),SCRIT) |
---|
734 | SMID=MAX(SIJ(I,J),SCRIT) |
---|
735 | SJMIN=0.0 |
---|
736 | IF(J.GT.1)SJMIN=SIJ(I,J-1) |
---|
737 | SJMIN=MAX(SJMIN,SCRIT) |
---|
738 | END IF |
---|
739 | DELP=ABS(SJMAX-SMID) |
---|
740 | DELM=ABS(SJMIN-SMID) |
---|
741 | ASIJ=ASIJ+(DELP+DELM)*(PHCONV_HPA(J)-PHCONV_HPA(J+1)) |
---|
742 | MENT(I,J)=MENT(I,J)*(DELP+DELM)* & |
---|
743 | (PHCONV_HPA(J)-PHCONV_HPA(J+1)) |
---|
744 | END IF |
---|
745 | END DO |
---|
746 | ASIJ=MAX(1.0E-21,ASIJ) |
---|
747 | ASIJ=1.0/ASIJ |
---|
748 | DO J=ICB,INB |
---|
749 | MENT(I,J)=MENT(I,J)*ASIJ |
---|
750 | END DO |
---|
751 | BSUM=0.0 |
---|
752 | DO J=ICB,INB |
---|
753 | BSUM=BSUM+MENT(I,J) |
---|
754 | END DO |
---|
755 | IF(BSUM.LT.1.0E-18)THEN |
---|
756 | NENT(I)=0 |
---|
757 | MENT(I,I)=M(I) |
---|
758 | QENT(I,I)=QCONV(NK)-EP(I)*CLW(I) |
---|
759 | ELIJ(I,I)=CLW(I) |
---|
760 | SIJ(I,I)=1.0 |
---|
761 | END IF |
---|
762 | END IF |
---|
763 | END DO |
---|
764 | ! |
---|
765 | ! *** CHECK WHETHER EP(INB)=0, IF SO, SKIP PRECIPITATING *** |
---|
766 | ! *** DOWNDRAFT CALCULATION *** |
---|
767 | ! |
---|
768 | IF(EP(INB).LT.0.0001)GOTO 405 |
---|
769 | ! |
---|
770 | ! *** INTEGRATE LIQUID WATER EQUATION TO FIND CONDENSED WATER *** |
---|
771 | ! *** AND CONDENSED WATER FLUX *** |
---|
772 | ! |
---|
773 | JTT=2 |
---|
774 | ! |
---|
775 | ! *** BEGIN DOWNDRAFT LOOP *** |
---|
776 | ! |
---|
777 | DO I=INB,1,-1 |
---|
778 | ! |
---|
779 | ! *** CALCULATE DETRAINED PRECIPITATION *** |
---|
780 | ! |
---|
781 | WDTRAIN=G*EP(I)*M(I)*CLW(I) |
---|
782 | IF(I.GT.1)THEN |
---|
783 | DO J=1,I-1 |
---|
784 | AWAT=ELIJ(J,I)-(1.-EP(I))*CLW(I) |
---|
785 | AWAT=MAX(0.0,AWAT) |
---|
786 | WDTRAIN=WDTRAIN+G*AWAT*MENT(J,I) |
---|
787 | END DO |
---|
788 | END IF |
---|
789 | ! |
---|
790 | ! *** FIND RAIN WATER AND EVAPORATION USING PROVISIONAL *** |
---|
791 | ! *** ESTIMATES OF QP(I)AND QP(I-1) *** |
---|
792 | ! |
---|
793 | ! |
---|
794 | ! *** Value of terminal velocity and coefficient of evaporation for snow *** |
---|
795 | ! |
---|
796 | COEFF=COEFFS |
---|
797 | WT(I)=OMTSNOW |
---|
798 | ! |
---|
799 | ! *** Value of terminal velocity and coefficient of evaporation for rain *** |
---|
800 | ! |
---|
801 | IF(TCONV(I).GT.273.0)THEN |
---|
802 | COEFF=COEFFR |
---|
803 | WT(I)=OMTRAIN |
---|
804 | END IF |
---|
805 | QSM=0.5*(QCONV(I)+QP(I+1)) |
---|
806 | AFAC=COEFF*PHCONV_HPA(I)*(QSCONV(I)-QSM)/ & |
---|
807 | (1.0E4+2.0E3*PHCONV_HPA(I)*QSCONV(I)) |
---|
808 | AFAC=MAX(AFAC,0.0) |
---|
809 | SIGT=SIGP(I) |
---|
810 | SIGT=MAX(0.0,SIGT) |
---|
811 | SIGT=MIN(1.0,SIGT) |
---|
812 | B6=100.*(PHCONV_HPA(I)-PHCONV_HPA(I+1))*SIGT*AFAC/WT(I) |
---|
813 | C6=(WATER(I+1)*WT(I+1)+WDTRAIN/SIGD)/WT(I) |
---|
814 | REVAP=0.5*(-B6+SQRT(B6*B6+4.*C6)) |
---|
815 | EVAP(I)=SIGT*AFAC*REVAP |
---|
816 | WATER(I)=REVAP*REVAP |
---|
817 | ! |
---|
818 | ! *** CALCULATE PRECIPITATING DOWNDRAFT MASS FLUX UNDER *** |
---|
819 | ! *** HYDROSTATIC APPROXIMATION *** |
---|
820 | ! |
---|
821 | IF(I.EQ.1)GOTO 360 |
---|
822 | DHDP=(H(I)-H(I-1))/(PCONV_HPA(I-1)-PCONV_HPA(I)) |
---|
823 | DHDP=MAX(DHDP,10.0) |
---|
824 | MP(I)=100.*GINV*LV(I)*SIGD*EVAP(I)/DHDP |
---|
825 | MP(I)=MAX(MP(I),0.0) |
---|
826 | ! |
---|
827 | ! *** ADD SMALL AMOUNT OF INERTIA TO DOWNDRAFT *** |
---|
828 | ! |
---|
829 | FAC=20.0/(PHCONV_HPA(I-1)-PHCONV_HPA(I)) |
---|
830 | MP(I)=(FAC*MP(I+1)+MP(I))/(1.+FAC) |
---|
831 | ! |
---|
832 | ! *** FORCE MP TO DECREASE LINEARLY TO ZERO *** |
---|
833 | ! *** BETWEEN ABOUT 950 MB AND THE SURFACE *** |
---|
834 | ! |
---|
835 | IF(PCONV_HPA(I).GT.(0.949*PCONV_HPA(1)))THEN |
---|
836 | JTT=MAX(JTT,I) |
---|
837 | MP(I)=MP(JTT)*(PCONV_HPA(1)-PCONV_HPA(I))/(PCONV_HPA(1)- & |
---|
838 | PCONV_HPA(JTT)) |
---|
839 | END IF |
---|
840 | 360 CONTINUE |
---|
841 | ! |
---|
842 | ! *** FIND MIXING RATIO OF PRECIPITATING DOWNDRAFT *** |
---|
843 | ! |
---|
844 | IF(I.EQ.INB)GOTO 400 |
---|
845 | IF(I.EQ.1)THEN |
---|
846 | QSTM=QSCONV(1) |
---|
847 | ELSE |
---|
848 | QSTM=QSCONV(I-1) |
---|
849 | END IF |
---|
850 | IF(MP(I).GT.MP(I+1))THEN |
---|
851 | RAT=MP(I+1)/MP(I) |
---|
852 | QP(I)=QP(I+1)*RAT+QCONV(I)*(1.0-RAT)+100.*GINV* & |
---|
853 | SIGD*(PHCONV_HPA(I)-PHCONV_HPA(I+1))*(EVAP(I)/MP(I)) |
---|
854 | ELSE |
---|
855 | IF(MP(I+1).GT.0.0)THEN |
---|
856 | QP(I)=(GZ(I+1)-GZ(I)+QP(I+1)*(LV(I+1)+TCONV(I+1)*(CL-CPD))+ & |
---|
857 | CPD*(TCONV(I+1)-TCONV(I)))/(LV(I)+TCONV(I)*(CL-CPD)) |
---|
858 | END IF |
---|
859 | END IF |
---|
860 | QP(I)=MIN(QP(I),QSTM) |
---|
861 | QP(I)=MAX(QP(I),0.0) |
---|
862 | 400 CONTINUE |
---|
863 | END DO |
---|
864 | ! |
---|
865 | ! *** CALCULATE SURFACE PRECIPITATION IN MM/DAY *** |
---|
866 | ! |
---|
867 | PRECIP=PRECIP+WT(1)*SIGD*WATER(1)*3600.*24000./(ROWL*G) |
---|
868 | ! |
---|
869 | 405 CONTINUE |
---|
870 | ! |
---|
871 | ! *** CALCULATE DOWNDRAFT VELOCITY SCALE AND SURFACE TEMPERATURE AND *** |
---|
872 | ! *** WATER VAPOR FLUCTUATIONS *** |
---|
873 | ! |
---|
874 | WD=BETA*ABS(MP(ICB))*0.01*RD*TCONV(ICB)/(SIGD*PCONV_HPA(ICB)) |
---|
875 | QPRIME=0.5*(QP(1)-QCONV(1)) |
---|
876 | TPRIME=LV0*QPRIME/CPD |
---|
877 | ! |
---|
878 | ! *** CALCULATE TENDENCIES OF LOWEST LEVEL POTENTIAL TEMPERATURE *** |
---|
879 | ! *** AND MIXING RATIO *** |
---|
880 | ! |
---|
881 | DPINV=0.01/(PHCONV_HPA(1)-PHCONV_HPA(2)) |
---|
882 | AM=0.0 |
---|
883 | IF(NK.EQ.1)THEN |
---|
884 | DO K=2,INB |
---|
885 | AM=AM+M(K) |
---|
886 | END DO |
---|
887 | END IF |
---|
888 | ! save saturated upward mass flux for first level |
---|
889 | FUP(1)=AM |
---|
890 | IF((2.*G*DPINV*AM).GE.DELTI)IFLAG=4 |
---|
891 | FT(1)=FT(1)+G*DPINV*AM*(TCONV(2)-TCONV(1)+(GZ(2)-GZ(1))/CPN(1)) |
---|
892 | FT(1)=FT(1)-LVCP(1)*SIGD*EVAP(1) |
---|
893 | FT(1)=FT(1)+SIGD*WT(2)*(CL-CPD)*WATER(2)*(TCONV(2)- & |
---|
894 | TCONV(1))*DPINV/CPN(1) |
---|
895 | FQ(1)=FQ(1)+G*MP(2)*(QP(2)-QCONV(1))* & |
---|
896 | DPINV+SIGD*EVAP(1) |
---|
897 | FQ(1)=FQ(1)+G*AM*(QCONV(2)-QCONV(1))*DPINV |
---|
898 | DO J=2,INB |
---|
899 | FQ(1)=FQ(1)+G*DPINV*MENT(J,1)*(QENT(J,1)-QCONV(1)) |
---|
900 | END DO |
---|
901 | ! |
---|
902 | ! *** CALCULATE TENDENCIES OF POTENTIAL TEMPERATURE AND MIXING RATIO *** |
---|
903 | ! *** AT LEVELS ABOVE THE LOWEST LEVEL *** |
---|
904 | ! |
---|
905 | ! *** FIRST FIND THE NET SATURATED UPDRAFT AND DOWNDRAFT MASS FLUXES *** |
---|
906 | ! *** THROUGH EACH LEVEL *** |
---|
907 | ! |
---|
908 | DO I=2,INB |
---|
909 | DPINV=0.01/(PHCONV_HPA(I)-PHCONV_HPA(I+1)) |
---|
910 | CPINV=1.0/CPN(I) |
---|
911 | AMP1=0.0 |
---|
912 | AD=0.0 |
---|
913 | IF(I.GE.NK)THEN |
---|
914 | DO K=I+1,INB+1 |
---|
915 | AMP1=AMP1+M(K) |
---|
916 | END DO |
---|
917 | END IF |
---|
918 | DO K=1,I |
---|
919 | DO J=I+1,INB+1 |
---|
920 | AMP1=AMP1+MENT(K,J) |
---|
921 | END DO |
---|
922 | END DO |
---|
923 | ! save saturated upward mass flux |
---|
924 | FUP(I)=AMP1 |
---|
925 | IF((2.*G*DPINV*AMP1).GE.DELTI)IFLAG=4 |
---|
926 | DO K=1,I-1 |
---|
927 | DO J=I,INB |
---|
928 | AD=AD+MENT(J,K) |
---|
929 | END DO |
---|
930 | END DO |
---|
931 | ! save saturated downward mass flux |
---|
932 | FDOWN(I)=AD |
---|
933 | FT(I)=FT(I)+G*DPINV*(AMP1*(TCONV(I+1)-TCONV(I)+(GZ(I+1)-GZ(I))* & |
---|
934 | CPINV)-AD*(TCONV(I)-TCONV(I-1)+(GZ(I)-GZ(I-1))*CPINV)) & |
---|
935 | -SIGD*LVCP(I)*EVAP(I) |
---|
936 | FT(I)=FT(I)+G*DPINV*MENT(I,I)*(HP(I)-H(I)+ & |
---|
937 | TCONV(I)*(CPV-CPD)*(QCONV(I)-QENT(I,I)))*CPINV |
---|
938 | FT(I)=FT(I)+SIGD*WT(I+1)*(CL-CPD)*WATER(I+1)* & |
---|
939 | (TCONV(I+1)-TCONV(I))*DPINV*CPINV |
---|
940 | FQ(I)=FQ(I)+G*DPINV*(AMP1*(QCONV(I+1)-QCONV(I))- & |
---|
941 | AD*(QCONV(I)-QCONV(I-1))) |
---|
942 | DO K=1,I-1 |
---|
943 | AWAT=ELIJ(K,I)-(1.-EP(I))*CLW(I) |
---|
944 | AWAT=MAX(AWAT,0.0) |
---|
945 | FQ(I)=FQ(I)+G*DPINV*MENT(K,I)*(QENT(K,I)-AWAT-QCONV(I)) |
---|
946 | END DO |
---|
947 | DO K=I,INB |
---|
948 | FQ(I)=FQ(I)+G*DPINV*MENT(K,I)*(QENT(K,I)-QCONV(I)) |
---|
949 | END DO |
---|
950 | FQ(I)=FQ(I)+SIGD*EVAP(I)+G*(MP(I+1)* & |
---|
951 | (QP(I+1)-QCONV(I))-MP(I)*(QP(I)-QCONV(I-1)))*DPINV |
---|
952 | END DO |
---|
953 | ! |
---|
954 | ! *** Adjust tendencies at top of convection layer to reflect *** |
---|
955 | ! *** actual position of the level zero CAPE *** |
---|
956 | ! |
---|
957 | FQOLD=FQ(INB) |
---|
958 | FQ(INB)=FQ(INB)*(1.-FRAC) |
---|
959 | FQ(INB-1)=FQ(INB-1)+FRAC*FQOLD*((PHCONV_HPA(INB)- & |
---|
960 | PHCONV_HPA(INB+1))/ & |
---|
961 | (PHCONV_HPA(INB-1)-PHCONV_HPA(INB)))*LV(INB)/LV(INB-1) |
---|
962 | FTOLD=FT(INB) |
---|
963 | FT(INB)=FT(INB)*(1.-FRAC) |
---|
964 | FT(INB-1)=FT(INB-1)+FRAC*FTOLD*((PHCONV_HPA(INB)- & |
---|
965 | PHCONV_HPA(INB+1))/ & |
---|
966 | (PHCONV_HPA(INB-1)-PHCONV_HPA(INB)))*CPN(INB)/CPN(INB-1) |
---|
967 | ! |
---|
968 | ! *** Very slightly adjust tendencies to force exact *** |
---|
969 | ! *** enthalpy, momentum and tracer conservation *** |
---|
970 | ! |
---|
971 | ENTS=0.0 |
---|
972 | DO I=1,INB |
---|
973 | ENTS=ENTS+(CPN(I)*FT(I)+LV(I)*FQ(I))* & |
---|
974 | (PHCONV_HPA(I)-PHCONV_HPA(I+1)) |
---|
975 | END DO |
---|
976 | ENTS=ENTS/(PHCONV_HPA(1)-PHCONV_HPA(INB+1)) |
---|
977 | DO I=1,INB |
---|
978 | FT(I)=FT(I)-ENTS/CPN(I) |
---|
979 | END DO |
---|
980 | |
---|
981 | ! ************************************************ |
---|
982 | ! **** DETERMINE MASS DISPLACEMENT MATRIX |
---|
983 | ! ***** AND COMPENSATING SUBSIDENCE |
---|
984 | ! ************************************************ |
---|
985 | |
---|
986 | ! mass displacement matrix due to saturated up-and downdrafts |
---|
987 | ! inside the cloud and determine compensating subsidence |
---|
988 | ! FUP(I) (saturated updrafts), FDOWN(I) (saturated downdrafts) are assumed to be |
---|
989 | ! balanced by compensating subsidence (SUB(I)) |
---|
990 | ! FDOWN(I) and SUB(I) defined positive downwards |
---|
991 | |
---|
992 | ! NCONVTOP IS THE TOP LEVEL AT WHICH CONVECTIVE MASS FLUXES ARE DIAGNOSED |
---|
993 | ! EPSILON IS A SMALL NUMBER |
---|
994 | |
---|
995 | SUB(1)=0. |
---|
996 | NCONVTOP=1 |
---|
997 | do i=1,INB+1 |
---|
998 | do j=1,INB+1 |
---|
999 | if (j.eq.NK) then |
---|
1000 | FMASS(j,i)=FMASS(j,i)+M(i) |
---|
1001 | endif |
---|
1002 | FMASS(j,i)=FMASS(j,i)+MENT(j,i) |
---|
1003 | IF (FMASS(J,I).GT.EPSILON) NCONVTOP=MAX(NCONVTOP,I,J) |
---|
1004 | end do |
---|
1005 | if (i.gt.1) then |
---|
1006 | SUB(i)=FUP(i-1)-FDOWN(i) |
---|
1007 | endif |
---|
1008 | end do |
---|
1009 | NCONVTOP=NCONVTOP+1 |
---|
1010 | |
---|
1011 | RETURN |
---|
1012 | ! |
---|
1013 | END SUBROUTINE CONVECT |
---|
1014 | ! |
---|
1015 | ! --------------------------------------------------------------------------- |
---|
1016 | ! |
---|
1017 | SUBROUTINE TLIFT(GZ,ICB,NK,TVP,TPK,CLW,ND,NL,KK) |
---|
1018 | ! |
---|
1019 | !-cv |
---|
1020 | use conv_mod, only: tconv, qconv, qsconv, pconv_hpa |
---|
1021 | |
---|
1022 | implicit none |
---|
1023 | !-cv |
---|
1024 | !====>Begin Module TLIFT File convect.f Undeclared variables |
---|
1025 | ! |
---|
1026 | !Argument variables |
---|
1027 | ! |
---|
1028 | integer :: icb, kk, nd, nk, nl |
---|
1029 | ! |
---|
1030 | !Local variables |
---|
1031 | ! |
---|
1032 | integer :: i, j, nsb, nst |
---|
1033 | ! |
---|
1034 | real :: ah0, ahg, alv, cpinv, cpp, denom |
---|
1035 | real :: es, qg, rg, s, tc, tg |
---|
1036 | ! |
---|
1037 | !====>End Module TLIFT File convect.f |
---|
1038 | |
---|
1039 | REAL :: GZ(ND),TPK(ND),CLW(ND) |
---|
1040 | REAL :: TVP(ND) |
---|
1041 | ! |
---|
1042 | ! *** ASSIGN VALUES OF THERMODYNAMIC CONSTANTS *** |
---|
1043 | ! |
---|
1044 | REAL,PARAMETER :: CPD=1005.7 |
---|
1045 | REAL,PARAMETER :: CPV=1870.0 |
---|
1046 | REAL,PARAMETER :: CL=2500.0 |
---|
1047 | REAL,PARAMETER :: RV=461.5 |
---|
1048 | REAL,PARAMETER :: RD=287.04 |
---|
1049 | REAL,PARAMETER :: LV0=2.501E6 |
---|
1050 | ! |
---|
1051 | REAL,PARAMETER :: CPVMCL=CL-CPV |
---|
1052 | REAL,PARAMETER :: EPS0=RD/RV |
---|
1053 | REAL,PARAMETER :: EPSI=1./EPS0 |
---|
1054 | ! |
---|
1055 | ! *** CALCULATE CERTAIN PARCEL QUANTITIES, INCLUDING STATIC ENERGY *** |
---|
1056 | ! |
---|
1057 | AH0=(CPD*(1.-QCONV(NK))+CL*QCONV(NK))*TCONV(NK)+QCONV(NK)* & |
---|
1058 | (LV0-CPVMCL*( & |
---|
1059 | TCONV(NK)-273.15))+GZ(NK) |
---|
1060 | CPP=CPD*(1.-QCONV(NK))+QCONV(NK)*CPV |
---|
1061 | CPINV=1./CPP |
---|
1062 | ! |
---|
1063 | IF(KK.EQ.1)THEN |
---|
1064 | ! |
---|
1065 | ! *** CALCULATE LIFTED PARCEL QUANTITIES BELOW CLOUD BASE *** |
---|
1066 | ! |
---|
1067 | DO I=1,ICB-1 |
---|
1068 | CLW(I)=0.0 |
---|
1069 | END DO |
---|
1070 | DO I=NK,ICB-1 |
---|
1071 | TPK(I)=TCONV(NK)-(GZ(I)-GZ(NK))*CPINV |
---|
1072 | TVP(I)=TPK(I)*(1.+QCONV(NK)*EPSI) |
---|
1073 | END DO |
---|
1074 | END IF |
---|
1075 | ! |
---|
1076 | ! *** FIND LIFTED PARCEL QUANTITIES ABOVE CLOUD BASE *** |
---|
1077 | ! |
---|
1078 | NST=ICB |
---|
1079 | NSB=ICB |
---|
1080 | IF(KK.EQ.2)THEN |
---|
1081 | NST=NL |
---|
1082 | NSB=ICB+1 |
---|
1083 | END IF |
---|
1084 | DO I=NSB,NST |
---|
1085 | TG=TCONV(I) |
---|
1086 | QG=QSCONV(I) |
---|
1087 | ALV=LV0-CPVMCL*(TCONV(I)-273.15) |
---|
1088 | DO J=1,2 |
---|
1089 | S=CPD+ALV*ALV*QG/(RV*TCONV(I)*TCONV(I)) |
---|
1090 | S=1./S |
---|
1091 | AHG=CPD*TG+(CL-CPD)*QCONV(NK)*TCONV(I)+ALV*QG+GZ(I) |
---|
1092 | TG=TG+S*(AH0-AHG) |
---|
1093 | TG=MAX(TG,35.0) |
---|
1094 | TC=TG-273.15 |
---|
1095 | DENOM=243.5+TC |
---|
1096 | IF(TC.GE.0.0)THEN |
---|
1097 | ES=6.112*EXP(17.67*TC/DENOM) |
---|
1098 | ELSE |
---|
1099 | ES=EXP(23.33086-6111.72784/TG+0.15215*LOG(TG)) |
---|
1100 | END IF |
---|
1101 | QG=EPS0*ES/(PCONV_HPA(I)-ES*(1.-EPS0)) |
---|
1102 | END DO |
---|
1103 | ALV=LV0-CPVMCL*(TCONV(I)-273.15) |
---|
1104 | TPK(I)=(AH0-(CL-CPD)*QCONV(NK)*TCONV(I)-GZ(I)-ALV*QG)/CPD |
---|
1105 | CLW(I)=QCONV(NK)-QG |
---|
1106 | CLW(I)=MAX(0.0,CLW(I)) |
---|
1107 | RG=QG/(1.-QCONV(NK)) |
---|
1108 | TVP(I)=TPK(I)*(1.+RG*EPSI) |
---|
1109 | END DO |
---|
1110 | RETURN |
---|
1111 | END SUBROUTINE TLIFT |
---|