4 SUBROUTINE vdif_kcay(ngrid, dt, g, rconst, plev, temp, zlev, zlay, u, v, &
 
    5     teta, cd, q2, q2diag, km, kn, ustar, l_mix)
 
   32   REAL ustar(
klon), snstable
 
   58   INTEGER nlay, nlev, ngrid
 
  146   REAL a1, a2, b1, b2, c1
 
  148   REAL cm1, cm2, cm3, cm4
 
  176   INTEGER ilay, ilev, igrid
 
  198   parameter(cm1=a1*(1.e+0-3.e+0*c1-6.e+0*a1/b1))
 
  199   parameter(cm2=a1*(-3.e+0*a2*((b2-3.e+0*a2)*(1.e+0-6.e+0*a1/b1)- &
 
  200     3.e+0*c1*(b2+6.e+0*a1))))
 
  216   CALL yamada(ngrid, dt, g, rconst, plev, temp, zlev, zlay, u, v, teta, cd, &
 
  217     q2diag, km, kn, ustar, l_mix)
 
  218   IF (first .AND. 1==1) 
THEN 
  225       q2(igrid, ilev) = amax1(q2(igrid,ilev), q2min)
 
  226       q(igrid, ilev) = sqrt(q2(igrid,ilev))
 
  231     tmp1 = cd(igrid)*(u(igrid,1)**2+v(igrid,1)**2)
 
  232     q2(igrid, 1) = b1**(2.e+0/3.e+0)*tmp1
 
  233     q2(igrid, 1) = amax1(q2(igrid,1), q2min)
 
  234     q(igrid, 1) = sqrt(q2(igrid,1))
 
  245     zlev(igrid, nlev) = zlay(igrid, nlay) + (zlay(igrid,nlay)-zlev(igrid,nlev &
 
  253       unsdz(igrid, ilay) = 1.e+0/(zlev(igrid,ilay+1)-zlev(igrid,ilay))
 
  257     unsdzdec(igrid, 1) = 1.e+0/(zlay(igrid,1)-zlev(igrid,1))
 
  261       unsdzdec(igrid, ilay) = 1.e+0/(zlay(igrid,ilay)-zlay(igrid,ilay-1))
 
  265     unsdzdec(igrid, nlay+1) = 1.e+0/(zlev(igrid,nlay+1)-zlay(igrid,nlay))
 
  273     m2(igrid, 1) = (unsdzdec(igrid,1)*u(igrid,1))**2 + &
 
  274       (unsdzdec(igrid,1)*v(igrid,1))**2
 
  275     m(igrid, 1) = sqrt(m2(igrid,1))
 
  276     mpre(igrid, 1) = m(igrid, 1)
 
  280   DO ilev = 2, nlev - 1
 
  284       n2(igrid, ilev) = g*unsdzdec(igrid, ilev)*(teta(igrid,ilev)-teta(igrid, &
 
  285         ilev-1))/(teta(igrid,ilev)+teta(igrid,ilev-1))*2.e+0
 
  296       IF (n2(igrid,ilev)<0.e+0) 
THEN 
  297         n2(igrid, ilev) = 0.e+0
 
  300       m2(igrid, ilev) = (unsdzdec(igrid,ilev)*(u(igrid,ilev)-u(igrid, &
 
  301         ilev-1)))**2 + (unsdzdec(igrid,ilev)*(v(igrid,ilev)-v(igrid, &
 
  303       m(igrid, ilev) = sqrt(m2(igrid,ilev))
 
  304       mpre(igrid, ilev) = m(igrid, ilev)
 
  312     m2(igrid, nlev) = m2(igrid, nlev-1)
 
  313     m(igrid, nlev) = m(igrid, nlev-1)
 
  314     mpre(igrid, nlev) = m(igrid, nlev)
 
  326     DO ilev = 2, nlev - 1
 
  328         zq = sqrt(q2(igrid,ilev))
 
  329         sqz(igrid) = sqz(igrid) + zq*zlev(igrid, ilev)*(zlay(igrid,ilev)-zlay &
 
  331         sq(igrid) = sq(igrid) + zq*(zlay(igrid,ilev)-zlay(igrid,ilev-1))
 
  335       long0(igrid) = 0.2*sqz(igrid)/sq(igrid)
 
  337   ELSE IF (l_mix==3) 
THEN 
  338     long0(igrid) = long00
 
  344   DO ilev = 2, nlev - 1
 
  348       tmp1 = kappa*(zlev(igrid,ilev)-zlev(igrid,1))
 
  350         long(igrid, ilev) = l_mix
 
  352         long(igrid, ilev) = tmp1/(1.e+0+tmp1/long0(igrid))
 
  354       long(igrid, ilev) = max(min(long(igrid,ilev),0.5*sqrt(q2(igrid,ilev))/ &
 
  355         sqrt(max(n2(igrid,ilev),1.e-10))), 5.)
 
  357       gn = -long(igrid, ilev)**2/q2(igrid, ilev)*n2(igrid, ilev)
 
  358       gm = long(igrid, ilev)**2/q2(igrid, ilev)*m2(igrid, ilev)
 
  362       long(igrid, ilev) = long(igrid, ilev)
 
  363       long(igrid, ilev) = long(igrid, ilev)
 
  375       sn(igrid, ilev) = cn1/(1.e+0+cn2*gn)
 
  376       sm(igrid, ilev) = (cm1+cm2*gn)/((1.e+0+cm3*gn)*(1.e+0+cm4*gn))
 
  378       IF ((gninf) .OR. (gnsup)) 
THEN 
  379         snq2(igrid, ilev) = 0.e+0
 
  380         smq2(igrid, ilev) = 0.e+0
 
  382         snq2(igrid, ilev) = -gn*(-cn1*cn2/(1.e+0+cn2*gn)**2)
 
  383         smq2(igrid, ilev) = -gn*(cm2*(1.e+0+cm3*gn)*(1.e+0+cm4*gn)-(cm3*( &
 
  384           1.e+0+cm4*gn)+cm4*(1.e+0+cm3*gn))*(cm1+cm2*gn))/((1.e+0+cm3*gn)*( &
 
  401       IF (snq2(igrid,ilev)*sn(igrid,ilev)<=0.e+0) snq2(igrid, ilev) = 0.e+0
 
  402       IF (smq2(igrid,ilev)*sm(igrid,ilev)<=0.e+0) smq2(igrid, ilev) = 0.e+0
 
  408         snstable = 1. - zlev(igrid, ilev)/(700.*max(ustar(igrid),0.0001))
 
  409         snstable = 1. - zlev(igrid, ilev)/400.
 
  410         snstable = max(snstable, 0.)
 
  411         snstable = snstable*snstable
 
  414         IF (sn(igrid,ilev)<snstable) 
THEN 
  415           sn(igrid, ilev) = snstable
 
  416           snq2(igrid, ilev) = 0.
 
  419         IF (sm(igrid,ilev)<snstable) 
THEN 
  420           sm(igrid, ilev) = snstable
 
  421           smq2(igrid, ilev) = 0.
 
  440     kmpre(igrid, 1) = km(igrid, 1)
 
  444   DO ilev = 2, nlev - 1
 
  448       kn(igrid, ilev) = long(igrid, ilev)*q(igrid, ilev)*sn(igrid, ilev)
 
  449       km(igrid, ilev) = long(igrid, ilev)*q(igrid, ilev)*sm(igrid, ilev)
 
  450       kmpre(igrid, ilev) = km(igrid, ilev)
 
  458     kn(igrid, nlev) = kn(igrid, nlev-1)
 
  459     km(igrid, nlev) = km(igrid, nlev-1)
 
  460     kmpre(igrid, nlev) = km(igrid, nlev)
 
  468   DO ilev = 2, nlev - 1
 
  477       knq3 = kn(igrid, ilev)*snq2(igrid, ilev)/sn(igrid, ilev)
 
  478       kmq3 = km(igrid, ilev)*smq2(igrid, ilev)/sm(igrid, ilev)
 
  485       tmp1 = dt*2.e+0*km(igrid, ilev)*m2(igrid, ilev)
 
  486       tmp2 = dt*2.e+0*kmq3*m2(igrid, ilev)
 
  487       termqm2 = termqm2 + dt*2.e+0*km(igrid, ilev)*m2(igrid, ilev) - &
 
  488         dt*2.e+0*kmq3*m2(igrid, ilev)
 
  489       termq3m2 = termq3m2 + dt*2.e+0*kmq3*m2(igrid, ilev)
 
  491       termq = termq - dt*2.e+0*kn(igrid, ilev)*n2(igrid, ilev) + &
 
  492         dt*2.e+0*knq3*n2(igrid, ilev)
 
  493       termq3 = termq3 - dt*2.e+0*knq3*n2(igrid, ilev)
 
  495       termq3 = termq3 - dt*2.e+0*q(igrid, ilev)**3/(b1*long(igrid,ilev))
 
  505       tmp1 = termq + termq3
 
  506       tmp2 = termqm2 + termq3m2
 
  507       m2cstat = m2(igrid, ilev) - (tmp1+tmp2)/(dt*2.e+0*km(igrid,ilev))
 
  508       mcstat = sqrt(m2cstat)
 
  516         kmcstat = 1.e+0/mcstat*(unsdz(igrid,ilev)*kmpre(igrid,ilev+1)*mpre( &
 
  517           igrid,ilev+1)+unsdz(igrid,ilev-1)*cd(igrid)*(sqrt(u(igrid,3)**2+ &
 
  518           v(igrid,3)**2)-mcstat/unsdzdec(igrid,ilev)-mpre(igrid, &
 
  519           ilev+1)/unsdzdec(igrid,ilev+1))**2)/(unsdz(igrid,ilev)+unsdz(igrid, &
 
  522         kmcstat = 1.e+0/mcstat*(unsdz(igrid,ilev)*kmpre(igrid,ilev+1)*mpre( &
 
  523           igrid,ilev+1)+unsdz(igrid,ilev-1)*kmpre(igrid,ilev-1)*mpre(igrid, &
 
  524           ilev-1))/(unsdz(igrid,ilev)+unsdz(igrid,ilev-1))
 
  526       tmp2 = kmcstat/(sm(igrid,ilev)/q2(igrid,ilev))/long(igrid, ilev)
 
  527       qcstat = tmp2**(1.e+0/3.e+0)
 
  535       q(igrid, ilev) = qcstat
 
  536       q2(igrid, ilev) = q2cstat
 
  537       m(igrid, ilev) = mcstat
 
  542       m2(igrid, ilev) = m2cstat
 
  548       IF (q2(igrid,ilev)<q2min) 
THEN 
  549         q2(igrid, ilev) = q2min
 
  550         q(igrid, ilev) = sqrt(q2min)
 
  558       gn = -long(igrid, ilev)**2/q2(igrid, ilev)*n2(igrid, ilev)
 
  559       IF (gn<gnmin) gn = gnmin
 
  560       IF (gn>gnmax) gn = gnmax
 
  561       sn(igrid, ilev) = cn1/(1.e+0+cn2*gn)
 
  562       sm(igrid, ilev) = (cm1+cm2*gn)/((1.e+0+cm3*gn)*(1.e+0+cm4*gn))
 
  563       kn(igrid, ilev) = long(igrid, ilev)*q(igrid, ilev)*sn(igrid, ilev)
 
  564       km(igrid, ilev) = long(igrid, ilev)*q(igrid, ilev)*sm(igrid, ilev)
 
  584     q2(igrid, nlev) = q2(igrid, nlev-1)
 
  585     q(igrid, nlev) = q(igrid, nlev-1)
 
  586     kn(igrid, nlev) = kn(igrid, nlev-1)
 
  587     km(igrid, nlev) = km(igrid, nlev-1)
 
  593     DO ilev = 2, 
klev - 1
 
  594       sss = sss + plev(1, ilev-1) - plev(1, ilev+1)
 
  595       sssq = sssq + (plev(1,ilev-1)-plev(1,ilev+1))*q2(1, ilev)
 
  619     DO ilev = 2, 
klev - 1
 
  620       sss = sss + plev(1, ilev-1) - plev(1, ilev+1)
 
  621       sssq = sssq + (plev(1,ilev-1)-plev(1,ilev+1))*q2(1, ilev)
 
  623     print *, 
'Q2moy apres', sssq/sss
 
  628         q2(igrid, ilev) = max(q2(igrid,ilev), q2min)
 
  629         q(igrid, ilev) = sqrt(q2(igrid,ilev))
 
  636         gn = -long(igrid, ilev)**2/q2(igrid, ilev)*n2(igrid, ilev)
 
  637         IF (gn<gnmin) gn = gnmin
 
  638         IF (gn>gnmax) gn = gnmax
 
  639         sn(igrid, ilev) = cn1/(1.e+0+cn2*gn)
 
  640         sm(igrid, ilev) = (cm1+cm2*gn)/((1.e+0+cm3*gn)*(1.e+0+cm4*gn))
 
  645           snstable = 1. - zlev(igrid, ilev)/(700.*max(ustar(igrid),0.0001))
 
  646           snstable = 1. - zlev(igrid, ilev)/400.
 
  647           snstable = max(snstable, 0.)
 
  648           snstable = snstable*snstable
 
  651           IF (sn(igrid,ilev)<snstable) 
THEN 
  652             sn(igrid, ilev) = snstable
 
  653             snq2(igrid, ilev) = 0.
 
  656           IF (sm(igrid,ilev)<snstable) 
THEN 
  657             sm(igrid, ilev) = snstable
 
  658             smq2(igrid, ilev) = 0.
 
  664         kn(igrid, ilev) = long(igrid, ilev)*q(igrid, ilev)*sn(igrid, ilev)
 
  665         km(igrid, ilev) = long(igrid, ilev)*q(igrid, ilev)
 
!$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 yamada(ngrid, dt, g, rconst, plev, temp, zlev, zlay, u, v, teta, cd, q2, km, kn, ustar, l_mix)
 
subroutine vdif_kcay(ngrid, dt, g, rconst, plev, temp, zlev, zlay, u, v, teta, cd, q2, q2diag, km, kn, ustar, l_mix)
 
!$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