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

Last change on this file since 5285 was 5285, checked in by abarral, 8 hours ago

As discussed internally, remove generic ONLY: ... for new _mod_h modules

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