4 SUBROUTINE hines_gwd(nlon, nlev, dtime, paphm1x, papm1x, rlat, tx, ux, vx, &
5 zustrhi, zvstrhi, d_t_hin, d_u_hin, d_v_hin)
81 mmin_alpha(
klon, nazmth), i_alpha(
klon, nazmth), rmswind(
klon), &
96 INTEGER nmessg, iprint, ilrms
99 INTEGER naz, icutoff, nsmax, iheatcal
100 REAL slope, f1, f2, f3, f5, f6, kstar(
klon), alt_cutoff, smco
107 REAL paphm1x(nlon, nlev+1), papm1x(nlon, nlev)
108 REAL ux(nlon, nlev), vx(nlon, nlev), tx(nlon, nlev)
113 REAL d_t_hin(nlon, nlev), d_u_hin(nlon, nlev), d_v_hin(nlon, nlev)
114 REAL zustrhi(nlon), zvstrhi(nlon)
121 LOGICAL lozpr, lorms(
klon)
125 REAL rhoh2o, zpcons, rgocp, zlat, dttdsf, ratio, hscal
126 INTEGER i, j, l, jl, jk, le, lref, lrefp, levbot
130 REAL v0, vmin, dmpscal, taufac, hmin, apibt, cpart, fcrit
132 INTEGER iplev, ierror
148 zpcons = (1000.*86400.)/rhoh2o
153 paphm1(jl, 1) = paphm1x(jl,
klev+1)
156 paphm1(jl, jk+1) = paphm1x(jl, le)
157 papm1(jl, jk) = papm1x(jl, le)
158 ptm1(jl, jk) = tx(jl, le)
159 pum1(jl, jk) = ux(jl, le)
160 pvm1(jl, jk) = vx(jl, le)
175 shj(jl, jk) = papm1(jl, jk)/paphm1(jl,
klev+1)
176 sgj(jl, jk) = papm1(jl, jk)/paphm1(jl,
klev+1)
177 dsgj(jl, jk) = (paphm1(jl,jk+1)-paphm1(jl,jk))/paphm1(jl,
klev+1)
178 shxkj(jl, jk) = (papm1(jl,jk)/paphm1(jl,
klev+1))**rgocp
179 th(jl, jk) = ptm1(jl, jk)
185 pressg(jl) = paphm1(jl,
klev+1)
191 zpr(jl) = zpcons*prflux(jl)
192 zlat = (rlat(jl)/180.)*rpi
193 coslat(jl) = cos(zlat)
224 DATA vmin/5.0/, v0/1.e-10/, taufac/5.e-6/, hmin/40000./, dmpscal/6.5e+6/, &
225 apibt/1.5708/, cpart/0.7/, fcrit/1./
237 DATA pcrit/5./, pcons/4.75/
241 DATA rmscon/1.00/iprint/2/, nmessg/6/
258 CALL hines_setup(naz, slope, f1, f2, f3, f5, f6, kstar, icutoff, &
259 alt_cutoff, smco, nsmax, iheatcal, k_alpha, ierror, nmessg,
klon, nazmth, &
261 IF (ierror/=0)
GO TO 999
271 sigsqmcw(i, l, j) = 0.
296 dttdsf = (th(i,l)/shxkj(i,l)-th(i,l-1)/shxkj(i,l-1))/ &
297 (shj(i,l)-shj(i,l-1))
298 dttdsf = min(dttdsf, -5./sgj(i,l))
299 bvfreq(i, l) = sqrt(-dttdsf*sgj(i,l)*(sgj(i,l)**rgocp)/rd)*
rg/ptm1(i, l &
306 bvfreq(i, l) = bvfreq(i, l+1)
309 ratio = 5.*log(sgj(i,l)/sgj(i,l-1))
310 bvfreq(i, l) = (bvfreq(i,l-1)+ratio*bvfreq(i,l))/(1.+ratio)
322 visc_mol(i, l) = 1.5e-5
335 hscal = rd*ptm1(i,
klev)/
rg
336 density(i,
klev) = sgj(i,
klev)*pressg(i)/(
rg*hscal)
342 DO l =
klev - 1, 1, -1
344 hscal = rd*ptm1(i, l)/
rg
345 alt(i, l) = alt(i, l+1) + hscal*dsgj(i, l)/sgj(i, l)
346 density(i, l) = sgj(i, l)*pressg(i)/(
rg*hscal)
368 uhs(i, l) = pum1(i, l) - pum1(i, levbot)
369 vhs(i, l) = pvm1(i, l) - pvm1(i, levbot)
381 IF (zpr(i)>pcrit)
THEN
382 rmswind(i) = rmscon + ((zpr(i)-pcrit)/zpr(i))*pcons
388 IF (rmswind(i)>0.0)
THEN
399 CALL hines_extro0(drag_u, drag_v, heat, diffco, flux_u, flux_v, uhs, vhs, &
400 bvfreq, density, visc_mol, alt, rmswind, k_alpha, m_alpha, v_alpha, &
401 sigma_alpha, sigsqh_alpha, ak_alpha, mmin_alpha, i_alpha, sigma_t, &
402 densbot, bvfbot, 1, iheatcal, icutoff, iprint, nsmax, smco, alt_cutoff, &
403 kstar, slope, f1, f2, f3, f5, f6, naz, sigsqmcw, sigmatm,
kidia,
klon, &
404 1, levbot,
klon,
klev, nazmth, lorms, smoothr1, smoothr2, sigalpmc, &
412 utendgw(i, l) = utendgw(i, l) + drag_u(i, l)
413 vtendgw(i, l) = vtendgw(i, l) + drag_v(i, l)
425 zustrhi(jl) = flux_u(jl, 1)
426 zvstrhi(jl) = flux_v(jl, 1)
429 d_u_hin(jl, jk) = utendgw(jl, le)*dtime
430 d_v_hin(jl, jk) = vtendgw(jl, le)*dtime
444 WRITE (nmessg, 6010) ierror
445 6000
FORMAT (/
' EXECUTION ABORTED IN GWDOREXV')
446 6010
FORMAT (
' ERROR FLAG =', i4)
455 SUBROUTINE hines_extro0(drag_u, drag_v, heat, diffco, flux_u, flux_v, vel_u, &
456 vel_v, bvfreq, density, visc_mol, alt, rmswind, k_alpha, m_alpha, &
457 v_alpha, sigma_alpha, sigsqh_alpha, ak_alpha, mmin_alpha, i_alpha, &
458 sigma_t, densb, bvfb, iorder, iheatcal, icutoff, iprint, nsmax, smco, &
459 alt_cutoff, kstar, slope, f1, f2, f3, f5, f6, naz, sigsqmcw, sigmatm, &
460 il1, il2, lev1, lev2, nlons, nlevs, nazmth, lorms, smoothr1, smoothr2, &
545 INTEGER naz, nlons, nlevs, nazmth, il1, il2, lev1, lev2
546 INTEGER icutoff, nsmax, iorder, iheatcal, iprint
547 REAL kstar(nlons), f1, f2, f3, f5, f6, slope
548 REAL alt_cutoff, smco
549 REAL drag_u(nlons, nlevs), drag_v(nlons, nlevs)
550 REAL heat(nlons, nlevs), diffco(nlons, nlevs)
551 REAL flux_u(nlons, nlevs), flux_v(nlons, nlevs)
552 REAL vel_u(nlons, nlevs), vel_v(nlons, nlevs)
553 REAL bvfreq(nlons, nlevs), density(nlons, nlevs)
554 REAL visc_mol(nlons, nlevs), alt(nlons, nlevs)
555 REAL rmswind(nlons), bvfb(nlons), densb(nlons)
556 REAL sigma_t(nlons, nlevs), sigsqmcw(nlons, nlevs, nazmth)
557 REAL sigma_alpha(nlons, nlevs, nazmth), sigmatm(nlons, nlevs)
558 REAL sigsqh_alpha(nlons, nlevs, nazmth)
559 REAL m_alpha(nlons, nlevs, nazmth), v_alpha(nlons, nlevs, nazmth)
560 REAL ak_alpha(nlons, nazmth), k_alpha(nlons, nazmth)
561 REAL mmin_alpha(nlons, nazmth), i_alpha(nlons, nazmth)
562 REAL smoothr1(nlons, nlevs), smoothr2(nlons, nlevs)
563 REAL sigalpmc(nlons, nlevs, nazmth)
564 REAL f2mod(nlons, nlevs)
570 INTEGER levbot, levtop, i, n, l, lev1p, lev2m
571 INTEGER ilprt1, ilprt2
584 1
FORMAT (2
x,
' error: IORDER NOT ONE! ')
590 bvfb(i) = bvfreq(i, levbot)
591 densb(i) = density(i, levbot)
599 m_alpha(i, l, n) = 0.0
616 CALL hines_wind(v_alpha, vel_u, vel_v, naz, il1, il2, lev1, lev2, nlons, &
621 CALL hines_wavnum(m_alpha, sigma_alpha, sigsqh_alpha, sigma_t, ak_alpha, &
622 v_alpha, visc_mol, density, densb, bvfreq, bvfb, rmswind, i_alpha, &
623 mmin_alpha, kstar, slope, f1, f2, f3, naz, levbot, levtop, il1, il2, &
624 nlons, nlevs, nazmth, sigsqmcw, sigmatm, lorms, sigalpmc, f2mod)
632 smoothr1(i, l) = m_alpha(i, l, n)
635 CALL vert_smooth(smoothr1, smoothr2, smco, nsmax, il1, il2, lev1, lev2, &
639 m_alpha(i, l, n) = smoothr1(i, l)
643 CALL vert_smooth(sigma_t, smoothr2, smco, nsmax, il1, il2, lev1, lev2, &
650 CALL hines_flux(flux_u, flux_v, drag_u, drag_v, alt, density, densb, &
651 m_alpha, ak_alpha, k_alpha, slope, naz, il1, il2, lev1, lev2, nlons, &
652 nlevs, nazmth, lorms)
657 CALL hines_exp(drag_u, bvfb, alt, alt_cutoff, iorder, il1, il2, lev1, &
659 CALL hines_exp(drag_v, bvfb, alt, alt_cutoff, iorder, il1, il2, lev1, &
668 CALL hines_print(flux_u, flux_v, drag_u, drag_v, alt, sigma_t, &
669 sigma_alpha, v_alpha, m_alpha, 1, 1, 6, ilprt1, ilprt2, lev1, lev2, &
670 naz, nlons, nlevs, nazmth)
675 IF (iheatcal/=1)
RETURN
684 v_alpha(i, l, n) = (m_alpha(i,l+1,n)-m_alpha(i,l-1,n))/ &
685 (alt(i,l+1)-alt(i,l-1))
689 v_alpha(i, lev1, n) = (m_alpha(i,lev1p,n)-m_alpha(i,lev1,n))/ &
690 (alt(i,lev1p)-alt(i,lev1))
693 v_alpha(i, lev2, n) = (m_alpha(i,lev2,n)-m_alpha(i,lev2m,n))/ &
694 (alt(i,lev2)-alt(i,lev2m))
700 CALL hines_heat(heat, diffco, m_alpha, v_alpha, ak_alpha, k_alpha, bvfreq, &
701 density, densb, sigma_t, visc_mol, kstar, slope, f2, f3, f5, f6, naz, &
702 il1, il2, lev1, lev2, nlons, nlevs, nazmth)
710 SUBROUTINE hines_wavnum(m_alpha, sigma_alpha, sigsqh_alpha, sigma_t, &
711 ak_alpha, v_alpha, visc_mol, density, densb, bvfreq, bvfb, rms_wind, &
712 i_alpha, mmin_alpha, kstar, slope, f1, f2, f3, naz, levbot, levtop, il1, &
713 il2, nlons, nlevs, nazmth, sigsqmcw, sigmatm, lorms, sigalpmc, f2mod)
764 INTEGER naz, levbot, levtop, il1, il2, nlons, nlevs, nazmth
765 REAL slope, kstar(nlons), f1, f2, f3, f2mfac
766 REAL m_alpha(nlons, nlevs, nazmth)
767 REAL sigma_alpha(nlons, nlevs, nazmth)
768 REAL sigalpmc(nlons, nlevs, nazmth)
769 REAL sigsqh_alpha(nlons, nlevs, nazmth)
770 REAL sigsqmcw(nlons, nlevs, nazmth)
771 REAL sigma_t(nlons, nlevs)
772 REAL sigmatm(nlons, nlevs)
773 REAL ak_alpha(nlons, nazmth)
774 REAL v_alpha(nlons, nlevs, nazmth)
775 REAL visc_mol(nlons, nlevs)
776 REAL f2mod(nlons, nlevs)
777 REAL density(nlons, nlevs), densb(nlons)
778 REAL bvfreq(nlons, nlevs), bvfb(nlons), rms_wind(nlons)
779 REAL i_alpha(nlons, nazmth), mmin_alpha(nlons, nazmth)
785 INTEGER i, l, n, lstart, lend, lincr, lbelow
786 REAL m_sub_m_turb, m_sub_m_mol, m_trial
787 REAL visc, visc_min, azfac, sp1
791 REAL n_over_m(nlons), sigfac(nlons)
792 DATA visc_min/1.e-10/
801 IF (levbot>levtop)
THEN
807 1
FORMAT (2
x,
' error: IORDER NOT ONE! ')
815 sigsqh_alpha(i, levbot, n) = azfac*rms_wind(i)**2
821 CALL hines_sigma(sigma_t, sigma_alpha, sigsqh_alpha, naz, levbot, il1, il2, &
822 nlons, nlevs, nazmth)
824 CALL hines_sigma(sigmatm, sigalpmc, sigsqmcw, naz, levbot, il1, il2, nlons, &
834 m_alpha(i, levbot, n) = bvfb(i)/(f1*sigma_alpha(i,levbot,n)+f2* &
836 ak_alpha(i, n) = sigsqh_alpha(i, levbot, n)/ &
837 (m_alpha(i,levbot,n)**sp1/sp1)
838 mmin_alpha(i, n) = m_alpha(i, levbot, n)
846 DO l = lstart, lend, lincr
862 f2mfac = sigmatm(i, lbelow)**2
863 f2mod(i, lbelow) = 1. + 2.*f2mfac/(f2mfac+sigma_t(i,lbelow)**2)
865 visc = amax1(visc_mol(i,l), visc_min)
866 m_sub_m_turb = bvfreq(i, l)/(f2*f2mod(i,lbelow)*sigma_t(i,lbelow))
867 m_sub_m_mol = (bvfreq(i,l)*kstar(i)/visc)**0.33333333/f3
868 IF (m_sub_m_turb<m_sub_m_mol)
THEN
869 n_over_m(i) = f2*f2mod(i, lbelow)*sigma_t(i, lbelow)
871 n_over_m(i) = bvfreq(i, l)/m_sub_m_mol
888 m_trial = bvfb(i)/(f1*(sigma_alpha(i,lbelow,n)+sigalpmc(i,lbelow, &
889 n))+n_over_m(i)+v_alpha(i,l,n))
890 IF (m_trial<=0. .OR. m_trial>mmin_alpha(i,n))
THEN
891 m_trial = mmin_alpha(i, n)
893 m_alpha(i, l, n) = m_trial
897 IF (m_alpha(i,l,n)<mmin_alpha(i,n))
THEN
898 mmin_alpha(i, n) = m_alpha(i, l, n)
907 CALL hines_intgrl(i_alpha, v_alpha, m_alpha, bvfb, slope, naz, l, il1, &
908 il2, nlons, nlevs, nazmth, lorms)
914 sigfac(i) = densb(i)/density(i, l)*bvfreq(i, l)/bvfb(i)
918 sigsqh_alpha(i, l, n) = sigfac(i)*ak_alpha(i, n)*i_alpha(i, n)
921 CALL hines_sigma(sigma_t, sigma_alpha, sigsqh_alpha, naz, l, il1, il2, &
922 nlons, nlevs, nazmth)
924 CALL hines_sigma(sigmatm, sigalpmc, sigsqmcw, naz, l, il1, il2, nlons, &
935 SUBROUTINE hines_wind(v_alpha, vel_u, vel_v, naz, il1, il2, lev1, lev2, &
936 nlons, nlevs, nazmth)
972 INTEGER naz, il1, il2, lev1, lev2
973 INTEGER nlons, nlevs, nazmth
974 REAL v_alpha(nlons, nlevs, nazmth)
975 REAL vel_u(nlons, nlevs), vel_v(nlons, nlevs)
980 REAL u, v, cos45, umin
982 DATA cos45/0.7071068/
995 IF (abs(u)<umin) u = umin
996 IF (abs(v)<umin) v = umin
999 v_alpha(i, l, 3) = -u
1000 v_alpha(i, l, 4) = -v
1012 IF (abs(u)<umin) u = umin
1013 IF (abs(v)<umin) v = umin
1014 v_alpha(i, l, 1) = u
1015 v_alpha(i, l, 2) = cos45*(v+u)
1016 v_alpha(i, l, 3) = v
1017 v_alpha(i, l, 4) = cos45*(v-u)
1018 v_alpha(i, l, 5) = -u
1019 v_alpha(i, l, 6) = -v_alpha(i, l, 2)
1020 v_alpha(i, l, 7) = -v
1021 v_alpha(i, l, 8) = -v_alpha(i, l, 4)
1030 SUBROUTINE hines_flux(flux_u, flux_v, drag_u, drag_v, alt, density, densb, &
1031 m_alpha, ak_alpha, k_alpha, slope, naz, il1, il2, lev1, lev2, nlons, &
1032 nlevs, nazmth, lorms)
1075 INTEGER naz, il1, il2, lev1, lev2
1076 INTEGER nlons, nlevs, nazmth
1078 REAL flux_u(nlons, nlevs), flux_v(nlons, nlevs)
1079 REAL drag_u(nlons, nlevs), drag_v(nlons, nlevs)
1080 REAL alt(nlons, nlevs), density(nlons, nlevs), densb(nlons)
1081 REAL m_alpha(nlons, nlevs, nazmth)
1082 REAL ak_alpha(nlons, nazmth), k_alpha(nlons, nazmth)
1084 LOGICAL lorms(nlons)
1088 INTEGER i, l, lev1p, lev2m, lev2p
1089 REAL cos45, prod2, prod4, prod6, prod8, dendz, dendz2
1090 DATA cos45/0.7071068/
1106 flux_u(i, l) = ak_alpha(i, 1)*k_alpha(i, 1)*m_alpha(i, l, 1) - &
1107 ak_alpha(i, 3)*k_alpha(i, 3)*m_alpha(i, l, 3)
1108 flux_v(i, l) = ak_alpha(i, 2)*k_alpha(i, 2)*m_alpha(i, l, 2) - &
1109 ak_alpha(i, 4)*k_alpha(i, 4)*m_alpha(i, l, 4)
1119 prod2 = ak_alpha(i, 2)*k_alpha(i, 2)*m_alpha(i, l, 2)
1120 prod4 = ak_alpha(i, 4)*k_alpha(i, 4)*m_alpha(i, l, 4)
1121 prod6 = ak_alpha(i, 6)*k_alpha(i, 6)*m_alpha(i, l, 6)
1122 prod8 = ak_alpha(i, 8)*k_alpha(i, 8)*m_alpha(i, l, 8)
1123 flux_u(i, l) = ak_alpha(i, 1)*k_alpha(i, 1)*m_alpha(i, l, 1) - &
1124 ak_alpha(i, 5)*k_alpha(i, 5)*m_alpha(i, l, 5) + &
1125 cos45*(prod2-prod4-prod6+prod8)
1126 flux_v(i, l) = ak_alpha(i, 3)*k_alpha(i, 3)*m_alpha(i, l, 3) - &
1127 ak_alpha(i, 7)*k_alpha(i, 7)*m_alpha(i, l, 7) + &
1128 cos45*(prod2+prod4-prod6-prod8)
1144 flux_u(i, l) = ak_alpha(i, 1)*k_alpha(i, 1)* &
1145 m_alpha(i, l, 1)**slope - ak_alpha(i, 3)*k_alpha(i, 3)*m_alpha(i, &
1147 flux_v(i, l) = ak_alpha(i, 2)*k_alpha(i, 2)* &
1148 m_alpha(i, l, 2)**slope - ak_alpha(i, 4)*k_alpha(i, 4)*m_alpha(i, &
1159 prod2 = ak_alpha(i, 2)*k_alpha(i, 2)*m_alpha(i, l, 2)**slope
1160 prod4 = ak_alpha(i, 4)*k_alpha(i, 4)*m_alpha(i, l, 4)**slope
1161 prod6 = ak_alpha(i, 6)*k_alpha(i, 6)*m_alpha(i, l, 6)**slope
1162 prod8 = ak_alpha(i, 8)*k_alpha(i, 8)*m_alpha(i, l, 8)**slope
1163 flux_u(i, l) = ak_alpha(i, 1)*k_alpha(i, 1)* &
1164 m_alpha(i, l, 1)**slope - ak_alpha(i, 5)*k_alpha(i, 5)*m_alpha(i, &
1165 l, 5)**slope + cos45*(prod2-prod4-prod6+prod8)
1166 flux_v(i, l) = ak_alpha(i, 3)*k_alpha(i, 3)* &
1167 m_alpha(i, l, 3)**slope - ak_alpha(i, 7)*k_alpha(i, 7)*m_alpha(i, &
1168 l, 7)**slope + cos45*(prod2+prod4-prod6-prod8)
1179 flux_u(i, l) = flux_u(i, l)*densb(i)/slope
1180 flux_v(i, l) = flux_v(i, l)*densb(i)/slope
1190 dendz2 = density(i, l)*(alt(i,l-1)-alt(i,l))
1192 drag_u(i, l) = -(flux_u(i,l-1)-flux_u(i,l))/dendz2
1194 drag_v(i, l) = -(flux_v(i,l-1)-flux_v(i,l))/dendz2
1204 dendz = density(i, lev1)*(alt(i,lev1)-alt(i,lev1p))
1205 drag_u(i, lev1) = flux_u(i, lev1)/dendz
1206 drag_v(i, lev1) = flux_v(i, lev1)/dendz
1211 dendz = density(i, lev2)*(alt(i,lev2m)-alt(i,lev2))
1212 drag_u(i, lev2) = -(flux_u(i,lev2m)-flux_u(i,lev2))/dendz
1213 drag_v(i, lev2) = -(flux_v(i,lev2m)-flux_v(i,lev2))/dendz
1216 IF (nlevs>lev2)
THEN
1219 dendz = density(i, lev2p)*(alt(i,lev2)-alt(i,lev2p))
1220 drag_u(i, lev2p) = -flux_u(i, lev2)/dendz
1221 drag_v(i, lev2p) = -flux_v(i, lev2)/dendz
1230 SUBROUTINE hines_heat(heat, diffco, m_alpha, dmdz_alpha, ak_alpha, k_alpha, &
1231 bvfreq, density, densb, sigma_t, visc_mol, kstar, slope, f2, f3, f5, f6, &
1232 naz, il1, il2, lev1, lev2, nlons, nlevs, nazmth)
1269 INTEGER naz, il1, il2, lev1, lev2, nlons, nlevs, nazmth
1270 REAL kstar(nlons), slope, f2, f3, f5, f6
1271 REAL heat(nlons, nlevs), diffco(nlons, nlevs)
1272 REAL m_alpha(nlons, nlevs, nazmth), dmdz_alpha(nlons, nlevs, nazmth)
1273 REAL ak_alpha(nlons, nazmth), k_alpha(nlons, nazmth)
1274 REAL bvfreq(nlons, nlevs), density(nlons, nlevs), densb(nlons)
1275 REAL sigma_t(nlons, nlevs), visc_mol(nlons, nlevs)
1280 REAL m_sub_m_turb, m_sub_m_mol, m_sub_m, heatng
1281 REAL visc, visc_min, cpgas, sm1
1289 DATA visc_min/1.e-10/
1306 heat(i, l) = heat(i, l) + ak_alpha(i, n)*k_alpha(i, n)*dmdz_alpha(i &
1320 heat(i, l) = heat(i, l) + ak_alpha(i, n)*k_alpha(i, n)*m_alpha(i, l &
1321 , n)**sm1*dmdz_alpha(i, l, n)
1336 visc = amax1(visc_mol(i,l), visc_min)
1337 m_sub_m_turb = bvfreq(i, l)/(f2*sigma_t(i,l))
1338 m_sub_m_mol = (bvfreq(i,l)*kstar(i)/visc)**0.33333333/f3
1339 m_sub_m = amin1(m_sub_m_turb, m_sub_m_mol)
1341 heatng = -heat(i, l)*f5*bvfreq(i, l)/m_sub_m*densb(i)/density(i, l)
1342 diffco(i, l) = f6*heatng**0.33333333/m_sub_m**1.33333333
1343 heat(i, l) = heatng/cpgas
1352 SUBROUTINE hines_sigma(sigma_t, sigma_alpha, sigsqh_alpha, naz, lev, il1, &
1353 il2, nlons, nlevs, nazmth)
1381 INTEGER lev, naz, il1, il2
1382 INTEGER nlons, nlevs, nazmth
1383 REAL sigma_t(nlons, nlevs)
1384 REAL sigma_alpha(nlons, nlevs, nazmth)
1385 REAL sigsqh_alpha(nlons, nlevs, nazmth)
1390 REAL sum_even, sum_odd
1397 sigma_alpha(i, lev, 1) = sqrt(sigsqh_alpha(i,lev,1)+sigsqh_alpha(i,lev, &
1399 sigma_alpha(i, lev, 2) = sqrt(sigsqh_alpha(i,lev,2)+sigsqh_alpha(i,lev, &
1401 sigma_alpha(i, lev, 3) = sigma_alpha(i, lev, 1)
1402 sigma_alpha(i, lev, 4) = sigma_alpha(i, lev, 2)
1410 sum_odd = (sigsqh_alpha(i,lev,1)+sigsqh_alpha(i,lev,3)+ &
1411 sigsqh_alpha(i,lev,5)+sigsqh_alpha(i,lev,7))/2.
1412 sum_even = (sigsqh_alpha(i,lev,2)+sigsqh_alpha(i,lev,4)+ &
1413 sigsqh_alpha(i,lev,6)+sigsqh_alpha(i,lev,8))/2.
1414 sigma_alpha(i, lev, 1) = sqrt(sigsqh_alpha(i,lev,1)+sigsqh_alpha(i,lev, &
1416 sigma_alpha(i, lev, 2) = sqrt(sigsqh_alpha(i,lev,2)+sigsqh_alpha(i,lev, &
1418 sigma_alpha(i, lev, 3) = sqrt(sigsqh_alpha(i,lev,3)+sigsqh_alpha(i,lev, &
1420 sigma_alpha(i, lev, 4) = sqrt(sigsqh_alpha(i,lev,4)+sigsqh_alpha(i,lev, &
1422 sigma_alpha(i, lev, 5) = sigma_alpha(i, lev, 1)
1423 sigma_alpha(i, lev, 6) = sigma_alpha(i, lev, 2)
1424 sigma_alpha(i, lev, 7) = sigma_alpha(i, lev, 3)
1425 sigma_alpha(i, lev, 8) = sigma_alpha(i, lev, 4)
1432 sigma_t(i, lev) = 0.
1436 sigma_t(i, lev) = sigma_t(i, lev) + sigsqh_alpha(i, lev, n)
1440 sigma_t(i, lev) = sqrt(sigma_t(i,lev))
1447 SUBROUTINE hines_intgrl(i_alpha, v_alpha, m_alpha, bvfb, slope, naz, lev, &
1448 il1, il2, nlons, nlevs, nazmth, lorms)
1488 INTEGER lev, naz, il1, il2, nlons, nlevs, nazmth
1489 REAL i_alpha(nlons, nazmth)
1490 REAL v_alpha(nlons, nlevs, nazmth)
1491 REAL m_alpha(nlons, nlevs, nazmth)
1492 REAL bvfb(nlons), slope
1494 LOGICAL lorms(nlons)
1499 REAL q_alpha, qm, sqrtqm, q_min, qm_min
1501 DATA q_min/1.0/, qm_min/0.01/
1512 q_alpha = v_alpha(i, lev, n)/bvfb(i)
1513 qm = q_alpha*m_alpha(i, lev, n)
1520 IF (abs(q_alpha)<q_min .OR. abs(qm)<qm_min)
THEN
1521 IF (q_alpha==0.)
THEN
1522 i_alpha(i, n) = m_alpha(i, lev, n)**2/2.
1524 i_alpha(i, n) = (qm**2/2.+qm**3/3.+qm**4/4.+qm**5/5.)/ &
1528 i_alpha(i, n) = -(alog(1.-qm)+qm)/q_alpha**2
1545 q_alpha = v_alpha(i, lev, n)/bvfb(i)
1546 qm = q_alpha*m_alpha(i, lev, n)
1553 IF (abs(q_alpha)<q_min .OR. abs(qm)<qm_min)
THEN
1554 IF (q_alpha==0.)
THEN
1555 i_alpha(i, n) = m_alpha(i, lev, n)**3/3.
1557 i_alpha(i, n) = (qm**3/3.+qm**4/4.+qm**5/5.+qm**6/6.)/ &
1561 i_alpha(i, n) = -(alog(1.-qm)+qm+qm**2/2.)/q_alpha**3
1572 IF (slope==1.5)
THEN
1578 q_alpha = v_alpha(i, lev, n)/bvfb(i)
1579 qm = q_alpha*m_alpha(i, lev, n)
1586 IF (abs(q_alpha)<q_min .OR. abs(qm)<qm_min)
THEN
1587 IF (q_alpha==0.)
THEN
1588 i_alpha(i, n) = m_alpha(i, lev, n)**2.5/2.5
1590 i_alpha(i, n) = (qm/2.5+qm**2/3.5+qm**3/4.5+qm**4/5.5)* &
1591 m_alpha(i, lev, n)**1.5/q_alpha
1596 IF (q_alpha>=0.)
THEN
1597 i_alpha(i, n) = (alog((1.+sqrtqm)/(1.-sqrtqm))-2.*sqrtqm*(1.+qm &
1600 i_alpha(i, n) = 2.*(atan(sqrtqm)+sqrtqm*(qm/3.-1.))/ &
1639 SUBROUTINE hines_setup(naz, slope, f1, f2, f3, f5, f6, kstar, icutoff, &
1640 alt_cutoff, smco, nsmax, iheatcal, k_alpha, ierror, nmessg, nlons, &
1693 INTEGER naz, nlons, nazmth, iheatcal, icutoff
1694 INTEGER nmessg, nsmax, ierror
1695 REAL kstar(nlons), slope, f1, f2, f3, f5, f6, alt_cutoff, smco
1696 REAL k_alpha(nlons, nazmth), coslat(nlons)
1716 kstar(i) = ksmin/(coslat(i)+(ksmin/ksmax))
1751 IF (naz>nazmth) ierror = 10
1752 IF (naz/=4 .AND. naz/=8) ierror = 20
1753 IF (slope/=1. .AND. slope/=1.5 .AND. slope/=2.) ierror = 30
1754 IF (smco<1.) ierror = 40
1760 k_alpha(i, n) = kstar(i)
1768 SUBROUTINE hines_print(flux_u, flux_v, drag_u, drag_v, alt, sigma_t, &
1769 sigma_alpha, v_alpha, m_alpha, iu_print, iv_print, nmessg, ilprt1, &
1770 ilprt2, levprt1, levprt2, naz, nlons, nlevs, nazmth)
1788 INTEGER naz, ilprt1, ilprt2, levprt1, levprt2
1789 INTEGER nlons, nlevs, nazmth
1790 INTEGER iu_print, iv_print, nmessg
1791 REAL flux_u(nlons, nlevs), flux_v(nlons, nlevs)
1792 REAL drag_u(nlons, nlevs), drag_v(nlons, nlevs)
1793 REAL alt(nlons, nlevs), sigma_t(nlons, nlevs)
1794 REAL sigma_alpha(nlons, nlevs, nazmth)
1795 REAL v_alpha(nlons, nlevs, nazmth), m_alpha(nlons, nlevs, nazmth)
1799 INTEGER n_east, n_west, n_north, n_south
1810 ELSE IF (naz==8)
THEN
1818 DO i = ilprt1, ilprt2
1822 IF (iu_print==1)
THEN
1824 WRITE (nmessg, 6001) i
1825 WRITE (nmessg, 6005)
1826 6001
FORMAT (
'Hines GW (east-west) at longitude I =', i3)
1827 6005
FORMAT (15
x,
' U ', 2
x,
'sig_E', 2
x,
'sig_T', 3
x,
'm_E', 4
x,
'm_W', 4
x, &
1828 'fluxU', 5
x,
'gwdU')
1829 DO l = levprt1, levprt2
1830 WRITE (nmessg, 6701) alt(i, l)/1.e3, v_alpha(i, l, n_east), &
1831 sigma_alpha(i, l, n_east), sigma_t(i, l), &
1832 m_alpha(i, l, n_east)*1.e3, m_alpha(i, l, n_west)*1.e3, &
1833 flux_u(i, l)*1.e5, drag_u(i, l)*24.*3600.
1835 6701
FORMAT (
' z=', f7.2, 1
x, 3f7.1, 2f7.3, f9.4, f9.3)
1840 IF (iv_print==1)
THEN
1842 WRITE (nmessg, 6002) i
1843 6002
FORMAT (
'Hines GW (north-south) at longitude I =', i3)
1844 WRITE (nmessg, 6006)
1845 6006
FORMAT (15
x,
' V ', 2
x,
'sig_N', 2
x,
'sig_T', 3
x,
'm_N', 4
x,
'm_S', 4
x, &
1846 'fluxV', 5
x,
'gwdV')
1847 DO l = levprt1, levprt2
1848 WRITE (nmessg, 6701) alt(i, l)/1.e3, v_alpha(i, l, n_north), &
1849 sigma_alpha(i, l, n_north), sigma_t(i, l), &
1850 m_alpha(i, l, n_north)*1.e3, m_alpha(i, l, n_south)*1.e3, &
1851 flux_v(i, l)*1.e5, drag_v(i, l)*24.*3600.
1861 SUBROUTINE hines_exp(data, data_zmax, alt, alt_exp, iorder, il1, il2, lev1, &
1892 INTEGER iorder, il1, il2, lev1, lev2, nlons, nlevs
1894 REAL data(nlons, nlevs), data_zmax(nlons), alt(nlons, nlevs)
1898 INTEGER levbot, levtop, lincr, i, l
1917 DO l = levtop, levbot, lincr
1918 IF (alt(i,l)>=alt_exp)
THEN
1919 data_zmax(i) =
data(i, l)
1928 IF (alt(i,l)>=alt_exp)
THEN
1929 data(i, l) = data_zmax(i)*exp((alt_exp-alt(i,l))/hscale)
1938 SUBROUTINE vert_smooth(data, work, coeff, nsmooth, il1, il2, lev1, lev2, &
1972 INTEGER nsmooth, il1, il2, lev1, lev2, nlons, nlevs
1974 REAL data(nlons, nlevs), work(nlons, nlevs)
1978 INTEGER i, l, ns, lev1p, lev2m
1984 sum_wts = coeff + 2.
1997 work(i, l) =
data(i, l)
2005 data(i, l) = (work(i,l+1)+coeff*work(i,l)+work(i,l-1))/sum_wts
subroutine hines_gwd(nlon, nlev, dtime, paphm1x, papm1x, rlat, tx, ux, vx, zustrhi, zvstrhi, d_t_hin, d_u_hin, d_v_hin)
subroutine hines_sigma(sigma_t, sigma_alpha, sigsqh_alpha, naz, lev, il1, il2, nlons, nlevs, nazmth)
subroutine hines_wavnum(m_alpha, sigma_alpha, sigsqh_alpha, sigma_t, ak_alpha, v_alpha, visc_mol, density, densb, bvfreq, bvfb, rms_wind, i_alpha, mmin_alpha, kstar, slope, f1, f2, f3, naz, levbot, levtop, il1, il2, nlons, nlevs, nazmth, sigsqmcw, sigmatm, lorms, sigalpmc, f2mod)
subroutine hines_exp(data, data_zmax, alt, alt_exp, iorder, il1, il2, lev1, lev2, nlons, nlevs)
subroutine hines_heat(heat, diffco, m_alpha, dmdz_alpha, ak_alpha, k_alpha, bvfreq, density, densb, sigma_t, visc_mol, kstar, slope, f2, f3, f5, f6, naz, il1, il2, lev1, lev2, nlons, nlevs, nazmth)
subroutine hines_flux(flux_u, flux_v, drag_u, drag_v, alt, density, densb, m_alpha, ak_alpha, k_alpha, slope, naz, il1, il2, lev1, lev2, nlons, nlevs, nazmth, lorms)
!$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 hines_print(flux_u, flux_v, drag_u, drag_v, alt, sigma_t, sigma_alpha, v_alpha, m_alpha, iu_print, iv_print, nmessg, ilprt1, ilprt2, levprt1, levprt2, naz, nlons, nlevs, nazmth)
subroutine hines_extro0(drag_u, drag_v, heat, diffco, flux_u, flux_v, vel_u, vel_v, bvfreq, density, visc_mol, alt, rmswind, k_alpha, m_alpha, v_alpha, sigma_alpha, sigsqh_alpha, ak_alpha, mmin_alpha, i_alpha, sigma_t, densb, bvfb, iorder, iheatcal, icutoff, iprint, nsmax, smco, alt_cutoff, kstar, slope, f1, f2, f3, f5, f6, naz, sigsqmcw, sigmatm, il1, il2, lev1, lev2, nlons, nlevs, nazmth, lorms, smoothr1, smoothr2, sigalpmc, f2mod)
subroutine hines_intgrl(i_alpha, v_alpha, m_alpha, bvfb, slope, naz, lev, il1, il2, nlons, nlevs, nazmth, lorms)
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
!$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
!$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 ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
subroutine hines_setup(naz, slope, f1, f2, f3, f5, f6, kstar, icutoff, alt_cutoff, smco, nsmax, iheatcal, k_alpha, ierror, nmessg, nlons, nazmth, coslat)
subroutine vert_smooth(data, work, coeff, nsmooth, il1, il2, lev1, lev2, nlons, nlevs)
subroutine hines_wind(v_alpha, vel_u, vel_v, naz, il1, il2, lev1, lev2, nlons, nlevs, nazmth)