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

Last change on this file since 5763 was 5696, checked in by yann meurdesoif, 6 weeks ago

Convection GPU porting : separate initialisation phase of computing phase for cva_driver and cv3_routines (remove saved first/debut variable type from computing routine)
YM

  • 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.2 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, &
425                    iflag_con, iflag_mix, iflag_ice_thermo, &
426                    iflag_clos, ok_conserv_q, dtime, cvl_comp_threshold, &
427                    t, q, qs, t_wake, q_wake, qs_wake, s_wake, u, v, tra, &
428                    em_p, em_ph, &
429                    Ale, Alp, omega, &
430                    em_sig1feed, em_sig2feed, em_wght, &
431                    iflag, d_t, d_q, d_qcomp, d_u, d_v, d_tra, rain, kbas, ktop, &
432                    cbmf, plcl, plfc, wbeff, sig1, w01, ptop2, sigd, &
433                    Ma, mip, Vprecip, Vprecipi, upwd, dnwd, dnwdbis, qcondc, wd, &
434                    cape, cin, tvp, &
435                    dd_t, dd_q, plim1, plim2, asupmax, supmax0, &
436                    asupmaxmin, &
437                    coef_clos, coef_clos_eff, &
438                    lalim_conv, &
439!AC!+!RomP+jyg
440!!                   da,phi,mp,phii,d1a,dam,sij,clw,elij, &               ! RomP
441!!                   evap,ep,epmlmMm,eplaMm,                              ! RomP
442                    da, phi, mp, phii, d1a, dam, sij, wght, &           ! RomP+RL
443                    qta, clw, elij, evap, ep, epmlmMm, eplaMm, &        ! RomP+RL
444                    wdtrainA, wdtrainS, wdtrainM, qtc, sigt, detrain, &
445                    tau_cld_cv, coefw_cld_cv, &                         ! RomP,AJ
446!AC!+!RomP+jyg
447                    epmax_diag) ! epmax_cape
448    CALL cva_driver_post
449  END IF
450! ------------------------------------------------------------------
451  IF (prt_level>=10) WRITE (lunout, *) ' cva_driver -> cbmf,plcl,plfc,wbeff, d_t, d_q ', &
452                                         cbmf(1), plcl(1), plfc(1), wbeff(1), d_t(1,1), d_q(1,1)
453
454  DO i = 1, klon
455    rain(i) = rain(i)/86400.
456    rflag(i) = iflag(i)
457  END DO
458
459  DO k = 1, klev
460    DO i = 1, klon
461      d_t(i, k) = dtime*d_t(i, k)
462      d_q(i, k) = dtime*d_q(i, k)
463      d_u(i, k) = dtime*d_u(i, k)
464      d_v(i, k) = dtime*d_v(i, k)
465    END DO
466  END DO
467
468  IF (iflag_con==3) THEN
469    DO i = 1,klon
470      IF (wbeff(i) > 100. .OR. wbeff(i) == 0 .OR. iflag(i) > 3) THEN
471        wbeff(i) = 0.
472        convoccur(i) = 0. 
473      ELSE
474        convoccur(i) = 1.
475      ENDIF
476    ENDDO
477  ENDIF
478
479  IF (iflag_con==30) THEN
480    DO itra = 1, ntra
481      DO k = 1, klev
482        DO i = 1, klon
483!RL!            d_tra(i,k,itra) =dtime*d_tra(i,k,itra)
484          d_tra(i, k, itra) = 0.
485        END DO
486      END DO
487    END DO
488  END IF
489
490!!AC!
491  IF (iflag_con==3) THEN
492    DO itra = 1, ntra
493      DO k = 1, klev
494        DO i = 1, klon
495!RL!            d_tra(i,k,itra) =dtime*d_tra(i,k,itra)
496          d_tra(i, k, itra) = 0.
497        END DO
498      END DO
499    END DO
500  END IF
501!!AC!
502
503  DO k = 1, klev
504    DO i = 1, klon
505      t1(i, k) = t(i, k) + d_t(i, k)
506      q1(i, k) = q(i, k) + d_q(i, k)
507    END DO
508  END DO
509!                                                     !jyg
510  IF (iflag_con == 30 .OR. iflag_ice_thermo ==0) THEN
511! --Separation neige/pluie (pour diagnostics)         !jyg
512    DO k = 1, klev                                    !jyg
513      DO i = 1, klon                                  !jyg
514        IF (t1(i,k)<rtt) THEN                         !jyg
515          pmflxs(i, k) = Vprecip(i, k)                !jyg
516        ELSE                                          !jyg
517          pmflxr(i, k) = Vprecip(i, k)                !jyg
518        END IF                                        !jyg
519      END DO                                          !jyg
520    END DO                                            !jyg
521  ELSE
522    DO k = 1, klev                                    !jyg
523      DO i = 1, klon                                  !jyg
524        pmflxs(i, k) = Vprecipi(i, k)                 !jyg
525        pmflxr(i, k) = Vprecip(i, k)-Vprecipi(i, k)   !jyg
526      END DO                                          !jyg
527    END DO                                            !jyg
528  ENDIF
529
530! c      IF (if_ebil.ge.2) THEN
531! c        ztit='after convect'
532! c        CALL diagetpq(paire,ztit,ip_ebil,2,2,dtime
533! c     e      , t1,q1,ql,qs,u,v,paprs,pplay
534! c     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
535! c         call diagphy(paire,ztit,ip_ebil
536! c     e      , zero_v, zero_v, zero_v, zero_v, zero_v
537! c     e      , zero_v, rain, zero_v, ztsol
538! c     e      , d_h_vcol, d_qt, d_ec
539! c     s      , fs_bound, fq_bound )
540! c      END IF
541
542
543! les traceurs ne sont pas mis dans cette version de convect4:
544  IF (iflag_con==4) THEN
545    DO itra = 1, ntra
546      DO k = 1, klev
547        DO i = 1, klon
548          d_tra(i, k, itra) = 0.
549        END DO
550      END DO
551    END DO
552  END IF
553! print*, 'concvl->: dd_t,dd_q ',dd_t(1,1),dd_q(1,1)
554
555  DO k = 1, klev
556    DO i = 1, klon
557      dtvpdt1(i, k) = 0.
558      dtvpdq1(i, k) = 0.
559    END DO
560  END DO
561  DO i = 1, klon
562    dplcldt(i) = 0.
563    dplcldr(i) = 0.
564  END DO
565
566  IF (prt_level>=20) THEN
567    DO k = 1, klev
568! print*,'physiq apres_add_con i k it d_u d_v d_t d_q qdl0',igout, &
569!         k,itap,d_u_con(igout,k) ,d_v_con(igout,k), d_t_con(igout,k), &
570!         d_q_con(igout,k),dql0(igout,k)
571! print*,'phys apres_add_con itap Ma cin ALE ALP wak t q undi t q', &
572!         itap,Ma(igout,k),cin(igout),ALE(igout), ALP(igout), &
573!         t_wake(igout,k),q_wake(igout,k),t_undi(igout,k),q_undi(igout,k)
574! print*,'phy apres_add_con itap CON rain snow EMA wk1 wk2 Vpp mip', &
575!         itap,rain_con(igout),snow_con(igout),ema_work1(igout,k), &
576!         ema_work2(igout,k),Vprecip(igout,k), mip(igout,k)
577! print*,'phy apres_add_con itap upwd dnwd dnwd0 cape tvp Tconv ', &
578!         itap,upwd(igout,k),dnwd(igout,k),dnwd0(igout,k),cape(igout), &
579!         tvp(igout,k),Tconv(igout,k)
580! print*,'phy apres_add_con itap dtvpdt dtvdq dplcl dplcldr qcondc', &
581!         itap,dtvpdt1(igout,k),dtvpdq1(igout,k),dplcldt(igout), &
582!         dplcldr(igout),qcondc(igout,k)
583! print*,'phy apres_add_con itap wd pmflxr Kpmflxr Kp1 Kpmflxs Kp1', &
584!         itap,wd(igout),pmflxr(igout,k),pmflxr(igout,k+1),pmflxs(igout,k), &
585!         pmflxs(igout,k+1)
586! print*,'phy apres_add_con itap da phi mp ftd fqd lalim wgth', &
587!         itap,da(igout,k),phi(igout,k,k),mp(igout,k),ftd(igout,k), &
588!         fqd(igout,k),lalim_conv(igout),wght_th(igout,k)
589    END DO
590  END IF !(prt_level.EQ.20) THEN
591
592  RETURN
593END SUBROUTINE concvl
594
Note: See TracBrowser for help on using the repository browser.