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