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

Last change on this file since 5491 was 5491, checked in by jyg, 5 hours ago

New outputs :

+ coef_clos = [conv mass flux given by Alp closure]/[conv mass flux given by Emanuel scheme closure]
+ coef_clos_eff = effective coefficient used in the convective scheme.

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