1 SUBROUTINE cv3p_mixing(nloc, ncum, nd, na, ntra, icb, nk, inb, &
 
    2                        ph, t, 
rr, rs, 
u, v, tra, h, lv, qnk, &
 
    3                        unk, vnk, hp, tv, tvp, ep, clw, sig, &
 
    4                        ment, qent, hent, uent, vent, nent, &
 
    5                        sigij, elij, supmax, ments, qents, traent)
 
   24   INTEGER, 
INTENT (IN)                               :: ncum, nd, na
 
   25   INTEGER, 
INTENT (IN)                               :: ntra, nloc
 
   26   INTEGER, 
DIMENSION (nloc), 
INTENT (IN)             :: icb, inb, nk
 
   27   REAL, 
DIMENSION (nloc, nd), 
INTENT (IN)            :: sig
 
   28   REAL, 
DIMENSION (nloc), 
INTENT (IN)                :: qnk, unk, vnk
 
   29   REAL, 
DIMENSION (nloc, nd+1), 
INTENT (IN)          :: ph
 
   30   REAL, 
DIMENSION (nloc, nd), 
INTENT (IN)            :: t, rr, rs
 
   31   REAL, 
DIMENSION (nloc, nd), 
INTENT (IN)            :: u, v
 
   32   REAL, 
DIMENSION (nloc, nd, ntra), 
INTENT (IN)      :: tra 
 
   33   REAL, 
DIMENSION (nloc, na), 
INTENT (IN)            :: lv
 
   34   REAL, 
DIMENSION (nloc, na), 
INTENT (IN)            :: h  
 
   35   REAL, 
DIMENSION (nloc, na), 
INTENT (IN)            :: hp 
 
   36   REAL, 
DIMENSION (nloc, na), 
INTENT (IN)            :: tv, tvp
 
   37   REAL, 
DIMENSION (nloc, na), 
INTENT (IN)            :: ep, clw
 
   40   REAL, 
DIMENSION (nloc, na, na), 
INTENT (OUT)       :: Ment, Qent
 
   41   REAL, 
DIMENSION (nloc, na, na), 
INTENT (OUT)       :: uent, vent
 
   42   REAL, 
DIMENSION (nloc, na, na), 
INTENT (OUT)       :: Sigij, elij
 
   43   REAL, 
DIMENSION (nloc, na), 
INTENT (OUT)           :: supmax           
 
   45   REAL, 
DIMENSION (nloc, nd, nd, ntra), 
INTENT (OUT) :: traent
 
   46   REAL, 
DIMENSION (nloc, nd, nd), 
INTENT (OUT)       :: Ments, Qents
 
   47   REAL, 
DIMENSION (nloc, nd, nd), 
INTENT (OUT)       :: hent
 
   48   INTEGER, 
DIMENSION (nloc, nd), 
INTENT (OUT)        :: nent
 
   51   INTEGER i, j, k, il, im, jm
 
   53   REAL                               :: rti, bf2, anum, denom, dei, altem, cwat, stemp, qp
 
   54   REAL                               :: alt, delp, delm
 
   55   REAL, 
DIMENSION (nloc)             :: Qmixmax, Rmixmax, sqmrmax
 
   56   REAL, 
DIMENSION (nloc)             :: Qmixmin, Rmixmin, sqmrmin
 
   57   REAL, 
DIMENSION (nloc)             :: signhpmh
 
   58   REAL, 
DIMENSION (nloc)             :: Sx
 
   60   REAL, 
DIMENSION (nloc)             :: Smid, Sjmin, Sjmax
 
   61   REAL, 
DIMENSION (nloc)             :: Sbef, sup, smin
 
   63   REAL, 
DIMENSION (nloc)             :: ASij, ASij_inv, smax, Scrit
 
   64   REAL, 
DIMENSION (nloc, nd, nd)     :: Sij
 
   65   REAL, 
DIMENSION (nloc, nd)         :: csum
 
   67   LOGICAL, 
DIMENSION (nloc)          :: lwork
 
   69   REAL amxupcrit, df, ff
 
   72   INTEGER,
SAVE                                       :: igout=1
 
   77   REAL Qcoef1, Qcoef2, QFF, QFFF, Qmix, Rmix, Qmix1, Rmix1, Qmix2, Rmix2, F
 
   81   qff(f) = max(min(f,1.), 0.)
 
   82   qfff(f) = min(qff(f), 
scut)
 
   83   qmix1(f) = (tanh((qff(f)-fmax)/
gammas)+qcoef1max)/qcoef2max
 
   84   rmix1(f) = (
gammas*log(cosh((qff(f)-fmax)/
gammas))+qff(f)*qcoef1max)/qcoef2max
 
   85   qmix2(f) = -log(1.-qfff(f))/
scut 
   86   rmix2(f) = (qfff(f)+(1.-qff(f))*log(1.-qfff(f)))/
scut 
   87   qmix(f) = 
qqa1*qmix1(f) + 
qqa2*qmix2(f)
 
   88   rmix(f) = 
qqa1*rmix1(f) + 
qqa2*rmix2(f)
 
   90   INTEGER, 
SAVE :: ifrst
 
  102     qcoef1max = qcoef1(fmax)
 
  103     qcoef2max = qcoef2(fmax)
 
  105    print*, 
'fmax, gammas, qqa1, qqa2, Qcoef1max, Qcoef2max ', &
 
  126         qent(i, k, j) = rr(i, j)
 
  127         uent(i, k, j) = u(i, j)
 
  128         vent(i, k, j) = v(i, j)
 
  138   ment(1:ncum, 1:nd, 1:nd) = 0.0
 
  139   sij(1:ncum, 1:nd, 1:nd) = 0.0
 
  162         IF ((i>=icb(il)) .AND. (i<=inb(il)) .AND. (j>=(icb(il)-1)) &
 
  163                          .AND. (j<=inb(il))) 
THEN 
  165           rti = qnk(il) - ep(il, i)*clw(il, i)
 
  166           bf2 = 1. + lv(il, j)*lv(il, j)*rs(il, j)/(
rrv*t(il,j)*t(il,j)*
cpd)
 
  167           anum = h(il, j) - hp(il, i) + (
cpv-
cpd)*t(il, j)*(rti-rr(il,j))
 
  168           denom = h(il, i) - hp(il, i) + (
cpd-
cpv)*(rr(il,i)-rti)*t(il, j)
 
  170           IF (abs(dei)<0.01) dei = 0.01
 
  171           sij(il, i, j) = anum/dei
 
  173           altem = sij(il, i, j)*rr(il, i) + (1.-sij(il,i,j))*rti - rs(il, j)
 
  175           cwat = clw(il, j)*(1.-ep(il,j))
 
  176           stemp = sij(il, i, j)
 
  177           IF ((stemp<0.0 .OR. stemp>1.0 .OR. altem>cwat) .AND. j>i) 
THEN 
  178             anum = anum - lv(il, j)*(rti-rs(il,j)-cwat*bf2)
 
  179             denom = denom + lv(il, j)*(rr(il,i)-rti)
 
  180             IF (abs(denom)<0.01) denom = 0.01
 
  181             sij(il, i, j) = anum/denom
 
  182             altem = sij(il, i, j)*rr(il, i) + (1.-sij(il,i,j))*rti - rs(il, j)
 
  183             altem = altem - (bf2-1.)*cwat
 
  185           IF (sij(il,i,j)>0.0) 
THEN 
  188             elij(il, i, j) = altem
 
  189             elij(il, i, j) = amax1(0.0, elij(il,i,j))
 
  190             nent(il, i) = nent(il, i) + 1
 
  193           sij(il, i, j) = amax1(0.0, sij(il,i,j))
 
  194           sij(il, i, j) = amin1(1.0, sij(il,i,j))
 
  201       print *,
'cv3p_mixing i, nent(i), icb, inb ',i, nent(igout,i), icb(igout), inb(igout)
 
  202       IF (nent(igout,i) .gt. 0) 
THEN 
  203         print *,
'i,(j,Sij(i,j),j=icb-1,inb) ',i,(j,sij(igout,i,j),j=icb(igout)-1,inb(igout))
 
  215       IF ((i>=icb(il)) .AND. (i<=inb(il)) .AND. (nent(il,i)==0)) 
THEN 
  219         qent(il, i, i) = qnk(il) - ep(il, i)*clw(il, i)
 
  220         uent(il, i, i) = unk(il)
 
  221         vent(il, i, i) = vnk(il)
 
  222         elij(il, i, i) = clw(il, i)*(1.-ep(il,i))
 
  241         IF ((j>=(icb(il)-1)) .AND. (j<=inb(il)) .AND. &
 
  242             (i>=icb(il)) .AND. (i<=inb(il))) 
THEN 
  243           sigij(il, i, j) = sij(il, i, j)
 
  257   CALL zilch(csum, nloc*nd)
 
  269       IF (i>=icb(il) .AND. i<=inb(il)) num1 = num1 + 1
 
  271     IF (num1<=0) 
GO TO 789
 
  279       IF (i>=icb(il) .AND. i<=inb(il)) 
THEN 
  280         signhpmh(il) = sign(1., hp(il,i)-h(il,i))
 
  281         sbef(il) = max(0., signhpmh(il))
 
  287         IF (i>=icb(il) .AND. i<=inb(il) .AND. j<=inb(il)) 
THEN 
  288           IF (sbef(il)<sij(il,i,j)) 
THEN 
  289             sx(il) = max(sij(il,i,j), sx(il))
 
  291           sbef(il) = sij(il, i, j)
 
  298       IF (i>=icb(il) .AND. i<=inb(il)) 
THEN 
  299         lwork(il) = (nent(il,i)/=0)
 
  300         rti = qnk(il) - ep(il, i)*clw(il, i)
 
  301         anum = h(il, i) - hp(il, i) - lv(il, i)*(rti-rs(il,i)) + &
 
  302                (
cpv-
cpd)*t(il, i)*(rti-rr(il,i))
 
  303         denom = h(il, i) - hp(il, i) + lv(il, i)*(rr(il,i)-rti) + &
 
  304                 (
cpd-
cpv)*t(il, i)*(rr(il,i)-rti)
 
  305         IF (abs(denom)<0.01) denom = 0.01
 
  306         scrit(il) = min(anum/denom, 1.)
 
  307         alt = rti - rs(il, i) + scrit(il)*(rr(il,i)-rti)
 
  313         scrit2 = min(scrit(il), sx(il))*max(0., -signhpmh(il)) + &
 
  314                  scrit(il)*max(0., signhpmh(il))
 
  320         IF (scrit(il)<=0.0) scrit(il) = 0.0
 
  321         IF (alt<=0.0) scrit(il) = 1.0
 
  335         IF (i>=icb(il) .AND. i<=inb(il) .AND. &
 
  336             j>=(icb(il)-1) .AND. j<=inb(il) .AND. &
 
  337             lwork(il)) num2 = num2 + 1
 
  339       IF (num2<=0) 
GO TO 175
 
  345           IF (i>=icb(il) .AND. i<=inb(il) .AND. &
 
  346               j>=(icb(il)-1) .AND. j<=inb(il) .AND. &
 
  348             IF (sij(il,i,j)>0.0) 
THEN 
  349               smid(il) = min(sij(il,i,j), scrit(il))
 
  352               IF (smid(il)<smin(il) .AND. sij(il,i,j+1)<smid(il)) 
THEN 
  354                 sjmax(il) = min((sij(il,i,j+1)+sij(il,i,j))/2., sij(il,i,j), scrit(il))
 
  355                 sjmin(il) = max((sbef(il)+sij(il,i,j))/2., sij(il,i,j))
 
  356                 sjmin(il) = min(sjmin(il), scrit(il))
 
  357                 sbef(il) = sij(il, i, j)
 
  366           IF (i>=icb(il) .AND. i<=inb(il) .AND. &
 
  367               j>=(icb(il)-1) .AND. j<=inb(il) .AND. &
 
  369             IF (sij(il,i,j)>0.0) 
THEN 
  371               sjmin(il) = max((sij(il,i,j-1)+smid(il))/2., scrit(il))*max(0., -signhpmh(il)) + &
 
  372                           min((sij(il,i,j+1)+smid(il))/2., scrit(il))*max(0., signhpmh(il))
 
  373               sjmin(il) = max(sjmin(il), sup(il))
 
  377               scrit(il) = min(sjmin(il), sjmax(il), scrit(il))
 
  380               sbef(il) = max(0., signhpmh(il))
 
  381               supmax(il, i) = sign(scrit(il), -signhpmh(il))
 
  389           IF (i>=icb(il) .AND. i<=inb(il) .AND. &
 
  390               j>=(icb(il)-1) .AND. j<=inb(il) .AND. &
 
  392             IF (sij(il,i,j)>0.0) 
THEN 
  393               smid(il) = max(sij(il,i,j), scrit(il))
 
  396               IF (smid(il)>smax(il) .AND. sij(il,i,j+1)>smid(il)) 
THEN 
  398                 sjmax(il) = max((sij(il,i,j+1)+sij(il,i,j))/2., sij(il,i,j))
 
  399                 sjmax(il) = max(sjmax(il), scrit(il))
 
  400                 sjmin(il) = min((sbef(il)+sij(il,i,j))/2., sij(il,i,j))
 
  401                 sjmin(il) = max(sjmin(il), scrit(il))
 
  402                 sbef(il) = sij(il, i, j)
 
  404               IF (abs(sjmin(il)-sjmax(il))>1.e-10) &
 
  405                              sup(il) = max(sjmin(il), sjmax(il), sup(il))
 
  415         IF (i>=icb(il) .AND. i<=inb(il) .AND. &
 
  416             j>=(icb(il)-1) .AND. j<=inb(il) .AND. &
 
  418           IF (sij(il,i,j)>0.0) 
THEN 
  419             rti = qnk(il) - ep(il, i)*clw(il, i)
 
  420             qmixmax(il) = qmix(sjmax(il))
 
  421             qmixmin(il) = qmix(sjmin(il))
 
  422             rmixmax(il) = rmix(sjmax(il))
 
  423             rmixmin(il) = rmix(sjmin(il))
 
  424             sqmrmax(il) = sjmax(il)*qmix(sjmax(il)) - rmix(sjmax(il))
 
  425             sqmrmin(il) = sjmin(il)*qmix(sjmin(il)) - rmix(sjmin(il))
 
  427             ment(il, i, j) = abs(qmixmax(il)-qmixmin(il))*ment(il, i, j)
 
  430             IF (abs(qmixmax(il)-qmixmin(il))>1.e-10) 
THEN 
  431               sigij(il, i, j) = (sqmrmax(il)-sqmrmin(il))/(qmixmax(il)-qmixmin(il))
 
  437             qent(il, i, j) = (1.-sigij(il,i,j))*rti     + sigij(il, i, j)*rr(il, i)
 
  438             uent(il, i, j) = (1.-sigij(il,i,j))*unk(il) + sigij(il, i, j)*u(il, i)
 
  439             vent(il, i, j) = (1.-sigij(il,i,j))*vnk(il) + sigij(il, i, j)*v(il, i)
 
  452             hent(il, i, j) = (1.-sigij(il,i,j))*hp(il, i) + sigij(il, i, j)*h(il, i)
 
  454             elij(il, i, j) = qent(il, i, j) - rs(il, j)
 
  455             elij(il, i, j) = elij(il, i, j) + &
 
  456                              ((h(il,j)-hent(il,i,j))*rs(il,j)*lv(il,j) / &
 
  457                               ((
cpd*(1.-qent(il,i,j))+qent(il,i,j)*
cpv)*
rrv*t(il,j)*t(il,j)))
 
  458             elij(il, i, j) = elij(il, i, j) / &
 
  459                              (1.+lv(il,j)*lv(il,j)*rs(il,j) / &
 
  460                               ((
cpd*(1.-qent(il,i,j))+qent(il,i,j)*
cpv)*
rrv*t(il,j)*t(il,j)))
 
  462             elij(il, i, j) = max(elij(il,i,j), 0.)
 
  464             elij(il, i, j) = min(elij(il,i,j), qent(il,i,j))
 
  467               awat = elij(il, i, j) - (1.-ep(il,j))*clw(il, j)
 
  468               awat = amax1(awat, 0.0)
 
  476             hent(il, i, j) = hent(il, i, j) + (lv(il,j)+(
cpd-
cpv)*t(il,j))*awat
 
  483             asij(il) = asij(il) + abs(qmixmax(il)*(1.-sjmax(il))+rmixmax(il) - &
 
  484                                       qmixmin(il)*(1.-sjmin(il))-rmixmin(il))
 
  506           IF (i>=icb(il) .AND. i<=inb(il) .AND. &
 
  507               j>=(icb(il)-1) .AND. j<=inb(il) .AND. &
 
  509             IF (sij(il,i,j)>0.0) 
THEN 
  510               rti = qnk(il) - ep(il, i)*clw(il, i)
 
  512               ment(il, i, i) = abs(qmixmax(il)*(1.-sjmax(il))+rmixmax(il) - &
 
  513                                    qmixmin(il)*(1.-sjmin(il))-rmixmin(il))
 
  515               uent(il, i, i) = unk(il)
 
  516               vent(il, i, i) = vnk(il)
 
  517               hent(il, i, i) = hp(il, i)
 
  518               elij(il, i, i) = clw(il, i)*(1.-ep(il,i))
 
  542       IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il)) 
THEN 
  543         asij(il) = amax1(1.0e-16, asij(il))
 
  546         asij_inv(il) = 1.0/asij(il)
 
  548         IF (asij_inv(il) > 100.)  asij_inv(il) = 0.
 
  556         IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. &
 
  557             j>=(icb(il)-1) .AND. j<=inb(il)) 
THEN 
  559           ment(il, i, j) = ment(il, i, j)*asij_inv(il)
 
  566         IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. &
 
  567             j>=(icb(il)-1) .AND. j<=inb(il)) 
THEN 
  568           csum(il, i) = csum(il, i) + ment(il, i, j)
 
  574       IF (i>=icb(il) .AND. i<=inb(il) .AND. lwork(il) .AND. csum(il,i)<1.) 
THEN 
  579         qent(il, i, i) = qnk(il) - ep(il, i)*clw(il, i)
 
  580         uent(il, i, i) = unk(il)
 
  581         vent(il, i, i) = vnk(il)
 
  582         elij(il, i, i) = clw(il, i)*(1.-ep(il,i))
 
!$Id!Thermodynamical constants for cpv
 
!$Id!Parameters for minorig
 
INTEGER iflag_mix REAL scut REAL Supcrit2 REAL coef_clos_ls!COMMON YOMCST2 scut
 
!$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
 
!FH On elimine toutes les clefs physiques dans la dynamique prt_level
 
!$Id Turb_fcg_gcssold get_uvd hqturb_gcssold endif!large scale llm day day1 day day1 *dt_toga endif!time annee_ref dt_toga u_toga vq_toga w_prof vq_prof llm u(l)
 
subroutine cv3p_mixing(nloc, ncum, nd, na, ntra, icb, nk, inb, ph, t, rr, rs, u, v, tra, h, lv, qnk, unk, vnk, hp, tv, tvp, ep, clw, sig, Ment, Qent, hent, uent, vent, nent, Sigij, elij, supmax, Ments, Qents, traent)
 
!$Id!Thermodynamical constants for t0 real clmci real epsim1 real hrd real grav COMMON cvthermo cpd
 
!$Id!Thermodynamical constants for rrv
 
INTEGER iflag_mix REAL qqa1
 
INTEGER iflag_mix REAL gammas
 
INTEGER iflag_mix REAL qqa2
 
!$Header!gestion des impressions de sorties et de débogage la sortie standard prt_level COMMON comprint lunout