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

Last change on this file since 5840 was 5840, checked in by jyg, 2 months ago

Getting rid of tracer arrays within cva_driver.
Lot of comments to be cleared later.

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