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

Last change on this file was 5274, checked in by abarral, 48 minutes ago

Replace yomcst.h by existing module

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