Go to the documentation of this file.
38 subroutine qhyd2qtrc( &
39 KA, KS, KE, IA, IS, IE, JA, JS, JE, &
46 integer,
intent(in) :: KA, KS, KE
47 integer,
intent(in) :: IA, IS, IE
48 integer,
intent(in) :: JA, JS, JE
49 real(RP),
intent(in) :: QV(KA,IA,JA)
50 real(RP),
intent(in) :: QHYD(KA,IA,JA,N_HYD)
51 real(RP),
intent(out) :: QTRC(KA,IA,JA,QA_MP)
52 real(RP),
intent(in),
optional :: QNUM(KA,IA,JA,N_HYD)
53 end subroutine qhyd2qtrc
54 end interface abstract
70 logical,
private :: mp_do_precipitation
71 logical,
private :: mp_do_negative_fixer
72 real(
rp),
private :: mp_limit_negative
73 integer,
private :: mp_ntmax_sedimentation
74 real(
rp),
private :: mp_max_term_vel
75 real(
rp),
private :: mp_cldfrac_thleshold
76 integer,
private :: mp_nstep_sedimentation
77 real(
rp),
private :: mp_rnstep_sedimentation
78 real(
rp),
private :: mp_dtsec_sedimentation
80 integer,
private,
allocatable :: hist_hyd_id(:)
81 integer,
private,
allocatable :: hist_crg_id(:)
83 integer,
private,
allocatable :: hist_vterm_id(:)
84 integer,
private :: hist_nf_rhoh_id
85 integer,
private :: hist_nf_dens_id
86 integer,
private :: hist_nf_engi_id
87 integer,
private :: monit_nf_mass_id
88 integer,
private :: monit_nf_engi_id
144 log_info(
"ATMOS_PHY_MP_driver_tracer_setup",*)
'Setup'
158 log_error(
"ATMOS_PHY_MP_driver_tracer_setup",*)
'ATMOS_PHY_MP_TYPE is invalud for Lightning: ', trim(
atmos_phy_mp_type)
159 log_error(
"ATMOS_PHY_MP_driver_tracer_setup",*)
'ATMOS_PHY_MP_TYPE is should be TOMITA08 or SN14 or SUZUKI10 for Lightning: '
209 log_error(
"ATMOS_PHY_MP_driver_tracer_setup",*)
'ATMOS_PHY_MP_TYPE is invalud: ', trim(
atmos_phy_mp_type)
265 namelist / param_atmos_phy_mp / &
266 mp_do_precipitation, &
267 mp_do_negative_fixer, &
269 mp_ntmax_sedimentation, &
273 character(len=H_SHORT) :: w_name(
n_hyd)
274 character(len=H_MID) :: w_longname(
n_hyd)
275 character(len=H_SHORT) :: w_unit(
n_hyd)
276 data w_name /
'QC', &
283 'Ratio of Cloud Water mass to total mass', &
284 'Ratio of Rain Water mass to total mass', &
285 'Ratio of Ice Water mass to total mass', &
286 'Ratio of Snow Water mass to total mass', &
287 'Ratio of Graupel Water mass to total mass', &
288 'Ratio of Hail Water mass to total mass' /
297 character(len=H_SHORT) :: w_crg_name(
n_hyd)
298 character(len=H_MID) :: w_crg_longname(
n_hyd)
299 character(len=H_SHORT) :: w_crg_unit(
n_hyd)
300 data w_crg_name /
'QCRG_C', &
306 data w_crg_longname / &
307 'Ratio of charge density of Cloud Water', &
308 'Ratio of charge density of Rain Water', &
309 'Ratio of charge density of Ice', &
310 'Ratio of charge density of Snow', &
311 'Ratio of charge density of Graupel', &
312 'Ratio of charge density of Hail' /
330 log_info(
"ATMOS_PHY_MP_driver_setup",*)
'Setup'
334 mp_cldfrac_thleshold = eps
336 mp_do_precipitation = .true.
337 mp_do_negative_fixer = .true.
338 mp_limit_negative = 0.1_rp
339 mp_ntmax_sedimentation = 1
340 mp_max_term_vel = 10.0_rp
344 read(
io_fid_conf,nml=param_atmos_phy_mp,iostat=ierr)
346 log_info(
"ATMOS_PHY_MP_driver_setup",*)
'Not found namelist. Default used.'
347 elseif( ierr > 0 )
then
348 log_error(
"ATMOS_PHY_MP_driver_setup",*)
'Not appropriate names in namelist PARAM_ATMOS_PHY_MP. Check!'
351 log_nml(param_atmos_phy_mp)
354 mp_ntmax_sedimentation = max( mp_ntmax_sedimentation, nstep_max )
356 mp_nstep_sedimentation = mp_ntmax_sedimentation
357 mp_rnstep_sedimentation = 1.0_rp / real(mp_ntmax_sedimentation,kind=
rp)
360 atmos_phy_mp_cldfrac_thleshold = mp_cldfrac_thleshold
363 log_info(
"ATMOS_PHY_MP_driver_setup",*)
'Enable negative fixer? : ', mp_do_negative_fixer
364 log_info(
"ATMOS_PHY_MP_driver_setup",*)
'Value limit of negative fixer (abs) : ', abs(mp_limit_negative)
365 log_info(
"ATMOS_PHY_MP_driver_setup",*)
'Enable sedimentation (precipitation)? : ', mp_do_precipitation
366 log_info(
"ATMOS_PHY_MP_driver_setup",*)
'Timestep of sedimentation is divided into : ', mp_ntmax_sedimentation,
'step'
367 log_info(
"ATMOS_PHY_MP_driver_setup",*)
'DT of sedimentation : ', mp_dtsec_sedimentation,
'[s]'
383 allocate( hist_hyd_id(
n_hyd) )
389 allocate( hist_crg_id(
n_hyd) )
391 call file_history_reg( w_crg_name(iq), w_crg_longname(iq), w_crg_unit(iq), &
398 if ( mp_do_precipitation )
then
408 sflx_rain(:,:) = 0.0_rp
411 sflx_snow(:,:) = 0.0_rp
414 sflx_engi(:,:) = 0.0_rp
420 if ( mp_do_negative_fixer )
then
421 call file_history_reg(
"RHOH_MP_NF",
"latent heat by the negative fixer",
"J/m3/s", &
423 call file_history_reg(
"DENS_t_MP_NF",
"vapor supply by the negative fixer",
"kg/m3/s", &
425 call file_history_reg(
"ENGI_t_MP_NF",
"internal energy supply by the negative fixer",
"J/m3/s", &
427 call monitor_reg(
"QTOTTND_NF",
"vapor supply by the negative fixer",
"kg", &
430 call monitor_reg(
"ENGITND_NF",
"internal energy supply by the negative fixer",
"J", &
434 call monitor_put( monit_nf_mass_id, zero(:,:,:) )
435 call monitor_put( monit_nf_engi_id, zero(:,:,:) )
440 log_info(
"ATMOS_PHY_MP_driver_setup",*)
'this component is never called.'
441 log_info(
"ATMOS_PHY_MP_driver_setup",*)
'SFLX_rain and SFLX_snow is set to zero.'
443 sflx_rain(:,:) = 0.0_rp
446 sflx_snow(:,:) = 0.0_rp
449 sflx_engi(:,:) = 0.0_rp
473 log_info(
"ATMOS_PHY_MP_driver_finalize",*)
'Finalize'
487 if (
allocated(hist_hyd_id) )
deallocate( hist_hyd_id )
488 if (
allocated(hist_crg_id) )
deallocate( hist_crg_id )
489 if (
allocated(hist_vterm_id) )
deallocate( hist_vterm_id )
519 file_history_query, &
529 logical :: do_put_rhoh
530 logical :: do_put_dens
531 logical :: do_put_engi
533 integer ::
k, i, j, iq
539 call file_history_query( hist_nf_rhoh_id, do_put_rhoh )
540 call file_history_query( hist_nf_dens_id, do_put_dens )
541 call file_history_query( hist_nf_engi_id, do_put_engi )
543 if ( monit_nf_mass_id > 0 .or. monit_nf_engi_id > 0 .or. &
544 do_put_rhoh .or. do_put_dens .or. do_put_engi )
then
546 ka,
ks,
ke,
ia,
is,
ie,
ja,
js,
je,
qla,
qia, &
552 dens_diff = dens_d, engi_diff = engi_d )
555 ka,
ks,
ke,
ia,
is,
ie,
ja,
js,
je,
qla,
qia, &
571 rhot(
k,i,j) = pre00 / rtot * (
dens(
k,i,j) *
temp(
k,i,j) * rtot / pre00 )**(
cvtot(
k,i,j) /
cptot(
k,i,j) )
585 qtrc(
k,i,j,iq) = max(
qtrc(
k,i,j,iq), 0.0_rp )
594 if ( do_put_rhoh )
then
600 rhoh(
k,i,j) = rhoh(
k,i,j) / dt
606 call file_history_put( hist_nf_rhoh_id, rhoh(:,:,:) )
608 if ( monit_nf_mass_id > 0 .or. do_put_dens )
then
614 dens_d(
k,i,j) = dens_d(
k,i,j) / dt
620 call file_history_put( hist_nf_dens_id, dens_d(:,:,:) )
621 call monitor_put( monit_nf_mass_id, dens_d(:,:,:) )
623 if ( monit_nf_engi_id > 0 .or. do_put_engi )
then
629 engi_d(
k,i,j) = engi_d(
k,i,j) / dt
635 call file_history_put( hist_nf_engi_id, engi_d(:,:,:) )
636 call monitor_put( monit_nf_engi_id, engi_d(:,:,:) )
672 file_history_query, &
708 file_history_query, &
742 rhou_t_mp => atmos_phy_mp_rhou_t, &
743 rhov_t_mp => atmos_phy_mp_rhov_t, &
744 rhoq_t_mp => atmos_phy_mp_rhoq_t, &
745 rhoc_t_mp => atmos_phy_mp_rhoc_t, &
746 rhoh_mp => atmos_phy_mp_rhoh, &
747 evaporate => atmos_phy_mp_evaporate, &
748 sflx_rain => atmos_phy_mp_sflx_rain, &
749 sflx_snow => atmos_phy_mp_sflx_snow, &
750 sflx_engi => atmos_phy_mp_sflx_engi
763 logical,
intent(in) :: update_flag
773 real(
rp) :: flx_hydro(
ka)
774 real(
rp) :: dens2 (
ka)
775 real(
rp) :: temp2 (
ka)
776 real(
rp) :: pres2 (
ka)
777 real(
rp) :: cptot2 (
ka)
778 real(
rp) :: cvtot2 (
ka)
779 real(
rp) :: rhoe (
ka)
780 real(
rp) :: rhoe2 (
ka)
783 real(
rp) :: mflux (
ka)
784 real(
rp) :: sflux (2)
793 real(
rp) :: cp_t, cv_t
795 real(
rp) :: precip (
ia,
ja)
798 logical :: hist_sw(
n_hyd)
800 logical :: hist_crg_sw(
n_hyd)
803 real(
rp),
allocatable :: vterm_hist(:,:,:,:)
808 integer ::
k, i, j, iq
813 real(
rp) :: mflux_crg(
ka), sflux_crg(2), eflux_crg
830 if ( update_flag )
then
833 ccn(:,:,:) = ccn_t(:,:,:) * dt_mp
841 temp1(:,:,:) = temp(:,:,:)
845 cvtot1(:,:,:) = cvtot(:,:,:)
847 cptot1(:,:,:) = cptot(:,:,:)
854 dens(:,:,:), pres(:,:,:), dt_mp, &
855 temp1(:,:,:), qtrc1(:,:,:,
qs_mp:
qe_mp), cptot1(:,:,:), cvtot1(:,:,:), &
856 rhoe_t(:,:,:), evaporate(:,:,:) )
865 rhoq_t_mp(
k,i,j,iq) = ( qtrc1(
k,i,j,iq) -
qtrc(
k,i,j,iq) ) *
dens(
k,i,j) / dt_mp
877 cptot_t(
k,i,j) = ( cptot1(
k,i,j) - cptot(
k,i,j) ) / dt_mp
878 cvtot_t(
k,i,j) = ( cvtot1(
k,i,j) - cvtot(
k,i,j) ) / dt_mp
892 temp1(
k,i,j) = temp(
k,i,j)
905 qtrc1(
k,i,j,iq) =
qtrc(
k,i,j,iq)
918 cvtot1(
k,i,j) = cvtot(
k,i,j)
929 cptot1(
k,i,j) = cptot(
k,i,j)
946 qtrc1_crg(
k,i,j,iq) =
qtrc(
k,i,j,iq)
956 temp1(:,:,:),
dens(:,:,:), &
958 dqcrg(:,:,:), beta_crg(:,:,:) )
962 dens(:,:,:), pres(:,:,:), ccn(:,:,:), dt_mp, &
963 temp1(:,:,:), qtrc1(:,:,:,
qs_mp:
qe_mp), cptot1(:,:,:), cvtot1(:,:,:), &
964 rhoe_t(:,:,:), evaporate(:,:,:), &
966 qsplt_in(:,:,:,:), sarea(:,:,:,:), &
971 dens(:,:,:), pres(:,:,:), ccn(:,:,:), dt_mp, &
972 temp1(:,:,:), qtrc1(:,:,:,
qs_mp:
qe_mp), cptot1(:,:,:), cvtot1(:,:,:), &
973 rhoe_t(:,:,:), evaporate(:,:,:) )
983 rhoq_t_mp(
k,i,j,iq) = ( qtrc1(
k,i,j,iq) -
qtrc(
k,i,j,iq) ) *
dens(
k,i,j) / dt_mp
996 cptot_t(
k,i,j) = ( cptot1(
k,i,j) - cptot(
k,i,j) ) / dt_mp
997 cvtot_t(
k,i,j) = ( cvtot1(
k,i,j) - cvtot(
k,i,j) ) / dt_mp
1011 rhoc_t_mp(
k,i,j,iq) = ( qtrc1_crg(
k,i,j,iq) -
qtrc(
k,i,j,iq) ) *
dens(
k,i,j) / dt_mp
1028 temp(:,:,:),
dens(:,:,:), &
1030 dqcrg(:,:,:), beta_crg(:,:,:) )
1034 dens(:,:,:),
w(:,:,:),
qtrc(:,:,:,
qs_mp:
qe_mp), pres(:,:,:), temp(:,:,:), &
1035 qdry(:,:,:), cptot(:,:,:), cvtot(:,:,:), ccn(:,:,:), dt_mp, real_cz(:,:,:), real_fz(:,:,:), &
1036 rhoq_t_mp(:,:,:,
qs_mp:
qe_mp), rhoe_t(:,:,:), cptot_t(:,:,:), cvtot_t(:,:,:), evaporate(:,:,:),&
1039 qsplt_in(:,:,:,:), sarea(:,:,:,:), &
1045 dens(:,:,:),
w(:,:,:),
qtrc(:,:,:,
qs_mp:
qe_mp), pres(:,:,:), temp(:,:,:), &
1046 qdry(:,:,:), cptot(:,:,:), cvtot(:,:,:), ccn(:,:,:), dt_mp, real_cz(:,:,:), real_fz(:,:,:), &
1047 rhoq_t_mp(:,:,:,
qs_mp:
qe_mp), rhoe_t(:,:,:), cptot_t(:,:,:), cvtot_t(:,:,:), evaporate(:,:,:) )
1058 temp(:,:,:),
dens(:,:,:), &
1060 dqcrg(:,:,:), beta_crg(:,:,:) )
1062 call atmos_phy_mp_suzuki10_tendency(
ka,
ks,
ke,
ia,
is,
ie,
ja,
js,
je,
kijmax, &
1064 dens(:,:,:), pres(:,:,:), temp(:,:,:), &
1066 cptot(:,:,:), cvtot(:,:,:), &
1070 cptot_t(:,:,:), cvtot_t(:,:,:), &
1073 dqcrg(:,:,:), beta_crg(:,:,:), &
1075 qsplt_in(:,:,:,:), sarea(:,:,:,:), &
1079 call atmos_phy_mp_suzuki10_tendency(
ka,
ks,
ke,
ia,
is,
ie,
ja,
js,
je,
kijmax, &
1081 dens(:,:,:), pres(:,:,:), temp(:,:,:), &
1083 cptot(:,:,:), cvtot(:,:,:), &
1087 cptot_t(:,:,:), cvtot_t(:,:,:), &
1098 call file_history_query( hist_hyd_id(iq), hist_sw(iq) )
1101 if( hist_sw(iq) )
then
1102 call file_history_put( hist_hyd_id(iq), qe(:,:,:,iq) )
1114 call file_history_query( hist_crg_id(iq), hist_crg_sw(iq) )
1117 if( hist_crg_sw(iq) )
then
1118 call file_history_put( hist_crg_id(iq), qecrg(:,:,:,iq) )
1133 rhoh_mp(
k,i,j) = rhoe_t(
k,i,j) &
1134 - ( cptot_t(
k,i,j) + log( pres(
k,i,j) / pre00 ) * ( cvtot(
k,i,j) / cptot(
k,i,j) * cptot_t(
k,i,j) - cvtot_t(
k,i,j) ) ) &
1135 *
dens(
k,i,j) * temp(
k,i,j)
1145 if ( mp_do_precipitation )
then
1150 hist_vterm_idx(:) = -1
1153 call file_history_query( hist_vterm_id(iq), flag )
1156 hist_vterm_idx(iq) = ih
1161 allocate( vterm_hist(
ka,
ia,
ja,ih) )
1163 vterm_hist(:,:,:,:) = 0.0_rp
1193 fz(1:
ka) = real_fz(1:
ka,i,j)
1195 fdz(
ks-1) = real_cz(
ks,i,j) - real_fz(
ks-1,i,j)
1196 rfdz(
ks-1) = 1.0_rp / fdz(
ks-1)
1198 fdz(
k) = real_cz(
k+1,i,j) - real_cz(
k ,i,j)
1199 rfdz(
k) = 1.0_rp / fdz(
k)
1200 rcdz(
k) = 1.0_rp / ( real_fz(
k ,i,j) - real_fz(
k-1,i,j) )
1205 temp2(
k) = temp(
k,i,j)
1206 pres2(
k) = pres(
k,i,j)
1207 cptot2(
k) = cptot(
k,i,j)
1208 cvtot2(
k) = cvtot(
k,i,j)
1209 rhoe(
k) = temp(
k,i,j) * cvtot(
k,i,j) * dens2(
k)
1215 rhoq(
k,iq) = dens2(
k) *
qtrc(
k,i,j,iq) + rhoq_t_mp(
k,i,j,iq) * dt_mp
1216 rhoq2(
k,iq) = rhoq(
k,iq)
1224 rhoq2_crg(
k,iq) = dens2(
k) *
qtrc(
k,i,j,iq)
1229 sflx_rain(i,j) = 0.0_rp
1230 sflx_snow(i,j) = 0.0_rp
1231 sflx_engi(i,j) = 0.0_rp
1232 flx_hydro(:) = 0.0_rp
1235 do step = 1, mp_nstep_sedimentation
1241 dens2(:), rhoq2(:,:), &
1242 refstate_dens(:,i,j), &
1247 dens2(:), temp2(:), rhoq2(:,:), &
1252 dens2(:), temp2(:), rhoq2(:,:), pres2(:), &
1262 vterm(
k,iq) = 0.0_rp
1270 if ( hist_vterm_idx(iq) > 0 )
then
1273 vterm_hist(
k,i,j,hist_vterm_idx(iq)) = vterm_hist(
k,i,j,hist_vterm_idx(iq)) &
1274 + vterm(
k,iq) * mp_rnstep_sedimentation
1280 case (
'Upwind-Euler' )
1283 temp2(:), vterm(:,:), &
1285 mp_dtsec_sedimentation, &
1287 dens2(:), rhoq2(:,:), &
1288 cptot2(:), cvtot2(:), &
1290 mflux(:), sflux(:), &
1295 temp2(:), vterm(:,:), &
1296 fz(:), fdz(:), rcdz(:), &
1297 mp_dtsec_sedimentation, &
1299 dens2(:), rhoq2(:,:), &
1300 cptot2(:), cvtot2(:), &
1302 mflux(:), sflux(:), &
1313 case (
'Upwind-Euler' )
1316 temp2(:), vterm(:,
qhs:
qhe), &
1318 mp_dtsec_sedimentation, &
1320 dens2(:), rhoq2_crg(:,:), &
1321 cptot2(:), cvtot2(:), &
1323 mflux_crg(:), sflux_crg(:), &
1328 temp2(:), vterm(:,
qhs:
qhe), &
1329 fz(:), fdz(:), rcdz(:), &
1330 mp_dtsec_sedimentation, &
1332 dens2(:), rhoq2_crg(:,:), &
1333 cptot2(:), cvtot2(:), &
1335 mflux_crg(:), sflux_crg(:), &
1338 mflux_crg(:) = 0.0_rp
1339 sflux_crg(:) = 0.0_rp
1347 temp2(
k) = rhoe2(
k) / ( dens2(
k) * cvtot2(
k) )
1352 flx_hydro(
k) = flx_hydro(
k) + mflux(
k) * mp_rnstep_sedimentation
1355 sflx_rain(i,j) = sflx_rain(i,j) - sflux(1) * mp_rnstep_sedimentation
1356 sflx_snow(i,j) = sflx_snow(i,j) - sflux(2) * mp_rnstep_sedimentation
1357 sflx_engi(i,j) = sflx_engi(i,j) - eflux * mp_rnstep_sedimentation
1361 sflx_engi(i,j) = sflx_engi(i,j) - sflx_snow(i,j) *
lhf
1365 dens_t_mp(
k,i,j) = ( dens2(
k) -
dens(
k,i,j) ) / dt_mp
1369 cp_t = ( cptot2(
k) - cptot(
k,i,j) ) / dt_mp
1370 cv_t = ( cvtot2(
k) - cvtot(
k,i,j) ) / dt_mp
1371 rhoh_mp(
k,i,j) = rhoh_mp(
k,i,j) &
1372 + ( rhoe2(
k) - rhoe(
k) ) / dt_mp &
1373 - ( cp_t + log( pres(
k,i,j) / pre00 ) * ( cvtot(
k,i,j) / cptot(
k,i,j) * cp_t - cv_t ) ) &
1374 *
dens(
k,i,j) * temp(
k,i,j)
1385 rhoq_t_mp(
k,i,j,iq) = rhoq_t_mp(
k,i,j,iq) &
1386 + ( rhoq2(
k,iq) - rhoq(
k,iq) ) / dt_mp
1394 rhoc_t_mp(
k,i,j,iq) = rhoc_t_mp(
k,i,j,iq) &
1395 + ( rhoq2_crg(
k,iq) -
dens(
k,i,j) *
qtrc(
k,i,j,iq) ) / dt_mp
1402 dens(:,i,j),
momz(:,i,j),
u(:,i,j),
v(:,i,j), &
1405 momz_t_mp(:,i,j), rhou_t_mp(:,i,j), rhov_t_mp(:,i,j) )
1413 if ( hist_vterm_idx(iq) > 0 )
then
1414 call file_history_put( hist_vterm_id(iq), vterm_hist(:,:,:,hist_vterm_idx(iq)) )
1417 if (
allocated( vterm_hist ) )
then
1418 deallocate( vterm_hist )
1429 precip(i,j) = sflx_rain(i,j) + sflx_snow(i,j)
1434 call file_history_in( sflx_rain(:,:),
'RAIN_MP',
'surface rain rate by MP',
'kg/m2/s', fill_halo=.true. )
1435 call file_history_in( sflx_snow(:,:),
'SNOW_MP',
'surface snow rate by MP',
'kg/m2/s', fill_halo=.true. )
1436 call file_history_in( precip(:,:),
'PREC_MP',
'surface precipitation rate by MP',
'kg/m2/s', fill_halo=.true. )
1437 call file_history_in( evaporate(:,:,:),
'EVAPORATE',
'evaporated cloud number',
'num/m3/s', fill_halo=.true. )
1439 call file_history_in( dens_t_mp(:,:,:),
'DENS_t_MP',
'tendency DENS in MP',
'kg/m3/s' , fill_halo=.true. )
1440 call file_history_in( momz_t_mp(:,:,:),
'MOMZ_t_MP',
'tendency MOMZ in MP',
'kg/m2/s2' , fill_halo=.true. )
1441 call file_history_in( rhou_t_mp(:,:,:),
'RHOU_t_MP',
'tendency RHOU in MP',
'kg/m2/s2' , fill_halo=.true. )
1442 call file_history_in( rhov_t_mp(:,:,:),
'RHOV_t_MP',
'tendency RHOV in MP',
'kg/m2/s2' , fill_halo=.true. )
1444 call file_history_in( rhoh_mp(:,:,:),
'RHOH_MP',
'diabatic heating rate in MP',
'J/m3/s', fill_halo=.true. )
1446 call file_history_in( rhoq_t_mp(:,:,:,iq), trim(
tracer_name(iq))//
'_t_MP', &
1447 'tendency rho*'//trim(
tracer_name(iq))//
' in MP',
'kg/m3/s', fill_halo=.true. )
1451 call file_history_in( qsplt_in(:,:,:,1),
'QSPLT_G',
'Charge split of QG by Non-inductive process',
'fC/m3/s', fill_halo=.true. )
1452 call file_history_in( qsplt_in(:,:,:,2),
'QSPLT_I',
'Charge split of QI by Non-inductive process',
'fC/m3/s', fill_halo=.true. )
1453 call file_history_in( qsplt_in(:,:,:,3),
'QSPLT_S',
'Charge split of QS by Non-inductive process',
'fC/m3/s', fill_halo=.true. )
1456 call file_history_in( rhoc_t_mp(:,:,:,iq), trim(
tracer_name(iq))//
'_t_MP', &
1457 'tendency rho*'//trim(
tracer_name(iq))//
' in MP',
'fC/m3/s', fill_halo=.true. )
1473 dens_t(
k,i,j) = dens_t(
k,i,j) + dens_t_mp(
k,i,j)
1474 momz_t(
k,i,j) = momz_t(
k,i,j) + momz_t_mp(
k,i,j)
1475 rhou_t(
k,i,j) = rhou_t(
k,i,j) + rhou_t_mp(
k,i,j)
1476 rhov_t(
k,i,j) = rhov_t(
k,i,j) + rhov_t_mp(
k,i,j)
1478 rhoh(
k,i,j) = rhoh(
k,i,j) + rhoh_mp(
k,i,j)
1493 rhoq_t(
k,i,j,iq) = rhoq_t(
k,i,j,iq) + rhoq_t_mp(
k,i,j,iq)
1508 rhoq_t(
k,i,j,iq) = rhoq_t(
k,i,j,iq) &
1509 + rhoc_t_mp(
k,i,j,iq)
1519 dens_t_mp(:,:,:),
'DENS_t_MP', &
1523 momz_t_mp(:,:,:),
'MOMZ_t_MP', &
1527 rhoh_mp(:,:,:),
'RHOH_MP', &
1537 rhoq_t_mp(:,:,:,iq), trim(
tracer_name(iq))//
'_t_MP', &
1549 KA, KS, KE, IA, IS, IE, JA, JS, JE, &
1569 integer,
intent(in) ::
ka,
ks,
ke
1570 integer,
intent(in) ::
ia,
is,
ie
1571 integer,
intent(in) ::
ja,
js,
je
1573 real(
rp),
intent(in) :: qv (
ka,
ia,
ja)
1589 qv(:,:,:), qhyd(:,:,:,:), &
1598 qtrc(
k,i,j,1) = qv(
k,i,j)
1613 qtrc(
k,i,j,1) = qv(
k,i,j)
1626 qtrc(
k,i,j,1) = qv(
k,i,j)
1642 qtrc(
k,i,j,1) = qv(
k,i,j)
1654 log_error(
"ATMOS_PHY_MP_driver_qhyd2qtrc",*)
'ATMOS_PHY_MP_TYPE (', trim(
atmos_phy_mp_type),
') is not supported'
1665 KA, KS, KE, IA, IS, IE, JA, JS, JE, &
1673 integer,
intent(in) ::
ka,
ks,
ke
1674 integer,
intent(in) ::
ia,
is,
ie
1675 integer,
intent(in) ::
ja,
js,
je
1677 real(
rp),
intent(in) :: qv (
ka,
ia,
ja)
1691 qtrc(
k,i,j,1) = qv(
k,i,j)
real(rp), dimension(:,:), allocatable, public atmos_phy_mp_sflx_engi
real(rp), dimension(:,:,:), pointer, public momz_av
subroutine, public atmos_phy_mp_kessler_terminal_velocity(KA, KS, KE, DENS0, RHOQ0, REFSTATE_dens_profile, vterm)
Kessler-type warm rain microphysics (terminal velocity)
module Atmosphere / Physics Cloud Microphysics
integer, public ke
end point of inner domain: z, local
subroutine, public prc_abort
Abort Process.
subroutine, public atmos_phy_mp_tomita08_qhyd2qtrc(KA, KS, KE, IA, IS, IE, JA, JS, JE, Qe, QTRC)
get mass ratio of each category
integer, parameter, public atmos_phy_mp_tomita08_ntracers
character(len=h_short), dimension(qa_mp), parameter, public atmos_phy_mp_sn14_tracer_names
subroutine, public atmos_phy_mp_tomita08_terminal_velocity(KA, KS, KE, DENS, TEMP, RHOQ, vterm)
Lin-type cold rain microphysics (terminal velocity)
real(rp), dimension(:), allocatable, public atmos_grid_cartesc_cdz
z-length of control volume [m]
real(rp), public atmos_grid_cartesc_real_totvolzxv
total volume (zxv, local) [m3]
character(len=h_short), public atmos_phy_precip_type
real(rp), dimension(:,:,:), allocatable, public atmos_grid_cartesc_real_cz
geopotential height [m] (zxy)
real(rp), dimension(:,:,:), allocatable, target, public pott
module atmosphere / physics / microphysics / Tomita08
real(rp), dimension(:,:,:), allocatable, public atmos_grid_cartesc_real_volwxy
control volume (wxy) [m3]
subroutine, public atmos_phy_mp_kessler_adjustment(KA, KS, KE, IA, IS, IE, JA, JS, JE, DENS, PRES, dt, TEMP, QTRC, CPtot, CVtot, RHOE_t, EVAPORATE)
ATMOS_PHY_MP_kessler_adjustment calculate state after saturation process.
real(rp), dimension(:,:,:,:), pointer, public qtrc_av
real(rp), dimension(:,:,:), allocatable, public atmos_refstate_dens
refernce density [kg/m3]
real(rp), dimension(:,:,:), allocatable, public atmos_phy_mp_momz_t
integer, parameter, public atmos_phy_mp_tomita08_nwaters
integer, parameter, public atmos_phy_mp_sn14_ntracers
real(rp), dimension(:,:,:), allocatable, public rhov_tp
real(dp), public time_dtsec_atmos_phy_mp
time interval of physics(microphysics) [sec]
subroutine, public atmos_phy_mp_sn14_qhyd2qtrc(KA, KS, KE, IA, IS, IE, JA, JS, JE, Qe, QTRC, QNUM)
module Atmosphere / Physics Chemistry
character(len=h_short), dimension(qa_mp), parameter, public atmos_phy_mp_tomita08_tracer_units
subroutine, public atmos_phy_mp_tomita08_finalize
finalize
subroutine, public atmos_phy_mp_suzuki10_crg_qtrc2qhyd(KA, KS, KE, IA, IS, IE, JA, JS, JE, QTRC0, Qecrg)
get charge density ratio of each category
subroutine, public atmos_phy_mp_suzuki10_qtrc2qhyd(KA, KS, KE, IA, IS, IE, JA, JS, JE, QTRC0, Qe)
Calculate mass ratio of each category.
subroutine, public atmos_phy_mp_suzuki10_tendency(KA, KS, KE, IA, IS, IE, JA, JS, JE, KIJMAX, dt, DENS, PRES, TEMP, QTRC, QDRY, CPtot, CVtot, CCN, RHOQ_t, RHOE_t, CPtot_t, CVtot_t, EVAPORATE, flg_lt, d0_crg, v0_crg, dqcrg, beta_crg, QTRC_crg, QSPLT_in, Sarea, RHOC_t_mp)
Cloud Microphysics.
real(rp), dimension(:,:,:), allocatable, target, public cptot
real(rp), public atmos_grid_cartesc_real_totvolwxy
total volume (wxy, local) [m3]
real(rp), public const_eps
small number
subroutine, public prof_rapstart(rapname_base, level, disable_barrier)
Start raptime.
logical, public atmos_sw_phy_mp
module atmosphere / hydrometeor
subroutine, public atmos_phy_mp_tomita08_setup(KA, KS, KE, IA, IS, IE, JA, JS, JE, flg_lt)
ATMOS_PHY_MP_tomita08_setup Setup.
module atmosphere / reference state
real(rp), dimension(:,:), allocatable, public atmos_phy_mp_sflx_rain
character(len=h_short), dimension(qa_mp), parameter, public atmos_phy_mp_kessler_tracer_names
logical, public atmos_hydrometeor_dry
real(rp), dimension(:,:,:,:), allocatable, public atmos_phy_lt_sarea
real(rp), dimension(:,:,:), allocatable, target, public rhot
subroutine, public atmos_phy_mp_tomita08_adjustment(KA, KS, KE, IA, IS, IE, JA, JS, JE, DENS, PRES, CCN, dt, TEMP, QTRC, CPtot, CVtot, RHOE_t, EVAPORATE, flg_lt, d0_crg, v0_crg, dqcrg, beta_crg, QSPLT_in, Sarea, QTRC_crg)
ATMOS_PHY_MP_tomita08_adjustment calculate state after saturation process.
module Atmosphere GRID CartesC Real(real space)
real(rp), dimension(:,:,:,:), allocatable, target, public qtrc
subroutine, public atmos_phy_mp_suzuki10_terminal_velocity(KA, vterm_o)
get terminal velocity
real(rp), dimension(:,:,:), allocatable, public atmos_grid_cartesc_real_volzuy
control volume (zuy) [m3]
module ATMOSPHERE / Physics Cloud Microphysics
character(len=h_mid), dimension(qa_mp), parameter, public atmos_phy_mp_sn14_tracer_descriptions
real(rp), dimension(:,:,:), allocatable, public atmos_phy_mp_dens_t
module atmosphere / physics / cloud microphysics
real(rp), dimension(:,:,:), allocatable, public rhou_tp
integer, parameter, public rp
subroutine, public atmos_phy_mp_negative_fixer(KA, KS, KE, IA, IS, IE, JA, JS, JE, QLA, QIA, limit_negative, DENS, TEMP, CVtot, CPtot, QV, QTRC, RHOH, DENS_diff, ENGI_diff)
ATMOS_PHY_MP_negative_fixer negative fixer.
integer, public ie
end point of inner domain: x, local
integer, parameter, public atmos_phy_mp_kessler_nwaters
subroutine, public atmos_phy_mp_precipitation_semilag(KA, KS, KE, QHA, QLA, QIA, TEMP, vterm, FZ, FDZ, RCDZ, dt, i, j, DENS, RHOQ, CPtot, CVtot, RHOE, mflx, sflx, esflx)
real(rp), dimension(:,:,:), allocatable, target, public dens
integer, parameter, public atmos_phy_mp_kessler_ntracers
real(rp), dimension(:,:,:), allocatable, public atmos_grid_cartesc_real_volzxv
control volume (zxv) [m3]
module atmosphere / grid / cartesC index
real(rp), dimension(:,:,:), allocatable, public atmos_grid_cartesc_real_vol
control volume (zxy) [m3]
integer, public atmos_phy_mp_suzuki10_nwaters
real(rp), parameter, public v0_crg
real(rp), dimension(:,:,:), allocatable, target, public momz
logical, public atmos_sw_phy_lt
subroutine, public atmos_phy_mp_precipitation_momentum(KA, KS, KE, DENS, MOMZ, U, V, mflx, RCDZ, RFDZ, MOMZ_t, RHOU_t, RHOV_t)
procedure(qhyd2qtrc), pointer, public atmos_phy_mp_user_qhyd2qtrc
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.
module ATMOSPHERE / Physics Cloud Microphysics - Common
subroutine, public atmos_phy_mp_driver_tracer_setup
Config.
subroutine, public atmos_phy_mp_suzuki10_qhyd2qtrc(KA, KS, KE, IA, IS, IE, JA, JS, JE, Qe, QTRC, QNUM)
get mass ratio of each category
character(len=h_short), dimension(:), allocatable, public atmos_phy_mp_suzuki10_tracer_units
real(rp), dimension(:,:,:), allocatable, target, public v
character(len=h_short), dimension(qa_max), public tracer_name
real(rp), dimension(:,:,:), allocatable, target, public w
subroutine, public atmos_phy_mp_sn14_finalize
finalize
real(rp), dimension(:,:,:), allocatable, public momz_tp
subroutine, public atmos_phy_mp_driver_adjustment
adjustment
subroutine, public atmos_phy_mp_precipitation_upwind(KA, KS, KE, QHA, QLA, QIA, TEMP, vterm, FDZ, RCDZ, dt, i, j, DENS, RHOQ, CPtot, CVtot, RHOE, mflx, sflx, esflx)
integer, public is
start point of inner domain: x, local
module Spectran Bin Microphysics
real(rp), dimension(:,:,:), allocatable, target, public temp
subroutine, public monitor_reg(name, desc, unit, itemid, ndims, dim_type, is_tendency)
Search existing item, or matching check between requested and registered item.
real(rp), dimension(:,:,:), allocatable, public dens_tp
character(len=h_short), dimension(qa_mp), parameter, public atmos_phy_mp_tomita08_tracer_names
real(rp), public atmos_grid_cartesc_real_totvolzuy
total volume (zuy, local) [m3]
module atmosphere / physics / microphysics / Kessler
subroutine, public atmos_phy_mp_driver_finalize
finalize
character(len=h_mid), dimension(:), allocatable, public atmos_phy_mp_suzuki10_tracer_descriptions
subroutine, public tracer_regist(QS, NQ, NAME, DESC, UNIT, CV, CP, R, ENGI0, ADVC, MASS)
Regist tracer.
character(len=h_mid), dimension(qa_mp), parameter, public atmos_phy_mp_kessler_tracer_descriptions
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.
real(rp), parameter, public d0_crg
real(rp), dimension(:,:,:), pointer, public dens_av
subroutine, public atmos_phy_mp_driver_setup
Setup.
subroutine, public atmos_phy_mp_kessler_qhyd2qtrc(KA, KS, KE, IA, IS, IE, JA, JS, JE, Qe, QTRC)
Calculate mass ratio of each category.
real(rp), dimension(:,:,:), allocatable, target, public u
integer, public ks
start point of inner domain: z, local
subroutine, public atmos_phy_mp_suzuki10_tracer_setup
Config.
integer, public atmos_phy_mp_suzuki10_ntracers
subroutine, public atmos_phy_mp_driver_calc_tendency(update_flag)
calculate tendency
logical, public statistics_checktotal
calc&report variable totals to logfile?
real(dp), public time_dtsec
time interval of model [sec]
module ATMOSPHERIC Variables
character(len=h_short), dimension(:), allocatable, public atmos_phy_mp_suzuki10_tracer_names
integer, public js
start point of inner domain: y, local
integer, parameter, public atmos_phy_mp_kessler_nices
real(rp), dimension(:,:), allocatable, public atmos_phy_mp_sflx_snow
integer, parameter, public atmos_phy_mp_sn14_nices
real(rp), public lhf
latent heat of fusion for use [J/kg]
subroutine, public atmos_hydrometeor_regist(NL, NI, NAME, DESC, UNIT, Q0, ADVC)
ATMOS_HYDROMETEOR_regist Regist tracer.
module ATMOSPHERE / Physics Aerosol Microphysics
module atmosphere / physics / lightninh / SATO2019
character(len=h_short), public atmos_phy_mp_type
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, parameter, public atmos_phy_mp_sn14_nwaters
subroutine, public prof_rapend(rapname_base, level, disable_barrier)
Save raptime.
real(rp), public atmos_phy_mp_cldfrac_thleshold
real(dp), public time_dtsec_atmos_phy_lt
time interval of physics(lightning ) [sec]
character(len=h_short), dimension(qa_mp), parameter, public atmos_phy_mp_sn14_tracer_units
real(rp), dimension(:,:,:), allocatable, public atmos_phy_ae_ccn_t
subroutine, public atmos_phy_mp_driver_qhyd2qtrc_onlyqv(KA, KS, KE, IA, IS, IE, JA, JS, JE, QV, QHYD, QTRC, QNUM)
real(rp), dimension(:,:,:), allocatable, public atmos_grid_cartesc_real_fz
geopotential height [m] (wxy)
subroutine, public atmos_phy_lt_sato2019_select_dqcrg_from_lut(KA, KS, KE, IA, IS, IE, JA, JS, JE, NLIQ, TEMP, DENS, QLIQ, dqcrg, beta_crg)
Select cwc-temp point on LUT.
real(rp), public atmos_grid_cartesc_real_totvol
total volume (zxy, local) [m3]
module atmosphere / grid / cartesC
integer, parameter, public atmos_phy_mp_tomita08_nices
subroutine, public atmos_phy_mp_suzuki10_finalize
finalize
subroutine, public atmos_phy_mp_suzuki10_setup(KA, IA, JA, flg_lt)
Setup.
integer, public atmos_phy_mp_suzuki10_nices
subroutine, public atmos_phy_mp_sn14_setup(KA, IA, JA)
ATMOS_PHY_MP_sn14_setup setup.
subroutine, public atmos_phy_mp_driver_qhyd2qtrc(KA, KS, KE, IA, IS, IE, JA, JS, JE, QV, QHYD, QTRC, QNUM)
subroutine, public atmos_phy_mp_kessler_setup
ATMOS_PHY_MP_kessler_setup Setup.
real(rp), public const_pre00
pressure reference [Pa]
integer, public io_fid_conf
Config file ID.
integer, public je
end point of inner domain: y, local
integer, parameter, public n_hyd
integer, public atmos_phy_mp_suzuki10_nccn
real(rp), dimension(:,:,:), allocatable, target, public cvtot
character(len=h_short), dimension(qa_mp), parameter, public atmos_phy_mp_kessler_tracer_units
character(len=h_mid), dimension(qa_mp), parameter, public atmos_phy_mp_tomita08_tracer_descriptions