16 #include "inc_openmp.h" 58 integer,
private,
parameter :: QA_MP = 6
75 'Ratio of Water Vapor mass to total mass (Specific humidity)', &
76 'Ratio of Cloud Water mass to total mass', &
77 'Ratio of Rain Water mass to total mass', &
78 'Ratio of Cloud Ice mixing ratio to total mass', &
79 'Ratio of Snow mixing ratio to total mass', &
80 'Ratio of Graupel mixing ratio to total mass' /
94 private :: mp_tomita08
95 private :: mp_tomita08_vterm
96 private :: mp_tomita08_bergeronparam
102 integer,
private,
parameter :: i_mp_qc = 1
103 integer,
private,
parameter :: i_mp_qr = 2
104 integer,
private,
parameter :: i_mp_qi = 3
105 integer,
private,
parameter :: i_mp_qs = 4
106 integer,
private,
parameter :: i_mp_qg = 5
107 integer,
private :: qs_mp
108 integer,
private :: qe_mp
110 logical,
private :: mp_donegative_fixer = .true.
111 logical,
private :: mp_doprecipitation = .true.
112 logical,
private :: mp_couple_aerosol = .false.
113 real(RP),
private :: mp_limit_negative = 1.0_rp
114 logical,
private :: mp_doexplicit_icegen = .false.
116 logical,
private :: fixed_re = .false.
117 logical,
private :: const_rec = .true.
118 logical,
private :: nofall_qr = .false.
119 logical,
private :: nofall_qi = .false.
120 logical,
private :: nofall_qs = .false.
121 logical,
private :: nofall_qg = .false.
123 real(RP),
private,
parameter :: dens00 = 1.28_rp
126 real(RP),
private :: n0r_def = 8.e+6_rp
127 real(RP),
private :: n0s_def = 3.e+6_rp
128 real(RP),
private :: n0g_def = 4.e+6_rp
130 real(RP),
private :: dens_s = 100.0_rp
131 real(RP),
private :: dens_g = 400.0_rp
134 real(RP),
private :: drag_g = 0.6_rp
135 real(RP),
private :: re_qc = 8.e-6_rp
136 real(RP),
private :: re_qi = 40.e-6_rp
137 real(RP),
private :: cr = 130.0_rp
138 real(RP),
private :: cs = 4.84_rp
141 real(RP),
private :: ar, as, ag
142 real(RP),
private :: br, bs, bg
143 real(RP),
private :: cg
144 real(RP),
private :: dr, ds, dg
147 real(RP),
private :: gam, gam_2, gam_3
149 real(RP),
private :: gam_1br, gam_2br, gam_3br
150 real(RP),
private :: gam_3dr
151 real(RP),
private :: gam_6dr
152 real(RP),
private :: gam_1brdr
153 real(RP),
private :: gam_5dr_h
155 real(RP),
private :: gam_1bs, gam_2bs, gam_3bs
156 real(RP),
private :: gam_3ds
157 real(RP),
private :: gam_1bsds
158 real(RP),
private :: gam_5ds_h
160 real(RP),
private :: gam_1bg, gam_3dg
161 real(RP),
private :: gam_1bgdg
162 real(RP),
private :: gam_5dg_h
165 real(RP),
private :: sw_kk2000 = 0.0_rp
168 real(RP),
private :: sw_rs2014 = 0.0_rp
169 real(RP),
private :: ln10
170 real(RP),
private,
parameter :: coef_a(10) = (/ 5.065339_rp, -0.062659_rp, -3.032362_rp, 0.029469_rp, -0.000285_rp, &
171 0.31255_rp, 0.000204_rp, 0.003199_rp, 0.0_rp, -0.015952_rp /)
172 real(RP),
private,
parameter :: coef_b(10) = (/ 0.476221_rp, -0.015896_rp, 0.165977_rp, 0.007468_rp, -0.000141_rp, &
173 0.060366_rp, 0.000079_rp, 0.000594_rp, 0.0_rp, -0.003577_rp /)
175 real(RP),
private :: sw_wdxz2014 = 0.0_rp
178 real(RP),
private :: eiw = 1.0_rp
179 real(RP),
private :: erw = 1.0_rp
180 real(RP),
private :: esw = 1.0_rp
181 real(RP),
private :: egw = 1.0_rp
182 real(RP),
private :: eri = 1.0_rp
183 real(RP),
private :: esi = 1.0_rp
184 real(RP),
private :: egi = 0.1_rp
185 real(RP),
private :: esr = 1.0_rp
186 real(RP),
private :: egr = 1.0_rp
187 real(RP),
private :: egs = 1.0_rp
188 real(RP),
private :: gamma_sacr = 25.e-3_rp
189 real(RP),
private :: gamma_gacs = 90.e-3_rp
190 real(RP),
private :: mi = 4.19e-13_rp
193 real(RP),
private,
parameter :: nc_lnd = 2000.0_rp
194 real(RP),
private,
parameter :: nc_ocn = 50.0_rp
195 real(RP),
private,
allocatable :: nc_def(:,:)
197 real(RP),
private :: beta_saut = 6.e-3_rp
198 real(RP),
private :: gamma_saut = 60.e-3_rp
199 real(RP),
private :: beta_gaut = 0.0_rp
200 real(RP),
private :: gamma_gaut = 90.e-3_rp
201 real(RP),
private :: qicrt_saut = 0.0_rp
202 real(RP),
private :: qscrt_gaut = 6.e-4_rp
205 real(RP),
private,
parameter :: da0 = 2.428e-2_rp
206 real(RP),
private,
parameter :: dda_dt = 7.47e-5_rp
207 real(RP),
private,
parameter :: dw0 = 2.222e-5_rp
208 real(RP),
private,
parameter :: ddw_dt = 1.37e-7_rp
209 real(RP),
private,
parameter :: mu0 = 1.718e-5_rp
210 real(RP),
private,
parameter :: dmu_dt = 5.28e-8_rp
212 real(RP),
private,
parameter :: f1r = 0.78_rp
213 real(RP),
private,
parameter :: f2r = 0.27_rp
214 real(RP),
private,
parameter :: f1s = 0.65_rp
215 real(RP),
private,
parameter :: f2s = 0.39_rp
216 real(RP),
private,
parameter :: f1g = 0.78_rp
217 real(RP),
private,
parameter :: f2g = 0.27_rp
220 real(RP),
private,
parameter :: a_frz = 0.66_rp
221 real(RP),
private,
parameter :: b_frz = 100.0_rp
224 real(RP),
private,
parameter :: mi40 = 2.46e-10_rp
225 real(RP),
private,
parameter :: mi50 = 4.80e-10_rp
226 real(RP),
private,
parameter :: vti50 = 1.0_rp
227 real(RP),
private,
parameter :: ri50 = 5.e-5_rp
230 logical,
private :: only_liquid = .false.
231 real(RP),
private :: sw_expice = 0.0_rp
232 real(RP),
private,
parameter :: nc_ihtr = 300.0_rp
233 real(RP),
private,
parameter :: di_max = 500.e-6_rp
234 real(RP),
private,
parameter :: di_a = 11.9_rp
236 integer,
private,
parameter :: w_nmax = 49
237 integer,
private,
parameter :: i_dqv_dt = 1
238 integer,
private,
parameter :: i_dqc_dt = 2
239 integer,
private,
parameter :: i_dqr_dt = 3
240 integer,
private,
parameter :: i_dqi_dt = 4
241 integer,
private,
parameter :: i_dqs_dt = 5
242 integer,
private,
parameter :: i_dqg_dt = 6
243 integer,
private,
parameter :: i_delta1 = 7
244 integer,
private,
parameter :: i_delta2 = 8
245 integer,
private,
parameter :: i_spsati = 9
246 integer,
private,
parameter :: i_iceflg = 10
247 integer,
private,
parameter :: i_rlmdr = 11
248 integer,
private,
parameter :: i_rlmds = 12
249 integer,
private,
parameter :: i_rlmdg = 13
250 integer,
private,
parameter :: i_piacr = 14
251 integer,
private,
parameter :: i_psacr = 15
252 integer,
private,
parameter :: i_praci = 16
253 integer,
private,
parameter :: i_pigen = 17
254 integer,
private,
parameter :: i_pidep = 18
255 integer,
private,
parameter :: i_psdep = 19
256 integer,
private,
parameter :: i_pgdep = 20
257 integer,
private,
parameter :: i_praut = 21
258 integer,
private,
parameter :: i_pracw = 22
259 integer,
private,
parameter :: i_pihom = 23
260 integer,
private,
parameter :: i_pihtr = 24
261 integer,
private,
parameter :: i_psacw = 25
262 integer,
private,
parameter :: i_psfw = 26
263 integer,
private,
parameter :: i_pgacw = 27
264 integer,
private,
parameter :: i_prevp = 28
265 integer,
private,
parameter :: i_piacr_s = 29
266 integer,
private,
parameter :: i_psacr_s = 30
267 integer,
private,
parameter :: i_piacr_g = 31
268 integer,
private,
parameter :: i_psacr_g = 32
269 integer,
private,
parameter :: i_pgacr = 33
270 integer,
private,
parameter :: i_pgfrz = 34
271 integer,
private,
parameter :: i_pisub = 35
272 integer,
private,
parameter :: i_pimlt = 36
273 integer,
private,
parameter :: i_psaut = 37
274 integer,
private,
parameter :: i_praci_s = 38
275 integer,
private,
parameter :: i_psaci = 39
276 integer,
private,
parameter :: i_psfi = 40
277 integer,
private,
parameter :: i_praci_g = 41
278 integer,
private,
parameter :: i_pgaci = 42
279 integer,
private,
parameter :: i_pssub = 43
280 integer,
private,
parameter :: i_psmlt = 44
281 integer,
private,
parameter :: i_pgaut = 45
282 integer,
private,
parameter :: i_pracs = 46
283 integer,
private,
parameter :: i_pgacs = 47
284 integer,
private,
parameter :: i_pgsub = 48
285 integer,
private,
parameter :: i_pgmlt = 49
287 character(len=H_SHORT),
private :: w_name(w_nmax)
289 data w_name /
'dqv_dt ', &
339 real(RP),
private,
allocatable :: w3d(:,:,:,:)
341 integer,
private :: mp_ntmax_sedimentation = 1
343 integer,
private :: mp_nstep_sedimentation
344 real(RP),
private :: mp_rnstep_sedimentation
345 real(DP),
private :: mp_dtsec_sedimentation
360 character(len=*),
intent(in) :: mp_type
361 integer,
intent(out) :: qa
362 integer,
intent(out) :: qs
366 if(
io_l )
write(
io_fid_log,*)
'++++++ Module[Cloud Microphysics Tracer] / Categ[ATMOS PHYSICS] / Origin[SCALElib]' 367 if(
io_l )
write(
io_fid_log,*)
'*** Tracers for Tomita (2008) 1-moment bulk 6 category' 369 if ( mp_type /=
'TOMITA08' )
then 370 write(*,*)
'xxx ATMOS_PHY_MP_TYPE is not TOMITA08. Check!' 413 real(RP) :: autoconv_nc = nc_ocn
414 logical :: enable_kk2000 = .false.
415 logical :: enable_rs2014 = .false.
416 logical :: enable_wdxz2014 = .false.
418 namelist / param_atmos_phy_mp / &
419 mp_doprecipitation, &
420 mp_donegative_fixer, &
422 mp_doexplicit_icegen, &
423 mp_ntmax_sedimentation, &
426 namelist / param_atmos_phy_mp_tomita08 / &
467 real(RP),
parameter :: max_term_vel = 10.0_rp
475 if(
io_l )
write(
io_fid_log,*)
'++++++ Module[Cloud Microphysics] / Categ[ATMOS PHYSICS] / Origin[SCALElib]' 476 if(
io_l )
write(
io_fid_log,*)
'*** Tomita (2008) 1-moment bulk 6 category' 478 allocate( w3d(
ka,
ia,
ja,w_nmax) )
479 w3d(:,:,:,:) = 0.0_rp
481 allocate( nc_def(
ia,
ja) )
485 read(
io_fid_conf,nml=param_atmos_phy_mp,iostat=ierr)
487 if(
io_l )
write(
io_fid_log,*)
'*** Not found namelist. Default used.' 488 elseif( ierr > 0 )
then 489 write(*,*)
'xxx Not appropriate names in namelist PARAM_ATMOS_PHY_MP. Check!' 495 if(
io_l )
write(
io_fid_log,*)
'*** Enable negative fixer? : ', mp_donegative_fixer
496 if(
io_l )
write(
io_fid_log,*)
'*** Value limit of negative fixer (abs) : ', abs(mp_limit_negative)
497 if(
io_l )
write(
io_fid_log,*)
'*** Enable sedimentation (precipitation)? : ', mp_doprecipitation
498 if(
io_l )
write(
io_fid_log,*)
'*** Enable explicit ice generation? : ', mp_doexplicit_icegen
501 mp_ntmax_sedimentation = max( mp_ntmax_sedimentation, nstep_max )
503 mp_nstep_sedimentation = mp_ntmax_sedimentation
504 mp_rnstep_sedimentation = 1.0_rp /
real(mp_ntmax_sedimentation,kind=
rp)
507 if(
io_l )
write(
io_fid_log,*)
'*** Timestep of sedimentation is divided into : ', mp_ntmax_sedimentation,
'step' 508 if(
io_l )
write(
io_fid_log,*)
'*** DT of sedimentation : ', mp_dtsec_sedimentation,
'[s]' 512 read(
io_fid_conf,nml=param_atmos_phy_mp_tomita08,iostat=ierr)
514 if(
io_l )
write(
io_fid_log,*)
'*** Not found namelist. Default used.' 515 elseif( ierr > 0 )
then 516 write(*,*)
'xxx Not appropriate names in namelist PARAM_ATMOS_PHY_MP_TOMITA08. Check!' 522 if(
io_l )
write(
io_fid_log,*)
'*** density of the snow [kg/m3] : ', dens_s
523 if(
io_l )
write(
io_fid_log,*)
'*** density of the graupel [kg/m3] : ', dens_g
524 if(
io_l )
write(
io_fid_log,*)
'*** Nc for auto-conversion [num/m3]: ', autoconv_nc
525 if(
io_l )
write(
io_fid_log,*)
'*** Use k-k scheme? : ', enable_kk2000
526 if(
io_l )
write(
io_fid_log,*)
'*** Use Roh scheme? : ', enable_rs2014
527 if(
io_l )
write(
io_fid_log,*)
'*** Use WDXZ scheme? : ', enable_wdxz2014
529 if(
io_l )
write(
io_fid_log,*)
'*** Use effective radius of ice for snow and graupel,' 530 if(
io_l )
write(
io_fid_log,*)
' and set rain transparent? : ', fixed_re
531 if(
io_l )
write(
io_fid_log,*)
'*** Density of the ice is used for the calculation of ' 532 if(
io_l )
write(
io_fid_log,*)
' optically effective volume of snow and graupel.' 533 if(
io_l )
write(
io_fid_log,*)
'*** Surpress sedimentation of rain? : ', nofall_qr
534 if(
io_l )
write(
io_fid_log,*)
'*** Surpress sedimentation of ice? : ', nofall_qi
535 if(
io_l )
write(
io_fid_log,*)
'*** Surpress sedimentation of snow? : ', nofall_qs
536 if(
io_l )
write(
io_fid_log,*)
'*** Surpress sedimentation of graupel? : ', nofall_qg
549 nc_def(i,j) = autoconv_nc
554 ar = pi * dens_w / 6.0_rp
555 as = pi * dens_s / 6.0_rp
556 ag = pi * dens_g / 6.0_rp
562 cg = sqrt( ( 4.0_rp * dens_g * grav ) / ( 3.0_rp * dens00 * drag_g ) )
568 if ( enable_rs2014 )
then 569 mp_doexplicit_icegen = .true.
580 if ( mp_doexplicit_icegen )
then 584 only_liquid = .false.
588 if ( enable_kk2000 )
then 594 if ( enable_wdxz2014 )
then 609 gam_1brdr =
sf_gamma( 1.0_rp + br + dr )
610 gam_5dr_h =
sf_gamma( 0.5_rp * (5.0_rp+dr) )
616 gam_1bsds =
sf_gamma( 1.0_rp + bs + ds )
617 gam_5ds_h =
sf_gamma( 0.5_rp * (5.0_rp+ds) )
621 gam_1bgdg =
sf_gamma( 1.0_rp + bg + dg)
622 gam_5dg_h =
sf_gamma( 0.5_rp * (5.0_rp+dg) )
656 thermodyn_rhoe => atmos_thermodyn_rhoe, &
657 thermodyn_rhot => atmos_thermodyn_rhot, &
658 thermodyn_temp_pres_e => atmos_thermodyn_temp_pres_e
665 real(RP),
intent(inout) :: dens (
ka,
ia,
ja)
666 real(RP),
intent(inout) :: momz (
ka,
ia,
ja)
667 real(RP),
intent(inout) :: momx (
ka,
ia,
ja)
668 real(RP),
intent(inout) :: momy (
ka,
ia,
ja)
669 real(RP),
intent(inout) :: rhot (
ka,
ia,
ja)
670 real(RP),
intent(inout) :: qtrc (
ka,
ia,
ja,
qa)
671 real(RP),
intent(in) :: ccn (
ka,
ia,
ja)
672 real(RP),
intent(out) :: evaporate(
ka,
ia,
ja)
673 real(RP),
intent(out) :: sflx_rain(
ia,
ja)
674 real(RP),
intent(out) :: sflx_snow(
ia,
ja)
676 real(RP) :: rhoe_t (
ka,
ia,
ja)
678 real(RP) :: rhoe (
ka,
ia,
ja)
679 real(RP) :: temp (
ka,
ia,
ja)
680 real(RP) :: pres (
ka,
ia,
ja)
682 real(RP) :: vterm (
ka,
ia,
ja,qa_mp-1)
683 real(RP) :: pflux (
ka,
ia,
ja,qa_mp-1)
684 real(RP) :: flx_hydro(
ka,
ia,
ja,qa_mp-1)
685 real(RP) :: qc_t_sat (
ka,
ia,
ja)
686 real(RP) :: qi_t_sat (
ka,
ia,
ja)
692 if(
io_l )
write(
io_fid_log,*)
'*** Atmos physics step: Cloud microphysics(tomita08)' 694 if ( mp_donegative_fixer )
then 695 call mp_negative_fixer( dens(:,:,:), &
702 call thermodyn_rhoe( rhoe(:,:,:), &
710 call mp_tomita08( rhoe_t(:,:,:), &
717 vterm(:,:,:,:) = 0.0_rp
718 flx_hydro(:,:,:,:) = 0.0_rp
720 if ( mp_doprecipitation )
then 722 do step = 1, mp_nstep_sedimentation
724 call thermodyn_temp_pres_e( temp(:,:,:), &
733 call mp_tomita08_vterm( vterm(:,:,:,:), &
738 call mp_precipitation( qa_mp, &
750 mp_dtsec_sedimentation )
755 flx_hydro(k,i,j,i_mp_qr) = flx_hydro(k,i,j,i_mp_qr) + pflux(k,i,j,i_mp_qr) * mp_rnstep_sedimentation
756 flx_hydro(k,i,j,i_mp_qi) = flx_hydro(k,i,j,i_mp_qi) + pflux(k,i,j,i_mp_qi) * mp_rnstep_sedimentation
757 flx_hydro(k,i,j,i_mp_qs) = flx_hydro(k,i,j,i_mp_qs) + pflux(k,i,j,i_mp_qs) * mp_rnstep_sedimentation
758 flx_hydro(k,i,j,i_mp_qg) = flx_hydro(k,i,j,i_mp_qg) + pflux(k,i,j,i_mp_qg) * mp_rnstep_sedimentation
767 call hist_in( flx_hydro(:,:,:,i_mp_qr),
'pflux_QR',
'precipitation flux of QR',
'kg/m2/s', nohalo=.true. )
768 call hist_in( flx_hydro(:,:,:,i_mp_qi),
'pflux_QI',
'precipitation flux of QI',
'kg/m2/s', nohalo=.true. )
769 call hist_in( flx_hydro(:,:,:,i_mp_qs),
'pflux_QS',
'precipitation flux of QS',
'kg/m2/s', nohalo=.true. )
770 call hist_in( flx_hydro(:,:,:,i_mp_qg),
'pflux_QG',
'precipitation flux of QG',
'kg/m2/s', nohalo=.true. )
772 call hist_in( vterm(:,:,:,i_mp_qr),
'Vterm_QR',
'terminal velocity of QR',
'm/s' )
773 call hist_in( vterm(:,:,:,i_mp_qi),
'Vterm_QI',
'terminal velocity of QI',
'm/s' )
774 call hist_in( vterm(:,:,:,i_mp_qs),
'Vterm_QS',
'terminal velocity of QS',
'm/s' )
775 call hist_in( vterm(:,:,:,i_mp_qg),
'Vterm_QG',
'terminal velocity of QG',
'm/s' )
780 qc_t_sat(k,i,j) = qtrc(k,i,j,
i_qc)
781 qi_t_sat(k,i,j) = qtrc(k,i,j,
i_qi)
786 call mp_saturation_adjustment( rhoe_t(:,:,:), &
799 qc_t_sat(k,i,j) = ( qtrc(k,i,j,
i_qc) - qc_t_sat(k,i,j) ) / dt_mp
800 qi_t_sat(k,i,j) = ( qtrc(k,i,j,
i_qi) - qi_t_sat(k,i,j) ) / dt_mp
805 call hist_in( qc_t_sat(:,:,:),
'Pcsat',
'QC production term by satadjust',
'kg/kg/s' )
806 call hist_in( qi_t_sat(:,:,:),
'Pisat',
'QI production term by satadjust',
'kg/kg/s' )
811 evaporate(k,i,j) = max( -qc_t_sat(k,i,j), 0.0_rp )
812 evaporate(k,i,j) = evaporate(k,i,j) * dens(k,i,j) / (4.0_rp/3.0_rp*pi*dwatr*re_qc**3)
819 call thermodyn_rhot( rhot(:,:,:), &
826 if ( mp_donegative_fixer )
then 827 call mp_negative_fixer( dens(:,:,:), &
836 sflx_rain(i,j) = - ( flx_hydro(
ks-1,i,j,i_mp_qr) )
837 sflx_snow(i,j) = - ( flx_hydro(
ks-1,i,j,i_mp_qi) &
838 + flx_hydro(
ks-1,i,j,i_mp_qs) &
839 + flx_hydro(
ks-1,i,j,i_mp_qg) )
848 subroutine mp_tomita08( &
876 thermodyn_temp_pres_e => atmos_thermodyn_temp_pres_e
881 saturation_dens2qsat_liq => atmos_saturation_dens2qsat_liq, &
882 saturation_dens2qsat_ice => atmos_saturation_dens2qsat_ice
885 real(RP),
intent(out) :: rhoe_t(
ka,
ia,
ja)
886 real(RP),
intent(out) :: qtrc_t(
ka,
ia,
ja,
qa)
887 real(RP),
intent(inout) :: rhoe0 (
ka,
ia,
ja)
888 real(RP),
intent(inout) :: qtrc0 (
ka,
ia,
ja,
qa)
889 real(RP),
intent(in) :: ccn (
ka,
ia,
ja)
890 real(RP),
intent(in) :: dens0 (
ka,
ia,
ja)
893 real(RP) :: temp0(
ka,
ia,
ja)
894 real(RP) :: pres0(
ka,
ia,
ja)
895 real(RP) :: qsatl(
ka,
ia,
ja)
896 real(RP) :: qsati(
ka,
ia,
ja)
900 real(RP) :: qv, qc, qr, qi, qs, qg
901 real(RP) :: qv_t, qc_t, qr_t, qi_t, qs_t, qg_t
909 real(RP) :: n0r, n0s, n0g
911 real(RP) :: rlmdr, rlmdr_2, rlmdr_3
912 real(RP) :: rlmds, rlmds_2, rlmds_3
913 real(RP) :: rlmdg, rlmdg_2, rlmdg_3
914 real(RP) :: rlmdr_1br, rlmdr_2br, rlmdr_3br
915 real(RP) :: rlmds_1bs, rlmds_2bs, rlmds_3bs
916 real(RP) :: rlmdr_dr, rlmdr_3dr, rlmdr_5dr
917 real(RP) :: rlmds_ds, rlmds_3ds, rlmds_5ds
918 real(RP) :: rlmdg_dg, rlmdg_3dg, rlmdg_5dg
920 real(RP) :: rlmdr_6dr
923 real(RP) :: tems, xs2
924 real(RP) :: moms_0, moms_1, moms_2
925 real(RP) :: moms_0bs, moms_1bs, moms_2bs
926 real(RP) :: moms_2ds, moms_5ds_h, rmoms_vt
927 real(RP) :: coef_at(4), coef_bt(4)
928 real(RP) :: loga_, b_, nm
930 real(RP) :: vti, vtr, vts, vtg
931 real(RP) :: esi_mod, egs_mod
934 real(RP) :: pracw_orig, pracw_kk
935 real(RP) :: praut_berry, praut_kk
937 real(RP) :: betai, betas
941 real(RP) :: glv, giv, gil
942 real(RP) :: ventr, vents, ventg
943 real(RP) :: net, fac, fac_sw
944 real(RP) :: zerosw, tmp
947 real(RP) :: sw_bergeron
955 real(RP) :: sw, rhoqi, xni, xmi, di, ni0, qi0
957 real(RP) :: w(w_nmax)
959 integer :: k, i, j, ip
964 if ( mp_couple_aerosol )
then 968 nc(k,i,j) = max( ccn(k,i,j)*1.e-6_rp, nc_def(i,j) )
976 nc(k,i,j) = nc_def(i,j)
982 call thermodyn_temp_pres_e( temp0(:,:,:), &
991 call saturation_dens2qsat_liq( qsatl(:,:,:), &
995 call saturation_dens2qsat_ice( qsati(:,:,:), &
999 call mp_tomita08_bergeronparam( temp0(:,:,:), &
1025 qv = qtrc0(k,i,j,i_qv)
1026 qc = qtrc0(k,i,j,i_qc)
1027 qr = qtrc0(k,i,j,i_qr)
1028 qi = qtrc0(k,i,j,i_qi)
1029 qs = qtrc0(k,i,j,i_qs)
1030 qg = qtrc0(k,i,j,i_qg)
1033 sliq = qv / max( qsatl(k,i,j), eps )
1034 sice = qv / max( qsati(k,i,j), eps )
1036 rdens = 1.0_rp / dens
1037 rho_fact = sqrt( dens00 * rdens )
1040 w(i_delta1) = ( 0.5_rp + sign(0.5_rp, qr - 1.e-4_rp ) )
1042 w(i_delta2) = ( 0.5_rp + sign(0.5_rp, 1.e-4_rp - qr ) ) &
1043 * ( 0.5_rp + sign(0.5_rp, 1.e-4_rp - qs ) )
1045 w(i_spsati) = 0.5_rp + sign(0.5_rp, sice - 1.0_rp )
1047 w(i_iceflg) = 0.5_rp - sign( 0.5_rp, temc )
1049 w(i_dqv_dt) = qv / dt
1050 w(i_dqc_dt) = qc / dt
1051 w(i_dqr_dt) = qr / dt
1052 w(i_dqi_dt) = qi / dt
1053 w(i_dqs_dt) = qs / dt
1054 w(i_dqg_dt) = qg / dt
1056 sw_bergeron = ( 0.5_rp + sign(0.5_rp, temc + 30.0_rp ) ) &
1057 * ( 0.5_rp + sign(0.5_rp, 0.0_rp - temc ) ) &
1058 * ( 1.0_rp - sw_expice )
1061 n0r = ( 1.0_rp-sw_wdxz2014 ) * n0r_def &
1062 + ( sw_wdxz2014 ) * 1.16e+5_rp * exp( log( max( dens*qr*1000.0_rp, 1.e-2_rp ) )*0.477_rp )
1063 n0s = ( 1.0_rp-sw_wdxz2014 ) * n0s_def &
1064 + ( sw_wdxz2014 ) * 4.58e+9_rp * exp( log( max( dens*qs*1000.0_rp, 1.e-2_rp ) )*0.788_rp )
1065 n0g = ( 1.0_rp-sw_wdxz2014 ) * n0g_def &
1066 + ( sw_wdxz2014 ) * 9.74e+8_rp * exp( log( max( dens*qg*1000.0_rp, 1.e-2_rp ) )*0.816_rp )
1069 zerosw = 0.5_rp - sign(0.5_rp, qr - 1.e-12_rp )
1070 rlmdr = sqrt(sqrt( dens * qr / ( ar * n0r * gam_1br ) + zerosw )) * ( 1.0_rp-zerosw )
1072 rlmdr_dr = sqrt( rlmdr )
1076 rlmdr_1br = rlmdr**4
1077 rlmdr_2br = rlmdr**5
1078 rlmdr_3br = rlmdr**6
1079 rlmdr_3dr = rlmdr**3 * rlmdr_dr
1080 rlmdr_5dr = rlmdr**5 * rlmdr_dr
1081 rlmdr_6dr = rlmdr**6 * rlmdr_dr
1084 zerosw = 0.5_rp - sign(0.5_rp, dens * qs - 1.e-12_rp )
1085 rlmds = sqrt(sqrt( dens * qs / ( as * n0s * gam_1bs ) + zerosw )) * ( 1.0_rp-zerosw )
1087 rlmds_ds = sqrt( sqrt(rlmds) )
1090 rlmds_1bs = rlmds**4
1091 rlmds_2bs = rlmds**5
1092 rlmds_3bs = rlmds**6
1093 rlmds_3ds = rlmds**3 * rlmds_ds
1094 rlmds_5ds = rlmds**5 * rlmds_ds
1096 moms_0 = n0s * gam * rlmds
1097 moms_1 = n0s * gam_2 * rlmds_2
1098 moms_2 = n0s * gam_3 * rlmds_3
1099 moms_0bs = n0s * gam_1bs * rlmds_1bs
1100 moms_1bs = n0s * gam_2bs * rlmds_2bs
1101 moms_2bs = n0s * gam_3bs * rlmds_3bs
1102 moms_2ds = n0s * gam_3ds * rlmds_3ds
1103 moms_5ds_h = n0s * gam_5ds_h * sqrt(rlmds_5ds)
1104 rmoms_vt = gam_1bsds / gam_1bs * rlmds_ds
1108 xs2 = dens * qs / as
1110 tems = min( -0.1_rp, temc )
1111 coef_at(1) = coef_a( 1) + tems * ( coef_a( 2) + tems * ( coef_a( 5) + tems * coef_a( 9) ) )
1112 coef_at(2) = coef_a( 3) + tems * ( coef_a( 4) + tems * coef_a( 7) )
1113 coef_at(3) = coef_a( 6) + tems * coef_a( 8)
1114 coef_at(4) = coef_a(10)
1115 coef_bt(1) = coef_b( 1) + tems * ( coef_b( 2) + tems * ( coef_b( 5) + tems * coef_b( 9) ) )
1116 coef_bt(2) = coef_b( 3) + tems * ( coef_b( 4) + tems * coef_b( 7) )
1117 coef_bt(3) = coef_b( 6) + tems * coef_b( 8)
1118 coef_bt(4) = coef_b(10)
1122 moms_0 = ( sw_rs2014 ) * exp(ln10*loga_) * exp(log(xs2+zerosw)*b_) * ( 1.0_rp-zerosw ) &
1123 + ( 1.0_rp-sw_rs2014 ) * moms_0
1126 loga_ = coef_at(1) + nm * ( coef_at(2) + nm * ( coef_at(3) + nm * coef_at(4) ) )
1127 b_ = coef_bt(1) + nm * ( coef_bt(2) + nm * ( coef_bt(3) + nm * coef_bt(4) ) )
1128 moms_1 = ( sw_rs2014 ) * exp(ln10*loga_) * exp(log(xs2+zerosw)*b_) * ( 1.0_rp-zerosw ) &
1129 + ( 1.0_rp-sw_rs2014 ) * moms_1
1131 moms_2 = ( sw_rs2014 ) * xs2 &
1132 + ( 1.0_rp-sw_rs2014 ) * moms_2
1135 loga_ = coef_at(1) + nm * ( coef_at(2) + nm * ( coef_at(3) + nm * coef_at(4) ) )
1136 b_ = coef_bt(1) + nm * ( coef_bt(2) + nm * ( coef_bt(3) + nm * coef_bt(4) ) )
1137 moms_0bs = ( sw_rs2014 ) * exp(ln10*loga_) * exp(log(xs2+zerosw)*b_) * ( 1.0_rp-zerosw ) &
1138 + ( 1.0_rp-sw_rs2014 ) * moms_0bs
1141 loga_ = coef_at(1) + nm * ( coef_at(2) + nm * ( coef_at(3) + nm * coef_at(4) ) )
1142 b_ = coef_bt(1) + nm * ( coef_bt(2) + nm * ( coef_bt(3) + nm * coef_bt(4) ) )
1143 moms_1bs = ( sw_rs2014 ) * exp(ln10*loga_) * exp(log(xs2+zerosw)*b_) * ( 1.0_rp-zerosw ) &
1144 + ( 1.0_rp-sw_rs2014 ) * moms_1bs
1147 loga_ = coef_at(1) + nm * ( coef_at(2) + nm * ( coef_at(3) + nm * coef_at(4) ) )
1148 b_ = coef_bt(1) + nm * ( coef_bt(2) + nm * ( coef_bt(3) + nm * coef_bt(4) ) )
1149 moms_2bs = ( sw_rs2014 ) * exp(ln10*loga_) * exp(log(xs2+zerosw)*b_) * ( 1.0_rp-zerosw ) &
1150 + ( 1.0_rp-sw_rs2014 ) * moms_2bs
1153 loga_ = coef_at(1) + nm * ( coef_at(2) + nm * ( coef_at(3) + nm * coef_at(4) ) )
1154 b_ = coef_bt(1) + nm * ( coef_bt(2) + nm * ( coef_bt(3) + nm * coef_bt(4) ) )
1155 moms_2ds = ( sw_rs2014 ) * exp(ln10*loga_) * exp(log(xs2+zerosw)*b_) * ( 1.0_rp-zerosw ) &
1156 + ( 1.0_rp-sw_rs2014 ) * moms_2ds
1159 loga_ = coef_at(1) + nm * ( coef_at(2) + nm * ( coef_at(3) + nm * coef_at(4) ) )
1160 b_ = coef_bt(1) + nm * ( coef_bt(2) + nm * ( coef_bt(3) + nm * coef_bt(4) ) )
1161 moms_5ds_h = ( sw_rs2014 ) * exp(ln10*loga_) * exp(log(xs2+zerosw)*b_) * ( 1.0_rp-zerosw ) &
1162 + ( 1.0_rp-sw_rs2014 ) * moms_5ds_h
1165 loga_ = coef_at(1) + nm * ( coef_at(2) + nm * ( coef_at(3) + nm * coef_at(4) ) )
1166 b_ = coef_bt(1) + nm * ( coef_bt(2) + nm * ( coef_bt(3) + nm * coef_bt(4) ) )
1168 rmoms_vt = ( sw_rs2014 ) * exp(ln10*loga_) * exp(log(xs2+zerosw)*b_) * ( 1.0_rp-zerosw ) / ( moms_0bs + zerosw ) &
1169 + ( 1.0_rp-sw_rs2014 ) * rmoms_vt
1172 zerosw = 0.5_rp - sign(0.5_rp, qg - 1.e-12_rp )
1173 rlmdg = sqrt(sqrt( dens * qg / ( ag * n0g * gam_1bg ) + zerosw )) * ( 1.0_rp-zerosw )
1175 rlmdg_dg = sqrt( rlmdg )
1178 rlmdg_3dg = rlmdg**3 * rlmdg_dg
1179 rlmdg_5dg = rlmdg**5 * rlmdg_dg
1186 zerosw = 0.5_rp - sign(0.5_rp, qi - 1.e-8_rp )
1187 vti = -3.29_rp * exp( log( dens*qi+zerosw )*0.16_rp ) * ( 1.0_rp-zerosw )
1188 vtr = -cr * rho_fact * gam_1brdr / gam_1br * rlmdr_dr
1189 vts = -cs * rho_fact * rmoms_vt
1190 vtg = -cg * rho_fact * gam_1bgdg / gam_1bg * rlmdg_dg
1194 ni0 = max( exp(-0.1_rp*temc), 1.0_rp ) * 1000.0_rp
1195 qi0 = 4.92e-11_rp * exp(log(ni0)*1.33_rp) * rdens
1197 w(i_pigen) = max( min( qi0-qi, qv-qsati(k,i,j) ), 0.0_rp ) / dt
1200 esi_mod = min( esi, esi * exp( gamma_sacr * temc ) )
1201 egs_mod = min( egs, egs * exp( gamma_gacs * temc ) )
1204 pracw_orig = qc * 0.25_rp * pi * erw * n0r * cr * gam_3dr * rlmdr_3dr * rho_fact
1206 zerosw = 0.5_rp - sign(0.5_rp, qc*qr - 1.e-12_rp )
1207 pracw_kk = 67.0_rp * exp( log( qc*qr+zerosw )*1.15_rp ) * ( 1.0_rp-zerosw )
1210 w(i_pracw) = ( 1.0_rp-sw_kk2000 ) * pracw_orig &
1211 + ( sw_kk2000 ) * pracw_kk
1214 w(i_psacw) = qc * 0.25_rp * pi * esw * cs * moms_2ds * rho_fact
1217 w(i_pgacw) = qc * 0.25_rp * pi * egw * n0g * cg * gam_3dg * rlmdg_3dg * rho_fact
1220 w(i_praci) = qi * 0.25_rp * pi * eri * n0r * cr * gam_3dr * rlmdr_3dr * rho_fact
1223 w(i_psaci) = qi * 0.25_rp * pi * esi_mod * cs * moms_2ds * rho_fact
1226 w(i_pgaci) = qi * 0.25_rp * pi * egi * n0g * cg * gam_3dg * rlmdg_3dg * rho_fact
1229 w(i_piacr) = qi * ar / mi * 0.25_rp * pi * eri * n0r * cr * gam_6dr * rlmdr_6dr * rho_fact
1232 w(i_psacr) = ar * 0.25_rp * pi * rdens * esr * n0r * abs(vtr-vts) &
1233 * ( gam_1br * rlmdr_1br * moms_2 &
1234 + 2.0_rp * gam_2br * rlmdr_2br * moms_1 &
1235 + gam_3br * rlmdr_3br * moms_0 )
1238 w(i_pgacr) = ar * 0.25_rp * pi * rdens * egr * n0g * n0r * abs(vtg-vtr) &
1239 * ( gam_1br * rlmdr_1br * gam_3 * rlmdg_3 &
1240 + 2.0_rp * gam_2br * rlmdr_2br * gam_2 * rlmdg_2 &
1241 + gam_3br * rlmdr_3br * gam * rlmdg )
1244 w(i_pracs) = as * 0.25_rp * pi * rdens * esr * n0r * abs(vtr-vts) &
1245 * ( moms_0bs * gam_3 * rlmdr_3 &
1246 + 2.0_rp * moms_1bs * gam_2 * rlmdr_2 &
1247 + moms_2bs * gam * rlmdr )
1250 w(i_pgacs) = as * 0.25_rp * pi * rdens * egs_mod * n0g * abs(vtg-vts) &
1251 * ( moms_0bs * gam_3 * rlmdg_3 &
1252 + 2.0_rp * moms_1bs * gam_2 * rlmdg_2 &
1253 + moms_2bs * gam * rlmdg )
1257 rhoqc = dens * qc * 1000.0_rp
1258 dc = 0.146_rp - 5.964e-2_rp * log( nc(k,i,j) / 2000.0_rp )
1259 praut_berry = rdens * 1.67e-5_rp * rhoqc * rhoqc / ( 5.0_rp + 3.66e-2_rp * nc(k,i,j) / ( dc * rhoqc + eps ) )
1261 zerosw = 0.5_rp - sign(0.5_rp, qc - 1.e-12_rp )
1262 praut_kk = 1350.0_rp &
1263 * exp( log( qc+zerosw )*2.47_rp ) * ( 1.0_rp-zerosw ) &
1264 * exp( log( nc(k,i,j) )*(-1.79_rp) )
1267 w(i_praut) = ( 1.0_rp-sw_kk2000 ) * praut_berry &
1268 + ( sw_kk2000 ) * praut_kk
1271 betai = min( beta_saut, beta_saut * exp( gamma_saut * temc ) )
1272 w(i_psaut) = max( betai*(qi-qicrt_saut), 0.0_rp )
1275 betas = min( beta_gaut, beta_gaut * exp( gamma_gaut * temc ) )
1276 w(i_pgaut) = max( betas*(qs-qscrt_gaut), 0.0_rp )
1280 da = ( da0 + dda_dt * temc )
1281 kd = ( dw0 + ddw_dt * temc ) * pre00 / pres0(k,i,j)
1282 nu = ( mu0 + dmu_dt * temc ) * rdens
1284 glv = 1.0_rp / ( lhv0/(da*temp) * ( lhv0/(rvap*temp) - 1.0_rp ) + 1.0_rp/(kd*dens*qsatl(k,i,j)) )
1285 giv = 1.0_rp / ( lhs0/(da*temp) * ( lhs0/(rvap*temp) - 1.0_rp ) + 1.0_rp/(kd*dens*qsati(k,i,j)) )
1286 gil = 1.0_rp / ( lhf0/(da*temc) )
1289 ventr = f1r * gam_2 * rlmdr_2 + f2r * sqrt( cr * rho_fact / nu * rlmdr_5dr ) * gam_5dr_h
1291 w(i_prevp) = 2.0_rp * pi * rdens * n0r * ( 1.0_rp-min(sliq,1.0_rp) ) * glv * ventr
1294 rhoqi = max(dens*qi,eps)
1295 xni = min( max( 5.38e+7_rp * exp( log(rhoqi)*0.75_rp ), 1.e+3_rp ), 1.e+6_rp )
1297 di = min( di_a * sqrt(xmi), di_max )
1299 tmp = 4.0_rp * di * xni * rdens * ( sice-1.0_rp ) * giv
1301 w(i_pidep) = ( w(i_spsati) ) * ( tmp)
1302 w(i_pisub) = ( 1.0_rp-w(i_spsati) ) * (-tmp)
1305 sw = ( 0.5_rp - sign(0.5_rp, temc + 40.0_rp ) )
1307 w(i_pihom) = sw * qc / dt
1310 sw = ( 0.5_rp + sign(0.5_rp, temc + 40.0_rp ) ) &
1311 * ( 0.5_rp - sign(0.5_rp, temc ) )
1313 w(i_pihtr) = sw * ( dens / dwatr * qc**2 / ( nc_ihtr * 1.e+6_rp ) ) &
1314 * b_frz * ( exp(-a_frz*temc) - 1.0_rp )
1317 sw = ( 0.5_rp + sign(0.5_rp, temc ) )
1319 w(i_pimlt) = sw * qi / dt
1322 vents = f1s * moms_1 + f2s * sqrt( cs * rho_fact / nu ) * moms_5ds_h
1324 tmp = 2.0_rp * pi * rdens * ( sice-1.0_rp ) * giv * vents
1326 w(i_psdep) = ( w(i_spsati) ) * ( tmp)
1327 w(i_pssub) = ( 1.0_rp-w(i_spsati) ) * (-tmp)
1330 w(i_psmlt) = 2.0_rp * pi * rdens * gil * vents &
1331 + cl * temc / lhf0 * ( w(i_psacw) + w(i_psacr) )
1332 w(i_psmlt) = max( w(i_psmlt), 0.0_rp )
1335 ventg = f1g * gam_2 * rlmdg_2 + f2g * sqrt( cg * rho_fact / nu * rlmdg_5dg ) * gam_5dg_h
1337 tmp = 2.0_rp * pi * rdens * n0g * ( sice-1.0_rp ) * giv * ventg
1339 w(i_pgdep) = ( w(i_spsati) ) * ( tmp)
1340 w(i_pgsub) = ( 1.0_rp-w(i_spsati) ) * (-tmp)
1343 w(i_pgmlt) = 2.0_rp * pi * rdens * n0g * gil * ventg &
1344 + cl * temc / lhf0 * ( w(i_pgacw) + w(i_pgacr) )
1345 w(i_pgmlt) = max( w(i_pgmlt), 0.0_rp )
1348 w(i_pgfrz) = 2.0_rp * pi * rdens * n0r * 60.0_rp * b_frz * ar * ( exp(-a_frz*temc) - 1.0_rp ) * rlmdr_7
1351 dt1 = ( exp( log(mi50)*ma2(k,i,j) ) &
1352 - exp( log(mi40)*ma2(k,i,j) ) ) / ( a1(k,i,j) * ma2(k,i,j) )
1353 ni50 = qi * dt / ( mi50 * dt1 )
1355 w(i_psfw ) = ni50 * ( a1(k,i,j) * exp( log(mi50)*a2(k,i,j) ) &
1356 + pi * eiw * dens * qc * ri50*ri50 * vti50 )
1357 w(i_psfi ) = qi / dt1
1360 w(i_pigen) = min( w(i_pigen), w(i_dqv_dt) ) * ( w(i_iceflg) ) * sw_expice
1361 w(i_pidep) = min( w(i_pidep), w(i_dqv_dt) ) * ( w(i_iceflg) ) * sw_expice
1362 w(i_psdep) = min( w(i_psdep), w(i_dqv_dt) ) * ( w(i_iceflg) )
1363 w(i_pgdep) = min( w(i_pgdep), w(i_dqv_dt) ) * ( w(i_iceflg) )
1365 w(i_pracw) = w(i_pracw) &
1366 + w(i_psacw) * ( 1.0_rp-w(i_iceflg) ) &
1367 + w(i_pgacw) * ( 1.0_rp-w(i_iceflg) )
1369 w(i_praut) = min( w(i_praut), w(i_dqc_dt) )
1370 w(i_pracw) = min( w(i_pracw), w(i_dqc_dt) )
1371 w(i_pihom) = min( w(i_pihom), w(i_dqc_dt) ) * ( w(i_iceflg) ) * sw_expice
1372 w(i_pihtr) = min( w(i_pihtr), w(i_dqc_dt) ) * ( w(i_iceflg) ) * sw_expice
1373 w(i_psacw) = min( w(i_psacw), w(i_dqc_dt) ) * ( w(i_iceflg) )
1374 w(i_psfw ) = min( w(i_psfw ), w(i_dqc_dt) ) * ( w(i_iceflg) ) * sw_bergeron
1375 w(i_pgacw) = min( w(i_pgacw), w(i_dqc_dt) ) * ( w(i_iceflg) )
1377 w(i_prevp) = min( w(i_prevp), w(i_dqr_dt) )
1378 w(i_piacr) = min( w(i_piacr), w(i_dqr_dt) ) * ( w(i_iceflg) )
1379 w(i_psacr) = min( w(i_psacr), w(i_dqr_dt) ) * ( w(i_iceflg) )
1380 w(i_pgacr) = min( w(i_pgacr), w(i_dqr_dt) ) * ( w(i_iceflg) )
1381 w(i_pgfrz) = min( w(i_pgfrz), w(i_dqr_dt) ) * ( w(i_iceflg) )
1383 w(i_pisub) = min( w(i_pisub), w(i_dqi_dt) ) * ( w(i_iceflg) ) * sw_expice
1384 w(i_pimlt) = min( w(i_pimlt), w(i_dqi_dt) ) * ( 1.0_rp-w(i_iceflg) ) * sw_expice
1385 w(i_psaut) = min( w(i_psaut), w(i_dqi_dt) ) * ( w(i_iceflg) )
1386 w(i_praci) = min( w(i_praci), w(i_dqi_dt) ) * ( w(i_iceflg) )
1387 w(i_psaci) = min( w(i_psaci), w(i_dqi_dt) ) * ( w(i_iceflg) )
1388 w(i_psfi ) = min( w(i_psfi ), w(i_dqi_dt) ) * ( w(i_iceflg) ) * sw_bergeron
1389 w(i_pgaci) = min( w(i_pgaci), w(i_dqi_dt) ) * ( w(i_iceflg) )
1391 w(i_pssub) = min( w(i_pssub), w(i_dqs_dt) ) * ( w(i_iceflg) )
1392 w(i_psmlt) = min( w(i_psmlt), w(i_dqs_dt) ) * ( 1.0_rp-w(i_iceflg) )
1393 w(i_pgaut) = min( w(i_pgaut), w(i_dqs_dt) ) * ( w(i_iceflg) )
1394 w(i_pracs) = min( w(i_pracs), w(i_dqs_dt) ) * ( w(i_iceflg) )
1395 w(i_pgacs) = min( w(i_pgacs), w(i_dqs_dt) )
1397 w(i_pgsub) = min( w(i_pgsub), w(i_dqg_dt) ) * ( w(i_iceflg) )
1398 w(i_pgmlt) = min( w(i_pgmlt), w(i_dqg_dt) ) * ( 1.0_rp-w(i_iceflg) )
1400 w(i_piacr_s) = ( 1.0_rp - w(i_delta1) ) * w(i_piacr)
1401 w(i_piacr_g) = ( w(i_delta1) ) * w(i_piacr)
1402 w(i_praci_s) = ( 1.0_rp - w(i_delta1) ) * w(i_praci)
1403 w(i_praci_g) = ( w(i_delta1) ) * w(i_praci)
1404 w(i_psacr_s) = ( w(i_delta2) ) * w(i_psacr)
1405 w(i_psacr_g) = ( 1.0_rp - w(i_delta2) ) * w(i_psacr)
1406 w(i_pracs ) = ( 1.0_rp - w(i_delta2) ) * w(i_pracs)
1419 fac_sw = 0.5_rp + sign( 0.5_rp, net+eps )
1421 + ( 1.0_rp - fac_sw ) * min( -w(i_dqc_dt)/(net-fac_sw), 1.0_rp )
1423 w(i_pimlt ) = w(i_pimlt ) * fac
1424 w(i_praut ) = w(i_praut ) * fac
1425 w(i_pracw ) = w(i_pracw ) * fac
1426 w(i_pihom ) = w(i_pihom ) * fac
1427 w(i_pihtr ) = w(i_pihtr ) * fac
1428 w(i_psacw ) = w(i_psacw ) * fac
1429 w(i_psfw ) = w(i_psfw ) * fac
1430 w(i_pgacw ) = w(i_pgacw ) * fac
1447 fac_sw = 0.5_rp + sign( 0.5_rp, net+eps )
1449 + ( 1.0_rp - fac_sw ) * min( -w(i_dqi_dt)/(net-fac_sw), 1.0_rp )
1451 w(i_pigen ) = w(i_pigen ) * fac
1452 w(i_pidep ) = w(i_pidep ) * fac
1453 w(i_pihom ) = w(i_pihom ) * fac
1454 w(i_pihtr ) = w(i_pihtr ) * fac
1455 w(i_pisub ) = w(i_pisub ) * fac
1456 w(i_pimlt ) = w(i_pimlt ) * fac
1457 w(i_psaut ) = w(i_psaut ) * fac
1458 w(i_praci_s) = w(i_praci_s) * fac
1459 w(i_psaci ) = w(i_psaci ) * fac
1460 w(i_psfi ) = w(i_psfi ) * fac
1461 w(i_praci_g) = w(i_praci_g) * fac
1462 w(i_pgaci ) = w(i_pgaci ) * fac
1478 fac_sw = 0.5_rp + sign( 0.5_rp, net+eps )
1480 + ( 1.0_rp - fac_sw ) * min( -w(i_dqr_dt)/(net-fac_sw), 1.0_rp )
1482 w(i_praut ) = w(i_praut ) * fac
1483 w(i_pracw ) = w(i_pracw ) * fac
1484 w(i_psmlt ) = w(i_psmlt ) * fac
1485 w(i_pgmlt ) = w(i_pgmlt ) * fac
1486 w(i_prevp ) = w(i_prevp ) * fac
1487 w(i_piacr_s) = w(i_piacr_s) * fac
1488 w(i_psacr_s) = w(i_psacr_s) * fac
1489 w(i_piacr_g) = w(i_piacr_g) * fac
1490 w(i_psacr_g) = w(i_psacr_g) * fac
1491 w(i_pgacr ) = w(i_pgacr ) * fac
1492 w(i_pgfrz ) = w(i_pgfrz ) * fac
1505 fac_sw = 0.5_rp + sign( 0.5_rp, net+eps )
1507 + ( 1.0_rp - fac_sw ) * min( -w(i_dqv_dt)/(net-fac_sw), 1.0_rp )
1509 w(i_prevp ) = w(i_prevp ) * fac
1510 w(i_pisub ) = w(i_pisub ) * fac
1511 w(i_pssub ) = w(i_pssub ) * fac
1512 w(i_pgsub ) = w(i_pgsub ) * fac
1513 w(i_pigen ) = w(i_pigen ) * fac
1514 w(i_pidep ) = w(i_pidep ) * fac
1515 w(i_psdep ) = w(i_psdep ) * fac
1516 w(i_pgdep ) = w(i_pgdep ) * fac
1535 fac_sw = 0.5_rp + sign( 0.5_rp, net+eps )
1537 + ( 1.0_rp - fac_sw ) * min( -w(i_dqs_dt)/(net-fac_sw), 1.0_rp )
1539 w(i_psdep ) = w(i_psdep ) * fac
1540 w(i_psacw ) = w(i_psacw ) * fac
1541 w(i_psfw ) = w(i_psfw ) * fac
1542 w(i_piacr_s) = w(i_piacr_s) * fac
1543 w(i_psacr_s) = w(i_psacr_s) * fac
1544 w(i_psaut ) = w(i_psaut ) * fac
1545 w(i_praci_s) = w(i_praci_s) * fac
1546 w(i_psaci ) = w(i_psaci ) * fac
1547 w(i_psfi ) = w(i_psfi ) * fac
1548 w(i_pssub ) = w(i_pssub ) * fac
1549 w(i_psmlt ) = w(i_psmlt ) * fac
1550 w(i_pgaut ) = w(i_pgaut ) * fac
1551 w(i_pracs ) = w(i_pracs ) * fac
1552 w(i_pgacs ) = w(i_pgacs ) * fac
1570 fac_sw = 0.5_rp + sign( 0.5_rp, net+eps )
1572 + ( 1.0_rp - fac_sw ) * min( -w(i_dqg_dt)/(net-fac_sw), 1.0_rp )
1574 w(i_pgdep ) = w(i_pgdep ) * fac
1575 w(i_pgacw ) = w(i_pgacw ) * fac
1576 w(i_piacr_g) = w(i_piacr_g) * fac
1577 w(i_psacr_g) = w(i_psacr_g) * fac
1578 w(i_pgacr ) = w(i_pgacr ) * fac
1579 w(i_pgfrz ) = w(i_pgfrz ) * fac
1580 w(i_praci_g) = w(i_praci_g) * fac
1581 w(i_pgaci ) = w(i_pgaci ) * fac
1582 w(i_pgaut ) = w(i_pgaut ) * fac
1583 w(i_pracs ) = w(i_pracs ) * fac
1584 w(i_pgacs ) = w(i_pgacs ) * fac
1585 w(i_pgsub ) = w(i_pgsub ) * fac
1586 w(i_pgmlt ) = w(i_pgmlt ) * fac
1588 qc_t = + w(i_pimlt ) &
1597 qr_t = + w(i_praut ) &
1609 qi_t = + w(i_pigen ) &
1622 qs_t = + w(i_psdep ) &
1637 qg_t = + w(i_pgdep ) &
1651 qc_t = max( qc_t, -w(i_dqc_dt) )
1652 qr_t = max( qr_t, -w(i_dqr_dt) )
1653 qi_t = max( qi_t, -w(i_dqi_dt) )
1654 qs_t = max( qs_t, -w(i_dqs_dt) )
1655 qg_t = max( qg_t, -w(i_dqg_dt) )
1663 qtrc_t(k,i,j,i_qv) = qv_t
1664 qtrc_t(k,i,j,i_qc) = qc_t
1665 qtrc_t(k,i,j,i_qr) = qr_t
1666 qtrc_t(k,i,j,i_qi) = qi_t
1667 qtrc_t(k,i,j,i_qs) = qs_t
1668 qtrc_t(k,i,j,i_qg) = qg_t
1670 qtrc0(k,i,j,i_qv) = qtrc0(k,i,j,i_qv) + qtrc_t(k,i,j,i_qv) * dt
1671 qtrc0(k,i,j,i_qc) = qtrc0(k,i,j,i_qc) + qtrc_t(k,i,j,i_qc) * dt
1672 qtrc0(k,i,j,i_qr) = qtrc0(k,i,j,i_qr) + qtrc_t(k,i,j,i_qr) * dt
1673 qtrc0(k,i,j,i_qi) = qtrc0(k,i,j,i_qi) + qtrc_t(k,i,j,i_qi) * dt
1674 qtrc0(k,i,j,i_qs) = qtrc0(k,i,j,i_qs) + qtrc_t(k,i,j,i_qs) * dt
1675 qtrc0(k,i,j,i_qg) = qtrc0(k,i,j,i_qg) + qtrc_t(k,i,j,i_qg) * dt
1678 w3d(k,i,j,ip) = w(ip)
1689 rhoe_t(k,i,j) = - dens0(k,i,j) * (
lhv * qtrc_t(k,i,j,i_qv) &
1690 -
lhf * qtrc_t(k,i,j,i_qi) &
1691 -
lhf * qtrc_t(k,i,j,i_qs) &
1692 -
lhf * qtrc_t(k,i,j,i_qg) )
1694 rhoe0(k,i,j) = rhoe0(k,i,j) + rhoe_t(k,i,j) * dt
1700 call hist_in( w3d(:,:,:,ip), w_name(ip),
'individual tendency term in tomita08',
'kg/kg/s' )
1706 end subroutine mp_tomita08
1710 subroutine mp_tomita08_vterm( &
1721 real(RP),
intent(out) :: vterm(
ka,
ia,
ja,qa_mp-1)
1722 real(RP),
intent(in) :: dens0(
ka,
ia,
ja)
1723 real(RP),
intent(in) :: temp0(
ka,
ia,
ja)
1724 real(RP),
intent(in) :: qtrc0(
ka,
ia,
ja,
qa)
1728 real(RP) :: qv, qc, qr, qi, qs, qg
1730 real(RP) :: rho_fact
1732 real(RP) :: n0r, n0s, n0g
1733 real(RP) :: rlmdr, rlmds, rlmdg
1734 real(RP) :: rlmdr_dr, rlmds_ds, rlmdg_dg
1737 real(RP) :: tems, xs2
1738 real(RP) :: moms_0bs, rmoms_vt
1739 real(RP) :: coef_at(4), coef_bt(4)
1740 real(RP) :: loga_, b_, nm
1746 #ifndef __GFORTRAN__ 1767 temc = temp0(k,i,j) - tem00
1768 qv = qtrc0(k,i,j,
i_qv)
1769 qc = qtrc0(k,i,j,
i_qc)
1770 qr = qtrc0(k,i,j,
i_qr)
1771 qi = qtrc0(k,i,j,
i_qi)
1772 qs = qtrc0(k,i,j,
i_qs)
1773 qg = qtrc0(k,i,j,
i_qg)
1775 rho_fact = sqrt( dens00 / dens )
1778 n0r = ( 1.0_rp-sw_wdxz2014 ) * n0r_def &
1779 + ( sw_wdxz2014 ) * 1.16e+5_rp * exp( log( max( dens*qr*1000.0_rp, 1.e-2_rp ) )*0.477_rp )
1780 n0s = ( 1.0_rp-sw_wdxz2014 ) * n0s_def &
1781 + ( sw_wdxz2014 ) * 4.58e+9_rp * exp( log( max( dens*qs*1000.0_rp, 1.e-2_rp ) )*0.788_rp )
1782 n0g = ( 1.0_rp-sw_wdxz2014 ) * n0g_def &
1783 + ( sw_wdxz2014 ) * 9.74e+8_rp * exp( log( max( dens*qg*1000.0_rp, 1.e-2_rp ) )*0.816_rp )
1786 zerosw = 0.5_rp - sign(0.5_rp, qr - 1.e-12_rp )
1787 rlmdr = sqrt(sqrt( dens * qr / ( ar * n0r * gam_1br ) + zerosw )) * ( 1.0_rp-zerosw )
1789 rlmdr_dr = sqrt( rlmdr )
1792 zerosw = 0.5_rp - sign(0.5_rp, qs - 1.e-12_rp )
1793 rlmds = sqrt(sqrt( dens * qs / ( as * n0s * gam_1bs ) + zerosw )) * ( 1.0_rp-zerosw )
1795 rlmds_ds = sqrt( sqrt(rlmds) )
1796 rmoms_vt = gam_1bsds / gam_1bs * rlmds_ds
1800 zerosw = 0.5_rp - sign(0.5_rp, dens * qs - 1.e-12_rp )
1801 xs2 = dens * qs / as
1803 tems = min( -0.1_rp, temc )
1804 coef_at(1) = coef_a( 1) + tems * ( coef_a( 2) + tems * ( coef_a( 5) + tems * coef_a( 9) ) )
1805 coef_at(2) = coef_a( 3) + tems * ( coef_a( 4) + tems * coef_a( 7) )
1806 coef_at(3) = coef_a( 6) + tems * coef_a( 8)
1807 coef_at(4) = coef_a(10)
1808 coef_bt(1) = coef_b( 1) + tems * ( coef_b( 2) + tems * ( coef_b( 5) + tems * coef_b( 9) ) )
1809 coef_bt(2) = coef_b( 3) + tems * ( coef_b( 4) + tems * coef_b( 7) )
1810 coef_bt(3) = coef_b( 6) + tems * coef_b( 8)
1811 coef_bt(4) = coef_b(10)
1814 loga_ = coef_at(1) + nm * ( coef_at(2) + nm * ( coef_at(3) + nm * coef_at(4) ) )
1815 b_ = coef_bt(1) + nm * ( coef_bt(2) + nm * ( coef_bt(3) + nm * coef_bt(4) ) )
1816 moms_0bs = exp(ln10*loga_) * exp(log(xs2+zerosw)*b_) * ( 1.0_rp-zerosw )
1819 loga_ = coef_at(1) + nm * ( coef_at(2) + nm * ( coef_at(3) + nm * coef_at(4) ) )
1820 b_ = coef_bt(1) + nm * ( coef_bt(2) + nm * ( coef_bt(3) + nm * coef_bt(4) ) )
1821 rmoms_vt = ( sw_rs2014 ) * exp(ln10*loga_) * exp(log(xs2+zerosw)*b_) * ( 1.0_rp-zerosw ) / ( moms_0bs + zerosw ) &
1822 + ( 1.0_rp-sw_rs2014 ) * rmoms_vt
1825 zerosw = 0.5_rp - sign(0.5_rp, qg - 1.e-12_rp )
1826 rlmdg = sqrt(sqrt( dens * qg / ( ag * n0g * gam_1bg ) + zerosw )) * ( 1.0_rp-zerosw )
1828 rlmdg_dg = sqrt( rlmdg )
1831 vterm(k,i,j,i_mp_qc) = 0.0_rp
1832 zerosw = 0.5_rp - sign(0.5_rp, qi - 1.e-8_rp )
1833 vterm(k,i,j,i_mp_qi) = -3.29_rp * exp( log( dens*qi+zerosw )*0.16_rp ) * ( 1.0_rp-zerosw )
1834 vterm(k,i,j,i_mp_qr) = -cr * rho_fact * gam_1brdr / gam_1br * rlmdr_dr
1835 vterm(k,i,j,i_mp_qs) = -cs * rho_fact * rmoms_vt
1836 vterm(k,i,j,i_mp_qg) = -cg * rho_fact * gam_1bgdg / gam_1bg * rlmdg_dg
1841 if ( nofall_qr )
then 1845 vterm(k,i,j,i_mp_qr) = 0.0_rp
1851 if ( nofall_qi )
then 1855 vterm(k,i,j,i_mp_qi) = 0.0_rp
1861 if ( nofall_qs )
then 1865 vterm(k,i,j,i_mp_qs) = 0.0_rp
1871 if ( nofall_qg )
then 1875 vterm(k,i,j,i_mp_qg) = 0.0_rp
1883 vterm( 1:
ks-1,i,j,:) = 0.0_rp
1884 vterm(
ke+1:
ka ,i,j,:) = 0.0_rp
1889 end subroutine mp_tomita08_vterm
1892 subroutine mp_tomita08_bergeronparam( &
1901 real(RP),
intent(in) :: temp(
ka,
ia,
ja)
1902 real(RP),
intent(out) :: a1 (
ka,
ia,
ja)
1903 real(RP),
intent(out) :: a2 (
ka,
ia,
ja)
1904 real(RP),
intent(out) :: ma2 (
ka,
ia,
ja)
1906 real(RP) :: a1_tab(32)
1907 real(RP) :: a2_tab(32)
1909 data a1_tab / 0.0001e-7_rp, 0.7939e-7_rp, 0.7841e-6_rp, 0.3369e-5_rp, 0.4336e-5_rp, &
1910 0.5285e-5_rp, 0.3728e-5_rp, 0.1852e-5_rp, 0.2991e-6_rp, 0.4248e-6_rp, &
1911 0.7434e-6_rp, 0.1812e-5_rp, 0.4394e-5_rp, 0.9145e-5_rp, 0.1725e-4_rp, &
1912 0.3348e-4_rp, 0.1725e-4_rp, 0.9175e-5_rp, 0.4412e-5_rp, 0.2252e-5_rp, &
1913 0.9115e-6_rp, 0.4876e-6_rp, 0.3473e-6_rp, 0.4758e-6_rp, 0.6306e-6_rp, &
1914 0.8573e-6_rp, 0.7868e-6_rp, 0.7192e-6_rp, 0.6513e-6_rp, 0.5956e-6_rp, &
1915 0.5333e-6_rp, 0.4834e-6_rp /
1917 data a2_tab / 0.0100_rp, 0.4006_rp, 0.4831_rp, 0.5320_rp, 0.5307_rp, &
1918 0.5319_rp, 0.5249_rp, 0.4888_rp, 0.3849_rp, 0.4047_rp, &
1919 0.4318_rp, 0.4771_rp, 0.5183_rp, 0.5463_rp, 0.5651_rp, &
1920 0.5813_rp, 0.5655_rp, 0.5478_rp, 0.5203_rp, 0.4906_rp, &
1921 0.4447_rp, 0.4126_rp, 0.3960_rp, 0.4149_rp, 0.4320_rp, &
1922 0.4506_rp, 0.4483_rp, 0.4460_rp, 0.4433_rp, 0.4413_rp, &
1923 0.4382_rp, 0.4361_rp /
1938 temc = min( max( temp(k,i,j)-tem00, -30.99_rp ), 0.0_rp )
1939 itemc = int( -temc ) + 1
1940 fact = - ( temc +
real(itemc-1,kind=8) )
1942 a1(k,i,j) = ( 1.0_rp-fact ) * a1_tab(itemc ) &
1943 + ( fact ) * a1_tab(itemc+1)
1945 a2(k,i,j) = ( 1.0_rp-fact ) * a2_tab(itemc ) &
1946 + ( fact ) * a2_tab(itemc+1)
1948 ma2(k,i,j) = 1.0_rp - a2(k,i,j)
1950 a1(k,i,j) = a1(k,i,j) * exp( log(1.e-3_rp)*ma2(k,i,j) )
1956 end subroutine mp_tomita08_bergeronparam
1969 real(RP),
intent(out) :: cldfrac(
ka,
ia,
ja)
1970 real(RP),
intent(in) :: qtrc (
ka,
ia,
ja,
qa)
1971 real(RP),
intent(in) :: mask_criterion
1974 integer :: k, i, j, iq
1981 do iq = qs_mp+1, qe_mp
1982 qhydro = qhydro + qtrc(k,i,j,iq)
1984 cldfrac(k,i,j) = 0.5_rp + sign(0.5_rp,qhydro-mask_criterion)
2012 real(RP),
intent(in) :: qtrc0(
ka,
ia,
ja,
qa)
2013 real(RP),
intent(in) :: dens0(
ka,
ia,
ja)
2014 real(RP),
intent(in) :: temp0(
ka,
ia,
ja)
2018 real(RP) :: qc, qr, qs, qg
2020 real(RP) :: n0r, n0s, n0g
2021 real(RP) :: rlmdr, rlmds, rlmdg
2023 real(RP),
parameter :: um2cm = 100.0_rp
2026 real(RP) :: tems, xs2
2027 real(RP) :: coef_at(4), coef_bt(4)
2028 real(RP) :: loga_, b_, nm
2034 re(:,:,:,i_hi) = re_qi * um2cm
2035 re(:,:,:,i_hg+1:) = 0.0_rp
2037 if ( const_rec .or. fixed_re )
then 2039 re(:,:,:,i_hc) = re_qc * um2cm
2043 if ( mp_couple_aerosol )
then 2048 nc(k,i,j) = nc_def(i,j) * 1.e+6_rp
2056 nc(k,i,j) = nc_def(i,j) * 1.e+6_rp
2066 qc = qtrc0(k,i,j,i_qc)
2068 re(k,i,j,i_hc) = 1.1_rp * ( dens * qc / nc(k,i,j) / ( 4.0_rp / 3.0_rp * pi * dens_w ) )**(1.0_rp/3.0_rp)
2069 re(k,i,j,i_hc) = min( 1.e-3_rp, max( 1.e-6_rp, re(k,i,j,i_hc) ) ) * um2cm
2076 if ( fixed_re )
then 2078 re(:,:,:,i_hr) = 10000.e-6_rp * um2cm
2079 re(:,:,:,i_hs) = re_qi * um2cm
2080 re(:,:,:,i_hg) = re_qi * um2cm
2084 #ifndef __GFORTRAN__ 2102 temc = temp0(k,i,j) - tem00
2103 qr = qtrc0(k,i,j,i_qr)
2104 qs = qtrc0(k,i,j,i_qs)
2105 qg = qtrc0(k,i,j,i_qg)
2108 n0r = ( 1.0_rp-sw_wdxz2014 ) * n0r_def &
2109 + ( sw_wdxz2014 ) * 1.16e+5_rp * exp( log( max( dens*qr*1000.0_rp, 1.e-2_rp ) )*0.477_rp )
2110 n0s = ( 1.0_rp-sw_wdxz2014 ) * n0s_def &
2111 + ( sw_wdxz2014 ) * 4.58e+9_rp * exp( log( max( dens*qs*1000.0_rp, 1.e-2_rp ) )*0.788_rp )
2112 n0g = ( 1.0_rp-sw_wdxz2014 ) * n0g_def &
2113 + ( sw_wdxz2014 ) * 9.74e+8_rp * exp( log( max( dens*qg*1000.0_rp, 1.e-2_rp ) )*0.816_rp )
2116 zerosw = 0.5_rp - sign(0.5_rp, qr - 1.e-12_rp )
2117 rlmdr = sqrt(sqrt( dens * qr / ( ar * n0r * gam_1br ) + zerosw )) * ( 1.0_rp-zerosw )
2119 re(k,i,j,i_hr) = 1.5_rp * rlmdr * um2cm
2122 zerosw = 0.5_rp - sign(0.5_rp, qs - 1.e-12_rp )
2123 rlmds = sqrt(sqrt( dens * qs / ( as * n0s * gam_1bs ) + zerosw )) * ( 1.0_rp-zerosw )
2126 zerosw = 0.5_rp - sign(0.5_rp, dens * qs - 1.e-12_rp )
2127 xs2 = dens * qs / as
2129 tems = min( -0.1_rp, temc )
2130 coef_at(1) = coef_a( 1) + tems * ( coef_a( 2) + tems * ( coef_a( 5) + tems * coef_a( 9) ) )
2131 coef_at(2) = coef_a( 3) + tems * ( coef_a( 4) + tems * coef_a( 7) )
2132 coef_at(3) = coef_a( 6) + tems * coef_a( 8)
2133 coef_at(4) = coef_a(10)
2134 coef_bt(1) = coef_b( 1) + tems * ( coef_b( 2) + tems * ( coef_b( 5) + tems * coef_b( 9) ) )
2135 coef_bt(2) = coef_b( 3) + tems * ( coef_b( 4) + tems * coef_b( 7) )
2136 coef_bt(3) = coef_b( 6) + tems * coef_b( 8)
2137 coef_bt(4) = coef_b(10)
2141 loga_ = coef_at(1) + nm * ( coef_at(2) + nm * ( coef_at(3) + nm * coef_at(4) ) )
2142 b_ = coef_bt(1) + nm * ( coef_bt(2) + nm * ( coef_bt(3) + nm * coef_bt(4) ) )
2144 re(k,i,j,i_hs) = ( sw_rs2014 ) * 0.5_rp * exp(ln10*loga_) * exp(log(xs2+zerosw)*b_) * ( 1.0_rp-zerosw ) / ( xs2+zerosw ) * um2cm &
2145 + ( 1.0_rp-sw_rs2014 ) * 1.5_rp * rlmds * um2cm
2148 zerosw = 0.5_rp - sign(0.5_rp, qg - 1.e-12_rp )
2149 rlmdg = sqrt(sqrt( dens * qg / ( ag * n0g * gam_1bg ) + zerosw )) * ( 1.0_rp-zerosw )
2150 re(k,i,j,i_hg) = 1.5_rp * rlmdg * um2cm
2174 real(RP),
intent(in) :: qtrc0(
ka,
ia,
ja,
qa)
2177 qe(:,:,:,i_hc) = qtrc0(:,:,:,i_qc)
2178 qe(:,:,:,i_hr) = qtrc0(:,:,:,i_qr)
2179 qe(:,:,:,i_hi) = qtrc0(:,:,:,i_qi)
2180 qe(:,:,:,i_hs) = qtrc0(:,:,:,i_qs)
2181 qe(:,:,:,i_hg) = qtrc0(:,:,:,i_qg)
2182 qe(:,:,:,i_hg+1:) = 0.0_rp
integer, public is
start point of inner domain: x, local
integer, public je
end point of inner domain: y, local
module ATMOSPHERE / Saturation adjustment
subroutine, public prc_mpistop
Abort MPI.
real(rp), parameter, public const_dwatr
density of water [kg/m3]
subroutine, public atmos_phy_mp_negative_fixer(DENS, RHOT, QTRC, I_QV, limit_negative)
Negative fixer.
real(rp), dimension(qa_max), public tracer_r
real(dp), public time_dtsec_atmos_phy_mp
time interval of physics(microphysics) [sec]
subroutine, public atmos_phy_mp_tomita08_config(MP_TYPE, QA, QS)
Config.
logical, public io_l
output log or not? (this process)
integer, parameter, public i_hs
snow
real(rp) function, public sf_gamma(x)
Gamma function.
real(rp), parameter, public const_cl
specific heat (liquid water) [J/kg/K]
integer, parameter, public i_hr
liquid water rain
integer, parameter, public i_hi
ice water cloud
integer, public ke
end point of inner domain: z, local
character(len=h_short), dimension(qa_mp), target, public atmos_phy_mp_tomita08_unit
real(rp), parameter, public const_tem00
temperature reference (0C) [K]
subroutine, public atmos_phy_mp_tomita08_mixingratio(Qe, QTRC0)
Calculate mixing ratio of each category.
real(rp), public const_lhf0
latent heat of fusion at 0C [J/kg]
real(rp), parameter, public const_dice
density of ice [kg/m3]
real(rp), dimension(qa_max), public tracer_cv
real(rp), public const_undef
character(len=h_short), dimension(qa_mp), target, public atmos_phy_mp_tomita08_name
real(rp), parameter, public const_lhs0
latent heat of sublimation at 0C [J/kg]
module ATMOSPHERE / Physics Cloud Microphysics - Common
logical, public io_nml
output log or not? (for namelist, this process)
integer, public ia
of whole cells: x, local, with HALO
subroutine, public atmos_phy_mp_saturation_adjustment(RHOE_t, QTRC_t, RHOE0, QTRC0, DENS0, I_QV, I_QC, I_QI, flag_liquid)
Saturation adjustment.
integer, public ka
of whole cells: z, local, with HALO
real(rp), parameter, public const_lhv0
latent heat of vaporizaion at 0C [J/kg]
real(rp), public const_pre00
pressure reference [Pa]
real(rp), public const_grav
standard acceleration of gravity [m/s2]
integer, public js
start point of inner domain: y, local
real(rp), public lhf
latent heat of fusion for use [J/kg]
real(rp), parameter, public const_rvap
specific gas constant (water vapor) [J/kg/K]
real(rp), public lhv
latent heat of vaporization for use [J/kg]
integer, parameter, public i_hc
liquid water cloud
integer, public ks
start point of inner domain: z, local
real(rp), dimension(n_hyd), target, public atmos_phy_mp_tomita08_dens
subroutine, public prof_rapstart(rapname_base, level)
Start raptime.
subroutine, public atmos_phy_mp_tomita08(DENS, MOMZ, MOMX, MOMY, RHOT, QTRC, CCN, EVAPORATE, SFLX_rain, SFLX_snow)
Cloud Microphysics.
integer, public ie
end point of inner domain: x, local
real(rp), public const_eps
small number
module ATMOSPHERE / Thermodynamics
subroutine, public atmos_phy_mp_tomita08_cloudfraction(cldfrac, QTRC, mask_criterion)
Calculate Cloud Fraction.
subroutine, public atmos_phy_mp_tomita08_setup
Setup.
real(rp), dimension(:), allocatable, public grid_cdz
z-length of control volume [m]
subroutine, public atmos_hydrometeor_regist(Q0, NV, NL, NI, NAME, DESC, UNIT, ADVC)
Regist tracer.
real(rp), public const_pi
pi
subroutine, public atmos_phy_mp_precipitation(QA_MP, QS_MP, qflx, vterm, DENS, MOMZ, MOMX, MOMY, RHOE, QTRC, temp, CVq, dt, vt_fixed)
precipitation transport
character(len=h_mid), dimension(qa_mp), target, public atmos_phy_mp_tomita08_desc
integer, public io_fid_conf
Config file ID.
integer, public io_fid_log
Log file ID.
integer, parameter, public n_hyd
module ATMOSPHERE / Physics Cloud Microphysics
subroutine, public prof_rapend(rapname_base, level)
Save raptime.
integer, parameter, public rp
integer, parameter, public i_hg
graupel
integer, public io_fid_nml
Log file ID (only for output namelist)
real(rp), dimension(qa_max), public tracer_mass
subroutine, public atmos_phy_mp_tomita08_effectiveradius(Re, QTRC0, DENS0, TEMP0)
Calculate Effective Radius.
integer, public ja
of whole cells: y, local, with HALO