110 integer,
public,
parameter ::
qa_mp = 11
128 'Ratio of Water Vapor mass to total mass (Specific humidity)', &
129 'Ratio of Cloud Water mass to total mass ', &
130 'Ratio of Rain Water mass to total mass ', &
131 'Ratio of Cloud Ice mass ratio to total mass ', &
132 'Ratio of Snow mass ratio to total mass ', &
133 'Ratio of Graupel mass ratio to total mass ', &
134 'Cloud Water Number Density ', &
135 'Rain Water Number Density ', &
136 'Cloud Ice Number Density ', &
137 'Snow Number Density ', &
138 'Graupel Number Density '/)
156 private :: mp_sn14_init
163 integer,
private,
parameter :: i_qv = 1
164 integer,
private,
parameter :: i_qc = 2
165 integer,
private,
parameter :: i_qr = 3
166 integer,
private,
parameter :: i_qi = 4
167 integer,
private,
parameter :: i_qs = 5
168 integer,
private,
parameter :: i_qg = 6
169 integer,
private,
parameter :: i_nc = 7
170 integer,
private,
parameter :: i_nr = 8
171 integer,
private,
parameter :: i_ni = 9
172 integer,
private,
parameter :: i_ns = 10
173 integer,
private,
parameter :: i_ng = 11
175 integer,
private,
parameter :: hydro_max = 5
177 integer,
private,
parameter :: i_mp_qc = 1
178 integer,
private,
parameter :: i_mp_qr = 2
179 integer,
private,
parameter :: i_mp_qi = 3
180 integer,
private,
parameter :: i_mp_qs = 4
181 integer,
private,
parameter :: i_mp_qg = 5
182 integer,
private,
parameter :: i_mp_nc = 6
183 integer,
private,
parameter :: i_mp_nr = 7
184 integer,
private,
parameter :: i_mp_ni = 8
185 integer,
private,
parameter :: i_mp_ns = 9
186 integer,
private,
parameter :: i_mp_ng = 10
190 integer,
parameter :: i_lcccn = 1
191 integer,
parameter :: i_ncccn = 2
192 integer,
parameter :: i_liccn = 3
193 integer,
parameter :: i_niccn = 4
195 integer,
parameter :: i_lchom = 5
196 integer,
parameter :: i_nchom = 6
197 integer,
parameter :: i_lchet = 7
198 integer,
parameter :: i_nchet = 8
199 integer,
parameter :: i_lrhet = 9
200 integer,
parameter :: i_nrhet = 10
202 integer,
parameter :: i_limlt = 11
203 integer,
parameter :: i_nimlt = 12
204 integer,
parameter :: i_lsmlt = 13
205 integer,
parameter :: i_nsmlt = 14
206 integer,
parameter :: i_lgmlt = 15
207 integer,
parameter :: i_ngmlt = 16
209 integer,
parameter :: i_lrdep = 17
210 integer,
parameter :: i_nrdep = 18
211 integer,
parameter :: i_lidep = 19
212 integer,
parameter :: i_nidep = 20
213 integer,
parameter :: i_lsdep = 21
214 integer,
parameter :: i_nsdep = 22
215 integer,
parameter :: i_lgdep = 23
216 integer,
parameter :: i_ngdep = 24
217 integer,
parameter :: i_lcdep = 25
221 integer,
parameter :: i_lcaut = 26
222 integer,
parameter :: i_ncaut = 27
223 integer,
parameter :: i_nraut = 28
225 integer,
parameter :: i_lcacc = 29
226 integer,
parameter :: i_ncacc = 30
228 integer,
parameter :: i_nrslc = 31
229 integer,
parameter :: i_nrbrk = 32
232 integer,
parameter :: i_licon = 33
233 integer,
parameter :: i_nicon = 34
234 integer,
parameter :: i_lscon = 35
235 integer,
parameter :: i_nscon = 36
237 integer,
parameter :: i_liacm = 37
238 integer,
parameter :: i_niacm = 38
239 integer,
parameter :: i_liarm = 39
240 integer,
parameter :: i_niarm = 40
241 integer,
parameter :: i_lsacm = 41
242 integer,
parameter :: i_nsacm = 42
243 integer,
parameter :: i_lsarm = 43
244 integer,
parameter :: i_nsarm = 44
245 integer,
parameter :: i_lgacm = 45
246 integer,
parameter :: i_ngacm = 46
247 integer,
parameter :: i_lgarm = 47
248 integer,
parameter :: i_ngarm = 48
250 integer,
parameter :: i_lgspl = 49
251 integer,
parameter :: i_lsspl = 50
252 integer,
parameter :: i_nispl = 51
253 integer,
parameter :: i_lihom = 52
254 integer,
parameter :: i_nihom = 53
256 integer,
parameter :: i_ngspl = 54
257 integer,
parameter :: i_nsspl = 55
259 integer,
parameter :: pq_max = 55
264 integer,
parameter :: i_liaclc2li = 1
265 integer,
parameter :: i_niacnc2ni = 2
266 integer,
parameter :: i_lsaclc2ls = 3
267 integer,
parameter :: i_nsacnc2ns = 4
268 integer,
parameter :: i_lgaclc2lg = 5
269 integer,
parameter :: i_ngacnc2ng = 6
270 integer,
parameter :: i_lracli2lg_i = 7
271 integer,
parameter :: i_nracni2ng_i = 8
272 integer,
parameter :: i_lracli2lg_r = 9
273 integer,
parameter :: i_nracni2ng_r = 10
274 integer,
parameter :: i_lracls2lg_s = 11
275 integer,
parameter :: i_nracns2ng_s = 12
276 integer,
parameter :: i_lracls2lg_r = 13
277 integer,
parameter :: i_nracns2ng_r = 14
278 integer,
parameter :: i_lraclg2lg = 15
279 integer,
parameter :: i_nracng2ng = 16
280 integer,
parameter :: i_liacli2ls = 17
281 integer,
parameter :: i_niacni2ns = 18
282 integer,
parameter :: i_liacls2ls = 19
283 integer,
parameter :: i_niacns2ns = 20
284 integer,
parameter :: i_nsacns2ns = 21
285 integer,
parameter :: i_ngacng2ng = 22
286 integer,
parameter :: i_lgacls2lg = 23
287 integer,
parameter :: i_ngacns2ng = 24
288 integer,
parameter :: i_lraclg2lr = 25
289 integer,
parameter :: i_nracng2nr = 26
290 integer,
parameter :: i_liaclg2lg = 27
291 integer,
parameter :: i_niacng2ng = 28
292 integer,
parameter :: i_cgngacns2ng = 29
293 integer,
parameter :: i_cgngacni2ng = 30
295 integer,
parameter :: pac_max = 30
296 integer,
parameter :: pcrg_max = 30
299 integer,
private,
parameter :: w_nmax = pq_max + pac_max
300 character(len=H_SHORT),
private :: w_name(w_nmax)
302 data w_name /
'I_LCccn', &
388 real(
rp),
private,
allocatable :: w3d(:,:,:,:)
389 integer,
private :: hist_id(w_nmax), hist_idx(w_nmax)
390 integer,
private :: hist_max
393 real(
rp),
private,
parameter :: rhow = 1000.0_rp
394 real(
rp),
private,
parameter :: rhof = 100.0_rp
395 real(
rp),
private,
parameter :: rhog = 400.0_rp
399 real(
rp),
private,
parameter :: xc_min = 4.20e-15_rp
400 real(
rp),
private,
parameter :: xr_min = 2.60e-10_rp
401 real(
rp),
private,
parameter :: xi_min = 3.382e-13_rp
402 real(
rp),
private,
parameter :: xs_min = 1.847e-12_rp
403 real(
rp),
private,
parameter :: xg_min = 1.230e-10_rp
405 real(
rp),
private,
parameter :: xc_max = 2.6e-10_rp
406 real(
rp),
private,
parameter :: xr_max = 5.00e-6_rp
407 real(
rp),
private,
parameter :: xi_max = 1.377e-6_rp
408 real(
rp),
private,
parameter :: xs_max = 7.519e-6_rp
409 real(
rp),
private,
parameter :: xg_max = 4.900e-5_rp
411 real(
rp),
private,
parameter :: xmin_filter= xc_min
413 real(
rp),
private,
parameter :: rmin_re= 1.e-6_rp
416 real(
rp),
private,
parameter :: n0r_min= 2.5e+5_rp
417 real(
rp),
private,
parameter :: n0r_max= 2.0e+7_rp
418 real(
rp),
private,
parameter :: lambdar_min= 1.e+3_rp
419 real(
rp),
private,
parameter :: lambdar_max= 1.e+4_rp
421 real(
rp),
private,
parameter :: nc_min = 1.e+4_rp
422 real(
rp),
private,
parameter :: nr_min = 1.0_rp
423 real(
rp),
private,
parameter :: ni_min = 1.0_rp
424 real(
rp),
private,
parameter :: ns_min = 1.e-4_rp
425 real(
rp),
private,
parameter :: ng_min = 1.e-4_rp
427 real(
rp),
private,
parameter :: lc_min = xc_min*nc_min
428 real(
rp),
private,
parameter :: lr_min = xr_min*nr_min
429 real(
rp),
private,
parameter :: li_min = xi_min*ni_min
430 real(
rp),
private,
parameter :: ls_min = xs_min*ns_min
431 real(
rp),
private,
parameter :: lg_min = xg_min*ng_min
433 real(
rp),
private,
parameter :: x_sep = 2.6e-10_rp
435 real(
rp),
private,
parameter :: tem_min=100.0_rp
436 real(
rp),
private,
parameter :: rho_min=1.e-5_rp
437 real(
rp),
private,
parameter :: rhoi = 916.70_rp
439 integer,
private,
save :: ntmax_phase_change = 1
440 integer,
private,
save :: ntmax_collection = 1
443 real(
rp),
private,
parameter :: rho_0 = 1.280_rp
445 real(
rp),
allocatable,
private,
save :: nc_uplim_d(:,:,:)
448 real(
rp),
private,
parameter :: ka0 = 2.428e-2_rp
450 real(
rp),
private,
parameter :: dka_dt = 7.47e-5_rp
455 real(
rp),
private,
parameter :: mua0 = 1.718e-5_rp
457 real(
rp),
private,
parameter :: dmua_dt = 5.28e-8_rp
461 real(
rp),
private,
save :: xc_ccn = 1.e-12_rp
462 real(
rp),
private,
save :: xi_ccn = 1.e-12_rp
466 real(
rp),
private,
save :: cap(hydro_max)
470 real(
rp),
private,
save :: a_m(hydro_max), log_a_m(hydro_max)
471 real(
rp),
private,
save :: b_m(hydro_max)
476 real(
rp),
private,
save :: alpha_v(hydro_max,2), log_alpha_v(hydro_max,2)
477 real(
rp),
private,
save :: beta_v(hydro_max,2), log_beta_v(hydro_max,2)
478 real(
rp),
private,
save :: alpha_vn(hydro_max,2)
479 real(
rp),
private,
save :: beta_vn(hydro_max,2)
480 real(
rp),
private,
save :: gamma_v(hydro_max)
485 real(
rp),
private,
parameter :: pre0_vt = 300.e+2_rp
486 real(
rp),
private,
parameter :: tem0_vt = 233.0_rp
487 real(
rp),
private,
parameter :: a_pre0_vt = -0.1780_rp
488 real(
rp),
private,
parameter :: a_tem0_vt = -0.3940_rp
496 real(
rp),
private,
save :: nu(hydro_max)
497 real(
rp),
private,
save :: mu(hydro_max)
505 real(
rp),
private,
save :: a_area(hydro_max)
506 real(
rp),
private,
save :: b_area(hydro_max)
507 real(
rp),
private,
save :: ax_area(hydro_max)
508 real(
rp),
private,
save :: bx_area(hydro_max)
511 real(
rp),
private,
save :: a_rea(hydro_max)
512 real(
rp),
private,
save :: b_rea(hydro_max)
513 real(
rp),
private,
save :: a_rea2(hydro_max)
514 real(
rp),
private,
save :: b_rea2(hydro_max)
515 real(
rp),
private,
save :: a_rea3(hydro_max)
516 real(
rp),
private,
save :: b_rea3(hydro_max)
518 real(
rp),
private,
save :: a_d2vt(hydro_max)
519 real(
rp),
private,
save :: b_d2vt(hydro_max)
523 real(
rp),
private,
save :: coef_m2(hydro_max)
525 real(
rp),
private,
save :: coef_d6(hydro_max)
527 real(
rp),
private,
save :: coef_d3(hydro_max)
529 real(
rp),
private,
save :: coef_d(hydro_max)
531 real(
rp),
private,
save :: coef_d2v(hydro_max)
533 real(
rp),
private,
save :: coef_md2v(hydro_max)
536 real(
rp),
private,
save :: coef_r2(hydro_max)
537 real(
rp),
private,
save :: coef_r3(hydro_max)
538 real(
rp),
private,
save :: coef_re(hydro_max)
540 real(
rp),
private,
save :: coef_rea2(hydro_max)
541 real(
rp),
private,
save :: coef_rea3(hydro_max)
542 logical,
private,
save :: opt_m96_ice=.true.
543 logical,
private,
save :: opt_m96_column_ice=.false.
548 real(
rp),
private,
save :: coef_vt0(hydro_max,2), log_coef_vt0(hydro_max,2)
549 real(
rp),
private,
save :: coef_vt1(hydro_max,2), log_coef_vt1(hydro_max,2)
550 real(
rp),
private,
save :: coef_deplc
551 real(
rp),
private,
save :: coef_dave_n(hydro_max), log_coef_dave_n(hydro_max)
552 real(
rp),
private,
save :: coef_dave_l(hydro_max), log_coef_dave_l(hydro_max)
558 real(
rp),
private,
save :: d0_ni=261.76e-6_rp, log_d0_ni
559 real(
rp),
private,
save :: d0_li=398.54e-6_rp, log_d0_li
560 real(
rp),
private,
parameter :: d0_ns=270.03e-6_rp, log_d0_ns = log(d0_ns)
561 real(
rp),
private,
parameter :: d0_ls=397.47e-6_rp, log_d0_ls = log(d0_ls)
562 real(
rp),
private,
parameter :: d0_ng=269.08e-6_rp, log_d0_ng = log(d0_ng)
563 real(
rp),
private,
parameter :: d0_lg=376.36e-6_rp, log_d0_lg = log(d0_lg)
567 real(
rp),
private,
parameter :: coef_vtr_ar1=9.65_rp
569 real(
rp),
private,
parameter :: coef_vtr_br1=10.43_rp
570 real(
rp),
private,
parameter :: coef_vtr_cr1=600.0_rp
571 real(
rp),
private,
parameter :: coef_vtr_ar2=4.e+3_rp
572 real(
rp),
private,
parameter :: coef_vtr_br2=12.e+3_rp
573 real(
rp),
private,
parameter :: d_vtr_branch=0.745e-3_rp
575 real(
rp),
private,
parameter :: dr_eq = 1.10e-3_rp
580 real(
rp),
private,
save :: coef_a(hydro_max)
581 real(
rp),
private,
save :: coef_lambda(hydro_max)
585 real(
rp),
private,
save :: ah_vent (hydro_max,2)
586 real(
rp),
private,
save :: bh_vent (hydro_max,2)
587 real(
rp),
private,
save :: ah_vent0 (hydro_max,2)
588 real(
rp),
private,
save :: bh_vent0 (hydro_max,2)
589 real(
rp),
private,
save :: ah_vent1 (hydro_max,2)
590 real(
rp),
private,
save :: bh_vent1 (hydro_max,2)
592 real(
rp),
private,
save :: delta_b0 (hydro_max)
593 real(
rp),
private,
save :: delta_b1 (hydro_max)
594 real(
rp),
private,
save :: delta_ab0(hydro_max,hydro_max)
595 real(
rp),
private,
save :: delta_ab1(hydro_max,hydro_max)
597 real(
rp),
private,
save :: theta_b0 (hydro_max)
598 real(
rp),
private,
save :: theta_b1 (hydro_max)
599 real(
rp),
private,
save :: theta_ab0(hydro_max,hydro_max)
600 real(
rp),
private,
save :: theta_ab1(hydro_max,hydro_max)
602 logical,
private,
save :: opt_debug=.false.
604 logical,
private,
save :: opt_debug_inc=.true.
605 logical,
private,
save :: opt_debug_act=.true.
606 logical,
private,
save :: opt_debug_ree=.true.
607 logical,
private,
save :: opt_debug_bcs=.true.
609 logical,
save,
private :: opt_collection_bin = .false.
611 logical,
private,
save :: mp_doautoconversion = .true.
612 logical,
private,
save :: mp_couple_aerosol = .false.
613 real(
rp),
private,
save :: mp_ssw_lim = 1.e+1_rp
619 real(
rp),
private,
parameter :: c_ccn_ocean= 1.00e+8_rp
620 real(
rp),
private,
parameter :: c_ccn_land = 1.26e+9_rp
621 real(
rp),
private,
save :: c_ccn = 1.00e+8_rp
623 real(
rp),
private,
parameter :: kappa_ocean= 0.462_rp
624 real(
rp),
private,
parameter :: kappa_land = 0.308_rp
625 real(
rp),
private,
save :: kappa = 0.462_rp
626 real(
rp),
private,
save :: c_in = 1.0_rp
628 real(
rp),
private,
save :: nm_m92 = 1.e+3_rp
629 real(
rp),
private,
save :: am_m92 = -0.639_rp
630 real(
rp),
private,
save :: bm_m92 = 12.96_rp
632 real(
rp),
private,
save :: in_max = 1000.e+3_rp
633 real(
rp),
private,
save :: ssi_max= 0.60_rp
634 real(
rp),
private,
save :: ssw_max= 1.1_rp
636 real(
rp),
private,
save :: qke_min = 0.03_rp
637 real(
rp),
private,
save :: tem_ccn_low=233.150_rp
638 real(
rp),
private,
save :: tem_in_low =173.150_rp
639 logical,
private,
save :: nucl_twomey = .false.
640 logical,
private,
save :: inucl_w = .false.
641 logical,
private,
save :: so22_het = .false.
642 logical,
private,
save :: opt_nucleation_ice_hom = .false.
645 real(
rp),
private,
parameter :: rc_cr= 12.e-6_rp
646 real(
rp),
private,
save :: xc_cr
647 real(
rp),
private,
save :: alpha
648 real(
rp),
private,
save :: gm, lgm
653 real(
rp),
private,
save :: dc0 = 15.0e-6_rp
654 real(
rp),
private,
save :: dc1 = 40.0e-6_rp
655 real(
rp),
private,
save :: di0 = 150.0e-6_rp
656 real(
rp),
private,
save :: ds0 = 150.0e-6_rp
657 real(
rp),
private,
save :: dg0 = 150.0e-6_rp
659 real(
rp),
private,
save :: sigma_c=0.00_rp
660 real(
rp),
private,
save :: sigma_r=0.00_rp
661 real(
rp),
private,
save :: sigma_i=0.2_rp
662 real(
rp),
private,
save :: sigma_s=0.2_rp
663 real(
rp),
private,
save :: sigma_g=0.00_rp
665 real(
rp),
private,
save :: e_im = 0.80_rp
666 real(
rp),
private,
save :: e_sm = 0.80_rp
667 real(
rp),
private,
save :: e_gm = 1.00_rp
669 real(
rp),
private,
save :: e_ir=1.0_rp
670 real(
rp),
private,
save :: e_sr=1.0_rp
671 real(
rp),
private,
save :: e_gr=1.0_rp
672 real(
rp),
private,
save :: e_ii=1.0_rp
673 real(
rp),
private,
save :: e_si=1.0_rp
674 real(
rp),
private,
save :: e_gi=1.0_rp
675 real(
rp),
private,
save :: e_ss=1.0_rp
676 real(
rp),
private,
save :: e_gs=1.0_rp
677 real(
rp),
private,
save :: e_gg=1.0_rp
680 integer,
private,
save :: i_iconv2g=1
681 integer,
private,
save :: i_sconv2g=1
683 real(
rp),
private,
save :: rho_g = 900.0_rp
685 real(
rp),
private,
save :: cfill_i = 0.68_rp
686 real(
rp),
private,
save :: cfill_s = 0.01_rp
688 real(
rp),
private,
save :: di_cri = 500.e-6_rp
689 logical,
private,
save :: opt_stick_ks96=.false.
690 logical,
private,
save :: opt_stick_co86=.false.
692 logical,
private,
save :: opt_stick_rhh57=.false.
693 logical,
private,
save :: opt_stick_rhks96=.false.
694 real(
rp),
private,
save :: tem_min_estick=253.0_rp
695 logical,
private,
save :: opt_stick_c12=.false.
697 real(
rp),
private,
save :: fac_cndc = 1.0_rp
698 logical,
private,
save :: opt_fix_taucnd_c=.false.
703 real(
rp),
private,
save :: temc_lim_diff = -80.0_rp
721 integer,
intent(in) :: ka
722 integer,
intent(in) :: ia
723 integer,
intent(in) :: ja
725 namelist / param_atmos_phy_mp_sn14 / &
726 mp_doautoconversion, &
735 log_info(
"ATMOS_PHY_MP_sn14_setup",*)
'Setup'
736 log_info(
"ATMOS_PHY_MP_sn14_setup",*)
'Seiki and Nakajima (2014) 2-moment bulk 6 category'
740 read(
io_fid_conf,nml=param_atmos_phy_mp_sn14,iostat=ierr)
742 log_info(
"ATMOS_PHY_MP_sn14_setup",*)
'Not found namelist. Default used.'
743 elseif( ierr > 0 )
then
744 log_error(
"ATMOS_PHY_MP_sn14_setup",*)
'Not appropriate names in namelist PARAM_ATMOS_PHY_MP_SN14. Check!'
747 log_nml(param_atmos_phy_mp_sn14)
751 allocate(nc_uplim_d(1,ia,ja))
752 nc_uplim_d(:,:,:) = 150.e6_rp
757 call file_history_reg( w_name(ip),
'individual tendency term in SN14',
'kg/kg/s', &
759 if ( hist_id(ip) > 0 )
then
760 hist_max = hist_max + 1
761 hist_idx(ip) = hist_max
764 allocate( w3d(ka,ia,ja,hist_max) )
765 w3d(:,:,:,:) = 0.0_rp
774 deallocate(nc_uplim_d)
785 KA, KS, KE, IA, IS, IE, JA, JS, JE, &
812 integer,
intent(in) :: ka, ks, ke
813 integer,
intent(in) :: ia, is, ie
814 integer,
intent(in) :: ja, js, je
816 real(
rp),
intent(in) :: dens (ka,ia,ja)
817 real(
rp),
intent(in) :: w (ka,ia,ja)
818 real(
rp),
intent(in) :: qtrc (ka,ia,ja,
qa_mp)
819 real(
rp),
intent(in) :: pres(ka,ia,ja)
820 real(
rp),
intent(in) :: temp(ka,ia,ja)
821 real(
rp),
intent(in) :: qdry(ka,ia,ja)
822 real(
rp),
intent(in) :: cptot(ka,ia,ja)
823 real(
rp),
intent(in) :: cvtot(ka,ia,ja)
824 real(
rp),
intent(in) :: ccn (ka,ia,ja)
825 real(
dp),
intent(in) :: dt
826 real(
rp),
intent(in) :: cz( ka,ia,ja)
827 real(
rp),
intent(in) :: fz(0:ka,ia,ja)
829 real(
rp),
intent(out) :: rhoq_t (ka,ia,ja,
qa_mp)
830 real(
rp),
intent(out) :: rhoe_t (ka,ia,ja)
831 real(
rp),
intent(out) :: cptot_t(ka,ia,ja)
832 real(
rp),
intent(out) :: cvtot_t(ka,ia,ja)
833 real(
rp),
intent(out) :: evaporate(ka,ia,ja)
836 logical,
intent(in),
optional :: flg_lt
837 real(
rp),
intent(in),
optional :: d0_crg, v0_crg
838 real(
rp),
intent(in),
optional :: dqcrg(ka,ia,ja)
839 real(
rp),
intent(in),
optional :: beta_crg(ka,ia,ja)
840 real(
rp),
intent(in),
optional :: qtrc_crg(ka,ia,ja,hydro_max)
841 real(
rp),
intent(out),
optional :: qsplt_in(ka,ia,ja,3)
842 real(
rp),
intent(out),
optional :: sarea(ka,ia,ja,hydro_max)
843 real(
rp),
intent(out),
optional :: rhoqcrg_t(ka,ia,ja,hydro_max)
846 log_progress(*)
'atmosphere / physics / microphysics / SN14'
854 ka, ks, ke, ia, is, ie, ja, js, je, &
855 dens(:,:,:), w(:,:,:), qtrc(:,:,:,:), pres(:,:,:), temp(:,:,:), &
856 qdry(:,:,:), cptot(:,:,:), cvtot(:,:,:), ccn(:,:,:), &
857 real(dt,
rp), cz(:,:,:), fz(:,:,:), &
858 rhoq_t(:,:,:,:), rhoe_t(:,:,:), cptot_t(:,:,:), cvtot_t(:,:,:), &
860 flg_lt, d0_crg, v0_crg, dqcrg(:,:,:), beta_crg(:,:,:), &
862 qsplt_in(:,:,:,:), sarea(:,:,:,:), rhoqcrg_t(:,:,:,:) )
876 KA, KS, KE, IA, IS, IE, JA, JS, JE, &
881 integer,
intent(in) :: ka, ks, ke
882 integer,
intent(in) :: ia, is, ie
883 integer,
intent(in) :: ja, js, je
885 real(
rp),
intent(in) :: qtrc (ka,ia,ja,
qa_mp-1)
886 real(
rp),
intent(in) :: mask_criterion
888 real(
rp),
intent(out) :: cldfrac(ka,ia,ja)
891 integer :: k, i, j, iq
900 do iq = i_mp_qc, i_mp_qg
901 qhydro = qhydro + qtrc(k,i,j,iq)
903 cldfrac(k,i,j) = 0.5_rp + sign(0.5_rp,qhydro-mask_criterion)
915 KA, KS, KE, IA, IS, IE, JA, JS, JE, &
916 DENS0, TEMP0, QTRC0, &
927 integer,
intent(in) :: ka, ks, ke
928 integer,
intent(in) :: ia, is, ie
929 integer,
intent(in) :: ja, js, je
931 real(
rp),
intent(in) :: dens0(ka,ia,ja)
932 real(
rp),
intent(in) :: temp0(ka,ia,ja)
933 real(
rp),
intent(in) :: qtrc0(ka,ia,ja,i_qc:i_ng)
935 real(
rp),
intent(out) :: re (ka,ia,ja,
n_hyd)
944 real(
rp) :: dc_ave(ka)
945 real(
rp) :: dr_ave(ka)
949 real(
rp) :: ri2m(ka), ri3m(ka)
950 real(
rp) :: rs2m(ka), rs3m(ka)
951 real(
rp) :: rg2m(ka), rg3m(ka)
953 real(
rp),
parameter :: coef_fuetal1998 = 3.0_rp / (4.0_rp*rhoi)
956 real(
rp),
parameter :: r2m_min=1.e-12_rp
957 real(
rp),
parameter :: um2cm = 100.0_rp
959 real(
rp) :: limitsw, zerosw
971 xc(k) = min( xc_max, max( xc_min, dens0(k,i,j)*qtrc0(k,i,j,i_qc)/(qtrc0(k,i,j,i_nc)+nc_min) ) )
972 xr(k) = min( xr_max, max( xr_min, dens0(k,i,j)*qtrc0(k,i,j,i_qr)/(qtrc0(k,i,j,i_nr)+nr_min) ) )
973 xi(k) = min( xi_max, max( xi_min, dens0(k,i,j)*qtrc0(k,i,j,i_qi)/(qtrc0(k,i,j,i_ni)+ni_min) ) )
974 xs(k) = min( xs_max, max( xs_min, dens0(k,i,j)*qtrc0(k,i,j,i_qs)/(qtrc0(k,i,j,i_ns)+ns_min) ) )
975 xg(k) = min( xg_max, max( xg_min, dens0(k,i,j)*qtrc0(k,i,j,i_qg)/(qtrc0(k,i,j,i_ng)+ng_min) ) )
980 dc_ave(k) = a_m(i_mp_qc) * xc(k)**b_m(i_mp_qc)
981 dr_ave(k) = a_m(i_mp_qr) * xr(k)**b_m(i_mp_qr)
986 rc = 0.5_rp * dc_ave(k)
987 limitsw = 0.5_rp + sign(0.5_rp, rc-rmin_re )
988 re(k,i,j,
i_hc) = coef_re(i_mp_qc) * rc * limitsw * um2cm
993 rr = 0.5_rp * dr_ave(k)
994 limitsw = 0.5_rp + sign(0.5_rp, rr-rmin_re )
995 re(k,i,j,
i_hr) = coef_re(i_mp_qr) * rr * limitsw * um2cm
999 ri2m(k) = pi * coef_rea2(i_mp_qi) * qtrc0(k,i,j,i_ni) * a_rea2(i_mp_qi) * xi(k)**b_rea2(i_mp_qi)
1000 rs2m(k) = pi * coef_rea2(i_mp_qs) * qtrc0(k,i,j,i_ns) * a_rea2(i_mp_qs) * xs(k)**b_rea2(i_mp_qs)
1001 rg2m(k) = pi * coef_rea2(i_mp_qg) * qtrc0(k,i,j,i_ng) * a_rea2(i_mp_qg) * xg(k)**b_rea2(i_mp_qg)
1006 ri3m(k) = coef_fuetal1998 * qtrc0(k,i,j,i_ni) * xi(k)
1007 rs3m(k) = coef_fuetal1998 * qtrc0(k,i,j,i_ns) * xs(k)
1008 rg3m(k) = coef_fuetal1998 * qtrc0(k,i,j,i_ng) * xg(k)
1013 zerosw = 0.5_rp - sign(0.5_rp, ri2m(k) - r2m_min )
1014 re(k,i,j,
i_hi) = ri3m(k) / ( ri2m(k) + zerosw ) * ( 1.0_rp - zerosw ) * um2cm
1019 zerosw = 0.5_rp - sign(0.5_rp, rs2m(k) - r2m_min )
1020 re(k,i,j,
i_hs) = rs3m(k) / ( rs2m(k) + zerosw ) * ( 1.0_rp - zerosw ) * um2cm
1025 zerosw = 0.5_rp - sign(0.5_rp, rg2m(k) - r2m_min )
1026 re(k,i,j,
i_hg) = rg3m(k) / ( rg2m(k) + zerosw ) * ( 1.0_rp - zerosw ) * um2cm
1030 re(k,i,j,
i_hh) = 0.0_rp
1044 KA, KS, KE, IA, IS, IE, JA, JS, JE, &
1056 integer,
intent(in) :: ka, ks, ke
1057 integer,
intent(in) :: ia, is, ie
1058 integer,
intent(in) :: ja, js, je
1060 real(
rp),
intent(in) :: qtrc0(ka,ia,ja,
qa_mp-1)
1062 real(
rp),
intent(out) :: qe (ka,ia,ja,
n_hyd)
1072 qe(k,i,j,
i_hc) = qtrc0(k,i,j,i_mp_qc)
1073 qe(k,i,j,
i_hr) = qtrc0(k,i,j,i_mp_qr)
1074 qe(k,i,j,
i_hi) = qtrc0(k,i,j,i_mp_qi)
1075 qe(k,i,j,
i_hs) = qtrc0(k,i,j,i_mp_qs)
1076 qe(k,i,j,
i_hg) = qtrc0(k,i,j,i_mp_qg)
1077 qe(k,i,j,
i_hh) = 0.0_rp
1087 KA, KS, KE, IA, IS, IE, JA, JS, JE, &
1099 integer,
intent(in) :: ka, ks, ke
1100 integer,
intent(in) :: ia, is, ie
1101 integer,
intent(in) :: ja, js, je
1103 real(
rp),
intent(in) :: qtrc0(ka,ia,ja,
qa_mp-1)
1105 real(
rp),
intent(out) :: ne (ka,ia,ja,
n_hyd)
1115 ne(k,i,j,
i_hc) = qtrc0(k,i,j,i_mp_nc)
1116 ne(k,i,j,
i_hr) = qtrc0(k,i,j,i_mp_nr)
1117 ne(k,i,j,
i_hi) = qtrc0(k,i,j,i_mp_ni)
1118 ne(k,i,j,
i_hs) = qtrc0(k,i,j,i_mp_ns)
1119 ne(k,i,j,
i_hg) = qtrc0(k,i,j,i_mp_ng)
1120 ne(k,i,j,
i_hh) = 0.0_rp
1129 KA, KS, KE, IA, IS, IE, JA, JS, JE, &
1145 integer,
intent(in) :: ka, ks, ke
1146 integer,
intent(in) :: ia, is, ie
1147 integer,
intent(in) :: ja, js, je
1149 real(
rp),
intent(in) :: qe(ka,ia,ja,
n_hyd)
1151 real(
rp),
intent(out) :: qtrc(ka,ia,ja,
qa_mp-1)
1153 real(
rp),
intent(in),
optional :: qnum(ka,ia,ja,
n_hyd)
1155 real(
rp),
parameter :: dc = 20.e-6_rp
1156 real(
rp),
parameter :: dr = 200.e-6_rp
1157 real(
rp),
parameter :: di = 80.e-6_rp
1158 real(
rp),
parameter :: ds = 80.e-6_rp
1159 real(
rp),
parameter :: dg = 200.e-6_rp
1160 real(
rp),
parameter :: b = 3.0_rp
1173 qtrc(k,i,j,i_mp_qc) = qe(k,i,j,
i_hc)
1183 qtrc(k,i,j,i_mp_qr) = qe(k,i,j,
i_hr)
1193 qtrc(k,i,j,i_mp_qi) = qe(k,i,j,
i_hi)
1203 qtrc(k,i,j,i_mp_qs) = qe(k,i,j,
i_hs)
1213 qtrc(k,i,j,i_mp_qg) = qe(k,i,j,
i_hg) + qe(k,i,j,
i_hh)
1220 if (
present(qnum) )
then
1227 if ( qnum(k,i,j,
i_hc) .ne. undef )
then
1228 qtrc(k,i,j,i_mp_nc) = qnum(k,i,j,
i_hc)
1230 qtrc(k,i,j,i_mp_nc) = qtrc(k,i,j,i_mp_qc) / ( (piov6*rhow) * dc**b )
1241 if ( qnum(k,i,j,
i_hr) .ne. undef )
then
1242 qtrc(k,i,j,i_mp_nr) = qnum(k,i,j,
i_hr)
1244 qtrc(k,i,j,i_mp_nr) = qtrc(k,i,j,i_mp_qr) / ( (piov6*rhow) * dr**b )
1255 if ( qnum(k,i,j,
i_hi) .ne. undef )
then
1256 qtrc(k,i,j,i_mp_ni) = qnum(k,i,j,
i_hi)
1258 qtrc(k,i,j,i_mp_ni) = qtrc(k,i,j,i_mp_qi) / ( (piov6*rhof) * di**b )
1269 if ( qnum(k,i,j,
i_hs) .ne. undef )
then
1270 qtrc(k,i,j,i_mp_ns) = qnum(k,i,j,
i_hs)
1272 qtrc(k,i,j,i_mp_ns) = qtrc(k,i,j,i_mp_qs) / ( (piov6*rhof) * ds**b )
1283 if ( qnum(k,i,j,
i_hg) .ne. undef )
then
1284 if ( qnum(k,i,j,
i_hh) .ne. undef )
then
1285 qtrc(k,i,j,i_mp_ng) = qnum(k,i,j,
i_hg) + qnum(k,i,j,
i_hh)
1287 qtrc(k,i,j,i_mp_ng) = qnum(k,i,j,
i_hg)
1290 qtrc(k,i,j,i_mp_ng) = qtrc(k,i,j,i_mp_qg) / ( (piov6*rhog) * dg**b )
1303 qtrc(k,i,j,i_mp_nc) = qtrc(k,i,j,i_mp_qc) / ( (piov6*rhow) * dc**b )
1313 qtrc(k,i,j,i_mp_nr) = qtrc(k,i,j,i_mp_qr) / ( (piov6*rhow) * dr**b )
1323 qtrc(k,i,j,i_mp_ni) = qtrc(k,i,j,i_mp_qi) / ( (piov6*rhof) * di**b )
1333 qtrc(k,i,j,i_mp_ns) = qtrc(k,i,j,i_mp_qs) / ( (piov6*rhof) * ds**b )
1343 qtrc(k,i,j,i_mp_ng) = qtrc(k,i,j,i_mp_qg) / ( (piov6*rhog) * dg**b )
1370 integer,
intent(in) :: ka, ks, ke
1372 real(
rp),
intent(in) :: rhoq(ka,i_qc:i_ng)
1373 real(
rp),
intent(in) :: dens(ka)
1374 real(
rp),
intent(in) :: temp(ka)
1375 real(
rp),
intent(in) :: pres(ka)
1377 real(
rp),
intent(out) :: vterm(ka,
qa_mp-1)
1379 real(
rp) :: xq, log_xq
1382 real(
rp) :: rhofac_q(ka), log_rhofac_q
1384 real(
rp) :: rlambdar(ka)
1386 real(
rp) :: dq, log_dq
1393 integer :: k, i, j, iq
1398 rhofac = rho_0 / max( dens(k), rho_min )
1400 log_rhofac_q = log(rhofac) * gamma_v(i_mp_qc)
1401 log_xq = log( max( xc_min, min( xc_max, rhoq(k,i_qc) / ( rhoq(k,i_nc) + nc_min ) ) ) )
1403 vterm(k,i_mp_qc) = - exp( log_rhofac_q + log_coef_vt1(i_mp_qc,1) + log_xq * beta_v(i_mp_qc,1) )
1405 vterm(k,i_mp_nc) = - exp( log_rhofac_q + log_coef_vt0(i_mp_qc,1) + log_xq * beta_vn(i_mp_qc,1) )
1409 mud_r = 3.0_rp * nu(i_mp_qr) + 2.0_rp
1411 rhofac = rho_0 / max( dens(k), rho_min )
1412 rhofac_q(k) = rhofac**gamma_v(i_mp_qr)
1415 xq = max( xr_min, min( xr_max, rhoq(k,i_qr) / ( rhoq(k,i_nr) + nr_min ) ) )
1417 rlambdar(k) = a_m(i_mp_qr) * xq**b_m(i_mp_qr) &
1418 * ( (mud_r+3.0_rp) * (mud_r+2.0_rp) * (mud_r+1.0_rp) )**(-0.333333333_rp)
1422 dq = ( 4.0_rp + mud_r ) * rlambdar(k)
1423 weight = min( 1.0_rp, max( 0.0_rp, 0.5_rp * ( 1.0_rp + tanh( pi * log( dq/d_vtr_branch ) ) ) ) )
1424 velq_s = coef_vtr_ar2 * dq &
1425 * ( 1.0_rp - ( 1.0_rp + coef_vtr_br2*rlambdar(k) )**(-5.0_rp-mud_r) )
1426 velq_l = coef_vtr_ar1 &
1427 - coef_vtr_br1 * ( 1.0_rp + coef_vtr_cr1*rlambdar(k) )**(-4.0_rp-mud_r)
1428 vterm(k,i_mp_qr) = -rhofac_q(k) * ( velq_l * ( weight ) &
1429 + velq_s * ( 1.0_rp - weight ) )
1433 dq = ( 1.0_rp + mud_r ) * rlambdar(k)
1434 weight = min( 1.0_rp, max( 0.0_rp, 0.5_rp * ( 1.0_rp + tanh( pi * log( dq/d_vtr_branch ) ) ) ) )
1435 velq_s = coef_vtr_ar2 * dq &
1436 * ( 1.0_rp - ( 1.0_rp + coef_vtr_br2*rlambdar(k) )**(-2.0_rp-mud_r) )
1437 velq_l = coef_vtr_ar1 &
1438 - coef_vtr_br1 * ( 1.0_rp + coef_vtr_cr1*rlambdar(k) )**(-1.0_rp-mud_r)
1439 vterm(k,i_mp_nr) = -rhofac_q(k) * ( velq_l * ( weight ) &
1440 + velq_s * ( 1.0_rp - weight ) )
1444 rhofac_q(k) = exp( log( pres(k)/pre0_vt ) * a_pre0_vt + log( temp(k)/tem0_vt ) * a_tem0_vt )
1450 log_xq = log( max( xi_min, min( xi_max, rhoq(k,i_qi) / ( rhoq(k,i_ni) + ni_min ) ) ) )
1452 tmp = log_a_m(i_mp_qi) + log_xq * b_m(i_mp_qi)
1453 log_dq = log_coef_dave_l(i_mp_qi) + tmp
1454 weight = min( 1.0_rp, max( 0.0_rp, 0.5_rp * ( 1.0_rp + log_dq - log_d0_li ) ) )
1456 velq_s = exp( log_coef_vt1(i_mp_qi,1) + log_xq * beta_v(i_mp_qi,1) )
1457 velq_l = exp( log_coef_vt1(i_mp_qi,2) + log_xq * beta_v(i_mp_qi,2) )
1458 vterm(k,i_mp_qi) = - rhofac_q(k) * ( velq_l * ( weight ) &
1459 + velq_s * ( 1.0_rp - weight ) )
1461 log_dq = log_coef_dave_n(i_mp_qi) + tmp
1462 weight = min( 1.0_rp, max( 0.0_rp, 0.5_rp * ( 1.0_rp + log_dq - log_d0_ni ) ) )
1464 velq_s = exp( log_coef_vt0(i_mp_qi,1) + log_xq * beta_vn(i_mp_qi,1) )
1465 velq_l = exp( log_coef_vt0(i_mp_qi,2) + log_xq * beta_vn(i_mp_qi,2) )
1466 vterm(k,i_mp_ni) = - rhofac_q(k) * ( velq_l * ( weight ) &
1467 + velq_s * ( 1.0_rp - weight ) )
1473 log_xq = log( max( xs_min, min( xs_max, rhoq(k,i_qs) / ( rhoq(k,i_ns) + ns_min ) ) ) )
1475 tmp = log_a_m(i_mp_qs) + log_xq * b_m(i_mp_qs)
1476 log_dq = log_coef_dave_l(i_mp_qs) + tmp
1477 weight = min( 1.0_rp, max( 0.0_rp, 0.5_rp * ( 1.0_rp + log_dq - log_d0_ls ) ) )
1479 velq_s = exp( log_coef_vt1(i_mp_qs,1) + log_xq * beta_v(i_mp_qs,1) )
1480 velq_l = exp( log_coef_vt1(i_mp_qs,2) + log_xq * beta_v(i_mp_qs,2) )
1481 vterm(k,i_mp_qs) = - rhofac_q(k) * ( velq_l * ( weight ) &
1482 + velq_s * ( 1.0_rp - weight ) )
1484 log_dq = log_coef_dave_n(i_mp_qs) + tmp
1485 weight = min( 1.0_rp, max( 0.0_rp, 0.5_rp * ( 1.0_rp + log_dq - log_d0_ns ) ) )
1487 velq_s = exp( log_coef_vt0(i_mp_qs,1) + log_xq * beta_vn(i_mp_qs,1) )
1488 velq_l = exp( log_coef_vt0(i_mp_qs,2) + log_xq * beta_vn(i_mp_qs,2) )
1489 vterm(k,i_mp_ns) = - rhofac_q(k) * ( velq_l * ( weight ) &
1490 + velq_s * ( 1.0_rp - weight ) )
1496 log_xq = log( max( xg_min, min( xg_max, rhoq(k,i_qg) / ( rhoq(k,i_ng) + ng_min ) ) ) )
1498 tmp = log_a_m(i_mp_qg) + log_xq * b_m(i_mp_qg)
1499 log_dq = log_coef_dave_l(i_mp_qg) + tmp
1500 weight = min( 1.0_rp, max( 0.0_rp, 0.5_rp * ( 1.0_rp + log_dq - log_d0_lg ) ) )
1502 velq_s = exp( log_coef_vt1(i_mp_qg,1) + log_xq * beta_v(i_mp_qg,1) )
1503 velq_l = exp( log_coef_vt1(i_mp_qg,2) + log_xq * beta_v(i_mp_qg,2) )
1504 vterm(k,i_mp_qg) = - rhofac_q(k) * ( velq_l * ( weight ) &
1505 + velq_s * ( 1.0_rp - weight ) )
1507 log_dq = log_coef_dave_n(i_mp_qg) + tmp
1508 weight = min( 1.0_rp, max( 0.0_rp, 0.5_rp * ( 1.0_rp + log_dq - log_d0_ng ) ) )
1510 velq_s = exp( log_coef_vt0(i_mp_qg,1) + log_xq * beta_vn(i_mp_qg,1) )
1511 velq_l = exp( log_coef_vt0(i_mp_qg,2) + log_xq * beta_vn(i_mp_qg,2) )
1512 vterm(k,i_mp_ng) = - rhofac_q(k) * ( velq_l * ( weight ) &
1513 + velq_s * ( 1.0_rp - weight ) )
1518 vterm(ks-1 ,iq) = vterm(ks,iq)
1528 subroutine mp_sn14_init
1535 real(
rp),
parameter :: eps_gamma=1.e-30_rp
1537 real(
rp) :: w1(hydro_max)
1538 real(
rp) :: w2(hydro_max)
1539 real(
rp) :: w3(hydro_max)
1540 real(
rp) :: w4(hydro_max)
1541 real(
rp) :: w5(hydro_max)
1542 real(
rp) :: w6(hydro_max)
1543 real(
rp) :: w7(hydro_max)
1544 real(
rp) :: w8(hydro_max)
1546 character(len=H_SHORT) :: wlabel(hydro_max)
1549 real(
rp) :: ar_ice_fix = 0.7_rp
1550 real(
rp) :: wcap1, wcap2
1552 logical :: flag_vent0(hydro_max), flag_vent1(hydro_max)
1554 integer :: iw, ia, ib
1557 namelist / param_atmos_phy_mp_sn14_init / &
1563 opt_collection_bin, &
1564 ntmax_phase_change, &
1567 namelist / param_atmos_phy_mp_sn14_particles / &
1568 a_m, b_m, alpha_v, beta_v, gamma_v, &
1569 alpha_vn, beta_vn, &
1570 a_area, b_area, cap, &
1572 opt_m96_column_ice, &
1576 namelist / param_atmos_phy_mp_sn14_nucleation / &
1579 nm_m92, am_m92, bm_m92, &
1584 nucl_twomey, inucl_w, &
1585 so22_het, opt_nucleation_ice_hom
1587 namelist / param_atmos_phy_mp_sn14_collection / &
1588 dc0, dc1, di0, ds0, dg0, &
1589 sigma_c, sigma_r, sigma_i, sigma_s, sigma_g, &
1593 e_ir, e_sr, e_gr, e_ii, e_si, e_gi, e_ss, e_gs, e_gg, &
1594 i_iconv2g, i_sconv2g, rho_g, cfill_i, cfill_s, di_cri
1597 namelist / param_atmos_phy_mp_sn14_collection_bin / &
1598 dc0, dc1, di0, ds0, dg0, &
1606 e_ir, e_sr, e_gr, e_ii, e_si, e_gi, e_ss, e_gs, e_gg, &
1607 i_iconv2g, i_sconv2g, rho_g, cfill_i, cfill_s, di_cri
1609 namelist / param_atmos_phy_mp_sn14_condensation / &
1610 opt_fix_taucnd_c, fac_cndc
1616 alpha_v(:,:) = undef8
1617 beta_v(:,:) = undef8
1618 alpha_vn(:,:) = undef8
1619 beta_vn(:,:) = undef8
1637 coef_dave_n(:) = undef8
1638 coef_dave_l(:) = undef8
1639 log_coef_dave_n(:) = undef8
1640 log_coef_dave_l(:) = undef8
1644 coef_d2v(:) = undef8
1645 coef_md2v(:) = undef8
1649 coef_rea2(:) = undef8
1650 coef_rea3(:) = undef8
1653 coef_lambda(:) = undef8
1654 coef_vt0(:,:) = undef8
1655 coef_vt1(:,:) = undef8
1656 log_coef_vt0(:,:) = undef8
1657 log_coef_vt1(:,:) = undef8
1658 delta_b0(:) = undef8
1659 delta_b1(:) = undef8
1660 delta_ab0(:,:) = undef8
1661 delta_ab1(:,:) = undef8
1662 theta_b0(:) = undef8
1663 theta_b1(:) = undef8
1664 theta_ab0(:,:) = undef8
1665 theta_ab1(:,:) = undef8
1667 ah_vent(:,:) = undef8
1668 ah_vent0(:,:) = undef8
1669 ah_vent1(:,:) = undef8
1670 bh_vent(:,:) = undef8
1671 bh_vent0(:,:) = undef8
1672 bh_vent1(:,:) = undef8
1676 read(
io_fid_conf,nml=param_atmos_phy_mp_sn14_init,iostat=ierr)
1679 log_info(
"ATMOS_PHY_MP_sn14_init",*)
'Not found namelist. Default used.'
1680 elseif( ierr > 0 )
then
1681 log_error(
"ATMOS_PHY_MP_sn14_init",*)
'Not appropriate names in namelist PARAM_ATMOS_PHY_MP_SN14_init. Check!'
1684 log_nml(param_atmos_phy_mp_sn14_init)
1690 a_area(i_mp_qc) = pi/4.0_rp
1691 a_area(i_mp_qr) = pi/4.0_rp
1692 a_area(i_mp_qi) = 0.65_rp*1.e-4_rp*100.0_rp**(2.00_rp)
1693 a_area(i_mp_qs) = 0.2285_rp*1.e-4_rp*100.0_rp**(1.88_rp)
1694 a_area(i_mp_qg) = 0.50_rp*1.e-4_rp*100.0_rp**(2.0_rp)
1695 b_area(i_mp_qc) = 2.0_rp
1696 b_area(i_mp_qr) = 2.0_rp
1697 b_area(i_mp_qi) = 2.0_rp
1698 b_area(i_mp_qs) = 1.88_rp
1699 b_area(i_mp_qg) = 2.0_rp
1705 a_m(i_mp_qc) = 0.124_rp
1706 a_m(i_mp_qr) = 0.124_rp
1707 a_m(i_mp_qi) = 0.217_rp
1708 a_m(i_mp_qs) = 8.156_rp
1709 a_m(i_mp_qg) = 0.190_rp
1710 b_m(i_mp_qc) = 1.0_rp/3.0_rp
1711 b_m(i_mp_qr) = 1.0_rp/3.0_rp
1712 b_m(i_mp_qi) = 0.302_rp
1713 b_m(i_mp_qs) = 0.526_rp
1714 b_m(i_mp_qg) = 0.323_rp
1718 alpha_v(i_mp_qc,:)= 3.75e+5_rp
1719 alpha_v(i_mp_qr,:)= 159.0_rp
1720 alpha_v(i_mp_qi,:)= 317.0_rp
1721 alpha_v(i_mp_qs,:)= 27.70_rp
1722 alpha_v(i_mp_qg,:)= 40.0_rp
1723 beta_v(i_mp_qc,:) = 2.0_rp/3.0_rp
1724 beta_v(i_mp_qr,:) = 0.266_rp
1725 beta_v(i_mp_qi,:) = 0.363_rp
1726 beta_v(i_mp_qs,:) = 0.216_rp
1727 beta_v(i_mp_qg,:) = 0.230_rp
1728 gamma_v(i_mp_qc) = 1.0_rp
1730 gamma_v(i_mp_qr) = 1.0_rp/2.0_rp
1731 gamma_v(i_mp_qi) = 1.0_rp/2.0_rp
1732 gamma_v(i_mp_qs) = 1.0_rp/2.0_rp
1733 gamma_v(i_mp_qg) = 1.0_rp/2.0_rp
1741 nu(i_mp_qc) = 1.0_rp
1742 nu(i_mp_qr) = -1.0_rp/3.0_rp
1743 nu(i_mp_qi) = 1.0_rp
1744 nu(i_mp_qs) = 1.0_rp
1745 nu(i_mp_qg) = 1.0_rp
1747 mu(i_mp_qc) = 1.0_rp
1748 mu(i_mp_qr) = 1.0_rp/3.0_rp
1749 mu(i_mp_qi) = 1.0_rp/3.0_rp
1750 mu(i_mp_qs) = 1.0_rp/3.0_rp
1751 mu(i_mp_qg) = 1.0_rp/3.0_rp
1760 cap(i_mp_qc) = 2.0_rp
1761 cap(i_mp_qr) = 2.0_rp
1763 cap(i_mp_qs) = 2.0_rp
1764 cap(i_mp_qg) = 2.0_rp
1766 alpha_vn(:,:) = alpha_v(:,:)
1767 beta_vn(:,:) = beta_v(:,:)
1775 read(
io_fid_conf,nml=param_atmos_phy_mp_sn14_particles,iostat=ierr)
1777 log_info(
"ATMOS_PHY_MP_sn14_init",*)
'Not found namelist. Default used.'
1778 elseif( ierr > 0 )
then
1779 log_error(
"ATMOS_PHY_MP_sn14_init",*)
'Not appropriate names in namelist PARAM_ATMOS_PHY_MP_SN14_particles. Check!'
1782 log_nml(param_atmos_phy_mp_sn14_particles)
1786 if( opt_m96_ice )
then
1790 a_area(i_mp_qi) = 0.120284936_rp
1791 a_area(i_mp_qs) = 0.131488_rp
1792 a_area(i_mp_qg) = 0.5_rp
1793 b_area(i_mp_qi) = 1.850000_rp
1794 b_area(i_mp_qs) = 1.880000_rp
1795 b_area(i_mp_qg) = 2.0_rp
1796 a_m(i_mp_qi) = 1.23655360084766_rp
1797 a_m(i_mp_qs) = a_m(i_mp_qi)
1798 a_m(i_mp_qg) = 0.346111225718402_rp
1799 b_m(i_mp_qi) = 0.408329930583912_rp
1800 b_m(i_mp_qs) = b_m(i_mp_qi)
1801 b_m(i_mp_qg) = 0.357142857142857_rp
1803 if( opt_m96_column_ice )
then
1806 a_area(i_mp_qi)= (0.684_rp*1.e-4_rp)*10.0_rp**(2.0_rp*2.00_rp)
1807 b_area(i_mp_qi)= 2.0_rp
1808 a_m(i_mp_qi) = 0.19834046116844_rp
1809 b_m(i_mp_qi) = 0.343642611683849_rp
1812 wcap1 = sqrt(1.0_rp-ar_ice_fix**2)
1813 wcap2 = log( (1.0_rp+wcap1)/ar_ice_fix )
1814 cap(i_mp_qi) = 2.0_rp*wcap2/wcap1
1823 if( opt_m96_column_ice )
then
1824 alpha_v(i_mp_qi,:) = (/2901.0_rp, 32.20_rp/)
1825 alpha_vn(i_mp_qi,:) = (/9675.2_rp, 64.16_rp/)
1827 alpha_v(i_mp_qi,:) =(/ 5798.60107421875_rp, 167.347076416016_rp/)
1828 alpha_vn(i_mp_qi,:) =(/ 12408.177734375_rp, 421.799865722656_rp/)
1830 alpha_v(i_mp_qs,:) =(/ 15173.3916015625_rp, 305.678619384766_rp/)
1831 alpha_vn(i_mp_qs,:) =(/ 29257.1601562500_rp, 817.985717773438_rp/)
1832 alpha_v(i_mp_qg,:) =(/ 15481.6904296875_rp, 311.642242431641_rp/)
1833 alpha_vn(i_mp_qg,:) =(/ 27574.6562500000_rp, 697.536132812500_rp/)
1835 beta_v(i_mp_qi,:) =(/ 0.504873454570770_rp, 0.324817866086960_rp/)
1836 beta_vn(i_mp_qi,:) =(/ 0.548495233058929_rp, 0.385287821292877_rp/)
1837 if( opt_m96_column_ice )
then
1838 beta_v(i_mp_qi,:) =(/ 0.465552181005478_rp, 0.223826110363007_rp/)
1839 beta_vn(i_mp_qi,:) =(/ 0.530453503131866_rp, 0.273761242628098_rp/)
1841 beta_v(i_mp_qs,:) =(/ 0.528109610080719_rp, 0.329863965511322_rp/)
1842 beta_vn(i_mp_qs,:) =(/ 0.567154467105865_rp, 0.393876969814301_rp/)
1843 beta_v(i_mp_qg,:) =(/ 0.534656763076782_rp, 0.330253750085831_rp/)
1844 beta_vn(i_mp_qg,:) =(/ 0.570551633834839_rp, 0.387124240398407_rp/)
1848 ax_area(:) = a_area(:)*a_m(:)**b_area(:)
1849 bx_area(:) = b_area(:)*b_m(:)
1853 a_rea(:) = sqrt(ax_area(:)/pi)
1854 b_rea(:) = bx_area(:)/2.0_rp
1855 a_rea2(:) = a_rea(:)**2
1856 b_rea2(:) = b_rea(:)*2.0_rp
1857 a_rea3(:) = a_rea(:)**3
1858 b_rea3(:) = b_rea(:)*3.0_rp
1860 a_d2vt(:)=alpha_v(:,2)*(1.0_rp/alpha_v(:,2))**(beta_v(:,2)/b_m(:))
1861 b_d2vt(:)=(beta_v(:,2)/b_m(:))
1881 w1(iw) = gammafunc( (n+nu(iw)+1.0_rp)/mu(iw) )
1882 w2(iw) = gammafunc( (nu(iw)+1.0_rp)/mu(iw) )
1883 w3(iw) = gammafunc( (nu(iw)+2.0_rp)/mu(iw) )
1884 coef_m2(iw) = w1(iw)/w2(iw)*( w2(iw)/w3(iw) )**n
1886 w4(iw) = gammafunc( (b_m(iw)+nu(iw)+1.0_rp)/mu(iw) )
1887 coef_d(iw) = a_m(iw) * w4(iw)/w2(iw)*( w2(iw)/w3(iw) )**b_m(iw)
1888 w5(iw) = gammafunc( (2.0_rp*b_m(iw)+beta_v(iw,2)+nu(iw)+1.0_rp)/mu(iw) )
1889 w6(iw) = gammafunc( (3.0_rp*b_m(iw)+beta_v(iw,2)+nu(iw)+1.0_rp)/mu(iw) )
1890 coef_d2v(iw) = a_m(iw) * w6(iw)/w5(iw)* ( w2(iw)/w3(iw) )**b_m(iw)
1891 coef_md2v(iw)= w5(iw)/w2(iw)* ( w2(iw)/w3(iw) )**(2.0_rp*b_m(iw)+beta_v(iw,2))
1893 w7(iw) = gammafunc( (3.0_rp*b_m(iw)+nu(iw)+1.0_rp)/mu(iw) )
1894 coef_d3(iw) = a_m(iw)**3 * w7(iw)/w2(iw)*( w2(iw)/w3(iw) )**(3.0_rp*b_m(iw))
1895 w8(iw) = gammafunc( (6.0_rp*b_m(iw)+nu(iw)+1.0_rp)/mu(iw) )
1896 coef_d6(iw) = a_m(iw)**6 * w8(iw)/w2(iw)*( w2(iw)/w3(iw) )**(6.0_rp*b_m(iw))
1899 coef_deplc = coef_d(i_mp_qc)/a_m(i_mp_qc)
1905 w1(iw) = gammafunc( (2.0_rp*b_m(iw)+nu(iw)+1.0_rp)/mu(iw) )
1906 w2(iw) = gammafunc( (nu(iw)+1.0_rp)/mu(iw) )
1907 w3(iw) = gammafunc( (nu(iw)+2.0_rp)/mu(iw) )
1909 w4(iw) = gammafunc( (3.0_rp*b_m(iw)+nu(iw)+1.0_rp)/mu(iw) )
1911 coef_r2(iw)=w1(iw)/w2(iw)*( w2(iw)/w3(iw) )**(2.0_rp*b_m(iw))
1912 coef_r3(iw)=w4(iw)/w2(iw)*( w2(iw)/w3(iw) )**(3.0_rp*b_m(iw))
1913 coef_re(iw)=coef_r3(iw)/coef_r2(iw)
1920 w1(iw) = gammafunc( (nu(iw)+1.0_rp)/mu(iw) )
1921 w2(iw) = gammafunc( (nu(iw)+2.0_rp)/mu(iw) )
1922 w3(iw) = gammafunc( (b_rea2(iw)+nu(iw)+1.0_rp)/mu(iw) )
1923 w4(iw) = gammafunc( (b_rea3(iw)+nu(iw)+1.0_rp)/mu(iw) )
1925 coef_rea2(iw) = w3(iw)/w1(iw)*( w1(iw)/w2(iw) )**b_rea2(iw)
1926 coef_rea3(iw) = w4(iw)/w1(iw)*( w1(iw)/w2(iw) )**b_rea3(iw)
1932 w1(iw) = gammafunc( (nu(iw) + 1.0_rp)/mu(iw) )
1933 w2(iw) = gammafunc( (nu(iw) + 2.0_rp)/mu(iw) )
1934 coef_a(iw) = mu(iw)/w1(iw)
1936 coef_lambda(iw) = (w1(iw)/w2(iw))**(-mu(iw))
1944 w1(iw) = gammafunc( (beta_vn(iw,ia) + nu(iw) + 1.0_rp + n)/mu(iw) )
1945 w2(iw) = gammafunc( ( nu(iw) + 1.0_rp + n)/mu(iw) )
1946 w3(iw) = gammafunc( (nu(iw) + 1.0_rp)/mu(iw) )
1947 w4(iw) = gammafunc( (nu(iw) + 2.0_rp)/mu(iw) )
1949 coef_vt0(iw,ia) = alpha_vn(iw,ia) * w1(iw) / w2(iw) * ( w3(iw) / w4(iw) )**beta_vn(iw,ia)
1950 log_coef_vt0(iw,ia) = log( coef_vt0(iw,ia) )
1952 w1(iw) = gammafunc( (beta_v(iw,ia) + nu(iw) + 1.0_rp + n)/mu(iw) )
1953 w2(iw) = gammafunc( ( nu(iw) + 1.0_rp + n)/mu(iw) )
1955 coef_vt1(iw,ia) = alpha_v(iw,ia) * w1(iw) / w2(iw) * ( w3(iw) / w4(iw) )**beta_v(iw,ia)
1956 log_coef_vt1(iw,ia) = log( coef_vt1(iw,ia) )
1961 w1(iw) = gammafunc( ( b_m(iw) + nu(iw) + 1.0_rp)/mu(iw) )
1962 w2(iw) = gammafunc( (1.0_rp + b_m(iw) + nu(iw) + 1.0_rp)/mu(iw) )
1963 w3(iw) = gammafunc( (nu(iw) + 1.0_rp)/mu(iw) )
1964 w4(iw) = gammafunc( (nu(iw) + 2.0_rp)/mu(iw) )
1965 coef_dave_n(iw) = ( w1(iw) / w3(iw) ) * ( w3(iw) / w4(iw) )**( b_m(iw))
1966 coef_dave_l(iw) = ( w2(iw) / w3(iw) ) * ( w3(iw) / w4(iw) )**(1.0_rp+b_m(iw))
1967 log_coef_dave_n(iw) = log( coef_dave_n(iw) )
1968 log_coef_dave_l(iw) = log( coef_dave_l(iw) )
1972 ah_vent(i_mp_qc,1:2) = (/1.0000_rp,1.0000_rp/)
1973 ah_vent(i_mp_qr,1:2) = (/1.0000_rp,0.780_rp/)
1974 ah_vent(i_mp_qi,1:2) = (/1.0000_rp,0.860_rp/)
1975 ah_vent(i_mp_qs,1:2) = (/1.0000_rp,0.780_rp/)
1976 ah_vent(i_mp_qg,1:2) = (/1.0000_rp,0.780_rp/)
1977 bh_vent(i_mp_qc,1:2) = (/0.0000_rp,0.0000_rp/)
1978 bh_vent(i_mp_qr,1:2) = (/0.108_rp,0.308_rp/)
1979 bh_vent(i_mp_qi,1:2) = (/0.140_rp,0.280_rp/)
1980 bh_vent(i_mp_qs,1:2) = (/0.108_rp,0.308_rp/)
1981 bh_vent(i_mp_qg,1:2) = (/0.108_rp,0.308_rp/)
1985 if( (nu(iw) + b_m(iw) + n) > eps_gamma )
then
1986 w1(iw) = gammafunc( (nu(iw) + b_m(iw) + n)/mu(iw) )
1987 w2(iw) = gammafunc( (nu(iw) + 1.0_rp)/mu(iw) )
1988 w3(iw) = gammafunc( (nu(iw) + 2.0_rp)/mu(iw) )
1989 ah_vent0(iw,1)= ah_vent(iw,1)*(w1(iw)/w2(iw))*(w2(iw)/w3(iw))**(b_m(iw)+n-1.0_rp)
1990 ah_vent0(iw,2)= ah_vent(iw,2)*(w1(iw)/w2(iw))*(w2(iw)/w3(iw))**(b_m(iw)+n-1.0_rp)
1991 flag_vent0(iw)=.true.
1993 ah_vent0(iw,1)= 1.0_rp
1994 ah_vent0(iw,2)= 1.0_rp
1995 flag_vent0(iw)=.false.
1998 if( (nu(iw) + b_m(iw) + n) > eps_gamma )
then
1999 w1(iw) = gammafunc( (nu(iw) + b_m(iw) + n)/mu(iw) )
2000 w2(iw) = gammafunc( (nu(iw) + 1.0_rp)/mu(iw) )
2001 w3(iw) = gammafunc( (nu(iw) + 2.0_rp)/mu(iw) )
2002 ah_vent1(iw,1)= ah_vent(iw,1)*(w1(iw)/w2(iw))*(w2(iw)/w3(iw))**(b_m(iw)+n-1.0_rp)
2003 ah_vent1(iw,2)= ah_vent(iw,2)*(w1(iw)/w2(iw))*(w2(iw)/w3(iw))**(b_m(iw)+n-1.0_rp)
2004 flag_vent1(iw)=.true.
2006 ah_vent1(iw,1)= 1.0_rp
2007 ah_vent1(iw,2)= 1.0_rp
2008 flag_vent1(iw)=.true.
2013 if( (nu(iw) + 1.5_rp*b_m(iw) + 0.5_rp*beta_v(iw,1) + n) < eps_gamma )
then
2014 flag_vent0(iw)=.false.
2016 if(flag_vent0(iw))
then
2018 w2(iw) = gammafunc( (nu(iw) + 1.0_rp)/mu(iw) )
2019 w3(iw) = gammafunc( (nu(iw) + 2.0_rp)/mu(iw) )
2021 w4(iw) = gammafunc( (nu(iw) + 2.0_rp*b_m(iw) + beta_v(iw,1) + n)/mu(iw) )
2022 bh_vent0(iw,1)=bh_vent(iw,1)*(w4(iw)/w2(iw))*(w2(iw)/w3(iw))**(2.00_rp*b_m(iw)+beta_v(iw,1)+n-1.0_rp)
2023 w5(iw) = gammafunc( (nu(iw) + 1.5_rp*b_m(iw) + 0.5_rp*beta_v(iw,2) + n)/mu(iw) )
2024 bh_vent0(iw,2)=bh_vent(iw,2)*(w5(iw)/w2(iw))*(w2(iw)/w3(iw))**(1.5_rp*b_m(iw)+0.5_rp*beta_v(iw,2)+n-1.0_rp)
2026 bh_vent0(iw,1) = 0.0_rp
2027 bh_vent0(iw,2) = 0.0_rp
2031 if( (nu(iw) + 1.5_rp*b_m(iw) + 0.5_rp*beta_v(iw,1) + n) < eps_gamma )
then
2032 flag_vent1(iw)=.false.
2034 if(flag_vent1(iw))
then
2036 w2(iw) = gammafunc( (nu(iw) + 1.0_rp)/mu(iw) )
2037 w3(iw) = gammafunc( (nu(iw) + 2.0_rp)/mu(iw) )
2039 w4(iw) = gammafunc( (nu(iw) + 2.0_rp*b_m(iw) + beta_v(iw,1) + n)/mu(iw) )
2040 bh_vent1(iw,1)=bh_vent(iw,1)*(w4(iw)/w2(iw))*(w2(iw)/w3(iw))**(2.00_rp*b_m(iw)+beta_v(iw,1)+n-1.0_rp)
2042 w5(iw) = gammafunc( (nu(iw) + 1.5_rp*b_m(iw) + 0.5_rp*beta_v(iw,2) + n)/mu(iw) )
2043 bh_vent1(iw,2)=bh_vent(iw,2)*(w5(iw)/w2(iw))*(w2(iw)/w3(iw))**(1.5_rp*b_m(iw)+0.5_rp*beta_v(iw,2)+n-1.0_rp)
2045 bh_vent1(iw,1) = 0.0_rp
2046 bh_vent1(iw,2) = 0.0_rp
2055 w1(iw) = gammafunc( (2.0_rp*b_rea(iw) + nu(iw) + 1.0_rp + n)/mu(iw) )
2056 w2(iw) = gammafunc( (nu(iw) + 1.0_rp)/mu(iw) )
2057 w3(iw) = gammafunc( (nu(iw) + 2.0_rp)/mu(iw) )
2058 delta_b0(iw) = w1(iw)/w2(iw) &
2059 *( w2(iw)/w3(iw) )**(2.0_rp*b_rea(iw) + n)
2061 w1(iw) = gammafunc( (2.0_rp*b_rea(iw) + nu(iw) + 1.0_rp + n)/mu(iw) )
2062 delta_b1(iw) = w1(iw)/w2(iw) &
2063 *( w2(iw)/w3(iw) )**(2.0_rp*b_rea(iw) + n)
2069 w1(iw) = gammafunc( (b_rea(iw) + nu(iw) + 1.0_rp + n)/mu(iw) )
2070 w2(iw) = gammafunc( (nu(iw) + 1.0_rp)/mu(iw) )
2071 w3(iw) = gammafunc( (nu(iw) + 2.0_rp)/mu(iw) )
2072 w4(iw) = gammafunc( (b_rea(iw) + nu(iw) + 1.0_rp )/mu(iw) )
2074 w5(iw) = gammafunc( (b_rea(iw) + nu(iw) + 1.0_rp + n)/mu(iw) )
2082 delta_ab0(ia,ib) = 2.0_rp*(w1(ib)/w2(ib))*(w4(ia)/w2(ia)) &
2083 * ( w2(ib)/w3(ib) )**(b_rea(ib)+n) &
2084 * ( w2(ia)/w3(ia) )**(b_rea(ia) )
2086 delta_ab1(ia,ib) = 2.0_rp*(w5(ib)/w2(ib))*(w4(ia)/w2(ia)) &
2087 * ( w2(ib)/w3(ib) )**(b_rea(ib)+n) &
2088 * ( w2(ia)/w3(ia) )**(b_rea(ia) )
2096 w1(iw) = gammafunc( (2.0_rp*beta_v(iw,2) + 2.0_rp*b_rea(iw) + nu(iw) + 1.0_rp + n)/mu(iw) )
2097 w2(iw) = gammafunc( ( 2.0_rp*b_rea(iw) + nu(iw) + 1.0_rp + n)/mu(iw) )
2098 w3(iw) = gammafunc( (nu(iw) + 1.0_rp)/mu(iw) )
2099 w4(iw) = gammafunc( (nu(iw) + 2.0_rp)/mu(iw) )
2100 theta_b0(iw) = w1(iw)/w2(iw) * ( w3(iw)/w4(iw) )**(2.0_rp*beta_v(iw,2))
2102 w1(iw) = gammafunc( (2.0_rp*beta_v(iw,2) + 2.0_rp*b_rea(iw) + nu(iw) + 1.0_rp + n)/mu(iw) )
2103 w2(iw) = gammafunc( ( 2.0_rp*b_rea(iw) + nu(iw) + 1.0_rp + n)/mu(iw) )
2104 theta_b1(iw) = w1(iw)/w2(iw) * ( w3(iw)/w4(iw) )**(2.0_rp*beta_v(iw,2))
2111 w1(iw) = gammafunc( (beta_v(iw,2) + 2.0_rp*b_rea(iw) + nu(iw) + 1.0_rp + n)/mu(iw) )
2112 w2(iw) = gammafunc( ( 2.0_rp*b_rea(iw) + nu(iw) + 1.0_rp + n)/mu(iw) )
2113 w3(iw) = gammafunc( (beta_v(iw,2) + 2.0_rp*b_rea(iw) + nu(iw) + 1.0_rp )/mu(iw) )
2114 w4(iw) = gammafunc( ( 2.0_rp*b_rea(iw) + nu(iw) + 1.0_rp )/mu(iw) )
2116 w5(iw) = gammafunc( (nu(iw) + 1.0_rp)/mu(iw) )
2117 w6(iw) = gammafunc( (nu(iw) + 2.0_rp)/mu(iw) )
2119 w7(iw) = gammafunc( (beta_v(iw,2) + b_rea(iw) + nu(iw) + 1.0_rp + n)/mu(iw) )
2120 w8(iw) = gammafunc( ( b_rea(iw) + nu(iw) + 1.0_rp + n)/mu(iw) )
2125 theta_ab0(ia,ib) = 2.0_rp * (w1(ib)/w2(ib))*(w3(ia)/w4(ia)) &
2126 * (w5(ia)/w6(ia))**beta_v(ia,2) &
2127 * (w5(ib)/w6(ib))**beta_v(ib,2)
2128 theta_ab1(ia,ib) = 2.0_rp * (w7(ib)/w8(ib))*(w3(ia)/w4(ia)) &
2129 * (w5(ia)/w6(ia))**beta_v(ia,2) &
2130 * (w5(ib)/w6(ib))**beta_v(ib,2)
2135 read(
io_fid_conf, nml=param_atmos_phy_mp_sn14_nucleation, iostat=ierr)
2137 log_info(
"ATMOS_PHY_MP_sn14_init",*)
'PARAM_ATMOS_PHY_MP_SN14_nucleation is not specified. Default used.'
2138 elseif( ierr > 0 )
then
2139 log_error(
"ATMOS_PHY_MP_sn14_init",*)
'Not appropriate names in namelist PARAM_ATMOS_PHY_MP_SN14_nucleation. Check!'
2142 log_nml(param_atmos_phy_mp_sn14_nucleation)
2143 if ( mp_couple_aerosol .AND. nucl_twomey )
then
2144 log_error(
"ATMOS_PHY_MP_SN14_nucleation_kij",*)
"nucl_twomey should be false when MP_couple_aerosol is true, stop"
2149 if ( opt_collection_bin )
then
2152 read(
io_fid_conf,nml=param_atmos_phy_mp_sn14_collection_bin,iostat=ierr)
2153 if ( ierr < 0 )
then
2154 log_info(
"ATMOS_PHY_MP_sn14_init",*)
'PARAM_ATMOS_PHY_MP_SN14_collection_bin is not specified. Default used.'
2155 elseif( ierr > 0 )
then
2156 log_error(
"ATMOS_PHY_MP_sn14_init",*)
'xxx Not appropriate names in namelist PARAM_ATMOS_PHY_MP_SN14_collection_bin. STOP.'
2159 log_nml(param_atmos_phy_mp_sn14_collection_bin)
2164 read(
io_fid_conf, nml=param_atmos_phy_mp_sn14_collection, iostat=ierr )
2166 log_info(
"ATMOS_PHY_MP_sn14_init",*)
'PARAM_ATMOS_PHY_MP_SN14_collection is not specified. Default used.'
2167 elseif( ierr > 0 )
then
2168 log_error(
"ATMOS_PHY_MP_sn14_init",*)
'Not appropriate names in namelist PARAM_ATMOS_PHY_MP_SN14_collection. Check!'
2171 log_nml(param_atmos_phy_mp_sn14_collection)
2177 read (
io_fid_conf,nml=param_atmos_phy_mp_sn14_condensation, iostat=ierr )
2179 log_info(
"ATMOS_PHY_MP_sn14_init",*)
'PARAM_ATMOS_PHY_MP_SN14_condensation is not specified. Default used.'
2180 elseif( ierr > 0 )
then
2181 log_error(
"ATMOS_PHY_MP_sn14_init",*)
'Not appropriate names in namelist PARAM_ATMOS_PHY_MP_SN14_condensation. Check!'
2184 log_nml(param_atmos_phy_mp_sn14_condensation)
2189 xc_cr = (2.0_rp*rc_cr/a_m(i_mp_qc))**(1.0_rp/b_m(i_mp_qc))
2190 alpha = (nu(i_mp_qc)+1.0_rp)/mu(i_mp_qc)
2191 gm = gammafunc(alpha)
2197 log_a_m(ia) = log( a_m(ia) )
2198 log_alpha_v(ia,1) = log( alpha_v(ia,1) )
2199 log_alpha_v(ia,2) = log( alpha_v(ia,2) )
2200 log_beta_v(ia,1) = log( beta_v(ia,1) )
2201 log_beta_v(ia,2) = log( beta_v(ia,2) )
2203 log_d0_li = log( d0_li )
2204 log_d0_ni = log( d0_ni )
2210 wlabel(5) =
"GRAUPEL"
2212 log_info(
"ATMOS_PHY_MP_sn14_init",
'(100a16)')
"LABEL ",wlabel(:)
2213 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"capacity ",cap(:)
2214 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"coef_m2 ",coef_m2(:)
2215 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"coef_d ",coef_d(:)
2217 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"coef_d3 ",coef_d3(:)
2218 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"coef_d6 ",coef_d6(:)
2219 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"coef_d2v ",coef_d2v(:)
2220 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"coef_md2v ",coef_md2v(:)
2221 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"a_d2vt ",a_d2vt(:)
2222 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"b_d2vt ",b_d2vt(:)
2224 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"coef_r2 ",coef_r2(:)
2225 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"coef_r3 ",coef_r3(:)
2226 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"coef_re ",coef_re(:)
2228 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"a_area ",a_area(:)
2229 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"b_area ",b_area(:)
2230 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"ax_area ",ax_area(:)
2231 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"bx_area ",bx_area(:)
2232 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"a_rea ",a_rea(:)
2233 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"b_rea ",b_rea(:)
2234 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"a_rea3 ",a_rea3(:)
2235 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"b_rea3 ",b_rea3(:)
2237 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"coef_rea2 ",coef_rea2(:)
2238 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"coef_rea3 ",coef_rea3(:)
2239 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"coef_vt0 ",coef_vt0(:,1)
2240 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"coef_vt1 ",coef_vt1(:,1)
2241 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"coef_A ",coef_a(:)
2242 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"coef_lambda ",coef_lambda(:)
2244 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"ah_vent0 sml",ah_vent0(:,1)
2245 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"ah_vent0 lrg",ah_vent0(:,2)
2246 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"ah_vent1 sml",ah_vent1(:,1)
2247 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"ah_vent1 lrg",ah_vent1(:,2)
2248 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"bh_vent0 sml",bh_vent0(:,1)
2249 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"bh_vent0 lrg",bh_vent0(:,2)
2250 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"bh_vent1 sml",bh_vent1(:,1)
2251 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"bh_vent1 lrg",bh_vent1(:,2)
2253 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"delta_b0 ",delta_b0(:)
2254 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"delta_b1 ",delta_b1(:)
2255 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"theta_b0 ",theta_b0(:)
2256 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,100ES16.6)')
"theta_b1 ",theta_b1(:)
2259 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,a10,a,100ES16.6)')
"delta0(a,b)=(",trim(wlabel(ia)),
",b)=",(delta_ab0(ia,ib),ib=1,hydro_max)
2262 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,a10,a,100ES16.6)')
"delta1(a,b)=(",trim(wlabel(ia)),
",b)=",(delta_ab1(ia,ib),ib=1,hydro_max)
2265 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,a10,a,100ES16.6)')
"theta0(a,b)=(",trim(wlabel(ia)),
",b)=",(theta_ab0(ia,ib),ib=1,hydro_max)
2268 log_info(
"ATMOS_PHY_MP_sn14_init",
'(a,a10,a,100ES16.6)')
"theta1(a,b)=(",trim(wlabel(ia)),
",b)=",(theta_ab1(ia,ib),ib=1,hydro_max)
2280 end subroutine mp_sn14_init
2282 subroutine mp_sn14 ( &
2283 KA, KS, KE, IA, IS, IE, JA, JS, JE, &
2318 moist_psat_liq => atmos_saturation_psat_liq, &
2319 moist_psat_ice => atmos_saturation_psat_ice, &
2320 moist_pres2qsat_ice => atmos_saturation_pres2qsat_ice
2322 file_history_query, &
2326 integer,
intent(in) :: ka, ks, ke
2327 integer,
intent(in) :: ia, is, ie
2328 integer,
intent(in) :: ja, js, je
2330 real(
rp),
intent(in) :: dens (ka,ia,ja)
2331 real(
rp),
intent(in) :: w (ka,ia,ja)
2332 real(
rp),
intent(in) :: qtrc (ka,ia,ja,
qa_mp)
2333 real(
rp),
intent(in) :: pres0 (ka,ia,ja)
2334 real(
rp),
intent(in) :: temp0 (ka,ia,ja)
2335 real(
rp),
intent(in) :: qdry (ka,ia,ja)
2336 real(
rp),
intent(in) :: cptot0(ka, ia, ja)
2337 real(
rp),
intent(in) :: cvtot0(ka, ia, ja)
2338 real(
rp),
intent(in) :: ccn (ka,ia,ja)
2339 real(
rp),
intent(in) :: dt
2340 real(
rp),
intent(in) :: cz( ka,ia,ja)
2341 real(
rp),
intent(in) :: fz(0:ka,ia,ja)
2343 real(
rp),
intent(out) :: rhoq_t(ka,ia,ja,
qa_mp)
2344 real(
rp),
intent(out) :: rhoe_t(ka,ia,ja)
2345 real(
rp),
intent(out) :: cptot_t(ka,ia,ja)
2346 real(
rp),
intent(out) :: cvtot_t(ka,ia,ja)
2348 real(
rp),
intent(out) :: evaporate(ka,ia,ja)
2351 logical,
intent(in),
optional :: flg_lt
2352 real(
rp),
intent(in),
optional :: d0_crg, v0_crg
2353 real(
rp),
intent(in),
optional :: dqcrg(ka,ia,ja)
2354 real(
rp),
intent(in),
optional :: beta_crg(ka,ia,ja)
2355 real(
rp),
intent(in),
optional :: qtrc_crg(ka,ia,ja,hydro_max)
2356 real(
rp),
intent(out),
optional :: qsplt_in(ka,ia,ja,3)
2357 real(
rp),
intent(out),
optional :: sarea(ka,ia,ja,hydro_max)
2358 real(
rp),
intent(out),
optional :: rhoqcrg_t_mp(ka,ia,ja,hydro_max)
2360 real(
rp) :: pres (ka)
2361 real(
rp) :: temp (ka)
2362 real(
rp) :: cva (ka)
2363 real(
rp) :: cpa (ka)
2364 real(
rp) :: rrho (ka)
2365 real(
rp) :: rhoe (ka)
2366 real(
rp) :: rhoq (ka,i_qv:i_ng)
2368 real(
rp) :: rhoq0_t (ka,
qa_mp)
2369 real(
rp) :: rhoe0_t (ka)
2370 real(
rp) :: cptot0_t(ka)
2371 real(
rp) :: cvtot0_t(ka)
2373 real(
rp) :: xq(ka,hydro_max)
2375 real(
rp) :: dq_xa(ka,hydro_max)
2376 real(
rp) :: vt_xa(ka,hydro_max,2)
2378 real(
rp) :: wtemp(ka)
2379 real(
rp) :: esw (ka)
2380 real(
rp) :: esi (ka)
2382 real(
rp) :: log_rho_fac
2383 real(
rp) :: log_rho_fac_q(ka,hydro_max)
2386 real(
rp) :: drhoqc, drhonc
2387 real(
rp) :: drhoqr, drhonr
2388 real(
rp) :: drhoqi, drhoni
2389 real(
rp) :: drhoqs, drhons
2390 real(
rp) :: drhoqg, drhong
2392 real(
rp) :: drhoqvhom
2393 real(
rp) :: drhoqihom, drhonihom
2396 real(
rp) :: pq(ka,pq_max)
2397 real(
rp) :: wrm_dqc, wrm_dnc
2398 real(
rp) :: wrm_dqr, wrm_dnr
2401 real(
rp) :: pac(ka,pac_max)
2403 real(
rp) :: gc_dqc, gc_dnc
2404 real(
rp) :: sc_dqc, sc_dnc
2405 real(
rp) :: ic_dqc, ic_dnc
2406 real(
rp) :: rg_dqg, rg_dng
2407 real(
rp) :: rg_dqr, rg_dnr
2408 real(
rp) :: rs_dqr, rs_dnr, rs_dqs, rs_dns
2409 real(
rp) :: ri_dqr, ri_dnr
2410 real(
rp) :: ri_dqi, ri_dni
2411 real(
rp) :: ii_dqi, ii_dni
2412 real(
rp) :: is_dqi, is_dni, ss_dns
2413 real(
rp) :: gs_dqs, gs_dns, gg_dng
2416 real(
rp) :: clp_dqc, clp_dnc, clm_dqc, clm_dnc
2417 real(
rp) :: clp_dqr, clp_dnr, clm_dqr, clm_dnr
2418 real(
rp) :: clp_dqi, clp_dni, clm_dqi, clm_dni
2419 real(
rp) :: clp_dqs, clp_dns, clm_dqs, clm_dns
2420 real(
rp) :: clp_dqg, clp_dng, clm_dqg, clm_dng
2421 real(
rp) :: fac1, fac3, fac4(ka), fac6(ka), fac7, fac9(ka)
2424 real(
rp) :: pco_dqi, pco_dni
2425 real(
rp) :: pco_dqs, pco_dns
2426 real(
rp) :: pco_dqg, pco_dng
2429 real(
rp) :: eml_dqc, eml_dnc
2430 real(
rp) :: eml_dqr, eml_dnr
2431 real(
rp) :: eml_dqi, eml_dni
2432 real(
rp) :: eml_dqs, eml_dns
2433 real(
rp) :: eml_dqg, eml_dng
2436 real(
rp) :: spl_dqi, spl_dni
2437 real(
rp) :: spl_dqg, spl_dqs
2442 real(
rp) :: dtdt_equiv_d(ka)
2444 real(
rp) :: dtdt_dep(ka)
2445 real(
rp) :: plidep_total(ka)
2452 real(
rp) :: sl_plcdep
2453 real(
rp) :: sl_plrdep, sl_pnrdep
2455 real(
rp) :: qke_d(ka)
2457 real(
rp),
parameter :: eps = 1.e-19_rp
2458 real(
rp),
parameter :: eps_qv = 1.e-19_rp
2459 real(
rp),
parameter :: eps_rhoe = 1.e-19_rp
2460 real(
rp),
parameter :: eps_rho = 1.e-19_rp
2463 real(
rp) :: di2l, dtem
2464 real(
rp) :: fact(ka)
2468 integer :: k, i, j, iq
2470 real(
rp) :: dqv, dql, dqi
2471 real(
rp) :: dcv, dcp
2472 real(
rp) :: dqvhom, dqihom
2473 real(
rp) :: dcvhom, dcphom
2479 real(
rp) :: v0_crg_l, d0_crg_l
2480 real(
rp) :: dqcrg_l(ka)
2481 real(
rp) :: beta_crg_l(ka)
2482 real(
rp) :: facq(i_qc:i_qg), f_crg
2483 integer :: grid(2), pp, qq
2484 real(
rp) :: drhoqcrg_c, drhoqcrg_r
2485 real(
rp) :: drhoqcrg_i, drhoqcrg_s, drhoqcrg_g
2488 real(
rp) :: pcrg1(ka,pq_max)
2489 real(
rp) :: pcrg2(ka,pcrg_max)
2490 real(
rp) :: rhoq_crg(ka,i_qc:i_qg)
2491 real(
rp) :: rhoqcrg0_t(ka,i_qc:i_qg)
2493 real(
rp) :: crs(ka,hydro_max)
2495 real(
rp) :: crg_split_s
2496 real(
rp) :: crg_split_g
2497 real(
rp) :: crg_split_i
2498 real(
rp) :: wrm_dnc_crg
2499 real(
rp) :: wrm_dnr_crg
2500 real(
rp) :: gc_dnc_crg
2501 real(
rp) :: sc_dnc_crg
2502 real(
rp) :: ic_dnc_crg
2503 real(
rp) :: rg_dng_crg
2504 real(
rp) :: rg_dnr_crg
2505 real(
rp) :: rs_dnr_crg
2506 real(
rp) :: rs_dns_crg
2507 real(
rp) :: ri_dnr_crg
2508 real(
rp) :: ri_dni_crg
2509 real(
rp) :: ii_dni_crg
2510 real(
rp) :: is_dni_crg
2511 real(
rp) :: ss_dns_crg
2512 real(
rp) :: gs_dns_crg
2513 real(
rp) :: gi_dni_crg
2514 real(
rp) :: gg_dng_crg
2516 real(
rp) :: clp_dnc_crg, clm_dnc_crg
2517 real(
rp) :: clp_dnr_crg, clm_dnr_crg
2518 real(
rp) :: clp_dni_crg, clm_dni_crg
2519 real(
rp) :: clp_dns_crg, clm_dns_crg
2520 real(
rp) :: clp_dng_crg, clm_dng_crg
2522 real(
rp) :: pco_dni_crg
2523 real(
rp) :: pco_dns_crg
2524 real(
rp) :: pco_dng_crg
2526 real(
rp) :: eml_dnc_crg
2527 real(
rp) :: eml_dnr_crg
2528 real(
rp) :: eml_dni_crg
2529 real(
rp) :: eml_dns_crg
2530 real(
rp) :: eml_dng_crg
2532 real(
rp) :: spl_dni_crg
2533 real(
rp) :: spl_dns_crg
2534 real(
rp) :: spl_dng_crg
2538 real(
rp) :: sw1, sw2
2542 logical :: hist_sw(w_nmax)
2545 if (
present(flg_lt) )
then
2560 qsplt_in(:,:,:,:) = 0.0_rp
2562 rhoqcrg_t_mp(:,:,:,:) = 0.0_rp
2578 call file_history_query( hist_id(ip), hist_sw(ip) )
2624 rhoq_t(k,i,j,:) = 0.0_rp
2625 rhoe_t(k,i,j) = 0.0_rp
2626 cptot_t(k,i,j) = 0.0_rp
2627 cvtot_t(k,i,j) = 0.0_rp
2632 cpa(k) = cptot0(k,i,j)
2633 cva(k) = cvtot0(k,i,j)
2634 pres(k) = pres0(k,i,j)
2635 temp(k) = temp0(k,i,j)
2649 rhoq(k,iq) = dens(k,i,j) * qtrc(k,i,j,iq)
2654 log_rho_fac = log(rho_0 / max(dens(k,i,j),rho_min))
2655 log_rho_fac_q(k,i_mp_qc) = log_rho_fac * gamma_v(i_mp_qc)
2656 log_rho_fac_q(k,i_mp_qr) = log_rho_fac * gamma_v(i_mp_qr)
2659 if( so22_het .or. opt_nucleation_ice_hom)
then
2662 log_rho_fac_q(k,i_mp_qi) = log(pres(k)/pre0_vt) * a_pre0_vt + log(temp(k)/tem0_vt) * a_tem0_vt
2663 log_rho_fac_q(k,i_mp_qs) = log_rho_fac_q(k,i_mp_qi)
2664 log_rho_fac_q(k,i_mp_qg) = log_rho_fac_q(k,i_mp_qi)
2667 call get_terminal_velocity( &
2669 vt_xa(:,:,:), xq(:,:), &
2671 log_rho_fac_q(:,:) )
2673 call get_diamiter( &
2686 rrho(k) = 1.0_rp / dens(k,i,j)
2687 rhoe(k) = dens(k,i,j) * temp(k) * cva(k)
2688 wtemp(k) = max(temp(k), tem_min)
2693 1, i, j, temp(:), dens(:,i,j), pres(:), qtrc(:,i,j,i_qv) )
2697 log_rho_fac_q(k,i_mp_qi) = log(pres(k)/pre0_vt) * a_pre0_vt + log(temp(k)/tem0_vt) * a_tem0_vt
2698 log_rho_fac_q(k,i_mp_qs) = log_rho_fac_q(k,i_mp_qi)
2699 log_rho_fac_q(k,i_mp_qg) = log_rho_fac_q(k,i_mp_qi)
2713 dtdt_equiv_d(k) = 0.0_rp
2717 nc_uplim_d(1,i,j) = c_ccn*1.5_rp
2722 cz(:,i,j), fz(:,i,j), &
2723 w(:,i,j), dens(:,i,j), &
2724 wtemp(:), pres(:), qdry(:,i,j), &
2725 rhoq(:,:), cpa(:), cva(:), &
2728 ccn(:,i,j), nc_uplim_d(1,i,j), &
2734 if( opt_nucleation_ice_hom )
then
2738 drhoqihom = pq(k,i_lihom)
2740 drhoqvhom = max( - rhoq(k,i_qv) / dt , tmp )
2741 fac1 = drhoqvhom / min( tmp, -eps )
2743 drhoqihom = drhoqihom * fac1
2745 rhoq0_t(k,i_qv) = drhoqvhom
2746 rhoq0_t(k,i_qi) = drhoqihom
2748 rhoe0_t(k) = - lhv * drhoqvhom + lhf * drhoqihom
2750 dqvhom = rrho(k) * drhoqvhom
2751 dqihom = rrho(k) * drhoqihom
2756 cvtot0_t(k) = dcvhom
2757 cptot0_t(k) = dcphom
2759 drhonihom = pq(k,i_nihom) * fac1
2760 rhoq0_t(k,i_ni) = drhonihom
2765 rhoe_t(k,i,j) = rhoe_t(k,i,j) + rhoe0_t(k)
2766 cvtot_t(k,i,j) = cvtot_t(k,i,j) + cvtot0_t(k)
2767 cptot_t(k,i,j) = cptot_t(k,i,j) + cptot0_t(k)
2772 rhoq(k,i_qv) = rhoq(k,i_qv) + rhoq0_t(k,i_qv)*dt
2773 rhoq(k,i_qi) = max(0.0_rp, rhoq(k,i_qi) + rhoq0_t(k,i_qi)*dt )
2774 rhoq(k,i_ni) = max(0.0_rp, rhoq(k,i_ni) + rhoq0_t(k,i_ni)*dt )
2778 rhoe(k) = rhoe(k) + rhoe0_t(k)*dt
2779 cva(k) = cva(k) + cvtot0_t(k)*dt
2780 cpa(k) = cpa(k) + cptot0_t(k)*dt
2782 temp(k) = rhoe(k) / ( dens(k,i,j) * cva(k) )
2783 pres(k) = dens(k,i,j) * (cpa(k)-cva(k)) * temp(k)
2784 wtemp(k) = max( temp(k), tem_min )
2791 drhoqc = pq(k,i_lcccn)
2792 drhoqi = pq(k,i_liccn)
2793 tmp = - drhoqc - drhoqi
2794 drhoqv = max( - rhoq(k,i_qv) / dt, tmp )
2797 fac1 = drhoqv / min( tmp, -eps )
2799 drhoqc = drhoqc * fac1
2800 drhoqi = drhoqi * fac1
2802 rhoq0_t(k,i_qv) = drhoqv
2803 rhoq0_t(k,i_qc) = drhoqc
2804 rhoq0_t(k,i_qi) = drhoqi
2806 rhoe0_t(k) = - lhv * drhoqv + lhf * drhoqi
2808 dqv = rrho(k) * drhoqv
2809 dql = rrho(k) * drhoqc
2810 dqi = rrho(k) * drhoqi
2818 drhonc = pq(k,i_ncccn) * fac1
2819 drhoni = pq(k,i_niccn) * fac1
2820 rhoq0_t(k,i_nc) = drhonc
2821 rhoq0_t(k,i_ni) = drhoni
2826 rhoe_t(k,i,j) = rhoe_t(k,i,j) + rhoe0_t(k)
2827 cvtot_t(k,i,j) = cvtot_t(k,i,j) + cvtot0_t(k)
2828 cptot_t(k,i,j) = cptot_t(k,i,j) + cptot0_t(k)
2833 rhoq(k,i_qv) = rhoq(k,i_qv) + rhoq0_t(k,i_qv)*dt
2834 rhoq(k,i_qc) = max(0.0_rp, rhoq(k,i_qc) + rhoq0_t(k,i_qc)*dt )
2835 rhoq(k,i_qi) = max(0.0_rp, rhoq(k,i_qi) + rhoq0_t(k,i_qi)*dt )
2836 rhoq(k,i_nc) = max(0.0_rp, rhoq(k,i_nc) + rhoq0_t(k,i_nc)*dt )
2837 rhoq(k,i_ni) = max(0.0_rp, rhoq(k,i_ni) + rhoq0_t(k,i_ni)*dt )
2840 rhoq(k,i_nc) = min( rhoq(k,i_nc), nc_uplim_d(1,i,j) )
2844 rhoe(k) = rhoe(k) + rhoe0_t(k)*dt
2845 cva(k) = cva(k) + cvtot0_t(k)*dt
2846 cpa(k) = cpa(k) + cptot0_t(k)*dt
2848 temp(k) = rhoe(k) / ( dens(k,i,j) * cva(k) )
2849 pres(k) = dens(k,i,j) * (cpa(k)-cva(k)) * temp(k)
2850 wtemp(k) = max( temp(k), tem_min )
2856 2, i, j, temp(:), dens(:,i,j), pres(:), qtrc(:,i,j,i_qv) )
2865 call get_terminal_velocity( &
2867 vt_xa(:,:,:), xq(:,:), &
2869 log_rho_fac_q(:,:) )
2871 call get_diamiter( &
2879 rhoq_crg(k,iq) = dens(k,i,j) * qtrc_crg(k,i,j,iq-1)
2884 call moist_psat_liq( ka, ks, ke, &
2886 call moist_psat_ice( ka, ks, ke, &
2892 rhoq(:,:), xq(:,:), temp(:), &
2895 call dep_vapor_melt_ice( &
2897 dens(:,i,j), wtemp(:), pres(:), qdry(:,i,j), rhoq(:,:), &
2898 esw(:), esi(:), xq(:,:), vt_xa(:,:,:), dq_xa(:,:), &
2904 call update_by_phase_change( &
2906 ntmax_phase_change, dt, &
2907 cz(:,i,j), fz(:,i,j), &
2910 dens(:,i,j), qdry(:,i,j), &
2912 rhoq(:,:), pres(:), temp(:), &
2916 sl_plcdep, sl_plrdep, sl_pnrdep, &
2917 rhoq0_t(:,:), rhoe0_t(:), &
2918 cptot0_t(:), cvtot0_t(:), &
2925 rhoe_t(k,i,j) = rhoe_t(k,i,j) + rhoe0_t(k)
2926 cvtot_t(k,i,j) = cvtot_t(k,i,j) + cvtot0_t(k)
2927 cptot_t(k,i,j) = cptot_t(k,i,j) + cptot0_t(k)
2933 rhoq(k,iq) = max(0.0_rp, rhoq(k,iq) + rhoq0_t(k,iq)*dt )
2938 rhoe(k) = rhoe(k) + rhoe0_t(k)*dt
2939 cva(k) = cva(k) + cvtot0_t(k)*dt
2940 cpa(k) = cpa(k) + cptot0_t(k)*dt
2941 temp(k) = rhoe(k) / ( dens(k,i,j) * cva(k) )
2942 pres(k) = dens(k,i,j) * ( cpa(k) - cva(k) ) * temp(k)
2948 rhoq_crg(k,iq) = rhoq_crg(k,iq) + rhoqcrg0_t(k,iq) * dt
2955 3, i, j, temp(:), dens(:,i,j), pres(:), qtrc(:,i,j,i_qv) )
2966 call get_terminal_velocity( &
2968 vt_xa(:,:,:), xq(:,:), &
2970 log_rho_fac_q(:,:) )
2974 dq_xa(k,i_mp_qc) = 2.0_rp*a_rea(i_mp_qc)*xq(k,i_mp_qc)**b_rea(i_mp_qc)
2975 dq_xa(k,i_mp_qr) = 2.0_rp*a_rea(i_mp_qr)*xq(k,i_mp_qr)**b_rea(i_mp_qr)
2976 dq_xa(k,i_mp_qi) = 2.0_rp*a_rea(i_mp_qi)*xq(k,i_mp_qi)**b_rea(i_mp_qi)
2977 dq_xa(k,i_mp_qs) = 2.0_rp*a_rea(i_mp_qs)*xq(k,i_mp_qs)**b_rea(i_mp_qs)
2978 dq_xa(k,i_mp_qg) = 2.0_rp*a_rea(i_mp_qg)*xq(k,i_mp_qg)**b_rea(i_mp_qg)
2985 if ( mp_doautoconversion )
then
2991 xq(:,:), dq_xa(:,:), &
2999 pq(k,i_lcaut) = 0.0_rp
3000 pq(k,i_ncaut) = 0.0_rp
3001 pq(k,i_nraut) = 0.0_rp
3002 pq(k,i_lcacc) = 0.0_rp
3003 pq(k,i_ncacc) = 0.0_rp
3004 pq(k,i_nrslc) = 0.0_rp
3005 pq(k,i_nrbrk) = 0.0_rp
3007 pcrg1(k,i_lcaut) = 0.0_rp
3008 pcrg1(k,i_ncaut) = 0.0_rp
3009 pcrg1(k,i_nraut) = 0.0_rp
3010 pcrg1(k,i_lcacc) = 0.0_rp
3011 pcrg1(k,i_ncacc) = 0.0_rp
3012 pcrg1(k,i_nrslc) = 0.0_rp
3013 pcrg1(k,i_nrbrk) = 0.0_rp
3017 if ( flg_lt_l )
then
3019 beta_crg_l(k) = beta_crg(k,i,j)
3020 dqcrg_l(k) = dqcrg(k,i,j)
3025 if( opt_collection_bin )
then
3029 d0_crg_l, v0_crg_l, &
3030 beta_crg_l(:), dqcrg_l(:), &
3031 temp(:), rhoq(:,:), &
3033 xq(:,:), dq_xa(:,:), vt_xa(:,:,:), &
3043 d0_crg_l, v0_crg_l, &
3044 beta_crg_l(:), dqcrg_l(:), &
3045 temp(:), rhoq(:,:), &
3047 xq(:,:), dq_xa(:,:), vt_xa(:,:,:), &
3059 temp(:), rhoq(:,:), &
3071 wrm_dqc = max( dt*( pq(k,i_lcaut)+pq(k,i_lcacc) ), -rhoq(k,i_qc) )
3072 wrm_dnc = max( dt*( pq(k,i_ncaut)+pq(k,i_ncacc) ), -rhoq(k,i_nc) )
3073 wrm_dnr = max( dt*( pq(k,i_nraut)+pq(k,i_nrslc)+pq(k,i_nrbrk) ), -rhoq(k,i_nr) )
3083 gc_dqc = max( dt*pac(k,i_lgaclc2lg), min(0.0_rp, -rhoq(k,i_qc)-wrm_dqc ))
3084 sc_dqc = max( dt*pac(k,i_lsaclc2ls), min(0.0_rp, -rhoq(k,i_qc)-wrm_dqc-gc_dqc ))
3085 ic_dqc = max( dt*pac(k,i_liaclc2li), min(0.0_rp, -rhoq(k,i_qc)-wrm_dqc-gc_dqc-sc_dqc ))
3087 gc_dnc = max( dt*pac(k,i_ngacnc2ng), min(0.0_rp, -rhoq(k,i_nc)-wrm_dnc ))
3088 sc_dnc = max( dt*pac(k,i_nsacnc2ns), min(0.0_rp, -rhoq(k,i_nc)-wrm_dnc-gc_dnc ))
3089 ic_dnc = max( dt*pac(k,i_niacnc2ni), min(0.0_rp, -rhoq(k,i_nc)-wrm_dnc-gc_dnc-sc_dnc ))
3092 sw = sign(0.5_rp, t00-temp(k)) + 0.5_rp
3093 rg_dqr = max( dt*pac(k,i_lraclg2lg ), min(0.0_rp, -rhoq(k,i_qr)-wrm_dqr )) * sw
3094 rg_dqg = max( dt*pac(k,i_lraclg2lg ), min(0.0_rp, -rhoq(k,i_qg) )) * ( 1.0_rp - sw )
3095 rs_dqr = max( dt*pac(k,i_lracls2lg_r), min(0.0_rp, -rhoq(k,i_qr)-wrm_dqr-rg_dqr )) * sw
3096 ri_dqr = max( dt*pac(k,i_lracli2lg_r), min(0.0_rp, -rhoq(k,i_qr)-wrm_dqr-rg_dqr-rs_dqr )) * sw
3099 rg_dnr = max( dt*pac(k,i_nracng2ng ), min(0.0_rp, -rhoq(k,i_nr)-wrm_dnr )) * sw
3100 rg_dng = max( dt*pac(k,i_nracng2ng ), min(0.0_rp, -rhoq(k,i_ng) )) * ( 1.0_rp - sw )
3101 rs_dnr = max( dt*pac(k,i_nracns2ng_r), min(0.0_rp, -rhoq(k,i_nr)-wrm_dnr-rg_dnr )) * sw
3102 ri_dnr = max( dt*pac(k,i_nracni2ng_r), min(0.0_rp, -rhoq(k,i_nr)-wrm_dnr-rg_dnr-rs_dnr )) * sw
3105 fac1 = (ri_dqr-eps)/ (dt*pac(k,i_lracli2lg_r)-eps)
3106 ri_dqi = max( dt*pac(k,i_lracli2lg_i)*fac1, min(0.0_rp, -rhoq(k,i_qi)+ic_dqc ))
3107 ii_dqi = max( dt*pac(k,i_liacli2ls ) , min(0.0_rp, -rhoq(k,i_qi)+ic_dqc-ri_dqi ))
3108 is_dqi = max( dt*pac(k,i_liacls2ls ) , min(0.0_rp, -rhoq(k,i_qi)+ic_dqc-ri_dqi-ii_dqi ))
3113 fac4(k) = (ri_dnr-eps)/ (dt*pac(k,i_nracni2ng_r)-eps)
3114 ri_dni = max( dt*pac(k,i_nracni2ng_i)*fac4(k), min(0.0_rp, -rhoq(k,i_ni) ))
3115 ii_dni = max( dt*pac(k,i_niacni2ns ) , min(0.0_rp, -rhoq(k,i_ni)-ri_dni ))
3116 is_dni = max( dt*pac(k,i_niacns2ns ) , min(0.0_rp, -rhoq(k,i_ni)-ri_dni-ii_dni ))
3121 fac3 = (rs_dqr-eps)/(dt*pac(k,i_lracls2lg_r)-eps)
3122 rs_dqs = max( dt*pac(k,i_lracls2lg_s)*fac3, min(0.0_rp, -rhoq(k,i_qs)+sc_dqc+ii_dqi+is_dqi ))
3123 gs_dqs = max( dt*pac(k,i_lgacls2lg ) , min(0.0_rp, -rhoq(k,i_qs)+sc_dqc+ii_dqi+is_dqi-rs_dqs ))
3125 fac6(k) = (rs_dnr-eps)/(dt*pac(k,i_nracns2ng_r)-eps)
3127 rs_dns = max( dt*pac(k,i_nracns2ng_s)*fac6(k), min(0.0_rp, -rhoq(k,i_ns)+0.50_rp*ii_dni+is_dni ))
3128 gs_dns = max( dt*pac(k,i_ngacns2ng ) , min(0.0_rp, -rhoq(k,i_ns)+0.50_rp*ii_dni+is_dni-rs_dns ))
3129 ss_dns = max( dt*pac(k,i_nsacns2ns ) , min(0.0_rp, -rhoq(k,i_ns)+0.50_rp*ii_dni+is_dni-rs_dns-gs_dns ))
3130 gg_dng = max( dt*pac(k,i_ngacng2ng ) , min(0.0_rp, -rhoq(k,i_ng) ))
3136 clp_dqr = (-rg_dqg-rs_dqs-ri_dqi) * (1.0_rp-sw)
3138 clp_dqs = -sc_dqc-ii_dqi-is_dqi
3139 clp_dqg = -gc_dqc -gs_dqs + (-rg_dqr-rs_dqr-rs_dqs-ri_dqr-ri_dqi) * sw
3144 clp_dns = -ii_dni*0.5_rp
3145 clp_dng = (-rs_dnr-ri_dnr) * sw
3149 clm_dqc = gc_dqc+sc_dqc+ic_dqc
3150 clm_dqr = (rg_dqr+rs_dqr+ri_dqr) * sw
3151 clm_dqi = ri_dqi+ii_dqi+is_dqi
3152 clm_dqs = rs_dqs+gs_dqs
3153 clm_dqg = rg_dqg * (1.0_rp-sw)
3155 clm_dnc = gc_dnc+sc_dnc+ic_dnc
3156 clm_dnr = (rg_dnr+rs_dnr+ri_dnr) * sw
3157 clm_dni = ri_dni+ii_dni+is_dni
3158 clm_dns = rs_dns+ss_dns+gs_dns
3159 clm_dng = gg_dng + rg_dng * (1.0_rp-sw)
3163 pco_dqi = max( dt*pq(k,i_licon), -clp_dqi )
3164 pco_dqs = max( dt*pq(k,i_lscon), -clp_dqs )
3165 pco_dqg = -pco_dqi-pco_dqs
3167 pco_dni = max( dt*pq(k,i_nicon), -clp_dni )
3168 pco_dns = max( dt*pq(k,i_nscon), -clp_dns )
3169 pco_dng = -pco_dni-pco_dns
3173 eml_dqi = max( dt*pq(k,i_liacm), min(0.0_rp, -rhoq(k,i_qi)-(clp_dqi+clm_dqi)-pco_dqi ))
3174 eml_dqs = max( dt*pq(k,i_lsacm), min(0.0_rp, -rhoq(k,i_qs)-(clp_dqs+clm_dqs)-pco_dqs ))
3175 eml_dqg = max( dt*(pq(k,i_lgacm)+pq(k,i_lgarm)+pq(k,i_lsarm)+pq(k,i_liarm)), &
3176 min(0.0_rp, -rhoq(k,i_qg)-(clp_dqg+clm_dqg)-pco_dqg ))
3178 eml_dqr = -eml_dqs-eml_dqg
3180 eml_dni = max( dt*pq(k,i_niacm), min(0.0_rp, -rhoq(k,i_ni)-(clp_dni+clm_dni)-pco_dni ))
3181 eml_dns = max( dt*pq(k,i_nsacm), min(0.0_rp, -rhoq(k,i_ns)-(clp_dns+clm_dns)-pco_dns ))
3182 eml_dng = max( dt*(pq(k,i_ngacm)+pq(k,i_ngarm)+pq(k,i_nsarm)+pq(k,i_niarm)), &
3183 min(0.0_rp, -rhoq(k,i_ng)-(clp_dng+clm_dng)-pco_dng ))
3185 eml_dnr = -eml_dns-eml_dng
3188 spl_dqg = max( dt*pq(k,i_lgspl), min(0.0_rp, -rhoq(k,i_qg)-(clp_dqg+clm_dqg)-pco_dqg-eml_dqg ))
3189 spl_dqs = max( dt*pq(k,i_lsspl), min(0.0_rp, -rhoq(k,i_qs)-(clp_dqs+clm_dqs)-pco_dqs-eml_dqs ))
3190 spl_dqi = -spl_dqg-spl_dqs
3191 fac9(k) = (spl_dqg-eps)/(dt*pq(k,i_lgspl)-eps) * (spl_dqs-eps)/(dt*pq(k,i_lsspl)-eps)
3192 spl_dni = dt*pq(k,i_nispl)*fac9(k)
3196 di2l = clp_dqc + clp_dqr + clm_dqc + clm_dqr + eml_dqc + eml_dqr
3197 dtem = - di2l * lhf0 / ( cva(k) * dens(k,i,j) )
3198 if ( abs(dtem) < eps )
then
3201 fact(k) = min( 1.0_rp, max( 0.0_rp, ( t00 - temp(k) ) / dtem ) )
3206 drhoqc = wrm_dqc + ( clp_dqc + clm_dqc + eml_dqc ) * fact(k)
3207 drhonc = wrm_dnc + ( clp_dnc + clm_dnc + eml_dnc ) * fact(k)
3209 drhoqr = wrm_dqr + ( clp_dqr + clm_dqr + eml_dqr ) * fact(k)
3210 drhonr = wrm_dnr + ( clp_dnr + clm_dnr + eml_dnr ) * fact(k)
3212 drhoqi = ( clp_dqi + clm_dqi + eml_dqi ) * fact(k) + pco_dqi + spl_dqi
3213 drhoni = ( clp_dni + clm_dni + eml_dni ) * fact(k) + pco_dni + spl_dni
3215 drhoqs = ( clp_dqs + clm_dqs + eml_dqs ) * fact(k) + pco_dqs + spl_dqs
3216 drhons = ( clp_dns + clm_dns + eml_dns ) * fact(k) + pco_dns
3218 drhoqg = ( clp_dqg + clm_dqg + eml_dqg ) * fact(k) + pco_dqg + spl_dqg
3219 drhong = ( clp_dng + clm_dng + eml_dng ) * fact(k) + pco_dng
3222 rhoq0_t(k,i_qc) = drhoqc / dt
3223 rhoq0_t(k,i_nc) = drhonc / dt
3224 rhoq0_t(k,i_qr) = drhoqr / dt
3225 rhoq0_t(k,i_nr) = drhonr / dt
3226 rhoq0_t(k,i_qi) = drhoqi / dt
3227 rhoq0_t(k,i_ni) = drhoni / dt
3228 rhoq0_t(k,i_qs) = drhoqs / dt
3229 rhoq0_t(k,i_ns) = drhons / dt
3230 rhoq0_t(k,i_qg) = drhoqg / dt
3231 rhoq0_t(k,i_ng) = drhong / dt
3233 rhoe0_t(k) = lhf * ( drhoqi + drhoqs + drhoqg ) / dt
3235 dql = rrho(k) * ( drhoqc + drhoqr )
3236 dqi = rrho(k) * ( drhoqi + drhoqs + drhoqg )
3241 cvtot0_t(k) = dcv / dt
3242 cptot0_t(k) = dcp / dt
3249 rhoe_t(k,i,j) = rhoe_t(k,i,j) + rhoe0_t(k)
3250 cvtot_t(k,i,j) = cvtot_t(k,i,j) + cvtot0_t(k)
3251 cptot_t(k,i,j) = cptot_t(k,i,j) + cptot0_t(k)
3257 rhoq(k,iq) = max(0.0_rp, rhoq(k,iq) + rhoq0_t(k,iq) * dt )
3264 rhoq_t(k,i,j,iq) = ( rhoq(k,iq) - dens(k,i,j)*qtrc(k,i,j,iq) )/dt
3269 if ( hist_sw(ip) )
then
3270 if(ip <= pq_max)
then
3272 w3d(k,i,j,hist_idx(ip)) = pq(k,ip)
3276 w3d(k,i,j,hist_idx(ip)) = pac(k,ip-pq_max)
3283 if ( flg_lt_l )
then
3287 sw = sign(0.5_rp, t00-temp(k)) + 0.5_rp
3289 wrm_dnc_crg = dt*( pcrg1(k,i_ncaut)+pcrg1(k,i_ncacc) )
3291 sw1 = min( abs(rhoq_crg(k,i_qc)),abs(wrm_dnc_crg) )
3292 wrm_dnc_crg = sign( sw1,wrm_dnc_crg )
3293 wrm_dnr_crg = - wrm_dnc_crg
3296 gc_dnc_crg = dt*pcrg2(k,i_ngacnc2ng)
3297 sc_dnc_crg = dt*pcrg2(k,i_nsacnc2ns)
3298 ic_dnc_crg = dt*pcrg2(k,i_niacnc2ni)
3300 sw1 = min( abs(rhoq_crg(k,i_qc)+wrm_dnc_crg ),abs(gc_dnc_crg) )
3301 gc_dnc_crg = sign( sw1,gc_dnc_crg )
3302 sw1 = min( abs(rhoq_crg(k,i_qc)+wrm_dnc_crg+gc_dnc_crg ),abs(sc_dnc_crg) )
3303 sc_dnc_crg = sign( sw1,sc_dnc_crg )
3304 sw1 = min( abs(rhoq_crg(k,i_qc)+wrm_dnc_crg+gc_dnc_crg+sc_dnc_crg),abs(ic_dnc_crg) )
3305 ic_dnc_crg = sign( sw1,ic_dnc_crg )
3308 rg_dnr_crg = dt*pcrg2(k,i_nracng2ng )* sw
3309 rg_dng_crg = dt*pcrg2(k,i_nracng2ng )* ( 1.0_rp - sw )
3310 rs_dnr_crg = dt*pcrg2(k,i_nracns2ng_r)* sw
3311 ri_dnr_crg = dt*pcrg2(k,i_nracni2ng_r)* sw
3313 sw1 = min( abs(rhoq_crg(k,i_qr)+wrm_dnr_crg),abs(rg_dnr_crg) )
3314 rg_dnr_crg = sign( sw1,rg_dnr_crg )
3315 sw1 = min( abs(rhoq_crg(k,i_qg) ),abs(rg_dng_crg) )
3316 rg_dng_crg = sign( sw1,rg_dng_crg )
3317 sw1 = min( abs(rhoq_crg(k,i_qr)+wrm_dnr_crg),abs(rs_dnr_crg) )
3318 rs_dnr_crg = sign( sw1,rs_dnr_crg )
3319 sw1 = min( abs(rhoq_crg(k,i_qr)+wrm_dnr_crg),abs(ri_dnr_crg) )
3320 ri_dnr_crg = sign( sw1,ri_dnr_crg )
3323 ri_dni_crg = dt*pcrg2(k,i_nracni2ng_i)*fac4(k)
3324 ii_dni_crg = dt*pcrg2(k,i_niacni2ns)
3325 is_dni_crg = dt*pcrg2(k,i_niacns2ns)
3329 sw1 = min( abs(rhoq_crg(k,i_qi)-ic_dnc_crg) ,abs(ri_dni_crg) )
3330 ri_dni_crg = sign( sw1,ri_dni_crg )
3331 sw1 = min( abs(rhoq_crg(k,i_qi)-ic_dnc_crg+ri_dni_crg) ,abs(ii_dni_crg) )
3332 ii_dni_crg = sign( sw1,ii_dni_crg )
3333 sw1 = min( abs(rhoq_crg(k,i_qi)-ic_dnc_crg+ri_dni_crg+ii_dni_crg),abs(is_dni_crg) )
3334 is_dni_crg = sign( sw1,is_dni_crg )
3340 rs_dns_crg = dt*pcrg2(k,i_nracns2ng_s)*fac6(k)
3341 gs_dns_crg = dt*pcrg2(k,i_ngacns2ng)
3345 sw1 = min( abs(rhoq_crg(k,i_qs)-sc_dnc_crg-ii_dni_crg-is_dni_crg), abs(rs_dns_crg) )
3346 rs_dns_crg = sign( sw1,rs_dns_crg )
3347 sw1 = min( abs(rhoq_crg(k,i_qs)-sc_dnc_crg-ii_dni_crg-is_dni_crg+rs_dns_crg),abs(gs_dns_crg) )
3348 gs_dns_crg = sign( sw1,gs_dns_crg )
3350 sw1 = sign(0.5_rp, abs( pcrg2(k,i_cgngacns2ng) )-eps ) + 0.5_rp
3351 sw2 = sign(0.5_rp, abs( pcrg2(k,i_cgngacni2ng) )-eps ) + 0.5_rp
3352 crg_split_g = dt*pcrg2(k,i_cgngacns2ng)*sw1 &
3353 + dt*pcrg2(k,i_cgngacni2ng)*sw2
3354 crg_split_s = -dt*pcrg2(k,i_cgngacns2ng)*sw1
3355 crg_split_i = 0.0_rp
3357 qsplt_in(k,i,j,1) = crg_split_g / dt
3358 qsplt_in(k,i,j,3) = crg_split_s / dt
3359 qsplt_in(k,i,j,2) = crg_split_i / dt
3362 clp_dnc_crg = 0.0_rp
3363 clp_dnr_crg = -rg_dng_crg*(1.0_rp-sw)
3364 clp_dni_crg = -ic_dnc_crg
3366 clp_dns_crg = -sc_dnc_crg-ii_dni_crg-is_dni_crg-ss_dns_crg &
3368 clp_dng_crg = -gc_dnc_crg+(-rg_dnr_crg-rs_dnr_crg-ri_dnr_crg)*sw &
3369 -ri_dni_crg-rs_dns_crg-gs_dns_crg-gg_dng_crg &
3373 clm_dnc_crg = gc_dnc_crg+sc_dnc_crg+ic_dnc_crg
3374 clm_dnr_crg = (rg_dnr_crg+rs_dnr_crg+ri_dnr_crg) * sw
3375 clm_dni_crg = ri_dni_crg+ii_dni_crg+is_dni_crg
3377 clm_dns_crg = rs_dns_crg+gs_dns_crg+ss_dns_crg
3378 clm_dng_crg = gg_dng_crg+rg_dng_crg*(1.0_rp-sw)
3380 pco_dni_crg = dt*pcrg1(k,i_nicon)
3381 pco_dns_crg = dt*pcrg1(k,i_nscon)
3383 sw1 = min( abs(rhoq_crg(k,i_qi)+clp_dni_crg ),abs(pco_dni_crg) )
3384 pco_dni_crg = sign( sw1,pco_dni_crg )
3385 sw1 = min( abs(rhoq_crg(k,i_qs)+clp_dns_crg ),abs(pco_dns_crg) )
3386 pco_dns_crg = sign( sw1,pco_dns_crg )
3387 pco_dng_crg = -pco_dni_crg-pco_dns_crg
3389 eml_dni_crg = dt*pcrg1(k,i_niacm)
3390 eml_dns_crg = dt*pcrg1(k,i_nsacm)
3391 eml_dng_crg = dt*(pcrg1(k,i_ngacm)+pcrg1(k,i_ngarm)+pcrg1(k,i_nsarm)+pcrg1(k,i_niarm))
3393 sw1 = min( abs(rhoq_crg(k,i_qi)+clp_dni_crg+clm_dni_crg+pco_dni_crg ),abs(eml_dni_crg) )
3394 eml_dni_crg = sign( sw1,eml_dni_crg )
3395 sw1 = min( abs(rhoq_crg(k,i_qs)+clp_dns_crg+clm_dns_crg+pco_dns_crg ),abs(eml_dns_crg) )
3396 eml_dns_crg = sign( sw1,eml_dns_crg )
3397 sw1 = min( abs(rhoq_crg(k,i_qg)+clp_dng_crg+clm_dng_crg+pco_dng_crg ),abs(eml_dng_crg) )
3398 eml_dng_crg = sign( sw1,eml_dng_crg )
3400 eml_dnc_crg = -eml_dni_crg
3401 eml_dnr_crg = -eml_dns_crg-eml_dng_crg
3403 spl_dns_crg = dt*pcrg1(k,i_nsspl)*fac9(k)
3404 spl_dng_crg = dt*pcrg1(k,i_ngspl)*fac9(k)
3406 sw1 = min( abs(rhoq_crg(k,i_qs)+clp_dns_crg+pco_dns_crg+eml_dns_crg ),abs(spl_dns_crg) )
3407 spl_dns_crg = sign( sw1,spl_dns_crg )
3408 sw1 = min( abs(rhoq_crg(k,i_qg)+clp_dng_crg+pco_dng_crg+eml_dng_crg ),abs(spl_dng_crg) )
3409 spl_dng_crg = sign( sw1,spl_dng_crg )
3410 spl_dni_crg = -spl_dns_crg-spl_dng_crg
3412 drhoqcrg_c = wrm_dnc_crg + ( clp_dnc_crg + clm_dnc_crg + eml_dnc_crg ) * fact(k)
3413 drhoqcrg_r = wrm_dnr_crg + ( clp_dnr_crg + clm_dnr_crg + eml_dnr_crg ) * fact(k)
3414 drhoqcrg_i = ( clp_dni_crg + clm_dni_crg + eml_dni_crg ) * fact(k) + pco_dni_crg + spl_dni_crg
3415 drhoqcrg_s = ( clp_dns_crg + clm_dns_crg + eml_dns_crg ) * fact(k) + pco_dns_crg + spl_dns_crg
3416 drhoqcrg_g = ( clp_dng_crg + clm_dng_crg + eml_dng_crg ) * fact(k) + pco_dng_crg + spl_dng_crg
3418 rhoqcrg0_t(k,i_qc) = drhoqcrg_c / dt
3419 rhoqcrg0_t(k,i_qr) = drhoqcrg_r / dt
3420 rhoqcrg0_t(k,i_qi) = drhoqcrg_i / dt
3421 rhoqcrg0_t(k,i_qs) = drhoqcrg_s / dt
3422 rhoqcrg0_t(k,i_qg) = drhoqcrg_g / dt
3428 rhoq_crg(k,iq) = rhoq_crg(k,iq) + rhoqcrg0_t(k,iq) * dt
3434 qtrc0(k,iq) = rhoq(k,iq) / dens(k,i,j)
3444 sarea(k,i,j,i_mp_qc) = crs(k,i_mp_qc)
3445 sarea(k,i,j,i_mp_qr) = crs(k,i_mp_qr)
3446 sarea(k,i,j,i_mp_qi) = crs(k,i_mp_qi)
3447 sarea(k,i,j,i_mp_qs) = crs(k,i_mp_qs)
3448 sarea(k,i,j,i_mp_qg) = crs(k,i_mp_qg)
3453 rhoqcrg_t_mp(k,i,j,iq-1) = ( rhoq_crg(k,iq) - dens(k,i,j)*qtrc_crg(k,i,j,iq-1) ) / dt
3461 4, i, j, temp(:), dens(:,i,j), pres(:), qtrc(:,i,j,i_qv) )
3468 if ( hist_sw(ip) )
call file_history_put( hist_id(ip), w3d(:,:,:,hist_idx(ip)) )
3472 end subroutine mp_sn14
3483 integer,
intent(in) :: KA, KS, KE
3485 integer,
intent(in) :: point
3486 integer,
intent(in) :: i, j
3487 real(RP),
intent(in) :: tem(KA)
3488 real(RP),
intent(in) :: rho(KA)
3489 real(RP),
intent(in) :: pre(KA)
3490 real(RP),
intent(in) :: qv (KA)
3496 if ( tem(k) < tem_min &
3497 .OR. rho(k) < rho_min &
3498 .OR. pre(k) < 1.0_rp )
then
3500 log_info(
"ATMOS_PHY_MP_SN14_debug_tem_kij",
'(A,I3,A,4(F16.5),3(I6))') &
3501 "point: ", point,
" low tem,rho,pre:", tem(k), rho(k), pre(k), qv(k), k, i, j,
prc_myrank
3512 rho, tem, pre, qdry, &
3523 moist_psat_liq => atmos_saturation_psat_liq, &
3524 moist_psat_ice => atmos_saturation_psat_ice, &
3525 moist_pres2qsat_liq => atmos_saturation_pres2qsat_liq, &
3526 moist_pres2qsat_ice => atmos_saturation_pres2qsat_ice, &
3527 moist_dqsi_dtem_dens => atmos_saturation_dqs_dtem_dens_liq, &
3528 moist_dqs_dtem_dpre_ice => atmos_saturation_dqs_dtem_dpre_ice
3534 integer,
intent(in) :: KA, KS, KE
3536 real(RP),
intent(in) :: cz( KA)
3537 real(RP),
intent(in) :: fz(0:KA)
3538 real(RP),
intent(in) :: w (KA)
3539 real(RP),
intent(in) :: rho (KA)
3540 real(RP),
intent(in) :: tem (KA)
3541 real(RP),
intent(in) :: pre (KA)
3542 real(RP),
intent(in) :: qdry(KA)
3544 real(RP),
intent(in) :: rhoq(KA,I_QV:I_NG)
3546 real(RP),
intent(in) :: cpa(KA)
3547 real(RP),
intent(in) :: dTdt_rad(KA)
3548 real(RP),
intent(in) :: qke(KA)
3549 real(RP),
intent(in) :: dt
3550 real(RP),
intent(in) :: CCN(KA)
3551 real(RP),
intent(in) :: nc_uplim_d
3553 real(RP),
intent(out) :: PQ(KA,PQ_MAX)
3564 real(RP) :: w_dssidz(KA)
3566 real(RP) :: ssi_below(KA)
3567 real(RP) :: z_below(KA)
3573 real(RP) :: dqsidtem_rho(KA)
3574 real(RP) :: dssidt_rad(KA)
3575 real(RP) :: wssi, wdssi
3579 real(RP) :: dq_xa(KA,HYDRO_MAX)
3580 real(RP) :: vt_xa(KA,HYDRO_MAX,2)
3581 real(RP) :: dTdt_dep(KA)
3582 real(RP) :: PLIdep_total(KA)
3583 real(RP) :: wtem(KA)
3584 real(RP) :: dqsidpre_tem(KA)
3585 real(RP) :: dqsidtem_pre(KA)
3587 real(RP) :: dssidt_mp(KA)
3588 real(RP) :: dssidt_dyn(KA)
3596 real(RP) :: sigma_w(KA)
3597 real(RP) :: weff(KA)
3598 real(RP) :: weff_max(KA)
3599 real(RP) :: velz(KA)
3601 real(RP) :: coef_ccn
3602 real(RP) :: slope_ccn
3603 real(RP) :: nc_new(KA)
3604 real(RP) :: nc_new_below(KA)
3606 real(RP) :: nc_new_max
3609 logical :: flag_nucleation(KA)
3611 real(RP) :: r_gravity
3612 real(RP),
parameter :: r_sqrt3=0.577350269_rp
3613 real(RP),
parameter :: eps=1.e-30_rp
3616 real(RP) :: dlcdt_max, dli_max
3617 real(RP) :: dncdt_max, dni_max
3630 wtem(k) = max( tem(k), tem_min )
3641 r_gravity = 1.0_rp/grav
3643 call moist_psat_liq ( ka, ks, ke, &
3645 call moist_psat_ice ( ka, ks, ke, &
3647 call moist_pres2qsat_liq ( ka, ks, ke, &
3648 tem(:), pre(:), qdry(:), &
3650 call moist_pres2qsat_ice ( ka, ks, ke, &
3651 tem(:), pre(:), qdry(:), &
3653 call moist_dqsi_dtem_dens( ka, ks, ke, &
3658 call moist_dqs_dtem_dpre_ice( ka, ks, ke, &
3659 wtem(:), pre(:), qdry(:), &
3660 dqsidtem_pre(:), dqsidpre_tem(:) )
3667 a_max = 1.e+6_rp*0.1_rp*(1.e-6_rp)**1.27_rp
3673 pv = rhoq(k,i_qv)*rvap*tem(k)
3674 ssw(k) = min( mp_ssw_lim, ( pv/esw(k)-1.0_rp ) )*100.0_rp
3675 ssi(k) = ( pv/esi(k) - 1.00_rp )
3677 ssi_below(k+1) = ssi(k)
3678 z_below(k+1) = cz(k)
3681 ssi_below(ks) = ssi(ks)
3682 z_below(ks) = cz(ks-1)
3687 coef_ccn = 1.e+6_rp*0.88_rp*(c_ccn*1.e-6_rp)**(2.0_rp/(kappa + 2.0_rp)) &
3689 * (70.0_rp)**(kappa/(kappa + 2.0_rp))
3691 slope_ccn = 1.5_rp*kappa/(kappa + 2.0_rp)
3694 sigma_w(k) = r_sqrt3*sqrt(max(qke(k),qke_min))
3696 sigma_w(ks-1) = sigma_w(ks)
3697 sigma_w(ke+1) = sigma_w(ke)
3700 weff(k) = w(k) - cpa(k)*r_gravity*dtdt_rad(k)
3703 if( mp_couple_aerosol )
then
3706 if( ssw(k) > 1.e-10_rp .AND. pre(k) > 300.e+2_rp )
then
3707 nc_new(k) = max( ccn(k), c_ccn )
3715 if( nucl_twomey )
then
3719 weff_max(k) = weff(k) + sigma_w(k)
3721 if( (weff(k) > 1.e-8_rp) .AND. (ssw(k) > 1.e-10_rp) .AND. pre(k) > 300.e+2_rp )
then
3723 nc_new_max = coef_ccn*weff_max(k)**slope_ccn
3724 nc_new(k) = a_max*nc_new_max**b_max
3733 if( ssw(k) > 1.e-10_rp .AND. pre(k) > 300.e+2_rp )
then
3734 nc_new(k) = c_ccn*ssw(k)**kappa
3745 if( nc_new(k) > nc_uplim_d )
then
3746 flag_nucleation(k) = .false.
3747 nc_new_below(k+1) = 1.e+30_rp
3748 else if( nc_new(k) > eps )
then
3749 flag_nucleation(k) = .true.
3750 nc_new_below(k+1) = nc_new(k)
3752 flag_nucleation(k) = .false.
3753 nc_new_below(k+1) = 0.0_rp
3756 nc_new_below(ks) = 0.0_rp
3766 if( mp_couple_aerosol )
then
3771 if ( flag_nucleation(k) .AND. &
3772 tem(k) > tem_ccn_low )
then
3773 dlcdt_max = ( rhoq(k,i_qv) - esw(k) / ( rvap * tem(k) ) ) * rdt
3774 dlcdt_max = max( dlcdt_max, 0.0_rp )
3775 dncdt_max = dlcdt_max/xc_min
3778 pq(k,i_ncccn) = min( dncdt_max, dnc_new*rdt )
3779 pq(k,i_lcccn) = min( dlcdt_max, xc_min*pq(k,i_ncccn) )
3781 pq(k,i_ncccn) = 0.0_rp
3782 pq(k,i_lcccn) = 0.0_rp
3787 if( nucl_twomey )
then
3792 if ( flag_nucleation(k) .AND. &
3793 tem(k) > tem_ccn_low .AND. &
3794 nc_new(k) > rhoq(k,i_nc) )
then
3795 dlcdt_max = ( rhoq(k,i_qv) - esw(k) / ( rvap * tem(k) ) ) * rdt
3796 dlcdt_max = max( dlcdt_max, 0.0_rp )
3797 dncdt_max = dlcdt_max/xc_min
3798 dnc_new = nc_new(k)-rhoq(k,i_nc)
3799 pq(k,i_ncccn) = min( dncdt_max, dnc_new*rdt )
3800 pq(k,i_lcccn) = min( dlcdt_max, xc_min*pq(k,i_ncccn) )
3802 pq(k,i_ncccn) = 0.0_rp
3803 pq(k,i_lcccn) = 0.0_rp
3809 if( tem(k) > tem_ccn_low .AND. &
3810 nc_new(k) > rhoq(k,i_nc) )
then
3811 dlcdt_max = ( rhoq(k,i_qv) - esw(k) / ( rvap * tem(k) ) ) * rdt
3812 dlcdt_max = max( dlcdt_max, 0.0_rp )
3813 dncdt_max = dlcdt_max/xc_min
3814 dnc_new = nc_new(k)-rhoq(k,i_nc)
3815 pq(k,i_ncccn) = min( dncdt_max, dnc_new*rdt )
3816 pq(k,i_lcccn) = min( dlcdt_max, xc_min*pq(k,i_ncccn) )
3818 pq(k,i_ncccn) = 0.0_rp
3819 pq(k,i_lcccn) = 0.0_rp
3835 if( so22_het .or. opt_nucleation_ice_hom )
then
3839 rho(:), tem(:), pre(:), &
3840 qdry(:), esi(:), qsi(:), &
3846 dtdt_dep(k) = (lhs0+(
cv_vapor-
cv_ice)*tem(k))*plidep_total(k)/(rho(k)*cva(k))
3849 dtdt_dep(:) = 0.0_rp
3853 velz(k) = ( w(k) * ( cz(k+1) - fz(k) ) + w(k+1) * ( fz(k) - cz(k) ) ) / ( cz(k+1) - cz(k) )
3857 dzh = cz(k) - z_below(k)
3858 w_dssidz(k) = velz(k) * (ssi(k) - ssi_below(k))/dzh
3859 dssidt_rad(k) = -rhoq(k,i_qv)/(rho(k)*qsi(k)*qsi(k))*dqsidtem_rho(k)*dtdt_rad(k)
3860 dli_max = ( rhoq(k,i_qv) - esi(k) / ( rvap * tem(k) ) ) * rdt
3861 dli_max = max( dli_max, 0.0_rp )
3862 dni_max = min( dli_max/xi_ccn, (in_max-rhoq(k,i_ni))*rdt )
3863 wdssi = min( w_dssidz(k)+dssidt_rad(k), 0.01_rp)
3864 wssi = min( ssi(k), ssi_max)
3868 dssidt_mp(k) = -plidep_total(k)/(rho(k)*qsi(k))
3870 dssidt_rad(k) = -rhoq(k,i_qv)/(rho(k)*qsi(k)*qsi(k))*dqsidtem_rho(k)*dtdt_rad(k)
3872 dssidt_dyn(k) = +rhoq(k,i_qv)/(rho(k)*qsi(k)*qsi(k))&
3873 * velz(k)*grav*(dqsidtem_pre(k)/cpa(k)+dqsidpre_tem(k)*rho(k))
3875 dssidt = dssidt_mp(k) + dssidt_rad(k) + dssidt_dyn(k)
3895 if( (tem(k) < 273.15_rp ) .AND. &
3896 (rhoq(k,i_ni) < in_max ) .AND. &
3897 (wssi >= eps ) )
then
3898 tmp = c_in * nm_m92 * exp( 0.3_rp * bm_m92 * ( wssi - 0.1_rp ) )
3899 if( inucl_w .and. wdssi > eps )
then
3900 tmp = bm_m92 * 0.3_rp * tmp * wdssi
3901 elseif( so22_het .and. dssidt > eps )
then
3902 tmp = bm_m92 * 0.3_rp * tmp * dssidt
3904 tmp = max( tmp - rhoq(k,i_ni), 0.0_rp ) * rdt
3906 pq(k,i_niccn) = min(dni_max, tmp)
3907 pq(k,i_liccn) = min(dli_max, pq(k,i_niccn)*xi_ccn )
3909 pq(k,i_niccn) = 0.0_rp
3910 pq(k,i_liccn) = 0.0_rp
3916 if( opt_nucleation_ice_hom )
then
3920 qdry, rhoq(:,i_qv), &
3929 pq(:,i_lihom) = 0.0_rp
3930 pq(:,i_nihom) = 0.0_rp
3942 qd, rhoq_qv, cva, cpa, &
3943 w, dTdt_rad, dTdt_dep, &
3944 PLIdep, dt, PLIhom, PNIhom )
3966 integer,
intent(in) :: KA, KS, KE
3968 real(RP),
intent(in) :: tem(KA)
3969 real(RP),
intent(in) :: pre(KA)
3970 real(RP),
intent(in) :: rho(KA)
3971 real(RP),
intent(in) :: qd(KA)
3972 real(RP),
intent(in) :: rhoq_qv(KA)
3973 real(RP),
intent(in) :: cpa(KA)
3974 real(RP),
intent(in) :: cva(KA)
3976 real(RP),
intent(in) :: w(KA)
3977 real(RP),
intent(in) :: dTdt_rad(KA)
3978 real(RP),
intent(in) :: dTdt_dep(KA)
3979 real(RP),
intent(in) :: PLIdep(KA)
3981 real(RP),
intent(out):: PLIhom(KA)
3982 real(RP),
intent(out):: PNIhom(KA)
3983 real(RP),
intent(in) :: dt
3984 real(RP),
parameter :: rhoi=916.0_rp
3985 real(RP),
parameter :: rrhoi=1.0_rp/rhoi
3986 real(RP),
parameter :: Mw=18.01528_rp
3987 real(RP),
parameter :: Nav=6.0221415e+23_rp
3988 real(RP),
parameter :: vw=(mw*1.e-3_rp/nav)/rhoi
3990 real(RP),
parameter :: r0=29.5e-9_rp
3991 real(RP),
parameter :: c_gf = 1.01187_rp
3992 real(RP),
parameter :: g_gf = -0.206449_rp
3993 real(RP),
parameter :: rho_min=1.e-5_rp
3994 real(RP),
parameter :: tem_min=150.0_rp
3995 real(RP),
parameter :: ni_max =300.e+6_rp
3998 real(RP) :: esi, esw
4001 real(RP) :: dqsidtem
4002 real(RP) :: den1, den2
4003 real(RP) :: dqsidt_pre
4004 real(RP) :: dqsidp_tem
4006 real(RP) :: temc_lim
4012 real(RP) :: dsidt_mp
4013 real(RP) :: dsidt_rd
4015 real(RP) :: a1,a2,a3
4018 real(RP) :: dtemdt_dyn
4026 real(RP),
parameter :: r2pi = 0.5_rp/pi
4027 real(RP),
parameter :: sqrt_pi = sqrt(pi)
4028 real(RP),
parameter :: coef_mi = 4.0_rp/3.0_rp*pi*rhoi
4029 real(RP),
parameter :: eps = 1.e-30_rp
4045 wtem= max(tem(k), tem_min)
4047 * ( wtem / t00 ) ** ( ( cpvap - ci ) / rvap ) &
4048 * exp( lhs00 / rvap &
4049 * ( 1.0_rp / t00 - 1.0_rp / wtem ) ), pre(k))
4051 * ( wtem / t00 ) ** ( ( cpvap - cl ) / rvap ) &
4052 * exp( lhv00 / rvap &
4053 * ( 1.0_rp / t00 - 1.0_rp / wtem ) )
4055 scr = 2.349_rp - wtem/259.0_rp
4056 qsi = epsvap * esi / ( pre(k) - ( 1.0_rp - epsvap ) * esi )
4057 si = rhoq_qv(k)*rvap*wtem/esi
4059 sw = min(rho(k)*rhoq_qv(k)*rvap*wtem/esw,0.999_rp)
4060 if ( si < scr )
then
4063 lhs = lhs00 + (cpvap - ci )*(wtem-t00)
4073 lhs = lhs0 + (cpvap - ci)*(wtem-t00)
4074 dqsidtem = esi/(rho(k)*rvap*wtem*wtem)&
4075 * (lhs/(rvap*wtem)-1.0_rp)
4076 dsidt_mp = -1.0_rp/(rho(k)*qsi) &
4077 * (1.0_rp+si*(lhv00+lhf00+(cvvap-ci)*wtem)/cva(k)*dqsidtem)&
4079 dsidt_rd = -si/qsi*dqsidtem*dtdt_rad(k)
4081 a1 = lhs0*grav/(cpa(k)*rvap*tem(k)*tem(k))&
4082 - grav/(rdry*tem(k))
4089 wp = w(k) + 1.0_rp/(a1*si)*(dsidt_mp+dsidt_rd)
4091 dlogjdt = -0.004_rp*wtem*wtem + 2.0_rp*wtem - 304.4_rp
4093 dtemdt_dyn= - grav*w(k)/cpa(k)
4094 rtau = dlogjdt*(dtdt_rad(k)+dtdt_dep(k)+dtemdt_dyn )
4096 rw = r0*c_gf*(1-sw)**g_gf
4098 if ( wp > eps .AND. rtau > eps )
then
4100 temc_lim= max(tem(k)-t00, temc_lim_diff )
4101 rho_lim = max(rho(k),rho_min)
4102 pre_lim = rho_lim*(qd(k)*rdry + rhoq_qv(k)*rvap)*(temc_lim+t00)
4103 dw = 0.211e-4_rp* (((temc_lim+t00)/t00)**1.94_rp) *(pstd/pre_lim)
4105 b2 = 0.5_rp/dw*sqrt(rvap*wtem*r2pi)
4106 b1 = (si-1.0_rp)*0.5_rp*rrhoi*esi/sqrt(2.0_rp*pi*rvap*wtem)
4107 a2 = mw*rvap*wtem/(nav*esi)
4108 a3 = epsvap*mw*lhs0*lhs0/(nav*cpa(k)*pre(k)*wtem)
4110 kappa = 2.0_rp*b1*b2/( rtau*(1.0_rp+delta)*(1.0_rp+delta) )
4112 rim_w = max(1.e-20_rp, 0.5_rp*(1.0_rp+delta)*(3.0_rp*kappa/(2.0_rp+sqrt(1.0_rp+9.0_rp/pi*kappa))) &
4113 + 1.0_rp/(1.0_rp+delta)*(3.0_rp /(2.0_rp+sqrt(1.0_rp+9.0_rp/pi*kappa)))+delta-1.0_rp )
4114 pnihom(k) = min( scr/(scr-1.0_rp)*a1*wp/(rim_w*4.0_rp*pi*dw/b2), ni_max )* rdt
4115 ri_wrk = 1.0_rp+b2*rw
4116 ri = ( sqrt(ri_wrk*ri_wrk + 2.0_rp*b1*b2*dt )-1.0_rp )/b2
4117 plihom(k) = coef_mi*ri*ri*ri*pnihom(k)
4133 rhoq_crg, xq, & ! in
4141 integer,
intent(in) :: KA, KS, KE
4143 real(RP),
intent(in) :: Pac(KA,Pac_MAX)
4144 real(RP),
intent(in) :: tem(KA)
4145 real(RP),
intent(in) :: rhoq(KA,I_QV:I_NG)
4146 real(RP),
intent(in) :: xq(KA,HYDRO_MAX)
4148 real(RP),
intent(inout):: PQ(KA,PQ_MAX)
4150 logical,
intent(in) :: flg_lt
4151 real(RP),
intent(in) :: rhoq_crg(KA,I_QC:I_QG)
4152 real(RP),
intent(inout):: Pcrg1(KA,PQ_MAX)
4155 real(RP),
parameter :: pice = 350.0e+6_rp
4157 real(RP),
parameter :: pnc = 250.0_rp
4164 real(RP) :: a0,a1,a2,a3,a4,a5
4165 real(RP) :: a6,a7,a8,a9,a10
4166 real(RP) :: an1,an2,b0,b1,b2,c0,c1,c2
4167 real(RP) :: d0,d1,d2,e1,e2,h0,h1,h2
4168 real(RP),
parameter :: eps=1.0e-30_rp
4172 real(RP) :: wn, wni, wns, wng
4182 if (tem(k) > 270.16_rp)
then
4184 else if(tem(k) >= 268.16_rp)
then
4185 fp = (270.16_rp-tem(k))*0.5_rp
4186 else if(tem(k) >= 265.16_rp)
then
4187 fp = (tem(k)-265.16_rp)*0.333333333_rp
4195 x = coef_lambda(i_mp_qc)*(xc_cr/xq(k,i_mp_qc))**mu(i_mp_qc)
4197 if(x<1.e-2_rp*alpha)
then
4199 else if(x<alpha+1.0_rp)
then
4202 a1 = a0*x/(alpha+1.0_rp)
4203 a2 = a1*x/(alpha+2.0_rp)
4204 a3 = a2*x/(alpha+3.0_rp)
4205 a4 = a3*x/(alpha+4.0_rp)
4206 a5 = a4*x/(alpha+5.0_rp)
4207 a6 = a5*x/(alpha+6.0_rp)
4208 a7 = a6*x/(alpha+7.0_rp)
4209 a8 = a7*x/(alpha+8.0_rp)
4210 a9 = a8*x/(alpha+9.0_rp)
4211 a10 = a9*x/(alpha+10.0_rp)
4212 igm = (a0+a1+a2+a3+a4+a5+a6+a7+a8+a9+a10)*exp( -x + alpha*log(x) - lgm )
4213 else if(x<alpha*100.0_rp)
then
4221 an1 = -(1.0_rp-alpha)
4223 d1 = 1.0_rp/(an1*d0+b1)
4228 an2 = -2.0_rp*(2.0_rp-alpha)
4230 d2 = 1.0_rp/(an2*d1+b2)
4235 igm = 1.0_rp - exp( -x + alpha*log(x) - lgm )*h2
4240 n12 = rhoq(k,i_nc)*(1.0_rp-igm)
4242 wn = (pice + n12/((rhoq(k,i_qc)+xc_min)*pnc) )*fp
4243 wni = wn*(-pac(k,i_liaclc2li) )
4244 wns = wn*(-pac(k,i_lsaclc2ls) )
4245 wng = wn*(-pac(k,i_lgaclc2lg) )
4246 pq(k,i_nispl) = wni+wns+wng
4248 pq(k,i_lsspl) = - wns*xq(k,i_mp_qi)
4249 pq(k,i_lgspl) = - wng*xq(k,i_mp_qi)
4251 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ns)-small )
4252 pcrg1(k,i_nsspl) = - wns*(1.0_rp-sw1) &
4253 / (rhoq(k,i_ns)+sw1)*rhoq_crg(k,i_qs)
4254 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ng)-small )
4255 pcrg1(k,i_ngspl) = - wng*(1.0_rp-sw1) &
4256 / (rhoq(k,i_ng)+sw1)*rhoq_crg(k,i_qg)
4257 pcrg1(k,i_nispl) = - ( pcrg1(k,i_nsspl) + pcrg1(k,i_ngspl) )
4268 ! collection process
4271 d0_crg, v0_crg, & ! in
4272 beta_crg, dqcrg, & ! in
4273 wtem, rhoq, rhoq_crg, & ! in
4274 xq, dq_xave, vt_xave, & ! in
4275 ! rho ! [Add] 11/08/30
4277 Pcrg1, Pcrg2, & ! inout
4280 moist_psat_ice => atmos_saturation_psat_ice
4283 integer,
intent(in) :: KA, KS, KE
4288 real(RP),
intent(in) :: wtem(KA)
4290 real(RP),
intent(in) :: rhoq(KA,I_QV:I_NG)
4292 real(RP),
intent(in) :: xq(KA,HYDRO_MAX)
4294 real(RP),
intent(in) :: dq_xave(KA,HYDRO_MAX)
4296 real(RP),
intent(in) :: vt_xave(KA,HYDRO_MAX,2)
4300 real(RP),
intent(inout):: PQ(KA,PQ_MAX)
4302 real(RP),
intent(out):: Pac(KA,Pac_MAX)
4304 logical,
intent(in) :: flg_lt
4305 real(RP),
intent(in) :: beta_crg(KA)
4306 real(RP),
intent(in) :: dqcrg(KA)
4307 real(RP),
intent(in) :: d0_crg, v0_crg
4308 real(RP),
intent(in) :: rhoq_crg(KA,I_QC:I_QG)
4309 real(RP),
intent(inout):: Pcrg1(KA,PQ_MAX)
4310 real(RP),
intent(inout):: Pcrg2(KA,Pcrg_MAX)
4312 real(RP),
parameter :: a_dec = 0.883_rp
4313 real(RP),
parameter :: b_dec = 0.093_rp
4314 real(RP),
parameter :: c_dec = 0.00348_rp
4315 real(RP),
parameter :: d_dec = 4.5185e-5_rp
4321 real(RP) :: E_c(KA), E_r, E_i, E_s, E_g
4322 real(RP) :: E_ic, E_sc, E_gc
4324 real(RP) :: E_stick(KA)
4326 real(RP) :: temc, temc2, temc3
4331 real(RP) :: temc_p, temc_m
4338 real(RP) :: ave_di(KA)
4339 real(RP) :: ave_ds(KA)
4342 real(RP) :: coef_acc_LCI, coef_acc_NCI
4343 real(RP) :: coef_acc_LCS, coef_acc_NCS
4345 real(RP) :: coef_acc_LCG, coef_acc_NCG
4346 real(RP) :: coef_acc_LRI_I, coef_acc_NRI_I
4347 real(RP) :: coef_acc_LRI_R, coef_acc_NRI_R
4348 real(RP) :: coef_acc_LRS_S, coef_acc_NRS_S
4349 real(RP) :: coef_acc_LRS_R, coef_acc_NRS_R
4350 real(RP) :: coef_acc_LRG, coef_acc_NRG
4351 real(RP) :: coef_acc_LII, coef_acc_NII
4352 real(RP) :: coef_acc_LIS, coef_acc_NIS
4353 real(RP) :: coef_acc_NSS
4354 real(RP) :: coef_acc_NGG
4355 real(RP) :: coef_acc_LSG, coef_acc_NSG(KA)
4357 real(RP) :: dcdc(KA), dcdi, dcds, dcdg
4358 real(RP) :: drdr(KA), drdi(KA), drds(KA), drdg
4359 real(RP) :: didi(KA), dids, didg
4360 real(RP) :: dsds(KA), dsdg
4361 real(RP) :: dgdg(KA)
4363 real(RP) :: vcvc(KA), vcvi, vcvs, vcvg
4364 real(RP) :: vrvr(KA), vrvi(KA), vrvs(KA), vrvg
4365 real(RP) :: vivi(KA), vivs, vivg
4366 real(RP) :: vsvs(KA), vsvg
4367 real(RP) :: vgvg(KA)
4369 real(RP) :: wx_cri, wx_crs
4370 real(RP) :: coef_emelt
4373 real(RP) :: sw, sw1, sw2
4374 real(RP) :: alpha_lt
4380 tem(k) = max( wtem(k), tem_min )
4383 call moist_psat_ice( ka, ks, ke, &
4386 if( opt_stick_ks96 )
then
4392 e_dec = max(0.0_rp, a_dec + b_dec*temc + c_dec*temc2 + d_dec*temc3 )
4393 esi_rat = rhoq(k,i_qv)*rvap*tem(k)/esi(k)
4394 e_stick(k) = min(1.0_rp, e_dec*esi_rat)
4396 else if( opt_stick_co86 )
then
4399 temc = min(tem(k) - t00,0.0_rp)
4400 w1 = 0.035_rp*temc-0.7_rp
4401 e_stick(k) = 10._rp**w1
4406 temc_m = min(tem(k) - t00,0.0_rp)
4407 e_stick(k) = exp(0.09_rp*temc_m)
4413 ave_dc = coef_d(i_mp_qc)*xq(k,i_mp_qc)**b_m(i_mp_qc)
4416 e_c(k) = max(0.0_rp, min(1.0_rp, (ave_dc-dc0)/(dc1-dc0) ))
4422 dcdc(k) = dq_xave(k,i_mp_qc) * dq_xave(k,i_mp_qc)
4423 drdr(k) = dq_xave(k,i_mp_qr) * dq_xave(k,i_mp_qr)
4424 didi(k) = dq_xave(k,i_mp_qi) * dq_xave(k,i_mp_qi)
4425 dsds(k) = dq_xave(k,i_mp_qs) * dq_xave(k,i_mp_qs)
4426 dgdg(k) = dq_xave(k,i_mp_qg) * dq_xave(k,i_mp_qg)
4427 drdi(k) = dq_xave(k,i_mp_qr) * dq_xave(k,i_mp_qi)
4428 drds(k) = dq_xave(k,i_mp_qr) * dq_xave(k,i_mp_qs)
4431 vcvc(k) = vt_xave(k,i_mp_qc,2) * vt_xave(k,i_mp_qc,2)
4432 vrvr(k) = vt_xave(k,i_mp_qr,2) * vt_xave(k,i_mp_qr,2)
4433 vivi(k) = vt_xave(k,i_mp_qi,2) * vt_xave(k,i_mp_qi,2)
4434 vsvs(k) = vt_xave(k,i_mp_qs,2) * vt_xave(k,i_mp_qs,2)
4435 vgvg(k) = vt_xave(k,i_mp_qg,2) * vt_xave(k,i_mp_qg,2)
4436 vrvi(k) = vt_xave(k,i_mp_qr,2) * vt_xave(k,i_mp_qi,2)
4437 vrvs(k) = vt_xave(k,i_mp_qr,2) * vt_xave(k,i_mp_qs,2)
4441 ave_di(k) = coef_d(i_mp_qi)*xq(k,i_mp_qi)**b_m(i_mp_qi)
4442 ave_ds(k) = coef_d(i_mp_qs)*xq(k,i_mp_qs)**b_m(i_mp_qs)
4454 dcdi = dq_xave(k,i_mp_qc) * dq_xave(k,i_mp_qi)
4455 vcvi = vt_xave(k,i_mp_qc,2) * vt_xave(k,i_mp_qi,2)
4456 sw = 0.5_rp - sign(0.5_rp, di0-ave_di(k))
4460 ( delta_b1(i_mp_qc)*dcdc(k) + delta_ab1(i_mp_qi,i_mp_qc)*dcdi + delta_b0(i_mp_qi)*didi(k) ) &
4461 * sqrt( theta_b1(i_mp_qc)*vcvc(k) - theta_ab1(i_mp_qi,i_mp_qc)*vcvi + theta_b0(i_mp_qi)*vivi(k) &
4462 + sigma_i + sigma_c )
4464 ( delta_b0(i_mp_qc)*dcdc(k) + delta_ab0(i_mp_qi,i_mp_qc)*dcdi + delta_b0(i_mp_qi)*didi(k) ) &
4465 * sqrt( theta_b0(i_mp_qc)*vcvc(k) - theta_ab0(i_mp_qi,i_mp_qc)*vcvi + theta_b0(i_mp_qi)*vivi(k) &
4466 + sigma_i + sigma_c )
4467 pac(k,i_liaclc2li)= -0.25_rp*pi*e_ic*rhoq(k,i_ni)*rhoq(k,i_qc)*coef_acc_lci
4468 pac(k,i_niacnc2ni)= -0.25_rp*pi*e_ic*rhoq(k,i_ni)*rhoq(k,i_nc)*coef_acc_nci
4474 dcds = dq_xave(k,i_mp_qc) * dq_xave(k,i_mp_qs)
4475 vcvs = vt_xave(k,i_mp_qc,2) * vt_xave(k,i_mp_qs,2)
4476 sw = 0.5_rp - sign(0.5_rp, ds0-ave_ds(k))
4480 ( delta_b1(i_mp_qc)*dcdc(k) + delta_ab1(i_mp_qs,i_mp_qc)*dcds + delta_b0(i_mp_qs)*dsds(k) ) &
4481 * sqrt( theta_b1(i_mp_qc)*vcvc(k) - theta_ab1(i_mp_qs,i_mp_qc)*vcvs + theta_b0(i_mp_qs)*vsvs(k) &
4482 + sigma_s + sigma_c )
4484 ( delta_b0(i_mp_qc)*dcdc(k) + delta_ab0(i_mp_qs,i_mp_qc)*dcds + delta_b0(i_mp_qs)*dsds(k) ) &
4485 * sqrt( theta_b0(i_mp_qc)*vcvc(k) - theta_ab0(i_mp_qs,i_mp_qc)*vcvs + theta_b0(i_mp_qs)*vsvs(k) &
4486 + sigma_s + sigma_c )
4487 pac(k,i_lsaclc2ls)= -0.25_rp*pi*e_sc*rhoq(k,i_ns)*rhoq(k,i_qc)*coef_acc_lcs
4488 pac(k,i_nsacnc2ns)= -0.25_rp*pi*e_sc*rhoq(k,i_ns)*rhoq(k,i_nc)*coef_acc_ncs
4494 dcdg = dq_xave(k,i_mp_qc) * dq_xave(k,i_mp_qg)
4495 vcvg = vt_xave(k,i_mp_qc,2) * vt_xave(k,i_mp_qg,2)
4496 ave_dg = coef_d(i_mp_qg)*xq(k,i_mp_qg)**b_m(i_mp_qg)
4497 sw = 0.5_rp - sign(0.5_rp, dg0-ave_dg)
4501 ( delta_b1(i_mp_qc)*dcdc(k) + delta_ab1(i_mp_qg,i_mp_qc)*dcdg + delta_b0(i_mp_qg)*dgdg(k) ) &
4502 * sqrt( theta_b1(i_mp_qc)*vcvc(k) - theta_ab1(i_mp_qg,i_mp_qc)*vcvg + theta_b0(i_mp_qg)*vgvg(k) &
4503 + sigma_g + sigma_c )
4505 ( delta_b0(i_mp_qc)*dcdc(k) + delta_ab0(i_mp_qg,i_mp_qc)*dcdg + delta_b0(i_mp_qg)*dgdg(k) ) &
4506 * sqrt( theta_b0(i_mp_qc)*vcvc(k) - theta_ab0(i_mp_qg,i_mp_qc)*vcvg + theta_b0(i_mp_qg)*vgvg(k) &
4507 + sigma_g + sigma_c )
4508 pac(k,i_lgaclc2lg)= -0.25_rp*pi*e_gc*rhoq(k,i_ng)*rhoq(k,i_qc)*coef_acc_lcg
4509 pac(k,i_ngacnc2ng)= -0.25_rp*pi*e_gc*rhoq(k,i_ng)*rhoq(k,i_nc)*coef_acc_ncg
4514 dsdg = dq_xave(k,i_mp_qs) * dq_xave(k,i_mp_qg)
4515 vsvg = vt_xave(k,i_mp_qs,2) * vt_xave(k,i_mp_qg,2)
4517 ( delta_b1(i_mp_qs)*dsds(k) + delta_ab1(i_mp_qg,i_mp_qs)*dsdg + delta_b0(i_mp_qg)*dgdg(k) ) &
4518 * sqrt( theta_b1(i_mp_qs)*vsvs(k) - theta_ab1(i_mp_qg,i_mp_qs)*vsvg + theta_b0(i_mp_qg)*vgvg(k) &
4519 + sigma_g + sigma_s )
4521 ( delta_b0(i_mp_qs)*dsds(k) + delta_ab0(i_mp_qg,i_mp_qs)*dsdg + delta_b0(i_mp_qg)*dgdg(k) ) &
4523 * sqrt( theta_b0(i_mp_qs)*vsvs(k) - theta_ab0(i_mp_qg,i_mp_qs)*vsvg + theta_b0(i_mp_qg)*vgvg(k) &
4524 + sigma_g + sigma_s )
4525 pac(k,i_lgacls2lg)= -0.25_rp*pi*e_stick(k)*e_gs*rhoq(k,i_ng)*rhoq(k,i_qs)*coef_acc_lsg
4526 pac(k,i_ngacns2ng)= -0.25_rp*pi*e_stick(k)*e_gs*rhoq(k,i_ng)*rhoq(k,i_ns)*coef_acc_nsg(k)
4551 dids = dq_xave(k,i_mp_qi) * dq_xave(k,i_mp_qs)
4552 vivs = vt_xave(k,i_mp_qi,2) * vt_xave(k,i_mp_qs,2)
4554 ( delta_b1(i_mp_qi)*didi(k) + delta_ab1(i_mp_qs,i_mp_qi)*dids + delta_b0(i_mp_qs)*dsds(k) ) &
4555 * sqrt( theta_b1(i_mp_qi)*vivi(k) - theta_ab1(i_mp_qs,i_mp_qi)*vivs + theta_b0(i_mp_qs)*vsvs(k) &
4556 + sigma_i + sigma_s )
4558 ( delta_b0(i_mp_qi)*didi(k) + delta_ab0(i_mp_qs,i_mp_qi)*dids + delta_b0(i_mp_qs)*dsds(k) ) &
4559 * sqrt( theta_b0(i_mp_qi)*vivi(k) - theta_ab0(i_mp_qs,i_mp_qi)*vivs + theta_b0(i_mp_qs)*vsvs(k) &
4560 + sigma_i + sigma_s )
4561 pac(k,i_liacls2ls)= -0.25_rp*pi*e_stick(k)*e_si*rhoq(k,i_ns)*rhoq(k,i_qi)*coef_acc_lis
4562 pac(k,i_niacns2ns)= -0.25_rp*pi*e_stick(k)*e_si*rhoq(k,i_ns)*rhoq(k,i_ni)*coef_acc_nis
4566 drdg = dq_xave(k,i_mp_qr) * dq_xave(k,i_mp_qg)
4567 vrvg = vt_xave(k,i_mp_qr,2) * vt_xave(k,i_mp_qg,2)
4568 sw = sign(0.5_rp, t00-tem(k)) + 0.5_rp
4578 ( ( delta_b1(i_mp_qr)*drdr(k) + delta_ab1(i_mp_qg,i_mp_qr)*drdg + delta_b0(i_mp_qg)*dgdg(k) ) * sw &
4579 + ( delta_b1(i_mp_qg)*dgdg(k) + delta_ab1(i_mp_qr,i_mp_qg)*drdg + delta_b0(i_mp_qr)*drdr(k) ) * (1.0_rp-sw) ) &
4580 * sqrt( ( theta_b1(i_mp_qr)*vrvr(k) - theta_ab1(i_mp_qg,i_mp_qr)*vrvg + theta_b0(i_mp_qg)*vgvg(k) ) * sw &
4581 + ( theta_b1(i_mp_qg)*vgvg(k) - theta_ab1(i_mp_qr,i_mp_qg)*vrvg + theta_b0(i_mp_qr)*vrvr(k) ) * (1.0_rp-sw) &
4582 + sigma_r + sigma_g )
4583 pac(k,i_lraclg2lg) = -0.25_rp*pi*e_gr*coef_acc_lrg * ( rhoq(k,i_ng)*rhoq(k,i_qr) * sw &
4584 + rhoq(k,i_nr)*rhoq(k,i_qg) * (1.0_rp-sw) )
4586 ( delta_b0(i_mp_qr)*drdr(k) + delta_ab0(i_mp_qg,i_mp_qr)*drdg + delta_b0(i_mp_qg)*dgdg(k) ) &
4587 * sqrt( theta_b0(i_mp_qr)*vrvr(k) - theta_ab0(i_mp_qg,i_mp_qr)*vrvg + theta_b0(i_mp_qg)*vgvg(k) &
4588 + sigma_r + sigma_g )
4589 pac(k,i_nracng2ng) = -0.25_rp*pi*e_gr*rhoq(k,i_ng)*rhoq(k,i_nr)*coef_acc_nrg
4602 ( delta_b1(i_mp_qi)*didi(k) + delta_ab1(i_mp_qr,i_mp_qi)*drdi(k) + delta_b0(i_mp_qr)*drdr(k) ) &
4603 * sqrt( theta_b1(i_mp_qi)*vivi(k) - theta_ab1(i_mp_qr,i_mp_qi)*vrvi(k) + theta_b0(i_mp_qr)*vrvr(k) &
4604 + sigma_r + sigma_i )
4606 ( delta_b0(i_mp_qi)*didi(k) + delta_ab0(i_mp_qr,i_mp_qi)*drdi(k) + delta_b0(i_mp_qr)*drdr(k) ) &
4607 * sqrt( theta_b0(i_mp_qi)*vivi(k) - theta_ab0(i_mp_qr,i_mp_qi)*vrvi(k) + theta_b0(i_mp_qr)*vrvr(k) &
4608 + sigma_r + sigma_i )
4609 pac(k,i_lracli2lg_i)= -0.25_rp*pi*e_ir*rhoq(k,i_nr)*rhoq(k,i_qi)*coef_acc_lri_i
4610 pac(k,i_nracni2ng_i)= -0.25_rp*pi*e_ir*rhoq(k,i_nr)*rhoq(k,i_ni)*coef_acc_nri_i
4616 ( delta_b1(i_mp_qr)*drdr(k) + delta_ab1(i_mp_qi,i_mp_qr)*drdi(k) + delta_b0(i_mp_qi)*didi(k) ) &
4617 * sqrt( theta_b1(i_mp_qr)*vrvr(k) - theta_ab1(i_mp_qi,i_mp_qr)*vrvi(k) + theta_b0(i_mp_qi)*vivi(k) &
4618 + sigma_r + sigma_i )
4620 ( delta_b0(i_mp_qr)*drdr(k) + delta_ab0(i_mp_qi,i_mp_qr)*drdi(k) + delta_b0(i_mp_qi)*didi(k) ) &
4621 * sqrt( theta_b0(i_mp_qr)*vrvr(k) - theta_ab0(i_mp_qi,i_mp_qr)*vrvi(k) + theta_b0(i_mp_qi)*vivi(k) &
4622 + sigma_r + sigma_i )
4623 pac(k,i_lracli2lg_r)= -0.25_rp*pi*e_ir*rhoq(k,i_ni)*rhoq(k,i_qr)*coef_acc_lri_r
4624 pac(k,i_nracni2ng_r)= -0.25_rp*pi*e_ir*rhoq(k,i_ni)*rhoq(k,i_nr)*coef_acc_nri_r
4631 ( delta_b1(i_mp_qs)*dsds(k) + delta_ab1(i_mp_qr,i_mp_qs)*drds(k) + delta_b0(i_mp_qr)*drdr(k) ) &
4632 * sqrt( theta_b1(i_mp_qs)*vsvs(k) - theta_ab1(i_mp_qr,i_mp_qs)*vrvs(k) + theta_b0(i_mp_qr)*vrvr(k) &
4633 + sigma_r + sigma_s )
4635 ( delta_b0(i_mp_qs)*dsds(k) + delta_ab0(i_mp_qr,i_mp_qs)*drds(k) + delta_b0(i_mp_qr)*drdr(k) ) &
4636 * sqrt( theta_b0(i_mp_qs)*vsvs(k) - theta_ab0(i_mp_qr,i_mp_qs)*vrvs(k) + theta_b0(i_mp_qr)*vrvr(k) &
4637 + sigma_r + sigma_s )
4638 pac(k,i_lracls2lg_s)= -0.25_rp*pi*e_sr*rhoq(k,i_nr)*rhoq(k,i_qs)*coef_acc_lrs_s
4639 pac(k,i_nracns2ng_s)= -0.25_rp*pi*e_sr*rhoq(k,i_nr)*rhoq(k,i_ns)*coef_acc_nrs_s
4645 ( delta_b1(i_mp_qr)*drdr(k) + delta_ab1(i_mp_qs,i_mp_qr)*drds(k) + delta_b0(i_mp_qs)*dsds(k) ) &
4646 * sqrt( theta_b1(i_mp_qr)*vrvr(k) - theta_ab1(i_mp_qs,i_mp_qr)*vrvs(k) + theta_b0(i_mp_qs)*vsvs(k) &
4647 + sigma_r + sigma_s )
4649 ( delta_b0(i_mp_qr)*drdr(k) + delta_ab0(i_mp_qs,i_mp_qr)*drds(k) + delta_b0(i_mp_qs)*dsds(k) ) &
4650 * sqrt( theta_b0(i_mp_qr)*vrvr(k) - theta_ab0(i_mp_qs,i_mp_qr)*vrvs(k) + theta_b0(i_mp_qs)*vsvs(k) &
4651 + sigma_r + sigma_s )
4652 pac(k,i_lracls2lg_r)= -0.25_rp*pi*e_sr*rhoq(k,i_ns)*rhoq(k,i_qr)*coef_acc_lrs_r
4653 pac(k,i_nracns2ng_r)= -0.25_rp*pi*e_sr*rhoq(k,i_ns)*rhoq(k,i_nr)*coef_acc_nrs_r
4665 ( delta_b0(i_mp_qi)*didi(k) + delta_ab1(i_mp_qi,i_mp_qi)*didi(k) + delta_b1(i_mp_qi)*didi(k) ) &
4666 * sqrt( theta_b0(i_mp_qi)*vivi(k) - theta_ab1(i_mp_qi,i_mp_qi)*vivi(k) + theta_b1(i_mp_qi)*vivi(k) &
4667 + sigma_i + sigma_i )
4669 ( delta_b0(i_mp_qi)*didi(k) + delta_ab0(i_mp_qi,i_mp_qi)*didi(k) + delta_b0(i_mp_qi)*didi(k) ) &
4670 * sqrt( theta_b0(i_mp_qi)*vivi(k) - theta_ab0(i_mp_qi,i_mp_qi)*vivi(k) + theta_b0(i_mp_qi)*vivi(k) &
4671 + sigma_i + sigma_i )
4672 pac(k,i_liacli2ls)= -0.25_rp*pi*e_stick(k)*e_ii*rhoq(k,i_ni)*rhoq(k,i_qi)*coef_acc_lii
4673 pac(k,i_niacni2ns)= -0.25_rp*pi*e_stick(k)*e_ii*rhoq(k,i_ni)*rhoq(k,i_ni)*coef_acc_nii
4689 ( delta_b0(i_mp_qs)*dsds(k) + delta_ab0(i_mp_qs,i_mp_qs)*dsds(k) + delta_b0(i_mp_qs)*dsds(k) ) &
4690 * sqrt( theta_b0(i_mp_qs)*vsvs(k) - theta_ab0(i_mp_qs,i_mp_qs)*vsvs(k) + theta_b0(i_mp_qs)*vsvs(k) &
4691 + sigma_s + sigma_s )
4692 pac(k,i_nsacns2ns)= -0.125_rp*pi*e_stick(k)*e_ss*rhoq(k,i_ns)*rhoq(k,i_ns)*coef_acc_nss
4698 ( delta_b0(i_mp_qg)*dgdg(k) + delta_ab0(i_mp_qg,i_mp_qg)*dgdg(k) + delta_b0(i_mp_qg)*dgdg(k) ) &
4699 * sqrt( theta_b0(i_mp_qg)*vgvg(k) - theta_ab0(i_mp_qg,i_mp_qg)*vgvg(k) + theta_b0(i_mp_qg)*vgvg(k) &
4700 + sigma_g + sigma_g )
4701 pac(k,i_ngacng2ng)= -0.125_rp*pi*e_stick(k)*e_gg*rhoq(k,i_ng)*rhoq(k,i_ng)*coef_acc_ngg
4711 sw = 0.5_rp - sign(0.5_rp,di_cri-ave_di(k))
4712 wx_cri = cfill_i*dwatr/rho_g*( pi/6.0_rp*rho_g*ave_di(k)**3/xq(k,i_mp_qi) - 1.0_rp ) * sw
4713 pq(k,i_licon) = i_iconv2g * pac(k,i_liaclc2li)/max(1.0_rp, wx_cri) * sw
4714 pq(k,i_nicon) = i_iconv2g * pq(k,i_licon)/xq(k,i_mp_qi) * sw
4719 wx_crs = cfill_s*dwatr/rho_g*( pi/6.0_rp*rho_g*ave_ds(k)**3/xq(k,i_mp_qs) - 1.0_rp )
4720 pq(k,i_lscon) = i_sconv2g * (pac(k,i_lsaclc2ls))/max(1.0_rp, wx_crs)
4721 pq(k,i_nscon) = i_sconv2g * pq(k,i_lscon)/xq(k,i_mp_qs)
4732 temc_p = max(tem(k) - t00, 0.0_rp)
4734 coef_emelt = cl/lhf0*temc_p
4736 pq(k,i_lgacm) = coef_emelt*pac(k,i_lgaclc2lg)
4737 pq(k,i_ngacm) = pq(k,i_lgacm)/xq(k,i_mp_qg)
4739 pq(k,i_lgarm) = coef_emelt*pac(k,i_lraclg2lg)
4740 pq(k,i_ngarm) = pq(k,i_lgarm)/xq(k,i_mp_qg)
4742 pq(k,i_lsacm) = coef_emelt*(pac(k,i_lsaclc2ls))
4743 pq(k,i_nsacm) = pq(k,i_lsacm)/xq(k,i_mp_qs)
4745 pq(k,i_lsarm) = coef_emelt*(pac(k,i_lracls2lg_r)+pac(k,i_lracls2lg_s))
4746 pq(k,i_nsarm) = pq(k,i_lsarm)/xq(k,i_mp_qg)
4748 pq(k,i_liacm) = coef_emelt*pac(k,i_liaclc2li)
4749 pq(k,i_niacm) = pq(k,i_liacm)/xq(k,i_mp_qi)
4751 pq(k,i_liarm) = coef_emelt*(pac(k,i_lracli2lg_r)+pac(k,i_lracli2lg_i))
4752 pq(k,i_niarm) = pq(k,i_liarm)/xq(k,i_mp_qg)
4760 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_nc)-small )
4761 pcrg2(k,i_niacnc2ni) = pac(k,i_niacnc2ni)*(1.0_rp-sw1) / (rhoq(k,i_nc)+sw1) * rhoq_crg(k,i_qc)
4766 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_nc)-small )
4767 pcrg2(k,i_nsacnc2ns) = pac(k,i_nsacnc2ns)*(1.0_rp-sw1) / (rhoq(k,i_nc)+sw1) * rhoq_crg(k,i_qc)
4772 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_nc)-small )
4773 pcrg2(k,i_ngacnc2ng) = pac(k,i_ngacnc2ng)*(1.0_rp-sw1) / (rhoq(k,i_nc)+sw1) * rhoq_crg(k,i_qc)
4778 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ns)-small )
4779 pcrg2(k,i_ngacns2ng) = pac(k,i_ngacns2ng)*(1.0_rp-sw1) / (rhoq(k,i_ns)+sw1) * rhoq_crg(k,i_qs)
4784 alpha_lt = 5.0_rp * ( dq_xave(k,i_mp_qs) / d0_crg )**2 * vt_xave(k,i_mp_qg,2) / v0_crg
4785 alpha_lt = min( alpha_lt, 10.0_rp )
4786 pcrg2(k,i_cgngacns2ng)= 0.25_rp*pi*( 1.0_rp - e_stick(k) )*e_gs &
4787 * rhoq(k,i_ng)*rhoq(k,i_ns)*coef_acc_nsg(k) &
4788 * ( dqcrg(k)*alpha_lt ) &
4807 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ni)-small )
4808 pcrg2(k,i_niacns2ns) = pac(k,i_niacns2ns)*(1.0_rp-sw1) / (rhoq(k,i_ni)+sw1) * rhoq_crg(k,i_qi)
4813 sw = 0.5_rp + sign( 0.5_rp, t00-tem(k) )
4814 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_nr)-small )
4815 sw2 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ng)-small )
4816 pcrg2(k,i_nracng2ng) = pac(k,i_nracng2ng)*(1.0_rp-sw1)/(rhoq(k,i_nr)+sw1) * rhoq_crg(k,i_qr) * sw &
4817 + pac(k,i_nracng2ng)*(1.0_rp-sw2)/(rhoq(k,i_ng)+sw2) * rhoq_crg(k,i_qg) * (1.0_rp-sw)
4822 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ni)-small )
4823 pcrg2(k,i_nracni2ng_i) = pac(k,i_nracni2ng_i)*(1.0_rp-sw1) / (rhoq(k,i_ni)+sw1) * rhoq_crg(k,i_qi)
4828 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_nr)-small )
4829 pcrg2(k,i_nracni2ng_r) = pac(k,i_nracni2ng_r)*(1.0_rp-sw1) / (rhoq(k,i_nr)+sw1) * rhoq_crg(k,i_qr)
4834 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ns)-small )
4835 pcrg2(k,i_nracns2ng_s) = pac(k,i_nracns2ng_s)*(1.0_rp-sw1) / (rhoq(k,i_ns)+sw1) * rhoq_crg(k,i_qs)
4840 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_nr)-small )
4841 pcrg2(k,i_nracns2ng_r) = pac(k,i_nracns2ng_r)*(1.0_rp-sw1) / (rhoq(k,i_nr)+sw1) * rhoq_crg(k,i_qr)
4846 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ni)-small )
4847 pcrg2(k,i_niacni2ns) = pac(k,i_niacni2ns)*(1.0_rp-sw1) / (rhoq(k,i_ni)+sw1) * rhoq_crg(k,i_qi)
4852 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ni)-small )
4853 pcrg1(k,i_nicon) = i_iconv2g * pq(k,i_nicon)*(1.0_rp-sw1) / (rhoq(k,i_ni)+sw1) * rhoq_crg(k,i_qi)
4858 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ns)-small )
4859 pcrg1(k,i_nscon) = i_sconv2g * pq(k,i_nscon)*(1.0_rp-sw1) / (rhoq(k,i_ns)+sw1) * rhoq_crg(k,i_qs)
4863 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ng)-small )
4864 pcrg1(k,i_ngacm) = pq(k,i_ngacm)*(1.0_rp-sw1) / (rhoq(k,i_ng)+sw1) * rhoq_crg(k,i_qg)
4868 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ng)-small )
4869 pcrg1(k,i_ngarm) = pq(k,i_ngarm)*(1.0_rp-sw1) / (rhoq(k,i_ng)+sw1) * rhoq_crg(k,i_qg)
4873 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ns)-small )
4874 pcrg1(k,i_nsacm) = pq(k,i_nsacm)*(1.0_rp-sw1) / (rhoq(k,i_ns)+sw1) * rhoq_crg(k,i_qs)
4878 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ns)-small )
4879 pcrg1(k,i_nsarm) = pq(k,i_nsarm)*(1.0_rp-sw1) / (rhoq(k,i_ns)+sw1) * rhoq_crg(k,i_qs)
4883 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ni)-small )
4884 pcrg1(k,i_niacm) = pq(k,i_niacm)*(1.0_rp-sw1) / (rhoq(k,i_ni)+sw1) * rhoq_crg(k,i_qi)
4888 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ni)-small )
4889 pcrg1(k,i_niarm) = pq(k,i_niarm)*(1.0_rp-sw1) / (rhoq(k,i_ni)+sw1) * rhoq_crg(k,i_qi)
4899 ! collection process
4902 d0_crg, v0_crg, & ! in
4903 beta_crg, dqcrg, & ! in
4904 wtem, rhoq, rhoq_crg, & ! in
4905 xq, dq_xave, vt_xave, & ! in
4908 Pcrg1, Pcrg2, & ! inout
4911 moist_psat_ice => atmos_saturation_psat_ice
4916 integer,
intent(in) :: KA, KS, KE
4921 real(RP),
intent(in) :: wtem(KA)
4923 real(RP),
intent(in) :: rhoq(KA,I_QV:I_NG)
4924 real(RP),
intent(in) :: rho(KA)
4926 real(RP),
intent(in) :: xq(KA,HYDRO_MAX)
4928 real(RP),
intent(in) :: dq_xave(KA,HYDRO_MAX)
4930 real(RP),
intent(in) :: vt_xave(KA,HYDRO_MAX,2)
4934 real(RP),
intent(inout):: PQ(KA,PQ_MAX)
4936 real(RP),
intent(out):: Pac(KA,Pac_MAX)
4938 logical,
intent(in) :: flg_lt
4939 real(RP),
intent(in) :: beta_crg(KA)
4940 real(RP),
intent(in) :: dqcrg(KA)
4941 real(RP),
intent(in) :: d0_crg, v0_crg
4942 real(RP),
intent(in) :: rhoq_crg(KA,I_QC:I_QG)
4943 real(RP),
intent(inout):: Pcrg1(KA,PQ_MAX)
4944 real(RP),
intent(inout):: Pcrg2(KA,Pcrg_MAX)
4946 real(RP),
parameter :: a_dec = 0.883_rp
4947 real(RP),
parameter :: b_dec = 0.093_rp
4948 real(RP),
parameter :: c_dec = 0.00348_rp
4949 real(RP),
parameter :: d_dec = 4.5185e-5_rp
4953 real(RP),
parameter :: E_C12(6)=(/&
4954 0.010_rp, 0.080_rp, 0.10_rp, 0.60_rp, 0.20_rp, 0.10_rp/)
4959 real(RP) :: E_c, E_r, E_i, E_s, E_g
4962 real(RP):: E_stick(KA)
4964 real(RP) :: temc, temc2, temc3
4966 real(RP) :: esi_rat(KA)
4969 real(RP) :: temc_p, temc_m
4976 real(RP) :: ave_di(KA)
4977 real(RP) :: ave_ds(KA)
4980 real(RP) :: coef_acc_LCI, coef_acc_NCI
4981 real(RP) :: coef_acc_LCS, coef_acc_NCS
4983 real(RP) :: coef_acc_LCG, coef_acc_NCG
4984 real(RP) :: coef_acc_LRI_I, coef_acc_NRI_I
4985 real(RP) :: coef_acc_LRI_R, coef_acc_NRI_R
4986 real(RP) :: coef_acc_LRS_S, coef_acc_NRS_S
4987 real(RP) :: coef_acc_LRS_R, coef_acc_NRS_R
4988 real(RP) :: coef_acc_LRG, coef_acc_NRG
4989 real(RP) :: coef_acc_LII, coef_acc_NII
4990 real(RP) :: coef_acc_LIS, coef_acc_NIS
4991 real(RP) :: coef_acc_NSS
4992 real(RP) :: coef_acc_NGG
4993 real(RP) :: coef_acc_LSG, coef_acc_NSG(KA)
4995 real(RP) :: dcdc(KA), dcdi, dcds, dcdg
4996 real(RP) :: drdr(KA), drdi(KA), drds(KA), drdg
4997 real(RP) :: didi(KA), dids, didg
4998 real(RP) :: dsds(KA), dsdg
4999 real(RP) :: dgdg(KA)
5011 real(RP) :: sw, sw1, sw2, tmp
5012 real(RP) :: alpha_lt
5017 real(RP) :: tem_e(KA)
5024 integer,
parameter :: ngmax=4
5026 real(RP) :: lambdac(KA), lambdar(KA), lambdai(KA), lambdas(KA), lambdag(KA)
5027 real(RP) :: A_dsdc(KA), A_dsdr(KA), A_dsdi(KA), A_dsds(KA), A_dsdg(KA)
5031 real(RP) :: dNc_glx(KA,ngmax), dNr_glx(KA,ngmax), dNi_glx(KA,ngmax), dNs_glx(KA,ngmax), dNg_glx(KA,ngmax)
5032 real(RP) :: dNc_gly, dNr_gly(KA,ngmax), dNi_gly(KA,ngmax), dNs_gly(KA,ngmax), dNg_gly(KA,ngmax)
5034 real(RP) :: dc_glx, dr_glx, di_glx, ds_glx, dg_glx
5035 real(RP) :: dc_gly, dr_gly, di_gly, ds_gly, dg_gly
5036 real(RP) :: xc_glx(KA,ngmax), xr_glx(KA,ngmax), xi_glx(KA,ngmax), xs_glx(KA,ngmax), xg_glx(KA,ngmax)
5037 real(RP) :: xc_gly, xr_gly(KA,ngmax), xi_gly, xs_gly, xg_gly
5039 real(RP) :: vtc_glx(KA,ngmax), vtr_glx(KA,ngmax), vti_glx(KA,ngmax), vts_glx(KA,ngmax), vtg_glx(KA,ngmax)
5040 real(RP) :: vtc_gly, vtr_gly(KA,ngmax), vti_gly(KA,ngmax), vts_gly(KA,ngmax), vtg_gly(KA,ngmax)
5041 real(RP) :: dac_glx(KA,ngmax), dar_glx(KA,ngmax), dai_glx(KA,ngmax), das_glx(KA,ngmax), dag_glx(KA,ngmax)
5042 real(RP) :: dac_gly, dar_gly(KA,ngmax), dai_gly(KA,ngmax), das_gly(KA,ngmax), dag_gly(KA,ngmax)
5046 real(RP) :: E_ic(KA), E_sc(KA), E_gc(KA)
5050 real(RP) :: acx, bcx, gcx, scx
5051 real(RP) :: acy, bcy, gcy, scy
5052 real(RP),
parameter :: as = 0.59452551_rp
5053 real(RP),
parameter :: bs = 2.4490_rp
5054 real(RP),
parameter :: gs = 0.131488_rp
5055 real(RP),
parameter :: ss = 1.880000_rp
5056 real(RP),
parameter :: ag = 19.5072514_rp
5057 real(RP),
parameter :: bg = 2.8_rp
5058 real(RP),
parameter :: gg = 0.5_rp
5059 real(RP),
parameter :: sg = 2.0_rp
5060 real(RP) :: num_Besti_glx, num_Bests_glx, num_Bestg_glx
5061 real(RP) :: num_Besti_gly, num_Bests_gly, num_Bestg_gly
5062 real(RP) :: num_Rei_glx, num_Res_glx, num_Reg_glx
5063 real(RP) :: num_Rei_gly, num_Res_gly, num_Reg_gly
5064 real(RP),
parameter :: c0=0.6_rp
5065 real(RP),
parameter :: d0=5.83_rp
5067 real(RP) :: mua(KA), nua(KA)
5069 real(RP),
parameter :: mua0 = 1.718e-5_rp
5071 real(RP),
parameter :: dmua_dT = 5.28e-8_rp
5077 real(RP) :: kernel_cg, kernel_cs, kernel_ci
5078 real(RP) :: kernel_rg, kernel_rs, kernel_ri
5079 real(RP) :: kernel_ig, kernel_is, kernel_ii
5080 real(RP) :: kernel_sg, kernel_ss
5081 real(RP) :: kernel_gg
5082 real(RP) :: kernel_sg_reb
5099 real(RP),
parameter :: gauss_rangec=2.0_rp
5100 real(RP),
parameter :: wc_gl(ngmax)=(/&
5101 0.2411146051511425e+00_rp, &
5102 0.4520325754088027e+00_rp, &
5103 0.4520325754088027e+00_rp, &
5104 0.2411146051511425e+00_rp &
5106 real(RP),
parameter :: coefc_d_gl(ngmax)=(/&
5107 0.5505187813766612e+00_rp, &
5108 0.7900516927471093e+00_rp, &
5109 0.1265739962562290e+01_rp, &
5110 0.1816468454535444e+01_rp &
5112 real(RP),
parameter :: gauss_ranger=8.0_rp
5113 real(RP),
parameter :: wr_gl(ngmax)=(/&
5114 0.723343815453428e+00_rp,&
5115 1.35609772622641e+00_rp, &
5116 1.35609772622641e+00_rp, &
5117 0.723343815453428e+00_rp &
5119 real(RP),
parameter :: coefr_d_gl(ngmax)=(/&
5120 0.166846238310235e+00_rp, &
5121 0.493135790663523e+00_rp, &
5122 2.02783902311062e+00_rp, &
5123 5.99354237846583e+00_rp &
5125 real(RP),
parameter :: gauss_range=5.0_rp
5126 real(RP),
parameter :: w_gl(ngmax)=(/&
5127 0.559850775788111e+00_rp, &
5128 1.04958713664599e+00_rp, &
5129 1.04958713664599e+00_rp, &
5130 0.559850775788111e+00_rp &
5132 real(RP),
parameter :: coef_d_gl(ngmax)=(/&
5133 0.2500872485877803e+00_rp, &
5134 0.5785800417604080e+00_rp, &
5135 0.1728369331505741e+01_rp, &
5136 0.3998604509613778e+01_rp &
5139 real(RP) :: wx_cri, wx_crs
5140 real(RP) :: coef_emelt
5150 tem(k) = max( wtem(k), tem_min )
5153 call moist_psat_ice( ka, ks, ke, &
5156 if( opt_stick_ks96 )
then
5162 e_dec = max(0.0_rp, a_dec + b_dec*temc + c_dec*temc2 + d_dec*temc3 )
5163 esi_rat(k) = rhoq(k,i_qv)*rvap*tem(k)/esi(k)
5164 e_stick(k) = min(1.0_rp, e_dec*esi_rat(k))
5166 else if( opt_stick_co86 )
then
5169 temc = min(tem(k) - t00,0.0_rp)
5170 w1 = 0.035_rp*temc-0.7_rp
5171 e_stick(k) = 10._rp**w1
5176 temc_m = min(tem(k) - t00,0.0_rp)
5177 e_stick(k) = exp(0.09_rp*temc_m)
5186 tem(:) = max(wtem(:), tem_min )
5187 tem_e(:) = max(wtem(:), tem_min_estick )
5189 call moist_psat_ice( ka, ks, ke, tem(:), esi(:) )
5192 if ( opt_stick_ks96 )
then
5195 temc = tem_e(k) - t00
5198 e_dec = max(0.0_rp, a_dec + b_dec*temc + c_dec*temc2 + d_dec*temc3 )
5199 esi_rat(k) = rhoq(k,i_qv)*rvap*tem(k)/esi(k)
5200 e_stick(k) = min(1.0_rp, e_dec*esi_rat(k))
5202 elseif( opt_stick_co86 )
then
5204 temc = min(tem_e(k) - t00,0.0_rp)
5205 w1 = 0.035_rp*temc-0.7_rp
5206 e_stick(k) = 10.0_rp**w1
5208 elseif( opt_stick_c12 )
then
5210 if (tem_e(k)>273.15_rp)
then
5212 elseif(tem_e(k)<243.15_rp)
then
5214 elseif(tem_e(k)<248.15_rp)
then
5215 e_stick(k)=e_c12(1)+0.2_rp*(e_c12(2)-e_c12(1))*(tem_e(k)-243.15_rp)
5216 elseif(tem_e(k)<253.15_rp)
then
5217 e_stick(k)=e_c12(2)+0.2_rp*(e_c12(3)-e_c12(2))*(tem_e(k)-248.15_rp)
5218 elseif(tem_e(k)<258.15_rp)
then
5219 e_stick(k)=e_c12(3)+0.2_rp*(e_c12(4)-e_c12(3))*(tem_e(k)-253.15_rp)
5220 elseif(tem_e(k)<263.15_rp)
then
5221 e_stick(k)=e_c12(4)+0.2_rp*(e_c12(5)-e_c12(4))*(tem_e(k)-258.15_rp)
5222 elseif(tem_e(k)<268.15_rp)
then
5223 e_stick(k)=e_c12(5)+0.2_rp*(e_c12(6)-e_c12(5))*(tem_e(k)-263.15_rp)
5229 if ( opt_stick_rhh57 )
then
5231 if ( tem_e(k) < 270.0_rp .AND. rhoq(k,i_qv)*rvap*tem(k) < esi(k) )
then
5237 elseif( opt_stick_rhks96 )
then
5239 esi_rat(k) = min( rhoq(k,i_qv)*rvap*tem(k)/esi(k),1.0_rp )
5247 temc_m = min(tem_e(k) - t00,0.0_rp)
5248 e_stick(k) = exp(0.09_rp*temc_m)*esi_rat(k)
5257 mua(k) = mua0 + dmua_dt*(tem(k)-273.15_rp)
5258 nua(k) = mua(k)/rho(k)
5261 lambdac(k) = xq(k,i_mp_qc)**(-mu(i_mp_qc))*coef_lambda(i_mp_qc)
5262 a_dsdc(k) = rhoq(k,i_nc)*coef_a(i_mp_qc)*lambdac(k)**((nu(i_mp_qc)+1.0_rp)/mu(i_mp_qc))
5265 lambdar(k) = xq(k,i_mp_qr)**(-mu(i_mp_qr))*coef_lambda(i_mp_qr)
5266 a_dsdr(k) = rhoq(k,i_nr)*coef_a(i_mp_qr)*lambdar(k)**((nu(i_mp_qr)+1.0_rp)/mu(i_mp_qr))
5269 lambdai(k) = xq(k,i_mp_qi)**(-mu(i_mp_qi))*coef_lambda(i_mp_qi)
5270 a_dsdi(k) = rhoq(k,i_ni)*coef_a(i_mp_qi)*lambdai(k)**((nu(i_mp_qi)+1.0_rp)/mu(i_mp_qi))
5273 lambdas(k) = xq(k,i_mp_qs)**(-mu(i_mp_qs))*coef_lambda(i_mp_qs)
5274 a_dsds(k) = rhoq(k,i_ns)*coef_a(i_mp_qs)*lambdas(k)**((nu(i_mp_qs)+1.0_rp)/mu(i_mp_qs))
5277 lambdag(k) = xq(k,i_mp_qg)**(-mu(i_mp_qg))*coef_lambda(i_mp_qg)
5278 a_dsdg(k) = rhoq(k,i_ng)*coef_a(i_mp_qg)*lambdag(k)**((nu(i_mp_qg)+1.0_rp)/mu(i_mp_qg))
5287 dc_glx = dq_xave(k,i_mp_qc)*coefc_d_gl(ngx)
5288 xc_glx(k,ngx) = ( (dc_glx/a_m(i_mp_qc)) )**(1.0_rp/b_m(i_mp_qc))
5289 dnc_glx(k,ngx) = a_dsdc(k)*(xc_glx(k,ngx)**nu(i_mp_qc)) * exp(-lambdac(k)*xc_glx(k,ngx)**mu(i_mp_qc))&
5290 *(xc_glx(k,ngx)/(b_m(i_mp_qc)*dc_glx))*dc_glx*wc_gl(ngx)
5292 dr_glx = dq_xave(k,i_mp_qr)*coefr_d_gl(ngx)
5293 xr_glx(k,ngx) = ( (dr_glx/a_m(i_mp_qr)) )**(1.0_rp/b_m(i_mp_qr))
5294 dnr_glx(k,ngx) = a_dsdr(k)*(xr_glx(k,ngx)**nu(i_mp_qr)) * exp(-lambdar(k)*xr_glx(k,ngx)**mu(i_mp_qr))&
5295 *(xr_glx(k,ngx)/(b_m(i_mp_qr)*dr_glx))*dr_glx*wr_gl(ngx)
5297 di_glx = dq_xave(k,i_mp_qi)*coef_d_gl(ngx)
5298 xi_glx(k,ngx) = ( (di_glx/a_m(i_mp_qi)) )**(1.0_rp/b_m(i_mp_qi))
5299 dni_glx(k,ngx) = a_dsdi(k)*(xi_glx(k,ngx)**nu(i_mp_qi)) * exp(-lambdai(k)*xi_glx(k,ngx)**mu(i_mp_qi))&
5300 *(xi_glx(k,ngx)/(b_m(i_mp_qi)*di_glx))*di_glx*w_gl(ngx)
5302 ds_glx = dq_xave(k,i_mp_qs)*coef_d_gl(ngx)
5303 xs_glx(k,ngx) = ( (ds_glx/a_m(i_mp_qs)) )**(1.0_rp/b_m(i_mp_qs))
5304 dns_glx(k,ngx) = a_dsds(k)*(xs_glx(k,ngx)**nu(i_mp_qs)) * exp(-lambdas(k)*xs_glx(k,ngx)**mu(i_mp_qs))&
5305 *(xs_glx(k,ngx)/(b_m(i_mp_qs)*ds_glx))*ds_glx*w_gl(ngx)
5307 dg_glx = dq_xave(k,i_mp_qg)*coef_d_gl(ngx)
5308 xg_glx(k,ngx) = ( (dg_glx/a_m(i_mp_qg)) )**(1.0_rp/b_m(i_mp_qg))
5309 dng_glx(k,ngx) = a_dsdg(k)*(xg_glx(k,ngx)**nu(i_mp_qg)) * exp(-lambdag(k)*xg_glx(k,ngx)**mu(i_mp_qg))&
5310 *(xg_glx(k,ngx)/(b_m(i_mp_qg)*dg_glx))*dg_glx*w_gl(ngx)
5324 sw = 0.5_rp + sign(0.5_rp, di_glx - 100.e-6_rp )
5325 acx = ( 0.1677_rp*(1.0_rp-sw) + 0.00166_rp*sw ) * 1.e-3_rp * 100.0_rp**( 2.91_rp*(1.0_rp-sw) + 1.91_rp*sw )
5326 bcx = 2.91_rp*(1.0_rp-sw) + 1.91_rp*sw
5327 gcx = (0.684_rp*(1.0_rp-sw) + 0.0696_rp*sw ) * 1.e-4_rp * 10.0_rp**( 4.0_rp*(1.0_rp-sw) + 3.0_rp*sw )
5328 scx = 2.0_rp*(1.0_rp-sw) + 1.5_rp*sw
5329 num_besti_glx = 2.0_rp*acx*grav*rho(k)*di_glx**(bcx+2.0_rp-scx)/(gcx*mua(k)**2)
5330 num_bests_glx = 2.0_rp*as *grav*rho(k)*ds_glx**(bs +2.0_rp-ss )/(gs *mua(k)**2)
5331 num_bestg_glx = 2.0_rp*ag *grav*rho(k)*dg_glx**(bg +2.0_rp-sg )/(gg *mua(k)**2)
5332 num_rei_glx = 0.25_rp*d0*d0*( sqrt(1.0_rp+4.0_rp*sqrt(num_besti_glx)/(d0*d0*sqrt(c0)))-1.0_rp )**2
5333 num_res_glx = 0.25_rp*d0*d0*( sqrt(1.0_rp+4.0_rp*sqrt(num_bests_glx)/(d0*d0*sqrt(c0)))-1.0_rp )**2
5334 num_reg_glx = 0.25_rp*d0*d0*( sqrt(1.0_rp+4.0_rp*sqrt(num_bestg_glx)/(d0*d0*sqrt(c0)))-1.0_rp )**2
5336 vtc_glx(k,ngx) = coef_vtr_ar2*dc_glx*(1.0_rp-exp(-coef_vtr_br2*dc_glx))
5343 sw = 0.5_rp + sign( 0.5_rp, dr_glx - d_vtr_branch )
5344 tmp = exp( - ( coef_vtr_br2*(1.0_rp-sw) + coef_vtr_cr1*sw ) * dr_glx )
5345 vtr_glx(k,ngx) = coef_vtr_ar2 * dr_glx * ( 1.0_rp - tmp ) * (1.0_rp-sw) &
5346 + ( coef_vtr_ar1 - coef_vtr_br1 * tmp ) * sw
5348 vti_glx(k,ngx) = num_rei_glx*nua(k)/di_glx
5349 vts_glx(k,ngx) = num_res_glx*nua(k)/ds_glx
5350 vtg_glx(k,ngx) = num_reg_glx*nua(k)/dg_glx
5352 dac_glx(k,ngx) = dc_glx
5353 dar_glx(k,ngx) = dr_glx
5354 dai_glx(k,ngx) = 2.0_rp*sqrt( (gcx*di_glx**scx)/pi )
5355 das_glx(k,ngx) = 2.0_rp*sqrt( (gs *ds_glx**ss )/pi )
5356 dag_glx(k,ngx) = 2.0_rp*sqrt( (gg *dg_glx**sg )/pi )
5366 dr_gly = dq_xave(k,i_mp_qr)*coefr_d_gl(ngy)
5367 xr_gly(k,ngy) = ( (dr_gly/a_m(i_mp_qr)) )**(1.0_rp/b_m(i_mp_qr))
5368 dnr_gly(k,ngy) = a_dsdr(k)*(xr_gly(k,ngy)**nu(i_mp_qr)) * exp(-lambdar(k)*xr_gly(k,ngy)**mu(i_mp_qr))&
5369 *(xr_gly(k,ngy)/(b_m(i_mp_qr)*dr_gly))*dr_gly*wr_gl(ngy)
5371 di_gly = dq_xave(k,i_mp_qi)*coef_d_gl(ngy)
5372 xi_gly = ( (di_gly/a_m(i_mp_qi)) )**(1.0_rp/b_m(i_mp_qi))
5373 dni_gly(k,ngy) = a_dsdi(k)*(xi_gly**nu(i_mp_qi)) * exp(-lambdai(k)*xi_gly**mu(i_mp_qi))&
5374 *(xi_gly/(b_m(i_mp_qi)*di_gly))*di_gly*w_gl(ngy)
5376 ds_gly = dq_xave(k,i_mp_qs)*coef_d_gl(ngy)
5377 xs_gly = ( (ds_gly/a_m(i_mp_qs)) )**(1.0_rp/b_m(i_mp_qs))
5378 dns_gly(k,ngy) = a_dsds(k)*(xs_gly**nu(i_mp_qs)) * exp(-lambdas(k)*xs_gly**mu(i_mp_qs))&
5379 *(xs_gly/(b_m(i_mp_qs)*ds_gly))*ds_gly*w_gl(ngy)
5381 dg_gly = dq_xave(k,i_mp_qg)*coef_d_gl(ngy)
5382 xg_gly = ( (dg_gly/a_m(i_mp_qg)) )**(1.0_rp/b_m(i_mp_qg))
5383 dng_gly(k,ngy) = a_dsdg(k)*(xg_gly**nu(i_mp_qg)) * exp(-lambdag(k)*xg_gly**mu(i_mp_qg))&
5384 *(xg_gly/(b_m(i_mp_qg)*dg_gly))*dg_gly*w_gl(ngy)
5398 sw = 0.5_rp + sign( 0.5_rp, di_gly - 100.e-6_rp )
5399 acy = ( 0.1677_rp*(1.0_rp-sw) + 0.00166_rp*sw ) * 1.e-3_rp * 100.0_rp**( 2.91_rp*(1.0_rp-sw) + 1.91_rp*sw )
5400 bcy = 2.91_rp*(1.0_rp-sw) + 1.91_rp*sw
5401 gcy = ( 0.684_rp*(1.0_rp-sw) + 0.0696_rp*sw ) * 1.e-4_rp * 10.0_rp**( 4.0_rp*(1.0_rp-sw) + 3.0_rp*sw )
5402 scy = 2.0_rp*(1.0_rp-sw) + 1.5_rp*sw
5403 num_besti_gly = 2.0_rp*acy*grav*rho(k)*di_gly**(bcy+2.0_rp-scy)/(gcy*mua(k)**2)
5404 num_bests_gly = 2.0_rp*as *grav*rho(k)*ds_gly**(bs +2.0_rp-ss )/(gs *mua(k)**2)
5405 num_bestg_gly = 2.0_rp*ag *grav*rho(k)*dg_gly**(bg +2.0_rp-sg )/(gg *mua(k)**2)
5406 num_rei_gly = 0.25_rp*d0*d0*( sqrt(1.0_rp+4.0_rp*sqrt(num_besti_gly)/(d0*d0*sqrt(c0)))-1.0_rp )**2
5407 num_res_gly = 0.25_rp*d0*d0*( sqrt(1.0_rp+4.0_rp*sqrt(num_bests_gly)/(d0*d0*sqrt(c0)))-1.0_rp )**2
5408 num_reg_gly = 0.25_rp*d0*d0*( sqrt(1.0_rp+4.0_rp*sqrt(num_bestg_gly)/(d0*d0*sqrt(c0)))-1.0_rp )**2
5415 sw = 0.5_rp + sign( 0.5_rp, dr_gly - d_vtr_branch )
5416 tmp = exp( - ( coef_vtr_br2*(1.0_rp-sw) + coef_vtr_cr1*sw ) * dr_gly )
5417 vtr_gly(k,ngy) = coef_vtr_ar2 * dr_gly * ( 1.0_rp - tmp ) * (1.0_rp-sw) &
5418 + ( coef_vtr_ar1 - coef_vtr_br1 * tmp ) * sw
5420 vti_gly(k,ngy) = num_rei_gly*nua(k)/di_gly
5421 vts_gly(k,ngy) = num_res_gly*nua(k)/ds_gly
5422 vtg_gly(k,ngy) = num_reg_gly*nua(k)/dg_gly
5424 dar_gly(k,ngy) = dr_gly
5425 dai_gly(k,ngy) = 2.0_rp*sqrt( (gcy*di_gly**scy)/pi )
5426 das_gly(k,ngy) = 2.0_rp*sqrt( (gs *ds_gly**ss )/pi )
5427 dag_gly(k,ngy) = 2.0_rp*sqrt( (gg *dg_gly**sg )/pi )
5435 e_c = max(0.0_rp, min(1.0_rp, (dq_xave(k,i_mp_qc)-dc0)/(dc1-dc0) ))
5442 sw = 0.5_rp + sign( 0.5_rp, dq_xave(k,i_mp_qi)-di0 )
5449 sw = 0.5_rp + sign( 0.5_rp, dq_xave(k,i_mp_qs)-ds0 )
5456 sw = 0.5_rp + sign( 0.5_rp, dq_xave(k,i_mp_qg)-dg0 )
5476 kernel_cg = 0.25_rp * pi * (dag_gly(k,ngy)+dac_glx(k,ngx))**2 * abs(vtg_gly(k,ngy)-vtc_glx(k,ngx)) * e_gc(k)
5477 pac(k,i_ngacnc2ng) = pac(k,i_ngacnc2ng) - kernel_cg *dnc_glx(k,ngx)*dng_gly(k,ngy)
5478 pac(k,i_lgaclc2lg) = pac(k,i_lgaclc2lg) - kernel_cg*xc_glx(k,ngx)*dnc_glx(k,ngx)*dng_gly(k,ngy)
5485 kernel_cs = 0.25_rp * pi * (das_gly(k,ngy)+dac_glx(k,ngx))**2 * abs(vts_gly(k,ngy)-vtc_glx(k,ngx)) * e_sc(k)
5486 pac(k,i_nsacnc2ns) = pac(k,i_nsacnc2ns) - kernel_cs *dnc_glx(k,ngx)*dns_gly(k,ngy)
5487 pac(k,i_lsaclc2ls) = pac(k,i_lsaclc2ls) - kernel_cs*xc_glx(k,ngx)*dnc_glx(k,ngx)*dns_gly(k,ngy)
5494 kernel_ci = 0.25_rp * pi * (dai_gly(k,ngy)+dac_glx(k,ngx))**2 * abs(vti_gly(k,ngy)-vtc_glx(k,ngx)) * e_ic(k)
5495 pac(k,i_niacnc2ni) = pac(k,i_niacnc2ni) - kernel_ci *dnc_glx(k,ngx)*dni_gly(k,ngy)
5496 pac(k,i_liaclc2li) = pac(k,i_liaclc2li) - kernel_ci*xc_glx(k,ngx)*dnc_glx(k,ngx)*dni_gly(k,ngy)
5503 kernel_rg = 0.25_rp * pi * (dag_gly(k,ngy)+dar_glx(k,ngx))**2 * abs(vtg_gly(k,ngy)-vtr_glx(k,ngx)) * e_gr
5505 pac(k,i_nracng2ng) = pac(k,i_nracng2ng) - kernel_rg *dnr_glx(k,ngx)*dng_gly(k,ngy)
5506 pac(k,i_lraclg2lg) = pac(k,i_lraclg2lg) - kernel_rg*xr_glx(k,ngx)*dnr_glx(k,ngx)*dng_gly(k,ngy)
5508 pac(k,i_nracng2nr) = pac(k,i_nracng2nr) - kernel_rg *dng_glx(k,ngx)*dnr_gly(k,ngy)
5509 pac(k,i_lraclg2lr) = pac(k,i_lraclg2lr) - kernel_rg*xg_glx(k,ngx)*dng_glx(k,ngx)*dnr_gly(k,ngy)
5516 kernel_rs = 0.25_rp * pi * (das_glx(k,ngx)+dar_gly(k,ngy))**2 * abs(vts_glx(k,ngx)-vtr_gly(k,ngy)) * e_sr
5518 pac(k,i_nracns2ng_r) = pac(k,i_nracns2ng_r) - kernel_rs *dns_glx(k,ngx)*dnr_gly(k,ngy)
5519 pac(k,i_lracls2lg_r) = pac(k,i_lracls2lg_r) - kernel_rs*xr_gly(k,ngy)*dns_glx(k,ngx)*dnr_gly(k,ngy)
5521 pac(k,i_nracns2ng_s) = pac(k,i_nracns2ng_s) - kernel_rs *dns_glx(k,ngx)*dnr_gly(k,ngy)
5522 pac(k,i_lracls2lg_s) = pac(k,i_lracls2lg_s) - kernel_rs*xs_glx(k,ngx)*dns_glx(k,ngx)*dnr_gly(k,ngy)
5529 kernel_ri = 0.25_rp * pi * (dai_glx(k,ngx)+dar_gly(k,ngy))**2 * abs(vti_glx(k,ngx)-vtr_gly(k,ngy)) * e_ir
5531 pac(k,i_nracni2ng_r) = pac(k,i_nracni2ng_r) - kernel_ri *dni_glx(k,ngx)*dnr_gly(k,ngy)
5532 pac(k,i_lracli2lg_r) = pac(k,i_lracli2lg_r) - kernel_ri*xr_gly(k,ngy)*dni_glx(k,ngx)*dnr_gly(k,ngy)
5534 pac(k,i_nracni2ng_i) = pac(k,i_nracni2ng_i) - kernel_ri *dni_glx(k,ngx)*dnr_gly(k,ngy)
5535 pac(k,i_lracli2lg_i) = pac(k,i_lracli2lg_i) - kernel_ri*xi_glx(k,ngx)*dni_glx(k,ngx)*dnr_gly(k,ngy)
5542 kernel_ig = 0.25_rp * pi * (dai_glx(k,ngx)+dag_gly(k,ngy))**2 * abs(vti_glx(k,ngx)-vtg_gly(k,ngy)) * e_stick(k) * e_gi
5543 pac(k,i_niacng2ng) = pac(k,i_niacng2ng) - kernel_ig *dni_glx(k,ngx)*dng_gly(k,ngy)
5544 pac(k,i_liaclg2lg) = pac(k,i_liaclg2lg) - kernel_ig*xi_glx(k,ngx)*dni_glx(k,ngx)*dng_gly(k,ngy)
5551 kernel_is = 0.25_rp * pi * (dai_glx(k,ngx)+das_gly(k,ngy))**2 * abs(vti_glx(k,ngx)-vts_gly(k,ngy)) * e_stick(k) * e_si
5552 pac(k,i_niacns2ns) = pac(k,i_niacns2ns) - kernel_is *dni_glx(k,ngx)*dns_gly(k,ngy)
5553 pac(k,i_liacls2ls) = pac(k,i_liacls2ls) - kernel_is*xi_glx(k,ngx)*dni_glx(k,ngx)*dns_gly(k,ngy)
5560 kernel_ii = 0.25_rp * pi * (dai_glx(k,ngx)+dai_gly(k,ngy))**2 * abs(vti_glx(k,ngx)-vti_gly(k,ngy)) * e_stick(k) * e_ii
5561 pac(k,i_niacni2ns) = pac(k,i_niacni2ns) - kernel_ii *dni_glx(k,ngx)*dni_gly(k,ngy)
5562 pac(k,i_liacli2ls) = pac(k,i_liacli2ls) - kernel_ii*xi_glx(k,ngx)*dni_glx(k,ngx)*dni_gly(k,ngy)
5569 kernel_sg = 0.25_rp * pi * (das_glx(k,ngx)+dag_gly(k,ngy))**2 * abs(vts_glx(k,ngx)-vtg_gly(k,ngy)) * e_stick(k) * e_gs
5570 pac(k,i_ngacns2ng) = pac(k,i_ngacns2ng) - kernel_sg *dns_glx(k,ngx)*dng_gly(k,ngy)
5571 pac(k,i_lgacls2lg) = pac(k,i_lgacls2lg) - kernel_sg*xs_glx(k,ngx)*dns_glx(k,ngx)*dng_gly(k,ngy)
5578 kernel_ss = 0.125_rp * pi * (das_glx(k,ngx)+das_gly(k,ngy))**2 * abs(vts_glx(k,ngx)-vts_gly(k,ngy)) * e_stick(k) * e_ss
5579 pac(k,i_nsacns2ns) = pac(k,i_nsacns2ns) - kernel_ss*dns_glx(k,ngx)*dns_gly(k,ngy)
5586 kernel_gg = 0.125_rp * pi * (dag_glx(k,ngx)+dag_gly(k,ngy))**2 * abs(vtg_glx(k,ngx)-vtg_gly(k,ngy)) * e_stick(k) * e_gg
5587 pac(k,i_ngacng2ng) = pac(k,i_ngacng2ng) - kernel_gg*dng_glx(k,ngx)*dng_gly(k,ngy)
5600 alpha_lt = 5.0_rp * ( das_glx(k,ngx) / d0_crg )**2*vtg_gly(k,ngy)/v0_crg
5601 alpha_lt = min( alpha_lt, 10.0_rp )
5603 kernel_sg_reb = 0.25_rp * pi * (das_glx(k,ngx)+dag_gly(k,ngy))**2 * abs(vts_glx(k,ngx)-vtg_gly(k,ngy)) &
5604 * ( 1.0_rp - e_stick(k) ) * e_gs
5605 pcrg2(k,i_cgngacns2ng) = pcrg2(k,i_cgngacns2ng) + kernel_sg_reb*dns_glx(k,ngx)*dng_gly(k,ngy)*dqcrg(k)*alpha_lt*beta_crg(k)
5614 temc_p = max(tem(k) - t00,0.0_rp)
5620 if ( dq_xave(k,i_mp_qi) > di_cri )
then
5621 wx_cri = cfill_i*rhow/rho_g*( pi/6.0_rp*rho_g*dq_xave(k,i_mp_qi)*dq_xave(k,i_mp_qi)*dq_xave(k,i_mp_qi)/xq(k,i_mp_qi) - 1.0_rp )
5622 pq(k,i_licon) = i_iconv2g* pac(k,i_liaclc2li)/max(1.0_rp, wx_cri)
5623 pq(k,i_nicon) = i_iconv2g* pq(k,i_licon)/xq(k,i_mp_qi)
5626 pq(k,i_licon) = 0.0_rp
5627 pq(k,i_nicon) = 0.0_rp
5630 wx_crs = cfill_s*rhow/rho_g*( pi/6.0_rp*rho_g*dq_xave(k,i_mp_qs)*dq_xave(k,i_mp_qs)*dq_xave(k,i_mp_qs)/xq(k,i_mp_qs) - 1.0_rp )
5631 pq(k,i_lscon) = i_sconv2g* (pac(k,i_lsaclc2ls))/max(1.0_rp, wx_crs)
5632 pq(k,i_nscon) = i_sconv2g* pq(k,i_lscon)/xq(k,i_mp_qs)
5640 coef_emelt = cl/lhf0*temc_p
5642 pq(k,i_lgacm) = coef_emelt*pac(k,i_lgaclc2lg)
5643 pq(k,i_ngacm) = pq(k,i_lgacm)/xq(k,i_mp_qg)
5645 pq(k,i_lgarm) = coef_emelt*pac(k,i_lraclg2lg)
5646 pq(k,i_ngarm) = pq(k,i_lgarm)/xq(k,i_mp_qg)
5648 pq(k,i_lsacm) = coef_emelt*(pac(k,i_lsaclc2ls))
5649 pq(k,i_nsacm) = pq(k,i_lsacm)/xq(k,i_mp_qs)
5651 pq(k,i_lsarm) = coef_emelt*(pac(k,i_lracls2lg_r)+pac(k,i_lracls2lg_s))
5652 pq(k,i_nsarm) = pq(k,i_lsarm)/xq(k,i_mp_qg)
5654 pq(k,i_liacm) = coef_emelt*pac(k,i_liaclc2li)
5655 pq(k,i_niacm) = pq(k,i_liacm)/xq(k,i_mp_qi)
5657 pq(k,i_liarm) = coef_emelt*(pac(k,i_lracli2lg_r)+pac(k,i_lracli2lg_i))
5658 pq(k,i_niarm) = pq(k,i_liarm)/xq(k,i_mp_qg)
5666 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_nc)-small )
5667 pcrg2(k,i_ngacnc2ng) = pac(k,i_ngacnc2ng)*(1.0_rp-sw1) / (rhoq(k,i_nc)+sw1) * rhoq_crg(k,i_qc)
5672 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_nc)-small )
5673 pcrg2(k,i_nsacnc2ns) = pac(k,i_nsacnc2ns)*(1.0_rp-sw1) / (rhoq(k,i_nc)+sw1) * rhoq_crg(k,i_qc)
5678 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_nc)-small )
5679 pcrg2(k,i_niacnc2ni) = pac(k,i_niacnc2ni)*(1.0_rp-sw1) / (rhoq(k,i_nc)+sw1) * rhoq_crg(k,i_qc)
5684 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_nr)-small )
5685 sw2 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ng)-small )
5686 pcrg2(k,i_nracng2ng) = pac(k,i_nracng2ng)*(1.0_rp-sw1) / (rhoq(k,i_nr)+sw1) * rhoq_crg(k,i_qr)
5687 pcrg2(k,i_nracng2nr) = pac(k,i_nracng2nr)*(1.0_rp-sw2) / (rhoq(k,i_ng)+sw2) * rhoq_crg(k,i_qg)
5692 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_nr)-small )
5693 sw2 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ns)-small )
5694 pcrg2(k,i_nracns2ng_r) = pac(k,i_nracns2ng_r)*(1.0_rp-sw1) / (rhoq(k,i_nr)+sw1) * rhoq_crg(k,i_qr)
5695 pcrg2(k,i_nracns2ng_s) = pac(k,i_nracns2ng_s)*(1.0_rp-sw2) / (rhoq(k,i_ns)+sw2) * rhoq_crg(k,i_qs)
5701 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_nr)-small )
5702 sw2 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ni)-small )
5703 pcrg2(k,i_nracni2ng_r) = pac(k,i_nracni2ng_r)*(1.0_rp-sw1) / (rhoq(k,i_nr)+sw1) * rhoq_crg(k,i_qr)
5704 pcrg2(k,i_nracni2ng_i) = pac(k,i_nracni2ng_i)*(1.0_rp-sw2) / (rhoq(k,i_ni)+sw2) * rhoq_crg(k,i_qi)
5709 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ni)-small )
5710 pcrg2(k,i_niacng2ng) = pac(k,i_niacng2ng)*(1.0_rp-sw1) / (rhoq(k,i_ni)+sw1) * rhoq_crg(k,i_qi)
5715 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ni)-small )
5716 pcrg2(k,i_niacns2ns) = pac(k,i_niacns2ns)*(1.0_rp-sw1) / (rhoq(k,i_ni)+sw1) * rhoq_crg(k,i_qi)
5721 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ni)-small )
5722 pcrg2(k,i_niacni2ns) = pac(k,i_niacni2ns)*(1.0_rp-sw1) / (rhoq(k,i_ni)+sw1) * rhoq_crg(k,i_qi)
5727 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ns)-small )
5728 pcrg2(k,i_ngacns2ng) = pac(k,i_ngacns2ng)*(1.0_rp-sw1) / (rhoq(k,i_ns)+sw1) * rhoq_crg(k,i_qs)
5733 pcrg2(k,i_nsacns2ns) = 0.0_rp
5738 pcrg2(k,i_ngacng2ng) = 0.0_rp
5744 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ni)-small )
5745 pcrg1(k,i_nicon) = pq(k,i_nicon)*(1.0_rp-sw1) / (rhoq(k,i_ni)+sw1) * rhoq_crg(k,i_qi)
5750 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ns)-small )
5751 pcrg1(k,i_nscon) = pq(k,i_nscon)*(1.0_rp-sw1) / (rhoq(k,i_ns)+sw1) * rhoq_crg(k,i_qs)
5757 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ng)-small )
5758 pcrg1(k,i_ngacm) = pq(k,i_ngacm)*(1.0_rp-sw1) / (rhoq(k,i_ng)+sw1) * rhoq_crg(k,i_qg)
5763 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ng)-small )
5764 pcrg1(k,i_ngarm) = pq(k,i_ngarm)*(1.0_rp-sw1) / (rhoq(k,i_ng)+sw1) * rhoq_crg(k,i_qg)
5769 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ns)-small )
5770 pcrg1(k,i_nsacm) = pq(k,i_nsacm)*(1.0_rp-sw1) / (rhoq(k,i_ns)+sw1) * rhoq_crg(k,i_qs)
5775 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ns)-small )
5776 pcrg1(k,i_nsarm) = pq(k,i_nsarm)*(1.0_rp-sw1) / (rhoq(k,i_ns)+sw1) * rhoq_crg(k,i_qs)
5781 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ni)-small )
5782 pcrg1(k,i_niacm) = pq(k,i_niacm)*(1.0_rp-sw1) / (rhoq(k,i_ni)+sw1) * rhoq_crg(k,i_qi)
5787 sw1 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ni)-small )
5788 pcrg1(k,i_niarm) = pq(k,i_niarm)*(1.0_rp-sw1) / (rhoq(k,i_ni)+sw1) * rhoq_crg(k,i_qi)
5808 integer,
intent(in) :: KA, KS, KE
5810 real(RP),
intent(in) :: rhoq(KA,I_QV:I_NG)
5811 real(RP),
intent(in) :: rhoq_crg(KA,I_QC:I_QG)
5812 logical,
intent(in) :: flg_lt
5813 real(RP),
intent(in) :: xq(KA,HYDRO_MAX)
5814 real(RP),
intent(in) :: dq_xave(KA,HYDRO_MAX)
5815 real(RP),
intent(in) :: rho(KA)
5817 real(RP),
intent(inout) :: PQ(KA,PQ_MAX)
5818 real(RP),
intent(inout) :: Pcrg(KA,PQ_MAX)
5821 real(RP),
parameter :: kcc = 4.44e+9_rp
5822 real(RP),
parameter :: tau_min = 1.e-20_rp
5823 real(RP),
parameter :: rx_sep = 1.0_rp/x_sep
5826 real(RP),
parameter :: kcr = 5.8_rp
5827 real(RP),
parameter :: thr_acc = 5.e-5_rp
5830 real(RP),
parameter :: krr = 4.33_rp
5831 real(RP),
parameter :: kaprr = 60.7_rp
5832 real(RP),
parameter :: kbr = 1000._rp
5833 real(RP),
parameter :: kapbr = 2.3e+3_rp
5834 real(RP),
parameter :: dr_min = 0.35e-3_rp
5837 real(RP) :: coef_nuc0
5838 real(RP) :: coef_nuc1
5839 real(RP) :: coef_aut0
5840 real(RP) :: coef_aut1
5852 coef_nuc0 = (nu(i_mp_qc)+2.0_rp)/(nu(i_mp_qc)+1.0_rp)
5853 coef_nuc1 = (nu(i_mp_qc)+2.0_rp)*(nu(i_mp_qc)+4.0_rp)/(nu(i_mp_qc)+1.0_rp)/(nu(i_mp_qc)+1.0_rp)
5854 coef_aut0 = -kcc*coef_nuc0
5855 coef_aut1 = -kcc/x_sep/20._rp*coef_nuc1
5859 lwc = rhoq(k,i_qr) + rhoq(k,i_qc)
5860 if( lwc > xc_min )
then
5861 tau = max(tau_min, rhoq(k,i_qr)/lwc)
5865 rho_fac = sqrt(rho_0/max(rho(k),rho_min))
5868 psi_aut = 400._rp*(tau**0.7_rp)*(1.0_rp - (tau**0.7_rp))**3
5869 pq(k,i_ncaut) = coef_aut0*rhoq(k,i_qc)*rhoq(k,i_qc)*rho_fac*rho_fac
5871 pq(k,i_lcaut) = coef_aut1*lwc*lwc*xq(k,i_mp_qc)*xq(k,i_mp_qc) &
5872 *((1.0_rp-tau)*(1.0_rp-tau) + psi_aut)*rho_fac*rho_fac
5873 pq(k,i_nraut) = -rx_sep*pq(k,i_lcaut)
5876 sw = 0.5_rp - sign( 0.5_rp, rhoq(k,i_nc)-small )
5877 pcrg(k,i_ncaut) = pq(k,i_ncaut)*(1.0_rp-sw)/(rhoq(k,i_nc)+sw)*rhoq_crg(k,i_qc)
5878 pcrg(k,i_nraut) = -pcrg(k,i_ncaut)
5882 psi_acc =(tau/(tau+thr_acc))**4
5883 pq(k,i_lcacc) = -kcr*rhoq(k,i_qc)*rhoq(k,i_qr)*rho_fac*psi_acc
5884 pq(k,i_ncacc) = -kcr*rhoq(k,i_nc)*rhoq(k,i_qr)*rho_fac*psi_acc
5887 sw = 0.5_rp - sign( 0.5_rp, rhoq(k,i_nc)-small )
5888 pcrg(k,i_ncacc) = pq(k,i_ncacc)*(1.0_rp-sw)/(rhoq(k,i_nc)+sw)*rhoq(k,i_qc)
5892 pq(k,i_nrslc) = -krr*rhoq(k,i_nr)*rhoq(k,i_qr)*rho_fac
5895 ddr = min(1.e-3_rp, dq_xave(k,i_mp_qr) - dr_eq )
5896 if ( dq_xave(k,i_mp_qr) < dr_min )
then
5898 else if ( dq_xave(k,i_mp_qr) <= dr_eq )
then
5901 psi_brk = exp(kapbr*ddr) - 1.0_rp
5903 pq(k,i_nrbrk) = - (psi_brk + 1.0_rp)*pq(k,i_nrslc)
5912 subroutine dep_vapor_melt_ice( &
5914 rho, tem, pre, qd, & ! in
5917 xq, vt_xave, dq_xave, & ! in
5923 integer,
intent(in) :: KA, KS, KE
5926 real(RP),
intent(inout) :: PQ(KA,PQ_MAX)
5928 real(RP),
intent(in) :: rho(KA)
5929 real(RP),
intent(in) :: tem(KA)
5930 real(RP),
intent(in) :: pre(KA)
5931 real(RP),
intent(in) :: qd (KA)
5932 real(RP),
intent(in) :: esw(KA)
5933 real(RP),
intent(in) :: esi(KA)
5934 real(RP),
intent(in) :: rhoq(KA,I_QV:I_NG)
5935 real(RP),
intent(in) :: xq(KA,HYDRO_MAX)
5939 real(RP),
intent(in) :: vt_xave(KA,HYDRO_MAX,2)
5941 real(RP),
intent(in) :: dq_xave(KA,HYDRO_MAX)
5944 real(RP) :: temc_lim
5951 real(RP) :: nua, r_nua
5953 real(RP) :: Kalfa(KA)
5957 real(RP) :: Gwr, Gii, Gis, Gig
5962 real(RP) :: Nrers_r2, Nreis_r2
5963 real(RP) :: Nress_r2, Nregs_r2
5965 real(RP) :: Nrerl_r2, Nreil_r2
5966 real(RP) :: Nresl_r2, Nregl_r2
5967 real(RP) :: NscNrer_s, NscNrer_l
5968 real(RP) :: NscNrei_s, NscNrei_l
5969 real(RP) :: NscNres_s, NscNres_l
5970 real(RP) :: NscNreg_s, NscNreg_l
5971 real(RP) :: ventLR_s, ventLR_l
5972 real(RP) :: ventNI_s, ventNI_l, ventLI_s, ventLI_l
5973 real(RP) :: ventNS_s, ventNS_l, ventLS_s, ventLS_l
5974 real(RP) :: ventNG_s, ventNG_l, ventLG_s, ventLG_l
5976 real(RP) :: wtr, wti, wts, wtg
5977 real(RP),
parameter :: r_14=1.0_rp/1.4_rp
5978 real(RP),
parameter :: r_15=1.0_rp/1.5_rp
5981 real(RP) :: ventNI(KA), ventLI(KA)
5982 real(RP) :: ventNS(KA), ventLS(KA)
5983 real(RP) :: ventNG(KA), ventLG(KA)
5985 real(RP),
parameter :: Re_max=1.e+3_rp
5986 real(RP),
parameter :: Re_min=1.e-4_rp
6001 temc_lim= max(temc, -40._rp )
6002 rho_lim = max(rho(k),rho_min)
6003 qv = rhoq(k,i_qv)/rho_lim
6004 pre_lim = rho_lim*(qd(k)*rdry + qv*rvap)*(temc_lim+t00)
6012 dw(k) = 0.211e-4_rp* (((temc_lim+t00)/t00)**1.94_rp) *(p00/pre_lim)
6013 kalfa(k) = ka0 + temc_lim*dka_dt
6014 mua = mua0 + temc_lim*dmua_dt
6017 gw = (lhv0/kalfa(k)/tem(k))*(lhv0/rvap/tem(k)-1.0_rp)+(rvap*tem(k)/dw(k)/esw(k))
6018 gi = (lhs0/kalfa(k)/tem(k))*(lhs0/rvap/tem(k)-1.0_rp)+(rvap*tem(k)/dw(k)/esi(k))
6020 gwr = 4.0_rp*pi/cap(i_mp_qr)/gw
6021 gii = 4.0_rp*pi/cap(i_mp_qi)/gi
6022 gis = 4.0_rp*pi/cap(i_mp_qs)/gi
6023 gig = 4.0_rp*pi/cap(i_mp_qg)/gi
6026 nsc_r3 = (nua/dw(k))**(0.33333333_rp)
6029 nrers_r2 = sqrt(max(re_min,min(re_max,vt_xave(k,i_mp_qr,1)*dq_xave(k,i_mp_qr)*r_nua)))
6030 nreis_r2 = sqrt(max(re_min,min(re_max,vt_xave(k,i_mp_qi,1)*dq_xave(k,i_mp_qi)*r_nua)))
6031 nress_r2 = sqrt(max(re_min,min(re_max,vt_xave(k,i_mp_qs,1)*dq_xave(k,i_mp_qs)*r_nua)))
6032 nregs_r2 = sqrt(max(re_min,min(re_max,vt_xave(k,i_mp_qg,1)*dq_xave(k,i_mp_qg)*r_nua)))
6035 nrerl_r2 = sqrt(max(re_min,min(re_max,vt_xave(k,i_mp_qr,2)*dq_xave(k,i_mp_qr)*r_nua)))
6036 nreil_r2 = sqrt(max(re_min,min(re_max,vt_xave(k,i_mp_qi,2)*dq_xave(k,i_mp_qi)*r_nua)))
6037 nresl_r2 = sqrt(max(re_min,min(re_max,vt_xave(k,i_mp_qs,2)*dq_xave(k,i_mp_qs)*r_nua)))
6038 nregl_r2 = sqrt(max(re_min,min(re_max,vt_xave(k,i_mp_qg,2)*dq_xave(k,i_mp_qg)*r_nua)))
6039 nscnrer_s=nsc_r3*nrers_r2
6040 nscnrer_l=nsc_r3*nrerl_r2
6042 nscnrei_s=nsc_r3*nreis_r2
6043 nscnrei_l=nsc_r3*nreil_r2
6045 nscnres_s=nsc_r3*nress_r2
6046 nscnres_l=nsc_r3*nresl_r2
6048 nscnreg_s=nsc_r3*nregs_r2
6049 nscnreg_l=nsc_r3*nregl_r2
6051 ventlr_s = ah_vent1(i_mp_qr,1) + bh_vent1(i_mp_qr,1)*nscnrer_s
6052 ventlr_l = ah_vent1(i_mp_qr,2) + bh_vent1(i_mp_qr,2)*nscnrer_l
6054 ventni_s = ah_vent0(i_mp_qi,1) + bh_vent0(i_mp_qi,1)*nscnrei_s
6055 ventni_l = ah_vent0(i_mp_qi,2) + bh_vent0(i_mp_qi,2)*nscnrei_l
6056 ventli_s = ah_vent1(i_mp_qi,1) + bh_vent1(i_mp_qi,1)*nscnrei_s
6057 ventli_l = ah_vent1(i_mp_qi,2) + bh_vent1(i_mp_qi,2)*nscnrei_l
6059 ventns_s = ah_vent0(i_mp_qs,1) + bh_vent0(i_mp_qs,1)*nscnres_s
6060 ventns_l = ah_vent0(i_mp_qs,2) + bh_vent0(i_mp_qs,2)*nscnres_l
6061 ventls_s = ah_vent1(i_mp_qs,1) + bh_vent1(i_mp_qs,1)*nscnres_s
6062 ventls_l = ah_vent1(i_mp_qs,2) + bh_vent1(i_mp_qs,2)*nscnres_l
6064 ventng_s = ah_vent0(i_mp_qg,1) + bh_vent0(i_mp_qg,1)*nscnreg_s
6065 ventng_l = ah_vent0(i_mp_qg,2) + bh_vent0(i_mp_qg,2)*nscnreg_l
6066 ventlg_s = ah_vent1(i_mp_qg,1) + bh_vent1(i_mp_qg,1)*nscnreg_s
6067 ventlg_l = ah_vent1(i_mp_qg,2) + bh_vent1(i_mp_qg,2)*nscnreg_l
6071 wtr = ( min(max( nscnrer_s*r_14, 0.5_rp), 2.0_rp) -0.5_rp )*r_15
6072 wti = ( min(max( nscnrei_s , 0.5_rp), 2.0_rp) -0.5_rp )*r_15
6073 wts = ( min(max( nscnres_s*r_14, 0.5_rp), 2.0_rp) -0.5_rp )*r_15
6074 wtg = ( min(max( nscnreg_s*r_14, 0.5_rp), 2.0_rp) -0.5_rp )*r_15
6076 ventni(k) = (1.0_rp-wti)*ventni_s + wti*ventni_l
6077 ventns(k) = (1.0_rp-wts)*ventns_s + wts*ventns_l
6078 ventng(k) = (1.0_rp-wtg)*ventng_s + wtg*ventng_l
6080 ventlr = (1.0_rp-wtr)*ventlr_s + wtr*ventlr_l
6081 ventli(k) = (1.0_rp-wti)*ventli_s + wti*ventli_l
6082 ventls(k) = (1.0_rp-wts)*ventls_s + wts*ventls_l
6083 ventlg(k) = (1.0_rp-wtg)*ventlg_s + wtg*ventlg_l
6102 pq(k,i_lcdep) = gwr*rhoq(k,i_nc)*dq_xave(k,i_mp_qc)*coef_deplc
6103 pq(k,i_lrdep) = gwr*rhoq(k,i_nr)*dq_xave(k,i_mp_qr)*ventlr
6104 pq(k,i_lidep) = gii*rhoq(k,i_ni)*dq_xave(k,i_mp_qi)*ventli(k)
6105 pq(k,i_lsdep) = gis*rhoq(k,i_ns)*dq_xave(k,i_mp_qs)*ventls(k)
6106 pq(k,i_lgdep) = gig*rhoq(k,i_ng)*dq_xave(k,i_mp_qg)*ventlg(k)
6107 pq(k,i_nrdep) = pq(k,i_lrdep)/xq(k,i_mp_qr)
6108 pq(k,i_nidep) = 0.0_rp
6109 pq(k,i_nsdep) = pq(k,i_lsdep)/xq(k,i_mp_qs)
6110 pq(k,i_ngdep) = pq(k,i_lgdep)/xq(k,i_mp_qg)
6121 dt = kalfa(k)/(cpvap*rho_0)
6127 gm = 2.0_rp*pi/emelt&
6128 * ( (kalfa(k)*dt/dw(k))*(temc) + (dw(k)*lhs0/rvap)*(esi(k)/tem(k)-psat0/t00) )
6133 sw = ( sign(0.5_rp,temc) + 0.5_rp ) * ( sign(0.5_rp,gm-eps) + 0.5_rp )
6137 pq(k,i_limlt) = - gm * rhoq(k,i_qi)*dq_xave(k,i_mp_qi)*ventli(k)/xq(k,i_mp_qi) * sw
6138 pq(k,i_nimlt) = - gm * rhoq(k,i_ni)*dq_xave(k,i_mp_qi)*ventni(k)/xq(k,i_mp_qi) * sw
6139 pq(k,i_lsmlt) = - gm * rhoq(k,i_qs)*dq_xave(k,i_mp_qs)*ventls(k)/xq(k,i_mp_qs) * sw
6140 pq(k,i_nsmlt) = - gm * rhoq(k,i_ns)*dq_xave(k,i_mp_qs)*ventns(k)/xq(k,i_mp_qs) * sw
6141 pq(k,i_lgmlt) = - gm * rhoq(k,i_qg)*dq_xave(k,i_mp_qg)*ventlg(k)/xq(k,i_mp_qg) * sw
6142 pq(k,i_ngmlt) = - gm * rhoq(k,i_ng)*dq_xave(k,i_mp_qg)*ventng(k)/xq(k,i_mp_qg) * sw
6146 end subroutine dep_vapor_melt_ice
6172 integer,
intent(in) :: KA
6173 integer,
intent(in) :: KS
6174 integer,
intent(in) :: KE
6176 real(RP),
intent(out) :: PLIdep_total(KA)
6177 real(RP),
intent(in) :: rho(KA)
6178 real(RP),
intent(in) :: tem(KA)
6179 real(RP),
intent(in) :: pre(KA)
6180 real(RP),
intent(in) :: qd(KA)
6181 real(RP),
intent(in) :: esi(KA)
6182 real(RP),
intent(in) :: qsi(KA)
6183 real(RP),
intent(in) :: rhoq(KA,I_QV:I_NG)
6187 real(RP),
intent(in) :: vt_xave(KA,HYDRO_MAX,1:2)
6188 real(RP),
intent(in) :: dq_xave(KA,HYDRO_MAX)
6189 real(RP),
intent(in) :: dt
6195 real(RP) :: temc_lim
6201 real(RP) :: nua, r_nua
6207 real(RP) :: Gii, Gis, Gig
6211 real(RP) :: Nreis_r2
6212 real(RP) :: Nress_r2, Nregs_r2
6213 real(RP) :: Nreil_r2
6214 real(RP) :: Nresl_r2, Nregl_r2
6215 real(RP) :: NscNrei_s, NscNrei_l
6216 real(RP) :: NscNres_s, NscNres_l
6217 real(RP) :: NscNreg_s, NscNreg_l
6218 real(RP) :: ventLI_s, ventLI_l
6219 real(RP) :: ventLS_s, ventLS_l
6220 real(RP) :: ventLG_s, ventLG_l
6221 real(RP) :: wti, wts, wtg
6222 real(RP),
parameter :: r_14=1.0_rp/1.4_rp
6223 real(RP),
parameter :: r_15=1.0_rp/1.5_rp
6228 real(RP) :: total_dep
6229 real(RP) :: PLIdep_wrk
6230 real(RP) :: PLSdep_wrk
6231 real(RP) :: PLGdep_wrk
6232 real(RP) :: dep_limiter
6234 real(RP),
parameter :: Re_max=1.e3_rp
6235 real(RP),
parameter :: Re_min=1.e-4_rp
6240 plidep_total(:)=0.0_rp
6245 temc_lim= max(temc, temc_lim_diff)
6246 rho_lim = max(rho(k),rho_min)
6247 qv = rhoq(k,i_qv)/rho_lim
6248 pre_lim = rho_lim*(qd(k)*rdry + qv*rvap)*(temc_lim+t00)
6255 dw = 0.211e-4_rp* (((temc_lim+t00)/t00)**1.94_rp) *(pstd/pre_lim)
6256 kat = ka0 + temc_lim*dka_dt
6257 mua = mua0 + temc_lim*dmua_dt
6260 gi = (lhs0/kat/tem(k))*(lhs0/rvap/tem(k)-1.0_rp)+(rvap*tem(k)/dw/esi(k))
6262 gii = 4.0_rp*pi/cap(i_mp_qi)/gi
6263 gis = 4.0_rp*pi/cap(i_mp_qs)/gi
6264 gig = 4.0_rp*pi/cap(i_mp_qg)/gi
6267 nsc_r3 = (nua/dw)**(0.33333333_rp)
6270 nreis_r2 = sqrt(max(re_min,min(re_max,vt_xave(k,i_mp_qi,1)*dq_xave(k,i_mp_qi)*r_nua)))
6271 nress_r2 = sqrt(max(re_min,min(re_max,vt_xave(k,i_mp_qs,1)*dq_xave(k,i_mp_qs)*r_nua)))
6272 nregs_r2 = sqrt(max(re_min,min(re_max,vt_xave(k,i_mp_qg,1)*dq_xave(k,i_mp_qg)*r_nua)))
6273 nreil_r2 = sqrt(max(re_min,min(re_max,vt_xave(k,i_mp_qi,2)*dq_xave(k,i_mp_qi)*r_nua)))
6274 nresl_r2 = sqrt(max(re_min,min(re_max,vt_xave(k,i_mp_qs,2)*dq_xave(k,i_mp_qs)*r_nua)))
6275 nregl_r2 = sqrt(max(re_min,min(re_max,vt_xave(k,i_mp_qg,2)*dq_xave(k,i_mp_qg)*r_nua)))
6277 nscnrei_s=nsc_r3*nreis_r2
6278 nscnrei_l=nsc_r3*nreil_r2
6279 nscnres_s=nsc_r3*nress_r2
6280 nscnres_l=nsc_r3*nresl_r2
6281 nscnreg_s=nsc_r3*nregs_r2
6282 nscnreg_l=nsc_r3*nregl_r2
6284 ventli_s = ah_vent1(i_mp_qi,1) + bh_vent1(i_mp_qi,1)*nscnrei_s
6285 ventli_l = ah_vent1(i_mp_qi,2) + bh_vent1(i_mp_qi,2)*nscnrei_l
6286 ventls_s = ah_vent1(i_mp_qs,1) + bh_vent1(i_mp_qs,1)*nscnres_s
6287 ventls_l = ah_vent1(i_mp_qs,2) + bh_vent1(i_mp_qs,2)*nscnres_l
6288 ventlg_s = ah_vent1(i_mp_qg,1) + bh_vent1(i_mp_qg,1)*nscnreg_s
6289 ventlg_l = ah_vent1(i_mp_qg,2) + bh_vent1(i_mp_qg,2)*nscnreg_l
6291 wti = ( min(max( nscnrei_s , 0.5_rp), 2.0_rp) -0.5_rp )*r_15
6292 wts = ( min(max( nscnres_s*r_14, 0.5_rp), 2.0_rp) -0.5_rp )*r_15
6293 wtg = ( min(max( nscnreg_s*r_14, 0.5_rp), 2.0_rp) -0.5_rp )*r_15
6295 ventli = (1.0_rp-wti)*ventli_s + wti*ventli_l
6296 ventls = (1.0_rp-wts)*ventls_s + wts*ventls_l
6297 ventlg = (1.0_rp-wtg)*ventlg_s + wtg*ventlg_l
6299 ssi = qv/qsi(k) - 1.0_rp
6300 plidep_wrk = gii*ssi*max(rhoq(k,i_ni),0.0_rp)*dq_xave(k,i_mp_qi)*ventli
6301 plsdep_wrk = gis*ssi*max(rhoq(k,i_ns),0.0_rp)*dq_xave(k,i_mp_qs)*ventls
6302 plgdep_wrk = gig*ssi*max(rhoq(k,i_ng),0.0_rp)*dq_xave(k,i_mp_qg)*ventlg
6304 dep_limiter = rho(k)*(qv-qsi(k))/dt
6305 if (ssi < -1.e-30_rp)
then
6306 plidep_total(k) = max(plidep_wrk+plsdep_wrk+plgdep_wrk, dep_limiter)
6307 else if (ssi > 1.e-30_rp)
then
6308 plidep_total(k) = min(plidep_wrk+plsdep_wrk+plgdep_wrk, dep_limiter)
6310 plidep_total(k) = 0.0_rp
6329 integer,
intent(in) :: KA, KS, KE
6331 real(RP),
intent(in) :: dt
6333 real(RP),
intent(in) :: tem(KA)
6335 real(RP),
intent(in) :: rhoq(KA,I_QV:I_NG)
6336 real(RP),
intent(in) :: xq(KA,HYDRO_MAX)
6338 real(RP),
intent(inout):: PQ(KA,PQ_MAX)
6340 real(RP),
parameter :: temc_min = -65.0_rp
6341 real(RP),
parameter :: a_het = 0.2_rp
6342 real(RP),
parameter :: b_het = 0.65_rp
6344 real(RP) :: coef_m2_c
6345 real(RP) :: coef_m2_r
6347 real(RP) :: temc, temc2, temc3, temc4
6349 real(RP) :: Jhom, Jhet, Jh(KA)
6357 coef_m2_c = coef_m2(i_mp_qc)
6358 coef_m2_r = coef_m2(i_mp_qr)
6370 pq(k,i_lchom) = 0.0_rp
6371 pq(k,i_nchom) = 0.0_rp
6376 temc = max( tem(k) - t00, temc_min )
6379 jhet = a_het*( exp( -b_het*temc ) - 1.0_rp )
6382 if( temc < -30.0_rp )
then
6387 - 243.40_rp - 14.75_rp*temc - 0.307_rp*temc2 &
6388 - 0.00287_rp*temc3 - 0.0000102_rp*temc4 ) *1.e+3_rp
6389 else if( temc < 0.0_rp)
then
6390 jhom = 10._rp**(-7.63_rp-2.996_rp*(temc+30.0_rp))*1.e+3_rp
6395 jh(k) = ( jhet + jhom ) * dt
6399 #if defined(NVIDIA) || defined(SX)
6400 tmp = min( xq(k,i_mp_qc)*jh(k), 1.e+3_rp)
6401 pq(k,i_lchet) = -rdt*rhoq(k,i_qc)*( 1.0_rp - exp( -coef_m2_c*tmp ) )
6402 pq(k,i_nchet) = -rdt*rhoq(k,i_nc)*( 1.0_rp - exp( - tmp ) )
6404 tmp = min( xq(k,i_mp_qr)*jh(k), 1.e+3_rp)
6405 pq(k,i_lrhet) = -rdt*rhoq(k,i_qr)*( 1.0_rp - exp( -coef_m2_r*tmp ) )
6406 pq(k,i_nrhet) = -rdt*rhoq(k,i_nr)*( 1.0_rp - exp( - tmp ) )
6408 pq(k,i_lchet) = -rdt*rhoq(k,i_qc)*( 1.0_rp - exp( -coef_m2_c*xq(k,i_mp_qc)*jh(k) ) )
6409 pq(k,i_nchet) = -rdt*rhoq(k,i_nc)*( 1.0_rp - exp( - xq(k,i_mp_qc)*jh(k) ) )
6410 pq(k,i_lrhet) = -rdt*rhoq(k,i_qr)*( 1.0_rp - exp( -coef_m2_r*xq(k,i_mp_qr)*jh(k) ) )
6411 pq(k,i_nrhet) = -rdt*rhoq(k,i_nr)*( 1.0_rp - exp( - xq(k,i_mp_qr)*jh(k) ) )
6421 subroutine update_by_phase_change( &
6431 esw, esi, rhoq, & ! in
6436 sl_PLCdep, & ! inout
6437 sl_PLRdep, sl_PNRdep, & ! inout
6442 qc_evaporate, & ! out
6443 rhoq_crg, & ! in:optional
6454 moist_pres2qsat_liq => atmos_saturation_pres2qsat_liq, &
6455 moist_pres2qsat_ice => atmos_saturation_pres2qsat_ice, &
6456 moist_dqs_dtem_dens_liq => atmos_saturation_dqs_dtem_dens_liq, &
6457 moist_dqs_dtem_dens_ice => atmos_saturation_dqs_dtem_dens_ice, &
6458 moist_dqs_dtem_dpre_liq => atmos_saturation_dqs_dtem_dpre_liq, &
6459 moist_dqs_dtem_dpre_ice => atmos_saturation_dqs_dtem_dpre_ice
6462 integer,
intent(in) :: KA, KS, KE
6464 integer,
intent(in) :: ntmax
6466 real(RP),
intent(in) :: dt
6467 real(RP),
intent(in) :: cz(KA)
6468 real(RP),
intent(in) :: fz(0:KA)
6469 real(RP),
intent(in) :: w (KA)
6470 real(RP),
intent(in) :: dTdt_rad(KA)
6471 real(RP),
intent(in) :: rho (KA)
6472 real(RP),
intent(in) :: qdry(KA)
6473 real(RP),
intent(in) :: esw (KA)
6474 real(RP),
intent(in) :: esi (KA)
6475 real(RP),
intent(in) :: rhoq(KA,I_QV:I_NG)
6477 real(RP),
intent(in) :: tem(KA)
6478 real(RP),
intent(in) :: pre(KA)
6479 real(RP),
intent(in) :: cpa(KA)
6480 real(RP),
intent(in) :: cva(KA)
6483 real(RP),
intent(inout) :: PQ(KA,PQ_MAX)
6485 real(RP),
intent(inout) :: sl_PLCdep
6486 real(RP),
intent(inout) :: sl_PLRdep, sl_PNRdep
6488 real(RP),
intent(out) :: RHOQ_t(KA,QA_MP)
6489 real(RP),
intent(out) :: RHOE_t(KA)
6490 real(RP),
intent(out) :: CPtot_t(KA)
6491 real(RP),
intent(out) :: CVtot_t(KA)
6494 real(RP),
intent(out) :: qc_evaporate(KA)
6497 logical,
intent(in) :: flg_lt
6498 real(RP),
intent(in),
optional :: rhoq_crg(KA,I_QC:I_QG)
6499 real(RP),
intent(out),
optional :: RHOQcrg_t(KA,I_QC:I_QG)
6503 real(RP) :: wtem(KA)
6510 real(RP) :: dqswdtem_rho(KA)
6511 real(RP) :: dqsidtem_rho(KA)
6512 real(RP) :: dqswdtem_pre(KA)
6513 real(RP) :: dqsidtem_pre(KA)
6514 real(RP) :: dqswdpre_tem(KA)
6515 real(RP) :: dqsidpre_tem(KA)
6520 real(RP) :: aliqliq, asolliq
6521 real(RP) :: aliqsol, asolsol
6526 real(RP) :: taucnd, r_taucnd
6527 real(RP) :: taudep, r_taudep
6528 real(RP) :: taucnd_c(KA), r_taucnd_c
6529 real(RP) :: taucnd_r(KA), r_taucnd_r
6530 real(RP) :: taudep_i(KA), r_taudep_i
6531 real(RP) :: taudep_s(KA), r_taudep_s
6532 real(RP) :: taudep_g(KA), r_taudep_g
6535 real(RP) :: PLR2NR, PLI2NI, PLS2NS, PLG2NG
6536 real(RP) :: coef_a_cnd, coef_b_cnd
6537 real(RP) :: coef_a_dep, coef_b_dep
6540 real(RP) :: frz_dnc(KA)
6542 real(RP) :: frz_dnr(KA)
6544 real(RP) :: mlt_dni(KA)
6546 real(RP) :: mlt_dns(KA)
6548 real(RP) :: mlt_dng(KA)
6550 real(RP) :: dep_dqi(KA)
6551 real(RP) :: dep_dni(KA)
6552 real(RP) :: dep_dqs(KA)
6553 real(RP) :: dep_dns(KA)
6554 real(RP) :: dep_dqg(KA)
6555 real(RP) :: dep_dng(KA)
6556 real(RP) :: dep_dqr(KA)
6557 real(RP) :: dep_dnr(KA)
6558 real(RP) :: dep_dqc(KA)
6559 real(RP) :: dep_dnc(KA)
6560 real(RP) :: r_xc_ccn, r_xi_ccn
6562 real(RP) :: drhoqv(KA)
6563 real(RP) :: drhoqc(KA), drhoqr(KA), drhoqi(KA), drhoqs(KA), drhoqg(KA)
6564 real(RP) :: drhonc(KA), drhonr(KA), drhoni(KA), drhons(KA), drhong(KA)
6566 real(RP) :: drhoqcrg_c(KA), drhoqcrg_r(KA)
6567 real(RP) :: drhoqcrg_i(KA), drhoqcrg_s(KA), drhoqcrg_g(KA)
6568 real(RP) :: frz_dnc_crg
6569 real(RP) :: frz_dnr_crg
6570 real(RP) :: mlt_dni_crg
6571 real(RP) :: mlt_dns_crg
6572 real(RP) :: mlt_dng_crg
6573 real(RP) :: dep_dni_crg
6574 real(RP) :: dep_dns_crg
6575 real(RP) :: dep_dng_crg
6576 real(RP) :: dep_dnr_crg
6577 real(RP) :: dep_dnc_crg
6579 real(RP) :: fac1, fac2, fac3, fac4, fac5, fac6
6580 real(RP) :: r_rvaptem(KA)
6582 real(RP) :: lvsw, lvsi
6583 real(RP) :: dlvsw, dlvsi
6585 real(RP) :: dcnd, ddep
6586 real(RP) :: uplim_cnd
6587 real(RP) :: lowlim_cnd
6589 real(RP) :: uplim_dep
6590 real(RP) :: lowlim_dep
6591 real(RP) :: ssw, ssi
6592 real(RP) :: r_esw, r_esi
6593 real(RP) :: r_lvsw, r_lvsi
6595 real(RP) :: ssw_o, ssi_o
6602 real(RP) :: fac_cndc_wrk
6604 real(RP),
parameter :: tau100day = 1.e+7_rp
6605 real(RP),
parameter :: r_tau100day = 1.e-7_rp
6606 real(RP),
parameter :: eps=1.e-30_rp
6608 real(RP) :: PLCdep(KA), PLRdep(KA), PNRdep(KA)
6613 real(RP) :: dqv, dql, dqi
6614 real(RP) :: dcv, dcp
6615 real(RP) :: dqc_crg, dqr_crg, dqi_crg, dqs_crg, dqg_crg
6625 r_xc_ccn=1.0_rp/xc_ccn
6628 if( opt_fix_taucnd_c )
then
6629 fac_cndc_wrk = fac_cndc**(1.0_rp-b_m(i_mp_qc))
6631 pq(k,i_lcdep) = pq(k,i_lcdep)*fac_cndc_wrk
6633 log_info(
"ATMOS_PHY_MP_SN14_update_by_phase_change",*)
"taucnd:fac_cndc_wrk=",fac_cndc_wrk
6640 wtem(k) = max( tem(k), tem_min )
6643 call moist_pres2qsat_liq( ka, ks, ke, &
6644 wtem(:), pre(:), qdry(:), &
6646 call moist_pres2qsat_ice( ka, ks, ke, &
6647 wtem(:), pre(:), qdry(:), &
6649 call moist_dqs_dtem_dens_liq( ka, ks, ke, &
6652 call moist_dqs_dtem_dens_ice( ka, ks, ke, &
6655 call moist_dqs_dtem_dpre_liq( ka, ks, ke, &
6656 wtem(:), pre(:), qdry(:), &
6657 dqswdtem_pre(:), dqswdpre_tem(:) )
6658 call moist_dqs_dtem_dpre_ice( ka, ks, ke, &
6659 wtem(:), pre(:), qdry(:), &
6660 dqsidtem_pre(:), dqsidpre_tem(:) )
6663 if( cz(k) <= 25000.0_rp )
then
6668 if( pre(k) < esw(k)+1.e-10_rp )
then
6670 dqswdtem_rho(k) = 0.0_rp
6671 dqswdtem_pre(k) = 0.0_rp
6672 dqswdpre_tem(k) = 0.0_rp
6674 if( pre(k) < esi(k)+1.e-10_rp )
then
6676 dqsidtem_rho(k) = 0.0_rp
6677 dqsidtem_pre(k) = 0.0_rp
6678 dqsidpre_tem(k) = 0.0_rp
6684 r_rvaptem(k) = 1.0_rp/(rvap*wtem(k))
6685 lvsw = esw(k)*r_rvaptem(k)
6686 lvsi = esi(k)*r_rvaptem(k)
6687 pv = rhoq(k,i_qv)*rvap*tem(k)
6688 r_esw = 1.0_rp/esw(k)
6689 r_esi = 1.0_rp/esi(k)
6690 ssw = min( mp_ssw_lim, ( pv*r_esw-1.0_rp ) )
6691 ssi = pv*r_esi - 1.0_rp
6692 r_lvsw = 1.0_rp/lvsw
6693 r_lvsi = 1.0_rp/lvsi
6694 r_taucnd_c = pq(k,i_lcdep)*r_lvsw
6695 r_taucnd_r = pq(k,i_lrdep)*r_lvsw
6696 r_taudep_i = pq(k,i_lidep)*r_lvsi
6697 r_taudep_s = pq(k,i_lsdep)*r_lvsi
6698 r_taudep_g = pq(k,i_lgdep)*r_lvsi
6705 r_cva = 1.0_rp / cva(k)
6706 r_cpa = 1.0_rp / cpa(k)
6710 + r_cva*( lhv00 + (cvvap-cl)*tem(k) )*dqswdtem_rho(k)
6713 + r_cva*( lhv00 + lhf00 + (cvvap-ci)*tem(k) )*dqswdtem_rho(k)
6716 + r_cva*( lhv00 + (cvvap-cl)*tem(k) )*dqsidtem_rho(k)
6719 + r_cva*( lhv00 + lhf00 + (cvvap-ci)*tem(k) )*dqsidtem_rho(k)
6720 pdynliq = w2(k) * grav * ( r_cpa*dqswdtem_pre(k) + rho(k)*dqswdpre_tem(k) )
6721 pdynsol = w2(k) * grav * ( r_cpa*dqsidtem_pre(k) + rho(k)*dqsidpre_tem(k) )
6722 pradliq = -dtdt_rad(k) * dqswdtem_rho(k)
6723 pradsol = -dtdt_rad(k) * dqsidtem_rho(k)
6731 + aliqliq*( r_taucnd_c+r_taucnd_r ) &
6732 + asolliq*( r_taudep_i+r_taudep_s+r_taudep_g )
6734 + aliqsol*( r_taucnd_c+r_taucnd_r )&
6735 + asolsol*( r_taudep_i+r_taudep_s+r_taudep_g )
6737 if( r_taucnd < r_tau100day )
then
6738 uplim_cnd = max( rho(k)*ssw_o*qsw(k)*r_dt, 0.0_rp )
6739 lowlim_cnd = min( rho(k)*ssw_o*qsw(k)*r_dt, 0.0_rp )
6741 pq(k,i_lcdep) = max(lowlim_cnd, min(uplim_cnd, pq(k,i_lcdep)*ssw_o ))
6742 pq(k,i_lrdep) = max(lowlim_cnd, min(uplim_cnd, pq(k,i_lrdep)*ssw_o ))
6743 pq(k,i_nrdep) = min(0.0_rp, pq(k,i_nrdep)*ssw_o )
6746 acnd = pdynliq + pradliq &
6747 - ( r_taudep_i+r_taudep_s+r_taudep_g ) * ( qsw(k) - qsi(k) )
6748 taucnd = 1.0_rp/r_taucnd
6750 coef_a_cnd = rho(k)*acnd*taucnd
6751 coef_b_cnd = rho(k)*taucnd*r_dt*(ssw_o*qsw(k)-acnd*taucnd) * ( exp(-dt*r_taucnd) - 1.0_rp )
6752 pq(k,i_lcdep) = coef_a_cnd*r_taucnd_c - coef_b_cnd*r_taucnd_c
6753 plr2nr = pq(k,i_nrdep)/(pq(k,i_lrdep)+1.e-30_rp)
6754 pq(k,i_lrdep) = coef_a_cnd*r_taucnd_r - coef_b_cnd*r_taucnd_r
6755 pq(k,i_nrdep) = min(0.0_rp, pq(k,i_lrdep)*plr2nr )
6758 if( r_taudep < r_tau100day )
then
6759 uplim_dep = max( rho(k)*ssi_o*qsi(k)*r_dt, 0.0_rp )
6760 lowlim_dep = min( rho(k)*ssi_o*qsi(k)*r_dt, 0.0_rp )
6762 pq(k,i_lidep) = max(lowlim_dep, min(uplim_dep, pq(k,i_lidep)*ssi_o ))
6763 pq(k,i_lsdep) = max(lowlim_dep, min(uplim_dep, pq(k,i_lsdep)*ssi_o ))
6764 pq(k,i_lgdep) = max(lowlim_dep, min(uplim_dep, pq(k,i_lgdep)*ssi_o ))
6765 pq(k,i_nidep) = min(0.0_rp, pq(k,i_nidep)*ssi_o )
6766 pq(k,i_nsdep) = min(0.0_rp, pq(k,i_nsdep)*ssi_o )
6767 pq(k,i_ngdep) = min(0.0_rp, pq(k,i_ngdep)*ssi_o )
6769 adep = pdynsol + pradsol &
6770 + ( r_taucnd_c+r_taucnd_r ) * ( qsw(k) - qsi(k) )
6771 taudep = 1.0_rp/r_taudep
6773 coef_a_dep = rho(k)*adep*taudep
6774 coef_b_dep = rho(k)*taudep*r_dt*(ssi_o*qsi(k)-adep*taudep) * ( exp(-dt*r_taudep) - 1.0_rp )
6775 pli2ni = pq(k,i_nidep)/max(pq(k,i_lidep),1.e-30_rp)
6776 pls2ns = pq(k,i_nsdep)/max(pq(k,i_lsdep),1.e-30_rp)
6777 plg2ng = pq(k,i_ngdep)/max(pq(k,i_lgdep),1.e-30_rp)
6778 pq(k,i_lidep) = coef_a_dep*r_taudep_i - coef_b_dep*r_taudep_i
6779 pq(k,i_lsdep) = coef_a_dep*r_taudep_s - coef_b_dep*r_taudep_s
6780 pq(k,i_lgdep) = coef_a_dep*r_taudep_g - coef_b_dep*r_taudep_g
6781 pq(k,i_nidep) = min(0.0_rp, pq(k,i_lidep)*pli2ni )
6782 pq(k,i_nsdep) = min(0.0_rp, pq(k,i_lsdep)*pls2ns )
6783 pq(k,i_ngdep) = min(0.0_rp, pq(k,i_lgdep)*plg2ng )
6791 sw = 0.5_rp - sign(0.5_rp, pq(k,i_lcdep)+eps)
6792 pncdep = min(0.0_rp, ((rhoq(k,i_qc)+pq(k,i_lcdep)*dt)*r_xc_ccn - rhoq(k,i_nc))*r_dt ) * sw
6804 lvsw = esw(k)*r_rvaptem(k)
6805 dlvsw = rhoq(k,i_qv)-lvsw
6806 dcnd = dt*(pq(k,i_lcdep)+pq(k,i_lrdep))
6808 sw = ( sign(0.5_rp,dcnd) + sign(0.5_rp,dlvsw) ) &
6809 * ( 0.5_rp + sign(0.5_rp,abs(dcnd)-eps) )
6813 fac1 = min(dlvsw*sw,dcnd*sw)*sw / (abs(sw)-1.0_rp+dcnd) &
6815 dep_dqc(k) = max( dt*pq(k,i_lcdep)*fac1, &
6816 -rhoq(k,i_qc) - 1e30_rp*(sw+1.0_rp) )*abs(sw)
6817 dep_dqr(k) = max( dt*pq(k,i_lrdep)*fac1, &
6818 -rhoq(k,i_qr) - 1e30_rp*(sw+1.0_rp) )*abs(sw)
6837 dep_dnc(k) = max( dt*pncdep*fac1, -rhoq(k,i_nc) )
6838 dep_dnr(k) = max( dt*pq(k,i_nrdep)*fac1, -rhoq(k,i_nr) )
6840 qc_evaporate(k) = - dep_dnc(k)
6846 lvsi = esi(k)*r_rvaptem(k)
6847 ddep = dt*(pq(k,i_lidep)+pq(k,i_lsdep)+pq(k,i_lgdep))
6848 dlvsi = rhoq(k,i_qv)-lvsi
6850 sw = ( sign(0.5_rp,ddep) + sign(0.5_rp,dlvsi) ) &
6851 * ( 0.5_rp + sign(0.5_rp,abs(ddep)-eps) )
6855 fac2 = min(dlvsi*sw,ddep*sw)*sw / (abs(sw)-1.0_rp+ddep) &
6857 dep_dqi(k) = max( dt*pq(k,i_lidep) &
6858 * ( 1.0_rp-abs(sw) + fac2*abs(sw) ), &
6859 -rhoq(k,i_qi) - 1e30_rp*(sw+1.0_rp) )
6860 dep_dqs(k) = max( dt*pq(k,i_lsdep) &
6861 * ( 1.0_rp-abs(sw) + fac2*abs(sw) ), &
6862 -rhoq(k,i_qs) - 1e30_rp*(sw+1.0_rp) )
6863 dep_dqg(k) = max( dt*pq(k,i_lgdep) &
6864 * ( 1.0_rp-abs(sw) + fac2*abs(sw) ), &
6865 -rhoq(k,i_qg) - 1e30_rp*(sw+1.0_rp) )
6887 dep_dni(k) = max( dt*pq(k,i_nidep)*fac2, -rhoq(k,i_ni) )
6888 dep_dns(k) = max( dt*pq(k,i_nsdep)*fac2, -rhoq(k,i_ns) )
6889 dep_dng(k) = max( dt*pq(k,i_ngdep)*fac2, -rhoq(k,i_ng) )
6895 frz_dqc = max( dt*(pq(k,i_lchom)+pq(k,i_lchet)), -rhoq(k,i_qc)-dep_dqc(k) )
6896 frz_dnc(k) = max( dt*(pq(k,i_nchom)+pq(k,i_nchet)), -rhoq(k,i_nc)-dep_dnc(k) )
6899 drhonc(k) = frz_dnc(k)
6900 drhoqi(k) = - frz_dqc
6901 drhoni(k) = - frz_dnc(k)
6903 fac3 = ( frz_dqc -eps )/( dt*(pq(k,i_lchom)+pq(k,i_lchet))-eps )
6904 fac4 = ( frz_dnc(k)-eps )/( dt*(pq(k,i_nchom)+pq(k,i_nchet))-eps )
6905 pq(k,i_lchom) = fac3*pq(k,i_lchom)
6906 pq(k,i_lchet) = fac3*pq(k,i_lchet)
6907 pq(k,i_nchom) = fac4*pq(k,i_nchom)
6908 pq(k,i_nchet) = fac4*pq(k,i_nchet)
6915 mlt_dqi = max( dt*pq(k,i_limlt), -rhoq(k,i_qi)-dep_dqi(k) )
6916 mlt_dni(k) = max( dt*pq(k,i_nimlt), -rhoq(k,i_ni)-dep_dni(k) )
6919 mlt_dqs = max( dt*pq(k,i_lsmlt), -rhoq(k,i_qs)-dep_dqs(k) )
6920 mlt_dns(k) = max( dt*pq(k,i_nsmlt), -rhoq(k,i_ns)-dep_dns(k) )
6923 mlt_dqg = max( dt*pq(k,i_lgmlt), -rhoq(k,i_qg)-dep_dqg(k) )
6924 mlt_dng(k) = max( dt*pq(k,i_ngmlt), -rhoq(k,i_ng)-dep_dng(k) )
6926 xi = min(xi_max, max(xi_min, rhoq(k,i_qi)/(rhoq(k,i_ni)+ni_min) ))
6927 sw = 0.5_rp + sign(0.5_rp,xi-x_sep)
6930 drhoqc(k) = drhoqc(k) - mlt_dqi * (1.0_rp-sw)
6931 drhonc(k) = drhonc(k) - mlt_dni(k) * (1.0_rp-sw)
6933 drhoqr(k) = - mlt_dqi * sw - mlt_dqs - mlt_dqg
6934 drhonr(k) = - mlt_dni(k) * sw - mlt_dns(k) - mlt_dng(k)
6936 drhoqi(k) = drhoqi(k) + mlt_dqi
6937 drhoni(k) = drhoni(k) + mlt_dni(k)
6940 drhons(k) = mlt_dns(k)
6943 drhong(k) = mlt_dng(k)
6949 frz_dqr = max( dt*(pq(k,i_lrhet)), min(0.0_rp, -rhoq(k,i_qr)-dep_dqr(k)) )
6950 frz_dnr(k) = max( dt*(pq(k,i_nrhet)), min(0.0_rp, -rhoq(k,i_nr)-dep_dnr(k)) )
6952 drhoqr(k) = drhoqr(k) + frz_dqr
6953 drhonr(k) = drhonr(k) + frz_dnr(k)
6954 drhoqg(k) = drhoqg(k) - frz_dqr
6955 drhong(k) = drhong(k) - frz_dnr(k)
6957 fac5 = ( frz_dqr -eps )/( dt*pq(k,i_lrhet)-eps )
6958 pq(k,i_lrhet) = fac5*pq(k,i_lrhet)
6959 fac6 = ( frz_dnr(k)-eps )/( dt*pq(k,i_nrhet)-eps )
6960 pq(k,i_nrhet) = fac6*pq(k,i_nrhet)
6966 dep_qv = - ( dep_dqc(k) + dep_dqr(k) + dep_dqi(k) + dep_dqs(k) + dep_dqg(k) )
6969 sw = 0.5_rp - sign(0.5_rp, abs(dep_qv) - eps)
6970 fact = ( max( rhoq(k,i_qv) + dep_qv * dt, 0.0_rp ) - rhoq(k,i_qv) ) / dt / ( dep_qv + sw ) * ( 1.0_rp - sw ) &
6972 fact = min( 1.0_rp, max( 0.0_rp, fact ) )
6974 dep_qv = dep_qv * fact
6976 dep_dqc(k) = dep_dqc(k) * fact
6977 dep_dnc(k) = dep_dnc(k) * fact
6978 dep_dqr(k) = dep_dqr(k) * fact
6979 dep_dnr(k) = dep_dnr(k) * fact
6980 dep_dqi(k) = dep_dqi(k) * fact
6981 dep_dni(k) = dep_dni(k) * fact
6982 dep_dqs(k) = dep_dqs(k) * fact
6983 dep_dns(k) = dep_dns(k) * fact
6984 dep_dqg(k) = dep_dqg(k) * fact
6985 dep_dng(k) = dep_dng(k) * fact
6989 drhoqc(k) = drhoqc(k) + dep_dqc(k)
6990 drhonc(k) = drhonc(k) + dep_dnc(k)
6991 drhoqr(k) = drhoqr(k) + dep_dqr(k)
6992 drhonr(k) = drhonr(k) + dep_dnr(k)
6993 drhoqi(k) = drhoqi(k) + dep_dqi(k)
6994 drhoni(k) = drhoni(k) + dep_dni(k)
6995 drhoqs(k) = drhoqs(k) + dep_dqs(k)
6996 drhons(k) = drhons(k) + dep_dns(k)
6997 drhoqg(k) = drhoqg(k) + dep_dqg(k)
6998 drhong(k) = drhong(k) + dep_dng(k)
7000 dz = fz(k) - fz(k-1)
7001 sl_plcdep = sl_plcdep + dep_dqc(k) * dz
7002 sl_plrdep = sl_plrdep + dep_dqr(k) * dz
7003 sl_pnrdep = sl_pnrdep + dep_dnr(k) * dz
7009 rhoq_t(k,i_qv) = drhoqv(k) / dt
7010 rhoq_t(k,i_qc) = drhoqc(k) / dt
7011 rhoq_t(k,i_nc) = drhonc(k) / dt
7012 rhoq_t(k,i_qr) = drhoqr(k) / dt
7013 rhoq_t(k,i_nr) = drhonr(k) / dt
7014 rhoq_t(k,i_qi) = drhoqi(k) / dt
7015 rhoq_t(k,i_ni) = drhoni(k) / dt
7016 rhoq_t(k,i_qs) = drhoqs(k) / dt
7017 rhoq_t(k,i_ns) = drhons(k) / dt
7018 rhoq_t(k,i_qg) = drhoqg(k) / dt
7019 rhoq_t(k,i_ng) = drhong(k) / dt
7021 rhoe_t(k) = ( - lhv * drhoqv(k) + lhf * ( drhoqi(k) + drhoqs(k) + drhoqg(k) ) ) / dt
7023 rrho = 1.0_rp/rho(k)
7024 dqv = rrho * drhoqv(k)
7025 dql = rrho * ( drhoqc(k) + drhoqr(k) )
7026 dqi = rrho * ( drhoqi(k) + drhoqs(k) + drhoqg(k) )
7040 sw = 0.5_rp - sign( 0.5_rp, rhoq(k,i_nc)-small )
7041 dep_dnc_crg = dep_dnc(k) * ( 1.0_rp-sw ) / ( rhoq(k,i_nc)+sw ) * rhoq_crg(k,i_qc)
7042 sw = 0.5_rp - sign( 0.5_rp, rhoq(k,i_nr)-small )
7043 dep_dnr_crg = dep_dnr(k) * ( 1.0_rp-sw ) / ( rhoq(k,i_nr)+sw ) * rhoq_crg(k,i_qr)
7045 sw = min( abs(rhoq_crg(k,i_qc)), abs(dep_dnc_crg) )
7046 dep_dnc_crg = sign( sw, dep_dnc_crg )
7047 sw = min( abs(rhoq_crg(k,i_qr)), abs(dep_dnr_crg) )
7048 dep_dnr_crg = sign( sw, dep_dnr_crg )
7050 drhoqcrg_c(k) = dep_dnc_crg
7051 drhoqcrg_r(k) = dep_dnr_crg
7055 sw = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ni)-small )
7056 dep_dni_crg = dep_dni(k) * ( 1.0_rp-sw ) / ( rhoq(k,i_ni)+sw ) * rhoq_crg(k,i_qi)
7057 sw = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ns)-small )
7058 dep_dns_crg = dep_dns(k) * ( 1.0_rp-sw ) / ( rhoq(k,i_ns)+sw ) * rhoq_crg(k,i_qs)
7059 sw = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ng)-small )
7060 dep_dng_crg = dep_dng(k) * ( 1.0_rp-sw ) / ( rhoq(k,i_ng)+sw ) * rhoq_crg(k,i_qg)
7062 sw = min( abs(rhoq_crg(k,i_qi)), abs(dep_dni_crg) )
7063 dep_dni_crg = sign( sw, dep_dni_crg )
7064 sw = min( abs(rhoq_crg(k,i_qs)), abs(dep_dns_crg) )
7065 dep_dns_crg = sign( sw, dep_dns_crg )
7066 sw = min( abs(rhoq_crg(k,i_qg)), abs(dep_dng_crg) )
7067 dep_dng_crg = sign( sw, dep_dng_crg )
7069 drhoqcrg_i(k) = dep_dni_crg
7070 drhoqcrg_s(k) = dep_dns_crg
7071 drhoqcrg_g(k) = dep_dng_crg
7075 sw = 0.5_rp - sign( 0.5_rp, rhoq(k,i_nc)-small )
7076 frz_dnc_crg = frz_dnc(k) * ( 1.0_rp-sw ) / ( rhoq(k,i_nc)+sw ) * rhoq_crg(k,i_qc)
7078 sw = min( abs(rhoq_crg(k,i_qc) + drhoqcrg_c(k)), abs(frz_dnc_crg) )
7079 frz_dnc_crg = sign( sw, frz_dnc_crg )
7081 drhoqcrg_c(k) = drhoqcrg_c(k) + frz_dnc_crg
7082 drhoqcrg_i(k) = drhoqcrg_i(k) - frz_dnc_crg
7086 xi = min(xi_max, max(xi_min, rhoq(k,i_qi)/(rhoq(k,i_ni)+ni_min) ))
7087 sw = 0.5_rp + sign(0.5_rp,xi-x_sep)
7089 sw2 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ni)-small )
7090 mlt_dni_crg = mlt_dni(k) * ( 1.0_rp-sw2 ) / ( rhoq(k,i_ni)+sw2 ) * rhoq_crg(k,i_qi)
7091 sw2 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ns)-small )
7092 mlt_dns_crg = mlt_dns(k) * ( 1.0_rp-sw2 ) / ( rhoq(k,i_ns)+sw2 ) * rhoq_crg(k,i_qs)
7093 sw2 = 0.5_rp - sign( 0.5_rp, rhoq(k,i_ng)-small )
7094 mlt_dng_crg = mlt_dng(k) * ( 1.0_rp-sw2 ) / ( rhoq(k,i_ng)+sw2 ) * rhoq_crg(k,i_qg)
7097 sw2 = min( abs(rhoq_crg(k,i_qi) + drhoqcrg_i(k)), abs(mlt_dni_crg) )
7098 mlt_dni_crg = sign( sw2, mlt_dni_crg )
7099 sw2 = min( abs(rhoq_crg(k,i_qs) + drhoqcrg_s(k)), abs(mlt_dns_crg) )
7100 mlt_dns_crg = sign( sw2, mlt_dns_crg )
7101 sw2 = min( abs(rhoq_crg(k,i_qg) + drhoqcrg_g(k)), abs(mlt_dng_crg) )
7102 mlt_dng_crg = sign( sw2, mlt_dng_crg )
7104 drhoqcrg_c(k) = drhoqcrg_c(k) - mlt_dni_crg * (1.0_rp-sw)
7105 drhoqcrg_r(k) = drhoqcrg_r(k) - mlt_dni_crg * sw - mlt_dns_crg - mlt_dng_crg
7106 drhoqcrg_i(k) = drhoqcrg_i(k) + mlt_dni_crg
7107 drhoqcrg_s(k) = drhoqcrg_s(k) + mlt_dns_crg
7108 drhoqcrg_g(k) = drhoqcrg_g(k) + mlt_dng_crg
7112 sw = 0.5_rp - sign( 0.5_rp, rhoq(k,i_nr)-small )
7113 frz_dnr_crg = frz_dnr(k) * ( 1.0_rp-sw ) / ( rhoq(k,i_nr)+sw ) * rhoq_crg(k,i_qr)
7115 sw = min( abs(rhoq_crg(k,i_qr) + drhoqcrg_r(k)), abs(frz_dnr_crg) )
7116 frz_dnr_crg = sign( sw, frz_dnr_crg )
7118 drhoqcrg_r(k) = drhoqcrg_r(k) + frz_dnr_crg
7119 drhoqcrg_g(k) = drhoqcrg_g(k) - frz_dnr_crg
7124 rhoqcrg_t(k,i_qc) = drhoqcrg_c(k) / dt
7125 rhoqcrg_t(k,i_qr) = drhoqcrg_r(k) / dt
7126 rhoqcrg_t(k,i_qi) = drhoqcrg_i(k) / dt
7127 rhoqcrg_t(k,i_qs) = drhoqcrg_s(k) / dt
7128 rhoqcrg_t(k,i_qg) = drhoqcrg_g(k) / dt
7134 end subroutine update_by_phase_change
7146 integer,
intent(in) :: KA, KS, KE
7147 integer,
intent(in) :: QA_MP
7148 real(RP),
intent(in) :: QTRC0(KA,QA_MP)
7149 real(RP),
intent(in) :: DENS0(KA)
7150 real(RP),
intent(out) :: Crs(KA,HYDRO_MAX)
7161 real(RP) :: coef_Fuetal1998
7163 real(RP),
parameter :: r2m_min=1.e-12_rp
7164 real(RP),
parameter :: um2cm = 100.0_rp
7166 real(RP) :: limitsw, zerosw
7172 xc(k) = min( xc_max, max( xc_min, dens0(k)*qtrc0(k,i_qc)/(qtrc0(k,i_nc)+nc_min) ) )
7173 xr(k) = min( xr_max, max( xr_min, dens0(k)*qtrc0(k,i_qr)/(qtrc0(k,i_nr)+nr_min) ) )
7174 xi(k) = min( xi_max, max( xi_min, dens0(k)*qtrc0(k,i_qi)/(qtrc0(k,i_ni)+ni_min) ) )
7175 xs(k) = min( xs_max, max( xs_min, dens0(k)*qtrc0(k,i_qs)/(qtrc0(k,i_ns)+ns_min) ) )
7176 xg(k) = min( xg_max, max( xg_min, dens0(k)*qtrc0(k,i_qg)/(qtrc0(k,i_ng)+ng_min) ) )
7181 crs(k,i_mp_qc) = pi * coef_r2(i_mp_qc) * qtrc0(k,i_nc) * a_rea2(i_mp_qc) * xc(k)**b_rea2(i_mp_qc)
7185 crs(k,i_mp_qr) = pi * coef_r2(i_mp_qr) * qtrc0(k,i_nr) * a_rea2(i_mp_qr) * xr(k)**b_rea2(i_mp_qr)
7189 crs(k,i_mp_qi) = pi * coef_rea2(i_mp_qi) * qtrc0(k,i_ni) * a_rea2(i_mp_qi) * xi(k)**b_rea2(i_mp_qi)
7190 crs(k,i_mp_qs) = pi * coef_rea2(i_mp_qs) * qtrc0(k,i_ns) * a_rea2(i_mp_qs) * xs(k)**b_rea2(i_mp_qs)
7191 crs(k,i_mp_qg) = pi * coef_rea2(i_mp_qg) * qtrc0(k,i_ng) * a_rea2(i_mp_qg) * xg(k)**b_rea2(i_mp_qg)
7198 subroutine get_terminal_velocity( &
7204 integer,
intent(in) :: KA, KS, KE
7205 real(RP),
intent(out) :: vt_xa (KA,HYDRO_MAX,2)
7206 real(RP),
intent(out) :: xq (KA,HYDRO_MAX)
7207 real(RP),
intent(in) :: rhoq (KA,I_QV:I_NG)
7208 real(RP),
intent(in) :: log_rho_fac_q(KA,HYDRO_MAX)
7216 xq(k,i_mp_qc) = min(xc_max, max(xc_min, rhoq(k,i_qc)/(rhoq(k,i_nc)+nc_min) ))
7218 log_xq = log(xq(k,i_mp_qc))
7219 vt_xa(k,i_mp_qc,1) = exp( log_alpha_v(i_mp_qc,1) + log_xq * beta_v(i_mp_qc,1) + log_rho_fac_q(k,i_mp_qc) )
7220 vt_xa(k,i_mp_qc,2) = exp( log_alpha_v(i_mp_qc,2) + log_xq * beta_v(i_mp_qc,2) + log_rho_fac_q(k,i_mp_qc) )
7222 xq(k,i_mp_qr) = min(xr_max, max(xr_min, rhoq(k,i_qr)/(rhoq(k,i_nr)+nr_min) ))
7223 log_xq = log(xq(k,i_mp_qr))
7224 vt_xa(k,i_mp_qr,1) = exp( log_alpha_v(i_mp_qr,1) + log_xq * beta_v(i_mp_qr,1) + log_rho_fac_q(k,i_mp_qr) )
7225 vt_xa(k,i_mp_qr,2) = vt_xa(k,i_mp_qr,1)
7227 xq(k,i_mp_qi) = min(xi_max, max(xi_min, rhoq(k,i_qi)/(rhoq(k,i_ni)+ni_min) ))
7228 log_xq = log(xq(k,i_mp_qi))
7229 vt_xa(k,i_mp_qi,1) = exp( log_alpha_v(i_mp_qi,1) + log_xq * beta_v(i_mp_qi,1) + log_rho_fac_q(k,i_mp_qi) )
7230 vt_xa(k,i_mp_qi,2) = exp( log_alpha_v(i_mp_qi,2) + log_xq * beta_v(i_mp_qi,2) + log_rho_fac_q(k,i_mp_qi) )
7232 xq(k,i_mp_qs) = min(xs_max, max(xs_min, rhoq(k,i_qs)/(rhoq(k,i_ns)+ns_min) ))
7233 log_xq = log(xq(k,i_mp_qs))
7234 vt_xa(k,i_mp_qs,1) = exp( log_alpha_v(i_mp_qs,1) + log_xq * beta_v(i_mp_qs,1) + log_rho_fac_q(k,i_mp_qs) )
7235 vt_xa(k,i_mp_qs,2) = exp( log_alpha_v(i_mp_qs,2) + log_xq * beta_v(i_mp_qs,2) + log_rho_fac_q(k,i_mp_qs) )
7237 xq(k,i_mp_qg) = min(xg_max, max(xg_min, rhoq(k,i_qg)/(rhoq(k,i_ng)+ng_min) ))
7238 log_xq = log(xq(k,i_mp_qg))
7239 vt_xa(k,i_mp_qg,1) = exp( log_alpha_v(i_mp_qg,1) + log_xq * beta_v(i_mp_qg,1) + log_rho_fac_q(k,i_mp_qg) )
7240 vt_xa(k,i_mp_qg,2) = exp( log_alpha_v(i_mp_qg,2) + log_xq * beta_v(i_mp_qg,2) + log_rho_fac_q(k,i_mp_qg) )
7244 end subroutine get_terminal_velocity
7247 subroutine get_diamiter( &
7252 integer,
intent(in) :: KA, KS, KE
7253 real(RP),
intent(out) :: dq_xa(KA,HYDRO_MAX)
7254 real(RP),
intent(in) :: xq (KA,HYDRO_MAX)
7261 dq_xa(k,i_mp_qc) = a_m(i_mp_qc)*xq(k,i_mp_qc)**b_m(i_mp_qc)
7262 dq_xa(k,i_mp_qr) = a_m(i_mp_qr)*xq(k,i_mp_qr)**b_m(i_mp_qr)
7263 dq_xa(k,i_mp_qi) = a_m(i_mp_qi)*xq(k,i_mp_qi)**b_m(i_mp_qi)
7264 dq_xa(k,i_mp_qs) = a_m(i_mp_qs)*xq(k,i_mp_qs)**b_m(i_mp_qs)
7265 dq_xa(k,i_mp_qg) = a_m(i_mp_qg)*xq(k,i_mp_qg)**b_m(i_mp_qg)
7269 end subroutine get_diamiter
module atmosphere / hydrometeor
integer, parameter, public n_hyd
real(rp), public cp_ice
CP for ice [J/kg/K].
integer, parameter, public i_hc
liquid water cloud
integer, parameter, public i_hs
snow
real(rp), public cv_vapor
CV for vapor [J/kg/K].
real(rp), public cp_vapor
CP for vapor [J/kg/K].
integer, parameter, public i_hg
graupel
real(rp), public cp_water
CP for water [J/kg/K].
real(rp), public cv_ice
CV for ice [J/kg/K].
integer, parameter, public i_hh
hail
integer, parameter, public i_hi
ice water cloud
real(rp), public cv_water
CV for water [J/kg/K].
integer, parameter, public i_hr
liquid water rain
module ATMOSPHERE / Physics Cloud Microphysics
integer, parameter, public atmos_phy_mp_sn14_nwaters
subroutine ice_multiplication(KA, KS, KE, flg_lt, Pac, tem, rhoq, rhoq_crg, xq, PQ, Pcrg1)
subroutine, public atmos_phy_mp_sn14_terminal_velocity(KA, KS, KE, DENS, TEMP, RHOQ, PRES, vterm)
ATMOS_PHY_MP_sn14_terminal_velocity Calculate terminal velocity.
subroutine aut_acc_slc_brk(KA, KS, KE, flg_lt, rhoq, rhoq_crg, xq, dq_xave, rho, PQ, Pcrg)
character(len=h_mid), dimension(qa_mp), parameter, public atmos_phy_mp_sn14_tracer_descriptions
integer, parameter, public qa_mp
integer, parameter, public atmos_phy_mp_sn14_ntracers
subroutine, public atmos_phy_mp_sn14_cloud_fraction(KA, KS, KE, IA, IS, IE, JA, JS, JE, QTRC, mask_criterion, cldfrac)
ATMOS_PHY_MP_sn14_cloud_fraction Calculate Cloud Fraction.
subroutine, public atmos_phy_mp_sn14_effective_radius(KA, KS, KE, IA, IS, IE, JA, JS, JE, DENS0, TEMP0, QTRC0, Re)
ATMOS_PHY_MP_sn14_effective_radius Calculate Effective Radius.
subroutine, public atmos_phy_mp_sn14_tendency(KA, KS, KE, IA, IS, IE, JA, JS, JE, DENS, W, QTRC, PRES, TEMP, Qdry, CPtot, CVtot, CCN, dt, cz, fz, RHOQ_t, RHOE_t, CPtot_t, CVtot_t, EVAPORATE, flg_lt, d0_crg, v0_crg, dqcrg, beta_crg, QTRC_crg, QSPLT_in, Sarea, RHOQcrg_t)
ATMOS_PHY_MP_sn14_tendency calculate tendency.
subroutine dep_vapor_ice_wrk(KA, KS, KE, PLIdep_total, rho, tem, pre, qd, esi, qsi, rhoq, vt_xave, dq_xave, dt)
subroutine, public atmos_phy_mp_sn14_qtrc2nhyd(KA, KS, KE, IA, IS, IE, JA, JS, JE, QTRC0, Ne)
Calculate number concentration of each category.
subroutine nucleation_ice_hom(KA, KS, KE, tem, pre, rho, qd, rhoq_qv, cva, cpa, w, dTdt_rad, dTdt_dep, PLIdep, dt, PLIhom, PNIhom)
subroutine, public atmos_phy_mp_sn14_finalize
finalize
character(len=h_short), dimension(qa_mp), parameter, public atmos_phy_mp_sn14_tracer_units
subroutine, public atmos_phy_mp_sn14_setup(KA, IA, JA)
ATMOS_PHY_MP_sn14_setup setup.
integer, parameter, public atmos_phy_mp_sn14_nices
character(len=h_short), dimension(qa_mp), parameter, public atmos_phy_mp_sn14_tracer_names
subroutine mixed_phase_collection_bin(KA, KS, KE, flg_lt, d0_crg, v0_crg, beta_crg, dqcrg, wtem, rhoq, rhoq_crg, xq, dq_xave, vt_xave, rho, PQ, Pcrg1, Pcrg2, Pac)
subroutine nucleation(KA, KS, KE, cz, fz, w, rho, tem, pre, qdry, rhoq, cpa, cva, dTdt_rad, qke, CCN, nc_uplim_d, dt, dq_xa, vt_xa, PQ)
subroutine freezing_water(KA, KS, KE, dt, rhoq, xq, tem, PQ)
subroutine debug_tem(KA, KS, KE, point, i, j, tem, rho, pre, qv)
subroutine mixed_phase_collection(KA, KS, KE, flg_lt, d0_crg, v0_crg, beta_crg, dqcrg, wtem, rhoq, rhoq_crg, xq, dq_xave, vt_xave, PQ, Pcrg1, Pcrg2, Pac)
subroutine, public atmos_phy_mp_sn14_qhyd2qtrc(KA, KS, KE, IA, IS, IE, JA, JS, JE, Qe, QTRC, QNUM)
subroutine, public atmos_phy_mp_sn14_qtrc2qhyd(KA, KS, KE, IA, IS, IE, JA, JS, JE, QTRC0, Qe)
ATMOS_PHY_MP_sn14_qtrc2qhyd Calculate mass ratio of each category.
subroutine cross_section(KA, KS, KE, QA_MP, QTRC0, DENS0, Crs)
Calculate Cross Section.
module atmosphere / saturation
real(rp), public const_eps
small number
real(rp), parameter, public const_dwatr
density of water [kg/m3]
real(rp), parameter, public const_pi
pi
real(rp), parameter, public const_tem00
temperature reference (0C) [K]
real(dp), parameter, public const_undef8
undefined value (REAL8)
real(rp), public const_pre00
pressure reference [Pa]
real(rp), public const_pstd
standard pressure [Pa]
real(rp), parameter, public const_rvap
specific gas constant (water vapor) [J/kg/K]
real(rp), public const_lhf00
latent heat of fusion at 0K [J/kg]
real(rp), public const_lhv00
latent heat of vaporizaion at 0K [J/kg]
real(rp), public const_lhf0
latent heat of fusion at 0C [J/kg]
real(rp), public const_undef
real(rp), public const_lhs00
latent heat of sublimation at 0K [J/kg]
real(rp), parameter, public const_lhs0
latent heat of sublimation at 0C [J/kg]
real(rp), parameter, public const_cl
specific heat (liquid water) [J/kg/K]
real(rp), parameter, public const_emelt
real(rp), parameter, public const_ci
specific heat (ice) [J/kg/K]
real(rp), public const_cvdry
specific heat (dry air,constant volume) [J/kg/K]
real(rp), public const_grav
standard acceleration of gravity [m/s2]
real(rp), public const_cvvap
specific heat (water vapor, constant volume) [J/kg/K]
real(rp), parameter, public const_psat0
saturate pressure of water vapor at 0C [Pa]
real(rp), public const_epsvap
Rdry / Rvap.
real(rp), public const_rdry
specific gas constant (dry air) [J/kg/K]
real(rp), parameter, public const_lhv0
latent heat of vaporizaion at 0C [J/kg]
real(rp), public const_cpdry
specific heat (dry air,constant pressure) [J/kg/K]
real(rp), parameter, public const_cpvap
specific heat (water vapor, constant pressure) [J/kg/K]
subroutine, public file_history_reg(name, desc, unit, itemid, standard_name, ndims, dim_type, cell_measures, fill_halo)
Register/Append variable to history file.
integer, public io_fid_conf
Config file ID.
subroutine, public prc_abort
Abort Process.
integer, public prc_myrank
process num in local communicator
integer, parameter, public dp
integer, parameter, public rp
real(rp) function, public sf_gamma(x)
Gamma function.