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