2     psig, pgam, pthe, ppic, pval, kgwd, kdx, ktest, t, 
u, v, pulow, pvlow, &
 
    3     pustr, pvstr, d_t, d_u, d_v)
 
   70   REAL paprs(nlon, nlev+1)
 
   71   REAL pplay(nlon, nlev)
 
   72   REAL pmea(nlon), pstd(nlon), psig(nlon), pgam(nlon), pthe(nlon)
 
   73   REAL ppic(nlon), pval(nlon)
 
   74   REAL pulow(nlon), pvlow(nlon), pustr(nlon), pvstr(nlon)
 
   75   REAL t(nlon, nlev), u(nlon, nlev), v(nlon, nlev)
 
   76   REAL d_t(nlon, nlev), d_u(nlon, nlev), d_v(nlon, nlev)
 
   78   INTEGER i, k, kgwd, kdx(nlon), ktest(nlon)
 
   86   CHARACTER (LEN=20) :: modname = 
'orografi_strato' 
   87   CHARACTER (LEN=80) :: abort_message
 
  113       pt(i, k) = t(i, 
klev-k+1)
 
  114       pu(i, k) = u(i, 
klev-k+1)
 
  115       pv(i, k) = v(i, 
klev-k+1)
 
  116       papmf(i, k) = pplay(i, 
klev-k+1)
 
  121       papmh(i, k) = paprs(i, 
klev-k+2)
 
  127   DO k = 
klev - 1, 1, -1
 
  129       zgeom(i, k) = zgeom(i, k+1) + rd*(pt(i,k)+pt(i,k+1))/2.0*log(papmf(i,k+ &
 
  137     zgeom, pt, pu, pv, pmea, pstd, psig, pgam, pthe, ppic, pval, pulow, &
 
  138     pvlow, pdudt, pdvdt, pdtdt)
 
  144       d_u(i, 
klev+1-k) = dtime*pdudt(i, k)
 
  145       d_v(i, 
klev+1-k) = dtime*pdvdt(i, k)
 
  146       d_t(i, 
klev+1-k) = dtime*pdtdt(i, k)
 
  147       pustr(i) = pustr(i) + pdudt(i, k)*(papmh(i,k+1)-papmh(i,k))/
rg 
  148       pvstr(i) = pvstr(i) + pdvdt(i, k)*(papmh(i,k+1)-papmh(i,k))/
rg 
  155 SUBROUTINE orodrag_strato(nlon, nlev, kgwd, kdx, ktest, ptsphy, paphm1, &
 
  156     papm1, pgeom1, ptm1, pum1, pvm1, pmea, pstd, psig, pgam, pthe, ppic, pval &
 
  158     , pulow, pvlow, pvom, pvol, pte)
 
  203   INTEGER nlon, nlev, kgwd
 
  226   EXTERNAL ismin, ismax
 
  247   REAL pte(nlon, nlev), pvol(nlon, nlev), pvom(nlon, nlev), pulow(nlon), &
 
  249   REAL pum1(nlon, nlev), pvm1(nlon, nlev), ptm1(nlon, nlev), pmea(nlon), &
 
  250     pstd(nlon), psig(nlon), pgam(nlon), pthe(nlon), ppic(nlon), pval(nlon), &
 
  251     pgeom1(nlon, nlev), papm1(nlon, nlev), paphm1(nlon, nlev+1)
 
  253   INTEGER kdx(nlon), ktest(nlon)
 
  271   REAL ztmst, zdelp, ztemp, zforc, ztend, rover
 
  272   REAL zb, zc, zconb, zabsv, zzd1, ratio, zbet, zust, zvst, zdis
 
  309   CALL orosetup_strato(nlon, nlev, ktest, ikcrit, ikcrith, icrit, isect, &
 
  310     ikhlim, ikenvh, iknu, iknu2, paphm1, papm1, pum1, pvm1, ptm1, pgeom1, &
 
  311     pstd, zrho, zri, zstab, ztau, zvph, zpsi, zzdep, pulow, pvlow, pthe, &
 
  312     pgam, pmea, ppic, pval, znu, zd1, zd2, zdmod)
 
  322   CALL gwstress_strato(nlon, nlev, ikcrit, isect, ikhlim, ktest, ikcrith, &
 
  323     icrit, ikenvh, iknu, zrho, zstab, zvph, pstd, psig, pmea, ppic, pval, &
 
  324     ztfr, ztau, pgeom1, pgam, zd1, zd2, zdmod, znu)
 
  333   CALL gwprofil_strato(nlon, nlev, kgwd, kdx, ktest, ikcrit, ikcrith, icrit, &
 
  334     ikenvh, iknu, iknu2, paphm1, zrho, zstab, ztfr, zvph, zri, ztau &
 
  335     , zdmod, znu, psig, pgam, pstd, ppic, pval)
 
  364       IF (ktest(ji)==1) 
THEN 
  366         zdelp = paphm1(ji, jk+1) - paphm1(ji, jk)
 
  367         ztemp = -
rg*(ztau(ji,jk+1)-ztau(ji,jk))/(zvph(ji,
klev+1)*zdelp)
 
  369         zdudt(ji) = (pulow(ji)*zd1(ji)-pvlow(ji)*zd2(ji))*ztemp/zdmod(ji)
 
  370         zdvdt(ji) = (pvlow(ji)*zd1(ji)+pulow(ji)*zd2(ji))*ztemp/zdmod(ji)
 
  377           IF (abs(zdudt(ji))>rover*abs(pum1(ji,jk))/ztmst) zdudt(ji) = rover* &
 
  378             abs(pum1(ji,jk))/ztmst*zdudt(ji)/(abs(zdudt(ji))+1.e-10)
 
  379           IF (abs(zdvdt(ji))>rover*abs(pvm1(ji,jk))/ztmst) zdvdt(ji) = rover* &
 
  380             abs(pvm1(ji,jk))/ztmst*zdvdt(ji)/(abs(zdvdt(ji))+1.e-10)
 
  384         zforc = sqrt(zdudt(ji)**2+zdvdt(ji)**2)
 
  385         ztend = sqrt(pum1(ji,jk)**2+pvm1(ji,jk)**2)/ztmst
 
  387         IF (zforc>=rover*ztend) 
THEN 
  388           zdudt(ji) = rover*ztend/zforc*zdudt(ji)
 
  389           zdvdt(ji) = rover*ztend/zforc*zdvdt(ji)
 
  395         IF (jk>ikenvh(ji)) 
THEN 
  396           zb = 1.0 - 0.18*pgam(ji) - 0.04*pgam(ji)**2
 
  397           zc = 0.48*pgam(ji) + 0.3*pgam(ji)**2
 
  398           zconb = 2.*ztmst*gkwake*psig(ji)/(4.*pstd(ji))
 
  399           zabsv = sqrt(pum1(ji,jk)**2+pvm1(ji,jk)**2)/2.
 
  400           zzd1 = zb*cos(zpsi(ji,jk))**2 + zc*sin(zpsi(ji,jk))**2
 
  401           ratio = (cos(zpsi(ji,jk))**2+pgam(ji)*sin(zpsi(ji, &
 
  402             jk))**2)/(pgam(ji)*cos(zpsi(ji,jk))**2+sin(zpsi(ji,jk))**2)
 
  403           zbet = max(0., 2.-1./ratio)*zconb*zzdep(ji, jk)*zzd1*zabsv
 
  407           zdudt(ji) = -pum1(ji, jk)/ztmst
 
  408           zdvdt(ji) = -pvm1(ji, jk)/ztmst
 
  419           zdudt(ji) = zdudt(ji)*(zbet/(1.+zbet))
 
  420           zdvdt(ji) = zdvdt(ji)*(zbet/(1.+zbet))
 
  422         pvom(ji, jk) = zdudt(ji)
 
  423         pvol(ji, jk) = zdvdt(ji)
 
  424         zust = pum1(ji, jk) + ztmst*zdudt(ji)
 
  425         zvst = pvm1(ji, jk) + ztmst*zdvdt(ji)
 
  426         zdis = 0.5*(pum1(ji,jk)**2+pvm1(ji,jk)**2-zust**2-zvst**2)
 
  427         zdedt(ji) = zdis/ztmst
 
  428         zvidis(ji) = zvidis(ji) + zdis*zdelp
 
  429         zdtdt(ji) = zdedt(ji)/rcpd
 
  444 SUBROUTINE orosetup_strato(nlon, nlev, ktest, kkcrit, kkcrith, kcrit, ksect, &
 
  445     kkhlim, kkenvh, kknu, kknu2, paphm1, papm1, pum1, pvm1, ptm1, pgeom1, &
 
  446     pstd, prho, pri, pstab, ptau, pvph, ppsi, pzdep, pulow, pvlow, ptheta, &
 
  447     pgam, pmea, ppic, pval, pnu, pd1, pd2, pdmod)
 
  548   INTEGER kkcrit(nlon), kkcrith(nlon), kcrit(nlon), ksect(nlon), &
 
  549     kkhlim(nlon), ktest(nlon), kkenvh(nlon)
 
  552   REAL paphm1(nlon, 
klev+1), papm1(nlon, 
klev), pum1(nlon, 
klev), &
 
  553     pvm1(nlon, 
klev), ptm1(nlon, 
klev), pgeom1(nlon, 
klev), &
 
  554     prho(nlon, 
klev+1), pri(nlon, 
klev+1), pstab(nlon, 
klev+1), &
 
  555     ptau(nlon, 
klev+1), pvph(nlon, 
klev+1), ppsi(nlon, 
klev+1), &
 
  557   REAL pulow(nlon), pvlow(nlon), ptheta(nlon), pgam(nlon), pnu(nlon), &
 
  558     pd1(nlon), pd2(nlon), pdmod(nlon)
 
  559   REAL pstd(nlon), pmea(nlon), ppic(nlon), pval(nlon)
 
  567   INTEGER ilevh, jl, jk
 
  568   REAL zcons1, zcons2, zhgeo, zu, zphi
 
  569   REAL zvt1, zvt2, zdwind, zwind, zdelp
 
  570   REAL zstabm, zstabp, zrhom, zrhop
 
  617     pgam(jl) = max(pgam(jl), gtsec)
 
  623   DO jk = 
klev, ilevh, -1
 
  625       ll1(jl, jk) = .
false.
 
  631   DO jk = 
klev, ilevh, -1
 
  633       IF (ktest(jl)==1) 
THEN 
  634         lo = (paphm1(jl,jk)/paphm1(jl,
klev+1)) >= gsigcr
 
  638         zhcrit(jl, jk) = ppic(jl) - pval(jl)
 
  639         zhgeo = pgeom1(jl, jk)/
rg 
  640         ll1(jl, jk) = (zhgeo>zhcrit(jl,jk))
 
  641         IF (ll1(jl,jk) .NEQV. ll1(jl,jk+1)) 
THEN 
  644         IF (.NOT. ll1(jl,ilevh)) kknu(jl) = ilevh
 
  648   DO jk = 
klev, ilevh, -1
 
  650       IF (ktest(jl)==1) 
THEN 
  651         zhcrit(jl, jk) = ppic(jl) - pmea(jl)
 
  652         zhgeo = pgeom1(jl, jk)/
rg 
  653         ll1(jl, jk) = (zhgeo>zhcrit(jl,jk))
 
  654         IF (ll1(jl,jk) .NEQV. ll1(jl,jk+1)) 
THEN 
  657         IF (.NOT. ll1(jl,ilevh)) kknu2(jl) = ilevh
 
  661   DO jk = 
klev, ilevh, -1
 
  663       IF (ktest(jl)==1) 
THEN 
  664         zhcrit(jl, jk) = amin1(ppic(jl)-pmea(jl), pmea(jl)-pval(jl))
 
  665         zhgeo = pgeom1(jl, jk)/
rg 
  666         ll1(jl, jk) = (zhgeo>zhcrit(jl,jk))
 
  667         IF (ll1(jl,jk) .NEQV. ll1(jl,jk+1)) 
THEN 
  670         IF (.NOT. ll1(jl,ilevh)) kknub(jl) = ilevh
 
  676     IF (ktest(jl)==1) 
THEN 
  677       kknu(jl) = min(kknu(jl), nktopg)
 
  678       kknu2(jl) = min(kknu2(jl), nktopg)
 
  679       kknub(jl) = min(kknub(jl), nktopg)
 
  687     prho(jl, 
klev+1) = 0.0
 
  690     pstab(jl, 
klev+1) = 0.0
 
  692     pri(jl, 
klev+1) = 9999.0
 
  693     ppsi(jl, 
klev+1) = 0.0
 
  696     pvph(jl, 
klev+1) = 0.0
 
  717       IF (ktest(jl)==1) 
THEN 
  718         zdp(jl, jk) = papm1(jl, jk) - papm1(jl, jk-1)
 
  719         prho(jl, jk) = 2.*paphm1(jl, jk)*zcons1/(ptm1(jl,jk)+ptm1(jl,jk-1))
 
  720         pstab(jl, jk) = 2.*zcons2/(ptm1(jl,jk)+ptm1(jl,jk-1))* &
 
  721           (1.-rcpd*prho(jl,jk)*(ptm1(jl,jk)-ptm1(jl,jk-1))/zdp(jl,jk))
 
  722         pstab(jl, jk) = max(pstab(jl,jk), gssec)
 
  731   DO jk = 
klev, ilevh, -1
 
  733       IF (ktest(jl)==1) 
THEN 
  734         IF (jk>=kknu2(jl) .AND. jk<=kknul(jl)) 
THEN 
  735           pulow(jl) = pulow(jl) + pum1(jl, jk)*(paphm1(jl,jk+1)-paphm1(jl,jk) &
 
  737           pvlow(jl) = pvlow(jl) + pvm1(jl, jk)*(paphm1(jl,jk+1)-paphm1(jl,jk) &
 
  739           pstab(jl, 
klev+1) = pstab(jl, 
klev+1) + pstab(jl, jk)*(paphm1(jl,jk &
 
  741           prho(jl, 
klev+1) = prho(jl, 
klev+1) + prho(jl, jk)*(paphm1(jl,jk+1) &
 
  748     IF (ktest(jl)==1) 
THEN 
  749       pulow(jl) = pulow(jl)/(paphm1(jl,kknul(jl)+1)-paphm1(jl,kknu2(jl)))
 
  750       pvlow(jl) = pvlow(jl)/(paphm1(jl,kknul(jl)+1)-paphm1(jl,kknu2(jl)))
 
  751       znorm(jl) = max(sqrt(pulow(jl)**2+pvlow(jl)**2), gvsec)
 
  752       pvph(jl, 
klev+1) = znorm(jl)
 
  753       pstab(jl, 
klev+1) = pstab(jl, 
klev+1)/(paphm1(jl,kknul(jl)+1)-paphm1(jl &
 
  755       prho(jl, 
klev+1) = prho(jl, 
klev+1)/(paphm1(jl,kknul(jl)+1)-paphm1(jl, &
 
  765     IF (ktest(jl)==1) 
THEN 
  766       lo = (pulow(jl)<gvsec) .AND. (pulow(jl)>=-gvsec)
 
  768         zu = pulow(jl) + 2.*gvsec
 
  772       zphi = atan(pvlow(jl)/zu)
 
  773       ppsi(jl, 
klev+1) = ptheta(jl)*rpi/180. - zphi
 
  774       zb(jl) = 1. - 0.18*pgam(jl) - 0.04*pgam(jl)**2
 
  775       zc(jl) = 0.48*pgam(jl) + 0.3*pgam(jl)**2
 
  776       pd1(jl) = zb(jl) - (zb(jl)-zc(jl))*(sin(ppsi(jl,
klev+1))**2)
 
  777       pd2(jl) = (zb(jl)-zc(jl))*sin(ppsi(jl,
klev+1))*cos(ppsi(jl,
klev+1))
 
  778       pdmod(jl) = sqrt(pd1(jl)**2+pd2(jl)**2)
 
  787       IF (ktest(jl)==1) 
THEN 
  788         zvt1 = pulow(jl)*pum1(jl, jk) + pvlow(jl)*pvm1(jl, jk)
 
  789         zvt2 = -pvlow(jl)*pum1(jl, jk) + pulow(jl)*pvm1(jl, jk)
 
  790         zvpf(jl, jk) = (zvt1*pd1(jl)+zvt2*pd2(jl))/(znorm(jl)*pdmod(jl))
 
  795       ll1(jl, jk) = .
false.
 
  800       IF (ktest(jl)==1) 
THEN 
  801         zdp(jl, jk) = papm1(jl, jk) - papm1(jl, jk-1)
 
  802         pvph(jl, jk) = ((paphm1(jl,jk)-papm1(jl,jk-1))*zvpf(jl,jk)+(papm1(jl, &
 
  803           jk)-paphm1(jl,jk))*zvpf(jl,jk-1))/zdp(jl, jk)
 
  804         IF (pvph(jl,jk)<gvsec) 
THEN 
  817       IF (ktest(jl)==1) 
THEN 
  818         zdwind = max(abs(zvpf(jl,jk)-zvpf(jl,jk-1)), gvsec)
 
  819         pri(jl, jk) = pstab(jl, jk)*(zdp(jl,jk)/(
rg*prho(jl,jk)*zdwind))**2
 
  820         pri(jl, jk) = max(pri(jl,jk), grcrit)
 
  838       IF (ktest(jl)==1) 
THEN 
  840         IF (jk>=kknu2(jl)) 
THEN 
  843           zwind = (pulow(jl)*pum1(jl,jk)+pvlow(jl)*pvm1(jl,jk))/ &
 
  844             max(sqrt(pulow(jl)**2+pvlow(jl)**2), gvsec)
 
  845           zwind = max(sqrt(zwind**2), gvsec)
 
  846           zdelp = paphm1(jl, jk+1) - paphm1(jl, jk)
 
  847           zstabm = sqrt(max(pstab(jl,jk),gssec))
 
  848           zstabp = sqrt(max(pstab(jl,jk+1),gssec))
 
  850           zrhop = prho(jl, jk+1)
 
  851           pnu(jl) = pnu(jl) + (zdelp/
rg)*((zstabp/zrhop+zstabm/zrhom)/2.)/ &
 
  853           IF ((znum(jl)<=gfrcrit) .AND. (pnu(jl)>gfrcrit) .AND. (kkenvh( &
 
  854             jl)==
klev)) kkenvh(jl) = jk
 
  874   DO jk = 
klev - 1, 2, -1
 
  877       IF (ktest(jl)==1) 
THEN 
  880         zwind = (pulow(jl)*pum1(jl,jk)+pvlow(jl)*pvm1(jl,jk))/ &
 
  881           max(sqrt(pulow(jl)**2+pvlow(jl)**2), gvsec)
 
  882         zwind = max(sqrt(zwind**2), gvsec)
 
  883         zdelp = paphm1(jl, jk+1) - paphm1(jl, jk)
 
  884         zstabm = sqrt(max(pstab(jl,jk),gssec))
 
  885         zstabp = sqrt(max(pstab(jl,jk+1),gssec))
 
  887         zrhop = prho(jl, jk+1)
 
  888         znup(jl) = znup(jl) + (zdelp/
rg)*((zstabp/zrhop+zstabm/zrhom)/2.)/ &
 
  890         IF ((znum(jl)<=rpi/4.) .AND. (znup(jl)>rpi/4.) .AND. (kkcrith( &
 
  891           jl)==
klev)) kkcrith(jl) = jk
 
  899     IF (ktest(jl)==1) 
THEN 
  900       kkcrith(jl) = max0(kkcrith(jl), ilevh*2)
 
  901       kkcrith(jl) = max0(kkcrith(jl), kknu(jl))
 
  902       IF (kcrit(jl)>=kkcrith(jl)) kcrit(jl) = 1
 
  910       IF (ktest(jl)==1) 
THEN 
  911         lo = (pum1(jl,jk)<gvsec) .AND. (pum1(jl,jk)>=-gvsec)
 
  913           zu = pum1(jl, jk) + 2.*gvsec
 
  917         zphi = atan(pvm1(jl,jk)/zu)
 
  918         ppsi(jl, jk) = ptheta(jl)*rpi/180. - zphi
 
  927       IF (ktest(jl)==1) 
THEN 
  929         IF (jk>=kkenvh(jl) .AND. kkenvh(jl)/=
klev) 
THEN 
  930           pzdep(jl, jk) = (pgeom1(jl,kkenvh(jl))-pgeom1(jl,jk))/ &
 
  931             (pgeom1(jl,kkenvh(jl))-pgeom1(jl,
klev))
 
  939 SUBROUTINE gwstress_strato(nlon, nlev, kkcrit, ksect, kkhlim, ktest, kkcrith, &
 
  940     kcrit, kkenvh, kknu, prho, pstab, pvph, pstd, psig, pmea, ppic, pval, &
 
  941     ptfr, ptau, pgeom1, pgamma, pd1, pd2, pdmod, pnu)
 
 1000   INTEGER kkcrit(nlon), kkcrith(nlon), kcrit(nlon), ksect(nlon), &
 
 1001     kkhlim(nlon), ktest(nlon), kkenvh(nlon), kknu(nlon)
 
 1003   REAL prho(nlon, nlev+1), pstab(nlon, nlev+1), ptau(nlon, nlev+1), &
 
 1004     pvph(nlon, nlev+1), ptfr(nlon), pgeom1(nlon, nlev), pstd(nlon)
 
 1006   REAL pd1(nlon), pd2(nlon), pnu(nlon), psig(nlon), pgamma(nlon)
 
 1007   REAL pmea(nlon), ppic(nlon), pval(nlon)
 
 1035     IF (ktest(jl)==1) 
THEN 
 1039       zeff = ppic(jl) - pval(jl)
 
 1040       IF (kkenvh(jl)<
klev) 
THEN 
 1041         zeff = amin1(gfrcrit*pvph(jl,
klev+1)/sqrt(pstab(jl,
klev+1)), zeff)
 
 1045       ptau(jl, 
klev+1) = gkdrag*prho(jl, 
klev+1)*psig(jl)*pdmod(jl)/4./ &
 
 1046         pstd(jl)*pvph(jl, 
klev+1)*sqrt(pstab(jl,
klev+1))*zeff**2
 
 1060       ptau(jl, 
klev+1) = 0.0
 
 1071 SUBROUTINE gwprofil_strato(nlon, nlev, kgwd, kdx, ktest, kkcrit, kkcrith, &
 
 1072     kcrit, kkenvh, kknu, kknu2, paphm1, prho, pstab, ptfr, pvph, pri, ptau, &
 
 1073     pdmod, pnu, psig, pgamma, pstd, ppic, pval)
 
 1116   INTEGER nlon, nlev, kgwd
 
 1117   INTEGER kkcrit(nlon), kkcrith(nlon), kcrit(nlon), kdx(nlon), ktest(nlon), &
 
 1118     kkenvh(nlon), kknu(nlon), kknu2(nlon)
 
 1120   REAL paphm1(nlon, nlev+1), pstab(nlon, nlev+1), prho(nlon, nlev+1), &
 
 1121     pvph(nlon, nlev+1), pri(nlon, nlev+1), ptfr(nlon), ptau(nlon, nlev+1)
 
 1123   REAL pdmod(nlon), pnu(nlon), psig(nlon), pgamma(nlon), pstd(nlon), &
 
 1124     ppic(nlon), pval(nlon)
 
 1132   REAL zsqr, zalfa, zriw, zdel, zb, zalpha, zdz2n, zdelp, zdelpt
 
 1149     IF (ktest(jl)==1) 
THEN 
 1150       zoro(jl) = psig(jl)*pdmod(jl)/4./pstd(jl)
 
 1151       ztau(jl, 
klev+1) = ptau(jl, 
klev+1)
 
 1153       ztau(jl, kkcrith(jl)) = grahilo*ptau(jl, 
klev+1)
 
 1158   DO jk = 
klev + 1, 1, -1
 
 1163       IF (ktest(jl)==1) 
THEN 
 1164         IF (jk>kkcrith(jl)) 
THEN 
 1165           zdelp = paphm1(jl, jk) - paphm1(jl, 
klev+1)
 
 1166           zdelpt = paphm1(jl, kkcrith(jl)) - paphm1(jl, 
klev+1)
 
 1167           ptau(jl, jk) = ztau(jl, 
klev+1) + zdelp/zdelpt*(ztau(jl,kkcrith(jl) &
 
 1170           ptau(jl, jk) = ztau(jl, kkcrith(jl))
 
 1193       IF (ktest(jl)==1) 
THEN 
 1194         znorm(jl) = prho(jl, jk)*sqrt(pstab(jl,jk))*pvph(jl, jk)
 
 1195         zdz2(jl, jk) = ptau(jl, jk)/amax1(znorm(jl), gssec)/zoro(jl)
 
 1200       IF (ktest(jl)==1) 
THEN 
 1201         IF (jk<kkcrith(jl)) 
THEN 
 1202           IF ((ptau(jl,jk+1)<gtsec) .OR. (jk<=kcrit(jl))) 
THEN 
 1205             zsqr = sqrt(pri(jl,jk))
 
 1206             zalfa = sqrt(pstab(jl,jk)*zdz2(jl,jk))/pvph(jl, jk)
 
 1207             zriw = pri(jl, jk)*(1.-zalfa)/(1+zalfa*zsqr)**2
 
 1208             IF (zriw<grcrit) 
THEN 
 1210               zdel = 4./zsqr/grcrit + 1./grcrit**2 + 4./grcrit
 
 1211               zb = 1./grcrit + 2./zsqr
 
 1212               zalpha = 0.5*(-zb+sqrt(zdel))
 
 1213               zdz2n = (pvph(jl,jk)*zalpha)**2/pstab(jl, jk)
 
 1214               ptau(jl, jk) = znorm(jl)*zdz2n*zoro(jl)
 
 1217             ptau(jl, jk) = amin1(ptau(jl,jk), ptau(jl,jk+1))
 
 1228     IF (ktest(jl)==1) 
THEN 
 1229       ztau(jl, kkcrith(jl)-1) = ptau(jl, kkcrith(jl)-1)
 
 1230       ztau(jl, nstra) = ptau(jl, nstra)
 
 1237       IF (ktest(jl)==1) 
THEN 
 1239         IF (jk>kkcrith(jl)-1) 
THEN 
 1241           zdelp = paphm1(jl, jk) - paphm1(jl, 
klev+1)
 
 1242           zdelpt = paphm1(jl, kkcrith(jl)-1) - paphm1(jl, 
klev+1)
 
 1243           ptau(jl, jk) = ztau(jl, 
klev+1) + (ztau(jl,kkcrith(jl)-1)-ztau(jl, &
 
 1244             klev+1))*zdelp/zdelpt
 
 1254       IF (ktest(jl)==1) 
THEN 
 1258           zdelp = paphm1(jl, nstra)
 
 1259           zdelpt = paphm1(jl, jk)
 
 1260           ptau(jl, jk) = ztau(jl, nstra)*zdelpt/zdelp
 
 1273 123 
FORMAT (i4, 1
x, 20(f6.3,1
x))
 
 1279     pstd, psig, pgam, pthe, ppic, pval, kgwd, kdx, ktest, t, 
u, v, pulow, &
 
 1280     pvlow, pustr, pvstr, d_t, d_u, d_v)
 
 1351   REAL plat(nlon), pmea(nlon)
 
 1352   REAL pstd(nlon), psig(nlon), pgam(nlon), pthe(nlon)
 
 1353   REAL ppic(nlon), pval(nlon)
 
 1354   REAL pulow(nlon), pvlow(nlon), pustr(nlon), pvstr(nlon)
 
 1355   REAL t(nlon, nlev), u(nlon, nlev), v(nlon, nlev)
 
 1356   REAL d_t(nlon, nlev), d_u(nlon, nlev), d_v(nlon, nlev)
 
 1358   INTEGER i, k, kgwd, kdx(nlon), ktest(nlon)
 
 1393       pt(i, k) = t(i, 
klev-k+1)
 
 1394       pu(i, k) = u(i, 
klev-k+1)
 
 1395       pv(i, k) = v(i, 
klev-k+1)
 
 1396       papmf(i, k) = pplay(i, 
klev-k+1)
 
 1401       papmh(i, k) = paprs(i, 
klev-k+2)
 
 1407   DO k = 
klev - 1, 1, -1
 
 1409       zgeom(i, k) = zgeom(i, k+1) + rd*(pt(i,k)+pt(i,k+1))/2.0*log(papmf(i,k+ &
 
 1418     zgeom, pt, pu, pv, plat, pmea, pstd, psig, pgam, pthe, ppic, pval, pulow, &
 
 1419     pvlow, pdudt, pdvdt, pdtdt)
 
 1423       d_u(i, 
klev+1-k) = dtime*pdudt(i, k)
 
 1424       d_v(i, 
klev+1-k) = dtime*pdvdt(i, k)
 
 1425       d_t(i, 
klev+1-k) = dtime*pdtdt(i, k)
 
 1426       pustr(i) = pustr(i) + pdudt(i, k)*(papmh(i,k+1)-papmh(i,k))/
rg 
 1427       pvstr(i) = pvstr(i) + pdvdt(i, k)*(papmh(i,k+1)-papmh(i,k))/
rg 
 1435 SUBROUTINE orolift_strato(nlon, nlev, kgwd, kdx, ktest, ptsphy, paphm1, &
 
 1436     papm1, pgeom1, ptm1, pum1, pvm1, plat, pmea, pstd, psig, pgam, pthe, &
 
 1438     , pulow, pvlow, pvom, pvol, pte)
 
 1508   INTEGER nlon, nlev, kgwd
 
 1510   REAL pte(nlon, nlev), pvol(nlon, nlev), pvom(nlon, nlev), pulow(nlon), &
 
 1512   REAL pum1(nlon, nlev), pvm1(nlon, nlev), ptm1(nlon, nlev), plat(nlon), &
 
 1513     pmea(nlon), pstd(nlon), psig(nlon), pgam(nlon), pthe(nlon), ppic(nlon), &
 
 1514     pval(nlon), pgeom1(nlon, nlev), papm1(nlon, nlev), paphm1(nlon, nlev+1)
 
 1516   INTEGER kdx(nlon), ktest(nlon)
 
 1521   INTEGER jl, ilevh, jk
 
 1522   REAL zhgeo, zdelp, zslow, zsqua, zscav, zbet
 
 1533   CHARACTER (LEN=20) :: modname = 
'orolift_strato' 
 1534   CHARACTER (LEN=80) :: abort_message
 
 1544   IF (nlon/=
klon .OR. nlev/=
klev) 
THEN 
 1545     abort_message = 
'pb dimension' 
 1552     zrho(jl, 
klev+1) = 0.0
 
 1575       IF (ktest(jl)==1) 
THEN 
 1576         zhcrit(jl, jk) = amax1(ppic(jl)-pval(jl), 100.)
 
 1577         zhgeo = pgeom1(jl, jk)/
rg 
 1578         ll1(jl, jk) = (zhgeo>zhcrit(jl,jk))
 
 1579         IF (ll1(jl,jk) .NEQV. ll1(jl,jk+1)) 
THEN 
 1588     IF (ktest(jl)==1) 
THEN 
 1589       iknub(jl) = max(iknub(jl), 
klev/2)
 
 1590       iknul(jl) = max(iknul(jl), 2*
klev/3)
 
 1591       IF (iknub(jl)>nktopg) iknub(jl) = nktopg
 
 1592       IF (iknub(jl)==nktopg) iknul(jl) = 
klev 
 1593       IF (iknub(jl)==iknul(jl)) iknub(jl) = iknul(jl) - 1
 
 1599       zrho(jl, jk) = 2.*paphm1(jl, jk)*zcons1/(ptm1(jl,jk)+ptm1(jl,jk-1))
 
 1610       IF (ktest(jl)==1) 
THEN 
 1611         IF (jk>=iknub(jl) .AND. jk<=iknul(jl)) 
THEN 
 1612           pulow(jl) = pulow(jl) + pum1(jl, jk)*(paphm1(jl,jk+1)-paphm1(jl,jk) &
 
 1614           pvlow(jl) = pvlow(jl) + pvm1(jl, jk)*(paphm1(jl,jk+1)-paphm1(jl,jk) &
 
 1616           zrho(jl, 
klev+1) = zrho(jl, 
klev+1) + zrho(jl, jk)*(paphm1(jl,jk+1) &
 
 1623     IF (ktest(jl)==1) 
THEN 
 1624       pulow(jl) = pulow(jl)/(paphm1(jl,iknul(jl)+1)-paphm1(jl,iknub(jl)))
 
 1625       pvlow(jl) = pvlow(jl)/(paphm1(jl,iknul(jl)+1)-paphm1(jl,iknub(jl)))
 
 1626       zrho(jl, 
klev+1) = zrho(jl, 
klev+1)/(paphm1(jl,iknul(jl)+1)-paphm1(jl, &
 
 1637     IF (ktest(jl)==1) 
THEN 
 1638       ztau(jl, 
klev+1) = -gklift*zrho(jl, 
klev+1)*2.*romega* & 
 
 1640         2*pstd(jl)*sin(rpi/180.*plat(jl))*pvlow(jl)
 
 1641       ztav(jl, 
klev+1) = gklift*zrho(jl, 
klev+1)*2.*romega* & 
 
 1643         2*pstd(jl)*sin(rpi/180.*plat(jl))*pulow(jl)
 
 1645       ztau(jl, 
klev+1) = 0.0
 
 1646       ztav(jl, 
klev+1) = 0.0
 
 1657       IF (ktest(jl)==1) 
THEN 
 1658         ztau(jl, jk) = ztau(jl, 
klev+1)*paphm1(jl, jk)/paphm1(jl, 
klev+1)
 
 1659         ztav(jl, jk) = ztav(jl, 
klev+1)*paphm1(jl, jk)/paphm1(jl, 
klev+1)
 
 1675         IF (ktest(jl)==1) 
THEN 
 1676           zdelp = paphm1(jl, jk+1) - paphm1(jl, jk)
 
 1677           zdudt(jl) = -
rg*(ztau(jl,jk+1)-ztau(jl,jk))/zdelp
 
 1678           zdvdt(jl) = -
rg*(ztav(jl,jk+1)-ztav(jl,jk))/zdelp
 
 1687         IF (ktest(jl)==1) 
THEN 
 1689           zslow = sqrt(pulow(jl)**2+pvlow(jl)**2)
 
 1690           zsqua = amax1(sqrt(pum1(jl,jk)**2+pvm1(jl,jk)**2), gvsec)
 
 1691           zscav = -zdudt(jl)*pvm1(jl, jk) + zdvdt(jl)*pum1(jl, jk)
 
 1692           IF (zsqua>gvsec) 
THEN 
 1693             pvom(jl, jk) = -zscav*pvm1(jl, jk)/zsqua**2
 
 1694             pvol(jl, jk) = zscav*pum1(jl, jk)/zsqua**2
 
 1699           zsqua = sqrt(pum1(jl,jk)**2+pum1(jl,jk)**2)
 
 1700           IF (zsqua<zslow) 
THEN 
 1701             pvom(jl, jk) = zsqua/zslow*pvom(jl, jk)
 
 1702             pvol(jl, jk) = zsqua/zslow*pvol(jl, jk)
 
 1715       IF (ktest(jl)==1) 
THEN 
 1716         DO jk = 
klev, iknub(jl), -1
 
 1717           zbet = gklift*2.*romega*sin(rpi/180.*plat(jl))*ztmst* &
 
 1718             (pgeom1(jl,iknub(jl)-1)-pgeom1(jl,jk))/ &
 
 1719             (pgeom1(jl,iknub(jl)-1)-pgeom1(jl,
klev))
 
 1720           zdudt(jl) = -pum1(jl, jk)/ztmst/(1+zbet**2)
 
 1721           zdvdt(jl) = -pvm1(jl, jk)/ztmst/(1+zbet**2)
 
 1722           pvom(jl, jk) = zbet**2*zdudt(jl) - zbet*zdvdt(jl)
 
 1723           pvol(jl, jk) = zbet*zdudt(jl) + zbet**2*zdvdt(jl)
 
 1819   REAL paprs(nlon, nlev+1)
 
 1820   REAL pplay(nlon, nlev)
 
 1823   REAL zpr, ztop, zsigt, zpm1r
 
 1825   REAL :: paprs_glo(
klon_glo, nlev+1)
 
 1831   print *, 
' DANS SUGWD NLEV=', nlev
 
 1840   CALL gather(pplay, pplay_glo)
 
 1841   CALL bcast(pplay_glo)
 
 1842   CALL gather(paprs, paprs_glo)
 
 1843   CALL bcast(paprs_glo)
 
 1847     IF (zpm1r>=zsigt) 
THEN 
 1851     IF (zpm1r>=ztop) 
THEN 
 1857   nktopg = nlev - nktopg + 1
 
 1858   nstra = nlev - nstra
 
 1859   print *, 
' DANS SUGWD nktopg=', nktopg
 
 1860   print *, 
' DANS SUGWD nstra=', nstra
 
 1861   if (nstra == 0) 
call abort_physic(
"sugwd_strato", 
"no level in stratosphere", 1)
 
 1874   WRITE (
unit=6, fmt=
'('' *** SSO essential constants ***'')')
 
 1875   WRITE (
unit=6, fmt=
'('' *** SPECIFIED IN SUGWD ***'')')
 
 1876   WRITE (
unit=6, fmt=
'('' Gravity wave ct '',E13.7,'' '')') gkdrag
 
 1877   WRITE (
unit=6, fmt=
'('' Trapped/total wave dag '',E13.7,'' '')') grahilo
 
 1878   WRITE (
unit=6, fmt=
'('' Critical Richardson   = '',E13.7,'' '')') grcrit
 
 1879   WRITE (
unit=6, fmt=
'('' Critical Froude'',e13.7)') gfrcrit
 
 1880   WRITE (
unit=6, fmt=
'('' Low level Wake bluff cte'',e13.7)') gkwake
 
 1881   WRITE (
unit=6, fmt=
'('' Low level lift  cte'',e13.7)') gklift
 
!IM Implemente en modes sequentiel et parallele CALL rlon_glo CALL bcast(rlon_glo)!$OMP MASTER if(is_mpi_root) then!zstophy
 
subroutine sugwd_strato(nlon, nlev, paprs, pplay)
 
subroutine lift_noro_strato(nlon, nlev, dtime, paprs, pplay, plat, pmea, pstd, psig, pgam, pthe, ppic, pval, kgwd, kdx, ktest, t, u, v, pulow, pvlow, pustr, pvstr, d_t, d_u, d_v)
 
subroutine orosetup_strato(nlon, nlev, ktest, kkcrit, kkcrith, kcrit, ksect, kkhlim, kkenvh, kknu, kknu2, paphm1, papm1, pum1, pvm1, ptm1, pgeom1, pstd, prho, pri, pstab, ptau, pvph, ppsi, pzdep, pulow, pvlow, ptheta, pgam, pmea, ppic, pval, pnu, pd1, pd2, pdmod)
 
subroutine orodrag_strato(nlon, nlev, kgwd, kdx, ktest, ptsphy, paphm1,papm1, pgeom1, ptm1, pum1, pvm1, pmea, pstd, psig, pgam, pthe, ppic, pval
 
!$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 gwprofil_strato(nlon, nlev, kgwd, kdx, ktest, kkcrit, kkcrith, kcrit, kkenvh, kknu, kknu2, paphm1, prho, pstab, ptfr, pvph, pri, ptau, pdmod, pnu, psig, pgamma, pstd, ppic, pval)
 
!IM Implemente en modes sequentiel et parallele CALL gather(rlat, rlat_glo) CALL bcast(rlat_glo) CALL gather(rlon
 
!$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)
 
!$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
 
subroutine gwstress_strato(nlon, nlev, kkcrit, ksect, kkhlim, ktest, kkcrith, kcrit, kkenvh, kknu, prho, pstab, pvph, pstd, psig, pmea, ppic, pval, ptfr, ptau, pgeom1, pgamma, pd1, pd2, pdmod, pnu)
 
subroutine orolift_strato(nlon, nlev, kgwd, kdx, ktest, ptsphy, paphm1, papm1, pgeom1, ptm1, pum1, pvm1, plat, pmea, pstd, psig, pgam, pthe, ppic, pval, pulow, pvlow, pvom, pvol, pte)
 
subroutine abort_physic(modname, message, ierr)
 
subroutine drag_noro_strato(nlon, nlev, dtime, paprs, pplay, pmea, pstd, psig, pgam, pthe, ppic, pval, kgwd, kdx, ktest, t, u, v, pulow, pvlow, pustr, pvstr, d_t, d_u, d_v)
 
!$Header!integer nvarmx s s unit