12 use machine,
only: kind_phys
13 use physcons,
only : pi => con_pi, grav => con_g, rd => con_rd, &
14 rv => con_rv, cpd => con_cp, fv => con_fvirt,&
18 real(kind=kind_phys),
parameter :: grcp = grav/cpd, rgrav = 1.0d0/grav, &
20 gor = grav/rd, gr2 = grav*gor, gocp = grav/cpd, &
21 rcpd = 1./cpd, rcpd2 = 0.5*rcpd, &
22 pi2 = pi + pi, omega1 = pi2/86400.0, &
23 omega2 = omega1+omega1, &
24 rad_to_deg=180.0/pi, deg_to_rad=pi/180.0, &
25 dw2min=1.0, bnv2min=1.e-6, velmin=sqrt(dw2min)
37 subroutine init_global_gwdis_v0(levs, zkm, pmb, kvg, ktg, krad, kion)
41 real,
intent(in) :: zkm(levs), pmb(levs)
42 real,
intent(out),
dimension(levs+1) :: kvg, ktg, krad, kion
47 real,
parameter :: vusurf = 2.e-5
48 real,
parameter :: musurf = vusurf/1.95
49 real,
parameter :: hpmol = 8.5
51 real,
parameter :: kzmin = 0.1
52 real,
parameter :: kturbo = 100.
53 real,
parameter :: zturbo = 130.
54 real,
parameter :: zturw = 30.
55 real,
parameter :: inv_pra = 3.
57 real,
parameter :: alpha = 1./86400./15.
59 real,
parameter :: kdrag = 1./86400./10.
60 real,
parameter :: zdrag = 100.
61 real,
parameter :: zgrow = 50.
63 real :: vumol, mumol, keddy, ion_drag
66 vumol = vusurf*exp(-zkm(k)/hpmol)
67 mumol = musurf*exp(-zkm(k)/hpmol)
69 keddy = kturbo*exp(-((zkm(k)-zturbo) /zturw)**2)
71 kvg(k) = vumol + keddy
72 ktg(k) = mumol + keddy*inv_pra
87 end subroutine init_global_gwdis_v0
100 use ugwp_common_v0,
only : bnv2min, grav, grcp, fv, grav, cpd, grcp, pi
108 character(len=8) :: strver =
'gfs_2018'
109 character(len=8) :: strbase =
'gfs_2018'
110 real,
parameter :: rimin=-10., ric=0.25
113 real,
parameter :: efmin=0.5, efmax=10.0
114 real,
parameter :: hpmax=2400.0, hpmin=25.0
115 real,
parameter :: sigma_std=1./100., gamm_std=1.0
117 real,
parameter :: frmax=10., frc =1.0, frmin =0.01
120 real,
parameter :: ce=0.8, ceofrc=ce/frc, cg=0.5
121 real,
parameter :: gmax=1.0, veleps=1.0, factop=0.5
123 real,
parameter :: rlolev=50000.0
125 real,
parameter :: hncrit=9000.
129 real,
parameter :: sigfac=4.0
130 real,
parameter :: hminmt=50.
131 real,
parameter :: minwnd=1.0
132 real,
parameter :: dpmin=5000.0
134 real,
parameter :: kxoro=6.28e-3/200.
135 real,
parameter :: coro = 0.0
136 integer,
parameter :: nridge=2
144 integer,
parameter :: mdir = 8
145 real,
parameter :: fdir=.5*mdir/pi
148 data nwdir/6,7,5,8,2,3,1,4/
151 real,
parameter :: odmin = 0.1, odmax = 10.0
156 integer,
parameter :: n_tofd = 2
157 real,
parameter :: const_tofd = 0.0759
158 real,
parameter :: ze_tofd = 1500.0
159 real,
parameter :: a12_tofd = 0.0002662*0.005363
160 real,
parameter :: ztop_tofd = 10.*ze_tofd
163 real,
parameter :: fcrit_sm = 0.7, fcrit_sm2 = fcrit_sm * fcrit_sm
164 real,
parameter :: fcrit_gfs = 0.7
165 real,
parameter :: fcrit_mtb = 0.7
167 real,
parameter :: lzmax = 18.e3
168 real,
parameter :: mkzmin = 6.28/lzmax
169 real,
parameter :: mkz2min = mkzmin*mkzmin
170 real,
parameter :: zbr_pi = (3.0/2.0)*pi
171 real,
parameter :: zbr_ifs = 0.5*pi
175 subroutine init_oro_gws_v0(nwaves, nazdir, nstoch, effac, &
179 integer :: nwaves, nazdir, nstoch
190 real,
parameter :: lonr_refmb = 4.0 * 192.0
191 real,
parameter :: lonr_refgw = 192.0
199 cdmbx = lonr_refmb/float(lonr)
201 if (cdmbgwd(1) >= 0.0) cdmb = cdmb * cdmbgwd(1)
203 cleff = 0.5e-5 * sqrt(lonr_refgw/float(lonr))
207 if (cdmbgwd(2) >= 0.0) cleff = cleff * cdmbgwd(2)
215 end subroutine init_oro_gws_v0
231 integer :: nwav, nazd
234 integer,
parameter :: incdim = 4, iazdim = 4
238 subroutine initsolv_lsatdis_v0(me, master, nwaves, nazdir, nstoch, effac, do_physb, kxw)
242 integer :: me, master
243 integer :: nwaves, nazdir
252 integer :: inc, jk, jl, iazi, i, j, k
254 if( nwaves == 0 .or. nstoch == 1 )
then
268 end subroutine initsolv_lsatdis_v0
278 real,
parameter :: maxdudt = 250.e-5
280 real,
parameter :: hpscale= 7000., rhp2 = 0.5/hpscale
281 real,
parameter :: omega2 = 2.*6.28/86400
282 real,
parameter :: gptwo=2.0
284 real,
parameter :: dked_min =0.01
285 real,
parameter :: gssec = (6.28/30.)**2
286 real,
parameter :: bv2min = (6.28/60./120.)**2
287 real,
parameter :: minvel = 0.5
293 real,
parameter :: v_kxw = 6.28e-3/200.
294 real,
parameter :: v_kxw2 = v_kxw*v_kxw
295 real,
parameter :: tamp_mpa = 30.e-3
296 real,
parameter :: zfluxglob= 3.75e-3
298 real ,
parameter :: nslope=1
300 integer ,
parameter :: iazidim=4
301 integer ,
parameter :: incdim=25
302 real ,
parameter :: ucrit2=0.5
304 real ,
parameter :: zcimin = ucrit2
305 real ,
parameter :: zcimax = 125.0
306 real ,
parameter :: zgam = 0.25
307 real ,
parameter :: zms_l = 2000.0, zms = pi2 / zms_l, zmsi = 1.0 / zms
313 integer :: nwav, nazd, nst
317 real,
allocatable :: zci(:), zci4(:), zci3(:),zci2(:), zdci(:)
318 real,
allocatable :: zcosang(:), zsinang(:)
321 subroutine initsolv_wmsdis_v0(me, master, nwaves, nazdir, nstoch, effac, do_physb, kxw)
329 integer :: me, master, nwaves, nazdir, nstoch
335 integer :: inc, jk, jl, iazi
337 real :: zang, zang1, znorm
338 real :: zx1, zx2, ztx, zdx, zxran, zxmin, zxmax, zx, zpexp
340 if( nwaves == 0)
then
359 allocate ( zci(nwav), zci4(nwav), zci3(nwav),zci2(nwav), zdci(nwav) )
360 allocate ( zcosang(nazd), zsinang(nazd) )
362 if (me == master)
then
363 print *,
'ugwp_v0: init_gw_wmsdis_control '
365 print *,
'ugwp_v0: WMSDIS launch layer ', ilaunch
366 print *,
'ugwp_v0: WMSDID tot_mflux in mpa', tamp_mpa*1000.
375 zang = pi2 / float(nazd)
382 zang1 = (iazi-1)*zang
383 zcosang(iazi) = cos(zang1)
384 zsinang(iazi) = sin(zang1)
385 znorm = znorm + abs(zcosang(iazi))
388 zaz_fct = 2.0 / znorm
398 zxran = zxmax - zxmin
399 zdx = zxran / real(nwav-1)
401 zx1 = zxran/(exp(zxran/zgam)-1.0 )
411 ztx = real(inc-1)*zdx+zxmin
412 zx = zx1*exp((ztx-zxmin)/zgam)+zx2
414 zdci(inc) = zci(inc)**2*(zx1/zgam)*exp((ztx-zxmin)/zgam)*zdx
415 zci4(inc) = (zms*zci(inc))**4
416 zci2(inc) = (zms*zci(inc))**2
417 zci3(inc) = (zms*zci(inc))**3
424 if (me == master)
then
426 print *,
'ugwp_v0: zcimin=' , zcimin
427 print *,
'ugwp_v0: zcimax=' , zcimax
428 print *,
'ugwp_v0: cd_crit=', zgam
429 print *,
'ugwp_v0: launch_level', ilaunch
430 print *,
' ugwp_v0 zms_l=', zms_l
431 print *,
' ugwp_vgw nslope=', nslope
436 end subroutine initsolv_wmsdis_v0