GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: phylmd/convect3.F90 Lines: 0 535 0.0 %
Date: 2023-06-30 12:51:15 Branches: 0 296 0.0 %

Line Branch Exec Source
1
2
! $Header$
3
4
SUBROUTINE convect3(dtime, epmax, ok_adj, t1, r1, rs, u, v, tra, p, ph, nd, &
5
    ndp1, nl, ntra, delt, iflag, ft, fr, fu, fv, ftra, precip, icb, inb, &
6
    upwd, dnwd, dnwd0, sig, w0, mike, mke, ma, ments, qents, tps, tls, sigij, &
7
    cape, tvp, pbase, buoybase, &  ! ccc     *
8
                                   ! DTVPDT1,DTVPDQ1,DPLCLDT,DPLCLDR)
9
    dtvpdt1, dtvpdq1, dplcldt, dplcldr, & ! sbl
10
    ft2, fr2, fu2, fv2, wd, qcond, qcondc) ! sbl
11
12
  ! ***  THE PARAMETER NA SHOULD IN GENERAL EQUAL ND   ***
13
14
  ! #################################################################
15
  ! Fleur       Introduction des traceurs dans convect3 le 6 juin 200
16
  ! #################################################################
17
  USE dimphy
18
  USE infotrac_phy, ONLY: nbtr
19
  IMPLICIT NONE
20
  INTEGER na
21
  PARAMETER (na=60)
22
23
  REAL deltac ! cld
24
  PARAMETER (deltac=0.01) ! cld
25
26
  INTEGER nent(na)
27
  INTEGER nd, ndp1, nl, ntra, iflag, icb, inb
28
  REAL dtime, epmax, delt, precip, cape
29
  REAL dplcldt, dplcldr
30
  REAL t1(nd), r1(nd), rs(nd), u(nd), v(nd), tra(nd, ntra)
31
  REAL p(nd), ph(ndp1)
32
  REAL ft(nd), fr(nd), fu(nd), fv(nd), ftra(nd, ntra)
33
  REAL sig(nd), w0(nd)
34
  REAL uent(na, na), vent(na, na), traent(na, na, nbtr), tratm(na)
35
  REAL up(na), vp(na), trap(na, nbtr)
36
  REAL m(na), mp(na), ment(na, na), qent(na, na), elij(na, na)
37
  REAL sij(na, na), tvp(na), tv(na), water(na)
38
  REAL rp(na), ep(na), th(na), wt(na), evap(na), clw(na)
39
  REAL sigp(na), b(na), tp(na), cpn(na)
40
  REAL lv(na), lvcp(na), h(na), hp(na), gz(na)
41
  REAL t(na), rr(na)
42
43
  REAL ft2(nd), fr2(nd), fu2(nd), fv2(nd) ! added sbl
44
  REAL u1(nd), v1(nd) ! added sbl
45
46
  REAL buoy(na) !  Lifted parcel buoyancy
47
  REAL dtvpdt1(nd), dtvpdq1(nd) ! Derivatives of parcel virtual
48
  ! temperature wrt T1 and Q1
49
  REAL clw_new(na), qi(na)
50
51
  REAL wd, betad ! for gust factor (sb)
52
  REAL qcondc(nd) ! interface cld param (sb)
53
  REAL qcond(nd), nqcond(na), wa(na), maa(na), siga(na), axc(na) ! cld
54
55
  LOGICAL ice_conv, ok_adj
56
  PARAMETER (ice_conv=.TRUE.)
57
58
  ! ccccccccccccccccccccccccccccccccccccccccccccc
59
  ! declaration des variables a sortir
60
  ! cccccccccccccccccccccccccccccccccccccccccccc
61
  REAL mke(nd)
62
  REAL mike(nd)
63
  REAL ma(nd)
64
  REAL tps(nd) !temperature dans les ascendances non diluees
65
  REAL tls(nd) !temperature potentielle
66
  REAL ments(nd, nd)
67
  REAL qents(nd, nd)
68
  REAL sigij(klev, klev)
69
  REAL pbase ! pressure at the cloud base level
70
  REAL buoybase ! buoyancy at the cloud base level
71
  ! ccccccccccccccccccccccccccccccccccccccccccccc
72
73
74
  REAL :: cpv,cl,cpvmcl,eps,alv0,rdcp,pbcrit,ptcrit,sigd,spfac
75
  REAL :: tau,beta,alpha,dtcrit,dtovsh,ahm,rm,um,vm,dphinv
76
  REAL :: a2,x,tvx,tvy,plcl,pden,dpbase,tvpbase,tvbase,tdif
77
  REAL :: ath1,ath,delti,deltap,dcape,dlnp,sigold,dtmin,fac,w
78
  REAL :: amu,rti,cpd,bf2,anum,denom,dei,altem,cwat,stemp,qp
79
  REAL :: scrit,alt,smax,asij,wgh,sjmax,sjmin,smid,delp,delm
80
  REAL :: asum,bsum,csum,wflux,tinv,wdtrain,awat,afac,afac1,afac2
81
  REAL :: bfac,pr1,pr2,sigt,b6,c6,revap,tevap,delth,amfac,amp2
82
  REAL :: xf,tf,af,bf,fac2,ur,sru,d,ampmax,dpinv,am,amde,cpinv
83
  REAL :: amp1,ad,rat,ax,bx,cx,dx,ex,dsum
84
  INTEGER :: nk,i,j,nopt,jn,k,im,jm,n
85
86
  REAL dnwd0(nd) !  precipitation driven unsaturated downdraft flux
87
  REAL dnwd(nd), dn1 ! in-cloud saturated downdraft mass flux
88
  REAL upwd(nd), up1 ! in-cloud saturated updraft mass flux
89
90
  ! ***         ASSIGN VALUES OF THERMODYNAMIC CONSTANTS        ***
91
  ! ***             THESE SHOULD BE CONSISTENT WITH             ***
92
  ! ***              THOSE USED IN CALLING PROGRAM              ***
93
  ! ***     NOTE: THESE ARE ALSO SPECIFIED IN SUBROUTINE TLIFT  ***
94
95
  ! sb      CPD=1005.7
96
  ! sb      CPV=1870.0
97
  ! sb      CL=4190.0
98
  ! sb      CPVMCL=CL-CPV
99
  ! sb      RV=461.5
100
  ! sb      RD=287.04
101
  ! sb      EPS=RD/RV
102
  ! sb      ALV0=2.501E6
103
  ! cccccccccccccccccccccc
104
  ! constantes coherentes avec le modele du Centre Europeen
105
  ! sb      RD = 1000.0 * 1.380658E-23 * 6.0221367E+23 / 28.9644
106
  ! sb      RV = 1000.0 * 1.380658E-23 * 6.0221367E+23 / 18.0153
107
  ! sb      CPD = 3.5 * RD
108
  ! sb      CPV = 4.0 * RV
109
  ! sb      CL = 4218.0
110
  ! sb      CPVMCL=CL-CPV
111
  ! sb      EPS=RD/RV
112
  ! sb      ALV0=2.5008E+06
113
  ! ccccccccccccccccccccc
114
  ! on utilise les constantes thermo du Centre Europeen: (SB)
115
116
  include "YOMCST.h"
117
118
  cpd = rcpd
119
  cpv = rcpv
120
  cl = rcw
121
  cpvmcl = cl - cpv
122
  eps = rd/rv
123
  alv0 = rlvtt
124
125
  nk = 1 ! origin level of the lifted parcel
126
127
  ! ccccccccccccccccccccc
128
129
  ! ***  INITIALIZE OUTPUT ARRAYS AND PARAMETERS  ***
130
131
  DO i = 1, nd
132
    ft(i) = 0.0
133
    fr(i) = 0.0
134
    fu(i) = 0.0
135
    fv(i) = 0.0
136
137
    ft2(i) = 0.0
138
    fr2(i) = 0.0
139
    fu2(i) = 0.0
140
    fv2(i) = 0.0
141
142
    DO j = 1, ntra
143
      ftra(i, j) = 0.0
144
    END DO
145
146
    qcondc(i) = 0.0 ! cld
147
    qcond(i) = 0.0 ! cld
148
    nqcond(i) = 0.0 ! cld
149
150
    t(i) = t1(i)
151
    rr(i) = r1(i)
152
    u1(i) = u(i) ! added sbl
153
    v1(i) = v(i) ! added sbl
154
  END DO
155
  DO i = 1, nl
156
    rdcp = (rd*(1.-rr(i))+rr(i)*rv)/(cpd*(1.-rr(i))+rr(i)*cpv)
157
    th(i) = t(i)*(1000.0/p(i))**rdcp
158
  END DO
159
160
  ! ************************************************************
161
  ! *    CALCUL DES TEMPERATURES POTENTIELLES A SORTIR
162
  ! ************************************************************
163
  DO i = 1, nd
164
    rdcp = (rd*(1.-rr(i))+rr(i)*rv)/(cpd*(1.-rr(i))+rr(i)*cpv)
165
166
    tls(i) = t(i)*(1000.0/p(i))**rdcp
167
  END DO
168
169
170
171
172
  ! ***********************************************************
173
174
175
  precip = 0.0
176
  wd = 0.0 ! sb
177
  iflag = 1
178
179
  ! ***                    SPECIFY PARAMETERS                        ***
180
  ! ***  PBCRIT IS THE CRITICAL CLOUD DEPTH (MB) BENEATH WHICH THE   ***
181
  ! ***       PRECIPITATION EFFICIENCY IS ASSUMED TO BE ZERO         ***
182
  ! ***  PTCRIT IS THE CLOUD DEPTH (MB) ABOVE WHICH THE PRECIP.      ***
183
  ! ***            EFFICIENCY IS ASSUMED TO BE UNITY                 ***
184
  ! ***  SIGD IS THE FRACTIONAL AREA COVERED BY UNSATURATED DNDRAFT  ***
185
  ! ***  SPFAC IS THE FRACTION OF PRECIPITATION FALLING OUTSIDE      ***
186
  ! ***                        OF CLOUD                              ***
187
  ! ***    ALPHA AND BETA ARE PARAMETERS THAT CONTROL THE RATE OF    ***
188
  ! ***                 APPROACH TO QUASI-EQUILIBRIUM                ***
189
  ! ***    (THEIR STANDARD VALUES ARE 1.0 AND 0.96, RESPECTIVELY)    ***
190
  ! ***           (BETA MUST BE LESS THAN OR EQUAL TO 1)             ***
191
  ! ***    DTCRIT IS THE CRITICAL BUOYANCY (K) USED TO ADJUST THE    ***
192
  ! ***                 APPROACH TO QUASI-EQUILIBRIUM                ***
193
  ! ***                     IT MUST BE LESS THAN 0                   ***
194
195
  pbcrit = 150.0
196
  ptcrit = 500.0
197
  sigd = 0.01
198
  spfac = 0.15
199
  ! sb:
200
  ! EPMAX=0.993 ! precip efficiency less than unity
201
  ! EPMAX=1. ! precip efficiency less than unity
202
203
  ! jyg
204
  ! CC      BETA=0.96
205
  ! Beta is now expressed as a function of the characteristic time
206
  ! of the convective process.
207
  ! CC        Old value : TAU = 15000.   !(for dtime = 600.s)
208
  ! CC        Other value (inducing little change) :TAU = 8000.
209
  tau = 8000.
210
  beta = 1. - dtime/tau
211
  ! jyg
212
  ! CC      ALPHA=1.0
213
  alpha = 1.5E-3*dtime/tau
214
  ! Increase alpha in order to compensate W decrease
215
  alpha = alpha*1.5
216
217
  ! jyg (voir CONVECT 3)
218
  ! CC      DTCRIT=-0.2
219
  dtcrit = -2.
220
  ! gf&jyg
221
  ! CC     DT pour l'overshoot.
222
  dtovsh = -0.2
223
224
225
  ! ***        INCREMENT THE COUNTER       ***
226
227
  sig(nd) = sig(nd) + 1.0
228
  sig(nd) = amin1(sig(nd), 12.1)
229
230
  ! ***    IF NOPT IS AN INTEGER OTHER THAN 0, CONVECT     ***
231
  ! ***     RETURNS ARRAYS T AND R THAT MAY HAVE BEEN      ***
232
  ! ***  ALTERED BY DRY ADIABATIC ADJUSTMENT; OTHERWISE    ***
233
  ! ***        THE RETURNED ARRAYS ARE UNALTERED.          ***
234
235
  nopt = 0
236
  ! !      NOPT=1 ! sbl
237
238
  ! ***            PERFORM DRY ADIABATIC ADJUSTMENT            ***
239
240
  ! ***  DO NOT BYPASS THIS EVEN IF THE CALLING PROGRAM HAS A  ***
241
  ! ***                BOUNDARY LAYER SCHEME !!!               ***
242
243
  IF (ok_adj) THEN ! added sbl
244
245
    DO i = nl - 1, 1, -1
246
      jn = 0
247
      DO j = i + 1, nl
248
        IF (th(j)<th(i)) jn = j
249
      END DO
250
      IF (jn==0) GO TO 30
251
      ahm = 0.0
252
      rm = 0.0
253
      um = 0.0
254
      vm = 0.0
255
      DO k = 1, ntra
256
        tratm(k) = 0.0
257
      END DO
258
      DO j = i, jn
259
        ahm = ahm + (cpd*(1.-rr(j))+rr(j)*cpv)*t(j)*(ph(j)-ph(j+1))
260
        rm = rm + rr(j)*(ph(j)-ph(j+1))
261
        um = um + u(j)*(ph(j)-ph(j+1))
262
        vm = vm + v(j)*(ph(j)-ph(j+1))
263
        DO k = 1, ntra
264
          tratm(k) = tratm(k) + tra(j, k)*(ph(j)-ph(j+1))
265
        END DO
266
      END DO
267
      dphinv = 1./(ph(i)-ph(jn+1))
268
      rm = rm*dphinv
269
      um = um*dphinv
270
      vm = vm*dphinv
271
      DO k = 1, ntra
272
        tratm(k) = tratm(k)*dphinv
273
      END DO
274
      a2 = 0.0
275
      DO j = i, jn
276
        rr(j) = rm
277
        u(j) = um
278
        v(j) = vm
279
        DO k = 1, ntra
280
          tra(j, k) = tratm(k)
281
        END DO
282
        rdcp = (rd*(1.-rr(j))+rr(j)*rv)/(cpd*(1.-rr(j))+rr(j)*cpv)
283
        x = (0.001*p(j))**rdcp
284
        t(j) = x
285
        a2 = a2 + (cpd*(1.-rr(j))+rr(j)*cpv)*x*(ph(j)-ph(j+1))
286
      END DO
287
      DO j = i, jn
288
        th(j) = ahm/a2
289
        t(j) = t(j)*th(j)
290
      END DO
291
30  END DO
292
293
  END IF ! added sbl
294
295
  ! ***   RESET INPUT ARRAYS IF ok_adj 0   ***
296
297
  IF (ok_adj) THEN
298
    DO i = 1, nd
299
300
      ft2(i) = (t(i)-t1(i))/delt ! sbl
301
      fr2(i) = (rr(i)-r1(i))/delt ! sbl
302
      fu2(i) = (u(i)-u1(i))/delt ! sbl
303
      fv2(i) = (v(i)-v1(i))/delt ! sbl
304
305
      ! !            T1(I)=T(I)      ! commente sbl
306
      ! !            R1(I)=RR(I)     ! commente sbl
307
    END DO
308
  END IF
309
310
  ! *** CALCULATE ARRAYS OF GEOPOTENTIAL, HEAT CAPACITY AND STATIC ENERGY
311
312
  gz(1) = 0.0
313
  cpn(1) = cpd*(1.-rr(1)) + rr(1)*cpv
314
  h(1) = t(1)*cpn(1)
315
  DO i = 2, nl
316
    tvx = t(i)*(1.+rr(i)/eps-rr(i))
317
    tvy = t(i-1)*(1.+rr(i-1)/eps-rr(i-1))
318
    gz(i) = gz(i-1) + 0.5*rd*(tvx+tvy)*(p(i-1)-p(i))/ph(i)
319
    cpn(i) = cpd*(1.-rr(i)) + cpv*rr(i)
320
    h(i) = t(i)*cpn(i) + gz(i)
321
  END DO
322
323
  ! ***  CALCULATE LIFTED CONDENSATION LEVEL OF AIR AT LOWEST MODEL LEVEL ***
324
  ! ***       (WITHIN 0.2% OF FORMULA OF BOLTON, MON. WEA. REV.,1980)     ***
325
326
  IF (t(1)<250.0 .OR. rr(1)<=0.0) THEN
327
    iflag = 0
328
    ! sb3d         print*,'je suis passe par 366'
329
    RETURN
330
  END IF
331
332
  ! jyg1 Utilisation de la subroutine CLIFT
333
  ! C      RH=RR(1)/RS(1)
334
  ! C      CHI=T(1)/(1669.0-122.0*RH-T(1))
335
  ! C      PLCL=P(1)*(RH**CHI)
336
  CALL clift(p(1), t(1), rr(1), rs(1), plcl, dplcldt, dplcldr)
337
  ! jyg2
338
  ! sb3d      PRINT *,' em_plcl,p1,t1,r1,rs1,rh '
339
  ! sb3d     $        ,PLCL,P(1),T(1),RR(1),RS(1),RH
340
341
  IF (plcl<200.0 .OR. plcl>=2000.0) THEN
342
    iflag = 2
343
    RETURN
344
  END IF
345
  ! jyg1
346
  ! Essais de modification de ICB
347
348
  ! ***  CALCULATE FIRST LEVEL ABOVE LCL (=ICB)  ***
349
350
  ! C      ICB=NL-1
351
  ! C      DO 50 I=2,NL-1
352
  ! C         IF(P(I).LT.PLCL)THEN
353
  ! C            ICB=MIN(ICB,I)   ! ICB sup ou egal a 2
354
  ! C         END IF
355
  ! C   50 CONTINUE
356
  ! C      IF(ICB.EQ.(NL-1))THEN
357
  ! C         IFLAG=3
358
  ! C         RETURN
359
  ! C      END IF
360
361
  ! *** CALCULATE LAYER CONTAINING LCL (=ICB)   ***
362
363
  icb = nl - 1
364
  ! sb      DO 50 I=2,NL-1
365
  DO i = 3, nl - 1 ! modif sb pour que ICB soit sup/egal a 2
366
    ! la modification consiste a comparer PLCL a PH et non a P:
367
    ! ICB est defini par :  PH(ICB)<PLCL<PH(ICB-!)
368
    IF (ph(i)<plcl) THEN
369
      icb = min(icb, i)
370
    END IF
371
  END DO
372
  IF (icb==(nl-1)) THEN
373
    iflag = 3
374
    RETURN
375
  END IF
376
  icb = icb - 1 ! ICB sup ou egal a 2
377
  ! jyg2
378
379
380
381
  ! *** SUBROUTINE TLIFT CALCULATES PART OF THE LIFTED PARCEL VIRTUAL
382
  ! ***
383
  ! ***  TEMPERATURE, THE ACTUAL TEMPERATURE AND THE ADIABATIC
384
  ! ***
385
  ! ***                   LIQUID WATER CONTENT
386
  ! ***
387
388
389
  ! jyg1
390
  ! make sure that "Cloud base" seen by TLIFT is actually the
391
  ! fisrt level where adiabatic ascent is saturated
392
  IF (plcl>p(icb)) THEN
393
    ! sb        CALL TLIFT(P,T,RR,RS,GZ,PLCL,ICB,TVP,TP,CLW,ND,NL)
394
    CALL tlift(p, t, rr, rs, gz, plcl, icb, nk, tvp, tp, clw, nd, nl, &
395
      dtvpdt1, dtvpdq1)
396
  ELSE
397
    ! sb        CALL TLIFT(P,T,RR,RS,GZ,PLCL,ICB+1,TVP,TP,CLW,ND,NL)
398
    CALL tlift(p, t, rr, rs, gz, plcl, icb+1, nk, tvp, tp, clw, nd, nl, &
399
      dtvpdt1, dtvpdq1)
400
  END IF
401
  ! jyg2
402
403
  ! *****************************************************************************
404
  ! ***     SORTIE DE LA TEMPERATURE DE L ASCENDANCE NON DILUE
405
  ! *****************************************************************************
406
  DO i = 1, nd
407
    tps(i) = tp(i)
408
  END DO
409
410
411
  ! *****************************************************************************
412
413
414
  ! ***  SET THE PRECIPITATION EFFICIENCIES AND THE FRACTION OF   ***
415
  ! ***          PRECIPITATION FALLING OUTSIDE OF CLOUD           ***
416
  ! ***      THESE MAY BE FUNCTIONS OF TP(I), P(I) AND CLW(I)     ***
417
418
  DO i = 1, nl
419
    pden = ptcrit - pbcrit
420
421
    ! jyg
422
    ! cc         EP(I)=(P(ICB)-P(I)-PBCRIT)/PDEN
423
    ! sb         EP(I)=(PLCL-P(I)-PBCRIT)/PDEN
424
    ep(i) = (plcl-p(i)-pbcrit)/pden*epmax ! sb
425
426
    ep(i) = amax1(ep(i), 0.0)
427
    ! sb         EP(I)=AMIN1(EP(I),1.0)
428
    ep(i) = amin1(ep(i), epmax) ! sb
429
    sigp(i) = spfac
430
431
    ! ***       CALCULATE VIRTUAL TEMPERATURE AND LIFTED PARCEL     ***
432
    ! ***                    VIRTUAL TEMPERATURE                    ***
433
434
    tv(i) = t(i)*(1.+rr(i)/eps-rr(i))
435
    ! cd1
436
    ! . Keep all liquid water in lifted parcel (-> adiabatic CAPE)
437
438
    ! cc    TVP(I)=TVP(I)-TP(I)*(RR(1)-EP(I)*CLW(I))
439
    ! !!! sb         TVP(I)=TVP(I)-TP(I)*RR(1) ! calcule dans tlift
440
    ! cd2
441
442
    ! ***       Calculate first estimate of buoyancy
443
444
    buoy(i) = tvp(i) - tv(i)
445
  END DO
446
447
  ! ***   Set Cloud Base Buoyancy at (Plcl+DPbase) level buoyancy
448
449
  dpbase = -40. !That is 400m above LCL
450
  pbase = plcl + dpbase
451
  tvpbase = tvp(icb)*(pbase-p(icb+1))/(p(icb)-p(icb+1)) + &
452
    tvp(icb+1)*(p(icb)-pbase)/(p(icb)-p(icb+1))
453
  tvbase = tv(icb)*(pbase-p(icb+1))/(p(icb)-p(icb+1)) + &
454
    tv(icb+1)*(p(icb)-pbase)/(p(icb)-p(icb+1))
455
456
  ! test sb:
457
  ! @      write(*,*) '++++++++++++++++++++++++++++++++++++++++'
458
  ! @      write(*,*) 'plcl,dpbas,tvpbas,tvbas,tvp(icb),tvp(icb1)
459
  ! @     :             ,tv(icb),tv(icb1)'
460
  ! @      write(*,*) plcl,dpbase,tvpbase,tvbase,tvp(icb)
461
  ! @     L          ,tvp(icb+1),tv(icb),tv(icb+1)
462
  ! @      write(*,*) '++++++++++++++++++++++++++++++++++++++++'
463
  ! fin test sb
464
  buoybase = tvpbase - tvbase
465
466
  ! C       Set buoyancy = BUOYBASE for all levels below BASE.
467
  ! C       For safety, set : BUOY(ICB) = BUOYBASE
468
  DO i = icb, nl
469
    IF (p(i)>=pbase) THEN
470
      buoy(i) = buoybase
471
    END IF
472
  END DO
473
  buoy(icb) = buoybase
474
475
  ! sb3d      print *,'buoybase,tvp_tv,tvpbase,tvbase,pbase,plcl'
476
  ! sb3d     $,        buoybase,tvp(icb)-tv(icb),tvpbase,tvbase,pbase,plcl
477
  ! sb3d      print *,'TVP ',(tvp(i),i=1,nl)
478
  ! sb3d      print *,'TV ',(tv(i),i=1,nl)
479
  ! sb3d      print *, 'P ',(p(i),i=1,nl)
480
  ! sb3d      print *,'ICB ',icb
481
  ! test sb:
482
  ! @      write(*,*) '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'
483
  ! @      write(*,*) 'icb,icbs,inb,buoybase:'
484
  ! @      write(*,*) icb,icb+1,inb,buoybase
485
  ! @      write(*,*) 'k,tvp,tv,tp,buoy,ep: '
486
  ! @      do k=1,nl
487
  ! @      write(*,*) k,tvp(k),tv(k),tp(k),buoy(k),ep(k)
488
  ! @      enddo
489
  ! @      write(*,*) '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'
490
  ! fin test sb
491
492
493
494
  ! ***   MAKE SURE THAT COLUMN IS DRY ADIABATIC BETWEEN THE SURFACE  ***
495
  ! ***    AND CLOUD BASE, AND THAT LIFTED AIR IS POSITIVELY BUOYANT  ***
496
  ! ***                         AT CLOUD BASE                         ***
497
  ! ***       IF NOT, RETURN TO CALLING PROGRAM AFTER RESETTING       ***
498
  ! ***                        SIG(I) AND W0(I)                       ***
499
500
  ! jyg
501
  ! CC      TDIF=TVP(ICB)-TV(ICB)
502
  tdif = buoy(icb)
503
  ath1 = th(1)
504
  ! jyg
505
  ! CC      ATH=TH(ICB-1)-1.0
506
  ath = th(icb-1) - 5.0
507
  ! ATH=0.                          ! ajout sb
508
  ! IF (ICB.GT.1) ATH=TH(ICB-1)-5.0 ! modif sb
509
  IF (tdif<dtcrit .OR. ath>ath1) THEN
510
    DO i = 1, nl
511
      sig(i) = beta*sig(i) - 2.*alpha*tdif*tdif
512
      sig(i) = amax1(sig(i), 0.0)
513
      w0(i) = beta*w0(i)
514
    END DO
515
    iflag = 0
516
    RETURN
517
  END IF
518
519
520
521
  ! ***  IF THIS POINT IS REACHED, MOIST CONVECTIVE ADJUSTMENT IS NECESSARY
522
  ! ***
523
  ! ***        NOW INITIALIZE VARIOUS ARRAYS USED IN THE COMPUTATIONS
524
  ! ***
525
526
  DO i = 1, nl
527
    hp(i) = h(i)
528
    wt(i) = 0.001
529
    rp(i) = rr(i)
530
    up(i) = u(i)
531
    vp(i) = v(i)
532
    DO j = 1, ntra
533
      trap(i, j) = tra(i, j)
534
    END DO
535
    nent(i) = 0
536
    water(i) = 0.0
537
    evap(i) = 0.0
538
    b(i) = 0.0
539
    mp(i) = 0.0
540
    m(i) = 0.0
541
    lv(i) = alv0 - cpvmcl*(t(i)-273.15)
542
    lvcp(i) = lv(i)/cpn(i)
543
    DO j = 1, nl
544
      qent(i, j) = rr(j)
545
      elij(i, j) = 0.0
546
      ment(i, j) = 0.0
547
      sij(i, j) = 0.0
548
      uent(i, j) = u(j)
549
      vent(i, j) = v(j)
550
      DO k = 1, ntra
551
        traent(i, j, k) = tra(j, k)
552
      END DO
553
    END DO
554
  END DO
555
556
  delti = 1.0/delt
557
558
  ! ***  FIND THE FIRST MODEL LEVEL (INB) ABOVE THE PARCEL'S       ***
559
  ! ***                LEVEL OF NEUTRAL BUOYANCY                   ***
560
561
  inb = nl - 1
562
  DO i = icb, nl - 1
563
    ! jyg
564
    ! CC         IF((TVP(I)-TV(I)).LT.DTCRIT)THEN
565
    IF (buoy(i)<dtovsh) THEN
566
      inb = min(inb, i)
567
    END IF
568
  END DO
569
570
571
572
573
574
  ! ***          RESET SIG(I) AND W0(I) FOR I>INB AND I<ICB       ***
575
576
  IF (inb<(nl-1)) THEN
577
    DO i = inb + 1, nl - 1
578
      ! jyg
579
      ! CC            SIG(I)=BETA*SIG(I)-2.0E-4*ALPHA*(TV(INB)-TVP(INB))*
580
      ! CC     1              ABS(TV(INB)-TVP(INB))
581
      sig(i) = beta*sig(i) + 2.*alpha*buoy(inb)*abs(buoy(inb))
582
      sig(i) = amax1(sig(i), 0.0)
583
      w0(i) = beta*w0(i)
584
    END DO
585
  END IF
586
  DO i = 1, icb
587
    ! jyg
588
    ! CC         SIG(I)=BETA*SIG(I)-2.0E-4*ALPHA*(TV(ICB)-TVP(ICB))*
589
    ! CC     1           (TV(ICB)-TVP(ICB))
590
    sig(i) = beta*sig(i) - 2.*alpha*buoy(icb)*buoy(icb)
591
    sig(i) = amax1(sig(i), 0.0)
592
    w0(i) = beta*w0(i)
593
  END DO
594
595
  ! ***    RESET FRACTIONAL AREAS OF UPDRAFTS AND W0 AT INITIAL TIME    ***
596
  ! ***           AND AFTER 10 TIME STEPS OF NO CONVECTION              ***
597
598
599
  IF (sig(nd)<1.5 .OR. sig(nd)>12.0) THEN
600
    DO i = 1, nl - 1
601
      sig(i) = 0.0
602
      w0(i) = 0.0
603
    END DO
604
  END IF
605
606
  ! ***   CALCULATE LIQUID WATER STATIC ENERGY OF LIFTED PARCEL   ***
607
608
  DO i = icb, inb
609
    hp(i) = h(1) + (lv(i)+(cpd-cpv)*t(i))*ep(i)*clw(i)
610
  END DO
611
612
  ! ***  CALCULATE CONVECTIVE AVAILABLE POTENTIAL ENERGY (CAPE),  ***
613
  ! ***     VERTICAL VELOCITY (W), FRACTIONAL AREA COVERED BY     ***
614
  ! ***     UNDILUTE UPDRAFT (SIG),  AND UPDRAFT MASS FLUX (M)    ***
615
616
  cape = 0.0
617
618
  DO i = icb + 1, inb
619
    ! jyg1
620
    ! CC         CAPE=CAPE+RD*(TVP(I-1)-TV(I-1))*(PH(I-1)-PH(I))/P(I-1)
621
    ! CC         DCAPE=RD*BUOY(I-1)*(PH(I-1)-PH(I))/P(I-1)
622
    ! CC         DLNP=(PH(I-1)-PH(I))/P(I-1)
623
    ! The interval on which CAPE is computed starts at PBASE :
624
    deltap = min(pbase, ph(i-1)) - min(pbase, ph(i))
625
    cape = cape + rd*buoy(i-1)*deltap/p(i-1)
626
    dcape = rd*buoy(i-1)*deltap/p(i-1)
627
    dlnp = deltap/p(i-1)
628
    ! jyg2
629
    ! sb3d         print *,'buoy,dlnp,dcape,cape',buoy(i-1),dlnp,dcape,cape
630
    ! test sb:
631
    ! @       write(*,*) '############################################'
632
    ! @         write(*,*) 'cape,rrd,buoy,deltap,p,pbase,ph:'
633
    ! @     :     ,cape,rd,buoy(i-1),deltap,p(i-1),pbase,ph(i)
634
    ! @       write(*,*) '############################################'
635
636
    ! fin test sb
637
    cape = amax1(0.0, cape)
638
639
    sigold = sig(i)
640
    dtmin = 100.0
641
    DO j = icb, i - 1
642
      ! jyg
643
      ! CC            DTMIN=AMIN1(DTMIN,(TVP(J)-TV(J)))
644
      dtmin = amin1(dtmin, buoy(j))
645
    END DO
646
    ! sb3d     print *, 'DTMIN, BETA, ALPHA, SIG = ',DTMIN,BETA,ALPHA,SIG(I)
647
    sig(i) = beta*sig(i) + alpha*dtmin*abs(dtmin)
648
    sig(i) = amax1(sig(i), 0.0)
649
    sig(i) = amin1(sig(i), 0.01)
650
    fac = amin1(((dtcrit-dtmin)/dtcrit), 1.0)
651
    ! jyg
652
    ! C    Essais de reduction de la vitesse
653
    ! C         FAC = FAC*.5
654
655
    w = (1.-beta)*fac*sqrt(cape) + beta*w0(i)
656
    amu = 0.5*(sig(i)+sigold)*w
657
    m(i) = amu*0.007*p(i)*(ph(i)-ph(i+1))/tv(i)
658
659
    ! --------- test sb:
660
    ! write(*,*) '############################################'
661
    ! write(*,*) 'k,amu,buoy(k-1),deltap,w,beta,fac,cape,w0(k)'
662
    ! write(*,*) i,amu,buoy(i-1),deltap
663
    ! :           ,w,beta,fac,cape,w0(i)
664
    ! write(*,*) '############################################'
665
    ! ---------
666
667
    w0(i) = w
668
  END DO
669
  w0(icb) = 0.5*w0(icb+1)
670
  m(icb) = 0.5*m(icb+1)*(ph(icb)-ph(icb+1))/(ph(icb+1)-ph(icb+2))
671
  sig(icb) = sig(icb+1)
672
  sig(icb-1) = sig(icb)
673
  ! jyg1
674
  ! sb3d      print *, 'Cloud base, c. top, CAPE',ICB,INB,cape
675
  ! sb3d      print *, 'SIG ',(sig(i),i=1,inb)
676
  ! sb3d      print *, 'W ',(w0(i),i=1,inb)
677
  ! sb3d      print *, 'M ',(m(i), i=1,inb)
678
  ! sb3d      print *, 'Dt1 ',(tvp(i)-tv(i),i=1,inb)
679
  ! sb3d      print *, 'Dt_vrai ',(buoy(i),i=1,inb)
680
  ! jyg2
681
682
  ! ***  CALCULATE ENTRAINED AIR MASS FLUX (MENT), TOTAL WATER MIXING  ***
683
  ! ***     RATIO (QENT), TOTAL CONDENSED WATER (ELIJ), AND MIXING     ***
684
  ! ***                        FRACTION (SIJ)                          ***
685
686
687
688
  DO i = icb, inb
689
    rti = rr(1) - ep(i)*clw(i)
690
    DO j = icb - 1, inb
691
      bf2 = 1. + lv(j)*lv(j)*rs(j)/(rv*t(j)*t(j)*cpd)
692
      anum = h(j) - hp(i) + (cpv-cpd)*t(j)*(rti-rr(j))
693
      denom = h(i) - hp(i) + (cpd-cpv)*(rr(i)-rti)*t(j)
694
      dei = denom
695
      IF (abs(dei)<0.01) dei = 0.01
696
      sij(i, j) = anum/dei
697
      sij(i, i) = 1.0
698
      altem = sij(i, j)*rr(i) + (1.-sij(i,j))*rti - rs(j)
699
      altem = altem/bf2
700
      cwat = clw(j)*(1.-ep(j))
701
      stemp = sij(i, j)
702
      IF ((stemp<0.0 .OR. stemp>1.0 .OR. altem>cwat) .AND. j>i) THEN
703
        anum = anum - lv(j)*(rti-rs(j)-cwat*bf2)
704
        denom = denom + lv(j)*(rr(i)-rti)
705
        IF (abs(denom)<0.01) denom = 0.01
706
        sij(i, j) = anum/denom
707
        altem = sij(i, j)*rr(i) + (1.-sij(i,j))*rti - rs(j)
708
        altem = altem - (bf2-1.)*cwat
709
      END IF
710
711
712
      IF (sij(i,j)>0.0 .AND. sij(i,j)<0.95) THEN
713
        qent(i, j) = sij(i, j)*rr(i) + (1.-sij(i,j))*rti
714
        uent(i, j) = sij(i, j)*u(i) + (1.-sij(i,j))*u(nk)
715
        vent(i, j) = sij(i, j)*v(i) + (1.-sij(i,j))*v(nk)
716
        DO k = 1, ntra
717
          traent(i, j, k) = sij(i, j)*tra(i, k) + (1.-sij(i,j))*tra(nk, k)
718
        END DO
719
        elij(i, j) = altem
720
        elij(i, j) = amax1(0.0, elij(i,j))
721
        ment(i, j) = m(i)/(1.-sij(i,j))
722
        nent(i) = nent(i) + 1
723
      END IF
724
      sij(i, j) = amax1(0.0, sij(i,j))
725
      sij(i, j) = amin1(1.0, sij(i,j))
726
    END DO
727
728
    ! ***   IF NO AIR CAN ENTRAIN AT LEVEL I ASSUME THAT UPDRAFT DETRAINS
729
    ! ***
730
    ! ***   AT THAT LEVEL AND CALCULATE DETRAINED AIR FLUX AND PROPERTIES
731
    ! ***
732
733
    IF (nent(i)==0) THEN
734
      ment(i, i) = m(i)
735
      qent(i, i) = rr(nk) - ep(i)*clw(i)
736
      uent(i, i) = u(nk)
737
      vent(i, i) = v(nk)
738
      DO j = 1, ntra
739
        traent(i, i, j) = tra(nk, j)
740
      END DO
741
      elij(i, i) = clw(i)
742
      sij(i, i) = 1.0
743
    END IF
744
745
    DO j = icb - 1, inb
746
      sigij(i, j) = sij(i, j)
747
    END DO
748
749
  END DO
750
751
  ! ***  NORMALIZE ENTRAINED AIR MASS FLUXES TO REPRESENT EQUAL  ***
752
  ! ***              PROBABILITIES OF MIXING                     ***
753
754
755
  DO i = icb, inb
756
    IF (nent(i)/=0) THEN
757
      qp = rr(1) - ep(i)*clw(i)
758
      anum = h(i) - hp(i) - lv(i)*(qp-rs(i)) + (cpv-cpd)*t(i)*(qp-rr(i))
759
      denom = h(i) - hp(i) + lv(i)*(rr(i)-qp) + (cpd-cpv)*t(i)*(rr(i)-qp)
760
      IF (abs(denom)<0.01) denom = 0.01
761
      scrit = anum/denom
762
      alt = qp - rs(i) + scrit*(rr(i)-qp)
763
      IF (scrit<=0.0 .OR. alt<=0.0) scrit = 1.0
764
      smax = 0.0
765
      asij = 0.0
766
      DO j = inb, icb - 1, -1
767
        IF (sij(i,j)>1.0E-16 .AND. sij(i,j)<0.95) THEN
768
          wgh = 1.0
769
          IF (j>i) THEN
770
            sjmax = amax1(sij(i,j+1), smax)
771
            sjmax = amin1(sjmax, scrit)
772
            smax = amax1(sij(i,j), smax)
773
            sjmin = amax1(sij(i,j-1), smax)
774
            sjmin = amin1(sjmin, scrit)
775
            IF (sij(i,j)<(smax-1.0E-16)) wgh = 0.0
776
            smid = amin1(sij(i,j), scrit)
777
          ELSE
778
            sjmax = amax1(sij(i,j+1), scrit)
779
            smid = amax1(sij(i,j), scrit)
780
            sjmin = 0.0
781
            IF (j>1) sjmin = sij(i, j-1)
782
            sjmin = amax1(sjmin, scrit)
783
          END IF
784
          delp = abs(sjmax-smid)
785
          delm = abs(sjmin-smid)
786
          asij = asij + wgh*(delp+delm)
787
          ment(i, j) = ment(i, j)*(delp+delm)*wgh
788
        END IF
789
      END DO
790
      asij = amax1(1.0E-16, asij)
791
      asij = 1.0/asij
792
      DO j = icb - 1, inb
793
        ment(i, j) = ment(i, j)*asij
794
      END DO
795
      asum = 0.0
796
      bsum = 0.0
797
      DO j = icb - 1, inb
798
        asum = asum + ment(i, j)
799
        ment(i, j) = ment(i, j)*sig(j)
800
        bsum = bsum + ment(i, j)
801
      END DO
802
      bsum = amax1(bsum, 1.0E-16)
803
      bsum = 1.0/bsum
804
      DO j = icb - 1, inb
805
        ment(i, j) = ment(i, j)*asum*bsum
806
      END DO
807
      csum = 0.0
808
      DO j = icb - 1, inb
809
        csum = csum + ment(i, j)
810
      END DO
811
812
      IF (csum<m(i)) THEN
813
        nent(i) = 0
814
        ment(i, i) = m(i)
815
        qent(i, i) = rr(1) - ep(i)*clw(i)
816
        uent(i, i) = u(nk)
817
        vent(i, i) = v(nk)
818
        DO j = 1, ntra
819
          traent(i, i, j) = tra(nk, j)
820
        END DO
821
        elij(i, i) = clw(i)
822
        sij(i, i) = 1.0
823
      END IF
824
    END IF
825
  END DO
826
827
828
829
  ! **************************************************************
830
  ! *       CALCUL DES MENTS(I,J) ET DES QENTS(I,J)
831
  ! *************************************************************
832
833
  DO im = 1, nd
834
    DO jm = 1, nd
835
836
      qents(im, jm) = qent(im, jm)
837
      ments(im, jm) = ment(im, jm)
838
    END DO
839
  END DO
840
841
  ! **********************************************************
842
  ! --- test sb:
843
  ! @       write(*,*) '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'
844
  ! @       write(*,*) 'inb,m(inb),ment(inb,inb),sigij(inb,inb):'
845
  ! @       write(*,*) inb,m(inb),ment(inb,inb),sigij(inb,inb)
846
  ! @       write(*,*) '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'
847
  ! ---
848
849
850
851
852
853
  ! ***  CHECK WHETHER EP(INB)=0, IF SO, SKIP PRECIPITATING    ***
854
  ! ***             DOWNDRAFT CALCULATION                      ***
855
856
  IF (ep(inb)<0.0001) GO TO 405
857
858
  ! ***  INTEGRATE LIQUID WATER EQUATION TO FIND CONDENSED WATER   ***
859
  ! ***                AND CONDENSED WATER FLUX                    ***
860
861
  wflux = 0.0
862
  tinv = 1./3.
863
864
  ! ***                    BEGIN DOWNDRAFT LOOP                    ***
865
866
  DO i = inb, 1, -1
867
868
    ! ***              CALCULATE DETRAINED PRECIPITATION             ***
869
870
871
872
    wdtrain = 10.0*ep(i)*m(i)*clw(i)
873
    IF (i>1) THEN
874
      DO j = 1, i - 1
875
        awat = elij(j, i) - (1.-ep(i))*clw(i)
876
        awat = amax1(awat, 0.0)
877
        wdtrain = wdtrain + 10.0*awat*ment(j, i)
878
      END DO
879
    END IF
880
881
    ! ***    FIND RAIN WATER AND EVAPORATION USING PROVISIONAL   ***
882
    ! ***              ESTIMATES OF RP(I)AND RP(I-1)             ***
883
884
885
886
    wt(i) = 45.0
887
    IF (i<inb) THEN
888
      rp(i) = rp(i+1) + (cpd*(t(i+1)-t(i))+gz(i+1)-gz(i))/lv(i)
889
      rp(i) = 0.5*(rp(i)+rr(i))
890
    END IF
891
    rp(i) = amax1(rp(i), 0.0)
892
    rp(i) = amin1(rp(i), rs(i))
893
    rp(inb) = rr(inb)
894
    IF (i==1) THEN
895
      afac = p(1)*(rs(1)-rp(1))/(1.0E4+2000.0*p(1)*rs(1))
896
    ELSE
897
      rp(i-1) = rp(i) + (cpd*(t(i)-t(i-1))+gz(i)-gz(i-1))/lv(i)
898
      rp(i-1) = 0.5*(rp(i-1)+rr(i-1))
899
      rp(i-1) = amin1(rp(i-1), rs(i-1))
900
      rp(i-1) = amax1(rp(i-1), 0.0)
901
      afac1 = p(i)*(rs(i)-rp(i))/(1.0E4+2000.0*p(i)*rs(i))
902
      afac2 = p(i-1)*(rs(i-1)-rp(i-1))/(1.0E4+2000.0*p(i-1)*rs(i-1))
903
      afac = 0.5*(afac1+afac2)
904
    END IF
905
    IF (i==inb) afac = 0.0
906
    afac = amax1(afac, 0.0)
907
    bfac = 1./(sigd*wt(i))
908
909
    ! jyg1
910
    ! CC        SIGT=1.0
911
    ! CC        IF(I.GE.ICB)SIGT=SIGP(I)
912
    ! Prise en compte de la variation progressive de SIGT dans
913
    ! les couches ICB et ICB-1:
914
    ! Pour PLCL<PH(I+1), PR1=0 & PR2=1
915
    ! Pour PLCL>PH(I),   PR1=1 & PR2=0
916
    ! Pour PH(I+1)<PLCL<PH(I), PR1 est la proportion a cheval
917
    ! sur le nuage, et PR2 est la proportion sous la base du
918
    ! nuage.
919
    pr1 = (plcl-ph(i+1))/(ph(i)-ph(i+1))
920
    pr1 = max(0., min(1.,pr1))
921
    pr2 = (ph(i)-plcl)/(ph(i)-ph(i+1))
922
    pr2 = max(0., min(1.,pr2))
923
    sigt = sigp(i)*pr1 + pr2
924
    ! sb3d         print *,'i,sigt,pr1,pr2', i,sigt,pr1,pr2
925
    ! jyg2
926
927
    b6 = bfac*50.*sigd*(ph(i)-ph(i+1))*sigt*afac
928
    c6 = water(i+1) + bfac*wdtrain - 50.*sigd*bfac*(ph(i)-ph(i+1))*evap(i+1)
929
    IF (c6>0.0) THEN
930
      revap = 0.5*(-b6+sqrt(b6*b6+4.*c6))
931
      evap(i) = sigt*afac*revap
932
      water(i) = revap*revap
933
    ELSE
934
      evap(i) = -evap(i+1) + 0.02*(wdtrain+sigd*wt(i)*water(i+1))/(sigd*(ph(i &
935
        )-ph(i+1)))
936
    END IF
937
938
939
940
    ! ***  CALCULATE PRECIPITATING DOWNDRAFT MASS FLUX UNDER     ***
941
    ! ***              HYDROSTATIC APPROXIMATION                 ***
942
943
    IF (i==1) GO TO 360
944
    tevap = amax1(0.0, evap(i))
945
    delth = amax1(0.001, (th(i)-th(i-1)))
946
    mp(i) = 10.*lvcp(i)*sigd*tevap*(p(i-1)-p(i))/delth
947
948
    ! ***           IF HYDROSTATIC ASSUMPTION FAILS,             ***
949
    ! ***   SOLVE CUBIC DIFFERENCE EQUATION FOR DOWNDRAFT THETA  ***
950
    ! ***  AND MASS FLUX FROM TWO SIMULTANEOUS DIFFERENTIAL EQNS ***
951
952
    amfac = sigd*sigd*70.0*ph(i)*(p(i-1)-p(i))*(th(i)-th(i-1))/(tv(i)*th(i))
953
    amp2 = abs(mp(i+1)*mp(i+1)-mp(i)*mp(i))
954
    IF (amp2>(0.1*amfac)) THEN
955
      xf = 100.0*sigd*sigd*sigd*(ph(i)-ph(i+1))
956
      tf = b(i) - 5.0*(th(i)-th(i-1))*t(i)/(lvcp(i)*sigd*th(i))
957
      af = xf*tf + mp(i+1)*mp(i+1)*tinv
958
      bf = 2.*(tinv*mp(i+1))**3 + tinv*mp(i+1)*xf*tf + &
959
        50.*(p(i-1)-p(i))*xf*tevap
960
      fac2 = 1.0
961
      IF (bf<0.0) fac2 = -1.0
962
      bf = abs(bf)
963
      ur = 0.25*bf*bf - af*af*af*tinv*tinv*tinv
964
      IF (ur>=0.0) THEN
965
        sru = sqrt(ur)
966
        fac = 1.0
967
        IF ((0.5*bf-sru)<0.0) fac = -1.0
968
        mp(i) = mp(i+1)*tinv + (0.5*bf+sru)**tinv + &
969
          fac*(abs(0.5*bf-sru))**tinv
970
      ELSE
971
        d = atan(2.*sqrt(-ur)/(bf+1.0E-28))
972
        IF (fac2<0.0) d = 3.14159 - d
973
        mp(i) = mp(i+1)*tinv + 2.*sqrt(af*tinv)*cos(d*tinv)
974
      END IF
975
      mp(i) = amax1(0.0, mp(i))
976
      b(i-1) = b(i) + 100.0*(p(i-1)-p(i))*tevap/(mp(i)+sigd*0.1) - &
977
        10.0*(th(i)-th(i-1))*t(i)/(lvcp(i)*sigd*th(i))
978
      b(i-1) = amax1(b(i-1), 0.0)
979
    END IF
980
981
982
983
    ! ***         LIMIT MAGNITUDE OF MP(I) TO MEET CFL CONDITION      ***
984
985
    ampmax = 2.0*(ph(i)-ph(i+1))*delti
986
    amp2 = 2.0*(ph(i-1)-ph(i))*delti
987
    ampmax = amin1(ampmax, amp2)
988
    mp(i) = amin1(mp(i), ampmax)
989
990
    ! ***      FORCE MP TO DECREASE LINEARLY TO ZERO                 ***
991
    ! ***       BETWEEN CLOUD BASE AND THE SURFACE                   ***
992
993
    IF (p(i)>p(icb)) THEN
994
      mp(i) = mp(icb)*(p(1)-p(i))/(p(1)-p(icb))
995
    END IF
996
360 CONTINUE
997
998
    ! ***       FIND MIXING RATIO OF PRECIPITATING DOWNDRAFT     ***
999
1000
    IF (i==inb) GO TO 400
1001
    rp(i) = rr(i)
1002
    IF (mp(i)>mp(i+1)) THEN
1003
      rp(i) = rp(i+1)*mp(i+1) + rr(i)*(mp(i)-mp(i+1)) + &
1004
        5.*sigd*(ph(i)-ph(i+1))*(evap(i+1)+evap(i))
1005
      rp(i) = rp(i)/mp(i)
1006
      up(i) = up(i+1)*mp(i+1) + u(i)*(mp(i)-mp(i+1))
1007
      up(i) = up(i)/mp(i)
1008
      vp(i) = vp(i+1)*mp(i+1) + v(i)*(mp(i)-mp(i+1))
1009
      vp(i) = vp(i)/mp(i)
1010
      DO j = 1, ntra
1011
        trap(i, j) = trap(i+1, j)*mp(i+1) + trap(i, j)*(mp(i)-mp(i+1))
1012
        trap(i, j) = trap(i, j)/mp(i)
1013
      END DO
1014
    ELSE
1015
      IF (mp(i+1)>1.0E-16) THEN
1016
        rp(i) = rp(i+1) + 5.0*sigd*(ph(i)-ph(i+1))*(evap(i+1)+evap(i))/mp(i+1 &
1017
          )
1018
        up(i) = up(i+1)
1019
        vp(i) = vp(i+1)
1020
        DO j = 1, ntra
1021
          trap(i, j) = trap(i+1, j)
1022
        END DO
1023
      END IF
1024
    END IF
1025
    rp(i) = amin1(rp(i), rs(i))
1026
    rp(i) = amax1(rp(i), 0.0)
1027
400 END DO
1028
1029
  ! ***  CALCULATE SURFACE PRECIPITATION IN MM/DAY     ***
1030
1031
  precip = wt(1)*sigd*water(1)*8640.0
1032
1033
  ! sb  ***  Calculate downdraft velocity scale and surface temperature and
1034
  ! ***
1035
  ! sb  ***                    water vapor fluctuations
1036
  ! ***
1037
  ! sb		(inspire de convect 4.3)
1038
1039
  ! BETAD=10.0
1040
  betad = 5.0
1041
  wd = betad*abs(mp(icb))*0.01*rd*t(icb)/(sigd*p(icb))
1042
1043
405 CONTINUE
1044
1045
  ! ***  CALCULATE TENDENCIES OF LOWEST LEVEL POTENTIAL TEMPERATURE  ***
1046
  ! ***                      AND MIXING RATIO                        ***
1047
1048
  dpinv = 1.0/(ph(1)-ph(2))
1049
  am = 0.0
1050
  DO k = 2, inb
1051
    am = am + m(k)
1052
  END DO
1053
  IF ((0.1*dpinv*am)>=delti) iflag = 4
1054
  ft(1) = 0.1*dpinv*am*(t(2)-t(1)+(gz(2)-gz(1))/cpn(1))
1055
  ft(1) = ft(1) - 0.5*lvcp(1)*sigd*(evap(1)+evap(2))
1056
  ft(1) = ft(1) - 0.09*sigd*mp(2)*t(1)*b(1)*dpinv
1057
  ft(1) = ft(1) + 0.01*sigd*wt(1)*(cl-cpd)*water(2)*(t(2)-t(1))*dpinv/cpn(1)
1058
  fr(1) = 0.1*mp(2)*(rp(2)-rr(1))* & ! correction bug conservation eau
1059
  ! 1    DPINV+SIGD*0.5*(EVAP(1)+EVAP(2))
1060
    dpinv + sigd*0.5*(evap(1)+evap(2))
1061
  ! IM cf. SBL
1062
  ! 1    DPINV+SIGD*EVAP(1)
1063
  fr(1) = fr(1) + 0.1*am*(rr(2)-rr(1))*dpinv
1064
  fu(1) = fu(1) + 0.1*dpinv*(mp(2)*(up(2)-u(1))+am*(u(2)-u(1)))
1065
  fv(1) = fv(1) + 0.1*dpinv*(mp(2)*(vp(2)-v(1))+am*(v(2)-v(1)))
1066
  DO j = 1, ntra
1067
    ftra(1, j) = ftra(1, j) + 0.1*dpinv*(mp(2)*(trap(2,j)-tra(1, &
1068
      j))+am*(tra(2,j)-tra(1,j)))
1069
  END DO
1070
  amde = 0.0
1071
  DO j = 2, inb
1072
    fr(1) = fr(1) + 0.1*dpinv*ment(j, 1)*(qent(j,1)-rr(1))
1073
    fu(1) = fu(1) + 0.1*dpinv*ment(j, 1)*(uent(j,1)-u(1))
1074
    fv(1) = fv(1) + 0.1*dpinv*ment(j, 1)*(vent(j,1)-v(1))
1075
    DO k = 1, ntra
1076
      ftra(1, k) = ftra(1, k) + 0.1*dpinv*ment(j, 1)*(traent(j,1,k)-tra(1,k))
1077
    END DO
1078
  END DO
1079
1080
  ! ***  CALCULATE TENDENCIES OF POTENTIAL TEMPERATURE AND MIXING RATIO  ***
1081
  ! ***               AT LEVELS ABOVE THE LOWEST LEVEL                   ***
1082
1083
  ! ***  FIRST FIND THE NET SATURATED UPDRAFT AND DOWNDRAFT MASS FLUXES  ***
1084
  ! ***                      THROUGH EACH LEVEL                          ***
1085
1086
1087
1088
  DO i = 2, inb
1089
    dpinv = 1.0/(ph(i)-ph(i+1))
1090
    cpinv = 1.0/cpn(i)
1091
    amp1 = 0.0
1092
    DO k = i + 1, inb + 1
1093
      amp1 = amp1 + m(k)
1094
    END DO
1095
    DO k = 1, i
1096
      DO j = i + 1, inb + 1
1097
        amp1 = amp1 + ment(k, j)
1098
      END DO
1099
    END DO
1100
    IF ((0.1*dpinv*amp1)>=delti) iflag = 4
1101
    ad = 0.0
1102
    DO k = 1, i - 1
1103
      DO j = i, inb
1104
        ad = ad + ment(j, k)
1105
      END DO
1106
    END DO
1107
    ft(i) = 0.1*dpinv*(amp1*(t(i+1)-t(i)+(gz(i+1)-gz(i))*cpinv)-ad*(t(i)-t(i- &
1108
      1)+(gz(i)-gz(i-1))*cpinv)) - 0.5*sigd*lvcp(i)*(evap(i)+evap(i+1))
1109
    rat = cpn(i-1)*cpinv
1110
    ft(i) = ft(i) - 0.09*sigd*(mp(i+1)*t(i)*b(i)-mp(i)*t(i-1)*rat*b(i-1))* &
1111
      dpinv
1112
    ft(i) = ft(i) + 0.1*dpinv*ment(i, i)*(hp(i)-h(i)+t(i)*(cpv-cpd)*(rr(i)- &
1113
      qent(i,i)))*cpinv
1114
    ft(i) = ft(i) + 0.01*sigd*wt(i)*(cl-cpd)*water(i+1)*(t(i+1)-t(i))*dpinv* &
1115
      cpinv
1116
    fr(i) = 0.1*dpinv*(amp1*(rr(i+1)-rr(i))-ad*(rr(i)-rr(i-1)))
1117
    fu(i) = fu(i) + 0.1*dpinv*(amp1*(u(i+1)-u(i))-ad*(u(i)-u(i-1)))
1118
    fv(i) = fv(i) + 0.1*dpinv*(amp1*(v(i+1)-v(i))-ad*(v(i)-v(i-1)))
1119
    DO k = 1, ntra
1120
      ftra(i, k) = ftra(i, k) + 0.1*dpinv*(amp1*(tra(i+1,k)-tra(i, &
1121
        k))-ad*(tra(i,k)-tra(i-1,k)))
1122
    END DO
1123
    DO k = 1, i - 1
1124
      awat = elij(k, i) - (1.-ep(i))*clw(i)
1125
      awat = amax1(awat, 0.0)
1126
      fr(i) = fr(i) + 0.1*dpinv*ment(k, i)*(qent(k,i)-awat-rr(i))
1127
      fu(i) = fu(i) + 0.1*dpinv*ment(k, i)*(uent(k,i)-u(i))
1128
      fv(i) = fv(i) + 0.1*dpinv*ment(k, i)*(vent(k,i)-v(i))
1129
      ! (saturated updrafts resulting from mixing)      ! cld
1130
      qcond(i) = qcond(i) + (elij(k,i)-awat) ! cld
1131
      nqcond(i) = nqcond(i) + 1. ! cld
1132
      DO j = 1, ntra
1133
        ftra(i, j) = ftra(i, j) + 0.1*dpinv*ment(k, i)*(traent(k,i,j)-tra(i,j &
1134
          ))
1135
      END DO
1136
    END DO
1137
    DO k = i, inb
1138
      fr(i) = fr(i) + 0.1*dpinv*ment(k, i)*(qent(k,i)-rr(i))
1139
      fu(i) = fu(i) + 0.1*dpinv*ment(k, i)*(uent(k,i)-u(i))
1140
      fv(i) = fv(i) + 0.1*dpinv*ment(k, i)*(vent(k,i)-v(i))
1141
      DO j = 1, ntra
1142
        ftra(i, j) = ftra(i, j) + 0.1*dpinv*ment(k, i)*(traent(k,i,j)-tra(i,j &
1143
          ))
1144
      END DO
1145
    END DO
1146
    fr(i) = fr(i) + 0.5*sigd*(evap(i)+evap(i+1)) + 0.1*(mp(i+1)*(rp(i+ &
1147
      1)-rr(i))-mp(i)*(rp(i)-rr(i-1)))*dpinv
1148
    fu(i) = fu(i) + 0.1*(mp(i+1)*(up(i+1)-u(i))-mp(i)*(up(i)-u(i-1)))*dpinv
1149
    fv(i) = fv(i) + 0.1*(mp(i+1)*(vp(i+1)-v(i))-mp(i)*(vp(i)-v(i-1)))*dpinv
1150
    DO j = 1, ntra
1151
      ftra(i, j) = ftra(i, j) + 0.1*dpinv*(mp(i+1)*(trap(i+1,j)-tra(i, &
1152
        j))-mp(i)*(trap(i,j)-trap(i-1,j)))
1153
    END DO
1154
    ! (saturated downdrafts resulting from mixing)    ! cld
1155
    DO k = i + 1, inb ! cld
1156
      qcond(i) = qcond(i) + elij(k, i) ! cld
1157
      nqcond(i) = nqcond(i) + 1. ! cld
1158
    END DO ! cld
1159
    ! (particular case: no detraining level is found) ! cld
1160
    IF (nent(i)==0) THEN ! cld
1161
      qcond(i) = qcond(i) + (1-ep(i))*clw(i) ! cld
1162
      nqcond(i) = nqcond(i) + 1. ! cld
1163
    END IF ! cld
1164
    IF (nqcond(i)/=0.) THEN ! cld
1165
      qcond(i) = qcond(i)/nqcond(i) ! cld
1166
    END IF ! cld
1167
  END DO
1168
1169
1170
1171
1172
  ! ***   MOVE THE DETRAINMENT AT LEVEL INB DOWN TO LEVEL INB-1   ***
1173
  ! ***        IN SUCH A WAY AS TO PRESERVE THE VERTICALLY        ***
1174
  ! ***          INTEGRATED ENTHALPY AND WATER TENDENCIES         ***
1175
1176
  ! test sb:
1177
  ! @      write(*,*) '--------------------------------------------'
1178
  ! @      write(*,*) 'inb,ft,hp,h,t,rr,qent,ment,water,waterp,wt,mp,b'
1179
  ! @      write(*,*) inb,ft(inb),hp(inb),h(inb)
1180
  ! @     :   ,t(inb),rr(inb),qent(inb,inb)
1181
  ! @     :   ,ment(inb,inb),water(inb)
1182
  ! @     :   ,water(inb+1),wt(inb),mp(inb),b(inb)
1183
  ! @      write(*,*) '--------------------------------------------'
1184
  ! fin test sb:
1185
1186
  ax = 0.1*ment(inb, inb)*(hp(inb)-h(inb)+t(inb)*(cpv-cpd)*(rr(inb)-qent(inb, &
1187
    inb)))/(cpn(inb)*(ph(inb)-ph(inb+1)))
1188
  ft(inb) = ft(inb) - ax
1189
  ft(inb-1) = ft(inb-1) + ax*cpn(inb)*(ph(inb)-ph(inb+1))/(cpn(inb-1)*(ph(inb &
1190
    -1)-ph(inb)))
1191
  bx = 0.1*ment(inb, inb)*(qent(inb,inb)-rr(inb))/(ph(inb)-ph(inb+1))
1192
  fr(inb) = fr(inb) - bx
1193
  fr(inb-1) = fr(inb-1) + bx*(ph(inb)-ph(inb+1))/(ph(inb-1)-ph(inb))
1194
  cx = 0.1*ment(inb, inb)*(uent(inb,inb)-u(inb))/(ph(inb)-ph(inb+1))
1195
  fu(inb) = fu(inb) - cx
1196
  fu(inb-1) = fu(inb-1) + cx*(ph(inb)-ph(inb+1))/(ph(inb-1)-ph(inb))
1197
  dx = 0.1*ment(inb, inb)*(vent(inb,inb)-v(inb))/(ph(inb)-ph(inb+1))
1198
  fv(inb) = fv(inb) - dx
1199
  fv(inb-1) = fv(inb-1) + dx*(ph(inb)-ph(inb+1))/(ph(inb-1)-ph(inb))
1200
  DO j = 1, ntra
1201
    ex = 0.1*ment(inb, inb)*(traent(inb,inb,j)-tra(inb,j))/ &
1202
      (ph(inb)-ph(inb+1))
1203
    ftra(inb, j) = ftra(inb, j) - ex
1204
    ftra(inb-1, j) = ftra(inb-1, j) + ex*(ph(inb)-ph(inb+1))/(ph(inb-1)-ph( &
1205
      inb))
1206
  END DO
1207
1208
  ! ***    HOMOGINIZE TENDENCIES BELOW CLOUD BASE    ***
1209
1210
  asum = 0.0
1211
  bsum = 0.0
1212
  csum = 0.0
1213
  dsum = 0.0
1214
  DO i = 1, icb - 1
1215
    asum = asum + ft(i)*(ph(i)-ph(i+1))
1216
    bsum = bsum + fr(i)*(lv(i)+(cl-cpd)*(t(i)-t(1)))*(ph(i)-ph(i+1))
1217
    csum = csum + (lv(i)+(cl-cpd)*(t(i)-t(1)))*(ph(i)-ph(i+1))
1218
    dsum = dsum + t(i)*(ph(i)-ph(i+1))/th(i)
1219
  END DO
1220
  DO i = 1, icb - 1
1221
    ft(i) = asum*t(i)/(th(i)*dsum)
1222
    fr(i) = bsum/csum
1223
  END DO
1224
1225
  ! ***           RESET COUNTER AND RETURN           ***
1226
1227
  sig(nd) = 2.0
1228
1229
1230
  DO i = 1, nd
1231
    upwd(i) = 0.0
1232
    dnwd(i) = 0.0
1233
    ! sb       dnwd0(i) = - mp(i)
1234
  END DO
1235
1236
  DO i = 1, nl
1237
    dnwd0(i) = -mp(i)
1238
  END DO
1239
  DO i = nl + 1, nd
1240
    dnwd0(i) = 0.
1241
  END DO
1242
1243
  DO i = icb, inb
1244
    upwd(i) = 0.0
1245
    dnwd(i) = 0.0
1246
1247
    DO k = i, inb
1248
      up1 = 0.0
1249
      dn1 = 0.0
1250
      DO n = 1, i - 1
1251
        up1 = up1 + ment(n, k)
1252
        dn1 = dn1 - ment(k, n)
1253
      END DO
1254
      upwd(i) = upwd(i) + m(k) + up1
1255
      dnwd(i) = dnwd(i) + dn1
1256
    END DO
1257
  END DO
1258
1259
  ! ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
1260
  ! DETERMINATION DE LA VARIATION DE FLUX ASCENDANT ENTRE
1261
  ! DEUX NIVEAU NON DILUE Mike
1262
  ! ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
1263
1264
1265
  ! sb      do i=1,ND
1266
  ! sb      Mike(i)=M(i)
1267
  ! sb      enddo
1268
1269
  DO i = 1, nl
1270
    mike(i) = m(i)
1271
  END DO
1272
  DO i = nl + 1, nd
1273
    mike(i) = 0.
1274
  END DO
1275
1276
  DO i = 1, nd
1277
    ma(i) = 0
1278
  END DO
1279
1280
  ! sb      do i=1,nd
1281
  ! sb      do j=i,nd
1282
  ! sb      Ma(i)=Ma(i)+M(j)
1283
  ! sb      enddo
1284
  ! sb      enddo
1285
1286
  DO i = 1, nl
1287
    DO j = i, nl
1288
      ma(i) = ma(i) + m(j)
1289
    END DO
1290
  END DO
1291
1292
  DO i = nl + 1, nd
1293
    ma(i) = 0.
1294
  END DO
1295
1296
  DO i = 1, icb - 1
1297
    ma(i) = 0
1298
  END DO
1299
1300
1301
1302
  ! cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
1303
  ! ICB REPRESENTE DE NIVEAU OU SE TROUVE LA
1304
  ! BASE DU NUAGE , ET INB LE TOP DU NUAGE
1305
  ! ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
1306
1307
1308
  DO i = 1, nd
1309
    mke(i) = upwd(i) + dnwd(i)
1310
  END DO
1311
1312
1313
  ! *** Diagnose the in-cloud mixing ratio   ***              ! cld
1314
  ! ***           of condensed water         ***              ! cld
1315
  ! ! cld
1316
  DO i = 1, nd ! cld
1317
    maa(i) = 0.0 ! cld
1318
    wa(i) = 0.0 ! cld
1319
    siga(i) = 0.0 ! cld
1320
  END DO ! cld
1321
  DO i = nk, inb ! cld
1322
    DO k = i + 1, inb + 1 ! cld
1323
      maa(i) = maa(i) + m(k) ! cld
1324
    END DO ! cld
1325
  END DO ! cld
1326
  DO i = icb, inb - 1 ! cld
1327
    axc(i) = 0. ! cld
1328
    DO j = icb, i ! cld
1329
      axc(i) = axc(i) + rd*(tvp(j)-tv(j))*(ph(j)-ph(j+1))/p(j) ! cld
1330
    END DO ! cld
1331
    IF (axc(i)>0.0) THEN ! cld
1332
      wa(i) = sqrt(2.*axc(i)) ! cld
1333
    END IF ! cld
1334
  END DO ! cld
1335
  DO i = 1, nl ! cld
1336
    IF (wa(i)>0.0) &               ! cld
1337
      siga(i) = maa(i)/wa(i)*rd*tvp(i)/p(i)/100./deltac ! cld
1338
    siga(i) = min(siga(i), 1.0) ! cld
1339
    qcondc(i) = siga(i)*clw(i)*(1.-ep(i)) & ! cld
1340
      +(1.-siga(i))*qcond(i) ! cld
1341
  END DO ! cld
1342
1343
1344
  ! @$$cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
1345
  ! @$$         call writeg1d(1,klev,ma,'ma  ','ma  ')
1346
  ! @$$          call writeg1d(1,klev,upwd,'upwd  ','upwd  ')
1347
  ! @$$          call writeg1d(1,klev,dnwd,'dnwd  ','dnwd  ')
1348
  ! @$$          call writeg1d(1,klev,dnwd0,'dnwd0  ','dnwd0  ')
1349
  ! @$$          call writeg1d(1,klev,tvp,'tvp  ','tvp  ')
1350
  ! @$$          call writeg1d(1,klev,tra(1:klev,3),'tra3  ','tra3  ')
1351
  ! @$$          call writeg1d(1,klev,tra(1:klev,4),'tra4  ','tra4  ')
1352
  ! @$$          call writeg1d(1,klev,tra(1:klev,5),'tra5  ','tra5  ')
1353
  ! @$$          call writeg1d(1,klev,tra(1:klev,6),'tra6  ','tra6  ')
1354
  ! @$$          call writeg1d(1,klev,tra(1:klev,7),'tra7  ','tra7  ')
1355
  ! @$$          call writeg1d(1,klev,tra(1:klev,8),'tra8  ','tra8  ')
1356
  ! @$$          call writeg1d(1,klev,tra(1:klev,9),'tra9  ','tra9  ')
1357
  ! @$$          call writeg1d(1,klev,tra(1:klev,10),'tra10','tra10')
1358
  ! @$$          call writeg1d(1,klev,tra(1:klev,11),'tra11','tra11')
1359
  ! @$$          call writeg1d(1,klev,tra(1:klev,12),'tra12','tra12')
1360
  ! @$$          call writeg1d(1,klev,tra(1:klev,13),'tra13','tra13')
1361
  ! @$$          call writeg1d(1,klev,tra(1:klev,14),'tra14','tra14')
1362
  ! @$$          call writeg1d(1,klev,tra(1:klev,15),'tra15','tra15')
1363
  ! @$$          call writeg1d(1,klev,tra(1:klev,16),'tra16','tra16')
1364
  ! @$$          call writeg1d(1,klev,tra(1:klev,17),'tra17','tra17')
1365
  ! @$$          call writeg1d(1,klev,tra(1:klev,18),'tra18','tra18')
1366
  ! @$$          call writeg1d(1,klev,tra(1:klev,19),'tra19','tra19')
1367
  ! @$$          call writeg1d(1,klev,tra(1:klev,20),'tra20','tra20 ')
1368
  ! @$$          call writeg1d(1,klev,trap(1:klev,1),'trp1','trp1')
1369
  ! @$$          call writeg1d(1,klev,trap(1:klev,2),'trp2','trp2')
1370
  ! @$$          call writeg1d(1,klev,trap(1:klev,3),'trp3','trp3')
1371
  ! @$$          call writeg1d(1,klev,trap(1:klev,4),'trp4','trp4')
1372
  ! @$$          call writeg1d(1,klev,trap(1:klev,5),'trp5','trp5')
1373
  ! @$$          call writeg1d(1,klev,trap(1:klev,10),'trp10','trp10')
1374
  ! @$$          call writeg1d(1,klev,trap(1:klev,12),'trp12','trp12')
1375
  ! @$$          call writeg1d(1,klev,trap(1:klev,15),'trp15','trp15')
1376
  ! @$$          call writeg1d(1,klev,trap(1:klev,20),'trp20','trp20')
1377
  ! @$$          call writeg1d(1,klev,ftra(1:klev,1),'ftr1  ','ftr1  ')
1378
  ! @$$          call writeg1d(1,klev,ftra(1:klev,2),'ftr2  ','ftr2  ')
1379
  ! @$$          call writeg1d(1,klev,ftra(1:klev,3),'ftr3  ','ftr3  ')
1380
  ! @$$          call writeg1d(1,klev,ftra(1:klev,4),'ftr4  ','ftr4  ')
1381
  ! @$$          call writeg1d(1,klev,ftra(1:klev,5),'ftr5  ','ftr5  ')
1382
  ! @$$          call writeg1d(1,klev,ftra(1:klev,6),'ftr6  ','ftr6  ')
1383
  ! @$$          call writeg1d(1,klev,ftra(1:klev,7),'ftr7  ','ftr7  ')
1384
  ! @$$          call writeg1d(1,klev,ftra(1:klev,8),'ftr8  ','ftr8  ')
1385
  ! @$$          call writeg1d(1,klev,ftra(1:klev,9),'ftr9  ','ftr9  ')
1386
  ! @$$          call writeg1d(1,klev,ftra(1:klev,10),'ftr10','ftr10')
1387
  ! @$$          call writeg1d(1,klev,ftra(1:klev,11),'ftr11','ftr11')
1388
  ! @$$          call writeg1d(1,klev,ftra(1:klev,12),'ftr12','ftr12')
1389
  ! @$$          call writeg1d(1,klev,ftra(1:klev,13),'ftr13','ftr13')
1390
  ! @$$          call writeg1d(1,klev,ftra(1:klev,14),'ftr14','ftr14')
1391
  ! @$$          call writeg1d(1,klev,ftra(1:klev,15),'ftr15','ftr15')
1392
  ! @$$          call writeg1d(1,klev,ftra(1:klev,16),'ftr16','ftr16')
1393
  ! @$$          call writeg1d(1,klev,ftra(1:klev,17),'ftr17','ftr17')
1394
  ! @$$          call writeg1d(1,klev,ftra(1:klev,18),'ftr18','ftr18')
1395
  ! @$$          call writeg1d(1,klev,ftra(1:klev,19),'ftr19','ftr19')
1396
  ! @$$          call writeg1d(1,klev,ftra(1:klev,20),'ftr20','ftr20 ')
1397
  ! @$$          call writeg1d(1,klev,mp,'mp  ','mp ')
1398
  ! @$$          call writeg1d(1,klev,Mke,'Mke  ','Mke ')
1399
1400
1401
1402
  ! cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
1403
1404
1405
  RETURN
1406
END SUBROUTINE convect3
1407
! ---------------------------------------------------------------------------