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