LMDZ
convect2.F90
Go to the documentation of this file.
1 
2 ! $Id: convect2.F90 2346 2015-08-21 15:13:46Z emillour $
3 
4 SUBROUTINE convect2(ncum, idcum, len, nd, ndp1, nl, minorig, nk1, icb1, t1, &
5  q1, qs1, u1, v1, gz1, tv1, tp1, tvp1, clw1, h1, lv1, cpn1, p1, ph1, ft1, &
6  fq1, fu1, fv1, tnk1, qnk1, gznk1, plcl1, precip1, cbmf1, iflag1, delt, &
7  cpd, cpv, cl, rv, rd, lv0, g, sigs, sigd, elcrit, tlcrit, omtsnow, dtmax, &
8  damp, alpha, entp, coeffs, coeffr, omtrain, cu, ma)
9  ! .............................START PROLOGUE............................
10 
11  ! SCCS IDENTIFICATION: @(#)convect2.f 1.2 05/18/00
12  ! 22:06:22 /h/cm/library/nogaps4/src/sub/fcst/convect2.f_v
13 
14  ! CONFIGURATION IDENTIFICATION: None
15 
16  ! MODULE NAME: convect2
17 
18  ! DESCRIPTION:
19 
20  ! convect1 The Emanuel Cumulus Convection Scheme - compute tendencies
21 
22  ! CONTRACT NUMBER AND TITLE: None
23 
24  ! REFERENCES: Programmers K. Emanuel (MIT), Timothy F. Hogan, M. Peng
25  ! (NRL)
26 
27  ! CLASSIFICATION: Unclassified
28 
29  ! RESTRICTIONS: None
30 
31  ! COMPILER DEPENDENCIES: FORTRAN 77, FORTRAN 90
32 
33  ! COMPILE OPTIONS: Fortran 77: -Zu -Wf"-ei -o aggress"
34  ! Fortran 90: -O vector3,scalar3,task1,aggress,overindex -ei -r 2
35 
36  ! LIBRARIES OF RESIDENCE: /a/ops/lib/libfcst159.a
37 
38  ! USAGE: call convect2(ncum,idcum,len,nd,nl,minorig,
39  ! & nk1,icb1,
40  ! & t1,q1,qs1,u1,v1,gz1,tv1,tp1,tvp1,clw1,h1,
41  ! & lv1,cpn1,p1,ph1,ft1,fq1,fu1,fv1,
42  ! & tnk1,qnk1,gznk1,plcl1,
43  ! & precip1,cbmf1,iflag1,
44  ! & delt,cpd,cpv,cl,rv,rd,lv0,g,
45  ! & sigs,sigd,elcrit,tlcrit,omtsnow,dtmax,damp,
46  ! & alpha,entp,coeffs,coeffr,omtrain,cu)
47 
48  ! PARAMETERS:
49  ! Name Type Usage Description
50  ! ---------- ---------- ------- ----------------------------
51 
52  ! ncum Integer Input number of cumulus points
53  ! idcum Integer Input index of cumulus point
54  ! len Integer Input first dimension
55  ! nd Integer Input total vertical dimension
56  ! ndp1 Integer Input nd + 1
57  ! nl Integer Input vertical dimension for
58  ! convection
59  ! minorig Integer Input First level where convection is
60  ! allow to begin
61  ! nk1 Integer Input First level of convection
62  ! ncb1 Integer Input Level of free convection
63  ! t1 Real Input temperature
64  ! q1 Real Input specific hum
65  ! qs1 Real Input sat specific hum
66  ! u1 Real Input u-wind
67  ! v1 Real Input v-wind
68  ! gz1 Real Inout geop
69  ! tv1 Real Input virtual temp
70  ! tp1 Real Input
71  ! clw1 Real Inout cloud liquid water
72  ! h1 Real Inout
73  ! lv1 Real Inout
74  ! cpn1 Real Inout
75  ! p1 Real Input full level pressure
76  ! ph1 Real Input half level pressure
77  ! ft1 Real Output temp tend
78  ! fq1 Real Output spec hum tend
79  ! fu1 Real Output u-wind tend
80  ! fv1 Real Output v-wind tend
81  ! precip1 Real Output prec
82  ! cbmf1 Real In/Out cumulus mass flux
83  ! iflag1 Integer Output iflag on latitude strip
84  ! delt Real Input time step
85  ! cpd Integer Input See description below
86  ! cpv Integer Input See description below
87  ! cl Integer Input See description below
88  ! rv Integer Input See description below
89  ! rd Integer Input See description below
90  ! lv0 Integer Input See description below
91  ! g Integer Input See description below
92  ! sigs Integer Input See description below
93  ! sigd Integer Input See description below
94  ! elcrit Integer Input See description below
95  ! tlcrit Integer Input See description below
96  ! omtsnow Integer Input See description below
97  ! dtmax Integer Input See description below
98  ! damp Integer Input See description below
99  ! alpha Integer Input See description below
100  ! ent Integer Input See description below
101  ! coeffs Integer Input See description below
102  ! coeffr Integer Input See description below
103  ! omtrain Integer Input See description below
104  ! cu Integer Input See description below
105 
106  ! COMMON BLOCKS:
107  ! Block Name Type Usage Notes
108  ! -------- -------- ---- ------ ------------------------
109 
110  ! FILES: None
111 
112  ! DATA BASES: None
113 
114  ! NON-FILE INPUT/OUTPUT: None
115 
116  ! ERROR CONDITIONS: None
117 
118  ! ADDITIONAL COMMENTS: None
119 
120  ! .................MAINTENANCE SECTION................................
121 
122  ! MODULES CALLED:
123  ! Name Description
124  ! zilch Zero out an array
125  ! ------- ----------------------
126  ! LOCAL VARIABLES AND
127  ! STRUCTURES:
128  ! Name Type Description
129  ! ------- ------ -----------
130  ! See Comments Below
131 
132  ! i Integer loop index
133  ! k Integer loop index
134 
135  ! METHOD:
136 
137  ! See Emanuel, K. and M. Zivkovic-Rothman, 2000: Development and evaluation
138  ! of a
139  ! convective scheme for use in climate models.
140 
141  ! FILES: None
142 
143  ! INCLUDE FILES: None
144 
145  ! MAKEFILE: /a/ops/met/nogaps/src/sub/fcst/fcst159lib.mak
146 
147  ! ..............................END PROLOGUE.............................
148 
149 
150  USE dimphy
151  IMPLICIT NONE
152 
153  INTEGER kmax2, imax2, kmin2, imin2
154  REAL ftmax2, ftmin2
155  INTEGER kmax, imax, kmin, imin
156  REAL ftmax, ftmin
157 
158  INTEGER ncum
159  INTEGER len
160  INTEGER idcum(len)
161  INTEGER nd
162  INTEGER ndp1
163  INTEGER nl
164  INTEGER minorig
165  INTEGER nk1(len)
166  INTEGER icb1(len)
167  REAL t1(len, nd)
168  REAL q1(len, nd)
169  REAL qs1(len, nd)
170  REAL u1(len, nd)
171  REAL v1(len, nd)
172  REAL gz1(len, nd)
173  REAL tv1(len, nd)
174  REAL tp1(len, nd)
175  REAL tvp1(len, nd)
176  REAL clw1(len, nd)
177  REAL h1(len, nd)
178  REAL lv1(len, nd)
179  REAL cpn1(len, nd)
180  REAL p1(len, nd)
181  REAL ph1(len, ndp1)
182  REAL ft1(len, nd)
183  REAL fq1(len, nd)
184  REAL fu1(len, nd)
185  REAL fv1(len, nd)
186  REAL tnk1(len)
187  REAL qnk1(len)
188  REAL gznk1(len)
189  REAL precip1(len)
190  REAL cbmf1(len)
191  REAL plcl1(len)
192  INTEGER iflag1(len)
193  REAL delt
194  REAL cpd
195  REAL cpv
196  REAL cl
197  REAL rv
198  REAL rd
199  REAL lv0
200  REAL g
201  REAL sigs ! SIGS IS THE FRACTION OF PRECIPITATION FALLING OUTSIDE
202  REAL sigd ! SIGD IS THE FRACTIONAL AREA COVERED BY UNSATURATED DNDRAFT
203  REAL elcrit ! ELCRIT IS THE AUTOCONVERSION THERSHOLD WATER CONTENT (gm/gm)
204  REAL tlcrit ! TLCRIT IS CRITICAL TEMPERATURE BELOW WHICH THE AUTO-
205  ! CONVERSION THRESHOLD IS ASSUMED TO BE ZERO
206  REAL omtsnow ! OMTSNOW IS THE ASSUMED FALL SPEED (P/s) OF SNOW
207  REAL dtmax ! DTMAX IS THE MAXIMUM NEGATIVE TEMPERATURE PERTURBATION
208  ! A LIFTED PARCEL IS ALLOWED TO HAVE BELOW ITS LFC.
209  REAL damp
210  REAL alpha
211  REAL entp ! ENTP IS THE COEFFICIENT OF MIXING IN THE ENTRAINMENT FORMULATION
212  REAL coeffs ! COEFFS IS A COEFFICIENT GOVERNING THE RATE OF EVAPORATION OF
213  ! SNOW
214  REAL coeffr ! COEFFR IS A COEFFICIENT GOVERNING THE RATE OF EVAPORATION OF
215  ! RAIN
216  REAL omtrain ! OMTRAIN IS THE ASSUMED FALL SPEED (P/s) OF RAIN
217  REAL cu ! CU IS THE COEFFICIENT GOVERNING CONVECTIVE MOMENTUM TRANSPORT
218 
219  REAL ma(len, nd)
220 
221 
222  ! *** ELCRIT IS THE AUTOCONVERSION THERSHOLD WATER CONTENT (gm/gm) ***
223  ! *** TLCRIT IS CRITICAL TEMPERATURE BELOW WHICH THE AUTO- ***
224  ! *** CONVERSION THRESHOLD IS ASSUMED TO BE ZERO ***
225  ! *** (THE AUTOCONVERSION THRESHOLD VARIES LINEARLY ***
226  ! *** BETWEEN 0 C AND TLCRIT) ***
227  ! *** ENTP IS THE COEFFICIENT OF MIXING IN THE ENTRAINMENT ***
228  ! *** FORMULATION ***
229  ! *** SIGD IS THE FRACTIONAL AREA COVERED BY UNSATURATED DNDRAFT ***
230  ! *** SIGS IS THE FRACTION OF PRECIPITATION FALLING OUTSIDE ***
231  ! *** OF CLOUD ***
232  ! *** OMTRAIN IS THE ASSUMED FALL SPEED (P/s) OF RAIN ***
233  ! *** OMTSNOW IS THE ASSUMED FALL SPEED (P/s) OF SNOW ***
234  ! *** COEFFR IS A COEFFICIENT GOVERNING THE RATE OF EVAPORATION ***
235  ! *** OF RAIN ***
236  ! *** COEFFS IS A COEFFICIENT GOVERNING THE RATE OF EVAPORATION ***
237  ! *** OF SNOW ***
238  ! *** CU IS THE COEFFICIENT GOVERNING CONVECTIVE MOMENTUM ***
239  ! *** TRANSPORT ***
240  ! *** DTMAX IS THE MAXIMUM NEGATIVE TEMPERATURE PERTURBATION ***
241  ! *** A LIFTED PARCEL IS ALLOWED TO HAVE BELOW ITS LFC ***
242  ! *** ALPHA AND DAMP ARE PARAMETERS THAT CONTROL THE RATE OF ***
243  ! *** APPROACH TO QUASI-EQUILIBRIUM ***
244  ! *** (THEIR STANDARD VALUES ARE 0.20 AND 0.1, RESPECTIVELY) ***
245  ! *** (DAMP MUST BE LESS THAN 1) ***
246 
247  ! Local arrays.
248 
249  REAL work(ncum)
250  REAL t(ncum, klev)
251  REAL q(ncum, klev)
252  REAL qs(ncum, klev)
253  REAL u(ncum, klev)
254  REAL v(ncum, klev)
255  REAL gz(ncum, klev)
256  REAL h(ncum, klev)
257  REAL lv(ncum, klev)
258  REAL cpn(ncum, klev)
259  REAL p(ncum, klev)
260  REAL ph(ncum, klev)
261  REAL ft(ncum, klev)
262  REAL fq(ncum, klev)
263  REAL fu(ncum, klev)
264  REAL fv(ncum, klev)
265  REAL precip(ncum)
266  REAL cbmf(ncum)
267  REAL plcl(ncum)
268  REAL tnk(ncum)
269  REAL qnk(ncum)
270  REAL gznk(ncum)
271  REAL tv(ncum, klev)
272  REAL tp(ncum, klev)
273  REAL tvp(ncum, klev)
274  REAL clw(ncum, klev)
275  ! real det(ncum,klev)
276  REAL dph(ncum, klev)
277  ! real wd(ncum)
278  ! real tprime(ncum)
279  ! real qprime(ncum)
280  REAL ah0(ncum)
281  REAL ep(ncum, klev)
282  REAL sigp(ncum, klev)
283  INTEGER nent(ncum, klev)
284  REAL water(ncum, klev)
285  REAL evap(ncum, klev)
286  REAL mp(ncum, klev)
287  REAL m(ncum, klev)
288  REAL qti
289  REAL wt(ncum, klev)
290  REAL hp(ncum, klev)
291  REAL lvcp(ncum, klev)
292  REAL elij(ncum, klev, klev)
293  REAL ment(ncum, klev, klev)
294  REAL sij(ncum, klev, klev)
295  REAL qent(ncum, klev, klev)
296  REAL uent(ncum, klev, klev)
297  REAL vent(ncum, klev, klev)
298  REAL qp(ncum, klev)
299  REAL up(ncum, klev)
300  REAL vp(ncum, klev)
301  REAL cape(ncum)
302  REAL capem(ncum)
303  REAL frac(ncum)
304  REAL dtpbl(ncum)
305  REAL tvpplcl(ncum)
306  REAL tvaplcl(ncum)
307  REAL dtmin(ncum)
308  REAL w3d(ncum, klev)
309  REAL am(ncum)
310  REAL ents(ncum)
311  REAL uav(ncum)
312  REAL vav(ncum)
313 
314  INTEGER iflag(ncum)
315  INTEGER nk(ncum)
316  INTEGER icb(ncum)
317  INTEGER inb(ncum)
318  INTEGER inb1(ncum)
319  INTEGER jtt(ncum)
320 
321  INTEGER nn, i, k, n, icbmax, nlp, j
322  INTEGER ij
323  INTEGER nn2, nn3
324  REAL clmcpv
325  REAL clmcpd
326  REAL cpdmcp
327  REAL cpvmcpd
328  REAL eps
329  REAL epsi
330  REAL epsim1
331  REAL tg, qg, s, alv, tc, ahg, denom, es, rg, ginv, rowl
332  REAL delti
333  REAL tca, elacrit
334  REAL by, defrac
335  ! real byp
336  REAL byp(ncum)
337  LOGICAL lcape(ncum)
338  REAL dbo
339  REAL bf2, anum, dei, altem, cwat, stemp
340  REAL alt, qp1, smid, sjmax, sjmin
341  REAL delp, delm
342  REAL awat, coeff, afac, revap, dhdp, fac, qstm, rat
343  REAL qsm, sigt, b6, c6
344  REAL dpinv, cpinv
345  REAL fqold, ftold, fuold, fvold
346  REAL wdtrain(ncum), xxx
347  REAL bsum(ncum, klev)
348  REAL asij(ncum)
349  REAL smin(ncum)
350  REAL scrit(ncum)
351  ! real amp1,ad
352  REAL amp1(ncum), ad(ncum)
353  LOGICAL lwork(ncum)
354  INTEGER num1, num2
355 
356  ! print*,'cpd en entree de convect2 ',cpd
357  nlp = nl + 1
358 
359  rowl = 1000.0
360  ginv = 1.0/g
361  delti = 1.0/delt
362 
363  ! Define some thermodynamic variables.
364 
365  clmcpv = cl - cpv
366  clmcpd = cl - cpd
367  cpdmcp = cpd - cpv
368  cpvmcpd = cpv - cpd
369  eps = rd/rv
370  epsi = 1.0/eps
371  epsim1 = epsi - 1.0
372 
373  ! Compress the fields.
374 
375  DO k = 1, nl + 1
376  nn = 0
377  DO i = 1, len
378  IF (iflag1(i)==0) THEN
379  nn = nn + 1
380  t(nn, k) = t1(i, k)
381  q(nn, k) = q1(i, k)
382  qs(nn, k) = qs1(i, k)
383  u(nn, k) = u1(i, k)
384  v(nn, k) = v1(i, k)
385  gz(nn, k) = gz1(i, k)
386  h(nn, k) = h1(i, k)
387  lv(nn, k) = lv1(i, k)
388  cpn(nn, k) = cpn1(i, k)
389  p(nn, k) = p1(i, k)
390  ph(nn, k) = ph1(i, k)
391  tv(nn, k) = tv1(i, k)
392  tp(nn, k) = tp1(i, k)
393  tvp(nn, k) = tvp1(i, k)
394  clw(nn, k) = clw1(i, k)
395  END IF
396  END DO
397  ! print*,'100 ncum,nn',ncum,nn
398  END DO
399  nn = 0
400  DO i = 1, len
401  IF (iflag1(i)==0) THEN
402  nn = nn + 1
403  cbmf(nn) = cbmf1(i)
404  plcl(nn) = plcl1(i)
405  tnk(nn) = tnk1(i)
406  qnk(nn) = qnk1(i)
407  gznk(nn) = gznk1(i)
408  nk(nn) = nk1(i)
409  icb(nn) = icb1(i)
410  iflag(nn) = iflag1(i)
411  END IF
412  END DO
413  ! print*,'150 ncum,nn',ncum,nn
414 
415  ! Initialize the tendencies, det, wd, tprime, qprime.
416 
417  DO k = 1, nl
418  DO i = 1, ncum
419  ! det(i,k)=0.0
420  ft(i, k) = 0.0
421  fu(i, k) = 0.0
422  fv(i, k) = 0.0
423  fq(i, k) = 0.0
424  dph(i, k) = ph(i, k) - ph(i, k+1)
425  ep(i, k) = 0.0
426  sigp(i, k) = sigs
427  END DO
428  END DO
429  DO i = 1, ncum
430  ! wd(i)=0.0
431  ! tprime(i)=0.0
432  ! qprime(i)=0.0
433  precip(i) = 0.0
434  ft(i, nl+1) = 0.0
435  fu(i, nl+1) = 0.0
436  fv(i, nl+1) = 0.0
437  fq(i, nl+1) = 0.0
438  END DO
439 
440  ! Compute icbmax.
441 
442  icbmax = 2
443  DO i = 1, ncum
444  icbmax = max(icbmax, icb(i))
445  END DO
446 
447 
448  ! =====================================================================
449  ! --- FIND THE REST OF THE LIFTED PARCEL TEMPERATURES
450  ! =====================================================================
451 
452  ! --- The procedure is to solve the equation.
453  ! cp*tp+L*qp+phi=cp*tnk+L*qnk+gznk.
454 
455  ! *** Calculate certain parcel quantities, including static energy ***
456 
457 
458  DO i = 1, ncum
459  ah0(i) = (cpd*(1.-qnk(i))+cl*qnk(i))*tnk(i) + qnk(i)*(lv0-clmcpv*(tnk(i)- &
460  273.15)) + gznk(i)
461  END DO
462 
463 
464  ! *** Find lifted parcel quantities above cloud base ***
465 
466 
467  DO k = minorig + 1, nl
468  DO i = 1, ncum
469  IF (k>=(icb(i)+1)) THEN
470  tg = t(i, k)
471  qg = qs(i, k)
472  alv = lv0 - clmcpv*(t(i,k)-273.15)
473 
474  ! First iteration.
475 
476  s = cpd + alv*alv*qg/(rv*t(i,k)*t(i,k))
477  s = 1./s
478  ahg = cpd*tg + (cl-cpd)*qnk(i)*t(i, k) + alv*qg + gz(i, k)
479  tg = tg + s*(ah0(i)-ahg)
480  tg = max(tg, 35.0)
481  tc = tg - 273.15
482  denom = 243.5 + tc
483  IF (tc>=0.0) THEN
484  es = 6.112*exp(17.67*tc/denom)
485  ELSE
486  es = exp(23.33086-6111.72784/tg+0.15215*log(tg))
487  END IF
488  qg = eps*es/(p(i,k)-es*(1.-eps))
489 
490  ! Second iteration.
491 
492  s = cpd + alv*alv*qg/(rv*t(i,k)*t(i,k))
493  s = 1./s
494  ahg = cpd*tg + (cl-cpd)*qnk(i)*t(i, k) + alv*qg + gz(i, k)
495  tg = tg + s*(ah0(i)-ahg)
496  tg = max(tg, 35.0)
497  tc = tg - 273.15
498  denom = 243.5 + tc
499  IF (tc>=0.0) THEN
500  es = 6.112*exp(17.67*tc/denom)
501  ELSE
502  es = exp(23.33086-6111.72784/tg+0.15215*log(tg))
503  END IF
504  qg = eps*es/(p(i,k)-es*(1.-eps))
505 
506  alv = lv0 - clmcpv*(t(i,k)-273.15)
507  ! print*,'cpd dans convect2 ',cpd
508  ! print*,'tp(i,k),ah0(i),cl,cpd,qnk(i),t(i,k),gz(i,k),alv,qg,cpd'
509  ! print*,tp(i,k),ah0(i),cl,cpd,qnk(i),t(i,k),gz(i,k),alv,qg,cpd
510  tp(i, k) = (ah0(i)-(cl-cpd)*qnk(i)*t(i,k)-gz(i,k)-alv*qg)/cpd
511  ! if (.not.cpd.gt.1000.) then
512  ! print*,'CPD=',cpd
513  ! stop
514  ! endif
515  clw(i, k) = qnk(i) - qg
516  clw(i, k) = max(0.0, clw(i,k))
517  rg = qg/(1.-qnk(i))
518  tvp(i, k) = tp(i, k)*(1.+rg*epsi)
519  END IF
520  END DO
521  END DO
522 
523  ! =====================================================================
524  ! --- SET THE PRECIPITATION EFFICIENCIES AND THE FRACTION OF
525  ! --- PRECIPITATION FALLING OUTSIDE OF CLOUD
526  ! --- THESE MAY BE FUNCTIONS OF TP(I), P(I) AND CLW(I)
527  ! =====================================================================
528 
529  DO k = minorig + 1, nl
530  DO i = 1, ncum
531  IF (k>=(nk(i)+1)) THEN
532  tca = tp(i, k) - 273.15
533  IF (tca>=0.0) THEN
534  elacrit = elcrit
535  ELSE
536  elacrit = elcrit*(1.0-tca/tlcrit)
537  END IF
538  elacrit = max(elacrit, 0.0)
539  ep(i, k) = 1.0 - elacrit/max(clw(i,k), 1.0e-8)
540  ep(i, k) = max(ep(i,k), 0.0)
541  ep(i, k) = min(ep(i,k), 1.0)
542  sigp(i, k) = sigs
543  END IF
544  END DO
545  END DO
546 
547  ! =====================================================================
548  ! --- CALCULATE VIRTUAL TEMPERATURE AND LIFTED PARCEL
549  ! --- VIRTUAL TEMPERATURE
550  ! =====================================================================
551 
552  DO k = minorig + 1, nl
553  DO i = 1, ncum
554  IF (k>=(icb(i)+1)) THEN
555  tvp(i, k) = tvp(i, k)*(1.0-qnk(i)+ep(i,k)*clw(i,k))
556  ! print*,'i,k,tvp(i,k),qnk(i),ep(i,k),clw(i,k)'
557  ! print*, i,k,tvp(i,k),qnk(i),ep(i,k),clw(i,k)
558  END IF
559  END DO
560  END DO
561  DO i = 1, ncum
562  tvp(i, nlp) = tvp(i, nl) - (gz(i,nlp)-gz(i,nl))/cpd
563  END DO
564 
565 
566  ! =====================================================================
567  ! --- NOW INITIALIZE VARIOUS ARRAYS USED IN THE COMPUTATIONS
568  ! =====================================================================
569 
570  DO i = 1, ncum*nlp
571  nent(i, 1) = 0
572  water(i, 1) = 0.0
573  evap(i, 1) = 0.0
574  mp(i, 1) = 0.0
575  m(i, 1) = 0.0
576  wt(i, 1) = omtsnow
577  hp(i, 1) = h(i, 1)
578  ! if(.not.cpn(i,1).gt.900.) then
579  ! print*,'i,lv(i,1),cpn(i,1)'
580  ! print*, i,lv(i,1),cpn(i,1)
581  ! k=(i-1)/ncum+1
582  ! print*,'i,k',mod(i,ncum),k,' cpn',cpn(mod(i,ncum),k)
583  ! stop
584  ! endif
585  lvcp(i, 1) = lv(i, 1)/cpn(i, 1)
586  END DO
587 
588  DO i = 1, ncum*nlp*nlp
589  elij(i, 1, 1) = 0.0
590  ment(i, 1, 1) = 0.0
591  sij(i, 1, 1) = 0.0
592  END DO
593 
594  DO k = 1, nlp
595  DO j = 1, nlp
596  DO i = 1, ncum
597  qent(i, k, j) = q(i, j)
598  uent(i, k, j) = u(i, j)
599  vent(i, k, j) = v(i, j)
600  END DO
601  END DO
602  END DO
603 
604  DO i = 1, ncum
605  qp(i, 1) = q(i, 1)
606  up(i, 1) = u(i, 1)
607  vp(i, 1) = v(i, 1)
608  END DO
609  DO k = 2, nlp
610  DO i = 1, ncum
611  qp(i, k) = q(i, k-1)
612  up(i, k) = u(i, k-1)
613  vp(i, k) = v(i, k-1)
614  END DO
615  END DO
616 
617  ! =====================================================================
618  ! --- FIND THE FIRST MODEL LEVEL (INB1) ABOVE THE PARCEL'S
619  ! --- HIGHEST LEVEL OF NEUTRAL BUOYANCY
620  ! --- AND THE HIGHEST LEVEL OF POSITIVE CAPE (INB)
621  ! =====================================================================
622 
623  DO i = 1, ncum
624  cape(i) = 0.0
625  capem(i) = 0.0
626  inb(i) = icb(i) + 1
627  inb1(i) = inb(i)
628  END DO
629 
630  ! Originial Code
631 
632  ! do 530 k=minorig+1,nl-1
633  ! do 520 i=1,ncum
634  ! if(k.ge.(icb(i)+1))then
635  ! by=(tvp(i,k)-tv(i,k))*dph(i,k)/p(i,k)
636  ! byp=(tvp(i,k+1)-tv(i,k+1))*dph(i,k+1)/p(i,k+1)
637  ! cape(i)=cape(i)+by
638  ! if(by.ge.0.0)inb1(i)=k+1
639  ! if(cape(i).gt.0.0)then
640  ! inb(i)=k+1
641  ! capem(i)=cape(i)
642  ! endif
643  ! endif
644  ! 520 continue
645  ! 530 continue
646  ! do 540 i=1,ncum
647  ! byp=(tvp(i,nl)-tv(i,nl))*dph(i,nl)/p(i,nl)
648  ! cape(i)=capem(i)+byp
649  ! defrac=capem(i)-cape(i)
650  ! defrac=max(defrac,0.001)
651  ! frac(i)=-cape(i)/defrac
652  ! frac(i)=min(frac(i),1.0)
653  ! frac(i)=max(frac(i),0.0)
654  ! 540 continue
655 
656  ! K Emanuel fix
657 
658  ! call zilch(byp,ncum)
659  ! do 530 k=minorig+1,nl-1
660  ! do 520 i=1,ncum
661  ! if(k.ge.(icb(i)+1))then
662  ! by=(tvp(i,k)-tv(i,k))*dph(i,k)/p(i,k)
663  ! cape(i)=cape(i)+by
664  ! if(by.ge.0.0)inb1(i)=k+1
665  ! if(cape(i).gt.0.0)then
666  ! inb(i)=k+1
667  ! capem(i)=cape(i)
668  ! byp(i)=(tvp(i,k+1)-tv(i,k+1))*dph(i,k+1)/p(i,k+1)
669  ! endif
670  ! endif
671  ! 520 continue
672  ! 530 continue
673  ! do 540 i=1,ncum
674  ! inb(i)=max(inb(i),inb1(i))
675  ! cape(i)=capem(i)+byp(i)
676  ! defrac=capem(i)-cape(i)
677  ! defrac=max(defrac,0.001)
678  ! frac(i)=-cape(i)/defrac
679  ! frac(i)=min(frac(i),1.0)
680  ! frac(i)=max(frac(i),0.0)
681  ! 540 continue
682 
683  ! J Teixeira fix
684 
685  CALL zilch(byp, ncum)
686  DO i = 1, ncum
687  lcape(i) = .true.
688  END DO
689  DO k = minorig + 1, nl - 1
690  DO i = 1, ncum
691  IF (cape(i)<0.0) lcape(i) = .false.
692  IF ((k>=(icb(i)+1)) .AND. lcape(i)) THEN
693  by = (tvp(i,k)-tv(i,k))*dph(i, k)/p(i, k)
694  byp(i) = (tvp(i,k+1)-tv(i,k+1))*dph(i, k+1)/p(i, k+1)
695  cape(i) = cape(i) + by
696  IF (by>=0.0) inb1(i) = k + 1
697  IF (cape(i)>0.0) THEN
698  inb(i) = k + 1
699  capem(i) = cape(i)
700  END IF
701  END IF
702  END DO
703  END DO
704  DO i = 1, ncum
705  cape(i) = capem(i) + byp(i)
706  defrac = capem(i) - cape(i)
707  defrac = max(defrac, 0.001)
708  frac(i) = -cape(i)/defrac
709  frac(i) = min(frac(i), 1.0)
710  frac(i) = max(frac(i), 0.0)
711  END DO
712 
713  ! =====================================================================
714  ! --- CALCULATE LIQUID WATER STATIC ENERGY OF LIFTED PARCEL
715  ! =====================================================================
716 
717  DO k = minorig + 1, nl
718  DO i = 1, ncum
719  IF ((k>=icb(i)) .AND. (k<=inb(i))) THEN
720  hp(i, k) = h(i, nk(i)) + (lv(i,k)+(cpd-cpv)*t(i,k))*ep(i, k)*clw(i, k &
721  )
722  END IF
723  END DO
724  END DO
725 
726  ! =====================================================================
727  ! --- CALCULATE CLOUD BASE MASS FLUX AND RATES OF MIXING, M(I),
728  ! --- AT EACH MODEL LEVEL
729  ! =====================================================================
730 
731  ! tvpplcl = parcel temperature lifted adiabatically from level
732  ! icb-1 to the LCL.
733  ! tvaplcl = virtual temperature at the LCL.
734 
735  DO i = 1, ncum
736  dtpbl(i) = 0.0
737  tvpplcl(i) = tvp(i, icb(i)-1) - rd*tvp(i, icb(i)-1)*(p(i,icb(i)-1)-plcl(i &
738  ))/(cpn(i,icb(i)-1)*p(i,icb(i)-1))
739  tvaplcl(i) = tv(i, icb(i)) + (tvp(i,icb(i))-tvp(i,icb(i)+1))*(plcl(i)-p(i &
740  ,icb(i)))/(p(i,icb(i))-p(i,icb(i)+1))
741  END DO
742 
743  ! -------------------------------------------------------------------
744  ! --- Interpolate difference between lifted parcel and
745  ! --- environmental temperatures to lifted condensation level
746  ! -------------------------------------------------------------------
747 
748  ! dtpbl = average of tvp-tv in the PBL (k=nk to icb-1).
749 
750  DO k = minorig, icbmax
751  DO i = 1, ncum
752  IF ((k>=nk(i)) .AND. (k<=(icb(i)-1))) THEN
753  dtpbl(i) = dtpbl(i) + (tvp(i,k)-tv(i,k))*dph(i, k)
754  END IF
755  END DO
756  END DO
757  DO i = 1, ncum
758  dtpbl(i) = dtpbl(i)/(ph(i,nk(i))-ph(i,icb(i)))
759  dtmin(i) = tvpplcl(i) - tvaplcl(i) + dtmax + dtpbl(i)
760  END DO
761 
762  ! -------------------------------------------------------------------
763  ! --- Adjust cloud base mass flux
764  ! -------------------------------------------------------------------
765 
766  DO i = 1, ncum
767  work(i) = cbmf(i)
768  cbmf(i) = max(0.0, (1.0-damp)*cbmf(i)+0.1*alpha*dtmin(i))
769  IF ((work(i)==0.0) .AND. (cbmf(i)==0.0)) THEN
770  iflag(i) = 3
771  END IF
772  END DO
773 
774  ! -------------------------------------------------------------------
775  ! --- Calculate rates of mixing, m(i)
776  ! -------------------------------------------------------------------
777 
778  CALL zilch(work, ncum)
779 
780  DO j = minorig + 1, nl
781  DO i = 1, ncum
782  IF ((j>=(icb(i)+1)) .AND. (j<=inb(i))) THEN
783  k = min(j, inb1(i))
784  dbo = abs(tv(i,k+1)-tvp(i,k+1)-tv(i,k-1)+tvp(i,k-1)) + &
785  entp*0.04*(ph(i,k)-ph(i,k+1))
786  work(i) = work(i) + dbo
787  m(i, j) = cbmf(i)*dbo
788  END IF
789  END DO
790  END DO
791  DO k = minorig + 1, nl
792  DO i = 1, ncum
793  IF ((k>=(icb(i)+1)) .AND. (k<=inb(i))) THEN
794  m(i, k) = m(i, k)/work(i)
795  END IF
796  END DO
797  END DO
798 
799 
800  ! =====================================================================
801  ! --- CALCULATE ENTRAINED AIR MASS FLUX (ment), TOTAL WATER MIXING
802  ! --- RATIO (QENT), TOTAL CONDENSED WATER (elij), AND MIXING
803  ! --- FRACTION (sij)
804  ! =====================================================================
805 
806 
807  DO i = minorig + 1, nl
808  DO j = minorig + 1, nl
809  DO ij = 1, ncum
810  IF ((i>=(icb(ij)+1)) .AND. (j>=icb(ij)) .AND. (i<=inb(ij)) .AND. (j<= &
811  inb(ij))) THEN
812  qti = qnk(ij) - ep(ij, i)*clw(ij, i)
813  bf2 = 1. + lv(ij, j)*lv(ij, j)*qs(ij, j)/(rv*t(ij,j)*t(ij,j)*cpd)
814  anum = h(ij, j) - hp(ij, i) + (cpv-cpd)*t(ij, j)*(qti-q(ij,j))
815  denom = h(ij, i) - hp(ij, i) + (cpd-cpv)*(q(ij,i)-qti)*t(ij, j)
816  dei = denom
817  IF (abs(dei)<0.01) dei = 0.01
818  sij(ij, i, j) = anum/dei
819  sij(ij, i, i) = 1.0
820  altem = sij(ij, i, j)*q(ij, i) + (1.-sij(ij,i,j))*qti - qs(ij, j)
821  altem = altem/bf2
822  cwat = clw(ij, j)*(1.-ep(ij,j))
823  stemp = sij(ij, i, j)
824  IF ((stemp<0.0 .OR. stemp>1.0 .OR. altem>cwat) .AND. j>i) THEN
825  anum = anum - lv(ij, j)*(qti-qs(ij,j)-cwat*bf2)
826  denom = denom + lv(ij, j)*(q(ij,i)-qti)
827  IF (abs(denom)<0.01) denom = 0.01
828  sij(ij, i, j) = anum/denom
829  altem = sij(ij, i, j)*q(ij, i) + (1.-sij(ij,i,j))*qti - qs(ij, j)
830  altem = altem - (bf2-1.)*cwat
831  END IF
832  IF (sij(ij,i,j)>0.0 .AND. sij(ij,i,j)<0.9) THEN
833  qent(ij, i, j) = sij(ij, i, j)*q(ij, i) + (1.-sij(ij,i,j))*qti
834  uent(ij, i, j) = sij(ij, i, j)*u(ij, i) + &
835  (1.-sij(ij,i,j))*u(ij, nk(ij))
836  vent(ij, i, j) = sij(ij, i, j)*v(ij, i) + &
837  (1.-sij(ij,i,j))*v(ij, nk(ij))
838  elij(ij, i, j) = altem
839  elij(ij, i, j) = max(0.0, elij(ij,i,j))
840  ment(ij, i, j) = m(ij, i)/(1.-sij(ij,i,j))
841  nent(ij, i) = nent(ij, i) + 1
842  END IF
843  sij(ij, i, j) = max(0.0, sij(ij,i,j))
844  sij(ij, i, j) = min(1.0, sij(ij,i,j))
845  END IF
846  END DO
847  END DO
848 
849  ! *** If no air can entrain at level i assume that updraft detrains
850  ! ***
851  ! *** at that level and calculate detrained air flux and properties
852  ! ***
853 
854  DO ij = 1, ncum
855  IF ((i>=(icb(ij)+1)) .AND. (i<=inb(ij)) .AND. (nent(ij,i)==0)) THEN
856  ment(ij, i, i) = m(ij, i)
857  qent(ij, i, i) = q(ij, nk(ij)) - ep(ij, i)*clw(ij, i)
858  uent(ij, i, i) = u(ij, nk(ij))
859  vent(ij, i, i) = v(ij, nk(ij))
860  elij(ij, i, i) = clw(ij, i)
861  sij(ij, i, i) = 1.0
862  END IF
863  END DO
864  END DO
865 
866  DO i = 1, ncum
867  sij(i, inb(i), inb(i)) = 1.0
868  END DO
869 
870  ! =====================================================================
871  ! --- NORMALIZE ENTRAINED AIR MASS FLUXES
872  ! --- TO REPRESENT EQUAL PROBABILITIES OF MIXING
873  ! =====================================================================
874 
875 
876  CALL zilch(bsum, ncum*nlp)
877  DO ij = 1, ncum
878  lwork(ij) = .false.
879  END DO
880  DO i = minorig + 1, nl
881 
882  num1 = 0
883  DO ij = 1, ncum
884  IF ((i>=icb(ij)+1) .AND. (i<=inb(ij))) num1 = num1 + 1
885  END DO
886  IF (num1<=0) GO TO 789
887 
888  DO ij = 1, ncum
889  IF ((i>=icb(ij)+1) .AND. (i<=inb(ij))) THEN
890  lwork(ij) = (nent(ij,i)/=0)
891  qp1 = q(ij, nk(ij)) - ep(ij, i)*clw(ij, i)
892  anum = h(ij, i) - hp(ij, i) - lv(ij, i)*(qp1-qs(ij,i))
893  denom = h(ij, i) - hp(ij, i) + lv(ij, i)*(q(ij,i)-qp1)
894  IF (abs(denom)<0.01) denom = 0.01
895  scrit(ij) = anum/denom
896  alt = qp1 - qs(ij, i) + scrit(ij)*(q(ij,i)-qp1)
897  IF (scrit(ij)<0.0 .OR. alt<0.0) scrit(ij) = 1.0
898  asij(ij) = 0.0
899  smin(ij) = 1.0
900  END IF
901  END DO
902  DO j = minorig, nl
903 
904  num2 = 0
905  DO ij = 1, ncum
906  IF ((i>=icb(ij)+1) .AND. (i<=inb(ij)) .AND. (j>=icb( &
907  ij)) .AND. (j<=inb(ij)) .AND. lwork(ij)) num2 = num2 + 1
908  END DO
909  IF (num2<=0) GO TO 783
910 
911  DO ij = 1, ncum
912  IF ((i>=icb(ij)+1) .AND. (i<=inb(ij)) .AND. (j>=icb( &
913  ij)) .AND. (j<=inb(ij)) .AND. lwork(ij)) THEN
914  IF (sij(ij,i,j)>0.0 .AND. sij(ij,i,j)<0.9) THEN
915  IF (j>i) THEN
916  smid = min(sij(ij,i,j), scrit(ij))
917  sjmax = smid
918  sjmin = smid
919  IF (smid<smin(ij) .AND. sij(ij,i,j+1)<smid) THEN
920  smin(ij) = smid
921  sjmax = min(sij(ij,i,j+1), sij(ij,i,j), scrit(ij))
922  sjmin = max(sij(ij,i,j-1), sij(ij,i,j))
923  sjmin = min(sjmin, scrit(ij))
924  END IF
925  ELSE
926  sjmax = max(sij(ij,i,j+1), scrit(ij))
927  smid = max(sij(ij,i,j), scrit(ij))
928  sjmin = 0.0
929  IF (j>1) sjmin = sij(ij, i, j-1)
930  sjmin = max(sjmin, scrit(ij))
931  END IF
932  delp = abs(sjmax-smid)
933  delm = abs(sjmin-smid)
934  asij(ij) = asij(ij) + (delp+delm)*(ph(ij,j)-ph(ij,j+1))
935  ment(ij, i, j) = ment(ij, i, j)*(delp+delm)*(ph(ij,j)-ph(ij,j+1))
936  END IF
937  END IF
938  END DO
939 783 END DO
940  DO ij = 1, ncum
941  IF ((i>=icb(ij)+1) .AND. (i<=inb(ij)) .AND. lwork(ij)) THEN
942  asij(ij) = max(1.0e-21, asij(ij))
943  asij(ij) = 1.0/asij(ij)
944  bsum(ij, i) = 0.0
945  END IF
946  END DO
947  DO j = minorig, nl + 1
948  DO ij = 1, ncum
949  IF ((i>=icb(ij)+1) .AND. (i<=inb(ij)) .AND. (j>=icb( &
950  ij)) .AND. (j<=inb(ij)) .AND. lwork(ij)) THEN
951  ment(ij, i, j) = ment(ij, i, j)*asij(ij)
952  bsum(ij, i) = bsum(ij, i) + ment(ij, i, j)
953  END IF
954  END DO
955  END DO
956  DO ij = 1, ncum
957  IF ((i>=icb(ij)+1) .AND. (i<=inb(ij)) .AND. (bsum(ij, &
958  i)<1.0e-18) .AND. lwork(ij)) THEN
959  nent(ij, i) = 0
960  ment(ij, i, i) = m(ij, i)
961  qent(ij, i, i) = q(ij, nk(ij)) - ep(ij, i)*clw(ij, i)
962  uent(ij, i, i) = u(ij, nk(ij))
963  vent(ij, i, i) = v(ij, nk(ij))
964  elij(ij, i, i) = clw(ij, i)
965  sij(ij, i, i) = 1.0
966  END IF
967  END DO
968 789 END DO
969 
970  ! =====================================================================
971  ! --- PRECIPITATING DOWNDRAFT CALCULATION
972  ! =====================================================================
973 
974  ! *** Check whether ep(inb)=0, if so, skip precipitating ***
975  ! *** downdraft calculation ***
976 
977 
978  ! *** Integrate liquid water equation to find condensed water ***
979  ! *** and condensed water flux ***
980 
981 
982  DO i = 1, ncum
983  jtt(i) = 2
984  IF (ep(i,inb(i))<=0.0001) iflag(i) = 2
985  IF (iflag(i)==0) THEN
986  lwork(i) = .true.
987  ELSE
988  lwork(i) = .false.
989  END IF
990  END DO
991 
992  ! *** Begin downdraft loop ***
993 
994 
995  CALL zilch(wdtrain, ncum)
996  DO i = nl + 1, 1, -1
997 
998  num1 = 0
999  DO ij = 1, ncum
1000  IF ((i<=inb(ij)) .AND. lwork(ij)) num1 = num1 + 1
1001  END DO
1002  IF (num1<=0) GO TO 899
1003 
1004 
1005  ! *** Calculate detrained precipitation ***
1006 
1007  DO ij = 1, ncum
1008  IF ((i<=inb(ij)) .AND. (lwork(ij))) THEN
1009  wdtrain(ij) = g*ep(ij, i)*m(ij, i)*clw(ij, i)
1010  END IF
1011  END DO
1012 
1013  IF (i>1) THEN
1014  DO j = 1, i - 1
1015  DO ij = 1, ncum
1016  IF ((i<=inb(ij)) .AND. (lwork(ij))) THEN
1017  awat = elij(ij, j, i) - (1.-ep(ij,i))*clw(ij, i)
1018  awat = max(0.0, awat)
1019  wdtrain(ij) = wdtrain(ij) + g*awat*ment(ij, j, i)
1020  END IF
1021  END DO
1022  END DO
1023  END IF
1024 
1025  ! *** Find rain water and evaporation using provisional ***
1026  ! *** estimates of qp(i)and qp(i-1) ***
1027 
1028 
1029  ! *** Value of terminal velocity and coeffecient of evaporation for snow
1030  ! ***
1031 
1032  DO ij = 1, ncum
1033  IF ((i<=inb(ij)) .AND. (lwork(ij))) THEN
1034  coeff = coeffs
1035  wt(ij, i) = omtsnow
1036 
1037  ! *** Value of terminal velocity and coeffecient of evaporation for
1038  ! rain ***
1039 
1040  IF (t(ij,i)>273.0) THEN
1041  coeff = coeffr
1042  wt(ij, i) = omtrain
1043  END IF
1044  qsm = 0.5*(q(ij,i)+qp(ij,i+1))
1045  afac = coeff*ph(ij, i)*(qs(ij,i)-qsm)/(1.0e4+2.0e3*ph(ij,i)*qs(ij,i))
1046  afac = max(afac, 0.0)
1047  sigt = sigp(ij, i)
1048  sigt = max(0.0, sigt)
1049  sigt = min(1.0, sigt)
1050  b6 = 100.*(ph(ij,i)-ph(ij,i+1))*sigt*afac/wt(ij, i)
1051  c6 = (water(ij,i+1)*wt(ij,i+1)+wdtrain(ij)/sigd)/wt(ij, i)
1052  revap = 0.5*(-b6+sqrt(b6*b6+4.*c6))
1053  evap(ij, i) = sigt*afac*revap
1054  water(ij, i) = revap*revap
1055 
1056  ! *** Calculate precipitating downdraft mass flux under ***
1057  ! *** hydrostatic approximation ***
1058 
1059  IF (i>1) THEN
1060  dhdp = (h(ij,i)-h(ij,i-1))/(p(ij,i-1)-p(ij,i))
1061  dhdp = max(dhdp, 10.0)
1062  mp(ij, i) = 100.*ginv*lv(ij, i)*sigd*evap(ij, i)/dhdp
1063  mp(ij, i) = max(mp(ij,i), 0.0)
1064 
1065  ! *** Add small amount of inertia to downdraft ***
1066 
1067  fac = 20.0/(ph(ij,i-1)-ph(ij,i))
1068  mp(ij, i) = (fac*mp(ij,i+1)+mp(ij,i))/(1.+fac)
1069 
1070  ! *** Force mp to decrease linearly to zero
1071  ! ***
1072  ! *** between about 950 mb and the surface
1073  ! ***
1074 
1075  IF (p(ij,i)>(0.949*p(ij,1))) THEN
1076  jtt(ij) = max(jtt(ij), i)
1077  mp(ij, i) = mp(ij, jtt(ij))*(p(ij,1)-p(ij,i))/ &
1078  (p(ij,1)-p(ij,jtt(ij)))
1079  END IF
1080  END IF
1081 
1082  ! *** Find mixing ratio of precipitating downdraft ***
1083 
1084  IF (i/=inb(ij)) THEN
1085  IF (i==1) THEN
1086  qstm = qs(ij, 1)
1087  ELSE
1088  qstm = qs(ij, i-1)
1089  END IF
1090  IF (mp(ij,i)>mp(ij,i+1)) THEN
1091  rat = mp(ij, i+1)/mp(ij, i)
1092  qp(ij, i) = qp(ij, i+1)*rat + q(ij, i)*(1.0-rat) + &
1093  100.*ginv*sigd*(ph(ij,i)-ph(ij,i+1))*(evap(ij,i)/mp(ij,i))
1094  up(ij, i) = up(ij, i+1)*rat + u(ij, i)*(1.-rat)
1095  vp(ij, i) = vp(ij, i+1)*rat + v(ij, i)*(1.-rat)
1096  ELSE
1097  IF (mp(ij,i+1)>0.0) THEN
1098  qp(ij, i) = (gz(ij,i+1)-gz(ij,i)+qp(ij,i+1)*(lv(ij,i+1)+t(ij, &
1099  i+1)*(cl-cpd))+cpd*(t(ij,i+1)-t(ij, &
1100  i)))/(lv(ij,i)+t(ij,i)*(cl-cpd))
1101  up(ij, i) = up(ij, i+1)
1102  vp(ij, i) = vp(ij, i+1)
1103  END IF
1104  END IF
1105  qp(ij, i) = min(qp(ij,i), qstm)
1106  qp(ij, i) = max(qp(ij,i), 0.0)
1107  END IF
1108  END IF
1109  END DO
1110 899 END DO
1111 
1112  ! *** Calculate surface precipitation in mm/day ***
1113 
1114  DO i = 1, ncum
1115  IF (iflag(i)<=1) THEN
1116  ! c precip(i)=precip(i)+wt(i,1)*sigd*water(i,1)*3600.*24000.
1117  ! c & /(rowl*g)
1118  ! c precip(i)=precip(i)*delt/86400.
1119  precip(i) = wt(i, 1)*sigd*water(i, 1)*86400/g
1120  END IF
1121  END DO
1122 
1123 
1124  ! *** Calculate downdraft velocity scale and surface temperature and ***
1125  ! *** water vapor fluctuations ***
1126 
1127  ! wd=beta*abs(mp(icb))*0.01*rd*t(icb)/(sigd*p(icb))
1128  ! qprime=0.5*(qp(1)-q(1))
1129  ! tprime=lv0*qprime/cpd
1130 
1131  ! *** Calculate tendencies of lowest level potential temperature ***
1132  ! *** and mixing ratio ***
1133 
1134  DO i = 1, ncum
1135  work(i) = 0.01/(ph(i,1)-ph(i,2))
1136  am(i) = 0.0
1137  END DO
1138  DO k = 2, nl
1139  DO i = 1, ncum
1140  IF ((nk(i)==1) .AND. (k<=inb(i)) .AND. (nk(i)==1)) THEN
1141  am(i) = am(i) + m(i, k)
1142  END IF
1143  END DO
1144  END DO
1145  DO i = 1, ncum
1146  IF ((g*work(i)*am(i))>=delti) iflag(i) = 1
1147  ft(i, 1) = ft(i, 1) + g*work(i)*am(i)*(t(i,2)-t(i,1)+(gz(i,2)-gz(i, &
1148  1))/cpn(i,1))
1149  ft(i, 1) = ft(i, 1) - lvcp(i, 1)*sigd*evap(i, 1)
1150  ft(i, 1) = ft(i, 1) + sigd*wt(i, 2)*(cl-cpd)*water(i, 2)*(t(i,2)-t(i,1))* &
1151  work(i)/cpn(i, 1)
1152  fq(i, 1) = fq(i, 1) + g*mp(i, 2)*(qp(i,2)-q(i,1))*work(i) + &
1153  sigd*evap(i, 1)
1154  fq(i, 1) = fq(i, 1) + g*am(i)*(q(i,2)-q(i,1))*work(i)
1155  fu(i, 1) = fu(i, 1) + g*work(i)*(mp(i,2)*(up(i,2)-u(i,1))+am(i)*(u(i, &
1156  2)-u(i,1)))
1157  fv(i, 1) = fv(i, 1) + g*work(i)*(mp(i,2)*(vp(i,2)-v(i,1))+am(i)*(v(i, &
1158  2)-v(i,1)))
1159  END DO
1160  DO j = 2, nl
1161  DO i = 1, ncum
1162  IF (j<=inb(i)) THEN
1163  fq(i, 1) = fq(i, 1) + g*work(i)*ment(i, j, 1)*(qent(i,j,1)-q(i,1))
1164  fu(i, 1) = fu(i, 1) + g*work(i)*ment(i, j, 1)*(uent(i,j,1)-u(i,1))
1165  fv(i, 1) = fv(i, 1) + g*work(i)*ment(i, j, 1)*(vent(i,j,1)-v(i,1))
1166  END IF
1167  END DO
1168  END DO
1169 
1170  ! *** Calculate tendencies of potential temperature and mixing ratio ***
1171  ! *** at levels above the lowest level ***
1172 
1173  ! *** First find the net saturated updraft and downdraft mass fluxes ***
1174  ! *** through each level ***
1175 
1176  DO i = 2, nl + 1
1177 
1178  num1 = 0
1179  DO ij = 1, ncum
1180  IF (i<=inb(ij)) num1 = num1 + 1
1181  END DO
1182  IF (num1<=0) GO TO 1500
1183 
1184  CALL zilch(amp1, ncum)
1185  CALL zilch(ad, ncum)
1186 
1187  DO k = i + 1, nl + 1
1188  DO ij = 1, ncum
1189  IF ((i>=nk(ij)) .AND. (i<=inb(ij)) .AND. (k<=(inb(ij)+1))) THEN
1190  amp1(ij) = amp1(ij) + m(ij, k)
1191  END IF
1192  END DO
1193  END DO
1194 
1195  DO k = 1, i
1196  DO j = i + 1, nl + 1
1197  DO ij = 1, ncum
1198  IF ((j<=(inb(ij)+1)) .AND. (i<=inb(ij))) THEN
1199  amp1(ij) = amp1(ij) + ment(ij, k, j)
1200  END IF
1201  END DO
1202  END DO
1203  END DO
1204  DO k = 1, i - 1
1205  DO j = i, nl + 1
1206  DO ij = 1, ncum
1207  IF ((i<=inb(ij)) .AND. (j<=inb(ij))) THEN
1208  ad(ij) = ad(ij) + ment(ij, j, k)
1209  END IF
1210  END DO
1211  END DO
1212  END DO
1213 
1214  DO ij = 1, ncum
1215  IF (i<=inb(ij)) THEN
1216  dpinv = 0.01/(ph(ij,i)-ph(ij,i+1))
1217  cpinv = 1.0/cpn(ij, i)
1218 
1219  ft(ij, i) = ft(ij, i) + g*dpinv*(amp1(ij)*(t(ij,i+1)-t(ij, &
1220  i)+(gz(ij,i+1)-gz(ij,i))*cpinv)-ad(ij)*(t(ij,i)-t(ij, &
1221  i-1)+(gz(ij,i)-gz(ij,i-1))*cpinv)) - sigd*lvcp(ij, i)*evap(ij, i)
1222  ft(ij, i) = ft(ij, i) + g*dpinv*ment(ij, i, i)*(hp(ij,i)-h(ij,i)+t(ij &
1223  ,i)*(cpv-cpd)*(q(ij,i)-qent(ij,i,i)))*cpinv
1224  ft(ij, i) = ft(ij, i) + sigd*wt(ij, i+1)*(cl-cpd)*water(ij, i+1)*(t( &
1225  ij,i+1)-t(ij,i))*dpinv*cpinv
1226  fq(ij, i) = fq(ij, i) + g*dpinv*(amp1(ij)*(q(ij,i+1)-q(ij, &
1227  i))-ad(ij)*(q(ij,i)-q(ij,i-1)))
1228  fu(ij, i) = fu(ij, i) + g*dpinv*(amp1(ij)*(u(ij,i+1)-u(ij, &
1229  i))-ad(ij)*(u(ij,i)-u(ij,i-1)))
1230  fv(ij, i) = fv(ij, i) + g*dpinv*(amp1(ij)*(v(ij,i+1)-v(ij, &
1231  i))-ad(ij)*(v(ij,i)-v(ij,i-1)))
1232  END IF
1233  END DO
1234  DO k = 1, i - 1
1235  DO ij = 1, ncum
1236  IF (i<=inb(ij)) THEN
1237  awat = elij(ij, k, i) - (1.-ep(ij,i))*clw(ij, i)
1238  awat = max(awat, 0.0)
1239  fq(ij, i) = fq(ij, i) + g*dpinv*ment(ij, k, i)*(qent(ij,k,i)-awat-q &
1240  (ij,i))
1241  fu(ij, i) = fu(ij, i) + g*dpinv*ment(ij, k, i)*(uent(ij,k,i)-u(ij,i &
1242  ))
1243  fv(ij, i) = fv(ij, i) + g*dpinv*ment(ij, k, i)*(vent(ij,k,i)-v(ij,i &
1244  ))
1245  END IF
1246  END DO
1247  END DO
1248  DO k = i, nl + 1
1249  DO ij = 1, ncum
1250  IF ((i<=inb(ij)) .AND. (k<=inb(ij))) THEN
1251  fq(ij, i) = fq(ij, i) + g*dpinv*ment(ij, k, i)*(qent(ij,k,i)-q(ij,i &
1252  ))
1253  fu(ij, i) = fu(ij, i) + g*dpinv*ment(ij, k, i)*(uent(ij,k,i)-u(ij,i &
1254  ))
1255  fv(ij, i) = fv(ij, i) + g*dpinv*ment(ij, k, i)*(vent(ij,k,i)-v(ij,i &
1256  ))
1257  END IF
1258  END DO
1259  END DO
1260  DO ij = 1, ncum
1261  IF (i<=inb(ij)) THEN
1262  fq(ij, i) = fq(ij, i) + sigd*evap(ij, i) + g*(mp(ij,i+1)*(qp(ij, &
1263  i+1)-q(ij,i))-mp(ij,i)*(qp(ij,i)-q(ij,i-1)))*dpinv
1264  fu(ij, i) = fu(ij, i) + g*(mp(ij,i+1)*(up(ij,i+1)-u(ij, &
1265  i))-mp(ij,i)*(up(ij,i)-u(ij,i-1)))*dpinv
1266  fv(ij, i) = fv(ij, i) + g*(mp(ij,i+1)*(vp(ij,i+1)-v(ij, &
1267  i))-mp(ij,i)*(vp(ij,i)-v(ij,i-1)))*dpinv
1268  END IF
1269  END DO
1270 1500 END DO
1271 
1272  ! *** Adjust tendencies at top of convection layer to reflect ***
1273  ! *** actual position of the level zero cape ***
1274 
1275  DO ij = 1, ncum
1276  fqold = fq(ij, inb(ij))
1277  fq(ij, inb(ij)) = fq(ij, inb(ij))*(1.-frac(ij))
1278  fq(ij, inb(ij)-1) = fq(ij, inb(ij)-1) + frac(ij)*fqold*((ph(ij, &
1279  inb(ij))-ph(ij,inb(ij)+1))/(ph(ij,inb(ij)-1)-ph(ij, &
1280  inb(ij))))*lv(ij, inb(ij))/lv(ij, inb(ij)-1)
1281  ftold = ft(ij, inb(ij))
1282  ft(ij, inb(ij)) = ft(ij, inb(ij))*(1.-frac(ij))
1283  ft(ij, inb(ij)-1) = ft(ij, inb(ij)-1) + frac(ij)*ftold*((ph(ij, &
1284  inb(ij))-ph(ij,inb(ij)+1))/(ph(ij,inb(ij)-1)-ph(ij, &
1285  inb(ij))))*cpn(ij, inb(ij))/cpn(ij, inb(ij)-1)
1286  fuold = fu(ij, inb(ij))
1287  fu(ij, inb(ij)) = fu(ij, inb(ij))*(1.-frac(ij))
1288  fu(ij, inb(ij)-1) = fu(ij, inb(ij)-1) + frac(ij)*fuold*((ph(ij, &
1289  inb(ij))-ph(ij,inb(ij)+1))/(ph(ij,inb(ij)-1)-ph(ij,inb(ij))))
1290  fvold = fv(ij, inb(ij))
1291  fv(ij, inb(ij)) = fv(ij, inb(ij))*(1.-frac(ij))
1292  fv(ij, inb(ij)-1) = fv(ij, inb(ij)-1) + frac(ij)*fvold*((ph(ij, &
1293  inb(ij))-ph(ij,inb(ij)+1))/(ph(ij,inb(ij)-1)-ph(ij,inb(ij))))
1294  END DO
1295 
1296  ! *** Very slightly adjust tendencies to force exact ***
1297  ! *** enthalpy, momentum and tracer conservation ***
1298 
1299  DO ij = 1, ncum
1300  ents(ij) = 0.0
1301  uav(ij) = 0.0
1302  vav(ij) = 0.0
1303  DO i = 1, inb(ij)
1304  ents(ij) = ents(ij) + (cpn(ij,i)*ft(ij,i)+lv(ij,i)*fq(ij,i))*(ph(ij,i)- &
1305  ph(ij,i+1))
1306  uav(ij) = uav(ij) + fu(ij, i)*(ph(ij,i)-ph(ij,i+1))
1307  vav(ij) = vav(ij) + fv(ij, i)*(ph(ij,i)-ph(ij,i+1))
1308  END DO
1309  END DO
1310  DO ij = 1, ncum
1311  ents(ij) = ents(ij)/(ph(ij,1)-ph(ij,inb(ij)+1))
1312  uav(ij) = uav(ij)/(ph(ij,1)-ph(ij,inb(ij)+1))
1313  vav(ij) = vav(ij)/(ph(ij,1)-ph(ij,inb(ij)+1))
1314  END DO
1315  DO ij = 1, ncum
1316  DO i = 1, inb(ij)
1317  ft(ij, i) = ft(ij, i) - ents(ij)/cpn(ij, i)
1318  fu(ij, i) = (1.-cu)*(fu(ij,i)-uav(ij))
1319  fv(ij, i) = (1.-cu)*(fv(ij,i)-vav(ij))
1320  END DO
1321  END DO
1322 
1323  DO k = 1, nl + 1
1324  DO i = 1, ncum
1325  IF ((q(i,k)+delt*fq(i,k))<0.0) iflag(i) = 10
1326  END DO
1327  END DO
1328 
1329 
1330  DO i = 1, ncum
1331  IF (iflag(i)>2) THEN
1332  precip(i) = 0.0
1333  cbmf(i) = 0.0
1334  END IF
1335  END DO
1336  DO k = 1, nl
1337  DO i = 1, ncum
1338  IF (iflag(i)>2) THEN
1339  ft(i, k) = 0.0
1340  fq(i, k) = 0.0
1341  fu(i, k) = 0.0
1342  fv(i, k) = 0.0
1343  END IF
1344  END DO
1345  END DO
1346  DO i = 1, ncum
1347  precip1(idcum(i)) = precip(i)
1348  cbmf1(idcum(i)) = cbmf(i)
1349  iflag1(idcum(i)) = iflag(i)
1350  END DO
1351  DO k = 1, nl
1352  DO i = 1, ncum
1353  ft1(idcum(i), k) = ft(i, k)
1354  fq1(idcum(i), k) = fq(i, k)
1355  fu1(idcum(i), k) = fu(i, k)
1356  fv1(idcum(i), k) = fv(i, k)
1357  END DO
1358  END DO
1359 
1360  DO k = 1, nd
1361  DO i = 1, len
1362  ma(i, k) = 0.
1363  END DO
1364  END DO
1365  DO k = nl, 1, -1
1366  DO i = 1, ncum
1367  ma(i, k) = ma(i, k+1) + m(i, k)
1368  END DO
1369  END DO
1370 
1371  RETURN
1372 END SUBROUTINE convect2
1373 
!$Id!Thermodynamical constants for cpv
Definition: cvthermo.h:6
!$Id!Parameters for parameters that control the rate of approach!to quasi equilibrium noff nlm real tlcrit real entp real sigd real coeffs real dtmax real cu real betad real damp real delta COMMON cvparam nlm tlcrit sigd coeffs damp
Definition: cvparam.h:12
!$Id mode_top_bound COMMON comconstr g
Definition: comconst.h:7
!$Id!Parameters for parameters that control the rate of approach!to quasi equilibrium noff nlm real tlcrit real entp real sigd real coeffs real dtmax real cu real betad real damp real delta COMMON cvparam nlm tlcrit sigd coeffs dtmax
Definition: cvparam.h:12
integer, save klev
Definition: dimphy.F90:7
!$Id!Parameters for parameters that control the rate of approach!to quasi equilibrium noff nlm real tlcrit real entp real sigs
Definition: cvparam.h:12
!$Id!Parameters for parameters that control the rate of approach!to quasi equilibrium noff nlm real tlcrit real entp real sigd real omtrain
Definition: cvparam.h:12
!$Id!Parameters for parameters that control the rate of approach!to quasi equilibrium noff nlm real tlcrit real entp real sigd real omtsnow
Definition: cvparam.h:12
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
Definition: calcul_STDlev.h:26
!$Id!Thermodynamical constants for cl
Definition: cvthermo.h:6
!Parameters for nlm real spfac integer flag_wb real ptcrit real elcrit
Definition: cv3param.h:2
subroutine convect2(ncum, idcum, len, nd, ndp1, nl, minorig, nk1, icb1, t1, q1, qs1, u1, v1, gz1, tv1, tp1, tvp1, clw1, h1, lv1, cpn1, p1, ph1, ft1, fq1, fu1, fv1, tnk1, qnk1, gznk1, plcl1, precip1, cbmf1, iflag1, delt, cpd, cpv, cl, rv, rd, lv0, g, sigs, sigd, elcrit, tlcrit, omtsnow, dtmax, damp, alpha, entp, coeffs, coeffr, omtrain, cu, ma)
Definition: convect2.F90:9
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
!$Id!Parameters for parameters that control the rate of approach!to quasi equilibrium noff nlm real tlcrit real entp real sigd real coeffs real dtmax real cu real betad real damp real delta COMMON cvparam nlm tlcrit sigd coeffs cu
Definition: cvparam.h:12
!$Id!Parameters for nlm real spfac!IM cf epmax real ptcrit real omtrain real dttrig real alpha real delta real betad COMMON cv30param nlm spfac &!IM cf ptcrit omtrain dttrig alpha
Definition: cv30param.h:5
!$Id!Thermodynamical constants for t0 real clmci real epsim1 real hrd real grav COMMON cvthermo cpd
Definition: cvthermo.h:6
!$Id!Thermodynamical constants for lv0
Definition: cvthermo.h:6
!$Id!Parameters for parameters that control the rate of approach!to quasi equilibrium noff nlm real tlcrit real entp real sigd real coeffs real dtmax real cu real betad real damp real delta COMMON cvparam nlm tlcrit entp
Definition: cvparam.h:12
Definition: dimphy.F90:1
!$Id!Parameters for parameters that control the rate of approach!to quasi equilibrium noff nlm real tlcrit real entp real sigd real coeffr
Definition: cvparam.h:12
!$Id!Parameters for nlm real sigd
Definition: cv30param.h:5
subroutine zilch(x, m)
Definition: zilch.F90:5