source: LMDZ6/branches/Amaury_dev/libf/phylmdiso/concvl.F90 @ 5139

Last change on this file since 5139 was 5137, checked in by abarral, 3 months ago

Put gradsdef.h, tracstoke.h, clesphys.h into modules

  • Property svn:keywords set to Id
File size: 28.6 KB
Line 
1SUBROUTINE concvl(iflag_clos, &
2                  dtime, paprs, pplay, k_upper_cv, &
3                  t, q, t_wake, q_wake, s_wake, u, v, tra, ntra, &
4                  Ale, Alp, sig1, w01, &
5                  d_t, d_q, d_qcomp, d_u, d_v, d_tra, &
6                  rain, snow, kbas, ktop, sigd, &
7                  cbmf, plcl, plfc, wbeff, convoccur, &
8                  upwd, dnwd, dnwdbis, &
9                  Ma, mip, Vprecip, &
10                  cape, cin, tvp, Tconv, iflag, &
11                  pbase, bbase, dtvpdt1, dtvpdq1, dplcldt, dplcldr, &
12                  qcondc, wd, pmflxr, pmflxs, &
13!RomP >>>
14!!     .             da,phi,mp,dd_t,dd_q,lalim_conv,wght_th)
15                  da, phi, mp, phii, d1a, dam, sij, qta, clw, elij, &! RomP
16                  dd_t, dd_q, lalim_conv, wght_th, &                 ! RomP
17                  evap, ep, epmlmMm, eplaMm, &                       ! RomP
18                  wdtrainA, wdtrainS, wdtrainM, wght, qtc, sigt, detrain, &
19                  tau_cld_cv, coefw_cld_cv, &                           ! RomP+RL, AJ
20!RomP <<<
21                  epmax_diag & ! epmax_cape
22#ifdef ISO
23             ,xt,xt_wake,d_xt,xtrain,xtsnow &
24             ,xtVprecip,xtVprecipi   &
25             ,xtclw,dd_xt,xtevap,xtwdtrainA &
26#ifdef DIAGISO
27             , qlp,xtlp,qvp,xtvp & ! juste diagnostique
28             , fq_detrainement,fq_ddft,fq_fluxmasse,fq_evapprecip &
29             , fxt_detrainement,fxt_ddft,fxt_fluxmasse,fxt_evapprecip &
30             , f_detrainement,q_detrainement,xt_detrainement &
31#endif         
32#endif
33              ) ! **************************************************************
34! *
35! CONCVL                                                      *
36! *
37! *
38! written by   : Sandrine Bony-Lena, 17/05/2003, 11.16.04    *
39! modified by :                                               *
40! **************************************************************
41
42
43  USE dimphy
44  USE infotrac_phy, ONLY: nbtr
45#ifdef ISO
46  USE infotrac_phy, ONLY: ntraciso=>ntiso
47  USE isotopes_mod, ONLY: iso_eau, bidouille_anti_divergence, ridicule, &
48        iso_eau,iso_HDO
49#endif
50#ifdef ISOVERIF
51      USE isotopes_verif_mod, ONLY: errmax,errmaxrel, &
52        iso_verif_egalite_choix,iso_verif_aberrant,iso_verif_egalite, &
53        iso_verif_noNaN,iso_verif_aberrant_encadre
54#endif
55#ifdef ISOTRAC
56      USE isotrac_routines_mod, ONLY: iso_verif_traceur_jbid_vect
57#ifdef ISOVERIF
58      USE isotopes_verif_mod, ONLY: iso_verif_traceur_vect, &
59&       iso_verif_trac_masse_vect, iso_verif_traceur,  &
60&       iso_verif_traceur_justmass
61#endif
62#endif
63  USE phys_local_var_mod, ONLY: omega
64  USE lmdz_print_control, ONLY: prt_level, lunout
65  USE lmdz_clesphys
66
67  IMPLICIT NONE
68! ======================================================================
69! Auteur(s): S. Bony-Lena (LMD/CNRS) date: ???
70! Objet: schema de convection de Emanuel (1991) interface
71! ======================================================================
72! Arguments:
73! dtime--input-R-pas d'integration (s)
74! s-------input-R-la vAleur "s" pour chaque couche
75! sigs----input-R-la vAleur "sigma" de chaque couche
76! sig-----input-R-la vAleur de "sigma" pour chaque niveau
77! psolpa--input-R-la pression au sol (en Pa)
78! pskapa--input-R-exponentiel kappa de psolpa
79! h-------input-R-enthAlpie potentielle (Cp*T/P**kappa)
80! q-------input-R-vapeur d'eau (en kg/kg)
81
82! work*: input et output: deux variables de travail,
83! on peut les mettre a 0 au debut
84! ALE--------input-R-energie disponible pour soulevement
85! ALP--------input-R-puissance disponible pour soulevement
86
87! d_h--------output-R-increment de l'enthAlpie potentielle (h)
88! d_q--------output-R-increment de la vapeur d'eau
89! rain-------output-R-la pluie (mm/s)
90! snow-------output-R-la neige (mm/s)
91! upwd-------output-R-saturated updraft mass flux (kg/m**2/s)
92! dnwd-------output-R-saturated downdraft mass flux (kg/m**2/s)
93! dnwd0------output-R-unsaturated downdraft mass flux (kg/m**2/s)
94! Ma---------output-R-adiabatic ascent mass flux (kg/m2/s)
95! mip--------output-R-mass flux shed by adiabatic ascent (kg/m2/s)
96! Vprecip----output-R-vertical profile of total precipitation (kg/m2/s)
97! Tconv------output-R-environment temperature seen by convective scheme (K)
98! Cape-------output-R-CAPE (J/kg)
99! Cin -------output-R-CIN  (J/kg)
100! Tvp--------output-R-Temperature virtuelle d'une parcelle soulevee
101! adiabatiquement a partir du niveau 1 (K)
102! deltapb----output-R-distance entre LCL et base de la colonne (<0 ; Pa)
103! Ice_flag---input-L-TRUE->prise en compte de la thermodynamique de la glace
104! dd_t-------output-R-increment de la temperature du aux descentes precipitantes
105! dd_q-------output-R-increment de la vapeur d'eau du aux desc precip
106! lalim_conv-
107! wght_th----
108! evap-------output-R
109! ep---------output-R
110! epmlmMm----output-R
111! eplaMm-----output-R
112! wdtrainA---output-R
113! wdtrainS---output-R
114! wdtrainM---output-R
115! wght-------output-R
116! ======================================================================
117
118  INTEGER, INTENT(IN)                           :: iflag_clos
119  REAL, INTENT(IN)                              :: dtime
120  REAL, DIMENSION(klon,klev),   INTENT(IN)      :: pplay
121  REAL, DIMENSION(klon,klev+1), INTENT(IN)      :: paprs
122  INTEGER,                      INTENT(IN)      :: k_upper_cv
123  REAL, DIMENSION(klon,klev),   INTENT(IN)      :: t, q, u, v
124  REAL, DIMENSION(klon,klev),   INTENT(IN)      :: t_wake, q_wake
125  REAL, DIMENSION(klon),        INTENT(IN)      :: s_wake
126  REAL, DIMENSION(klon,klev, nbtr),INTENT(IN)   :: tra
127  INTEGER,                      INTENT(IN)      :: ntra
128  REAL, DIMENSION(klon),        INTENT(IN)      :: Ale, Alp
129!CR:test: on passe lentr et alim_star des thermiques
130  INTEGER, DIMENSION(klon),     INTENT(IN)      :: lalim_conv
131  REAL, DIMENSION(klon,klev),   INTENT(IN)      :: wght_th
132#ifdef ISO
133  REAL, DIMENSION(ntraciso,klon,klev),   INTENT(IN)    ::  xt
134  REAL, DIMENSION(ntraciso,klon,klev),   INTENT(IN)    ::  xt_wake
135#endif
136
137  REAL, DIMENSION(klon,klev),   INTENT(INOUT)   :: sig1, w01
138
139  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: d_t, d_q, d_qcomp, d_u, d_v
140  REAL, DIMENSION(klon,klev, nbtr),INTENT(OUT)  :: d_tra
141  REAL, DIMENSION(klon),        INTENT(OUT)     :: rain, snow
142
143  INTEGER, DIMENSION(klon),     INTENT(OUT)     :: kbas, ktop
144  REAL, DIMENSION(klon),        INTENT(OUT)     :: sigd
145  REAL, DIMENSION(klon),        INTENT(OUT)     :: cbmf, plcl, plfc, wbeff
146  REAL, DIMENSION(klon),        INTENT(OUT)     :: convoccur
147  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: upwd, dnwd, dnwdbis
148
149!!       REAL Ma(klon,klev), mip(klon,klev),Vprecip(klon,klev)                    !jyg
150  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: Ma, mip
151  REAL, DIMENSION(klon,klev+1), INTENT(OUT)     :: Vprecip                        !jyg
152  REAL, DIMENSION(klon),        INTENT(OUT)     :: cape, cin
153  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: tvp
154  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: Tconv
155  INTEGER, DIMENSION(klon),     INTENT(OUT)     :: iflag
156  REAL, DIMENSION(klon),        INTENT(OUT)     :: pbase, bbase
157  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: dtvpdt1, dtvpdq1
158  REAL, DIMENSION(klon),        INTENT(OUT)     :: dplcldt, dplcldr
159  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: qcondc
160  REAL, DIMENSION(klon),        INTENT(OUT)     :: wd
161  REAL, DIMENSION(klon,klev+1), INTENT(OUT)     :: pmflxr, pmflxs
162
163#ifdef ISO
164  REAL, DIMENSION(ntraciso,klon,klev),   INTENT(OUT)    ::  d_xt
165  REAL, DIMENSION(ntraciso,klon),   INTENT(OUT)    ::  xtrain
166  REAL, DIMENSION(ntraciso,klon),   INTENT(OUT)    ::  xtsnow
167  REAL, DIMENSION(ntraciso,klon,klev+1),   INTENT(OUT)    ::  xtVprecip
168#endif
169
170
171  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: da, mp
172  REAL, DIMENSION(klon,klev,klev),INTENT(OUT)   :: phi
173! RomP >>>
174  REAL, DIMENSION(klon,klev,klev),INTENT(OUT)   :: phii
175  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: d1a, dam
176  REAL, DIMENSION(klon,klev,klev),INTENT(OUT)   :: sij, elij
177  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: qta
178  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: clw
179  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: dd_t, dd_q
180  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: evap, ep
181  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: eplaMm
182  REAL, DIMENSION(klon,klev,klev), INTENT(OUT)  :: epmlmMm
183  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: wdtrainA, wdtrainS, wdtrainM
184! RomP <<<
185  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: wght                       !RL
186  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: qtc
187  REAL, DIMENSION(klon,klev),   INTENT(OUT)     :: sigt, detrain
188  REAL,                         INTENT(OUT)     :: tau_cld_cv, coefw_cld_cv
189  REAL, DIMENSION(klon),        INTENT(OUT)     :: epmax_diag                ! epmax_cape
190
191#ifdef ISO
192  REAL, DIMENSION(ntraciso,klon,klev),   INTENT(OUT)     :: xtevap
193  REAL, DIMENSION(ntraciso,klon,klev),   INTENT(OUT)     :: xtwdtrainA
194  REAL, DIMENSION(ntraciso,klon,klev),   INTENT(OUT)     :: xtclw
195  REAL, DIMENSION(ntraciso,klon,klev),   INTENT(OUT)     :: dd_xt
196       ! juste diagnostique
197#ifdef DIAGISO
198  REAL, DIMENSION(klon,klev),   INTENT(OUT)              :: qlp
199  REAL, DIMENSION(ntraciso,klon,klev),   INTENT(OUT)     :: xtlp
200  REAL, DIMENSION(klon,klev),   INTENT(OUT)              :: qvp
201  REAL, DIMENSION(ntraciso,klon,klev),   INTENT(OUT)     :: xtvp
202  REAL, DIMENSION(klon,klev),   INTENT(OUT)              :: fq_detrainement
203  REAL, DIMENSION(klon,klev),   INTENT(OUT)              :: fq_fluxmasse
204  REAL, DIMENSION(klon,klev),   INTENT(OUT)              :: fq_ddft
205  REAL, DIMENSION(klon,klev),   INTENT(OUT)              :: fq_evapprecip
206  REAL, DIMENSION(ntraciso,klon,klev),   INTENT(OUT)     :: fxt_detrainement
207  REAL, DIMENSION(ntraciso,klon,klev),   INTENT(OUT)     :: fxt_fluxmasse
208  REAL, DIMENSION(ntraciso,klon,klev),   INTENT(OUT)     :: fxt_ddft
209  REAL, DIMENSION(ntraciso,klon,klev),   INTENT(OUT)     :: fxt_evapprecip
210  REAL, DIMENSION(klon,klev),   INTENT(OUT)              :: f_detrainement
211  REAL, DIMENSION(klon,klev),   INTENT(OUT)              :: q_detrainement
212  REAL, DIMENSION(ntraciso,klon,klev),   INTENT(OUT)     :: xt_detrainement
213#endif         
214#endif
215
216!  Local
217!  ----
218  REAL, DIMENSION(klon,klev)                    :: em_p
219  REAL, DIMENSION(klon,klev+1)                  :: em_ph
220  REAL                                          :: em_sig1feed ! sigma at lower bound of feeding layer
221  REAL                                          :: em_sig2feed ! sigma at upper bound of feeding layer
222  REAL, DIMENSION(klev)                         :: em_wght ! weight density determining the feeding mixture
223  REAL, DIMENSION(klon,klev+1)                  :: Vprecipi                       !jyg
224!on enleve le save
225! SAVE em_sig1feed,em_sig2feed,em_wght
226
227  REAL, DIMENSION(klon)                         :: rflag
228  REAL, DIMENSION(klon)                         :: plim1, plim2
229  REAL, DIMENSION(klon)                         :: ptop2
230  REAL, DIMENSION(klon,klev)                    :: asupmax
231  REAL, DIMENSION(klon)                         :: supmax0, asupmaxmin
232  REAL                                          :: zx_t, zdelta, zx_qs, zcor
233
234!   INTEGER iflag_mix
235!   SAVE iflag_mix
236  INTEGER                                       :: noff, minorig
237  INTEGER                                       :: i,j, k, itra
238  REAL, DIMENSION(klon,klev)                    :: qs, qs_wake
239!LF          SAVE cbmf
240!IM/JYG      REAL, SAVE, ALLOCATABLE :: cbmf(:)
241!!!$OMP THREADPRIVATE(cbmf)!
242  REAL, DIMENSION(klon)                         :: cbmflast
243#ifdef ISO
244REAL, DIMENSION(ntraciso,klon,klev+1)                  :: xtVprecipi
245  INTEGER                                       :: ixt
246#endif
247
248
249! Variables supplementaires liees au bilan d'energie
250! Real paire(klon)
251!LF      Real ql(klon,klev)
252! Save paire
253!LF      Save ql
254!LF      Real t1(klon,klev),q1(klon,klev)
255!LF      Save t1,q1
256! Data paire /1./
257  REAL, SAVE, ALLOCATABLE :: ql(:, :), q1(:, :), t1(:, :)
258!$OMP THREADPRIVATE(ql, q1, t1)
259        ! pas besoin d'isos ici
260
261! Variables liees au bilan d'energie et d'enthAlpi
262  REAL ztsol(klon)
263  REAL        h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot, &
264              h_qs_tot, qw_tot, ql_tot, qs_tot, ec_tot
265  SAVE        h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot, &
266              h_qs_tot, qw_tot, ql_tot, qs_tot, ec_tot
267!$OMP THREADPRIVATE(h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot)
268!$OMP THREADPRIVATE(h_qs_tot, qw_tot, ql_tot, qs_tot , ec_tot)
269  REAL        d_h_vcol, d_h_dair, d_qt, d_qw, d_ql, d_qs, d_ec
270  REAL        d_h_vcol_phy
271  REAL        fs_bound, fq_bound
272  SAVE        d_h_vcol_phy
273!$OMP THREADPRIVATE(d_h_vcol_phy)
274  REAL        zero_v(klon)
275  CHARACTER *15 ztit
276  INTEGER     ip_ebil ! PRINT level for energy conserv. diag.
277  SAVE        ip_ebil
278  DATA        ip_ebil/2/
279!$OMP THREADPRIVATE(ip_ebil)
280  INTEGER     if_ebil ! level for energy conserv. dignostics
281  SAVE        if_ebil
282  DATA        if_ebil/2/
283!$OMP THREADPRIVATE(if_ebil)
284!+jld ec_conser
285  REAL d_t_ec(klon, klev) ! tendance du a la conersion Ec -> E thermique
286  REAL zrcpd
287!-jld ec_conser
288!LF
289  INTEGER nloc
290  LOGICAL, SAVE            :: first = .TRUE.
291!$OMP THREADPRIVATE(first)
292  INTEGER, SAVE            :: itap, igout
293!$OMP THREADPRIVATE(itap, igout)
294
295
296  include "YOMCST.h"
297  include "YOMCST2.h"
298  include "YOETHF.h"
299  include "FCTTRE.h"
300!jyg<
301  include "conema3.h"
302!>jyg
303
304  IF (first) THEN
305! Allocate some variables LF 04/2008
306
307!IM/JYG allocate(cbmf(klon))
308    ALLOCATE (ql(klon,klev))
309    ALLOCATE (t1(klon,klev))
310    ALLOCATE (q1(klon,klev))
311
312    convoccur(:) = 0.
313
314    itap = 0
315    igout = klon/2 + 1/klon
316  END IF
317! Incrementer le compteur de la physique
318  itap = itap + 1
319
320! Copy T into Tconv
321  DO k = 1, klev
322    DO i = 1, klon
323      Tconv(i, k) = t(i, k)
324    END DO
325  END DO
326
327  IF (if_ebil>=1) THEN
328    DO i = 1, klon
329      ztsol(i) = t(i, 1)
330      zero_v(i) = 0.
331      DO k = 1, klev
332        ql(i, k) = 0.
333      END DO
334    END DO
335  END IF
336
337! ym
338  snow(:) = 0
339#ifdef ISO
340      xtsnow(:,:)=0
341#endif
342
343  IF (first) THEN
344    first = .FALSE.
345
346! ===========================================================================
347! READ IN PARAMETERS FOR THE CLOSURE AND THE MIXING DISTRIBUTION
348! ===========================================================================
349
350    IF (iflag_con==3) THEN
351!      CALL cv3_inicp()
352      CALL cv3_inip()
353    END IF
354
355! ===========================================================================
356! READ IN PARAMETERS FOR CONVECTIVE INHIBITION BY TROPOS. DRYNESS
357! ===========================================================================
358
359! c$$$         open (56,file='supcrit.data')
360! c$$$         read (56,*) Supcrit1, Supcrit2
361! c$$$         close (56)
362
363    IF (prt_level>=10) WRITE (lunout, *) 'supcrit1, supcrit2', supcrit1, supcrit2
364
365! ===========================================================================
366! Initialisation pour les bilans d'eau et d'energie
367! ===========================================================================
368    IF (if_ebil>=1) d_h_vcol_phy = 0.
369
370    DO i = 1, klon
371      cbmf(i) = 0.
372!!          plcl(i) = 0.
373      sigd(i) = 0.
374    END DO
375  END IF !(first)
376
377! Initialisation a chaque pas de temps
378  plfc(:) = 0.
379  wbeff(:) = 100.
380  plcl(:) = 0.
381
382  DO k = 1, klev + 1
383    DO i = 1, klon
384      em_ph(i, k) = paprs(i, k)/100.0
385      pmflxr(i, k) = 0.
386      pmflxs(i, k) = 0.
387    END DO
388  END DO
389
390  DO k = 1, klev
391    DO i = 1, klon
392      em_p(i, k) = pplay(i, k)/100.0
393    END DO
394  END DO
395
396
397! Feeding layer
398
399  em_sig1feed = 1.
400!jyg<
401!  em_sig2feed = 0.97
402  em_sig2feed = cvl_sig2feed
403!>jyg
404! em_sig2feed = 0.8
405! Relative Weight densities
406  DO k = 1, klev
407    em_wght(k) = 1.
408  END DO
409!CRtest: couche alim des tehrmiques ponderee par a*
410! DO i = 1, klon
411! do k=1,lalim_conv(i)
412! em_wght(k)=wght_th(i,k)
413! PRINT*,'em_wght=',em_wght(k),wght_th(i,k)
414! END DO
415! END DO
416
417  IF (iflag_con==4) THEN
418    DO k = 1, klev
419      DO i = 1, klon
420        zx_t = t(i, k)
421        zdelta = max(0., sign(1.,rtt-zx_t))
422        zx_qs = min(0.5, r2es*foeew(zx_t,zdelta)/em_p(i,k)/100.0)
423        zcor = 1./(1.-retv*zx_qs)
424        qs(i, k) = zx_qs*zcor
425      END DO
426      DO i = 1, klon
427        zx_t = t_wake(i, k)
428        zdelta = max(0., sign(1.,rtt-zx_t))
429        zx_qs = min(0.5, r2es*foeew(zx_t,zdelta)/em_p(i,k)/100.0)
430        zcor = 1./(1.-retv*zx_qs)
431        qs_wake(i, k) = zx_qs*zcor
432      END DO
433    END DO
434  ELSE ! iflag_con=3 (modif de puristes qui fait la diffce pour la convergence numerique)
435    DO k = 1, klev
436      DO i = 1, klon
437        zx_t = t(i, k)
438        zdelta = max(0., sign(1.,rtt-zx_t))
439        zx_qs = r2es*foeew(zx_t, zdelta)/em_p(i, k)/100.0
440        zx_qs = min(0.5, zx_qs)
441        zcor = 1./(1.-retv*zx_qs)
442        zx_qs = zx_qs*zcor
443        qs(i, k) = zx_qs
444      END DO
445      DO i = 1, klon
446        zx_t = t_wake(i, k)
447        zdelta = max(0., sign(1.,rtt-zx_t))
448        zx_qs = r2es*foeew(zx_t, zdelta)/em_p(i, k)/100.0
449        zx_qs = min(0.5, zx_qs)
450        zcor = 1./(1.-retv*zx_qs)
451        zx_qs = zx_qs*zcor
452        qs_wake(i, k) = zx_qs
453      END DO
454    END DO
455  END IF ! iflag_con
456
457! ------------------------------------------------------------------
458
459! Main driver for convection:
460!                   iflag_con=3 -> nvlle version de KE (JYG)
461!                   iflag_con = 30  -> equivAlent to convect3
462!                   iflag_con = 4  -> equivAlent to convect1/2
463
464
465  IF (iflag_con==30) THEN
466
467 
468#ifdef ISO         
469#ifdef ISOVERIF
470       do k = 1, klev
471        do i = 1, klon               
472         do ixt=1,ntraciso         
473             CALL iso_verif_noNaN(xt(ixt,i,k),'concvl 394')
474         enddo
475        enddo !do i = 1, klon
476       enddo !do k = 1, klev       
477       IF (iso_eau.gt.0) THEN
478       do k = 1, klev
479        do i = 1, klon   
480          CALL iso_verif_egalite_choix(xt(iso_eau,i,k),q(i,k), &
481                  'concvl 174',errmax,errmaxrel)
482        enddo !do i = 1, klon
483       enddo !do k = 1, klev   
484       endif !if (iso_eau.gt.0) THEN
485       IF (iso_HDO.gt.0) THEN
486       do k = 1, klev
487        do i = 1, klon         
488         IF (q(i,k).gt.ridicule) THEN
489          CALL iso_verif_aberrant(xt(iso_hdo,i,k)/q(i,k),'concvl 175')
490         endif ! if (q(i,k).gt.ridicule) THEN
491        enddo
492       enddo   
493       endif !if (iso_eau.gt.0) THEN
494#ifdef ISOTRAC
495        do k = 1, klev
496        do i = 1, klon   
497           CALL iso_verif_traceur(xt(1,i,k),'concvl 218')
498        enddo
499        enddo
500#endif       
501       WRITE(*,*) 'concvl 170: avant appel cv_driver'
502#endif
503        ! ISOVERIF ! end verif       
504#endif
505
506! print *, '-> cv_driver'      !jyg
507    CALL cv_driver(klon, klev, klevp1, ntra, iflag_con, &
508                   t, q, qs, u, v, tra, &
509                   em_p, em_ph, iflag, &
510                   d_t, d_q, d_u, d_v, d_tra, rain, &
511                   Vprecip, cbmf, sig1, w01, & !jyg
512                   kbas, ktop, &
513                   dtime, Ma, upwd, dnwd, dnwdbis, qcondc, wd, cape, &
514                   da, phi, mp, phii, d1a, dam, sij, clw, elij, &       !RomP
515                   evap, ep, epmlmMm, eplaMm, &                         !RomP
516                   wdtrainA, wdtrainM, &                                !RomP
517                   epmax_diag & ! epmax_cape
518#ifdef ISO
519                   , xt,d_xt &
520                   , xtrain,xtVprecip &
521                   , xtevap,xtclw,xtwdtrainA &
522#ifdef DIAGISO
523                , qlp,xtlp,qvp,xtvp & ! juste diagnostique
524                , fq_detrainement,fq_ddft,fq_fluxmasse,fq_evapprecip &
525                , fxt_detrainement,fxt_ddft,fxt_fluxmasse,fxt_evapprecip &
526                , f_detrainement,q_detrainement,xt_detrainement &
527#endif     
528#endif
529                    )
530!           print *, 'cv_driver ->'      !jyg
531
532#ifdef ISO
533      ! verif
534#ifdef ISOVERIF
535       WRITE(*,*) 'concvl 463: après appel cv_driver'
536       do k = 1, klev
537        do i = 1, klon
538        IF (iso_eau.gt.0) THEN
539            CALL iso_verif_egalite(xt(iso_eau,i,k),q(i,k),'concvl 203')
540            CALL iso_verif_egalite(xt_wake(iso_eau,i,k),q_wake(i,k),'concvl 204')
541            CALL iso_verif_egalite(d_xt(iso_eau,i,k),d_q(i,k), &
542                  'concvl 452')
543         endif !if (iso_eau.gt.0) THEN
544#ifdef DIAGISO
545         do ixt=1,ntraciso
546            CALL iso_verif_noNaN(xt(ixt,i,k),'concvl 460')
547            CALL iso_verif_noNaN(xtlp(ixt,i,k),'concvl 295')
548            CALL iso_verif_noNaN(xtvp(ixt,i,k),'concvl 260')
549          enddo
550#endif                 
551        enddo
552       enddo       
553#ifdef ISOTRAC
554           CALL iso_verif_traceur_vect(xt,klon,klev,'concvl 218')
555           CALL iso_verif_trac_masse_vect(d_xt,klon,klev, &
556                 'concvl 464',errmax,errmaxrel)
557#endif           
558#endif
559       ! end verif       
560#endif
561
562    DO i = 1, klon
563      cbmf(i) = Ma(i, kbas(i))
564    END DO
565
566!RL
567    wght(:, :) = 0.
568    DO i = 1, klon
569      wght(i, 1) = 1.
570    END DO
571!RL
572
573  ELSE
574
575!LF   necessary for gathered fields
576    nloc = klon
577#ifdef ISOVERIF
578        WRITE(*,*) 'concvl 581: juste avant appel de cva_driver'
579#endif
580    CALL cva_driver(klon, klev, klev+1, ntra, nloc, k_upper_cv, &
581                    iflag_con, iflag_mix, iflag_ice_thermo, &
582                    iflag_clos, ok_conserv_q, dtime, cvl_comp_threshold, &
583                    t, q, qs, t_wake, q_wake, qs_wake, s_wake, u, v, tra, &
584                    em_p, em_ph, &
585                    Ale, Alp, omega, &
586                    em_sig1feed, em_sig2feed, em_wght, &
587                    iflag, d_t, d_q, d_qcomp, d_u, d_v, d_tra, rain, kbas, ktop, &
588                    cbmf, plcl, plfc, wbeff, sig1, w01, ptop2, sigd, &
589                    Ma, mip, Vprecip, Vprecipi, upwd, dnwd, dnwdbis, qcondc, wd, &
590                    cape, cin, tvp, &
591                    dd_t, dd_q, plim1, plim2, asupmax, supmax0, &
592                    asupmaxmin, lalim_conv, &
593!AC!+!RomP+jyg
594!!                   da,phi,mp,phii,d1a,dam,sij,clw,elij, &               ! RomP
595!!                   evap,ep,epmlmMm,eplaMm,                              ! RomP
596                    da, phi, mp, phii, d1a, dam, sij, wght, &           ! RomP+RL
597                    qta, clw, elij, evap, ep, epmlmMm, eplaMm, &        ! RomP+RL
598                    wdtrainA, wdtrainS, wdtrainM, qtc, sigt, detrain, &
599                    tau_cld_cv, coefw_cld_cv, &                         ! RomP,AJ
600!AC!+!RomP+jyg
601                    epmax_diag & ! epmax_cape
602#ifdef ISO
603                   ,xt,xt_wake,d_xt, xtrain &
604                   ,xtvprecip,xtvprecipi &
605                   ,xtclw,dd_xt,xtevap,xtwdtrainA &
606#ifdef DIAGISO     
607                , qlp,xtlp,qvp,xtvp &
608                , fq_detrainement,fq_ddft,fq_fluxmasse,fq_evapprecip &
609                , fxt_detrainement,fxt_ddft,fxt_fluxmasse,fxt_evapprecip &
610                , f_detrainement,q_detrainement,xt_detrainement &
611#endif     
612#endif
613                )
614  END IF
615! ------------------------------------------------------------------
616  IF (prt_level>=10) WRITE (lunout, *) ' cva_driver -> cbmf,plcl,plfc,wbeff, d_t, d_q ', &
617                                         cbmf(1), plcl(1), plfc(1), wbeff(1), d_t(1,1), d_q(1,1)
618
619  DO i = 1, klon
620    rain(i) = rain(i)/86400.
621    rflag(i) = iflag(i)
622#ifdef ISO
623       do ixt = 1, ntraciso
624        xtrain(ixt,i) = xtrain(ixt,i)/86400.
625       enddo
626#endif
627  END DO
628
629  DO k = 1, klev
630    DO i = 1, klon
631      d_t(i, k) = dtime*d_t(i, k)
632      d_q(i, k) = dtime*d_q(i, k)
633      d_u(i, k) = dtime*d_u(i, k)
634      d_v(i, k) = dtime*d_v(i, k)
635#ifdef ISO
636           do ixt = 1, ntraciso
637            d_xt(ixt,i,k) = dtime*d_xt(ixt,i,k)
638           enddo
639#endif
640    END DO
641  END DO
642
643             
644#ifdef ISO
645#ifdef ISOVERIF     
646!        k=1
647!        i=  538
648        WRITE(*,*) 'concvl 640'
649!        WRITE(*,*) 'q(i,k),d_q(i,k)=', q(i,k),d_q(i,k)
650!        WRITE(*,*) 'xt(iso_HDO,i,k),d_xt(iso_HDO,i,k)=', &
651!     &          xt(iso_HDO,i,k),d_xt(iso_HDO,i,k)
652  DO k = 1, klev
653    DO i = 1, klon
654           IF (iso_HDO.gt.0) THEN
655             IF (q(i,k).gt.ridicule) THEN
656                 CALL iso_verif_aberrant_encadre((xt(iso_HDO,i,k) &
657              +d_xt(iso_HDO,i,k))/(q(i,k)+d_q(i,k)),'concvl 250')
658             endif !if (q_seri(i,k).gt.ridicule) THEN
659          endif !if (iso_HDO.gt.0) THEN
660           IF (iso_eau.gt.0) THEN
661             CALL iso_verif_egalite_choix(d_xt(iso_eau,i,k), &
662                d_q(i,k),'concvl 530',errmax*dtime,errmaxrel)
663          endif !if (iso_HDO.gt.0) THEN
664#ifdef ISOTRAC
665           CALL iso_verif_traceur_justmass(d_xt(1,i,k),'concvl 316')
666#endif 
667    END DO
668  END DO         
669#endif           
670#endif
671
672#ifdef ISO
673      IF ((iso_eau.gt.0).AND.(bidouille_anti_divergence)) THEN
674        do k=1,klev   
675        do i=1,klon
676            d_xt(iso_eau,i,k)=d_q(i,k)
677        enddo !do i=1,klon
678        enddo !do k=1,klev               
679#ifdef ISOTRAC 
680        CALL iso_verif_traceur_jbid_vect(d_xt, &
681                  klon,klev)
682#endif         
683      endif !if ((iso_eau.gt.0).AND.(bidouille_anti_divergence)) THEN
684#endif
685
686  IF (iflag_con==3) THEN
687    DO i = 1,klon
688      IF (wbeff(i) > 100. .OR. wbeff(i) == 0 .OR. iflag(i) > 3) THEN
689        wbeff(i) = 0.
690        convoccur(i) = 0. 
691      ELSE
692        convoccur(i) = 1.
693      ENDIF
694    ENDDO
695  ENDIF
696
697  IF (iflag_con==30) THEN
698    DO itra = 1, ntra
699      DO k = 1, klev
700        DO i = 1, klon
701!RL!            d_tra(i,k,itra) =dtime*d_tra(i,k,itra)
702          d_tra(i, k, itra) = 0.
703        END DO
704      END DO
705    END DO
706  END IF
707
708!!AC!
709  IF (iflag_con==3) THEN
710    DO itra = 1, ntra
711      DO k = 1, klev
712        DO i = 1, klon
713!RL!            d_tra(i,k,itra) =dtime*d_tra(i,k,itra)
714          d_tra(i, k, itra) = 0.
715        END DO
716      END DO
717    END DO
718  END IF
719!!AC!
720
721  DO k = 1, klev
722    DO i = 1, klon
723      t1(i, k) = t(i, k) + d_t(i, k)
724      q1(i, k) = q(i, k) + d_q(i, k)
725! juste diag: pas besoin d'isos ici
726    END DO
727  END DO
728
729!                                                     !jyg
730  IF (iflag_con == 30 .OR. iflag_ice_thermo ==0) THEN
731! --Separation neige/pluie (pour diagnostics)         !jyg
732    DO k = 1, klev                                    !jyg
733      DO i = 1, klon                                  !jyg
734        IF (t1(i,k)<rtt) THEN                         !jyg
735          pmflxs(i, k) = Vprecip(i, k)                !jyg
736        ELSE                                          !jyg
737          pmflxr(i, k) = Vprecip(i, k)                !jyg
738        END IF                                        !jyg
739      END DO                                          !jyg
740    END DO                                            !jyg
741  ELSE
742    DO k = 1, klev                                    !jyg
743      DO i = 1, klon                                  !jyg
744        pmflxs(i, k) = Vprecipi(i, k)                 !jyg
745        pmflxr(i, k) = Vprecip(i, k)-Vprecipi(i, k)   !jyg
746      END DO                                          !jyg
747    END DO                                            !jyg
748  ENDIF
749
750! c      IF (if_ebil.ge.2) THEN
751! c        ztit='after convect'
752! c        CALL diagetpq(paire,ztit,ip_ebil,2,2,dtime
753! c     e      , t1,q1,ql,qs,u,v,paprs,pplay
754! c     s      , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
755! c         CALL diagphy(paire,ztit,ip_ebil
756! c     e      , zero_v, zero_v, zero_v, zero_v, zero_v
757! c     e      , zero_v, rain, zero_v, ztsol
758! c     e      , d_h_vcol, d_qt, d_ec
759! c     s      , fs_bound, fq_bound )
760! c      END IF
761
762
763! les traceurs ne sont pas mis dans cette version de convect4:
764  IF (iflag_con==4) THEN
765    DO itra = 1, ntra
766      DO k = 1, klev
767        DO i = 1, klon
768          d_tra(i, k, itra) = 0.
769        END DO
770      END DO
771    END DO
772  END IF
773! PRINT*, 'concvl->: dd_t,dd_q ',dd_t(1,1),dd_q(1,1)
774
775  DO k = 1, klev
776    DO i = 1, klon
777      dtvpdt1(i, k) = 0.
778      dtvpdq1(i, k) = 0.
779    END DO
780  END DO
781  DO i = 1, klon
782    dplcldt(i) = 0.
783    dplcldr(i) = 0.
784  END DO
785
786  IF (prt_level>=20) THEN
787    DO k = 1, klev
788! PRINT*,'physiq apres_add_con i k it d_u d_v d_t d_q qdl0',igout, &
789!         k,itap,d_u_con(igout,k) ,d_v_con(igout,k), d_t_con(igout,k), &
790!         d_q_con(igout,k),dql0(igout,k)
791! PRINT*,'phys apres_add_con itap Ma cin ALE ALP wak t q undi t q', &
792!         itap,Ma(igout,k),cin(igout),ALE(igout), ALP(igout), &
793!         t_wake(igout,k),q_wake(igout,k),t_undi(igout,k),q_undi(igout,k)
794! PRINT*,'phy apres_add_con itap CON rain snow EMA wk1 wk2 Vpp mip', &
795!         itap,rain_con(igout),snow_con(igout),ema_work1(igout,k), &
796!         ema_work2(igout,k),Vprecip(igout,k), mip(igout,k)
797! PRINT*,'phy apres_add_con itap upwd dnwd dnwd0 cape tvp Tconv ', &
798!         itap,upwd(igout,k),dnwd(igout,k),dnwd0(igout,k),cape(igout), &
799!         tvp(igout,k),Tconv(igout,k)
800! PRINT*,'phy apres_add_con itap dtvpdt dtvdq dplcl dplcldr qcondc', &
801!         itap,dtvpdt1(igout,k),dtvpdq1(igout,k),dplcldt(igout), &
802!         dplcldr(igout),qcondc(igout,k)
803! PRINT*,'phy apres_add_con itap wd pmflxr Kpmflxr Kp1 Kpmflxs Kp1', &
804!         itap,wd(igout),pmflxr(igout,k),pmflxr(igout,k+1),pmflxs(igout,k), &
805!         pmflxs(igout,k+1)
806! PRINT*,'phy apres_add_con itap da phi mp ftd fqd lalim wgth', &
807!         itap,da(igout,k),phi(igout,k,k),mp(igout,k),ftd(igout,k), &
808!         fqd(igout,k),lalim_conv(igout),wght_th(igout,k)
809    END DO
810  END IF !(prt_level.EQ.20) THEN
811
812
813END SUBROUTINE concvl
814
Note: See TracBrowser for help on using the repository browser.