This subroutine computes the moisture tendencies of water vapor, cloud droplets, rain, cloud ice (pristine), snow, and graupel.
More...
|
| double precision, dimension(nbins+1) | xdx |
| |
| double precision, dimension(nbc) | dc |
| |
| double precision, dimension(nbc) | dtc |
| |
| double precision, dimension(nbi) | di |
| |
| double precision, dimension(nbi) | dti |
| |
| double precision, dimension(nbr) | dr |
| |
| double precision, dimension(nbr) | dtr |
| |
| double precision, dimension(nbs) | ds |
| |
| double precision, dimension(nbs) | dts |
| |
| double precision, dimension(nbg) | dg |
| |
| double precision, dimension(nbg) | dtg |
| |
real(kind=r8size), dimension(:,:,:,:),
allocatable | tcg_racg |
| |
real(kind=r8size), dimension(:,:,:,:),
allocatable | tmr_racg |
| |
real(kind=r8size), dimension(:,:,:,:),
allocatable | tcr_gacr |
| |
real(kind=r8size), dimension(:,:,:,:),
allocatable | tmg_gacr |
| |
real(kind=r8size), dimension(:,:,:,:),
allocatable | tnr_racg |
| |
real(kind=r8size), dimension(:,:,:,:),
allocatable | tnr_gacr |
| |
real(kind=r8size), dimension(:,:,:,:),
allocatable | tcs_racs1 |
| |
real(kind=r8size), dimension(:,:,:,:),
allocatable | tmr_racs1 |
| |
real(kind=r8size), dimension(:,:,:,:),
allocatable | tcs_racs2 |
| |
real(kind=r8size), dimension(:,:,:,:),
allocatable | tmr_racs2 |
| |
real(kind=r8size), dimension(:,:,:,:),
allocatable | tcr_sacr1 |
| |
real(kind=r8size), dimension(:,:,:,:),
allocatable | tms_sacr1 |
| |
real(kind=r8size), dimension(:,:,:,:),
allocatable | tcr_sacr2 |
| |
real(kind=r8size), dimension(:,:,:,:),
allocatable | tms_sacr2 |
| |
real(kind=r8size), dimension(:,:,:,:),
allocatable | tnr_racs1 |
| |
real(kind=r8size), dimension(:,:,:,:),
allocatable | tnr_racs2 |
| |
real(kind=r8size), dimension(:,:,:,:),
allocatable | tnr_sacr1 |
| |
real(kind=r8size), dimension(:,:,:,:),
allocatable | tnr_sacr2 |
| |
real(kind=r8size), dimension(:,:),
allocatable | tpi_qcfz |
| |
real(kind=r8size), dimension(:,:),
allocatable | tni_qcfz |
| |
real(kind=r8size), dimension(:,:,:),
allocatable | tpi_qrfz |
| |
real(kind=r8size), dimension(:,:,:),
allocatable | tpg_qrfz |
| |
real(kind=r8size), dimension(:,:,:),
allocatable | tni_qrfz |
| |
real(kind=r8size), dimension(:,:,:),
allocatable | tnr_qrfz |
| |
real(kind=r8size), dimension(:,:),
allocatable | tps_iaus |
| |
real(kind=r8size), dimension(:,:),
allocatable | tni_iaus |
| |
real(kind=r8size), dimension(:,:),
allocatable | tpi_ide |
| |
real(kind=r8size), dimension(:,:),
allocatable | t_efrw |
| |
real(kind=r8size), dimension(:,:),
allocatable | t_efsw |
| |
real(kind=r8size), dimension(:,:,:),
allocatable | tnr_rev |
| |
| real | t1_qr_qc |
| |
| real | t1_qr_qi |
| |
| real | t2_qr_qi |
| |
| real | t1_qg_qc |
| |
| real | t1_qs_qc |
| |
| real | t1_qs_qi |
| |
| real | t1_qr_ev |
| |
| real | t2_qr_ev |
| |
| real | t1_qs_sd |
| |
| real | t2_qs_sd |
| |
| real | t1_qg_sd |
| |
| real | t2_qg_sd |
| |
| real | t1_qs_me |
| |
| real | t2_qs_me |
| |
| real | t1_qg_me |
| |
| real | t2_qg_me |
| |
| character *256 | mp_debug |
| |
|
| logical, parameter, private | iiwarm = .false. |
| |
| integer, parameter, private | ifdry = 0 |
| |
| real, parameter, private | t_0 = 273.15 |
| |
| real, parameter, private | pi2 = 3.1415926536 |
| |
| real, parameter, private | rho_w = 1000.0 |
| |
| real, parameter, private | rho_s = 100.0 |
| |
| real, parameter, private | rho_i = 890.0 |
| |
| real, parameter, private | mu_g = 0.0 |
| |
| real, parameter, private | mu_i = 0.0 |
| |
| real, private | mu_c |
| |
| real, parameter, private | mu_s = 0.6357 |
| |
| real, parameter, private | kap0 = 490.6 |
| |
| real, parameter, private | kap1 = 17.46 |
| |
| real, parameter, private | lam0 = 20.78 |
| |
| real, parameter, private | lam1 = 3.29 |
| |
| real, parameter, private | gonv_min = 1.E4 |
| |
| real, parameter, private | gonv_max = 3.E6 |
| |
| real, parameter, private | am_r = PI2*rho_w/6.0 |
| |
| real, parameter, private | bm_r = 3.0 |
| |
| real, parameter, private | bm_s = 2.0 |
| |
| real, parameter, private | bm_g = 3.0 |
| |
| real, parameter, private | am_i = PI2*rho_i/6.0 |
| |
| real, parameter, private | bm_i = 3.0 |
| |
| real, parameter, private | av_r = 4854.0 |
| |
| real, parameter, private | bv_r = 1.0 |
| |
| real, parameter, private | fv_r = 195.0 |
| |
| real, parameter, private | bv_i = 1.0 |
| |
| real, parameter, private | c_cube = 0.5 |
| |
| real, parameter, private | r1 = 1.E-12 |
| |
| real, parameter, private | r2 = 1.E-6 |
| |
| real, parameter, private | eps = 1.E-15 |
| |
| real, parameter, private | ato = 0.304 |
| |
| real, parameter, private | rho_not = 101325.0/(287.05*298.0) |
| |
| real, parameter, private | sc = 0.632 |
| |
| real, private | sc3 |
| |
| real, parameter, private | hgfr = 235.16 |
| |
| real, parameter, private | rv = 461.5 |
| |
| real, parameter, private | orv = 1./Rv |
| |
| real, parameter, private | rr2 = 287.04 |
| |
| real, parameter, private | cp2 = 1004.0 |
| |
| real, parameter, private | lsub = 2.834E6 |
| |
| real, parameter, private | lvap0 = 2.5E6 |
| |
| real, parameter, private | lfus = lsub - lvap0 |
| |
| real, parameter, private | olfus = 1./lfus |
| |
| real, parameter, private | xm0i = 1.E-12 |
| |
| real, parameter, private | d0c = 1.E-6 |
| |
| real, parameter, private | d0r = 50.E-6 |
| |
| real, parameter, private | d0s = 200.E-6 |
| |
| real, parameter, private | d0g = 250.E-6 |
| |
| real, private | d0i |
| |
| real, private | xm0s |
| |
| real, private | xm0g |
| |
| integer, parameter, private | nbins = 100 |
| |
| integer, parameter, private | nbc = nbins |
| |
| integer, parameter, private | nbi = nbins |
| |
| integer, parameter, private | nbr = nbins |
| |
| integer, parameter, private | nbs = nbins |
| |
| integer, parameter, private | nbg = nbins |
| |
| integer, parameter, private | ntb_c = 37 |
| |
| integer, parameter, private | ntb_i = 64 |
| |
| integer, parameter, private | ntb_r = 37 |
| |
| integer, parameter, private | ntb_s = 28 |
| |
| integer, parameter, private | ntb_g = 28 |
| |
| integer, parameter, private | ntb_g1 = 28 |
| |
| integer, parameter, private | ntb_r1 = 37 |
| |
| integer, parameter, private | ntb_i1 = 55 |
| |
| integer, parameter, private | ntb_t = 9 |
| |
| integer, private | nic2 |
| |
| integer, private | nii2 |
| |
| integer, private | nii3 |
| |
| integer, private | nir2 |
| |
| integer, private | nir3 |
| |
| integer, private | nis2 |
| |
| integer, private | nig2 |
| |
| integer, private | nig3 |
| |
real, dimension(ntb_c),
parameter, private | r_c = (/1.e-6,2.e-6,3.e-6,4.e-6,5.e-6,6.e-6,7.e-6,8.e-6,9.e-6, 1.e-5,2.e-5,3.e-5,4.e-5,5.e-5,6.e-5,7.e-5,8.e-5,9.e-5, 1.e-4,2.e-4,3.e-4,4.e-4,5.e-4,6.e-4,7.e-4,8.e-4,9.e-4, 1.e-3,2.e-3,3.e-3,4.e-3,5.e-3,6.e-3,7.e-3,8.e-3,9.e-3, 1.e-2/) |
| |
real, dimension(ntb_i),
parameter, private | r_i = (/1.e-10,2.e-10,3.e-10,4.e-10, 5.e-10,6.e-10,7.e-10,8.e-10,9.e-10, 1.e-9,2.e-9,3.e-9,4.e-9,5.e-9,6.e-9,7.e-9,8.e-9,9.e-9, 1.e-8,2.e-8,3.e-8,4.e-8,5.e-8,6.e-8,7.e-8,8.e-8,9.e-8, 1.e-7,2.e-7,3.e-7,4.e-7,5.e-7,6.e-7,7.e-7,8.e-7,9.e-7, 1.e-6,2.e-6,3.e-6,4.e-6,5.e-6,6.e-6,7.e-6,8.e-6,9.e-6, 1.e-5,2.e-5,3.e-5,4.e-5,5.e-5,6.e-5,7.e-5,8.e-5,9.e-5, 1.e-4,2.e-4,3.e-4,4.e-4,5.e-4,6.e-4,7.e-4,8.e-4,9.e-4, 1.e-3/) |
| |
real, dimension(ntb_r),
parameter, private | r_r = (/1.e-6,2.e-6,3.e-6,4.e-6,5.e-6,6.e-6,7.e-6,8.e-6,9.e-6, 1.e-5,2.e-5,3.e-5,4.e-5,5.e-5,6.e-5,7.e-5,8.e-5,9.e-5, 1.e-4,2.e-4,3.e-4,4.e-4,5.e-4,6.e-4,7.e-4,8.e-4,9.e-4, 1.e-3,2.e-3,3.e-3,4.e-3,5.e-3,6.e-3,7.e-3,8.e-3,9.e-3, 1.e-2/) |
| |
real, dimension(ntb_g),
parameter, private | r_g = (/1.e-5,2.e-5,3.e-5,4.e-5,5.e-5,6.e-5,7.e-5,8.e-5,9.e-5, 1.e-4,2.e-4,3.e-4,4.e-4,5.e-4,6.e-4,7.e-4,8.e-4,9.e-4, 1.e-3,2.e-3,3.e-3,4.e-3,5.e-3,6.e-3,7.e-3,8.e-3,9.e-3, 1.e-2/) |
| |
real, dimension(ntb_s),
parameter, private | r_s = (/1.e-5,2.e-5,3.e-5,4.e-5,5.e-5,6.e-5,7.e-5,8.e-5,9.e-5, 1.e-4,2.e-4,3.e-4,4.e-4,5.e-4,6.e-4,7.e-4,8.e-4,9.e-4, 1.e-3,2.e-3,3.e-3,4.e-3,5.e-3,6.e-3,7.e-3,8.e-3,9.e-3, 1.e-2/) |
| |
real, dimension(ntb_r1),
parameter, private | n0r_exp = (/1.e6,2.e6,3.e6,4.e6,5.e6,6.e6,7.e6,8.e6,9.e6, 1.e7,2.e7,3.e7,4.e7,5.e7,6.e7,7.e7,8.e7,9.e7, 1.e8,2.e8,3.e8,4.e8,5.e8,6.e8,7.e8,8.e8,9.e8, 1.e9,2.e9,3.e9,4.e9,5.e9,6.e9,7.e9,8.e9,9.e9, 1.e10/) |
| |
real, dimension(ntb_g1),
parameter, private | n0g_exp = (/1.e4,2.e4,3.e4,4.e4,5.e4,6.e4,7.e4,8.e4,9.e4, 1.e5,2.e5,3.e5,4.e5,5.e5,6.e5,7.e5,8.e5,9.e5, 1.e6,2.e6,3.e6,4.e6,5.e6,6.e6,7.e6,8.e6,9.e6, 1.e7/) |
| |
real, dimension(ntb_i1),
parameter, private | nt_i = (/1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0, 1.e1,2.e1,3.e1,4.e1,5.e1,6.e1,7.e1,8.e1,9.e1, 1.e2,2.e2,3.e2,4.e2,5.e2,6.e2,7.e2,8.e2,9.e2, 1.e3,2.e3,3.e3,4.e3,5.e3,6.e3,7.e3,8.e3,9.e3, 1.e4,2.e4,3.e4,4.e4,5.e4,6.e4,7.e4,8.e4,9.e4, 1.e5,2.e5,3.e5,4.e5,5.e5,6.e5,7.e5,8.e5,9.e5, 1.e6/) |
| |
real, dimension(10), parameter,
private | sa = (/ 5.065339, -0.062659, -3.032362, 0.029469, -0.000285, 0.31255, 0.000204, 0.003199, 0.0, -0.015952/) |
| |
real, dimension(10), parameter,
private | sb = (/ 0.476221, -0.015896, 0.165977, 0.007468, -0.000141, 0.060366, 0.000079, 0.000594, 0.0, -0.003577/) |
| |
real, dimension(ntb_t),
parameter, private | tc = (/-0.01, -5., -10., -15., -20., -25., -30., -35., -40./) |
| |
| integer, parameter, private | r8size = 8 |
| |
| real, dimension(3), private | cce |
| |
| real, dimension(3), private | ccg |
| |
| real, private | ocg1 |
| |
| real, private | ocg2 |
| |
| real, dimension(7), private | cie |
| |
| real, dimension(7), private | cig |
| |
| real, private | oig1 |
| |
| real, private | oig2 |
| |
| real, private | obmi |
| |
| real, dimension(13), private | cre |
| |
| real, dimension(13), private | crg |
| |
| real, private | ore1 |
| |
| real, private | org1 |
| |
| real, private | org2 |
| |
| real, private | org3 |
| |
| real, private | obmr |
| |
| real, dimension(18), private | cse |
| |
| real, dimension(18), private | csg |
| |
| real, private | oams |
| |
| real, private | obms |
| |
| real, private | ocms |
| |
| real, dimension(12), private | cge |
| |
| real, dimension(12), private | cgg |
| |
| real, private | oge1 |
| |
| real, private | ogg1 |
| |
| real, private | ogg2 |
| |
| real, private | ogg3 |
| |
| real, private | oamg |
| |
| real, private | obmg |
| |
| real, private | ocmg |
| |
| real, private | nt_c |
| |
| real, private | tno |
| |
| real, private | am_s |
| |
| real, private | rho_g |
| |
| real, private | av_s |
| |
| real, private | bv_s |
| |
| real, private | fv_s |
| |
| real, private | av_g |
| |
| real, private | bv_g |
| |
| real, private | av_i |
| |
| real, private | ef_si |
| |
| real, private | ef_rs |
| |
| real, private | ef_rg |
| |
| real, private | ef_ri |
| |
| real, private | c_cubes |
| |
| real, private | c_sqrd |
| |
| real, private | mu_r |
| |
| real, private | t_adjust |
| |
| logical, private | ef_rw_l |
| |
| logical, private | ef_sw_l |
| |
| real, private | am_g |
| |
This subroutine computes the moisture tendencies of water vapor, cloud droplets, rain, cloud ice (pristine), snow, and graupel.
Prior to WRFv2.2 this code was based on Reisner et al (1998), but few of those pieces remain. A complete description is now found in Thompson, G., P. R. Field, R. M. Rasmussen, and W. D. Hall, 2008: Explicit Forecasts of winter precipitation using an improved bulk microphysics scheme. Part II: Implementation of a new snow parameterization. Mon. Wea. Rev., 136, 5095-5115. Prior to WRFv3.1, this code was single-moment rain prediction as described in the reference above, but in v3.1 and higher, the scheme is two-moment rain (predicted rain number concentration).
Most importantly, users may wish to modify the prescribed number of cloud droplets (Nt_c; see guidelines mentioned below). Otherwise, users may alter the rain and graupel size distribution parameters to use exponential (Marshal-Palmer) or generalized gamma shape. The snow field assumes a combination of two gamma functions (from Field et al. 2005) and would require significant modifications throughout the entire code to alter its shape as well as accretion rates. Users may also alter the constants used for density of rain, graupel, ice, and snow, but the latter is not constant when using Paul Field's snow distribution and moments methods. Other values users can modify include the constants for mass and/or velocity power law relations and assumed capacitances used in deposition/ sublimation/evaporation/melting. Remaining values should probably be left alone.
Modifications for ICAR include OPENMP paralellization and the ability to input many important parameters so they are no longer hard coded
- Author
- Greg Thompson, NCAR-RAL, gthom.nosp@m.psn@.nosp@m.ucar..nosp@m.edu, 303-497-2805 Last modified: 27 Jul 2012