4 SUBROUTINE conema3(dtime, paprs, pplay, t, q, u, v, tra, ntra, work1, work2, &
5 d_t, d_q, d_u, d_v, d_tra, rain, snow, kbas, ktop, upwd, dnwd, dnwdbis, &
6 bas, top, ma, cape, tvp, rflag, pbase, bbase, dtvpdt1, dtvpdq1, dplcldt, &
83 LOGICAL,
SAVE :: first = .
true.
87 REAL,
ALLOCATABLE,
SAVE :: em_t(:)
90 REAL,
ALLOCATABLE,
SAVE :: em_q(:)
93 REAL,
ALLOCATABLE,
SAVE :: em_qs(:)
96 REAL,
ALLOCATABLE,
SAVE :: em_u(:), em_v(:), em_tra(:, :)
99 REAL,
ALLOCATABLE,
SAVE :: em_ph(:), em_p(:)
102 REAL,
ALLOCATABLE,
SAVE :: em_work1(:), em_work2(:)
105 REAL,
SAVE :: em_precip
107 REAL,
ALLOCATABLE,
SAVE :: em_d_t(:), em_d_q(:)
110 REAL,
ALLOCATABLE,
SAVE :: em_d_u(:), em_d_v(:), em_d_tra(:, :)
113 REAL,
ALLOCATABLE,
SAVE :: em_upwd(:), em_dnwd(:), em_dnwdbis(:)
115 REAL em_dtvpdt1(
klev), em_dtvpdq1(
klev)
116 REAL em_dplcldt, em_dplcldr
122 INTEGER em_bas, em_top
129 REAL zx_t, zx_qs, zdelta, zcor
137 REAL,
ALLOCATABLE,
SAVE :: emmip(:)
141 REAL,
ALLOCATABLE,
SAVE :: emmke(:)
147 REAL,
ALLOCATABLE,
SAVE :: emma(:)
155 REAL em_cape, em_tvp(
klev)
156 REAL em_pbase, em_bbase
157 INTEGER iw, j, k, ix, iy
183 ALLOCATE (em_t(
klev))
184 ALLOCATE (em_q(
klev))
185 ALLOCATE (em_qs(
klev))
187 ALLOCATE (em_ph(
klev+1), em_p(
klev))
188 ALLOCATE (em_work1(
klev), em_work2(
klev))
189 ALLOCATE (em_d_t(
klev), em_d_q(
klev))
191 ALLOCATE (em_upwd(
klev), em_dnwd(
klev), em_dnwdbis(
klev))
192 ALLOCATE (emmip(
klev))
193 ALLOCATE (emmke(
klev))
194 ALLOCATE (emma(
klev))
199 qcond_incld(:, :) = 0.
205 em_ph(l) = paprs(i, l)/100.0
209 em_p(l) = pplay(i, l)/100.0
215 em_tra(l, itra) = tra(i, l, itra)
228 zdelta = max(0., sign(1.,rtt-zx_t))
229 zx_qs = r2es*foeew(zx_t, zdelta)/em_p(l)/100.0
230 zx_qs = min(0.5, zx_qs)
232 zcor = 1./(1.-retv*zx_qs)
237 em_work1(l) = work1(i, l)
238 em_work2(l) = work2(i, l)
261 1792
FORMAT (
'sig avant convect ', /, 10(1
x,e13.5))
264 1793
FORMAT (
'w avant convect ', /, 10(1
x,e13.5))
272 em_tra, em_p, em_ph,
klev,
klev+1,
klev-1, ntra, dtime, iflag, em_d_t, &
273 em_d_q, em_d_u, em_d_v, em_d_tra, em_precip, em_bas, em_top, em_upwd, &
274 em_dnwd, em_dnwdbis, em_work1, em_work2, emmip, emmke, emma, ment, &
275 qent, tps, tls, sij, em_cape, em_tvp, em_pbase, em_bbase, em_dtvpdt1, &
276 em_dtvpdq1, em_dplcldt, em_dplcldr, &
277 em_d_t2, em_d_q2, em_d_u2, em_d_v2, em_wd, em_qcond, em_qcondc)
297 cldf(i, k) = em_cldf(k)
298 cldq(i, k) = em_cldq(k)
299 ftadj(i, k) = em_ftadj(k)
300 fqadj(i, k) = em_fradj(k)
301 ifc(i, k) = em_ifc(k)
308 IF (iflag/=1 .AND. iflag/=4)
THEN
324 sigsum = sigsum + em_work1(k)
326 IF (sigsum==0.0)
THEN
342 IF (iflag==1 .OR. iflag==4)
THEN
351 rain(i) = em_precip/86400.0
355 rflag(i) =
real(iflag)
358 dplcldt(i) = em_dplcldt
359 dplcldr(i) = em_dplcldr
361 d_t2(i, l) = dtime*em_d_t2(l)
362 d_q2(i, l) = dtime*em_d_q2(l)
363 d_u2(i, l) = dtime*em_d_u2(l)
364 d_v2(i, l) = dtime*em_d_v2(l)
366 d_t(i, l) = dtime*em_d_t(l)
367 d_q(i, l) = dtime*em_d_q(l)
368 d_u(i, l) = dtime*em_d_u(l)
369 d_v(i, l) = dtime*em_d_v(l)
371 d_tra(i, l, itra) = dtime*em_d_tra(l, itra)
373 upwd(i, l) = em_upwd(l)
374 dnwd(i, l) = em_dnwd(l)
375 dnwdbis(i, l) = em_dnwdbis(l)
376 work1(i, l) = em_work1(l)
377 work2(i, l) = em_work2(l)
379 tvp(i, l) = em_tvp(l)
380 dtvpdt1(i, l) = em_dtvpdt1(l)
381 dtvpdq1(i, l) = em_dtvpdq1(l)
384 qcond_incld(i, l) = em_qcondc(l)
386 qcond_incld(i, l) = em_qcond(l)
396 IF (ktop(i)-kbas(i)>0 .AND. l>=kbas(i) .AND. l<=ktop(i))
THEN
397 qcond_incld(i, l) = rain(i)*8.e4 &
399 /(pplay(i,kbas(i))-pplay(i,ktop(i)))
402 qcond_incld(i, l) = 0.
405 print *,
'l=', l,
', qcond_incld=', qcond_incld(1, l)
subroutine convect3(dtime, epmax, ok_adj, t1, r1, rs, u, v, tra, p, ph, nd,ndp1, nl, ntra, delt, iflag, ft, fr, fu, fv, ftra, precip, icb, inb,upwd, dnwd, dnwd0, sig, w0, mike, mke, ma, ments, qents, tps, tls, sigij,cape, tvp, pbase, buoybase,
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
!$Header!c c INCLUDE fxyprim h c c c Fonctions in line c c REAL fyprim REAL rj c c il faut la calculer avant d appeler ces fonctions c c c Fonctions a changer selon x(x) et y(y) choisis.c-----------------------------------------------------------------c c.....ici
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
!$Id sig2feed!common comconema2 iflag_cvl_sigd common comconema1 epmax
subroutine conema3(dtime, paprs, pplay, t, q, u, v, tra, ntra, work1, work2, d_t, d_q, d_u, d_v, d_tra, rain, snow, kbas, ktop, upwd, dnwd, dnwdbis, bas, top, ma, cape, tvp, rflag, pbase, bbase, dtvpdt1, dtvpdq1, dplcldt, dplcldr, qcond_incld)