CCPP SciDoc v7.0.0  v7.0.0
Common Community Physics Package Developed at DTC
 
Loading...
Searching...
No Matches
module_mp_tempo_params.F90
1! Parameters file for TEMPO Microphysics
2!=================================================================================================================
4
5#if defined(mpas)
6 use mpas_kind_types, only: wp => rkind, sp => r4kind, dp => r8kind
7#elif defined(standalone)
8 use machine, only: wp => kind_phys, sp => kind_sngl_prec, dp => kind_dbl_prec
9#else
10 use machine, only: wp => kind_phys, sp => kind_sngl_prec, dp => kind_dbl_prec
11#define ccpp_default 1
12#endif
13
14#if defined(ccpp_default) && defined(MPI)
15 use mpi_f08
16#endif
17
18#undef OLD_MPTBLS
19
20 implicit none
21
22 !=================================================================================================================
23 ! Parameters needed first by tempo_init()
24
25#if defined(OLD_MPTBLS)
26 logical, parameter :: original_thompson = .true.
27#else
28 logical, parameter :: original_thompson = .false.
29#endif
30
31! #########################################################################################
35! #########################################################################################
36 ! Derived data type for configuration flags.
38 logical :: aerosol_aware
39 logical :: hail_aware
40 end type ty_tempo_cfg
41
42 type(ty_tempo_cfg) configs
43
44 ! Constants that can be defined by the model ===========================
45 ! Needed by tempo_init()
46 real(wp) :: pi = 3.1415926536
47
48 ! Enthalpy of sublimation, vaporization, and fusion at 0C.
49 real(wp) :: lsub = 2.834e6
50 real(wp) :: lvap0 = 2.5e6
51 real(wp) :: lfus !(set in mp_tempo_params_init)
52 real(wp) :: olfus !(set in mp_tempo_params_init)
53
54 ! Needed by the driver
55 ! Water vapor and air gas constants at constant pressure
56 real(wp) :: rv = 461.5
57 real(wp) :: orv !(set in mp_tempo_params_init)
58 real(wp) :: r = 287.04
59 real(wp) :: roverrv = 0.622
60 real(wp) :: cp2 = 1004.0 ! AAJ change to Cp2
61
62 ! ======================================================================
63 ! Minimum microphys values
64 ! R1 value, 1.e-12, cannot be set lower because of numerical
65 ! problems with Paul Field's moments and should not be set larger
66 ! because of truncation problems in snow/ice growth.
67 real(wp), parameter :: r1 = 1.e-12
68 real(wp), parameter :: r2 = 1.e-6
69 real(wp), parameter :: eps = 1.e-15
70
71 ! logical :: is_aerosol_aware = .true.
72 logical :: merra2_aerosol_aware = .false.
73 logical :: sedi_semi = .false.
74
75 ! Hail-aware microphysics options
76 logical, parameter :: build_hail_aware_table = .true.
77 logical :: using_hail_aware_table = .false.
78 integer, parameter :: nrhg = 9
79 integer, parameter :: nrhg1 = 1
80 integer :: dimnrhg
81 integer, parameter :: idx_bg1 = 6 ! => corresponds to graupel density of 500 kg m^-3 from rho_g array
82
83 ! Densities of rain, graupel, and cloud ice.
84 real(wp), parameter :: rho_w2 = 1000.0 ! Change to rho_w2 to solve MPAS same var name conflict
85 real(wp), parameter :: rho_i = 890.0
86 real(wp), dimension(NRHG), parameter :: rho_g = (/50., 100., 200., 300., 400., 500., 600., 700., 800./)
87
88 ! Cloud droplet distribution dispersion parameters
89 integer, parameter :: nu_c_max = 15
90 integer, parameter :: nu_c_min = 2
91 real(wp), parameter :: nu_c_scale = 1000.e6
92
93 ! Generalized gamma distributions for rain, graupel and cloud ice.
94 ! N(D) = N_0 * D**mu * exp(-lamda*D); mu=0 is exponential.
95 real(wp), parameter :: mu_r = 0.0
96 real(wp), parameter :: mu_s = 0.6357
97 real(wp), parameter :: mu_g = 0.0
98 real(wp), parameter :: mu_i = 0.0
99
100 ! Mass power law relations: mass = am*D**bm
101 ! Snow from Field et al. (2005), others assume spherical form.
102 real(wp) :: am_r ! = PI * rho_w2 / 6.0 (set in mp_tempo_params_init)
103 real(wp), parameter :: bm_r = 3.0
104 real(wp), parameter :: am_s = 0.069
105 real(wp), parameter :: bm_s = 2.0
106 real(wp), dimension (NRHG) :: am_g !(set in mp_tempo_params_init)
107 real(wp), parameter :: bm_g = 3.0
108 real(wp) :: am_i ! = PI * rho_i / 6.0 (set in mp_tempo_params_init)
109 real(wp), parameter :: bm_i = 3.0
110
111 ! Fallspeed power laws relations: v = (av*D**bv)*exp(-fv*D)
112 ! Rain from Ferrier (1994), ice, snow, and graupel from
113 ! Thompson et al (2008). Coefficient fv is zero for graupel/ice.
114 real(wp), parameter :: av_r = 4854.0
115 real(wp), parameter :: bv_r = 1.0
116 real(wp), parameter :: av_s = 40.0
117 real(wp), parameter :: bv_s = 0.55
118 real(wp), parameter :: fv_s = 100.0
119 real(wp), parameter :: av_g_old = 442.0
120 real(wp), parameter :: bv_g_old = 0.89
121
122 ! Variable graupel density av_g and bv_g values
123 ! Computed from A. Heymsfield: Best - Reynolds relationship
124 real(wp), dimension(NRHG) :: av_g = (/45.9173813, 67.0867386, 98.0158463, 122.353378, &
125 143.204224, 161.794724, 178.762115, 194.488785, 209.225876/)
126 real(wp), dimension(NRHG) :: bv_g = (/0.640961647, 0.640961647, 0.640961647, 0.640961647, &
127 0.640961647, 0.640961647, 0.640961647, 0.640961647, 0.640961647/)
128
129 ! Capacitance of sphere and plates/aggregates: D**3, D**2
130 real(wp), parameter :: c_cube = 0.5
131 real(wp), parameter :: c_sqrd = 0.15
132
133 ! Schmidt number
134 real(wp), parameter :: sc = 0.632
135 real(wp) :: sc3
136
137 ! Fall speed coefficients for ice and cloud droplets
138 real(wp), parameter :: bv_i = 1.0
139 real(wp), parameter :: bv_c = 2.0
140
141
142 ! Ice initiates with this mass (kg), corresponding diameter calc.
143 ! Min diameters and mass of cloud, rain, snow, and graupel (m, kg).
144 real(wp), parameter :: xm0i = 1.e-12
145 real(wp), parameter :: d0c = 1.e-6
146 real(wp), parameter :: d0r = 50.e-6
147 real(wp), parameter :: d0s = 300.e-6
148 real(wp), parameter :: d0g = 350.e-6
149 real(wp) :: d0i, xm0s, xm0g
150
151 ! Lookup table dimensions
152 integer, parameter :: nbins = 100
153 integer, parameter :: nbc = nbins
154 integer, parameter :: nbr = nbins
155 integer, parameter :: nbs = nbins
156
157 integer, parameter :: nbi = nbins
158 integer, parameter :: nbg = nbins
159 integer, parameter :: ntb_i = 64
160 integer, parameter :: ntb_i1 = 55
161 integer, parameter :: ntb_c = 37
162 integer, parameter :: ntb_t = 9
163 integer, parameter :: ntb_g1 = 37
164
165#if defined(ccpp_default) && defined(OLD_MPTBLS)
166 integer, parameter :: ntb_s = 28
167 integer, parameter :: ntb_g = 28
168#else
169 integer, parameter :: ntb_s = 37
170 integer, parameter :: ntb_g = 37
171#endif
172 integer, parameter :: ntb_r = 37
173 integer, parameter :: ntb_r1 = 37
174 integer, parameter :: ntb_t1 = 45
175 integer, parameter :: ntb_in = 55
176 integer, parameter :: ntb_arc = 7
177 integer, parameter :: ntb_arw = 9
178 integer, parameter :: ntb_art = 7
179 integer, parameter :: ntb_arr = 5
180 integer, parameter :: ntb_ark = 4
181
182 integer :: nic1, nic2, nii2, nii3, nir2, nir3, nis2, nig2, nig3, niin2
183
184 ! real(dp), dimension(nbins+1) :: xDx
185 real(dp), dimension(nbc) :: dc, dtc
186 real(dp), dimension(nbi) :: di, dti
187 real(dp), dimension(nbr) :: dr, dtr
188 real(dp), dimension(nbs) :: ds, dts
189 real(dp), dimension(nbg) :: dg, dtg
190 real(dp), dimension(nbc) :: t_nc
191
192 ! Lookup tables for cloud water content (kg/m**3).
193 real(wp), dimension(ntb_c), parameter :: &
194 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, &
195 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, &
196 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, &
197 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, &
198 1.e-2/)
199
200 ! Lookup tables for cloud ice content (kg/m**3).
201 real(wp), dimension(ntb_i), parameter :: &
202 r_i = (/1.e-10,2.e-10,3.e-10,4.e-10, &
203 5.e-10,6.e-10,7.e-10,8.e-10,9.e-10, &
204 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, &
205 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, &
206 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, &
207 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, &
208 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, &
209 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, &
210 1.e-3/)
211
212 ! Lookup tables for rain content (kg/m**3).
213 real(wp), dimension(ntb_r), parameter :: &
214 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, &
215 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, &
216 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, &
217 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, &
218 1.e-2/)
219
220 ! Lookup tables for graupel y-intercept parameter (/m**4).
221 real(wp), dimension(ntb_g1), parameter :: &
222 n0g_exp = (/1.e2,2.e2,3.e2,4.e2,5.e2,6.e2,7.e2,8.e2,9.e2, &
223 1.e3,2.e3,3.e3,4.e3,5.e3,6.e3,7.e3,8.e3,9.e3, &
224 1.e4,2.e4,3.e4,4.e4,5.e4,6.e4,7.e4,8.e4,9.e4, &
225 1.e5,2.e5,3.e5,4.e5,5.e5,6.e5,7.e5,8.e5,9.e5, &
226 1.e6/)
227
228#if defined(ccpp_default) && defined(OLD_MPTBLS)
229 ! Lookup tables for graupel content (kg/m**3).
230 real(wp), dimension(ntb_g), parameter :: &
231 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, &
232 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, &
233 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, &
234 1.e-2/)
235
236 ! Lookup tables for snow content (kg/m**3).
237 real(wp), dimension(ntb_s), parameter :: &
238 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, &
239 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, &
240 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, &
241 1.e-2/)
242#else
243 ! Lookup tables for graupel content (kg/m**3).
244 real(wp), dimension(ntb_g), parameter :: &
245 r_g = (/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, &
246 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, &
247 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, &
248 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, &
249 1.e-2/)
250
251 ! Lookup tables for snow content (kg/m**3).
252 real(wp), dimension(ntb_s), parameter :: &
253 r_s = (/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, &
254 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, &
255 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, &
256 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, &
257 1.e-2/)
258#endif
259
260 ! Lookup tables for rain y-intercept parameter (/m**4).
261 real(wp), dimension(ntb_r1), parameter :: &
262 n0r_exp = (/1.e6,2.e6,3.e6,4.e6,5.e6,6.e6,7.e6,8.e6,9.e6, &
263 1.e7,2.e7,3.e7,4.e7,5.e7,6.e7,7.e7,8.e7,9.e7, &
264 1.e8,2.e8,3.e8,4.e8,5.e8,6.e8,7.e8,8.e8,9.e8, &
265 1.e9,2.e9,3.e9,4.e9,5.e9,6.e9,7.e9,8.e9,9.e9, &
266 1.e10/)
267
268 ! Lookup tables for ice number concentration (/m**3).
269 real(wp), dimension(ntb_i1), parameter :: &
270 nt_i = (/1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0, &
271 1.e1,2.e1,3.e1,4.e1,5.e1,6.e1,7.e1,8.e1,9.e1, &
272 1.e2,2.e2,3.e2,4.e2,5.e2,6.e2,7.e2,8.e2,9.e2, &
273 1.e3,2.e3,3.e3,4.e3,5.e3,6.e3,7.e3,8.e3,9.e3, &
274 1.e4,2.e4,3.e4,4.e4,5.e4,6.e4,7.e4,8.e4,9.e4, &
275 1.e5,2.e5,3.e5,4.e5,5.e5,6.e5,7.e5,8.e5,9.e5, &
276 1.e6/)
277
278 ! Lookup tables for IN concentration (/m**3) from 0.001 to 1000/Liter.
279 real(wp), dimension(ntb_IN), parameter :: &
280 nt_in = (/1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0, &
281 1.e1,2.e1,3.e1,4.e1,5.e1,6.e1,7.e1,8.e1,9.e1, &
282 1.e2,2.e2,3.e2,4.e2,5.e2,6.e2,7.e2,8.e2,9.e2, &
283 1.e3,2.e3,3.e3,4.e3,5.e3,6.e3,7.e3,8.e3,9.e3, &
284 1.e4,2.e4,3.e4,4.e4,5.e4,6.e4,7.e4,8.e4,9.e4, &
285 1.e5,2.e5,3.e5,4.e5,5.e5,6.e5,7.e5,8.e5,9.e5, &
286 1.e6/)
287
288 ! Lookup tables for various accretion/collection terms.
289 ! ntb_x refers to the number of elements for rain, snow, graupel,
290 ! and temperature array indices. Variables beginning with t-p/c/m/n
291 ! represent lookup tables. Save compile-time memory by making
292 ! allocatable (2009Jun12, J. Michalakes).
293 real(dp), allocatable, dimension(:,:,:,:,:) :: tcg_racg, tmr_racg, tcr_gacr, tnr_racg, tnr_gacr
294 real(dp), allocatable, dimension(:,:,:,:) :: tcs_racs1, tmr_racs1, tcs_racs2, tmr_racs2, &
295 tcr_sacr1, tms_sacr1, tcr_sacr2, tms_sacr2, tnr_racs1, tnr_racs2, tnr_sacr1, tnr_sacr2
296 real(dp), allocatable, dimension(:,:,:,:) :: tpi_qcfz, tni_qcfz
297 real(dp), allocatable, dimension(:,:,:,:) :: tpi_qrfz, tpg_qrfz, tni_qrfz, tnr_qrfz
298 real(dp), allocatable, dimension(:,:) :: tps_iaus, tni_iaus, tpi_ide
299 real(dp), allocatable, dimension(:,:) :: t_efrw, t_efsw
300 real(dp), allocatable, dimension(:,:,:) :: tnr_rev, tpc_wev, tnc_wev
301 real(sp), allocatable, dimension(:,:,:,:,:) :: tnccn_act
302
303 ! Variables holding a bunch of exponents and gamma values (cloud water,
304 ! cloud ice, rain, snow, then graupel).
305 real(wp), dimension(5,15) :: cce, ccg
306 real(wp), dimension(15) :: ocg1, ocg2
307 real(wp), dimension(7) :: cie, cig
308 real(wp) :: oig1, oig2, obmi
309 real(wp), dimension(13) :: cre, crg
310 real(wp) :: ore1, org1, org2, org3, obmr
311 real(wp) :: oams, obms, ocms
312 real(wp), dimension(12,NRHG) :: cge, cgg
313 real(wp), dimension(NRHG) :: oamg, ocmg
314#if defined(ccpp_default) && defined(OLD_MPTBLS)
315 real, dimension(18) :: cse, csg
316#else
317 real(wp), dimension(17) :: cse, csg
318#endif
319 real(wp) :: oge1, ogg1, ogg2, ogg3, obmg
320
321 ! Declaration of precomputed constants in various rate eqns.
322 real(wp) :: t1_qr_qc, t1_qr_qi, t2_qr_qi, t1_qs_qc, t1_qs_qi
323 real(wp) :: t1_qr_ev, t2_qr_ev, t1_qg_qc, t2_qg_sd, t2_qg_me
324 real(wp) :: t1_qs_sd, t2_qs_sd, t1_qs_me, t2_qs_me, t1_qg_sd, t1_qg_me
325
326 !=================================================================================================================
327 ! Parameters needed by the microphysics driver
328
329 ! Prescribed number of cloud droplets. Set according to known data or
330 ! roughly 100 per cc (100.e6 m^-3) for Maritime cases and
331 ! 300 per cc (300.e6 m^-3) for Continental. Gamma shape parameter,
332 ! mu_c, calculated based on Nt_c is important in autoconversion
333 ! scheme. In 2-moment cloud water, Nt_c represents a maximum of
334 ! droplet concentration and nu_c is also variable depending on local
335 ! droplet number concentration.
336 real(wp), parameter :: nt_c_o = 50.e6
337 real(wp), parameter :: nt_c_l = 100.e6
338 real(wp), parameter :: nt_c_max = 1999.e6
339 real(wp) :: nt_c, mu_c
340 real(wp) :: mu_c_o, mu_c_l
341
342 real(wp) :: min_qv = 1.e-10
343#if defined(ccpp_default)
344 real(wp), parameter :: demott_nuc_ssati = 0.15 ! 0.15 for CCPP
345#else
346 real(wp), parameter :: demott_nuc_ssati = 0.25
347#endif
348 ! Declaration of constants for assumed CCN/IN aerosols when none in
349 ! the input data. Look inside the init routine for modifications
350 ! due to surface land-sea points or vegetation characteristics.
351 real(wp), parameter :: nwfa_default = 11.1e6
352 real(wp), parameter :: nain1 = 0.5e6
353 real(wp), parameter :: nifa_default = nain1*0.01
354 real(wp), parameter :: aero_max = 9999.e6
355 real(dp), parameter :: max_ni = 4999.e3
356 real(wp), parameter :: icenuc_max = 1000.e3
357
358 real(wp), parameter :: rime_threshold = 5.0 ! For MPAS
359 real(wp), parameter :: rime_conversion = 0.75 ! For MPAS
360
361 real(wp), parameter :: fv_r = 195.0
362 real(wp) :: rho_s2 = 100.0 ! AAJ change to rho_s2 to solve MPAS same var name conflict
363 real(wp), parameter :: av_c = 0.316946e8
364
365 logical, parameter :: iiwarm = .false.
366 logical, parameter :: dustyice = .true.
367 logical, parameter :: homogice = .true.
368
369 integer, parameter :: ifdry = 0
370 real(wp) :: t_0 = 273.15
371
372 real(wp), parameter :: nain0 = 1.5e6
373 real(wp), parameter :: naccn0 = 300.0e6
374 real(wp), parameter :: naccn1 = 50.0e6
375
376 ! Sum of two gamma distrib for snow (Field et al. 2005).
377 ! N(D) = M2**4/M3**3 * [Kap0*exp(-M2*Lam0*D/M3)
378 ! + Kap1*(M2/M3)**mu_s * D**mu_s * exp(-M2*Lam1*D/M3)]
379 ! M2 and M3 are the (bm_s)th and (bm_s+1)th moments respectively
380 ! calculated as function of ice water content and temperature.
381 real(wp), parameter :: kap0 = 490.6
382 real(wp), parameter :: kap1 = 17.46
383 real(wp), parameter :: lam0 = 20.78
384 real(wp), parameter :: lam1 = 3.29
385
386 ! Y-intercept parameter for graupel is not constant and depends on
387 ! mixing ratio. Also, when mu_g is non-zero, these become equiv
388 ! y-intercept for an exponential distrib and proper values are
389 ! computed based on same mixing ratio and total number concentration.
390 real(dp), parameter :: gonv_min = 1.e2
391 real(dp), parameter :: gonv_max = 1.e6
392
393 real(wp), parameter :: a_coeff = 0.47244157
394 real(wp), parameter :: b_coeff = 0.54698726
395
396#if defined(ccpp_default)
397 real(wp) :: av_i
398#else
399 real(wp), parameter :: av_i = 1493.9
400#endif
401
402 ! Collection efficiencies. Rain/snow/graupel collection of cloud
403 ! droplets use variables (Ef_rw, Ef_sw, Ef_gw respectively) and
404 ! get computed elsewhere because they are dependent on stokes
405 ! number.
406 real(wp), parameter :: ef_si = 0.05
407 real(wp), parameter :: ef_rs = 0.95
408 real(wp), parameter :: ef_rg = 0.75
409 real(wp), parameter :: ef_ri = 0.95
410
411
412
413 ! Constants in Cooper curve relation for cloud ice number.
414 real(wp), parameter :: tno = 5.0
415 real(wp), parameter :: ato = 0.304
416
417 ! Rho_not used in fallspeed relations (rho_not/rho)**.5 adjustment.
418 real(wp), parameter :: rho_not = 101325.0 / (287.05*298.0)
419
420 ! Homogeneous freezing temperature
421 real(wp), parameter :: hgfr = 235.16
422
423
424 real(wp) :: r_uni = 8.314 ! J (mol K)-1
425
426 real(dp) :: k_b = 1.38065e-23 ! Boltzmann constant [J/K]
427 real(dp) :: m_w = 18.01528e-3 ! molecular mass of water [kg/mol]
428 real(dp) :: m_a = 28.96e-3 ! molecular mass of air [kg/mol]
429 real(dp) :: n_avo = 6.022e23 ! Avogadro number [1/mol]
430 real(dp) :: ma_w ! mass of water molecule [kg] (= M_w / N_avo, set in mp_tempo_params_init)
431 real(wp) :: ar_volume ! assume radius of 0.025 micrometer, 2.5e-6 cm (= 4.0 / 3.0 * PI * (2.5e-6)**3, set in mp_tempo_params_init)
432
433
434 ! Aerosol table parameter: Number of available aerosols, vertical
435 ! velocity, temperature, aerosol mean radius, and hygroscopicity.
436 real(wp), dimension(ntb_arc), parameter :: &
437 ta_na = (/10.0, 31.6, 100.0, 316.0, 1000.0, 3160.0, 10000.0/)
438 real(wp), dimension(ntb_arw), parameter :: &
439 ta_ww = (/0.01, 0.0316, 0.1, 0.316, 1.0, 3.16, 10.0, 31.6, 100.0/)
440 real(wp), dimension(ntb_art), parameter :: &
441 ta_tk = (/243.15, 253.15, 263.15, 273.15, 283.15, 293.15, 303.15/)
442 real(wp), dimension(ntb_arr), parameter :: &
443 ta_ra = (/0.01, 0.02, 0.04, 0.08, 0.16/)
444 real(wp), dimension(ntb_ark), parameter :: &
445 ta_ka = (/0.2, 0.4, 0.6, 0.8/)
446
447 ! For snow moments conversions (from Field et al. 2005)
448 real(wp), dimension(10), parameter :: &
449 sa = (/ 5.065339, -0.062659, -3.032362, 0.029469, -0.000285, &
450 0.31255, 0.000204, 0.003199, 0.0, -0.015952/)
451 real(wp), dimension(10), parameter :: &
452 sb = (/ 0.476221, -0.015896, 0.165977, 0.007468, -0.000141, &
453 0.060366, 0.000079, 0.000594, 0.0, -0.003577/)
454
455 ! Temperatures (5 C interval 0 to -40) used in lookup tables.
456 real(wp), dimension(ntb_t), parameter :: &
457 tc = (/-0.01, -5., -10., -15., -20., -25., -30., -35., -40./)
458
459#if defined(ccpp_default)
460 ! To permit possible creation of new lookup tables as variables expand/change,
461 ! specify a name of external file(s) including version number for pre-computed
462 ! Thompson tables.
463 character(len=*), parameter :: thomp_table_file = 'thompson_tables_precomp_v2.sl'
464 character(len=*), parameter :: qr_acr_qg_file = 'MP_TEMPO_QRacrQG.dat'
465 character(len=*), parameter :: qr_acr_qg_hailaware_file = 'MP_TEMPO_HAILAWARE_QRacrQG.dat'
466 character(len=*), parameter :: qr_acr_qs_file = 'MP_TEMPO_QRacrQS.dat'
467 character(len=*), parameter :: freeze_h2o_file = 'MP_TEMPO_freezeH2O.dat'
468
469 ! Min and max radiative effective radius of cloud water, cloud ice, and snow;
470 ! performed by subroutine calc_effectRad. On purpose, these should stay PUBLIC.
471 real(wp), parameter :: re_qc_min = 2.50e-6 ! 2.5 microns
472 real(wp), parameter :: re_qc_max = 50.0e-6 ! 50 microns
473 real(wp), parameter :: re_qi_min = 2.50e-6 ! 2.5 microns
474 real(wp), parameter :: re_qi_max = 125.0e-6 ! 125 microns
475 real(wp), parameter :: re_qs_min = 5.00e-6 ! 5 microns
476 real(wp), parameter :: re_qs_max = 999.0e-6 ! 999 microns (1 mm)
477
478 ! MPI communicator
479 type(mpi_comm) :: mpi_communicator
480
481 ! Write tables with master MPI task after computing them in tempo_init
482 logical :: thompson_table_writer
483#endif
484
485 ! ML data
486 integer, parameter :: nc_ml_input = 7
487 integer, parameter :: nc_ml_nodes = 24
488 integer, parameter :: nc_ml_output = 1
489
490 integer, parameter :: nr_ml_input = 7
491 integer, parameter :: nr_ml_nodes = 24
492 integer, parameter :: nr_ml_output = 1
493
494 real(wp), dimension(nc_ml_input), parameter :: &
495 nc_ml_trans_mean = (/0.000184549468444656, 2.82753321185558e-05, &
496 2.28805854616895e-07, 6.58700882098648e-05, 84142.0407488623, &
497 275.273903970569, 0.104461576672394/)
498 real(wp), dimension(nc_ml_input), parameter :: &
499 nc_ml_trans_var = (/5.05620015304623e-08, 1.45515502768552e-08, &
500 1.94012756342739e-11, 4.30246362061344e-08, 140316880.172549, &
501 71.5124250320993, 0.265261175700759/)
502
503 real(wp), dimension(nc_ml_input * nc_ml_nodes), parameter :: &
504 nc_ml_w00 = (/2.224199, -1.393835e-32, 2.528453, -0.2449199, 2.625664, 0.107049, &
505 2.239675, -0.441944, 0.5798664, -3.495472, -0.09473098, 1.767392, &
506 -0.722639, -0.6872597, 0.7640355, 0.2941241, 1.413414e-32, -4.027426, &
507 -0.0885509, -0.1930209, 2.027927, 2.729985, 3.869902, -0.7086006, &
508 0.3556898, -1.545999e-32, 0.002439348, 0.07797334, 0.3065982, 0.1250733, &
509 -0.003919218, 0.02658273, 0.04677797, 0.001224378, -0.0450751, 0.54966, &
510 -0.09625612, -0.06435507, -0.06188935, 0.6316406, 1.438075e-32, 0.001260835, &
511 -0.6693181, -0.0726619, 0.313943, 0.08460538, 0.4238361, -0.1105529, &
512 -0.02594946, -1.571175e-32, 0.02000831, 0.0254104, 0.1613512, -0.1140745, &
513 0.07543574, 0.06550872, -0.00693186, -0.02249624, -0.1207949, 0.087761, &
514 0.003812449, -0.002278045, 0.0314725, 0.0824788, -1.607022e-32, -1.805405, &
515 0.1899621, -0.07471617, 0.1923102, 0.3078783, 0.1380734, -0.9808061, &
516 0.07569794, -1.458374e-32, 0.2184116, 0.09525398, -0.009037461, -1.004012, &
517 -0.4529723, -0.03389523, -0.5127279, 0.001164416, -0.3503374, -0.5206463, &
518 -0.6791449, -3.765049, -0.1630133, 0.2867654, -1.423354e-32, -0.000892627, &
519 -0.2104853, -0.9603029, 0.003026641, -0.02990868, 0.006338483, -0.1191584, &
520 0.01307624, 1.314499e-32, -0.1628825, -0.08426163, 0.01635959, 0.0214172, &
521 0.05406244, -0.07126028, 0.3039913, 0.005295561, -0.3454399, -0.005133086, &
522 0.0850361, 0.03916358, -0.07233618, -0.6070899, 1.435512e-32, -0.003379478, &
523 0.2966512, -0.1559436, 0.09629949, -0.0112761, -0.09785055, -0.02918944, &
524 -3.064122, 1.534848e-32, -0.0893663, 0.07659288, -1.701944, 0.9777426, &
525 0.794859, 0.07797011, 1.247827, -0.01696694, 0.0106477, 1.002509, &
526 1.440111, 0.3025449, -0.7814463, -0.3589398, 1.450329e-32, 0.006022078, &
527 -0.75178, -0.04612495, -2.27526, 0.2128798, -1.837864, 0.1171825, &
528 0.05044287, 1.60034e-32, -0.0266461, 1.557734, 0.06955704, -0.01070863, &
529 -0.05760999, 1.493531, -0.08257127, -0.0246272, -0.7703797, -0.04289152, &
530 -0.1313693, 0.02611825, 0.5722927, 0.2976797, -1.465193e-32, 0.006705693, &
531 -0.1825065, 0.09151408, 0.001714205, -0.0241104, -0.03077858, 0.119318/)
532 real(wp), dimension(nc_ml_nodes), parameter :: &
533 nc_ml_w01 = (/2.05212,-1.614832e-05,1.0335,-0.7872604,1.696272,0.8682101,-1.100169, &
534 0.5193954,-0.5440724,-23.27656,0.4010488,1.077693,-1.816235,8.917124,0.4402028, &
535 -0.2852043,-0.01313276,-70.52726,0.3490098,0.4163963,-1.772994,1.331957,-2.861476,0.7307689/)
536
537 real(wp), dimension(nc_ml_nodes), parameter :: &
538 nc_ml_b00 = (/1.411423, -0.009188521, 2.194735, -0.1570402, 2.083004, -0.02242614, &
539 1.345345, 0.3308931, -0.2128314, -2.824152, 0.06516771, 1.614252, &
540 -1.168782, -1.600044, 2.485356, -0.02002283, -0.6876131, -3.362524, &
541 1.999535, -0.1876818, 0.8209553, 2.305562, 2.347924, -0.2078552/)
542 real(wp), dimension(nc_ml_output), parameter :: &
543 nc_ml_b01 = (/1.966172/)
544
545 contains
546
547 subroutine mp_tempo_params_init()
548 ! Any variables defined in the module that are not constants/parameters are set here; if any of the values are overwritten (i.e. by a host model),
549 ! then they must be reinitialized once the new values from the host are used
550 lfus = lsub - lvap0
551 olfus = 1./lfus
552
553 orv = 1.0 / rv
554
555 am_r = pi * rho_w2 / 6.0
556
557 am_g = (/pi*rho_g(1)/6.0, &
558 pi*rho_g(2)/6.0, &
559 pi*rho_g(3)/6.0, &
560 pi*rho_g(4)/6.0, &
561 pi*rho_g(5)/6.0, &
562 pi*rho_g(6)/6.0, &
563 pi*rho_g(7)/6.0, &
564 pi*rho_g(8)/6.0, &
565 pi*rho_g(9)/6.0/)
566
567 am_i = pi * rho_i / 6.0
568
569 ma_w = m_w / n_avo
570
571 ar_volume = 4.0 / 3.0 * pi * (2.5e-6)**3
572
573 end subroutine mp_tempo_params_init
574
575end module module_mp_tempo_params