4 SUBROUTINE drag_noro(nlon, nlev, dtime, paprs, pplay, pmea, pstd, psig, pgam, &
 
    5     pthe, ppic, pval, kgwd, kdx, ktest, t, 
u, v, pulow, pvlow, pustr, pvstr, &
 
   34   REAL pmea(nlon), pstd(nlon), psig(nlon), pgam(nlon), pthe(nlon)
 
   35   REAL ppic(nlon), pval(nlon)
 
   36   REAL pulow(nlon), pvlow(nlon), pustr(nlon), pvstr(nlon)
 
   37   REAL t(nlon, nlev), u(nlon, nlev), v(nlon, nlev)
 
   38   REAL d_t(nlon, nlev), d_u(nlon, nlev), d_v(nlon, nlev)
 
   40   INTEGER i, k, kgwd, kdx(nlon), ktest(nlon)
 
   73       pt(i, k) = t(i, 
klev-k+1)
 
   74       pu(i, k) = u(i, 
klev-k+1)
 
   75       pv(i, k) = v(i, 
klev-k+1)
 
   76       papmf(i, k) = pplay(i, 
klev-k+1)
 
   81       papmh(i, k) = paprs(i, 
klev-k+2)
 
   87   DO k = 
klev - 1, 1, -1
 
   89       zgeom(i, k) = zgeom(i, k+1) + rd*(pt(i,k)+pt(i,k+1))/2.0*log(papmf(i,k+ &
 
   96   CALL orodrag(
klon, 
klev, kgwd, kdx, ktest, dtime, papmh, papmf, zgeom, pt, &
 
   97     pu, pv, pmea, pstd, psig, pgam, pthe, ppic, pval, pulow, pvlow, pdudt, &
 
  102       d_u(i, 
klev+1-k) = dtime*pdudt(i, k)
 
  103       d_v(i, 
klev+1-k) = dtime*pdvdt(i, k)
 
  104       d_t(i, 
klev+1-k) = dtime*pdtdt(i, k)
 
  105       pustr(i) = pustr(i) &        
 
  107         +pdudt(i, k)*(papmh(i,k+1)-papmh(i,k))/
rg 
  108       pvstr(i) = pvstr(i) &        
 
  110         +pdvdt(i, k)*(papmh(i,k+1)-papmh(i,k))/
rg 
  116 SUBROUTINE orodrag(nlon, nlev, kgwd, kdx, ktest, ptsphy, paphm1, papm1, &
 
  117     pgeom1, ptm1, pum1, pvm1, pmea, pstd, psig, pgamma, ptheta, ppic, pval &
 
  119     , pulow, pvlow, pvom, pvol, pte)
 
  158   EXTERNAL ismin, ismax
 
  181   INTEGER kgwd, jl, ilevp1, jk, ji
 
  182   REAL zdelp, ztemp, zforc, ztend
 
  183   REAL rover, zb, zc, zconb, zabsv
 
  184   REAL zzd1, ratio, zbet, zust, zvst, zdis
 
  185   REAL pte(nlon, nlev), pvol(nlon, nlev), pvom(nlon, nlev), pulow(
klon), &
 
  187   REAL pum1(nlon, nlev), pvm1(nlon, nlev), ptm1(nlon, nlev), pmea(nlon), &
 
  188     pstd(nlon), psig(nlon), pgamma(nlon), ptheta(nlon), ppic(nlon), &
 
  189     pval(nlon), pgeom1(nlon, nlev), papm1(nlon, nlev), paphm1(nlon, nlev+1)
 
  191   INTEGER kdx(nlon), ktest(nlon)
 
  204   REAL ztmst, ptsphy, zrtmst
 
  241   CALL orosetup(nlon, ktest, ikcrit, ikcrith, icrit, ikenvh, iknu, iknu2, &
 
  242     paphm1, papm1, pum1, pvm1, ptm1, pgeom1, pstd, zrho, zri, zstab, ztau, &
 
  243     zvph, zpsi, zzdep, pulow, pvlow, ptheta, pgamma, pmea, ppic, pval, znu, &
 
  254   CALL gwstress(nlon, nlev, ktest, icrit, ikenvh, iknu, zrho, zstab, zvph, &
 
  255     pstd, psig, pmea, ppic, ztau, pgeom1, zdmod)
 
  262   CALL gwprofil(nlon, nlev, kgwd, kdx, ktest, ikcrith, icrit, paphm1, zrho, &
 
  263     zstab, zvph, zri, ztau, zdmod, psig, pstd)
 
  289       IF (ktest(ji)==1) 
THEN 
  291         zdelp = paphm1(ji, jk+1) - paphm1(ji, jk)
 
  292         ztemp = -
rg*(ztau(ji,jk+1)-ztau(ji,jk))/(zvph(ji,ilevp1)*zdelp)
 
  293         zdudt(ji) = (pulow(ji)*zd1(ji)-pvlow(ji)*zd2(ji))*ztemp/zdmod(ji)
 
  294         zdvdt(ji) = (pvlow(ji)*zd1(ji)+pulow(ji)*zd2(ji))*ztemp/zdmod(ji)
 
  298         zforc = sqrt(zdudt(ji)**2+zdvdt(ji)**2) + 1.e-12
 
  299         ztend = sqrt(pum1(ji,jk)**2+pvm1(ji,jk)**2)/ztmst + 1.e-12
 
  301         IF (zforc>=rover*ztend) 
THEN 
  302           zdudt(ji) = rover*ztend/zforc*zdudt(ji)
 
  303           zdvdt(ji) = rover*ztend/zforc*zdvdt(ji)
 
  308         IF (jk>=ikenvh(ji)) 
THEN 
  309           zb = 1.0 - 0.18*pgamma(ji) - 0.04*pgamma(ji)**2
 
  310           zc = 0.48*pgamma(ji) + 0.3*pgamma(ji)**2
 
  311           zconb = 2.*ztmst*gkwake*psig(ji)/(4.*pstd(ji))
 
  312           zabsv = sqrt(pum1(ji,jk)**2+pvm1(ji,jk)**2)/2.
 
  313           zzd1 = zb*cos(zpsi(ji,jk))**2 + zc*sin(zpsi(ji,jk))**2
 
  314           ratio = (cos(zpsi(ji,jk))**2+pgamma(ji)*sin(zpsi(ji, &
 
  315             jk))**2)/(pgamma(ji)*cos(zpsi(ji,jk))**2+sin(zpsi(ji,jk))**2)
 
  316           zbet = max(0., 2.-1./ratio)*zconb*zzdep(ji, jk)*zzd1*zabsv
 
  320           zdudt(ji) = -pum1(ji, jk)/ztmst
 
  321           zdvdt(ji) = -pvm1(ji, jk)/ztmst
 
  330           zdudt(ji) = zdudt(ji)*(zbet/(1.+zbet))
 
  331           zdvdt(ji) = zdvdt(ji)*(zbet/(1.+zbet))
 
  333         pvom(ji, jk) = zdudt(ji)
 
  334         pvol(ji, jk) = zdvdt(ji)
 
  335         zust = pum1(ji, jk) + ztmst*zdudt(ji)
 
  336         zvst = pvm1(ji, jk) + ztmst*zdvdt(ji)
 
  337         zdis = 0.5*(pum1(ji,jk)**2+pvm1(ji,jk)**2-zust**2-zvst**2)
 
  338         zdedt(ji) = zdis/ztmst
 
  339         zvidis(ji) = zvidis(ji) + zdis*zdelp
 
  340         zdtdt(ji) = zdedt(ji)/rcpd
 
  355 SUBROUTINE orosetup(nlon, ktest, kkcrit, kkcrith, kcrit, kkenvh, kknu, kknu2, &
 
  356     paphm1, papm1, pum1, pvm1, ptm1, pgeom1, pstd, prho, pri, pstab, ptau, &
 
  357     pvph, ppsi, pzdep, pulow, pvlow, ptheta, pgamma, pmea, ppic, pval, pnu, &
 
  414   INTEGER kkcrit(nlon), kkcrith(nlon), kcrit(nlon), ktest(nlon), kkenvh(nlon)
 
  417   REAL paphm1(nlon, 
klev+1), papm1(nlon, 
klev), pum1(nlon, 
klev), &
 
  418     pvm1(nlon, 
klev), ptm1(nlon, 
klev), pgeom1(nlon, 
klev), &
 
  419     prho(nlon, 
klev+1), pri(nlon, 
klev+1), pstab(nlon, 
klev+1), &
 
  420     ptau(nlon, 
klev+1), pvph(nlon, 
klev+1), ppsi(nlon, 
klev+1), &
 
  422   REAL pulow(nlon), pvlow(nlon), ptheta(nlon), pgamma(nlon), pnu(nlon), &
 
  423     pd1(nlon), pd2(nlon), pdmod(nlon)
 
  424   REAL pstd(nlon), pmea(nlon), ppic(nlon), pval(nlon)
 
  432   INTEGER ilevm1, ilevm2, ilevh
 
  433   REAL zcons1, zcons2, zcons3, zhgeo
 
  434   REAL zu, zphi, zvt1, zvt2, zst, zvar, zdwind, zwind
 
  435   REAL zstabm, zstabp, zrhom, zrhop, alpha
 
  436   REAL zggeenv, zggeom1, zgvar
 
  488     pgamma(jl) = max(pgamma(jl), gtsec)
 
  494   DO jk = 
klev, ilevh, -1
 
  496       ll1(jl, jk) = .
false.
 
  502   DO jk = 
klev, ilevh, -1
 
  504       lo = (paphm1(jl,jk)/paphm1(jl,
klev+1)) >= gsigcr
 
  508       zhcrit(jl, jk) = ppic(jl)
 
  509       zhgeo = pgeom1(jl, jk)/
rg 
  510       ll1(jl, jk) = (zhgeo>zhcrit(jl,jk))
 
  511       IF (ll1(jl,jk) .NEQV. ll1(jl,jk+1)) 
THEN 
  514       IF (.NOT. ll1(jl,ilevh)) kknu(jl) = ilevh
 
  517   DO jk = 
klev, ilevh, -1
 
  519       zhcrit(jl, jk) = ppic(jl) - pval(jl)
 
  520       zhgeo = pgeom1(jl, jk)/
rg 
  521       ll1(jl, jk) = (zhgeo>zhcrit(jl,jk))
 
  522       IF (ll1(jl,jk) .NEQV. ll1(jl,jk+1)) 
THEN 
  525       IF (.NOT. ll1(jl,ilevh)) kknu2(jl) = ilevh
 
  528   DO jk = 
klev, ilevh, -1
 
  530       zhcrit(jl, jk) = amax1(ppic(jl)-pmea(jl), pmea(jl)-pval(jl))
 
  531       zhgeo = pgeom1(jl, jk)/
rg 
  532       ll1(jl, jk) = (zhgeo>zhcrit(jl,jk))
 
  533       IF (ll1(jl,jk) .NEQV. ll1(jl,jk+1)) 
THEN 
  536       IF (.NOT. ll1(jl,ilevh)) kknub(jl) = ilevh
 
  541     kknu(jl) = min(kknu(jl), nktopg)
 
  542     kknu2(jl) = min(kknu2(jl), nktopg)
 
  543     kknub(jl) = min(kknub(jl), nktopg)
 
  550     prho(jl, 
klev+1) = 0.0
 
  551     pstab(jl, 
klev+1) = 0.0
 
  553     pri(jl, 
klev+1) = 9999.0
 
  554     ppsi(jl, 
klev+1) = 0.0
 
  574       IF (ktest(jl)==1) 
THEN 
  575         zdp(jl, jk) = papm1(jl, jk) - papm1(jl, jk-1)
 
  576         prho(jl, jk) = 2.*paphm1(jl, jk)*zcons1/(ptm1(jl,jk)+ptm1(jl,jk-1))
 
  577         pstab(jl, jk) = 2.*zcons2/(ptm1(jl,jk)+ptm1(jl,jk-1))* &
 
  578           (1.-rcpd*prho(jl,jk)*(ptm1(jl,jk)-ptm1(jl,jk-1))/zdp(jl,jk))
 
  579         pstab(jl, jk) = max(pstab(jl,jk), gssec)
 
  588   DO jk = 
klev, ilevh, -1
 
  590       IF (jk>=kknub(jl) .AND. jk<=kknul(jl)) 
THEN 
  591         pulow(jl) = pulow(jl) + pum1(jl, jk)*(paphm1(jl,jk+1)-paphm1(jl,jk))
 
  592         pvlow(jl) = pvlow(jl) + pvm1(jl, jk)*(paphm1(jl,jk+1)-paphm1(jl,jk))
 
  597     pulow(jl) = pulow(jl)/(paphm1(jl,kknul(jl)+1)-paphm1(jl,kknub(jl)))
 
  598     pvlow(jl) = pvlow(jl)/(paphm1(jl,kknul(jl)+1)-paphm1(jl,kknub(jl)))
 
  599     znorm(jl) = max(sqrt(pulow(jl)**2+pvlow(jl)**2), gvsec)
 
  600     pvph(jl, 
klev+1) = znorm(jl)
 
  606     lo = (pulow(jl)<gvsec) .AND. (pulow(jl)>=-gvsec)
 
  608       zu = pulow(jl) + 2.*gvsec
 
  612     zphi = atan(pvlow(jl)/zu)
 
  613     ppsi(jl, 
klev+1) = ptheta(jl)*rpi/180. - zphi
 
  614     zb(jl) = 1. - 0.18*pgamma(jl) - 0.04*pgamma(jl)**2
 
  615     zc(jl) = 0.48*pgamma(jl) + 0.3*pgamma(jl)**2
 
  616     pd1(jl) = zb(jl) - (zb(jl)-zc(jl))*(sin(ppsi(jl,
klev+1))**2)
 
  617     pd2(jl) = (zb(jl)-zc(jl))*sin(ppsi(jl,
klev+1))*cos(ppsi(jl,
klev+1))
 
  618     pdmod(jl) = sqrt(pd1(jl)**2+pd2(jl)**2)
 
  625       IF (ktest(jl)==1) 
THEN 
  626         zvt1 = pulow(jl)*pum1(jl, jk) + pvlow(jl)*pvm1(jl, jk)
 
  627         zvt2 = -pvlow(jl)*pum1(jl, jk) + pulow(jl)*pvm1(jl, jk)
 
  628         zvpf(jl, jk) = (zvt1*pd1(jl)+zvt2*pd2(jl))/(znorm(jl)*pdmod(jl))
 
  633       ll1(jl, jk) = .
false.
 
  638       IF (ktest(jl)==1) 
THEN 
  639         zdp(jl, jk) = papm1(jl, jk) - papm1(jl, jk-1)
 
  640         pvph(jl, jk) = ((paphm1(jl,jk)-papm1(jl,jk-1))*zvpf(jl,jk)+(papm1(jl, &
 
  641           jk)-paphm1(jl,jk))*zvpf(jl,jk-1))/zdp(jl, jk)
 
  642         IF (pvph(jl,jk)<gvsec) 
THEN 
  655       IF (ktest(jl)==1) 
THEN 
  656         IF (jk>=(kknub(jl)+1) .AND. jk<=kknul(jl)) 
THEN 
  657           zst = zcons2/ptm1(jl, jk)*(1.-rcpd*prho(jl,jk)*(ptm1(jl, &
 
  658             jk)-ptm1(jl,jk-1))/zdp(jl,jk))
 
  659           pstab(jl, 
klev+1) = pstab(jl, 
klev+1) + zst*zdp(jl, jk)
 
  660           pstab(jl, 
klev+1) = max(pstab(jl,
klev+1), gssec)
 
  661           prho(jl, 
klev+1) = prho(jl, 
klev+1) + paphm1(jl, jk)*2.*zdp(jl, jk) &
 
  662             *zcons1/(ptm1(jl,jk)+ptm1(jl,jk-1))
 
  669     pstab(jl, 
klev+1) = pstab(jl, 
klev+1)/(papm1(jl,kknul(jl))-papm1(jl,kknub &
 
  671     prho(jl, 
klev+1) = prho(jl, 
klev+1)/(papm1(jl,kknul(jl))-papm1(jl,kknub( &
 
  682       IF (ktest(jl)==1) 
THEN 
  683         zdwind = max(abs(zvpf(jl,jk)-zvpf(jl,jk-1)), gvsec)
 
  684         pri(jl, jk) = pstab(jl, jk)*(zdp(jl,jk)/(
rg*prho(jl,jk)*zdwind))**2
 
  685         pri(jl, jk) = max(pri(jl,jk), grcrit)
 
  703       IF (ktest(jl)==1) 
THEN 
  705         IF (jk>=kknub(jl)) 
THEN 
  708           zwind = (pulow(jl)*pum1(jl,jk)+pvlow(jl)*pvm1(jl,jk))/ &
 
  709             max(sqrt(pulow(jl)**2+pvlow(jl)**2), gvsec)
 
  710           zwind = max(sqrt(zwind**2), gvsec)
 
  711           zdelp = paphm1(jl, jk+1) - paphm1(jl, jk)
 
  712           zstabm = sqrt(max(pstab(jl,jk),gssec))
 
  713           zstabp = sqrt(max(pstab(jl,jk+1),gssec))
 
  715           zrhop = prho(jl, jk+1)
 
  716           pnu(jl) = pnu(jl) + (zdelp/
rg)*((zstabp/zrhop+zstabm/zrhom)/2.)/ &
 
  718           IF ((znum(jl)<=gfrcrit) .AND. (pnu(jl)>gfrcrit) .AND. (kkenvh( &
 
  719             jl)==
klev)) kkenvh(jl) = jk
 
  737   DO jk = 
klev - 1, 2, -1
 
  740       IF (ktest(jl)==1) 
THEN 
  743         zwind = (pulow(jl)*pum1(jl,jk)+pvlow(jl)*pvm1(jl,jk))/ &
 
  744           max(sqrt(pulow(jl)**2+pvlow(jl)**2), gvsec)
 
  745         zwind = max(sqrt(zwind**2), gvsec)
 
  746         zdelp = paphm1(jl, jk+1) - paphm1(jl, jk)
 
  747         zstabm = sqrt(max(pstab(jl,jk),gssec))
 
  748         zstabp = sqrt(max(pstab(jl,jk+1),gssec))
 
  750         zrhop = prho(jl, jk+1)
 
  751         znup(jl) = znup(jl) + (zdelp/
rg)*((zstabp/zrhop+zstabm/zrhom)/2.)/ &
 
  753         IF ((znum(jl)<=rpi/2.) .AND. (znup(jl)>rpi/2.) .AND. (kkcrith( &
 
  754           jl)==
klev)) kkcrith(jl) = jk
 
  762     kkcrith(jl) = min0(kkcrith(jl), kknu2(jl))
 
  763     kkcrith(jl) = max0(kkcrith(jl), ilevh*2)
 
  770       IF (jk>=kkenvh(jl)) 
THEN 
  771         lo = (pum1(jl,jk)<gvsec) .AND. (pum1(jl,jk)>=-gvsec)
 
  773           zu = pum1(jl, jk) + 2.*gvsec
 
  777         zphi = atan(pvm1(jl,jk)/zu)
 
  778         ppsi(jl, jk) = ptheta(jl)*rpi/180. - zphi
 
  788       IF (jk>=kkenvh(jl)) 
THEN 
  789         zggeenv = amax1(1., (pgeom1(jl,kkenvh(jl))+pgeom1(jl, &
 
  791         zggeom1 = amax1(pgeom1(jl,jk), 1.)
 
  792         zgvar = amax1(pstd(jl)*
rg, 1.)
 
  794         pzdep(jl, jk) = (pgeom1(jl,kkenvh(jl)-1)-pgeom1(jl,jk))/ &
 
  795           (pgeom1(jl,kkenvh(jl)-1)-pgeom1(jl,
klev))
 
  802 SUBROUTINE gwstress(nlon, nlev, ktest, kcrit, kkenvh, kknu, prho, pstab, &
 
  803     pvph, pstd, psig, pmea, ppic, ptau, pgeom1, pdmod)
 
  854   INTEGER kcrit(nlon), ktest(nlon), kkenvh(nlon), kknu(nlon)
 
  856   REAL prho(nlon, nlev+1), pstab(nlon, nlev+1), ptau(nlon, nlev+1), &
 
  857     pvph(nlon, nlev+1), pgeom1(nlon, nlev), pstd(nlon)
 
  860   REAL pmea(nlon), ppic(nlon)
 
  868   REAL zblock, zvar, zeff
 
  886     IF (ktest(jl)==1) 
THEN 
  890       IF (kkenvh(jl)==
klev) 
THEN 
  893         zblock = (pgeom1(jl,kkenvh(jl))+pgeom1(jl,kkenvh(jl)+1))/2./
rg 
  896       zvar = ppic(jl) - pmea(jl)
 
  897       zeff = amax1(0., zvar-zblock)
 
  899       ptau(jl, 
klev+1) = prho(jl, 
klev+1)*gkdrag*psig(jl)*zeff**2/4./ &
 
  900         pstd(jl)*pvph(jl, 
klev+1)*pdmod(jl)*sqrt(pstab(jl,
klev+1))
 
  905       lo = (ptau(jl,
klev+1)<gtsec) .OR. (kcrit(jl)>=kknu(jl)) .OR. &
 
  906         (pvph(jl,
klev+1)<gvcrit)
 
  911       ptau(jl, 
klev+1) = 0.0
 
  919 SUBROUTINE gwprofil(nlon, nlev, kgwd, kdx, ktest, kkcrith, kcrit, paphm1, &
 
  920     prho, pstab, pvph, pri, ptau, pdmod, psig, pvar)
 
  983   INTEGER kkcrith(nlon), kcrit(nlon), kdx(nlon), ktest(nlon)
 
  986   REAL paphm1(nlon, nlev+1), pstab(nlon, nlev+1), prho(nlon, nlev+1), &
 
  987     pvph(nlon, nlev+1), pri(nlon, nlev+1), ptau(nlon, nlev+1)
 
  989   REAL pdmod(nlon), psig(nlon), pvar(nlon)
 
  996   INTEGER ilevh, ji, kgwd, jl, jk
 
  997   REAL zsqr, zalfa, zriw, zdel, zb, zalpha, zdz2n
 
 1019     IF (ktest(jl)==1) 
THEN 
 1020       zoro(jl) = psig(jl)*pdmod(jl)/4./max(pvar(jl), 1.0)
 
 1021       ztau(jl, 
klev+1) = ptau(jl, 
klev+1)
 
 1035       IF (ktest(jl)==1) 
THEN 
 1036         IF (jk>kkcrith(jl)) 
THEN 
 1037           ptau(jl, jk) = ztau(jl, 
klev+1)
 
 1041           ptau(jl, jk) = grahilo*ztau(jl, 
klev+1)
 
 1057       IF (ktest(jl)==1) 
THEN 
 1058         IF (jk<kkcrith(jl)) 
THEN 
 1059           znorm(jl) = gkdrag*prho(jl, jk)*sqrt(pstab(jl,jk))*pvph(jl, jk)* &
 
 1061           zdz2(jl, jk) = ptau(jl, jk+1)/max(znorm(jl), gssec)
 
 1075       IF (ktest(jl)==1) 
THEN 
 1077         IF (jk<kkcrith(jl)) 
THEN 
 1078           IF ((ptau(jl,jk+1)<gtsec) .OR. (jk<=kcrit(jl))) 
THEN 
 1081             zsqr = sqrt(pri(jl,jk))
 
 1082             zalfa = sqrt(pstab(jl,jk)*zdz2(jl,jk))/pvph(jl, jk)
 
 1083             zriw = pri(jl, jk)*(1.-zalfa)/(1+zalfa*zsqr)**2
 
 1084             IF (zriw<grcrit) 
THEN 
 1085               zdel = 4./zsqr/grcrit + 1./grcrit**2 + 4./grcrit
 
 1086               zb = 1./grcrit + 2./zsqr
 
 1087               zalpha = 0.5*(-zb+sqrt(zdel))
 
 1088               zdz2n = (pvph(jl,jk)*zalpha)**2/pstab(jl, jk)
 
 1089               ptau(jl, jk) = znorm(jl)*zdz2n
 
 1091               ptau(jl, jk) = znorm(jl)*zdz2(jl, jk)
 
 1093             ptau(jl, jk) = min(ptau(jl,jk), ptau(jl,jk+1))
 
 1107     IF (ktest(jl)==1) 
THEN 
 1108       ztau(jl, kkcrith(jl)) = ptau(jl, kkcrith(jl))
 
 1109       ztau(jl, nstra) = ptau(jl, nstra)
 
 1119       IF (ktest(jl)==1) 
THEN 
 1122         IF (jk>kkcrith(jl)) 
THEN 
 1124           zdelp = paphm1(jl, jk) - paphm1(jl, 
klev+1)
 
 1125           zdelpt = paphm1(jl, kkcrith(jl)) - paphm1(jl, 
klev+1)
 
 1126           ptau(jl, jk) = ztau(jl, 
klev+1) + (ztau(jl,kkcrith(jl))-ztau(jl, &
 
 1127             klev+1))*zdelp/zdelpt
 
 1140       IF (ktest(jl)==1) 
THEN 
 1145           zdelp = paphm1(jl, nstra)
 
 1146           zdelpt = paphm1(jl, jk)
 
 1147           ptau(jl, jk) = ztau(jl, nstra)*zdelpt/zdelp
 
 1160       IF (ktest(jl)==1) 
THEN 
 1163         IF (jk<kkcrith(jl) .AND. jk>nstra) 
THEN 
 1165           zdelp = paphm1(jl, jk) - paphm1(jl, kkcrith(jl))
 
 1166           zdelpt = paphm1(jl, nstra) - paphm1(jl, kkcrith(jl))
 
 1167           ptau(jl, jk) = ztau(jl, kkcrith(jl)) + (ztau(jl,nstra)-ztau(jl, &
 
 1168             kkcrith(jl)))*zdelp/zdelpt
 
 1180 SUBROUTINE lift_noro(nlon, nlev, dtime, paprs, pplay, plat, pmea, pstd, ppic, &
 
 1181     ktest, t, 
u, v, pulow, pvlow, pustr, pvstr, d_t, d_u, d_v)
 
 1209   REAL plat(nlon), pmea(nlon)
 
 1212   REAL pulow(nlon), pvlow(nlon), pustr(nlon), pvstr(nlon)
 
 1213   REAL t(nlon, nlev), u(nlon, nlev), v(nlon, nlev)
 
 1214   REAL d_t(nlon, nlev), d_u(nlon, nlev), d_v(nlon, nlev)
 
 1216   INTEGER i, k, ktest(nlon)
 
 1249       pt(i, k) = t(i, 
klev-k+1)
 
 1250       pu(i, k) = u(i, 
klev-k+1)
 
 1251       pv(i, k) = v(i, 
klev-k+1)
 
 1252       papmf(i, k) = pplay(i, 
klev-k+1)
 
 1257       papmh(i, k) = paprs(i, 
klev-k+2)
 
 1263   DO k = 
klev - 1, 1, -1
 
 1265       zgeom(i, k) = zgeom(i, k+1) + rd*(pt(i,k)+pt(i,k+1))/2.0*log(papmf(i,k+ &
 
 1272   CALL orolift(
klon, 
klev, ktest, dtime, papmh, zgeom, pt, pu, pv, plat, &
 
 1273     pmea, pstd, ppic, pulow, pvlow, pdudt, pdvdt, pdtdt)
 
 1277       d_u(i, 
klev+1-k) = dtime*pdudt(i, k)
 
 1278       d_v(i, 
klev+1-k) = dtime*pdvdt(i, k)
 
 1279       d_t(i, 
klev+1-k) = dtime*pdtdt(i, k)
 
 1280       pustr(i) = pustr(i) &        
 
 1282         +pdudt(i, k)*(papmh(i,k+1)-papmh(i,k))/
rg 
 1283       pvstr(i) = pvstr(i) &        
 
 1285         +pdvdt(i, k)*(papmh(i,k+1)-papmh(i,k))/
rg 
 1291 SUBROUTINE orolift(nlon, nlev, ktest, ptsphy, paphm1, pgeom1, ptm1, pum1, &
 
 1292     pvm1, plat, pmea, pvaror, ppic & 
 
 1293     , pulow, pvlow, pvom, pvol, pte)
 
 1323   REAL pte(nlon, nlev), pvol(nlon, nlev), pvom(nlon, nlev), pulow(nlon), &
 
 1325   REAL pum1(nlon, nlev), pvm1(nlon, nlev), ptm1(nlon, nlev), plat(nlon), &
 
 1326     pmea(nlon), pvaror(nlon), ppic(nlon), pgeom1(nlon, nlev), &
 
 1327     paphm1(nlon, nlev+1)
 
 1337   INTEGER jl, ilevh, jk
 
 1338   REAL zcons1, ztmst, zrtmst, zpi, zhgeo
 
 1339   REAL zdelp, zslow, zsqua, zscav, zbet
 
 1346   CHARACTER (LEN=20) :: modname = 
'orografi' 
 1347   CHARACTER (LEN=80) :: abort_message
 
 1355   IF (nlon/=
klon .OR. nlev/=
klev) 
THEN 
 1356     abort_message = 
'pb dimension' 
 1366     zrho(jl, 
klev+1) = 0.0
 
 1389       IF (ktest(jl)==1) 
THEN 
 1390         zhcrit(jl, jk) = amax1(ppic(jl)-pmea(jl), 100.)
 
 1391         zhgeo = pgeom1(jl, jk)/
rg 
 1392         ll1(jl, jk) = (zhgeo>zhcrit(jl,jk))
 
 1393         IF (ll1(jl,jk) .NEQV. ll1(jl,jk+1)) 
THEN 
 1401     IF (ktest(jl)==1) 
THEN 
 1402       iknub(jl) = max(iknub(jl), 
klev/2)
 
 1403       iknul(jl) = max(iknul(jl), 2*
klev/3)
 
 1404       IF (iknub(jl)>nktopg) iknub(jl) = nktopg
 
 1405       IF (iknub(jl)==nktopg) iknul(jl) = 
klev 
 1406       IF (iknub(jl)==iknul(jl)) iknub(jl) = iknul(jl) - 1
 
 1420       zrho(jl, jk) = 2.*paphm1(jl, jk)*zcons1/(ptm1(jl,jk)+ptm1(jl,jk-1))
 
 1431       IF (ktest(jl)==1) 
THEN 
 1432         IF (jk>=iknub(jl) .AND. jk<=iknul(jl)) 
THEN 
 1433           pulow(jl) = pulow(jl) + pum1(jl, jk)*(paphm1(jl,jk+1)-paphm1(jl,jk) &
 
 1435           pvlow(jl) = pvlow(jl) + pvm1(jl, jk)*(paphm1(jl,jk+1)-paphm1(jl,jk) &
 
 1437           zrho(jl, 
klev+1) = zrho(jl, 
klev+1) + zrho(jl, jk)*(paphm1(jl,jk+1) &
 
 1444     IF (ktest(jl)==1) 
THEN 
 1445       pulow(jl) = pulow(jl)/(paphm1(jl,iknul(jl)+1)-paphm1(jl,iknub(jl)))
 
 1446       pvlow(jl) = pvlow(jl)/(paphm1(jl,iknul(jl)+1)-paphm1(jl,iknub(jl)))
 
 1447       zrho(jl, 
klev+1) = zrho(jl, 
klev+1)/(paphm1(jl,iknul(jl)+1)-paphm1(jl, &
 
 1458     IF (ktest(jl)==1) 
THEN 
 1459       ztau(jl, 
klev+1) = -gklift*zrho(jl, 
klev+1)*2.*romega* & 
 
 1461         2*pvaror(jl)*sin(zpi/180.*plat(jl))*pvlow(jl)
 
 1462       ztav(jl, 
klev+1) = gklift*zrho(jl, 
klev+1)*2.*romega* & 
 
 1464         2*pvaror(jl)*sin(zpi/180.*plat(jl))*pulow(jl)
 
 1466       ztau(jl, 
klev+1) = 0.0
 
 1467       ztav(jl, 
klev+1) = 0.0
 
 1478       IF (ktest(jl)==1) 
THEN 
 1479         ztau(jl, jk) = ztau(jl, 
klev+1)*paphm1(jl, jk)/paphm1(jl, 
klev+1)
 
 1480         ztav(jl, jk) = ztav(jl, 
klev+1)*paphm1(jl, jk)/paphm1(jl, 
klev+1)
 
 1498         IF (ktest(jl)==1) 
THEN 
 1499           zdelp = paphm1(jl, jk+1) - paphm1(jl, jk)
 
 1500           zdudt(jl) = -
rg*(ztau(jl,jk+1)-ztau(jl,jk))/zdelp
 
 1501           zdvdt(jl) = -
rg*(ztav(jl,jk+1)-ztav(jl,jk))/zdelp
 
 1510         IF (ktest(jl)==1) 
THEN 
 1512           zslow = sqrt(pulow(jl)**2+pvlow(jl)**2)
 
 1513           zsqua = amax1(sqrt(pum1(jl,jk)**2+pvm1(jl,jk)**2), gvsec)
 
 1514           zscav = -zdudt(jl)*pvm1(jl, jk) + zdvdt(jl)*pum1(jl, jk)
 
 1515           IF (zsqua>gvsec) 
THEN 
 1516             pvom(jl, jk) = -zscav*pvm1(jl, jk)/zsqua**2
 
 1517             pvol(jl, jk) = zscav*pum1(jl, jk)/zsqua**2
 
 1522           zsqua = sqrt(pum1(jl,jk)**2+pum1(jl,jk)**2)
 
 1523           IF (zsqua<zslow) 
THEN 
 1524             pvom(jl, jk) = zsqua/zslow*pvom(jl, jk)
 
 1525             pvol(jl, jk) = zsqua/zslow*pvol(jl, jk)
 
 1538       IF (ktest(jl)==1) 
THEN 
 1539         DO jk = 
klev, iknub(jl), -1
 
 1540           zbet = gklift*2.*romega*sin(zpi/180.*plat(jl))*ztmst* &
 
 1541             (pgeom1(jl,iknub(jl)-1)-pgeom1(jl,jk))/ &
 
 1542             (pgeom1(jl,iknub(jl)-1)-pgeom1(jl,
klev))
 
 1543           zdudt(jl) = -pum1(jl, jk)/ztmst/(1+zbet**2)
 
 1544           zdvdt(jl) = -pvm1(jl, jk)/ztmst/(1+zbet**2)
 
 1545           pvom(jl, jk) = zbet**2*zdudt(jl) - zbet*zdvdt(jl)
 
 1546           pvol(jl, jk) = zbet*zdudt(jl) + zbet**2*zdvdt(jl)
 
 1557 SUBROUTINE sugwd(nlon, nlev, paprs, pplay)
 
 1610   INTEGER nlon, nlev, jk
 
 1611   REAL paprs(nlon, nlev+1)
 
 1612   REAL pplay(nlon, nlev)
 
 1613   REAL zpr, zstra, zsigt, zpm1r
 
 1615   REAL :: paprs_glo(
klon_glo, nlev+1)
 
 1621   print *, 
' DANS SUGWD NLEV=', nlev
 
 1631   CALL gather(pplay, pplay_glo)
 
 1632   CALL bcast(pplay_glo)
 
 1633   CALL gather(paprs, paprs_glo)
 
 1634   CALL bcast(paprs_glo)
 
 1639     IF (zpm1r>=zsigt) 
THEN 
 1643     IF (zpm1r>=zstra) 
THEN 
 1651   nktopg = nlev - nktopg + 1
 
 1652   nstra = nlev - nstra
 
 1653   print *, 
' DANS SUGWD nktopg=', nktopg
 
 1654   print *, 
' DANS SUGWD nstra=', nstra
 
 1681 END SUBROUTINE sugwd 
subroutine orolift(nlon, nlev, ktest, ptsphy, paphm1, pgeom1, ptm1, pum1, pvm1, plat, pmea, pvaror, ppic, pulow, pvlow, pvom, pvol, pte)
 
!IM Implemente en modes sequentiel et parallele CALL rlon_glo CALL bcast(rlon_glo)!$OMP MASTER if(is_mpi_root) then!zstophy
 
subroutine drag_noro(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)
 
subroutine sugwd(nlon, nlev, paprs, pplay)
 
subroutine orosetup(nlon, ktest, kkcrit, kkcrith, kcrit, kkenvh, kknu, kknu2, paphm1, papm1, pum1, pvm1, ptm1, pgeom1, pstd, prho, pri, pstab, ptau, pvph, ppsi, pzdep, pulow, pvlow, ptheta, pgamma, pmea, ppic, pval, pnu, pd1, pd2, pdmod)
 
subroutine lift_noro(nlon, nlev, dtime, paprs, pplay, plat, pmea, pstd, ppic, ktest, t, u, v, pulow, pvlow, pustr, pvstr, d_t, d_u, d_v)
 
!$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 gwstress(nlon, nlev, ktest, kcrit, kkenvh, kknu, prho, pstab, pvph, pstd, psig, pmea, ppic, ptau, pgeom1, pdmod)
 
!IM Implemente en modes sequentiel et parallele CALL gather(rlat, rlat_glo) CALL bcast(rlat_glo) CALL gather(rlon
 
subroutine gwprofil(nlon, nlev, kgwd, kdx, ktest, kkcrith, kcrit, paphm1, prho, pstab, pvph, pri, ptau, pdmod, psig, pvar)
 
!$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 abort_physic(modname, message, ierr)
 
subroutine orodrag(nlon, nlev, kgwd, kdx, ktest, ptsphy, paphm1, papm1,pgeom1, ptm1, pum1, pvm1, pmea, pstd, psig, pgamma, ptheta, ppic, pval