4 SUBROUTINE hines_gwd(NLON,NLEV,DTIME,paphm1x, papm1x,
7 o d_t_hin, d_u_hin, d_v_hin)
56 REAL paphm1(klon,
klev+1), papm1(klon,
klev)
62 REAL rlat(klon),coslat(klon)
65 2 utendgw(klon,
klev), vtendgw(klon,
klev),
67 4 uhs(klon,
klev), vhs(klon,
klev), zpr(klon)
81 REAL m_alpha(klon,
klev,nazmth), v_alpha(klon,
klev,nazmth),
82 1 sigma_alpha(klon,
klev,nazmth),
83 1 sigsqh_alpha(klon,
klev,nazmth),
84 2 drag_u(klon,
klev), drag_v(klon,
klev), flux_u(klon,
klev),
86 4 bvfreq(klon,
klev), density(klon,
klev), sigma_t(klon,
klev),
87 5 visc_mol(klon,
klev), alt(klon,
klev),
88 6 sigsqmcw(klon,
klev,nazmth),
90 7 ak_alpha(klon,nazmth), k_alpha(klon,nazmth),
91 8 mmin_alpha(klon,nazmth), i_alpha(klon,nazmth),
92 9 rmswind(klon), bvfbot(klon), densbot(klon)
93 REAL smoothr1(klon,
klev), smoothr2(klon,
klev)
94 REAL sigalpmc(klon,
klev,nazmth)
106 INTEGER nmessg, iprint, ilrms
109 INTEGER naz,icutoff,nsmax,iheatcal
110 REAL slope,f1,f2,f3,f5,f6,kstar(klon),alt_cutoff,smco
117 real paphm1x(nlon,nlev+1), papm1x(nlon,nlev)
118 real ux(nlon,nlev), vx(nlon,nlev), tx(nlon,nlev)
123 real d_t_hin(nlon,nlev),d_u_hin(nlon,nlev),d_v_hin(nlon,nlev)
124 real zustrhi(nlon),zvstrhi(nlon)
131 LOGICAL lozpr, lorms(klon)
135 REAL rhoh2o,zpcons,rgocp,zlat,dttdsf,ratio,hscal
136 INTEGER i,
j,
l,jl,jk,le,lref,lrefp,levbot
140 REAL v0,vmin,dmpscal,taufac,hmin,apibt,cpart,fcrit
158 zpcons = (1000.*86400.)/rhoh2o
163 paphm1(jl,1) = paphm1x(jl,
klev+1)
166 paphm1(jl,jk+1) = paphm1x(jl,le)
167 papm1(jl,jk) = papm1x(jl,le)
168 ptm1(jl,jk) = tx(jl,le)
169 pum1(jl,jk) = ux(jl,le)
170 pvm1(jl,jk) = vx(jl,le)
186 DO 2102 jl=kidia,kfdia
187 shj(jl,jk)=papm1(jl,jk)/paphm1(jl,
klev+1)
188 sgj(jl,jk)=papm1(jl,jk)/paphm1(jl,
klev+1)
189 dsgj(jl,jk)=(paphm1(jl,jk+1)-paphm1(jl,jk))/paphm1(jl,
klev+1)
190 shxkj(jl,jk)=(papm1(jl,jk)/paphm1(jl,
klev+1))**rgocp
191 th(jl,jk)= ptm1(jl,jk)
196 DO 211 jl=kidia,kfdia
197 pressg(jl)=paphm1(jl,
klev+1)
201 DO 301 jl=kidia,kfdia
203 zpr(jl)=zpcons*prflux(jl)
204 zlat=(
rlat(jl)/180.)*rpi
242 DATA vmin / 5.0 /, v0 / 1.e-10 /,
243 1 taufac/ 5.e-6 /, hmin / 40000. /,
244 3 dmpscal / 6.5e+6 /, apibt / 1.5708 /,
245 4 cpart / 0.7 /, fcrit / 1. /
257 DATA pcrit / 5. /, pcons / 4.75 /
262 1 iprint / 2 /, nmessg / 6 /
280 1 icutoff,alt_cutoff,smco,nsmax,iheatcal,
281 2 k_alpha,ierror,nmessg,klon,nazmth,coslat)
282 IF (ierror.NE.0) go to 999
314 dttdsf=(th(
i,
l)/shxkj(
i,
l)-th(
i,
l-1)/
315 1 shxkj(
i,
l-1))/(shj(
i,
l)-shj(
i,
l-1))
316 dttdsf=min(dttdsf, -5./sgj(
i,
l))
317 bvfreq(
i,
l)=sqrt(-dttdsf*sgj(
i,
l)*(sgj(
i,
l)**rgocp)/rd)
323 bvfreq(
i,
l) = bvfreq(
i,
l+1)
326 ratio=5.*log(sgj(
i,
l)/sgj(
i,
l-1))
327 bvfreq(
i,
l) = (bvfreq(
i,
l-1) + ratio*bvfreq(
i,
l))
342 visc_mol(
i,
l) = 1.5e-5
354 hscal = rd * ptm1(
i,
klev) / rg
355 density(
i,
klev) = sgj(
i,
klev) * pressg(
i) / (rg*hscal)
363 hscal = rd * ptm1(
i,
l) / rg
364 alt(
i,
l) = alt(
i,
l+1) + hscal * dsgj(
i,
l) / sgj(
i,
l)
365 density(
i,
l) = sgj(
i,
l) * pressg(
i) / (rg*hscal)
386 uhs(
i,
l) = pum1(
i,
l) - pum1(
i,levbot)
387 vhs(
i,
l) = pvm1(
i,
l) - pvm1(
i,levbot)
398 IF (zpr(
i) .GT. pcrit)
THEN
400 > +( (zpr(
i)-pcrit)/zpr(
i) )*pcons
406 IF (rmswind(
i) .GT. 0.0)
THEN
415 IF ( ilrms.GT.0 )
THEN
417 CALL
hines_extro0(drag_u,drag_v,heat,diffco,flux_u,flux_v,
418 1 uhs,vhs,bvfreq,density,visc_mol,alt,
419 2 rmswind,k_alpha,m_alpha,v_alpha,
420 3 sigma_alpha,sigsqh_alpha,ak_alpha,
421 4 mmin_alpha,i_alpha,sigma_t,densbot,bvfbot,
422 5 1,iheatcal,icutoff,iprint,nsmax,
423 6 smco,alt_cutoff,kstar,slope,
424 7 f1,f2,f3,f5,f6,naz,sigsqmcw,sigmatm,
425 8 kidia,klon,1,levbot,klon,
klev,nazmth,
426 9 lorms,smoothr1,smoothr2,
434 utendgw(
i,
l) = utendgw(
i,
l) + drag_u(
i,
l)
435 vtendgw(
i,
l) = vtendgw(
i,
l) + drag_v(
i,
l)
449 zustrhi(jl)=flux_u(jl,1)
450 zvstrhi(jl)=flux_v(jl,1)
453 d_u_hin(jl,jk) = utendgw(jl,le) *
dtime
454 d_v_hin(jl,jk) = vtendgw(jl,le) *
dtime
468 WRITE (nmessg,6010) ierror
469 6000
FORMAT (/
' EXECUTION ABORTED IN GWDOREXV')
470 6010
FORMAT (
' ERROR FLAG =',i4)
480 1 vel_u,vel_v,bvfreq,density,visc_mol,alt,
481 2 rmswind,k_alpha,m_alpha,v_alpha,
482 3 sigma_alpha,sigsqh_alpha,ak_alpha,
483 4 mmin_alpha,i_alpha,sigma_t,densb,bvfb,
484 5 iorder,iheatcal,icutoff,iprint,nsmax,
485 6 smco,alt_cutoff,kstar,slope,
486 7 f1,f2,f3,f5,f6,naz,sigsqmcw,sigmatm,
487 8 il1,il2,lev1,lev2,nlons,nlevs,nazmth,
488 9 lorms,smoothr1,smoothr2,
573 INTEGER naz, nlons, nlevs, nazmth, il1, il2, lev1, lev2
574 INTEGER icutoff, nsmax, iorder, iheatcal, iprint
575 REAL kstar(nlons), f1, f2, f3, f5, f6, slope
576 REAL alt_cutoff, smco
577 REAL drag_u(nlons,nlevs), drag_v(nlons,nlevs)
578 REAL heat(nlons,nlevs), diffco(nlons,nlevs)
579 REAL flux_u(nlons,nlevs), flux_v(nlons,nlevs)
580 REAL vel_u(nlons,nlevs), vel_v(nlons,nlevs)
581 REAL bvfreq(nlons,nlevs), density(nlons,nlevs)
582 REAL visc_mol(nlons,nlevs), alt(nlons,nlevs)
583 REAL rmswind(nlons), bvfb(nlons), densb(nlons)
584 REAL sigma_t(nlons,nlevs), sigsqmcw(nlons,nlevs,nazmth)
585 REAL sigma_alpha(nlons,nlevs,nazmth), sigmatm(nlons,nlevs)
586 REAL sigsqh_alpha(nlons,nlevs,nazmth)
587 REAL m_alpha(nlons,nlevs,nazmth), v_alpha(nlons,nlevs,nazmth)
588 REAL ak_alpha(nlons,nazmth), k_alpha(nlons,nazmth)
589 REAL mmin_alpha(nlons,nazmth) , i_alpha(nlons,nazmth)
590 REAL smoothr1(nlons,nlevs), smoothr2(nlons,nlevs)
591 REAL sigalpmc(nlons,nlevs,nazmth)
592 REAL f2mod(nlons,nlevs)
598 INTEGER levbot, levtop,
i,
n,
l, lev1p, lev2m
599 INTEGER ilprt1, ilprt2
610 IF (iorder.NE.1)
THEN
612 1
format(2
x,
' error: IORDER NOT ONE! ')
618 bvfb(
i) = bvfreq(
i,levbot)
619 densb(
i) = density(
i,levbot)
642 ^ il1, il2, lev1, lev2, nlons, nlevs, nazmth )
646 CALL
hines_wavnum( m_alpha, sigma_alpha, sigsqh_alpha, sigma_t,
647 ^ ak_alpha, v_alpha, visc_mol, density, densb,
648 ^ bvfreq, bvfb, rmswind, i_alpha, mmin_alpha,
649 ^ kstar, slope, f1, f2, f3, naz, levbot,
650 ^ levtop,il1,il2,nlons,nlevs,nazmth, sigsqmcw,
651 ^ sigmatm,lorms,sigalpmc,f2mod)
660 smoothr1(
i,
l) = m_alpha(
i,
l,
n)
663 ^ smoothr2, smco, nsmax,
664 ^ il1, il2, lev1, lev2, nlons, nlevs )
667 m_alpha(
i,
l,
n) = smoothr1(
i,
l)
671 ^ smoothr2, smco, nsmax,
672 ^ il1, il2, lev1, lev2, nlons, nlevs )
678 CALL
hines_flux( flux_u, flux_v, drag_u, drag_v,
679 ^ alt, density, densb, m_alpha,
680 ^ ak_alpha, k_alpha, slope, naz,
681 ^ il1, il2, lev1, lev2, nlons, nlevs, nazmth,
686 IF (icutoff.EQ.1)
THEN
688 ^ bvfb, alt, alt_cutoff, iorder,
689 ^ il1, il2, lev1, lev2, nlons, nlevs )
691 ^ bvfb, alt, alt_cutoff, iorder,
692 ^ il1, il2, lev1, lev2, nlons, nlevs )
697 IF (iprint.EQ.1)
THEN
700 CALL
hines_print( flux_u, flux_v, drag_u, drag_v, alt,
701 ^ sigma_t, sigma_alpha, v_alpha, m_alpha,
702 ^ 1, 1, 6, ilprt1, ilprt2, lev1, lev2,
703 ^ naz, nlons, nlevs, nazmth)
708 IF (iheatcal.NE.1)
RETURN
715 DO 100
l = lev1p,lev2m
717 v_alpha(
i,
l,
n) = ( m_alpha(
i,
l+1,
n) - m_alpha(
i,
l-1,
n) )
718 ^ / ( alt(
i,
l+1) - alt(
i,
l-1) )
722 v_alpha(
i,lev1,
n) = ( m_alpha(
i,lev1p,
n) - m_alpha(
i,lev1,
n) )
723 ^ / ( alt(
i,lev1p) - alt(
i,lev1) )
726 v_alpha(
i,lev2,
n) = ( m_alpha(
i,lev2,
n) - m_alpha(
i,lev2m,
n) )
727 ^ / ( alt(
i,lev2) - alt(
i,lev2m) )
734 ^ m_alpha, v_alpha, ak_alpha, k_alpha,
735 ^ bvfreq, density, densb, sigma_t, visc_mol,
736 ^ kstar, slope, f2, f3, f5, f6, naz,
737 ^ il1, il2, lev1, lev2, nlons, nlevs, nazmth)
746 1 ak_alpha,v_alpha,visc_mol,density,densb,
747 2 bvfreq,bvfb,rms_wind,i_alpha,mmin_alpha,
748 3 kstar,slope,f1,f2,f3,naz,levbot,levtop,
749 4 il1,il2,nlons,nlevs,nazmth,sigsqmcw,
750 5 sigmatm,lorms,sigalpmc,f2mod)
801 INTEGER naz, levbot, levtop, il1, il2, nlons, nlevs, nazmth
802 REAL slope, kstar(nlons), f1, f2, f3
803 REAL m_alpha(nlons,nlevs,nazmth)
804 REAL sigma_alpha(nlons,nlevs,nazmth)
805 REAL sigalpmc(nlons,nlevs,nazmth)
806 REAL sigsqh_alpha(nlons,nlevs,nazmth)
807 REAL sigsqmcw(nlons,nlevs,nazmth)
808 REAL sigma_t(nlons,nlevs)
809 REAL sigmatm(nlons,nlevs)
810 REAL ak_alpha(nlons,nazmth)
811 REAL v_alpha(nlons,nlevs,nazmth)
812 REAL visc_mol(nlons,nlevs)
813 REAL f2mod(nlons,nlevs)
814 REAL density(nlons,nlevs), densb(nlons)
815 REAL bvfreq(nlons,nlevs), bvfb(nlons), rms_wind(nlons)
816 REAL i_alpha(nlons,nazmth), mmin_alpha(nlons,nazmth)
822 INTEGER i,
l,
n, lstart, lend, lincr, lbelow
823 REAL m_sub_m_turb, m_sub_m_mol, m_trial
824 REAL visc, visc_min, azfac, sp1
828 REAL n_over_m(nlons), sigfac(nlons)
829 DATA visc_min / 1.e-10 /
838 IF (levbot.GT.levtop)
THEN
844 1
format(2
x,
' error: IORDER NOT ONE! ')
849 azfac = 1. /
REAL(naz)
852 sigsqh_alpha(
i,levbot,
n) = azfac * rms_wind(
i)**2
859 ^ sigsqh_alpha, naz, levbot,
860 ^ il1, il2, nlons, nlevs, nazmth)
863 ^ sigsqmcw, naz, levbot,
864 ^ il1, il2, nlons, nlevs, nazmth)
873 m_alpha(
i,levbot,
n) = bvfb(
i) /
874 ^ ( f1 * sigma_alpha(
i,levbot,
n)
875 ^ + f2 * sigma_t(
i,levbot) )
876 ak_alpha(
i,
n) = sigsqh_alpha(
i,levbot,
n)
877 ^ / ( m_alpha(
i,levbot,
n)**sp1 / sp1 )
878 mmin_alpha(
i,
n) = m_alpha(
i,levbot,
n)
886 DO 150
l = lstart,lend,lincr
902 f2mfac=sigmatm(
i,lbelow)**2
903 f2mod(
i,lbelow) =1.+ 2.*f2mfac
904 ^ / ( f2mfac+sigma_t(
i,lbelow)**2 )
906 visc = amax1( visc_mol(
i,
l), visc_min )
907 m_sub_m_turb = bvfreq(
i,
l)
908 ^ / ( f2 *f2mod(
i,lbelow)*sigma_t(
i,lbelow))
909 m_sub_m_mol = (bvfreq(
i,
l)*kstar(
i)/visc)**0.33333333/f3
910 IF (m_sub_m_turb .LT. m_sub_m_mol)
THEN
911 n_over_m(
i) = f2 *f2mod(
i,lbelow)*sigma_t(
i,lbelow)
913 n_over_m(
i) = bvfreq(
i,
l) / m_sub_m_mol
928 m_trial = bvfb(
i) / ( f1 * ( sigma_alpha(
i,lbelow,
n)+
929 ^ sigalpmc(
i,lbelow,
n)) + n_over_m(
i) + v_alpha(
i,
l,
n) )
930 IF (m_trial.LE.0. .OR. m_trial.GT.mmin_alpha(
i,
n))
THEN
931 m_trial = mmin_alpha(
i,
n)
933 m_alpha(
i,
l,
n) = m_trial
937 IF (m_alpha(
i,
l,
n) .LT. mmin_alpha(
i,
n))
THEN
938 mmin_alpha(
i,
n) = m_alpha(
i,
l,
n)
948 ^ v_alpha, m_alpha, bvfb, slope, naz,
949 ^
l, il1, il2, nlons, nlevs, nazmth,
956 sigfac(
i) = densb(
i) / density(
i,
l)
957 ^ * bvfreq(
i,
l) / bvfb(
i)
961 sigsqh_alpha(
i,
l,
n) = sigfac(
i) * ak_alpha(
i,
n)
966 ^ sigsqh_alpha, naz,
l,
967 ^ il1, il2, nlons, nlevs, nazmth )
971 ^ il1, il2, nlons, nlevs, nazmth )
982 1 naz,il1,il2,lev1,lev2,nlons,nlevs,nazmth)
1017 INTEGER naz, il1, il2, lev1, lev2
1018 INTEGER nlons, nlevs, nazmth
1019 REAL v_alpha(nlons,nlevs,nazmth)
1020 REAL vel_u(nlons,nlevs), vel_v(nlons,nlevs)
1025 REAL u,
v, cos45, umin
1027 DATA cos45 / 0.7071068 /
1040 IF (abs(
u) .LT. umin)
u = umin
1041 IF (abs(
v) .LT. umin)
v = umin
1044 v_alpha(
i,
l,3) = -
u
1045 v_alpha(
i,
l,4) = -
v
1057 IF (abs(
u) .LT. umin)
u = umin
1058 IF (abs(
v) .LT. umin)
v = umin
1060 v_alpha(
i,
l,2) = cos45 * (
v +
u )
1062 v_alpha(
i,
l,4) = cos45 * (
v -
u )
1063 v_alpha(
i,
l,5) = -
u
1064 v_alpha(
i,
l,6) = - v_alpha(
i,
l,2)
1065 v_alpha(
i,
l,7) = -
v
1066 v_alpha(
i,
l,8) = - v_alpha(
i,
l,4)
1076 1 densb,m_alpha,ak_alpha,k_alpha,slope,
1077 2 naz,il1,il2,lev1,lev2,nlons,nlevs,nazmth,
1121 INTEGER naz, il1, il2, lev1, lev2
1122 INTEGER nlons, nlevs, nazmth
1124 REAL flux_u(nlons,nlevs), flux_v(nlons,nlevs)
1125 REAL drag_u(nlons,nlevs), drag_v(nlons,nlevs)
1126 REAL alt(nlons,nlevs), density(nlons,nlevs), densb(nlons)
1127 REAL m_alpha(nlons,nlevs,nazmth)
1128 REAL ak_alpha(nlons,nazmth), k_alpha(nlons,nazmth)
1130 LOGICAL lorms(nlons)
1134 INTEGER i,
l, lev1p, lev2m
1135 REAL cos45, prod2, prod4, prod6, prod8, dendz, dendz2
1136 DATA cos45 / 0.7071068 /
1145 IF (slope.EQ.1.)
THEN
1152 flux_u(
i,
l) = ak_alpha(
i,1)*k_alpha(
i,1)*m_alpha(
i,
l,1)
1153 ^ - ak_alpha(
i,3)*k_alpha(
i,3)*m_alpha(
i,
l,3)
1154 flux_v(
i,
l) = ak_alpha(
i,2)*k_alpha(
i,2)*m_alpha(
i,
l,2)
1155 ^ - ak_alpha(
i,4)*k_alpha(
i,4)*m_alpha(
i,
l,4)
1165 prod2 = ak_alpha(
i,2)*k_alpha(
i,2)*m_alpha(
i,
l,2)
1166 prod4 = ak_alpha(
i,4)*k_alpha(
i,4)*m_alpha(
i,
l,4)
1167 prod6 = ak_alpha(
i,6)*k_alpha(
i,6)*m_alpha(
i,
l,6)
1168 prod8 = ak_alpha(
i,8)*k_alpha(
i,8)*m_alpha(
i,
l,8)
1170 ^ ak_alpha(
i,1)*k_alpha(
i,1)*m_alpha(
i,
l,1)
1171 ^ - ak_alpha(
i,5)*k_alpha(
i,5)*m_alpha(
i,
l,5)
1172 ^ + cos45 * ( prod2 - prod4 - prod6 + prod8 )
1174 ^ ak_alpha(
i,3)*k_alpha(
i,3)*m_alpha(
i,
l,3)
1175 ^ - ak_alpha(
i,7)*k_alpha(
i,7)*m_alpha(
i,
l,7)
1176 ^ + cos45 * ( prod2 + prod4 - prod6 - prod8 )
1185 IF (slope.NE.1.)
THEN
1193 ^ ak_alpha(
i,1)*k_alpha(
i,1)*m_alpha(
i,
l,1)**slope
1194 ^ - ak_alpha(
i,3)*k_alpha(
i,3)*m_alpha(
i,
l,3)**slope
1196 ^ ak_alpha(
i,2)*k_alpha(
i,2)*m_alpha(
i,
l,2)**slope
1197 ^ - ak_alpha(
i,4)*k_alpha(
i,4)*m_alpha(
i,
l,4)**slope
1207 prod2 = ak_alpha(
i,2)*k_alpha(
i,2)*m_alpha(
i,
l,2)**slope
1208 prod4 = ak_alpha(
i,4)*k_alpha(
i,4)*m_alpha(
i,
l,4)**slope
1209 prod6 = ak_alpha(
i,6)*k_alpha(
i,6)*m_alpha(
i,
l,6)**slope
1210 prod8 = ak_alpha(
i,8)*k_alpha(
i,8)*m_alpha(
i,
l,8)**slope
1212 ^ ak_alpha(
i,1)*k_alpha(
i,1)*m_alpha(
i,
l,1)**slope
1213 ^ - ak_alpha(
i,5)*k_alpha(
i,5)*m_alpha(
i,
l,5)**slope
1214 ^ + cos45 * ( prod2 - prod4 - prod6 + prod8 )
1216 ^ ak_alpha(
i,3)*k_alpha(
i,3)*m_alpha(
i,
l,3)**slope
1217 ^ - ak_alpha(
i,7)*k_alpha(
i,7)*m_alpha(
i,
l,7)**slope
1218 ^ + cos45 * ( prod2 + prod4 - prod6 - prod8 )
1227 DO 100
l = lev1,lev2
1229 flux_u(
i,
l) = flux_u(
i,
l) * densb(
i) / slope
1230 flux_v(
i,
l) = flux_v(
i,
l) * densb(
i) / slope
1236 DO 120
l = lev1p,lev2m
1240 dendz2 = density(
i,
l) * ( alt(
i,
l-1) - alt(
i,
l) )
1242 drag_u(
i,
l) = - ( flux_u(
i,
l-1) - flux_u(
i,
l) ) / dendz2
1244 drag_v(
i,
l) = - ( flux_v(
i,
l-1) - flux_v(
i,
l) ) / dendz2
1254 dendz = density(
i,lev1) * ( alt(
i,lev1) - alt(
i,lev1p) )
1255 drag_u(
i,lev1) = flux_u(
i,lev1) / dendz
1256 drag_v(
i,lev1) = flux_v(
i,lev1) / dendz
1261 dendz = density(
i,lev2) * ( alt(
i,lev2m) - alt(
i,lev2) )
1262 drag_u(
i,lev2) = - ( flux_u(
i,lev2m) - flux_u(
i,lev2) ) / dendz
1263 drag_v(
i,lev2) = - ( flux_v(
i,lev2m) - flux_v(
i,lev2) ) / dendz
1266 IF (nlevs .GT. lev2)
THEN
1269 dendz = density(
i,lev2p) * ( alt(
i,lev2) - alt(
i,lev2p) )
1270 drag_u(
i,lev2p) = - flux_u(
i,lev2) / dendz
1271 drag_v(
i,lev2p) = - flux_v(
i,lev2) / dendz
1281 1 ak_alpha,k_alpha,bvfreq,density,densb,
1282 2 sigma_t,visc_mol,kstar,slope,f2,f3,f5,f6,
1283 3 naz,il1,il2,lev1,lev2,nlons,nlevs,nazmth)
1320 INTEGER naz, il1, il2, lev1, lev2, nlons, nlevs, nazmth
1321 REAL kstar(nlons), slope, f2, f3, f5, f6
1322 REAL heat(nlons,nlevs), diffco(nlons,nlevs)
1323 REAL m_alpha(nlons,nlevs,nazmth), dmdz_alpha(nlons,nlevs,nazmth)
1324 REAL ak_alpha(nlons,nazmth), k_alpha(nlons,nazmth)
1325 REAL bvfreq(nlons,nlevs), density(nlons,nlevs), densb(nlons)
1326 REAL sigma_t(nlons,nlevs), visc_mol(nlons,nlevs)
1331 REAL m_sub_m_turb, m_sub_m_mol, m_sub_m, heatng
1332 REAL visc, visc_min, cpgas, sm1
1336 DATA cpgas / 1004. /
1340 DATA visc_min / 1.e-10 /
1353 IF (slope.EQ.1.)
THEN
1357 heat(
i,
l) = heat(
i,
l) + ak_alpha(
i,
n) * k_alpha(
i,
n)
1358 ^ * dmdz_alpha(
i,
l,
n)
1366 IF (slope.NE.1.)
THEN
1371 heat(
i,
l) = heat(
i,
l) + ak_alpha(
i,
n) * k_alpha(
i,
n)
1372 ^ * m_alpha(
i,
l,
n)**sm1 * dmdz_alpha(
i,
l,
n)
1380 DO 100
l = lev1,lev2
1387 visc = amax1( visc_mol(
i,
l), visc_min )
1388 m_sub_m_turb = bvfreq(
i,
l) / ( f2 * sigma_t(
i,
l) )
1389 m_sub_m_mol = (bvfreq(
i,
l)*kstar(
i)/visc)**0.33333333/f3
1390 m_sub_m = amin1( m_sub_m_turb, m_sub_m_mol )
1392 heatng = - heat(
i,
l) * f5 * bvfreq(
i,
l) / m_sub_m
1393 ^ * densb(
i) / density(
i,
l)
1394 diffco(
i,
l) = f6 * heatng**0.33333333 / m_sub_m**1.33333333
1395 heat(
i,
l) = heatng / cpgas
1405 1 naz,lev,il1,il2,nlons,nlevs,nazmth)
1433 INTEGER lev, naz, il1, il2
1434 INTEGER nlons, nlevs, nazmth
1435 REAL sigma_t(nlons,nlevs)
1436 REAL sigma_alpha(nlons,nlevs,nazmth)
1437 REAL sigsqh_alpha(nlons,nlevs,nazmth)
1442 REAL sum_even, sum_odd
1449 sigma_alpha(
i,lev,1) = sqrt( sigsqh_alpha(
i,lev,1)
1450 ^ + sigsqh_alpha(
i,lev,3) )
1451 sigma_alpha(
i,lev,2) = sqrt( sigsqh_alpha(
i,lev,2)
1452 ^ + sigsqh_alpha(
i,lev,4) )
1453 sigma_alpha(
i,lev,3) = sigma_alpha(
i,lev,1)
1454 sigma_alpha(
i,lev,4) = sigma_alpha(
i,lev,2)
1462 sum_odd = ( sigsqh_alpha(
i,lev,1)
1463 ^ + sigsqh_alpha(
i,lev,3)
1464 ^ + sigsqh_alpha(
i,lev,5)
1465 ^ + sigsqh_alpha(
i,lev,7) ) / 2.
1466 sum_even = ( sigsqh_alpha(
i,lev,2)
1467 ^ + sigsqh_alpha(
i,lev,4)
1468 ^ + sigsqh_alpha(
i,lev,6)
1469 ^ + sigsqh_alpha(
i,lev,8) ) / 2.
1470 sigma_alpha(
i,lev,1) = sqrt( sigsqh_alpha(
i,lev,1)
1471 ^ + sigsqh_alpha(
i,lev,5) + sum_even )
1472 sigma_alpha(
i,lev,2) = sqrt( sigsqh_alpha(
i,lev,2)
1473 ^ + sigsqh_alpha(
i,lev,6) + sum_odd )
1474 sigma_alpha(
i,lev,3) = sqrt( sigsqh_alpha(
i,lev,3)
1475 ^ + sigsqh_alpha(
i,lev,7) + sum_even )
1476 sigma_alpha(
i,lev,4) = sqrt( sigsqh_alpha(
i,lev,4)
1477 ^ + sigsqh_alpha(
i,lev,8) + sum_odd )
1478 sigma_alpha(
i,lev,5) = sigma_alpha(
i,lev,1)
1479 sigma_alpha(
i,lev,6) = sigma_alpha(
i,lev,2)
1480 sigma_alpha(
i,lev,7) = sigma_alpha(
i,lev,3)
1481 sigma_alpha(
i,lev,8) = sigma_alpha(
i,lev,4)
1492 sigma_t(
i,lev) = sigma_t(
i,lev) + sigsqh_alpha(
i,lev,
n)
1496 sigma_t(
i,lev) = sqrt( sigma_t(
i,lev) )
1504 1 naz,lev,il1,il2,nlons,nlevs,nazmth,
1545 INTEGER lev, naz, il1, il2, nlons, nlevs, nazmth
1546 REAL i_alpha(nlons,nazmth)
1547 REAL v_alpha(nlons,nlevs,nazmth)
1548 REAL m_alpha(nlons,nlevs,nazmth)
1549 REAL bvfb(nlons), slope
1551 LOGICAL lorms(nlons)
1556 REAL q_alpha, qm, sqrtqm, q_min, qm_min
1558 DATA q_min / 1.0 /, qm_min / 0.01 /
1563 IF (slope .EQ. 1.)
THEN
1569 q_alpha = v_alpha(
i,lev,
n) / bvfb(
i)
1570 qm = q_alpha * m_alpha(
i,lev,
n)
1576 IF (abs(q_alpha).LT.q_min .OR. abs(qm).LT.qm_min)
THEN
1577 IF (q_alpha .EQ. 0.)
THEN
1578 i_alpha(
i,
n) = m_alpha(
i,lev,
n)**2 / 2.
1580 i_alpha(
i,
n) = ( qm**2/2. + qm**3/3. + qm**4/4.
1581 ^ + qm**5/5. ) / q_alpha**2
1584 i_alpha(
i,
n) = - ( alog(1.-qm) + qm ) / q_alpha**2
1595 IF (slope .EQ. 2.)
THEN
1601 q_alpha = v_alpha(
i,lev,
n) / bvfb(
i)
1602 qm = q_alpha * m_alpha(
i,lev,
n)
1608 IF (abs(q_alpha).LT.q_min .OR. abs(qm).LT.qm_min)
THEN
1609 IF (q_alpha .EQ. 0.)
THEN
1610 i_alpha(
i,
n) = m_alpha(
i,lev,
n)**3 / 3.
1612 i_alpha(
i,
n) = ( qm**3/3. + qm**4/4. + qm**5/5.
1613 ^ + qm**6/6. ) / q_alpha**3
1616 i_alpha(
i,
n) = - ( alog(1.-qm) + qm + qm**2/2.)
1628 IF (slope .EQ. 1.5)
THEN
1634 q_alpha = v_alpha(
i,lev,
n) / bvfb(
i)
1635 qm = q_alpha * m_alpha(
i,lev,
n)
1641 IF (abs(q_alpha).LT.q_min .OR. abs(qm).LT.qm_min)
THEN
1642 IF (q_alpha .EQ. 0.)
THEN
1643 i_alpha(
i,
n) = m_alpha(
i,lev,
n)**2.5 / 2.5
1645 i_alpha(
i,
n) = ( qm/2.5 + qm**2/3.5
1646 ^ + qm**3/4.5 + qm**4/5.5 )
1647 ^ * m_alpha(
i,lev,
n)**1.5 / q_alpha
1652 IF (q_alpha .GE. 0.)
THEN
1653 i_alpha(
i,
n) = ( alog( (1.+sqrtqm)/(1.-sqrtqm) )
1654 ^ -2.*sqrtqm*(1.+qm/3.) ) / q_alpha**2.5
1656 i_alpha(
i,
n) = 2. * ( atan(sqrtqm) + sqrtqm*(qm/3.-1.) )
1657 ^ / abs(q_alpha)**2.5
1696 1 icutoff,alt_cutoff,smco,nsmax,iheatcal,
1697 2 k_alpha,ierror,nmessg,nlons,nazmth,coslat)
1749 INTEGER naz, nlons, nazmth, iheatcal, icutoff
1750 INTEGER nmessg, nsmax, ierror
1751 REAL kstar(nlons), slope, f1, f2, f3, f5, f6, alt_cutoff, smco
1752 REAL k_alpha(nlons,nazmth),coslat(nlons)
1772 kstar(
i) = ksmin/( coslat(
i)+(ksmin/ksmax) )
1807 IF (naz .GT. nazmth) ierror = 10
1808 IF (naz.NE.4 .AND. naz.NE.8) ierror = 20
1809 IF (slope.NE.1. .AND. slope.NE.1.5 .AND. slope.NE.2.) ierror = 30
1810 IF (smco .LT. 1.) ierror = 40
1816 k_alpha(
i,
n) = kstar(
i)
1825 1 sigma_alpha,v_alpha,m_alpha,
1826 2 iu_print,iv_print,nmessg,
1827 3 ilprt1,ilprt2,levprt1,levprt2,
1828 4 naz,nlons,nlevs,nazmth)
1846 INTEGER naz, ilprt1, ilprt2, levprt1, levprt2
1847 INTEGER nlons, nlevs, nazmth
1848 INTEGER iu_print, iv_print, nmessg
1849 REAL flux_u(nlons,nlevs), flux_v(nlons,nlevs)
1850 REAL drag_u(nlons,nlevs), drag_v(nlons,nlevs)
1851 REAL alt(nlons,nlevs), sigma_t(nlons,nlevs)
1852 REAL sigma_alpha(nlons,nlevs,nazmth)
1853 REAL v_alpha(nlons,nlevs,nazmth), m_alpha(nlons,nlevs,nazmth)
1857 INTEGER n_east, n_west, n_north, n_south
1868 ELSE IF (naz.EQ.8)
THEN
1876 DO 100
i = ilprt1,ilprt2
1880 IF (iu_print.EQ.1)
THEN
1882 WRITE (nmessg,6001)
i
1884 6001
FORMAT (
'Hines GW (east-west) at longitude I =',i3)
1885 6005
FORMAT (15
x,
' U ',2
x,
'sig_E',2
x,
'sig_T',3
x,
'm_E',
1886 & 4
x,
'm_W',4
x,
'fluxU',5
x,
'gwdU')
1887 DO 10
l = levprt1,levprt2
1888 WRITE (nmessg,6701) alt(
i,
l)/1.e3, v_alpha(
i,
l,n_east),
1889 & sigma_alpha(
i,
l,n_east), sigma_t(
i,
l),
1890 & m_alpha(
i,
l,n_east)*1.e3,
1891 & m_alpha(
i,
l,n_west)*1.e3,
1892 & flux_u(
i,
l)*1.e5, drag_u(
i,
l)*24.*3600.
1894 6701
FORMAT (
' z=',f7.2,1
x,3f7.1,2f7.3,f9.4,f9.3)
1899 IF (iv_print.EQ.1)
THEN
1901 WRITE(nmessg,6002)
i
1902 6002
FORMAT (
'Hines GW (north-south) at longitude I =',i3)
1904 6006
FORMAT (15
x,
' V ',2
x,
'sig_N',2
x,
'sig_T',3
x,
'm_N',
1905 & 4
x,
'm_S',4
x,
'fluxV',5
x,
'gwdV')
1906 DO 20
l = levprt1,levprt2
1907 WRITE (nmessg,6701) alt(
i,
l)/1.e3, v_alpha(
i,
l,n_north),
1908 & sigma_alpha(
i,
l,n_north), sigma_t(
i,
l),
1909 & m_alpha(
i,
l,n_north)*1.e3,
1910 & m_alpha(
i,
l,n_south)*1.e3,
1911 & flux_v(
i,
l)*1.e5, drag_v(
i,
l)*24.*3600.
1922 1 il1,il2,lev1,lev2,nlons,nlevs)
1952 INTEGER iorder, il1, il2, lev1, lev2, nlons, nlevs
1954 REAL data(nlons,nlevs), data_zmax(nlons), alt(nlons,nlevs)
1958 INTEGER levbot, levtop, lincr,
i,
l
1960 DATA hscale / 5.e3 /
1968 IF (iorder.NE.1)
THEN
1977 DO 10
l = levtop,levbot,lincr
1978 IF (alt(
i,
l) .GE. alt_exp)
THEN
1979 data_zmax(
i) =
DATA(
i,
l)
1988 IF (alt(
i,
l) .GE. alt_exp)
THEN
1989 DATA(
i,
l) = data_zmax(
i) * exp( (alt_exp-alt(
i,
l))/hscale )
1999 1 il1,il2,lev1,lev2,nlons,nlevs)
2032 INTEGER nsmooth, il1, il2, lev1, lev2, nlons, nlevs
2034 REAL data(nlons,nlevs), work(nlons,nlevs)
2038 INTEGER i,
l, ns, lev1p, lev2m
2044 sum_wts = coeff + 2.
2051 DO 50 ns = 1,nsmooth
2057 work(
i,
l) =
DATA(
i,
l)
2063 DO 40
l = lev1p,lev2m
2065 DATA(
i,
l) = ( work(
i,
l+1) + coeff*work(
i,
l) + work(
i,
l-1) )