CCPP SciDoc v7.0.x  v7.0.0
Common Community Physics Package Developed at DTC
 
Loading...
Searching...
No Matches
module_gfdlmp_param.F90
1! #########################################################################################
2! #########################################################################################
4 use machine, only: kind_phys
5 implicit none
6 public :: read_gfdlmp_nml
7 private
8
9 ! #####################################################################################
10 ! GFDL MP Version 1 parameters.
11 ! #####################################################################################
12 real(kind_phys) :: tau_g2r = 600.
13 real(kind_phys) :: tau_g2v = 900.
14 real(kind_phys) :: tau_v2g = 21600.
15 real(kind_phys) :: qc_crt = 5.0e-8
16 real(kind_phys) :: qr0_crt = 1.0e-4
18 real(kind_phys) :: c_piacr = 5.0
19 real(kind_phys) :: c_cracw = 0.9
20 real(kind_phys) :: alin = 842.0
21 real(kind_phys) :: clin = 4.8
22 logical :: fast_sat_adj = .false.
23 logical :: use_ccn = .false.
24 logical :: use_ppm = .false.
25 logical :: mono_prof = .true.
26 logical :: mp_print = .false.
27 logical :: de_ice = .false.
28 logical :: sedi_transport = .true.
29
30 ! #####################################################################################
31 ! GFDL MP common (v1/v3) parameters
32 ! #####################################################################################
33 real(kind_phys) :: cld_min = 0.05
34 real(kind_phys) :: t_min = 178.
35 real(kind_phys) :: t_sub = 184.
36 real(kind_phys) :: mp_time = 150.
37 real(kind_phys) :: rh_inc = 0.25
38 real(kind_phys) :: rh_inr = 0.25
39 real(kind_phys) :: rh_ins = 0.25
40 real(kind_phys) :: tau_r2g = 900.
41 real(kind_phys) :: tau_smlt = 900.
42 real(kind_phys) :: tau_i2s = 1000.
43 real(kind_phys) :: tau_l2r = 900.
44 real(kind_phys) :: tau_v2l = 150.
45 real(kind_phys) :: tau_l2v = 300.
46 real(kind_phys) :: dw_land = 0.20
47 real(kind_phys) :: dw_ocean = 0.10
48 real(kind_phys) :: ccn_o = 90.
49 real(kind_phys) :: ccn_l = 270.
50 real(kind_phys) :: sat_adj0 = 0.90
51 real(kind_phys) :: qi_lim = 1.
52 real(kind_phys) :: ql_mlt = 2.0e-3
53 real(kind_phys) :: qs_mlt = 1.0e-6
54 real(kind_phys) :: ql_gen = 1.0e-3
55 real(kind_phys) :: qi_gen = 1.82e-6
56 real(kind_phys) :: ql0_max = 2.0e-3
57 real(kind_phys) :: qi0_max = 1.0e-4
58 real(kind_phys) :: qi0_crt = 1.0e-4
60 real(kind_phys) :: qs0_crt = 1.0e-3
61 real(kind_phys) :: c_paut = 0.55
62 real(kind_phys) :: vi_fac = 1.
63 real(kind_phys) :: vs_fac = 1.
64 real(kind_phys) :: vg_fac = 1.
65 real(kind_phys) :: vr_fac = 1.
66 real(kind_phys) :: vr_max = 12.
67 real(kind_phys) :: rewmin = 5.0
68 real(kind_phys) :: reimin = 10.0
69 real(kind_phys) :: reimax = 150.0
70 real(kind_phys) :: rermax = 10000.0
71 real(kind_phys) :: resmin = 150.0
72 real(kind_phys) :: resmax = 10000.0
73 real(kind_phys) :: regmax = 10000.0
74 !
75 logical :: const_vi = .false.
76 logical :: const_vs = .false.
77 logical :: const_vg = .false.
78 logical :: const_vr = .false.
79 logical :: z_slope_liq = .true.
80 logical :: do_hail = .false.
81 logical :: do_qa = .true.
82 logical :: rad_snow = .true.
83 logical :: rad_graupel = .true.
84 logical :: rad_rain = .true.
85 logical :: do_sedi_heat = .true.
86 logical :: prog_ccn = .false.
87 logical :: tintqs = .false.
88 !
89 integer :: icloud_f = 0
94 integer :: irain_f = 0
97
98 ! #####################################################################################
99 ! GFDL MP common (v1/v3) parameters, with different default values
100 ! #####################################################################################
101 real(kind_phys) :: tice = 273.16
102 real(kind_phys) :: tau_imlt = 600.
103 real(kind_phys) :: rthresh = 10.0e-6
104 real(kind_phys) :: c_psaci = 0.02
105 real(kind_phys) :: c_pgacs = 2.0e-3
106 real(kind_phys) :: vi_max = 0.5
107 real(kind_phys) :: vs_max = 5.0
108 real(kind_phys) :: vg_max = 8.0
109 real(kind_phys) :: rewmax = 10.0
110 real(kind_phys) :: rermin = 10.0
111 real(kind_phys) :: regmin = 300.0
112 logical :: z_slope_ice = .false.
113 logical :: do_sedi_w = .false.
114 logical :: fix_negative = .false.
115 integer :: reiflag = 1
123
124 ! #####################################################################################
125 ! GFDL MP Version 3 parameters
126 ! #####################################################################################
127 logical :: const_vw = .false.
128 logical :: do_sedi_uv = .true.
129 logical :: do_sedi_melt = .true.
130 logical :: liq_ice_combine = .false.
131 logical :: snow_grauple_combine = .true.
132 logical :: use_rhc_cevap = .false.
133 logical :: use_rhc_revap = .false.
134 logical :: do_cld_adj = .false.
135 logical :: do_evap_timescale = .true.
136 logical :: do_cond_timescale = .false.
137 logical :: consv_checker = .false.
138 logical :: do_warm_rain_mp = .false.
139 logical :: do_wbf = .false.
140 logical :: do_psd_water_fall = .false.
141 logical :: do_psd_ice_fall = .false.
142 logical :: do_psd_water_num = .false.
143 logical :: do_psd_ice_num = .false.
144 logical :: do_new_acc_water = .false.
145 logical :: do_new_acc_ice = .false.
146 logical :: cp_heating = .false.
147 logical :: delay_cond_evap = .false.
148 logical :: do_subgrid_proc = .true.
149 logical :: fast_fr_mlt = .true.
150 logical :: fast_dep_sub = .true.
151 integer :: ntimes = 1
152 integer :: nconds = 1
153 integer :: inflag = 1
159 integer :: igflag = 3
164 integer :: ifflag = 1
167 integer :: rewflag = 1
172 integer :: rerflag = 1
174 integer :: resflag = 1
176 integer :: regflag = 1
178 integer :: radr_flag = 1
182 integer :: rads_flag = 1
186 integer :: radg_flag = 1
190 integer :: sedflag = 1
195 integer :: vdiffflag = 1
199 real(kind_phys) :: c_psacw = 1.0
200 real(kind_phys) :: c_pracw = 0.8
201 real(kind_phys) :: c_praci = 1.0
202 real(kind_phys) :: c_pgacw = 1.0
203 real(kind_phys) :: c_pgaci = 0.05
204 real(kind_phys) :: c_pracs = 1.0
205 real(kind_phys) :: c_psacr = 1.0
206 real(kind_phys) :: c_pgacr = 1.0
207 real(kind_phys) :: alinw = 3.e7
208 real(kind_phys) :: alini = 7.e2
209 real(kind_phys) :: alinr = 842.0
210 real(kind_phys) :: alins = 4.8
211 real(kind_phys) :: aling = 1.0
212 real(kind_phys) :: alinh = 1.0
213 real(kind_phys) :: blinw = 2.0
214 real(kind_phys) :: blini = 1.0
215 real(kind_phys) :: blinr = 0.8
216 real(kind_phys) :: blins = 0.25
217 real(kind_phys) :: bling = 0.5
218 real(kind_phys) :: blinh = 0.5
219 real(kind_phys) :: vw_fac = 1.0
220 real(kind_phys) :: vw_max = 0.01
221 real(kind_phys) :: tice_mlt = 273.16
222 real(kind_phys) :: tau_gmlt = 600.0
223 real(kind_phys) :: tau_wbf = 300.0
224 real(kind_phys) :: tau_revp = 0.0
225 real(kind_phys) :: is_fac = 0.2
226 real(kind_phys) :: ss_fac = 0.2
227 real(kind_phys) :: gs_fac = 0.2
228 real(kind_phys) :: rh_fac_evap = 10.0
229 real(kind_phys) :: rh_fac_cond = 10.0
230 real(kind_phys) :: sed_fac = 1.0
231 real(kind_phys) :: xr_a = 0.25
232 real(kind_phys) :: xr_b = 100.0
233 real(kind_phys) :: xr_c = 0.49
234 real(kind_phys) :: te_err = 1.e-5
235 real(kind_phys) :: tw_err = 1.e-8
236 real(kind_phys) :: rh_thres = 0.75
237 real(kind_phys) :: rhc_cevap = 0.85
238 real(kind_phys) :: rhc_revap = 0.85
239 real(kind_phys) :: f_dq_p = 1.0
240 real(kind_phys) :: f_dq_m = 1.0
241 real(kind_phys) :: fi2s_fac = 1.0
242 real(kind_phys) :: fi2g_fac = 1.0
243 real(kind_phys) :: fs2g_fac = 1.0
244 real(kind_phys) :: n0w_sig = 1.1
245 real(kind_phys) :: n0i_sig = 1.3
246 real(kind_phys) :: n0r_sig = 8.0
247 real(kind_phys) :: n0s_sig = 3.0
248 real(kind_phys) :: n0g_sig = 4.0
249 real(kind_phys) :: n0h_sig = 4.0
250 real(kind_phys) :: n0w_exp = 41
251 real(kind_phys) :: n0i_exp = 18
252 real(kind_phys) :: n0r_exp = 6
253 real(kind_phys) :: n0s_exp = 6
254 real(kind_phys) :: n0g_exp = 6
255 real(kind_phys) :: n0h_exp = 4
256 real(kind_phys) :: muw = 6.0
257 real(kind_phys) :: mui = 3.35
258 real(kind_phys) :: mur = 1.0
259 real(kind_phys) :: mus = 1.0
260 real(kind_phys) :: mug = 1.0
261 real(kind_phys) :: muh = 1.0
262 real(kind_phys) :: beta = 1.22
263 real(kind_phys) :: rewfac = 1.0
267 real(kind_phys) :: reifac = 1.0
271
272 ! #######################################################################################
273 ! NAMELISTS
274 ! #######################################################################################
275
276 ! V1 namelist
277 namelist / gfdl_cloud_microphysics_nml / &
278 mp_time, t_min, t_sub, tau_r2g, tau_smlt, tau_g2r, dw_land, dw_ocean, vi_fac, &
279 vr_fac, vs_fac, vg_fac, ql_mlt, do_qa, fix_negative, vi_max, vs_max, vg_max, &
280 vr_max, qs_mlt, qs0_crt, qi_gen, ql0_max, qi0_max, qi0_crt, qr0_crt, fast_sat_adj, &
281 rh_inc, rh_ins, rh_inr, const_vi, const_vs, const_vg, const_vr, use_ccn, rthresh, &
282 ccn_l, ccn_o, qc_crt, tau_g2v, tau_v2g, sat_adj0, c_piacr, tau_imlt, tau_v2l, &
283 tau_l2v, tau_i2s, tau_l2r, qi_lim, ql_gen, c_paut, c_psaci, c_pgacs, z_slope_liq, &
284 z_slope_ice, prog_ccn, c_cracw, alin, clin, tice, rad_snow, rad_graupel, rad_rain, &
285 cld_min, use_ppm, mono_prof, do_sedi_heat, sedi_transport, do_sedi_w, de_ice, &
286 icloud_f, irain_f, mp_print, reiflag, rewmin, rewmax, reimin, reimax, rermin, &
287 rermax, resmin, resmax, regmin, regmax, tintqs, do_hail
288
289 ! V3 Namelist
290 namelist / gfdl_cloud_microphysics_v3_nml / &
291 t_min, t_sub, tau_r2g, tau_smlt, tau_gmlt, dw_land, dw_ocean, vw_fac, vi_fac, &
292 vr_fac, vs_fac, vg_fac, ql_mlt, do_qa, fix_negative, vw_max, vi_max, vs_max, &
293 vg_max, vr_max, qs_mlt, qs0_crt, ql0_max, qi0_max, qi0_crt, ifflag, rh_inc, rh_ins,&
294 rh_inr, const_vw, const_vi, const_vs, const_vg, const_vr, rthresh, ccn_l, ccn_o, &
295 igflag, c_paut, tau_imlt, tau_v2l, tau_l2v, tau_i2s, tau_l2r, qi_lim, ql_gen, &
296 do_hail, inflag, c_psacw, c_psaci, c_pracs, c_psacr, c_pgacr, c_pgacs, c_pgacw, &
297 c_pgaci, z_slope_liq, z_slope_ice, prog_ccn, c_pracw, c_praci, rad_snow, &
298 rad_graupel, rad_rain, cld_min, sedflag, sed_fac, do_sedi_uv, do_sedi_w, &
299 do_sedi_heat, icloud_f, irain_f, xr_a, xr_b, xr_c, ntimes, tau_revp, tice_mlt, &
300 do_cond_timescale, mp_time, consv_checker, te_err, tw_err, use_rhc_cevap, &
301 use_rhc_revap, tau_wbf, do_warm_rain_mp, rh_thres, f_dq_p, f_dq_m, do_cld_adj, &
302 rhc_cevap, rhc_revap, beta, liq_ice_combine, rewflag, reiflag, rerflag, resflag, &
303 regflag, rewmin, rewmax, reimin, reimax, rermin, rermax, resmin, resmax, regmin, &
304 regmax, fs2g_fac, fi2s_fac, fi2g_fac, do_sedi_melt, radr_flag, rads_flag, &
305 radg_flag, do_wbf, do_psd_water_fall, do_psd_ice_fall, n0w_sig, n0i_sig, n0r_sig, &
306 n0s_sig, n0g_sig, n0h_sig, n0w_exp, n0i_exp, n0r_exp, n0s_exp, n0g_exp, n0h_exp, &
307 muw, mui, mur, mus, mug, muh, alinw, alini, alinr, alins, aling, alinh, blinw, &
308 blini, blinr, blins, bling, blinh, do_new_acc_water, do_new_acc_ice, is_fac, &
309 ss_fac, gs_fac, rh_fac_evap, rh_fac_cond, snow_grauple_combine, do_psd_water_num, &
310 do_psd_ice_num, vdiffflag, rewfac, reifac, cp_heating, nconds, do_evap_timescale, &
311 delay_cond_evap, do_subgrid_proc, fast_fr_mlt, fast_dep_sub
312 !
313 public &
314 tau_g2r, tau_g2v, tau_v2g, qc_crt, qr0_crt, c_piacr, c_cracw, alin, clin, &
315 fast_sat_adj, use_ccn, use_ppm, mono_prof, mp_print, de_ice, sedi_transport, &
316 t_min, t_sub, tau_r2g, tau_smlt, tau_gmlt, dw_land, dw_ocean, vw_fac, vi_fac, &
317 vr_fac, vs_fac, vg_fac, ql_mlt, do_qa, fix_negative, vw_max, vi_max, vs_max, &
318 vg_max, vr_max, qs_mlt, qs0_crt, ql0_max, qi0_max, qi0_crt, ifflag, rh_inc, rh_ins,&
319 rh_inr, const_vw, const_vi, const_vs, const_vg, const_vr, rthresh, ccn_l, ccn_o, &
320 igflag, c_paut, tau_imlt, tau_v2l, tau_l2v, tau_i2s, tau_l2r, qi_lim, ql_gen, &
321 do_hail, inflag, c_psacw, c_psaci, c_pracs, c_psacr, c_pgacr, c_pgacs, c_pgacw, &
322 c_pgaci, z_slope_liq, z_slope_ice, prog_ccn, c_pracw, c_praci, rad_snow, &
323 rad_graupel, rad_rain, cld_min, sedflag, sed_fac, do_sedi_uv, do_sedi_w, &
324 do_sedi_heat, icloud_f, irain_f, xr_a, xr_b, xr_c, ntimes, tau_revp, tice_mlt, &
325 do_cond_timescale, mp_time, consv_checker, te_err, tw_err, use_rhc_cevap, &
326 use_rhc_revap, tau_wbf, do_warm_rain_mp, rh_thres, f_dq_p, f_dq_m, do_cld_adj, &
327 rhc_cevap, rhc_revap, beta, liq_ice_combine, rewflag, reiflag, rerflag, resflag, &
328 regflag, rewmin, rewmax, reimin, reimax, rermin, rermax, resmin, resmax, regmin, &
329 regmax, fs2g_fac, fi2s_fac, fi2g_fac, do_sedi_melt, radr_flag, rads_flag, &
330 radg_flag, do_wbf, do_psd_water_fall, do_psd_ice_fall, n0w_sig, n0i_sig, n0r_sig, &
331 n0s_sig, n0g_sig, n0h_sig, n0w_exp, n0i_exp, n0r_exp, n0s_exp, n0g_exp, n0h_exp, &
332 muw, mui, mur, mus, mug, muh, alinw, alini, alinr, alins, aling, alinh, blinw, &
333 blini, blinr, blins, bling, blinh, do_new_acc_water, do_new_acc_ice, is_fac, &
334 ss_fac, gs_fac, rh_fac_evap, rh_fac_cond, snow_grauple_combine, do_psd_water_num, &
335 do_psd_ice_num, vdiffflag, rewfac, reifac, cp_heating, nconds, do_evap_timescale, &
336 delay_cond_evap, do_subgrid_proc, fast_fr_mlt, fast_dep_sub, qi_gen, sat_adj0, &
337 tice, tintqs
338contains
339
340 ! #######################################################################################
341 ! Procedure to read GFDLMP namelists
342 ! #######################################################################################
343 subroutine read_gfdlmp_nml(errmsg, errflg, unit, input_nml_file, fn_nml, version, iostat)
344
345 character(len = *), intent(in ), optional :: input_nml_file(:)
346 character(len = *), intent(in ), optional :: fn_nml
347 integer, intent(in ), optional :: unit
348 integer, intent(in ), optional :: version
349 integer, intent(out), optional :: iostat
350 character(len=*), intent(out), optional :: errmsg
351 integer, intent(out), optional :: errflg
352 logical :: exists
353 ! Make sure that all inputs to read appropriate NML are provided, if not use default
354 ! parameters
355 if (present(unit) .and. present(iostat) .and. &
356 present(input_nml_file) .and. present(fn_nml) .and. &
357 present(version) .and. present(errflg) .and. &
358 present(errmsg)) then
359
360 if ((version .ne. 1) .and. (version .ne. 3)) then
361 write (6, *) 'gfdl - mp :: invalid scheme version number'
362 errflg = 1
363 errmsg = 'ERROR(module_gfdlmp_param): invalid scheme version number'
364 return
365 endif
366
367#ifdef INTERNAL_FILE_NML
368 if (version==1) read (input_nml_file, nml = gfdl_cloud_microphysics_nml)
369 if (version==3) read (input_nml_file, nml = gfdl_cloud_microphysics_v3_nml)
370#else
371 inquire (file = trim(fn_nml), exist = exists)
372 if (.not. exists) then
373 write (6, *) 'gfdl - mp :: namelist file: ', trim(fn_nml), ' does not exist'
374 errflg = 1
375 errmsg = 'ERROR(module_gfdlmp_param): namelist file '//trim(fn_nml)//' does not exist'
376 return
377 else
378 open (unit = unit, file = fn_nml, action = 'read' , status = 'old', iostat = iostat)
379 endif
380 rewind(unit)
381 if (version==1) read (unit, nml = gfdl_cloud_microphysics_nml)
382 if (version==3) read (unit, nml = gfdl_cloud_microphysics_v3_nml)
383 close (unit)
384#endif
385 endif
386 end subroutine read_gfdlmp_nml
387 !
388end module module_gfdlmp_param