CTBTO FLEXPART WO4 (2015-10-15)
 All Classes Files Functions Variables
convect43c.f90
Go to the documentation of this file.
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
174  use conv_mod
175 
176  implicit none
177  !
178  !-cv====>Begin Module CONVECT File convect.f Undeclared variables
179  !
180  !Argument variables
181  !
182  integer :: iflag, nd, nl
183  !
184  real :: cbmf, delt, precip, qprime, tprime, wd
185  !
186  !Local variables
187  !
188  integer :: i, icb, ihmin, inb, inb1, j, jtt, k
189  integer :: nk
190  !
191  real :: ad, afac, ahmax, ahmin, alt, altem
192  real :: am, amp1, anum, asij, awat, b6, bf2, bsum, by
193  real :: byp, c6, cape, capem, cbmfold, chi, coeff
194  real :: cpinv, cwat, damps, dbo, dbosum
195  real :: defrac, dei, delm, delp, delt0, delti, denom, dhdp
196  real :: dpinv, dtma, dtmin, dtpbl, elacrit, ents
197  real :: epmax, fac, fqold, frac, ftold
198  real :: plcl, qp1, qsm, qstm, qti, rat
199  real :: rdcp, revap, rh, scrit, sigt, sjmax
200  real :: sjmin, smid, smin, stemp, tca
201  real :: tvaplcl, tvpplcl, tvx, tvy, wdtrain
202 
203  !integer jc,jn
204  !real alvnew,a2,ahm,alv,rm,sum,qnew,dphinv,tc,thbar,tnew,x
205 
206  real :: fup(na),fdown(na)
207  !
208  !-cv====>End Module CONVECT File convect.f
209 
210  INTEGER :: nent(na)
211  REAL :: m(na),mp(na),ment(na,na),qent(na,na),elij(na,na)
212  REAL :: sij(na,na),tvp(na),tv(na),water(na)
213  REAL :: qp(na),ep(na),th(na),wt(na),evap(na),clw(na)
214  REAL :: sigp(na),tp(na),cpn(na)
215  REAL :: lv(na),lvcp(na),h(na),hp(na),gz(na),hm(na)
216  !REAL TOLD(NA)
217  !
218  ! -----------------------------------------------------------------------
219  !
220  ! *** Specify Switches ***
221  !
222  ! *** IPBL: Set to zero to bypass dry adiabatic adjustment ***
223  ! *** Any other value results in dry adiabatic adjustment ***
224  ! *** (Zero value recommended for use in models with ***
225  ! *** boundary layer schemes) ***
226  !
227  ! *** MINORIG: Lowest level from which convection may originate ***
228  ! *** (Should be first model level at which T is defined ***
229  ! *** for models using bulk PBL schemes; otherwise, it should ***
230  ! *** be the first model level at which T is defined above ***
231  ! *** the surface layer) ***
232  !
233  INTEGER,PARAMETER :: ipbl=0
234  INTEGER,PARAMETER :: minorig=1
235  !
236  !------------------------------------------------------------------------------
237  !
238  ! *** SPECIFY PARAMETERS ***
239  !
240  ! *** ELCRIT IS THE AUTOCONVERSION THERSHOLD WATER CONTENT (gm/gm) ***
241  ! *** TLCRIT IS CRITICAL TEMPERATURE BELOW WHICH THE AUTO- ***
242  ! *** CONVERSION THRESHOLD IS ASSUMED TO BE ZERO ***
243  ! *** (THE AUTOCONVERSION THRESHOLD VARIES LINEARLY ***
244  ! *** BETWEEN 0 C AND TLCRIT) ***
245  ! *** ENTP IS THE COEFFICIENT OF MIXING IN THE ENTRAINMENT ***
246  ! *** FORMULATION ***
247  ! *** SIGD IS THE FRACTIONAL AREA COVERED BY UNSATURATED DNDRAFT ***
248  ! *** SIGS IS THE FRACTION OF PRECIPITATION FALLING OUTSIDE ***
249  ! *** OF CLOUD ***
250  ! *** OMTRAIN IS THE ASSUMED FALL SPEED (P/s) OF RAIN ***
251  ! *** OMTSNOW IS THE ASSUMED FALL SPEED (P/s) OF SNOW ***
252  ! *** COEFFR IS A COEFFICIENT GOVERNING THE RATE OF EVAPORATION ***
253  ! *** OF RAIN ***
254  ! *** COEFFS IS A COEFFICIENT GOVERNING THE RATE OF EVAPORATION ***
255  ! *** OF SNOW ***
256  ! *** CU IS THE COEFFICIENT GOVERNING CONVECTIVE MOMENTUM ***
257  ! *** TRANSPORT ***
258  ! *** DTMAX IS THE MAXIMUM NEGATIVE TEMPERATURE PERTURBATION ***
259  ! *** A LIFTED PARCEL IS ALLOWED TO HAVE BELOW ITS LFC ***
260  ! *** ALPHA AND DAMP ARE PARAMETERS THAT CONTROL THE RATE OF ***
261  ! *** APPROACH TO QUASI-EQUILIBRIUM ***
262  ! *** (THEIR STANDARD VALUES ARE 0.20 AND 0.1, RESPECTIVELY) ***
263  ! *** (DAMP MUST BE LESS THAN 1) ***
264  !
265  REAL,PARAMETER :: elcrit=.0011
266  REAL,PARAMETER :: tlcrit=-55.0
267  REAL,PARAMETER :: entp=1.5
268  REAL,PARAMETER :: sigd=0.05
269  REAL,PARAMETER :: sigs=0.12
270  REAL,PARAMETER :: omtrain=50.0
271  REAL,PARAMETER :: omtsnow=5.5
272  REAL,PARAMETER :: coeffr=1.0
273  REAL,PARAMETER :: coeffs=0.8
274  REAL,PARAMETER :: cu=0.7
275  REAL,PARAMETER :: beta=10.0
276  REAL,PARAMETER :: dtmax=0.9
277  REAL,PARAMETER :: alpha=0.025 !original 0.2
278  REAL,PARAMETER :: damp=0.1
279  !
280  ! *** ASSIGN VALUES OF THERMODYNAMIC CONSTANTS, ***
281  ! *** GRAVITY, AND LIQUID WATER DENSITY. ***
282  ! *** THESE SHOULD BE CONSISTENT WITH ***
283  ! *** THOSE USED IN CALLING PROGRAM ***
284  ! *** NOTE: THESE ARE ALSO SPECIFIED IN SUBROUTINE TLIFT ***
285  !
286  REAL,PARAMETER :: cpd=1005.7
287  REAL,PARAMETER :: cpv=1870.0
288  REAL,PARAMETER :: cl=2500.0
289  REAL,PARAMETER :: rv=461.5
290  REAL,PARAMETER :: rd=287.04
291  REAL,PARAMETER :: lv0=2.501e6
292  REAL,PARAMETER :: g=9.81
293  REAL,PARAMETER :: rowl=1000.0
294  !
295  REAL,PARAMETER :: cpvmcl=cl-cpv
296  REAL,PARAMETER :: eps0=rd/rv
297  REAL,PARAMETER :: epsi=1./eps0
298  REAL,PARAMETER :: ginv=1.0/g
299  REAL,PARAMETER :: epsilon=1.e-20
300 
301  ! EPSILON IS A SMALL NUMBER USED TO EXCLUDE MASS FLUXES OF ZERO
302  !
303  delti=1.0/delt
304  !
305  ! *** INITIALIZE OUTPUT ARRAYS AND PARAMETERS ***
306  !
307 
308  DO i=1,nl+1
309  ft(i)=0.0
310  fq(i)=0.0
311  fdown(i)=0.0
312  sub(i)=0.0
313  fup(i)=0.0
314  m(i)=0.0
315  mp(i)=0.0
316  DO j=1,nl+1
317  fmass(i,j)=0.0
318  ment(i,j)=0.0
319  END DO
320  END DO
321  DO i=1,nl+1
322  rdcp=(rd*(1.-qconv(i))+qconv(i)*rv)/ &
323  (cpd*(1.-qconv(i))+qconv(i)*cpv)
324  th(i)=tconv(i)*(1000.0/pconv_hpa(i))**rdcp
325  END DO
326  precip=0.0
327  wd=0.0
328  tprime=0.0
329  qprime=0.0
330  iflag=0
331  !
332  ! IF(IPBL.NE.0)THEN
333  !
334  !*** PERFORM DRY ADIABATIC ADJUSTMENT ***
335  !
336  ! JC=0
337  ! DO 30 I=NL-1,1,-1
338  ! JN=0
339  ! SUM=TH(I)*(1.+QCONV(I)*EPSI-QCONV(I))
340  ! DO 10 J=I+1,NL
341  ! SUM=SUM+TH(J)*(1.+QCONV(J)*EPSI-QCONV(J))
342  ! THBAR=SUM/REAL(J+1-I)
343  ! IF((TH(J)*(1.+QCONV(J)*EPSI-QCONV(J))).LT.THBAR)JN=J
344  ! 10 CONTINUE
345  ! IF(I.EQ.1)JN=MAX(JN,2)
346  ! IF(JN.EQ.0)GOTO 30
347  ! 12 CONTINUE
348  ! AHM=0.0
349  ! RM=0.0
350  ! DO 15 J=I,JN
351  ! AHM=AHM+(CPD*(1.-QCONV(J))+QCONV(J)*CPV)*TCONV(J)*
352  ! + (PHCONV_HPA(J)-PHCONV_HPA(J+1))
353  ! RM=RM+QCONV(J)*(PHCONV_HPA(J)-PHCONV_HPA(J+1))
354  ! 15 CONTINUE
355  ! DPHINV=1./(PHCONV_HPA(I)-PHCONV_HPA(JN+1))
356  ! RM=RM*DPHINV
357  ! A2=0.0
358  ! DO 20 J=I,JN
359  ! QCONV(J)=RM
360  ! RDCP=(RD*(1.-QCONV(J))+QCONV(J)*RV)/
361  ! 1 (CPD*(1.-QCONV(J))+QCONV(J)*CPV)
362  ! X=(0.001*PCONV_HPA(J))**RDCP
363  ! TOLD(J)=TCONV(J)
364  ! TCONV(J)=X
365  ! A2=A2+(CPD*(1.-QCONV(J))+QCONV(J)*CPV)*X*
366  ! 1 (PHCONV_HPA(J)-PHCONV_HPA(J+1))
367  ! 20 CONTINUE
368  ! DO 25 J=I,JN
369  ! TH(J)=AHM/A2
370  ! TCONV(J)=TCONV(J)*TH(J)
371  ! TC=TOLD(J)-273.15
372  ! ALV=LV0-CPVMCL*TC
373  ! QSCONV(J)=QSCONV(J)+QSCONV(J)*(1.+QSCONV(J)*(EPSI-1.))*ALV*
374  ! 1 (TCONV(J)- TOLD(J))/(RV*TOLD(J)*TOLD(J))
375  ! if (qslev(j) .lt. 0.) then
376  ! write(*,*) 'qslev.lt.0 ',j,qslev
377  ! endif
378  ! 25 CONTINUE
379  ! IF((TH(JN+1)*(1.+QCONV(JN+1)*EPSI-QCONV(JN+1))).LT.
380  ! 1 (TH(JN)*(1.+QCONV(JN)*EPSI-QCONV(JN))))THEN
381  ! JN=JN+1
382  ! GOTO 12
383  ! END IF
384  ! IF(I.EQ.1)JC=JN
385  ! 30 CONTINUE
386  !
387  ! *** Remove any supersaturation that results from adjustment ***
388  !
389  !IF(JC.GT.1)THEN
390  ! DO 38 J=1,JC
391  ! IF(QSCONV(J).LT.QCONV(J))THEN
392  ! ALV=LV0-CPVMCL*(TCONV(J)-273.15)
393  ! TNEW=TCONV(J)+ALV*(QCONV(J)-QSCONV(J))/(CPD*(1.-QCONV(J))+
394  ! 1 CL*QCONV(J)+QSCONV(J)*(CPV-CL+ALV*ALV/(RV*TCONV(J)*TCONV(J))))
395  ! ALVNEW=LV0-CPVMCL*(TNEW-273.15)
396  ! QNEW=(ALV*QCONV(J)-(TNEW-TCONV(J))*(CPD*(1.-QCONV(J))
397  ! 1 +CL*QCONV(J)))/ALVNEW
398  ! PRECIP=PRECIP+24.*3600.*1.0E5*(PHCONV_HPA(J)-PHCONV_HPA(J+1))*
399  ! 1 (QCONV(J)-QNEW)/(G*DELT*ROWL)
400  ! TCONV(J)=TNEW
401  ! QCONV(J)=QNEW
402  ! QSCONV(J)=QNEW
403  ! END IF
404  ! 38 CONTINUE
405  !END IF
406  !
407  !END IF
408  !
409  ! *** CALCULATE ARRAYS OF GEOPOTENTIAL, HEAT CAPACITY AND STATIC ENERGY
410  !
411  gz(1)=0.0
412  cpn(1)=cpd*(1.-qconv(1))+qconv(1)*cpv
413  h(1)=tconv(1)*cpn(1)
414  lv(1)=lv0-cpvmcl*(tconv(1)-273.15)
415  hm(1)=lv(1)*qconv(1)
416  tv(1)=tconv(1)*(1.+qconv(1)*epsi-qconv(1))
417  ahmin=1.0e12
418  ihmin=nl
419  DO i=2,nl+1
420  tvx=tconv(i)*(1.+qconv(i)*epsi-qconv(i))
421  tvy=tconv(i-1)*(1.+qconv(i-1)*epsi-qconv(i-1))
422  gz(i)=gz(i-1)+0.5*rd*(tvx+tvy)*(pconv_hpa(i-1)-pconv_hpa(i))/ &
423  phconv_hpa(i)
424  cpn(i)=cpd*(1.-qconv(i))+cpv*qconv(i)
425  h(i)=tconv(i)*cpn(i)+gz(i)
426  lv(i)=lv0-cpvmcl*(tconv(i)-273.15)
427  hm(i)=(cpd*(1.-qconv(i))+cl*qconv(i))*(tconv(i)-tconv(1))+ &
428  lv(i)*qconv(i)+gz(i)
429  tv(i)=tconv(i)*(1.+qconv(i)*epsi-qconv(i))
430  !
431  ! *** Find level of minimum moist static energy ***
432  !
433  IF(i.GE.minorig.AND.hm(i).LT.ahmin.AND.hm(i).LT.hm(i-1))THEN
434  ahmin=hm(i)
435  ihmin=i
436  END IF
437  END DO
438  ihmin=min(ihmin, nl-1)
439  !
440  ! *** Find that model level below the level of minimum moist ***
441  ! *** static energy that has the maximum value of moist static energy ***
442  !
443  ahmax=0.0
444  ! *** bug fixed: need to assign an initial value to NK
445  ! HSO, 05.08.2009
446  nk=minorig
447  DO i=minorig,ihmin
448  IF(hm(i).GT.ahmax)THEN
449  nk=i
450  ahmax=hm(i)
451  END IF
452  END DO
453  !
454  ! *** CHECK WHETHER PARCEL LEVEL TEMPERATURE AND SPECIFIC HUMIDITY ***
455  ! *** ARE REASONABLE ***
456  ! *** Skip convection if HM increases monotonically upward ***
457  !
458  IF(tconv(nk).LT.250.0.OR.qconv(nk).LE.0.0.OR.ihmin.EQ.(nl-1)) &
459  THEN
460  iflag=0
461  cbmf=0.0
462  RETURN
463  END IF
464  !
465  ! *** CALCULATE LIFTED CONDENSATION LEVEL OF AIR AT PARCEL ORIGIN LEVEL ***
466  ! *** (WITHIN 0.2% OF FORMULA OF BOLTON, MON. WEA. REV.,1980) ***
467  !
468  rh=qconv(nk)/qsconv(nk)
469  chi=tconv(nk)/(1669.0-122.0*rh-tconv(nk))
470  plcl=pconv_hpa(nk)*(rh**chi)
471  IF(plcl.LT.200.0.OR.plcl.GE.2000.0)THEN
472  iflag=2
473  cbmf=0.0
474  RETURN
475  END IF
476  !
477  ! *** CALCULATE FIRST LEVEL ABOVE LCL (=ICB) ***
478  !
479  icb=nl-1
480  DO i=nk+1,nl
481  IF(pconv_hpa(i).LT.plcl)THEN
482  icb=min(icb,i)
483  END IF
484  END DO
485  IF(icb.GE.(nl-1))THEN
486  iflag=3
487  cbmf=0.0
488  RETURN
489  END IF
490  !
491  ! *** FIND TEMPERATURE UP THROUGH ICB AND TEST FOR INSTABILITY ***
492  !
493  ! *** SUBROUTINE TLIFT CALCULATES PART OF THE LIFTED PARCEL VIRTUAL ***
494  ! *** TEMPERATURE, THE ACTUAL TEMPERATURE AND THE ADIABATIC ***
495  ! *** LIQUID WATER CONTENT ***
496  !
497  CALL tlift(gz,icb,nk,tvp,tp,clw,nd,nl,1)
498  DO i=nk,icb
499  tvp(i)=tvp(i)-tp(i)*qconv(nk)
500  END DO
501  !
502  ! *** If there was no convection at last time step and parcel ***
503  ! *** is stable at ICB then skip rest of calculation ***
504  !
505  IF(cbmf.EQ.0.0.AND.tvp(icb).LE.(tv(icb)-dtmax))THEN
506  iflag=0
507  RETURN
508  END IF
509  !
510  ! *** IF THIS POINT IS REACHED, MOIST CONVECTIVE ADJUSTMENT IS NECESSARY ***
511  !
512  IF(iflag.NE.4)iflag=1
513  !
514  ! *** FIND THE REST OF THE LIFTED PARCEL TEMPERATURES ***
515  !
516  CALL tlift(gz,icb,nk,tvp,tp,clw,nd,nl,2)
517  !
518  ! *** SET THE PRECIPITATION EFFICIENCIES AND THE FRACTION OF ***
519  ! *** PRECIPITATION FALLING OUTSIDE OF CLOUD ***
520  ! *** THESE MAY BE FUNCTIONS OF TP(I), PCONV_HPA(I) AND CLW(I) ***
521  !
522  DO i=1,nk
523  ep(i)=0.0
524  sigp(i)=sigs
525  END DO
526  DO i=nk+1,nl
527  tca=tp(i)-273.15
528  IF(tca.GE.0.0)THEN
529  elacrit=elcrit
530  ELSE
531  elacrit=elcrit*(1.0-tca/tlcrit)
532  END IF
533  elacrit=max(elacrit,0.0)
534  epmax=0.999
535  ep(i)=epmax*(1.0-elacrit/max(clw(i),1.0e-8))
536  ep(i)=max(ep(i),0.0)
537  ep(i)=min(ep(i),epmax)
538  sigp(i)=sigs
539  END DO
540  !
541  ! *** CALCULATE VIRTUAL TEMPERATURE AND LIFTED PARCEL ***
542  ! *** VIRTUAL TEMPERATURE ***
543  !
544  DO i=icb+1,nl
545  tvp(i)=tvp(i)-tp(i)*qconv(nk)
546  END DO
547  tvp(nl+1)=tvp(nl)-(gz(nl+1)-gz(nl))/cpd
548  !
549  ! *** NOW INITIALIZE VARIOUS ARRAYS USED IN THE COMPUTATIONS ***
550  !
551  DO i=1,nl+1
552  hp(i)=h(i)
553  nent(i)=0
554  water(i)=0.0
555  evap(i)=0.0
556  wt(i)=omtsnow
557  lvcp(i)=lv(i)/cpn(i)
558  DO j=1,nl+1
559  qent(i,j)=qconv(j)
560  elij(i,j)=0.0
561  sij(i,j)=0.0
562  END DO
563  END DO
564  qp(1)=qconv(1)
565  DO i=2,nl+1
566  qp(i)=qconv(i-1)
567  END DO
568  !
569  ! *** FIND THE FIRST MODEL LEVEL (INB1) ABOVE THE PARCEL'S ***
570  ! *** HIGHEST LEVEL OF NEUTRAL BUOYANCY ***
571  ! *** AND THE HIGHEST LEVEL OF POSITIVE CAPE (INB) ***
572  !
573  cape=0.0
574  capem=0.0
575  inb=icb+1
576  inb1=inb
577  byp=0.0
578  DO i=icb+1,nl-1
579  by=(tvp(i)-tv(i))*(phconv_hpa(i)-phconv_hpa(i+1))/pconv_hpa(i)
580  cape=cape+by
581  IF(by.GE.0.0)inb1=i+1
582  IF(cape.GT.0.0)THEN
583  inb=i+1
584  byp=(tvp(i+1)-tv(i+1))*(phconv_hpa(i+1)-phconv_hpa(i+2))/ &
585  pconv_hpa(i+1)
586  capem=cape
587  END IF
588  END DO
589  inb=max(inb,inb1)
590  cape=capem+byp
591  defrac=capem-cape
592  defrac=max(defrac,0.001)
593  frac=-cape/defrac
594  frac=min(frac,1.0)
595  frac=max(frac,0.0)
596  !
597  ! *** CALCULATE LIQUID WATER STATIC ENERGY OF LIFTED PARCEL ***
598  !
599  DO i=icb,inb
600  hp(i)=h(nk)+(lv(i)+(cpd-cpv)*tconv(i))*ep(i)*clw(i)
601  END DO
602  !
603  ! *** CALCULATE CLOUD BASE MASS FLUX AND RATES OF MIXING, M(I), ***
604  ! *** AT EACH MODEL LEVEL ***
605  !
606  dbosum=0.0
607  !
608  ! *** INTERPOLATE DIFFERENCE BETWEEN LIFTED PARCEL AND ***
609  ! *** ENVIRONMENTAL TEMPERATURES TO LIFTED CONDENSATION LEVEL ***
610  !
611  tvpplcl=tvp(icb-1)-rd*tvp(icb-1)*(pconv_hpa(icb-1)-plcl)/ &
612  (cpn(icb-1)*pconv_hpa(icb-1))
613  tvaplcl=tv(icb)+(tvp(icb)-tvp(icb+1))*(plcl-pconv_hpa(icb))/ &
614  (pconv_hpa(icb)-pconv_hpa(icb+1))
615  dtpbl=0.0
616  DO i=nk,icb-1
617  dtpbl=dtpbl+(tvp(i)-tv(i))*(phconv_hpa(i)-phconv_hpa(i+1))
618  END DO
619  dtpbl=dtpbl/(phconv_hpa(nk)-phconv_hpa(icb))
620  dtmin=tvpplcl-tvaplcl+dtmax+dtpbl
621  dtma=dtmin
622  !
623  ! *** ADJUST CLOUD BASE MASS FLUX ***
624  !
625  cbmfold=cbmf
626  ! *** C. Forster: adjustment of CBMF is not allowed to depend on FLEXPART timestep
627  delt0=delt/3.
628  damps=damp*delt/delt0
629  cbmf=(1.-damps)*cbmf+0.1*alpha*dtma
630  cbmf=max(cbmf,0.0)
631  !
632  ! *** If cloud base mass flux is zero, skip rest of calculation ***
633  !
634  IF(cbmf.EQ.0.0.AND.cbmfold.EQ.0.0)THEN
635  RETURN
636  END IF
637 
638  !
639  ! *** CALCULATE RATES OF MIXING, M(I) ***
640  !
641  m(icb)=0.0
642  DO i=icb+1,inb
643  k=min(i,inb1)
644  dbo=abs(tv(k)-tvp(k))+ &
645  entp*0.02*(phconv_hpa(k)-phconv_hpa(k+1))
646  dbosum=dbosum+dbo
647  m(i)=cbmf*dbo
648  END DO
649  DO i=icb+1,inb
650  m(i)=m(i)/dbosum
651  END DO
652  !
653  ! *** CALCULATE ENTRAINED AIR MASS FLUX (MENT), TOTAL WATER MIXING ***
654  ! *** RATIO (QENT), TOTAL CONDENSED WATER (ELIJ), AND MIXING ***
655  ! *** FRACTION (SIJ) ***
656  !
657  DO i=icb+1,inb
658  qti=qconv(nk)-ep(i)*clw(i)
659  DO j=icb,inb
660  bf2=1.+lv(j)*lv(j)*qsconv(j)/(rv*tconv(j)*tconv(j)*cpd)
661  anum=h(j)-hp(i)+(cpv-cpd)*tconv(j)*(qti-qconv(j))
662  denom=h(i)-hp(i)+(cpd-cpv)*(qconv(i)-qti)*tconv(j)
663  dei=denom
664  IF(abs(dei).LT.0.01)dei=0.01
665  sij(i,j)=anum/dei
666  sij(i,i)=1.0
667  altem=sij(i,j)*qconv(i)+(1.-sij(i,j))*qti-qsconv(j)
668  altem=altem/bf2
669  cwat=clw(j)*(1.-ep(j))
670  stemp=sij(i,j)
671  IF((stemp.LT.0.0.OR.stemp.GT.1.0.OR. &
672  altem.GT.cwat).AND.j.GT.i)THEN
673  anum=anum-lv(j)*(qti-qsconv(j)-cwat*bf2)
674  denom=denom+lv(j)*(qconv(i)-qti)
675  IF(abs(denom).LT.0.01)denom=0.01
676  sij(i,j)=anum/denom
677  altem=sij(i,j)*qconv(i)+(1.-sij(i,j))*qti-qsconv(j)
678  altem=altem-(bf2-1.)*cwat
679  END IF
680  IF(sij(i,j).GT.0.0.AND.sij(i,j).LT.0.9)THEN
681  qent(i,j)=sij(i,j)*qconv(i)+(1.-sij(i,j))*qti
682  elij(i,j)=altem
683  elij(i,j)=max(0.0,elij(i,j))
684  ment(i,j)=m(i)/(1.-sij(i,j))
685  nent(i)=nent(i)+1
686  END IF
687  sij(i,j)=max(0.0,sij(i,j))
688  sij(i,j)=min(1.0,sij(i,j))
689  END DO
690  !
691  ! *** IF NO AIR CAN ENTRAIN AT LEVEL I ASSUME THAT UPDRAFT DETRAINS ***
692  ! *** AT THAT LEVEL AND CALCULATE DETRAINED AIR FLUX AND PROPERTIES ***
693  !
694  IF(nent(i).EQ.0)THEN
695  ment(i,i)=m(i)
696  qent(i,i)=qconv(nk)-ep(i)*clw(i)
697  elij(i,i)=clw(i)
698  sij(i,i)=1.0
699  END IF
700  END DO
701  sij(inb,inb)=1.0
702  !
703  ! *** NORMALIZE ENTRAINED AIR MASS FLUXES TO REPRESENT EQUAL ***
704  ! *** PROBABILITIES OF MIXING ***
705  !
706  DO i=icb+1,inb
707  IF(nent(i).NE.0)THEN
708  qp1=qconv(nk)-ep(i)*clw(i)
709  anum=h(i)-hp(i)-lv(i)*(qp1-qsconv(i))
710  denom=h(i)-hp(i)+lv(i)*(qconv(i)-qp1)
711  IF(abs(denom).LT.0.01)denom=0.01
712  scrit=anum/denom
713  alt=qp1-qsconv(i)+scrit*(qconv(i)-qp1)
714  IF(alt.LT.0.0)scrit=1.0
715  scrit=max(scrit,0.0)
716  asij=0.0
717  smin=1.0
718  DO j=icb,inb
719  IF(sij(i,j).GT.0.0.AND.sij(i,j).LT.0.9)THEN
720  IF(j.GT.i)THEN
721  smid=min(sij(i,j),scrit)
722  sjmax=smid
723  sjmin=smid
724  IF(smid.LT.smin.AND.sij(i,j+1).LT.smid)THEN
725  smin=smid
726  sjmax=min(sij(i,j+1),sij(i,j),scrit)
727  sjmin=max(sij(i,j-1),sij(i,j))
728  sjmin=min(sjmin,scrit)
729  END IF
730  ELSE
731  sjmax=max(sij(i,j+1),scrit)
732  smid=max(sij(i,j),scrit)
733  sjmin=0.0
734  IF(j.GT.1)sjmin=sij(i,j-1)
735  sjmin=max(sjmin,scrit)
736  END IF
737  delp=abs(sjmax-smid)
738  delm=abs(sjmin-smid)
739  asij=asij+(delp+delm)*(phconv_hpa(j)-phconv_hpa(j+1))
740  ment(i,j)=ment(i,j)*(delp+delm)* &
741  (phconv_hpa(j)-phconv_hpa(j+1))
742  END IF
743  END DO
744  asij=max(1.0e-21,asij)
745  asij=1.0/asij
746  DO j=icb,inb
747  ment(i,j)=ment(i,j)*asij
748  END DO
749  bsum=0.0
750  DO j=icb,inb
751  bsum=bsum+ment(i,j)
752  END DO
753  IF(bsum.LT.1.0e-18)THEN
754  nent(i)=0
755  ment(i,i)=m(i)
756  qent(i,i)=qconv(nk)-ep(i)*clw(i)
757  elij(i,i)=clw(i)
758  sij(i,i)=1.0
759  END IF
760  END IF
761  END DO
762  !
763  ! *** CHECK WHETHER EP(INB)=0, IF SO, SKIP PRECIPITATING ***
764  ! *** DOWNDRAFT CALCULATION ***
765  !
766  IF(ep(inb).LT.0.0001)goto 405
767  !
768  ! *** INTEGRATE LIQUID WATER EQUATION TO FIND CONDENSED WATER ***
769  ! *** AND CONDENSED WATER FLUX ***
770  !
771  jtt=2
772  !
773  ! *** BEGIN DOWNDRAFT LOOP ***
774  !
775  DO i=inb,1,-1
776  !
777  ! *** CALCULATE DETRAINED PRECIPITATION ***
778  !
779  wdtrain=g*ep(i)*m(i)*clw(i)
780  IF(i.GT.1)THEN
781  DO j=1,i-1
782  awat=elij(j,i)-(1.-ep(i))*clw(i)
783  awat=max(0.0,awat)
784  wdtrain=wdtrain+g*awat*ment(j,i)
785  END DO
786  END IF
787  !
788  ! *** FIND RAIN WATER AND EVAPORATION USING PROVISIONAL ***
789  ! *** ESTIMATES OF QP(I)AND QP(I-1) ***
790  !
791  !
792  ! *** Value of terminal velocity and coefficient of evaporation for snow ***
793  !
794  coeff=coeffs
795  wt(i)=omtsnow
796  !
797  ! *** Value of terminal velocity and coefficient of evaporation for rain ***
798  !
799  IF(tconv(i).GT.273.0)THEN
800  coeff=coeffr
801  wt(i)=omtrain
802  END IF
803  qsm=0.5*(qconv(i)+qp(i+1))
804  afac=coeff*phconv_hpa(i)*(qsconv(i)-qsm)/ &
805  (1.0e4+2.0e3*phconv_hpa(i)*qsconv(i))
806  afac=max(afac,0.0)
807  sigt=sigp(i)
808  sigt=max(0.0,sigt)
809  sigt=min(1.0,sigt)
810  b6=100.*(phconv_hpa(i)-phconv_hpa(i+1))*sigt*afac/wt(i)
811  c6=(water(i+1)*wt(i+1)+wdtrain/sigd)/wt(i)
812  revap=0.5*(-b6+sqrt(b6*b6+4.*c6))
813  evap(i)=sigt*afac*revap
814  water(i)=revap*revap
815  !
816  ! *** CALCULATE PRECIPITATING DOWNDRAFT MASS FLUX UNDER ***
817  ! *** HYDROSTATIC APPROXIMATION ***
818  !
819  IF(i.EQ.1)goto 360
820  dhdp=(h(i)-h(i-1))/(pconv_hpa(i-1)-pconv_hpa(i))
821  dhdp=max(dhdp,10.0)
822  mp(i)=100.*ginv*lv(i)*sigd*evap(i)/dhdp
823  mp(i)=max(mp(i),0.0)
824  !
825  ! *** ADD SMALL AMOUNT OF INERTIA TO DOWNDRAFT ***
826  !
827  fac=20.0/(phconv_hpa(i-1)-phconv_hpa(i))
828  mp(i)=(fac*mp(i+1)+mp(i))/(1.+fac)
829  !
830  ! *** FORCE MP TO DECREASE LINEARLY TO ZERO ***
831  ! *** BETWEEN ABOUT 950 MB AND THE SURFACE ***
832  !
833  IF(pconv_hpa(i).GT.(0.949*pconv_hpa(1)))THEN
834  jtt=max(jtt,i)
835  mp(i)=mp(jtt)*(pconv_hpa(1)-pconv_hpa(i))/(pconv_hpa(1)- &
836  pconv_hpa(jtt))
837  END IF
838  360 CONTINUE
839  !
840  ! *** FIND MIXING RATIO OF PRECIPITATING DOWNDRAFT ***
841  !
842  IF(i.EQ.inb)goto 400
843  IF(i.EQ.1)THEN
844  qstm=qsconv(1)
845  ELSE
846  qstm=qsconv(i-1)
847  END IF
848  IF(mp(i).GT.mp(i+1))THEN
849  rat=mp(i+1)/mp(i)
850  qp(i)=qp(i+1)*rat+qconv(i)*(1.0-rat)+100.*ginv* &
851  sigd*(phconv_hpa(i)-phconv_hpa(i+1))*(evap(i)/mp(i))
852  ELSE
853  IF(mp(i+1).GT.0.0)THEN
854  qp(i)=(gz(i+1)-gz(i)+qp(i+1)*(lv(i+1)+tconv(i+1)*(cl-cpd))+ &
855  cpd*(tconv(i+1)-tconv(i)))/(lv(i)+tconv(i)*(cl-cpd))
856  END IF
857  END IF
858  qp(i)=min(qp(i),qstm)
859  qp(i)=max(qp(i),0.0)
860 400 CONTINUE
861  END DO
862  !
863  ! *** CALCULATE SURFACE PRECIPITATION IN MM/DAY ***
864  !
865  precip=precip+wt(1)*sigd*water(1)*3600.*24000./(rowl*g)
866  !
867  405 CONTINUE
868  !
869  ! *** CALCULATE DOWNDRAFT VELOCITY SCALE AND SURFACE TEMPERATURE AND ***
870  ! *** WATER VAPOR FLUCTUATIONS ***
871  !
872  wd=beta*abs(mp(icb))*0.01*rd*tconv(icb)/(sigd*pconv_hpa(icb))
873  qprime=0.5*(qp(1)-qconv(1))
874  tprime=lv0*qprime/cpd
875  !
876  ! *** CALCULATE TENDENCIES OF LOWEST LEVEL POTENTIAL TEMPERATURE ***
877  ! *** AND MIXING RATIO ***
878  !
879  dpinv=0.01/(phconv_hpa(1)-phconv_hpa(2))
880  am=0.0
881  IF(nk.EQ.1)THEN
882  DO k=2,inb
883  am=am+m(k)
884  END DO
885  END IF
886  ! save saturated upward mass flux for first level
887  fup(1)=am
888  IF((2.*g*dpinv*am).GE.delti)iflag=4
889  ft(1)=ft(1)+g*dpinv*am*(tconv(2)-tconv(1)+(gz(2)-gz(1))/cpn(1))
890  ft(1)=ft(1)-lvcp(1)*sigd*evap(1)
891  ft(1)=ft(1)+sigd*wt(2)*(cl-cpd)*water(2)*(tconv(2)- &
892  tconv(1))*dpinv/cpn(1)
893  fq(1)=fq(1)+g*mp(2)*(qp(2)-qconv(1))* &
894  dpinv+sigd*evap(1)
895  fq(1)=fq(1)+g*am*(qconv(2)-qconv(1))*dpinv
896  DO j=2,inb
897  fq(1)=fq(1)+g*dpinv*ment(j,1)*(qent(j,1)-qconv(1))
898  END DO
899  !
900  ! *** CALCULATE TENDENCIES OF POTENTIAL TEMPERATURE AND MIXING RATIO ***
901  ! *** AT LEVELS ABOVE THE LOWEST LEVEL ***
902  !
903  ! *** FIRST FIND THE NET SATURATED UPDRAFT AND DOWNDRAFT MASS FLUXES ***
904  ! *** THROUGH EACH LEVEL ***
905  !
906  DO i=2,inb
907  dpinv=0.01/(phconv_hpa(i)-phconv_hpa(i+1))
908  cpinv=1.0/cpn(i)
909  amp1=0.0
910  ad=0.0
911  IF(i.GE.nk)THEN
912  DO k=i+1,inb+1
913  amp1=amp1+m(k)
914  END DO
915  END IF
916  DO k=1,i
917  DO j=i+1,inb+1
918  amp1=amp1+ment(k,j)
919  END DO
920  END DO
921  ! save saturated upward mass flux
922  fup(i)=amp1
923  IF((2.*g*dpinv*amp1).GE.delti)iflag=4
924  DO k=1,i-1
925  DO j=i,inb
926  ad=ad+ment(j,k)
927  END DO
928  END DO
929  ! save saturated downward mass flux
930  fdown(i)=ad
931  ft(i)=ft(i)+g*dpinv*(amp1*(tconv(i+1)-tconv(i)+(gz(i+1)-gz(i))* &
932  cpinv)-ad*(tconv(i)-tconv(i-1)+(gz(i)-gz(i-1))*cpinv)) &
933  -sigd*lvcp(i)*evap(i)
934  ft(i)=ft(i)+g*dpinv*ment(i,i)*(hp(i)-h(i)+ &
935  tconv(i)*(cpv-cpd)*(qconv(i)-qent(i,i)))*cpinv
936  ft(i)=ft(i)+sigd*wt(i+1)*(cl-cpd)*water(i+1)* &
937  (tconv(i+1)-tconv(i))*dpinv*cpinv
938  fq(i)=fq(i)+g*dpinv*(amp1*(qconv(i+1)-qconv(i))- &
939  ad*(qconv(i)-qconv(i-1)))
940  DO k=1,i-1
941  awat=elij(k,i)-(1.-ep(i))*clw(i)
942  awat=max(awat,0.0)
943  fq(i)=fq(i)+g*dpinv*ment(k,i)*(qent(k,i)-awat-qconv(i))
944  END DO
945  DO k=i,inb
946  fq(i)=fq(i)+g*dpinv*ment(k,i)*(qent(k,i)-qconv(i))
947  END DO
948  fq(i)=fq(i)+sigd*evap(i)+g*(mp(i+1)* &
949  (qp(i+1)-qconv(i))-mp(i)*(qp(i)-qconv(i-1)))*dpinv
950  END DO
951  !
952  ! *** Adjust tendencies at top of convection layer to reflect ***
953  ! *** actual position of the level zero CAPE ***
954  !
955  fqold=fq(inb)
956  fq(inb)=fq(inb)*(1.-frac)
957  fq(inb-1)=fq(inb-1)+frac*fqold*((phconv_hpa(inb)- &
958  phconv_hpa(inb+1))/ &
959  (phconv_hpa(inb-1)-phconv_hpa(inb)))*lv(inb)/lv(inb-1)
960  ftold=ft(inb)
961  ft(inb)=ft(inb)*(1.-frac)
962  ft(inb-1)=ft(inb-1)+frac*ftold*((phconv_hpa(inb)- &
963  phconv_hpa(inb+1))/ &
964  (phconv_hpa(inb-1)-phconv_hpa(inb)))*cpn(inb)/cpn(inb-1)
965  !
966  ! *** Very slightly adjust tendencies to force exact ***
967  ! *** enthalpy, momentum and tracer conservation ***
968  !
969  ents=0.0
970  DO i=1,inb
971  ents=ents+(cpn(i)*ft(i)+lv(i)*fq(i))* &
972  (phconv_hpa(i)-phconv_hpa(i+1))
973  END DO
974  ents=ents/(phconv_hpa(1)-phconv_hpa(inb+1))
975  DO i=1,inb
976  ft(i)=ft(i)-ents/cpn(i)
977  END DO
978 
979  ! ************************************************
980  ! **** DETERMINE MASS DISPLACEMENT MATRIX
981  ! ***** AND COMPENSATING SUBSIDENCE
982  ! ************************************************
983 
984  ! mass displacement matrix due to saturated up-and downdrafts
985  ! inside the cloud and determine compensating subsidence
986  ! FUP(I) (saturated updrafts), FDOWN(I) (saturated downdrafts) are assumed to be
987  ! balanced by compensating subsidence (SUB(I))
988  ! FDOWN(I) and SUB(I) defined positive downwards
989 
990  ! NCONVTOP IS THE TOP LEVEL AT WHICH CONVECTIVE MASS FLUXES ARE DIAGNOSED
991  ! EPSILON IS A SMALL NUMBER
992 
993  sub(1)=0.
994  nconvtop=1
995  do i=1,inb+1
996  do j=1,inb+1
997  if (j.eq.nk) then
998  fmass(j,i)=fmass(j,i)+m(i)
999  endif
1000  fmass(j,i)=fmass(j,i)+ment(j,i)
1001  IF (fmass(j,i).GT.epsilon) nconvtop=max(nconvtop,i,j)
1002  end do
1003  if (i.gt.1) then
1004  sub(i)=fup(i-1)-fdown(i)
1005  endif
1006  end do
1007  nconvtop=nconvtop+1
1008 
1009  RETURN
1010  !
1011 END SUBROUTINE convect
1012 !
1013 ! ---------------------------------------------------------------------------
1014 !
1015 SUBROUTINE tlift(GZ,ICB,NK,TVP,TPK,CLW,ND,NL,KK)
1016  !
1017  !-cv
1018  use par_mod
1019  use conv_mod
1020 
1021  implicit none
1022  !-cv
1023  !====>Begin Module TLIFT File convect.f Undeclared variables
1024  !
1025  !Argument variables
1026  !
1027  integer :: icb, kk, nd, nk, nl
1028  !
1029  !Local variables
1030  !
1031  integer :: i, j, nsb, nst
1032  !
1033  real :: ah0, ahg, alv, cpinv, cpp, denom
1034  real :: es, qg, rg, s, tc, tg
1035  !
1036  !====>End Module TLIFT File convect.f
1037 
1038  REAL :: gz(nd),tpk(nd),clw(nd)
1039  REAL :: tvp(nd)
1040  !
1041  ! *** ASSIGN VALUES OF THERMODYNAMIC CONSTANTS ***
1042  !
1043  REAL,PARAMETER :: cpd=1005.7
1044  REAL,PARAMETER :: cpv=1870.0
1045  REAL,PARAMETER :: cl=2500.0
1046  REAL,PARAMETER :: rv=461.5
1047  REAL,PARAMETER :: rd=287.04
1048  REAL,PARAMETER :: lv0=2.501e6
1049  !
1050  REAL,PARAMETER :: cpvmcl=cl-cpv
1051  REAL,PARAMETER :: eps0=rd/rv
1052  REAL,PARAMETER :: epsi=1./eps0
1053  !
1054  ! *** CALCULATE CERTAIN PARCEL QUANTITIES, INCLUDING STATIC ENERGY ***
1055  !
1056  ah0=(cpd*(1.-qconv(nk))+cl*qconv(nk))*tconv(nk)+qconv(nk)* &
1057  (lv0-cpvmcl*( &
1058  tconv(nk)-273.15))+gz(nk)
1059  cpp=cpd*(1.-qconv(nk))+qconv(nk)*cpv
1060  cpinv=1./cpp
1061  !
1062  IF(kk.EQ.1)THEN
1063  !
1064  ! *** CALCULATE LIFTED PARCEL QUANTITIES BELOW CLOUD BASE ***
1065  !
1066  DO i=1,icb-1
1067  clw(i)=0.0
1068  END DO
1069  DO i=nk,icb-1
1070  tpk(i)=tconv(nk)-(gz(i)-gz(nk))*cpinv
1071  tvp(i)=tpk(i)*(1.+qconv(nk)*epsi)
1072  END DO
1073  END IF
1074  !
1075  ! *** FIND LIFTED PARCEL QUANTITIES ABOVE CLOUD BASE ***
1076  !
1077  nst=icb
1078  nsb=icb
1079  IF(kk.EQ.2)THEN
1080  nst=nl
1081  nsb=icb+1
1082  END IF
1083  DO i=nsb,nst
1084  tg=tconv(i)
1085  qg=qsconv(i)
1086  alv=lv0-cpvmcl*(tconv(i)-273.15)
1087  DO j=1,2
1088  s=cpd+alv*alv*qg/(rv*tconv(i)*tconv(i))
1089  s=1./s
1090  ahg=cpd*tg+(cl-cpd)*qconv(nk)*tconv(i)+alv*qg+gz(i)
1091  tg=tg+s*(ah0-ahg)
1092  tg=max(tg,35.0)
1093  tc=tg-273.15
1094  denom=243.5+tc
1095  IF(tc.GE.0.0)THEN
1096  es=6.112*exp(17.67*tc/denom)
1097  ELSE
1098  es=exp(23.33086-6111.72784/tg+0.15215*log(tg))
1099  END IF
1100  qg=eps0*es/(pconv_hpa(i)-es*(1.-eps0))
1101  END DO
1102  alv=lv0-cpvmcl*(tconv(i)-273.15)
1103  tpk(i)=(ah0-(cl-cpd)*qconv(nk)*tconv(i)-gz(i)-alv*qg)/cpd
1104  clw(i)=qconv(nk)-qg
1105  clw(i)=max(0.0,clw(i))
1106  rg=qg/(1.-qconv(nk))
1107  tvp(i)=tpk(i)*(1.+rg*epsi)
1108  END DO
1109  RETURN
1110 END SUBROUTINE tlift
subroutine convect(ND, NL, DELT, IFLAG, PRECIP, WD, TPRIME, QPRIME, CBMF)
Definition: convect43c.f90:29
subroutine tlift(GZ, ICB, NK, TVP, TPK, CLW, ND, NL, KK)