source: LMDZ6/trunk/libf/phylmd/concvl.f90 @ 5284

Last change on this file since 5284 was 5284, checked in by abarral, 6 hours ago

Turn alpale.h alpale.f90 YOETHF.h into modules

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 21.6 KB
Line 
1SUBROUTINE concvl(iflag_clos, &
2                  dtime, paprs, pplay, k_upper_cv, &
3                  t, q, t_wake, q_wake, s_wake, u, v, tra, ntra, &
4                  Ale, Alp, sig1, w01, &
5                  d_t, d_q, d_qcomp, d_u, d_v, d_tra, &
6                  rain, snow, kbas, ktop, sigd, &
7                  cbmf, plcl, plfc, wbeff, convoccur, &
8                  upwd, dnwd, dnwdbis, &
9                  Ma, mip, Vprecip, &
10                  cape, cin, tvp, Tconv, iflag, &
11                  pbase, bbase, dtvpdt1, dtvpdq1, dplcldt, dplcldr, &
12                  qcondc, wd, pmflxr, pmflxs, &
13!RomP >>>
14!!     .             da,phi,mp,dd_t,dd_q,lalim_conv,wght_th)
15                  da, phi, mp, phii, d1a, dam, sij, qta, clw, elij, &! RomP
16                  dd_t, dd_q, lalim_conv, wght_th, &                 ! RomP
17                  evap, ep, epmlmMm, eplaMm, &                       ! RomP
18                  wdtrainA, wdtrainS, wdtrainM, wght, qtc, sigt, detrain, &
19                  tau_cld_cv, coefw_cld_cv, &                           ! RomP+RL, AJ
20!RomP <<<
21                  epmax_diag) ! epmax_cape
22! **************************************************************
23! *
24! CONCVL                                                      *
25! *
26! *
27! written by   : Sandrine Bony-Lena, 17/05/2003, 11.16.04    *
28! modified by :                                               *
29! **************************************************************
30
31
32  USE clesphys_mod_h
33  USE dimphy
34  USE infotrac_phy, ONLY: nbtr
35  USE phys_local_var_mod, ONLY: omega
36  USE print_control_mod, ONLY: prt_level, lunout
37  USE yomcst_mod_h, ONLY: RPI, RCLUM, RHPLA, RKBOL, RNAVO                   &
38          , RDAY, REA, REPSM, RSIYEA, RSIDAY, ROMEGA                  &
39          , R_ecc, R_peri, R_incl                                      &
40          , RA, RG, R1SA                                         &
41          , RSIGMA                                                     &
42          , R, RMD, RMV, RD, RV, RCPD                    &
43          , RMO3, RMCO2, RMC, RMCH4, RMN2O, RMCFC11, RMCFC12        &
44          , RCPV, RCVD, RCVV, RKAPPA, RETV, eps_w                    &
45          , RCW, RCS                                                 &
46          , RLVTT, RLSTT, RLMLT, RTT, RATM                           &
47          , RESTT, RALPW, RBETW, RGAMW, RALPS, RBETS, RGAMS            &
48          , RALPD, RBETD, RGAMD
49  USE conema3_mod_h
50  USE yoethf_mod_h
51  IMPLICIT NONE
52! ======================================================================
53! Auteur(s): S. Bony-Lena (LMD/CNRS) date: ???
54! Objet: schema de convection de Emanuel (1991) interface
55! ======================================================================
56! Arguments:
57! dtime--input-R-pas d'integration (s)
58! s-------input-R-la vAleur "s" pour chaque couche
59! sigs----input-R-la vAleur "sigma" de chaque couche
60! sig-----input-R-la vAleur de "sigma" pour chaque niveau
61! psolpa--input-R-la pression au sol (en Pa)
62! pskapa--input-R-exponentiel kappa de psolpa
63! h-------input-R-enthAlpie potentielle (Cp*T/P**kappa)
64! q-------input-R-vapeur d'eau (en kg/kg)
65
66! work*: input et output: deux variables de travail,
67! on peut les mettre a 0 au debut
68! ALE--------input-R-energie disponible pour soulevement
69! ALP--------input-R-puissance disponible pour soulevement
70
71! d_h--------output-R-increment de l'enthAlpie potentielle (h)
72! d_q--------output-R-increment de la vapeur d'eau
73! rain-------output-R-la pluie (mm/s)
74! snow-------output-R-la neige (mm/s)
75! upwd-------output-R-saturated updraft mass flux (kg/m**2/s)
76! dnwd-------output-R-saturated downdraft mass flux (kg/m**2/s)
77! dnwd0------output-R-unsaturated downdraft mass flux (kg/m**2/s)
78! Ma---------output-R-adiabatic ascent mass flux (kg/m2/s)
79! mip--------output-R-mass flux shed by adiabatic ascent (kg/m2/s)
80! Vprecip----output-R-vertical profile of total precipitation (kg/m2/s)
81! Tconv------output-R-environment temperature seen by convective scheme (K)
82! Cape-------output-R-CAPE (J/kg)
83! Cin -------output-R-CIN  (J/kg)
84! Tvp--------output-R-Temperature virtuelle d'une parcelle soulevee
85! adiabatiquement a partir du niveau 1 (K)
86! deltapb----output-R-distance entre LCL et base de la colonne (<0 ; Pa)
87! Ice_flag---input-L-TRUE->prise en compte de la thermodynamique de la glace
88! dd_t-------output-R-increment de la temperature du aux descentes precipitantes
89! dd_q-------output-R-increment de la vapeur d'eau du aux desc precip
90! lalim_conv-
91! wght_th----
92! evap-------output-R
93! ep---------output-R
94! epmlmMm----output-R
95! eplaMm-----output-R
96! wdtrainA---output-R
97! wdtrainS---output-R
98! wdtrainM---output-R
99! wght-------output-R
100! ======================================================================
101
102
103
104  INTEGER, INTENT(IN)                           :: iflag_clos
105  REAL, INTENT(IN)                              :: dtime
106  REAL, DIMENSION(klon,klev),   INTENT(IN)      :: pplay
107  REAL, DIMENSION(klon,klev+1), INTENT(IN)      :: paprs
108  INTEGER,                      INTENT(IN)      :: k_upper_cv
109  REAL, DIMENSION(klon,klev),   INTENT(IN)      :: t, q, u, v
110  REAL, DIMENSION(klon,klev),   INTENT(IN)      :: t_wake, q_wake
111  REAL, DIMENSION(klon),        INTENT(IN)      :: s_wake
112  REAL, DIMENSION(klon,klev, nbtr),INTENT(IN)   :: tra
113  INTEGER,                      INTENT(IN)      :: ntra
114  REAL, DIMENSION(klon),        INTENT(IN)      :: Ale, Alp
115!CR:test: on passe lentr et alim_star des thermiques
116  INTEGER, DIMENSION(klon),     INTENT(IN)      :: lalim_conv
117  REAL, DIMENSION(klon,klev),   INTENT(IN)      :: wght_th
118
119  REAL, DIMENSION(klon,klev),   INTENT(INOUT)   :: sig1, w01
120
121  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: d_t, d_q, d_qcomp, d_u, d_v
122  REAL, DIMENSION(klon,klev, nbtr),INTENT(OUT)  :: d_tra
123  REAL, DIMENSION(klon),        INTENT(OUT)     :: rain, snow
124
125  INTEGER, DIMENSION(klon),     INTENT(OUT)     :: kbas, ktop
126  REAL, DIMENSION(klon),        INTENT(OUT)     :: sigd
127  REAL, DIMENSION(klon),        INTENT(OUT)     :: cbmf, plcl, plfc, wbeff
128  REAL, DIMENSION(klon),        INTENT(OUT)     :: convoccur
129  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: upwd, dnwd, dnwdbis
130
131!!       REAL Ma(klon,klev), mip(klon,klev),Vprecip(klon,klev)                    !jyg
132  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: Ma, mip
133  REAL, DIMENSION(klon,klev+1), INTENT(OUT)     :: Vprecip                        !jyg
134  REAL, DIMENSION(klon),        INTENT(OUT)     :: cape, cin
135  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: tvp
136  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: Tconv
137  INTEGER, DIMENSION(klon),     INTENT(OUT)     :: iflag
138  REAL, DIMENSION(klon),        INTENT(OUT)     :: pbase, bbase
139  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: dtvpdt1, dtvpdq1
140  REAL, DIMENSION(klon),        INTENT(OUT)     :: dplcldt, dplcldr
141  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: qcondc
142  REAL, DIMENSION(klon),        INTENT(OUT)     :: wd
143  REAL, DIMENSION(klon,klev+1), INTENT(OUT)     :: pmflxr, pmflxs
144
145  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: da, mp
146  REAL, DIMENSION(klon,klev,klev),INTENT(OUT)   :: phi
147! RomP >>>
148  REAL, DIMENSION(klon,klev,klev),INTENT(OUT)   :: phii
149  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: d1a, dam
150  REAL, DIMENSION(klon,klev,klev),INTENT(OUT)   :: sij, elij
151  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: qta
152  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: clw
153  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: dd_t, dd_q
154  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: evap, ep
155  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: eplaMm
156  REAL, DIMENSION(klon,klev,klev), INTENT(OUT)  :: epmlmMm
157  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: wdtrainA, wdtrainS, wdtrainM
158! RomP <<<
159  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: wght                       !RL
160  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: qtc
161  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: sigt, detrain
162  REAL,                         INTENT(OUT)     :: tau_cld_cv, coefw_cld_cv
163  REAL, DIMENSION(klon),        INTENT(OUT)     :: epmax_diag                ! epmax_cape
164
165!
166!  Local
167!  ----
168  REAL, DIMENSION(klon,klev)                    :: em_p
169  REAL, DIMENSION(klon,klev+1)                  :: em_ph
170  REAL                                          :: em_sig1feed ! sigma at lower bound of feeding layer
171  REAL                                          :: em_sig2feed ! sigma at upper bound of feeding layer
172  REAL, DIMENSION(klev)                         :: em_wght ! weight density determining the feeding mixture
173  REAL, DIMENSION(klon,klev+1)                  :: Vprecipi                       !jyg
174!on enleve le save
175! SAVE em_sig1feed,em_sig2feed,em_wght
176
177  REAL, DIMENSION(klon)                         :: rflag
178  REAL, DIMENSION(klon)                         :: plim1, plim2
179  REAL, DIMENSION(klon)                         :: ptop2
180  REAL, DIMENSION(klon,klev)                    :: asupmax
181  REAL, DIMENSION(klon)                         :: supmax0, asupmaxmin
182  REAL                                          :: zx_t, zdelta, zx_qs, zcor
183!
184!   INTEGER iflag_mix
185!   SAVE iflag_mix
186  INTEGER                                       :: noff, minorig
187  INTEGER                                       :: i,j, k, itra
188  REAL, DIMENSION(klon,klev)                    :: qs, qs_wake
189!LF          SAVE cbmf
190!IM/JYG      REAL, SAVE, ALLOCATABLE :: cbmf(:)
191!!!$OMP THREADPRIVATE(cbmf)!
192  REAL, DIMENSION(klon)                         :: cbmflast
193
194
195! Variables supplementaires liees au bilan d'energie
196! Real paire(klon)
197!LF      Real ql(klon,klev)
198! Save paire
199!LF      Save ql
200!LF      Real t1(klon,klev),q1(klon,klev)
201!LF      Save t1,q1
202! Data paire /1./
203  REAL, SAVE, ALLOCATABLE :: ql(:, :), q1(:, :), t1(:, :)
204!$OMP THREADPRIVATE(ql, q1, t1)
205
206! Variables liees au bilan d'energie et d'enthAlpi
207  REAL ztsol(klon)
208  REAL        h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot, &
209              h_qs_tot, qw_tot, ql_tot, qs_tot, ec_tot
210  SAVE        h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot, &
211              h_qs_tot, qw_tot, ql_tot, qs_tot, ec_tot
212!$OMP THREADPRIVATE(h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot)
213!$OMP THREADPRIVATE(h_qs_tot, qw_tot, ql_tot, qs_tot , ec_tot)
214  REAL        d_h_vcol, d_h_dair, d_qt, d_qw, d_ql, d_qs, d_ec
215  REAL        d_h_vcol_phy
216  REAL        fs_bound, fq_bound
217  SAVE        d_h_vcol_phy
218!$OMP THREADPRIVATE(d_h_vcol_phy)
219  REAL        zero_v(klon)
220  CHARACTER *15 ztit
221  INTEGER     ip_ebil ! PRINT level for energy conserv. diag.
222  SAVE        ip_ebil
223  DATA        ip_ebil/2/
224!$OMP THREADPRIVATE(ip_ebil)
225  INTEGER     if_ebil ! level for energy conserv. dignostics
226  SAVE        if_ebil
227  DATA        if_ebil/2/
228!$OMP THREADPRIVATE(if_ebil)
229!+jld ec_conser
230  REAL d_t_ec(klon, klev) ! tendance du a la conersion Ec -> E thermique
231  REAL zrcpd
232!-jld ec_conser
233!LF
234  INTEGER nloc
235  LOGICAL, SAVE            :: first = .TRUE.
236!$OMP THREADPRIVATE(first)
237  INTEGER, SAVE            :: itap, igout
238!$OMP THREADPRIVATE(itap, igout)
239  include "YOMCST2.h"
240  include "FCTTRE.h"
241
242  IF (first) THEN
243! Allocate some variables LF 04/2008
244
245!IM/JYG allocate(cbmf(klon))
246    ALLOCATE (ql(klon,klev))
247    ALLOCATE (t1(klon,klev))
248    ALLOCATE (q1(klon,klev))
249!
250    convoccur(:) = 0.
251!
252    itap = 0
253    igout = klon/2 + 1/klon
254  END IF
255! Incrementer le compteur de la physique
256  itap = itap + 1
257
258! Copy T into Tconv
259  DO k = 1, klev
260    DO i = 1, klon
261      Tconv(i, k) = t(i, k)
262    END DO
263  END DO
264
265  IF (if_ebil>=1) THEN
266    DO i = 1, klon
267      ztsol(i) = t(i, 1)
268      zero_v(i) = 0.
269      DO k = 1, klev
270        ql(i, k) = 0.
271      END DO
272    END DO
273  END IF
274
275! ym
276  snow(:) = 0
277
278  IF (first) THEN
279    first = .FALSE.
280
281! ===========================================================================
282! READ IN PARAMETERS FOR THE CLOSURE AND THE MIXING DISTRIBUTION
283! ===========================================================================
284
285    IF (iflag_con==3) THEN
286!      CALL cv3_inicp()
287      CALL cv3_inip()
288    END IF
289
290! ===========================================================================
291! READ IN PARAMETERS FOR CONVECTIVE INHIBITION BY TROPOS. DRYNESS
292! ===========================================================================
293
294! c$$$         open (56,file='supcrit.data')
295! c$$$         read (56,*) Supcrit1, Supcrit2
296! c$$$         close (56)
297
298    IF (prt_level>=10) WRITE (lunout, *) 'supcrit1, supcrit2', supcrit1, supcrit2
299
300! ===========================================================================
301! Initialisation pour les bilans d'eau et d'energie
302! ===========================================================================
303    IF (if_ebil>=1) d_h_vcol_phy = 0.
304
305    DO i = 1, klon
306      cbmf(i) = 0.
307!!          plcl(i) = 0.
308      sigd(i) = 0.
309    END DO
310  END IF !(first)
311
312! Initialisation a chaque pas de temps
313  plfc(:) = 0.
314  wbeff(:) = 100.
315  plcl(:) = 0.
316
317  DO k = 1, klev + 1
318    DO i = 1, klon
319      em_ph(i, k) = paprs(i, k)/100.0
320      pmflxr(i, k) = 0.
321      pmflxs(i, k) = 0.
322    END DO
323  END DO
324
325  DO k = 1, klev
326    DO i = 1, klon
327      em_p(i, k) = pplay(i, k)/100.0
328    END DO
329  END DO
330
331
332! Feeding layer
333
334  em_sig1feed = 1.
335!jyg<
336!  em_sig2feed = 0.97
337  em_sig2feed = cvl_sig2feed
338!>jyg
339! em_sig2feed = 0.8
340! Relative Weight densities
341  DO k = 1, klev
342    em_wght(k) = 1.
343  END DO
344!CRtest: couche alim des tehrmiques ponderee par a*
345! DO i = 1, klon
346! do k=1,lalim_conv(i)
347! em_wght(k)=wght_th(i,k)
348! print*,'em_wght=',em_wght(k),wght_th(i,k)
349! end do
350! END DO
351
352  IF (iflag_con==4) THEN
353    DO k = 1, klev
354      DO i = 1, klon
355        zx_t = t(i, k)
356        zdelta = max(0., sign(1.,rtt-zx_t))
357        zx_qs = min(0.5, r2es*foeew(zx_t,zdelta)/em_p(i,k)/100.0)
358        zcor = 1./(1.-retv*zx_qs)
359        qs(i, k) = zx_qs*zcor
360      END DO
361      DO i = 1, klon
362        zx_t = t_wake(i, k)
363        zdelta = max(0., sign(1.,rtt-zx_t))
364        zx_qs = min(0.5, r2es*foeew(zx_t,zdelta)/em_p(i,k)/100.0)
365        zcor = 1./(1.-retv*zx_qs)
366        qs_wake(i, k) = zx_qs*zcor
367      END DO
368    END DO
369  ELSE ! iflag_con=3 (modif de puristes qui fait la diffce pour la convergence numerique)
370    DO k = 1, klev
371      DO i = 1, klon
372        zx_t = t(i, k)
373        zdelta = max(0., sign(1.,rtt-zx_t))
374        zx_qs = r2es*foeew(zx_t, zdelta)/em_p(i, k)/100.0
375        zx_qs = min(0.5, zx_qs)
376        zcor = 1./(1.-retv*zx_qs)
377        zx_qs = zx_qs*zcor
378        qs(i, k) = zx_qs
379      END DO
380      DO i = 1, klon
381        zx_t = t_wake(i, k)
382        zdelta = max(0., sign(1.,rtt-zx_t))
383        zx_qs = r2es*foeew(zx_t, zdelta)/em_p(i, k)/100.0
384        zx_qs = min(0.5, zx_qs)
385        zcor = 1./(1.-retv*zx_qs)
386        zx_qs = zx_qs*zcor
387        qs_wake(i, k) = zx_qs
388      END DO
389    END DO
390  END IF ! iflag_con
391
392! ------------------------------------------------------------------
393
394! Main driver for convection:
395!                   iflag_con=3 -> nvlle version de KE (JYG)
396!                   iflag_con = 30  -> equivAlent to convect3
397!                   iflag_con = 4  -> equivAlent to convect1/2
398
399
400  IF (iflag_con==30) THEN
401
402! print *, '-> cv_driver'      !jyg
403    CALL cv_driver(klon, klev, klevp1, ntra, iflag_con, &
404                   t, q, qs, u, v, tra, &
405                   em_p, em_ph, iflag, &
406                   d_t, d_q, d_u, d_v, d_tra, rain, &
407                   Vprecip, cbmf, sig1, w01, & !jyg
408                   kbas, ktop, &
409                   dtime, Ma, upwd, dnwd, dnwdbis, qcondc, wd, cape, &
410                   da, phi, mp, phii, d1a, dam, sij, clw, elij, &       !RomP
411                   evap, ep, epmlmMm, eplaMm, &                         !RomP
412                   wdtrainA, wdtrainM, &                                !RomP
413                   epmax_diag) ! epmax_cape
414!           print *, 'cv_driver ->'      !jyg
415
416    DO i = 1, klon
417      cbmf(i) = Ma(i, kbas(i))
418    END DO
419
420!RL
421    wght(:, :) = 0.
422    DO i = 1, klon
423      wght(i, 1) = 1.
424    END DO
425!RL
426
427  ELSE
428
429!LF   necessary for gathered fields
430    nloc = klon
431    CALL cva_driver(klon, klev, klev+1, ntra, nloc, k_upper_cv, &
432                    iflag_con, iflag_mix, iflag_ice_thermo, &
433                    iflag_clos, ok_conserv_q, dtime, cvl_comp_threshold, &
434                    t, q, qs, t_wake, q_wake, qs_wake, s_wake, u, v, tra, &
435                    em_p, em_ph, &
436                    Ale, Alp, omega, &
437                    em_sig1feed, em_sig2feed, em_wght, &
438                    iflag, d_t, d_q, d_qcomp, d_u, d_v, d_tra, rain, kbas, ktop, &
439                    cbmf, plcl, plfc, wbeff, sig1, w01, ptop2, sigd, &
440                    Ma, mip, Vprecip, Vprecipi, upwd, dnwd, dnwdbis, qcondc, wd, &
441                    cape, cin, tvp, &
442                    dd_t, dd_q, plim1, plim2, asupmax, supmax0, &
443                    asupmaxmin, lalim_conv, &
444!AC!+!RomP+jyg
445!!                   da,phi,mp,phii,d1a,dam,sij,clw,elij, &               ! RomP
446!!                   evap,ep,epmlmMm,eplaMm,                              ! RomP
447                    da, phi, mp, phii, d1a, dam, sij, wght, &           ! RomP+RL
448                    qta, clw, elij, evap, ep, epmlmMm, eplaMm, &        ! RomP+RL
449                    wdtrainA, wdtrainS, wdtrainM, qtc, sigt, detrain, &
450                    tau_cld_cv, coefw_cld_cv, &                         ! RomP,AJ
451!AC!+!RomP+jyg
452                    epmax_diag) ! epmax_cape
453  END IF
454! ------------------------------------------------------------------
455  IF (prt_level>=10) WRITE (lunout, *) ' cva_driver -> cbmf,plcl,plfc,wbeff, d_t, d_q ', &
456                                         cbmf(1), plcl(1), plfc(1), wbeff(1), d_t(1,1), d_q(1,1)
457
458  DO i = 1, klon
459    rain(i) = rain(i)/86400.
460    rflag(i) = iflag(i)
461  END DO
462
463  DO k = 1, klev
464    DO i = 1, klon
465      d_t(i, k) = dtime*d_t(i, k)
466      d_q(i, k) = dtime*d_q(i, k)
467      d_u(i, k) = dtime*d_u(i, k)
468      d_v(i, k) = dtime*d_v(i, k)
469    END DO
470  END DO
471
472  IF (iflag_con==3) THEN
473    DO i = 1,klon
474      IF (wbeff(i) > 100. .OR. wbeff(i) == 0 .OR. iflag(i) > 3) THEN
475        wbeff(i) = 0.
476        convoccur(i) = 0. 
477      ELSE
478        convoccur(i) = 1.
479      ENDIF
480    ENDDO
481  ENDIF
482
483  IF (iflag_con==30) THEN
484    DO itra = 1, ntra
485      DO k = 1, klev
486        DO i = 1, klon
487!RL!            d_tra(i,k,itra) =dtime*d_tra(i,k,itra)
488          d_tra(i, k, itra) = 0.
489        END DO
490      END DO
491    END DO
492  END IF
493
494!!AC!
495  IF (iflag_con==3) THEN
496    DO itra = 1, ntra
497      DO k = 1, klev
498        DO i = 1, klon
499!RL!            d_tra(i,k,itra) =dtime*d_tra(i,k,itra)
500          d_tra(i, k, itra) = 0.
501        END DO
502      END DO
503    END DO
504  END IF
505!!AC!
506
507  DO k = 1, klev
508    DO i = 1, klon
509      t1(i, k) = t(i, k) + d_t(i, k)
510      q1(i, k) = q(i, k) + d_q(i, k)
511    END DO
512  END DO
513!                                                     !jyg
514  IF (iflag_con == 30 .OR. iflag_ice_thermo ==0) THEN
515! --Separation neige/pluie (pour diagnostics)         !jyg
516    DO k = 1, klev                                    !jyg
517      DO i = 1, klon                                  !jyg
518        IF (t1(i,k)<rtt) THEN                         !jyg
519          pmflxs(i, k) = Vprecip(i, k)                !jyg
520        ELSE                                          !jyg
521          pmflxr(i, k) = Vprecip(i, k)                !jyg
522        END IF                                        !jyg
523      END DO                                          !jyg
524    END DO                                            !jyg
525  ELSE
526    DO k = 1, klev                                    !jyg
527      DO i = 1, klon                                  !jyg
528        pmflxs(i, k) = Vprecipi(i, k)                 !jyg
529        pmflxr(i, k) = Vprecip(i, k)-Vprecipi(i, k)   !jyg
530      END DO                                          !jyg
531    END DO                                            !jyg
532  ENDIF
533
534! c      IF (if_ebil.ge.2) THEN
535! c        ztit='after convect'
536! c        CALL diagetpq(paire,ztit,ip_ebil,2,2,dtime
537! c     e      , t1,q1,ql,qs,u,v,paprs,pplay
538! c     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
539! c         call diagphy(paire,ztit,ip_ebil
540! c     e      , zero_v, zero_v, zero_v, zero_v, zero_v
541! c     e      , zero_v, rain, zero_v, ztsol
542! c     e      , d_h_vcol, d_qt, d_ec
543! c     s      , fs_bound, fq_bound )
544! c      END IF
545
546
547! les traceurs ne sont pas mis dans cette version de convect4:
548  IF (iflag_con==4) THEN
549    DO itra = 1, ntra
550      DO k = 1, klev
551        DO i = 1, klon
552          d_tra(i, k, itra) = 0.
553        END DO
554      END DO
555    END DO
556  END IF
557! print*, 'concvl->: dd_t,dd_q ',dd_t(1,1),dd_q(1,1)
558
559  DO k = 1, klev
560    DO i = 1, klon
561      dtvpdt1(i, k) = 0.
562      dtvpdq1(i, k) = 0.
563    END DO
564  END DO
565  DO i = 1, klon
566    dplcldt(i) = 0.
567    dplcldr(i) = 0.
568  END DO
569
570  IF (prt_level>=20) THEN
571    DO k = 1, klev
572! print*,'physiq apres_add_con i k it d_u d_v d_t d_q qdl0',igout, &
573!         k,itap,d_u_con(igout,k) ,d_v_con(igout,k), d_t_con(igout,k), &
574!         d_q_con(igout,k),dql0(igout,k)
575! print*,'phys apres_add_con itap Ma cin ALE ALP wak t q undi t q', &
576!         itap,Ma(igout,k),cin(igout),ALE(igout), ALP(igout), &
577!         t_wake(igout,k),q_wake(igout,k),t_undi(igout,k),q_undi(igout,k)
578! print*,'phy apres_add_con itap CON rain snow EMA wk1 wk2 Vpp mip', &
579!         itap,rain_con(igout),snow_con(igout),ema_work1(igout,k), &
580!         ema_work2(igout,k),Vprecip(igout,k), mip(igout,k)
581! print*,'phy apres_add_con itap upwd dnwd dnwd0 cape tvp Tconv ', &
582!         itap,upwd(igout,k),dnwd(igout,k),dnwd0(igout,k),cape(igout), &
583!         tvp(igout,k),Tconv(igout,k)
584! print*,'phy apres_add_con itap dtvpdt dtvdq dplcl dplcldr qcondc', &
585!         itap,dtvpdt1(igout,k),dtvpdq1(igout,k),dplcldt(igout), &
586!         dplcldr(igout),qcondc(igout,k)
587! print*,'phy apres_add_con itap wd pmflxr Kpmflxr Kp1 Kpmflxs Kp1', &
588!         itap,wd(igout),pmflxr(igout,k),pmflxr(igout,k+1),pmflxs(igout,k), &
589!         pmflxs(igout,k+1)
590! print*,'phy apres_add_con itap da phi mp ftd fqd lalim wgth', &
591!         itap,da(igout,k),phi(igout,k,k),mp(igout,k),ftd(igout,k), &
592!         fqd(igout,k),lalim_conv(igout),wght_th(igout,k)
593    END DO
594  END IF !(prt_level.EQ.20) THEN
595
596  RETURN
597END SUBROUTINE concvl
598
Note: See TracBrowser for help on using the repository browser.