4 SUBROUTINE cv3p1_closure(nloc, ncum, nd, icb, inb, pbase, plcl, p, ph, tv, &
5 tvp, buoy, supmax, ok_inhib, ale, alp, omega,sig, w0, ptop2, cape, cin, m, &
6 iflag, coef, plim1, plim2, asupmax, supmax0, asupmaxmin, cbmf, plfc, &
31 INTEGER,
INTENT (IN) :: ncum, nd, nloc
32 INTEGER,
DIMENSION (nloc),
INTENT (IN) :: icb, inb
33 REAL,
DIMENSION (nloc),
INTENT (IN) :: pbase, plcl
34 REAL,
DIMENSION (nloc, nd),
INTENT (IN) :: p
35 REAL,
DIMENSION (nloc, nd+1),
INTENT (IN) :: ph
36 REAL,
DIMENSION (nloc, nd),
INTENT (IN) :: tv, tvp, buoy
37 REAL,
DIMENSION (nloc, nd),
INTENT (IN) :: supmax
38 LOGICAL,
INTENT (IN) :: ok_inhib
39 REAL,
DIMENSION (nloc),
INTENT (IN) :: ale, alp
40 REAL,
DIMENSION (nloc, nd),
INTENT (IN) :: omega
43 REAL,
DIMENSION (nloc, nd),
INTENT (INOUT) :: sig, w0
44 REAL,
DIMENSION (nloc),
INTENT (INOUT) :: ptop2
47 REAL,
DIMENSION (nloc),
INTENT (OUT) :: cape, cin
48 REAL,
DIMENSION (nloc, nd),
INTENT (OUT) :: m
49 REAL,
DIMENSION (nloc),
INTENT (OUT) :: plim1, plim2
50 REAL,
DIMENSION (nloc, nd),
INTENT (OUT) :: asupmax
51 REAL,
DIMENSION (nloc),
INTENT (OUT) :: supmax0
52 REAL,
DIMENSION (nloc),
INTENT (OUT) :: asupmaxmin
53 REAL,
DIMENSION (nloc),
INTENT (OUT) :: cbmf, plfc
54 REAL,
DIMENSION (nloc),
INTENT (OUT) :: wbeff
55 INTEGER,
DIMENSION (nloc),
INTENT (OUT) :: iflag
58 INTEGER il, i, j, k, icbmax, i0(nloc), klfc(nloc)
59 REAL deltap, fac, w, amu
62 REAL dtmin(nloc, nd), sigold(nloc, nd)
63 REAL coefmix(nloc, nd)
64 REAL pzero(nloc), ptop2old(nloc)
65 REAL cina(nloc), cinb(nloc)
68 REAL supcrit, temp(nloc, nd)
69 REAL p1(nloc), pmin(nloc)
72 REAL siglim(nloc, nd), wlim(nloc, nd), mlim(nloc, nd)
74 REAL cbmflim(nloc), cbmf1(nloc), cbmfmax(nloc)
77 REAL xp(nloc), xq(nloc), xr(nloc), discr(nloc), b3(nloc), b4(nloc)
78 REAL theta(nloc), bb(nloc)
79 REAL term1, term2, term3
85 CHARACTER (LEN=20) :: modname =
'cv3p1_closure'
86 CHARACTER (LEN=80) :: abort_message
97 alp2(il) = max(alp(il), 1.e-5)
99 alp2(il) = max(alp(il), 1.e-12)
105 IF (
prt_level>=20) print *,
'cv3p1_param nloc ncum nd icb inb nl', nloc, &
106 ncum, nd, icb(nloc), inb(nloc),
nl
121 IF ((inb(il)<(
nl-1)) .AND. (k>=(inb(il)+1)))
THEN
122 sig(il, k) =
beta*sig(il, k) + 2.*
alpha*buoy(il, inb(il))*abs(buoy(il &
124 sig(il, k) = amax1(sig(il,k), 0.0)
125 w0(il, k) =
beta*w0(il, k)
135 icbmax = max(icbmax, icb(il))
144 sig(il, k) =
beta*sig(il, k) - 2.*
alpha*buoy(il, icb(il))*buoy(il, &
146 sig(il, k) = amax1(sig(il,k), 0.0)
147 w0(il, k) =
beta*w0(il, k)
151 IF (
prt_level>=20) print *,
'cv3p1_param apres 300'
159 IF (sig(il,nd)<1.5 .OR. sig(il,nd)>12.0)
THEN
165 IF (
prt_level>=20) print *,
'cv3p1_param apres 400'
175 pzero(il) = plcl(il) -
pbcrit
180 pzero(il) = pzero(il) - pbmxup
183 ptop2old(il) = ptop2(il)
188 p1(il) = pzero(il) - 300.
195 nsupmax(il) = inb(il)
200 IF (i>icb(il) .AND. i<=inb(il))
THEN
201 IF (p(il,i)<=pzero(il) .AND. supmax(il,i)<0 .AND. ok(il))
THEN
209 IF (
prt_level>=20) print *,
'cv3p1_param apres 2.'
212 asupmax(il, i) = abs(supmax(il,i))
233 IF (i>icb(il) .AND. i<=inb(il))
THEN
234 IF (p(il,i)<=pzero(il) .AND. p(il,i)>=p1(il))
THEN
235 IF (pzero(il)>p(il,i) .AND. pzero(il)<p(il,i-1))
THEN
242 IF (
prt_level>=20) print *,
'cv3p1_param apres 3.'
248 IF (i>icb(il) .AND. i<=inb(il))
THEN
249 IF (p(il,i)<=pzero(il) .AND. p(il,i)>=p1(il))
THEN
250 asupmax0(il) = ((pzero(il)-p(il,i0(il)-1))*asupmax(il,i0(il))-( &
251 pzero(il)-p(il,i0(il)))*asupmax(il,i0(il)-1))/(p(il,i0(il))-p(il, &
261 IF (p(il,i)==pzero(il))
THEN
262 asupmax(i, il) = asupmax0(il)
266 IF (
prt_level>=20) print *,
'cv3p1_param apres 4.'
272 IF (i>icb(il) .AND. i<=inb(il))
THEN
273 IF (p(il,i)<=pzero(il) .AND. p(il,i)>=p1(il))
THEN
274 IF (asupmax(il,i)<asupmaxmin(il))
THEN
275 asupmaxmin(il) = asupmax(il, i)
286 print *,
'cv3p1_closure il asupmax0 asupmaxmin', il, asupmax0(il), &
287 asupmaxmin(il), pzero(il), pmin(il)
289 IF (asupmax0(il)<asupmaxmin(il))
THEN
290 asupmaxmin(il) = asupmax0(il)
294 IF (
prt_level>=20) print *,
'cv3p1_param apres 5.'
301 IF (i>icb(il) .AND. i<=inb(il))
THEN
302 IF (p(il,i)<=pzero(il))
THEN
303 supmax0(il) = ((p(il,i)-pzero(il))*asupmax(il,i-1)-(p(il, &
304 i-1)-pzero(il))*asupmax(il,i))/(p(il,i)-p(il,i-1))
312 IF (
prt_level>=20) print *,
'cv3p1_param apres 425.'
317 IF (asupmaxmin(il)<supcrit1)
THEN
321 IF (asupmaxmin(il)>supcrit1 .AND. asupmaxmin(il)<supcrit2)
THEN
322 ptop2(il) = ptop2old(il)
325 IF (asupmaxmin(il)>supcrit2)
THEN
326 ptop2(il) = ph(il, inb(il))
330 IF (
prt_level>=20) print *,
'cv3p1_param apres 6.'
340 coefmix(il, i) = (min(ptop2(il),ph(il,i))-ph(il,i))/(ph(il,i+1)-ph( &
342 coefmix(il, i) = min(coefmix(il,i), 1.)
361 IF (
prt_level>=20) print *,
'cv3p1_param apres 7.'
383 CALL cv3_cine(nloc, ncum, nd, icb, inb, pbase, plcl, p, ph, tv, tvp, cina, &
387 cin(il) = cina(il) + cinb(il)
389 IF (
prt_level>=20) print *,
'cv3p1_param apres cv3_cine'
394 CALL cv3_buoy(nloc, ncum, nd, icb, inb, pbase, plcl, p, ph, ale, cin, tv, &
396 IF (
prt_level>=20) print *,
'cv3p1_param apres cv3_buoy'
419 IF ((k>=(icb(il)+1)) .AND. (k<=inb(il)) .AND. (j>=icb(il)) .AND. (j<= &
421 dtmin(il, k) = amin1(dtmin(il,k), buoy(il,j))
432 IF ((k>=(icb(il)+1)) .AND. (k<=inb(il)))
THEN
434 deltap = min(pbase(il), ph(il,k-1)) - min(pbase(il), ph(il,k))
435 cape(il) = cape(il) +
rrd*buoy(il, k-1)*deltap/p(il, k-1)
436 cape(il) = amax1(0.0, cape(il))
437 sigold(il, k) = sig(il, k)
443 siglim(il, k) = coefmix(il, k)*
alpha1*dtmin(il, k)*abs(dtmin(il,k))
444 siglim(il, k) = amax1(siglim(il,k), 0.0)
445 siglim(il, k) = amin1(siglim(il,k), 0.01)
448 wlim(il, k) = fac*sqrt(cape(il))
449 amu = siglim(il, k)*wlim(il, k)
450 rhodp = 0.007*p(il, k)*(ph(il,k)-ph(il,k+1))/tv(il, k)
451 mlim(il, k) = amu*rhodp
457 IF (
prt_level>=20) print *,
'cv3p1_param apres 600'
462 print *,
'cv3p1_closure il icb mlim ph ph+1 ph+2', il, icb(il), &
463 mlim(il, icb(il)+1), ph(il, icb(il)), ph(il, icb(il)+1), &
467 IF (icb(il)+1<=inb(il))
THEN
469 mlim(il, icb(il)) = 0.5*mlim(il, icb(il)+1)*(ph(il,icb(il))-ph(il,icb( &
470 il)+1))/(ph(il,icb(il)+1)-ph(il,icb(il)+2))
475 IF (
prt_level>=20) print *,
'cv3p1_param apres 700'
494 IF (k>=icb(il) .AND. k<=inb(il) &
495 .AND. icb(il)+1<=inb(il))
THEN
496 cbmflim(il) = cbmflim(il) + mlim(il, k)
500 IF (
prt_level>=20) print *,
'cv3p1_param apres cbmflim'
508 wb2(il) = sqrt(2.*max(ale(il)+cin(il),0.))
512 IF (plfc(il)<100.)
THEN
519 ELSE IF (flag_wb==1)
THEN
520 wbeff(il) = wbmax/(1.+500./(ph(il,1)-plfc(il)))
521 ELSE IF (flag_wb==2)
THEN
522 wbeff(il) = wbmax*(0.01*(ph(il,1)-plfc(il)))**2
533 if ((plfc(il).lt.ph(il,k)).and.(plfc(il).ge.ph(il,k+1)))
then
543 cbmf1(il) = alp2(il)/(2.*wbeff(il)*wbeff(il)-cin(il))
546 if ((coef_clos_ls.gt.0.).and.(plfc(il).gt.0.))
then
547 cbmf1(il) = cbmf1(il) - coef_clos_ls*min(0.,1./
rg*omega(il,klfc(il)))
550 IF (cbmf1(il)==0 .AND. alp2(il)/=0.)
THEN
551 WRITE (
lunout, *)
'cv3p1_closure cbmf1=0 and alp NE 0 il alp2 alp cin ' &
552 , il, alp2(il), alp(il), cin(il)
556 cbmfmax(il) = sigmax*wb2(il)*100.*p(il, icb(il))/(
rrd*tv(il,icb(il)))
560 IF (cbmflim(il)>1.e-6)
THEN
563 cbmf(il) = min(cbmf1(il), cbmfmax(il))
570 IF (
prt_level>=20) print *,
'cv3p1_param apres cbmflim_testCR'
575 coef(il) = (cbmf(il)+1.e-10)/(cbmflim(il)+1.e-10)
577 IF (
prt_level>=20) print *,
'cv3p1_param apres coef_plantePLUS'
581 IF (k>=icb(il)+1 .AND. k<=inb(il))
THEN
582 amu =
beta*sig(il, k)*w0(il, k) + (1.-
beta)*coef(il)*siglim(il, k)* &
584 w0(il, k) = wlim(il, k)
585 w0(il, k) = max(w0(il,k), 1.e-10)
586 sig(il, k) = amu/w0(il, k)
587 sig(il, k) = min(sig(il,k), 1.)
589 m(il, k) = amu*0.007*p(il, k)*(ph(il,k)-ph(il,k+1))/tv(il, k)
595 w0(il, icb(il)) = 0.5*w0(il, icb(il)+1)
596 m(il, icb(il)) = 0.5*m(il, icb(il)+1)*(ph(il,icb(il))-ph(il,icb(il)+1))/ &
597 (ph(il,icb(il)+1)-ph(il,icb(il)+2))
598 sig(il, icb(il)) = sig(il, icb(il)+1)
599 sig(il, icb(il)-1) = sig(il, icb(il))
601 IF (
prt_level>=20) print *,
'cv3p1_param apres w0_sig_M'
614 IF (k>=icb(il) .AND. k<=inb(il))
THEN
616 cbmflast(il) = cbmflast(il) + m(il, k)
622 IF (cbmflast(il)<1.e-6 .AND. cbmflast(il)>=cbmf(il))
THEN
629 IF (iflag(il)>=3)
THEN
636 IF (
prt_level>=20) print *,
'cv3p1_param apres iflag'
646 coef(il) = 5.*coef(il)
654 coef(1:ncum) = min(2.*coef(1:ncum), 5.)
655 coef(1:ncum) = max(2.*coef(1:ncum), 0.2)
659 IF (
prt_level>=20) print *,
'cv3p1_param FIN'
subroutine cv3p1_closure(nloc, ncum, nd, icb, inb, pbase, plcl, p, ph, tv, tvp, buoy, supmax, ok_inhib, ale, alp, omega, sig, w0, ptop2, cape, cin, m, iflag, coef, plim1, plim2, asupmax, supmax0, asupmaxmin, cbmf, plfc, wbeff)
!$Id!Parameters for minorig
subroutine cv3_cine(nloc, ncum, nd, icb, inb, pbase, plcl, p, ph, tv, tvp, cina, cinb, plfc)
!$Id!Parameters for nlm real spfac!IM cf epmax real ptcrit real omtrain real dttrig real beta
!$Header!CDK comgeom COMMON comgeom && alpha1
!$Id!Thermodynamical constants for rrd
!$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
subroutine cv3_buoy(nloc, ncum, nd, icb, inb, pbase, plcl, p, ph, ale, cin, tv, tvp, buoy)
!$Id!Parameters for nlm real spfac!IM cf epmax real pbcrit
!FH On elimine toutes les clefs physiques dans la dynamique prt_level
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
!$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!Parameters for nlm real spfac!IM cf epmax real ptcrit real omtrain real dttrig real alpha real delta real betad COMMON cv30param nlm spfac &!IM cf ptcrit omtrain dttrig alpha
subroutine abort_physic(modname, message, ierr)
!$Id sig2feed!common comconema2 iflag_cvl_sigd common comconema1 cvl_sig2feed common comconema2 iflag_cvl_sigd
!$Header!gestion des impressions de sorties et de débogage la sortie standard prt_level COMMON comprint lunout