Go to the documentation of this file.
37 subroutine qhyd2qtrc( &
38 KA, KS, KE, IA, IS, IE, JA, JS, JE, &
45 integer,
intent(in) :: KA, KS, KE
46 integer,
intent(in) :: IA, IS, IE
47 integer,
intent(in) :: JA, JS, JE
48 real(RP),
intent(in) :: QV(KA,IA,JA)
49 real(RP),
intent(in) :: QHYD(KA,IA,JA,N_HYD)
50 real(RP),
intent(out) :: QTRC(KA,IA,JA,QA_MP)
51 real(RP),
intent(in),
optional :: QNUM(KA,IA,JA,N_HYD)
52 end subroutine qhyd2qtrc
53 end interface abstract
69 logical,
private :: mp_do_precipitation = .true.
70 logical,
private :: mp_do_negative_fixer = .true.
71 real(
rp),
private :: mp_limit_negative = 0.1_rp
72 integer,
private :: mp_ntmax_sedimentation = 1
73 real(
rp),
private :: mp_max_term_vel = 10.0_rp
74 real(
rp),
private :: mp_cldfrac_thleshold
75 integer,
private :: mp_nstep_sedimentation
76 real(
rp),
private :: mp_rnstep_sedimentation
77 real(
dp),
private :: mp_dtsec_sedimentation
79 integer,
private,
allocatable :: hist_hyd_id(:)
80 integer,
private,
allocatable :: hist_crg_id(:)
82 integer,
private,
allocatable :: hist_vterm_id(:)
83 integer,
private :: hist_nf_rhoh_id
84 integer,
private :: hist_nf_dens_id
85 integer,
private :: hist_nf_engi_id
86 integer,
private :: monit_nf_mass_id
87 integer,
private :: monit_nf_engi_id
143 log_info(
"ATMOS_PHY_MP_driver_tracer_setup",*)
'Setup'
157 log_error(
"ATMOS_PHY_MP_driver_tracer_setup",*)
'ATMOS_PHY_MP_TYPE is invalud for Lightning: ', trim(
atmos_phy_mp_type)
158 log_error(
"ATMOS_PHY_MP_driver_tracer_setup",*)
'ATMOS_PHY_MP_TYPE is should be TOMITA08 or SN14 or SUZUKI10 for Lightning: '
208 log_error(
"ATMOS_PHY_MP_driver_tracer_setup",*)
'ATMOS_PHY_MP_TYPE is invalud: ', trim(
atmos_phy_mp_type)
264 namelist / param_atmos_phy_mp / &
265 mp_do_precipitation, &
266 mp_do_negative_fixer, &
268 mp_ntmax_sedimentation, &
272 character(len=H_SHORT) :: w_name(
n_hyd)
273 character(len=H_MID) :: w_longname(
n_hyd)
274 character(len=H_SHORT) :: w_unit(
n_hyd)
275 data w_name /
'QC', &
282 'Ratio of Cloud Water mass to total mass', &
283 'Ratio of Rain Water mass to total mass', &
284 'Ratio of Ice Water mass to total mass', &
285 'Ratio of Snow Water mass to total mass', &
286 'Ratio of Graupel Water mass to total mass', &
287 'Ratio of Hail Water mass to total mass' /
296 character(len=H_SHORT) :: w_crg_name(
n_hyd)
297 character(len=H_MID) :: w_crg_longname(
n_hyd)
298 character(len=H_SHORT) :: w_crg_unit(
n_hyd)
299 data w_crg_name /
'QCRG_C', &
305 data w_crg_longname / &
306 'Ratio of charge density of Cloud Water', &
307 'Ratio of charge density of Rain Water', &
308 'Ratio of charge density of Ice', &
309 'Ratio of charge density of Snow', &
310 'Ratio of charge density of Graupel', &
311 'Ratio of charge density of Hail' /
329 log_info(
"ATMOS_PHY_MP_driver_setup",*)
'Setup'
333 mp_cldfrac_thleshold = eps
337 read(
io_fid_conf,nml=param_atmos_phy_mp,iostat=ierr)
339 log_info(
"ATMOS_PHY_MP_driver_setup",*)
'Not found namelist. Default used.'
340 elseif( ierr > 0 )
then
341 log_error(
"ATMOS_PHY_MP_driver_setup",*)
'Not appropriate names in namelist PARAM_ATMOS_PHY_MP. Check!'
344 log_nml(param_atmos_phy_mp)
347 mp_ntmax_sedimentation = max( mp_ntmax_sedimentation, nstep_max )
349 mp_nstep_sedimentation = mp_ntmax_sedimentation
350 mp_rnstep_sedimentation = 1.0_rp / real(mp_ntmax_sedimentation,kind=
rp)
353 atmos_phy_mp_cldfrac_thleshold = mp_cldfrac_thleshold
356 log_info(
"ATMOS_PHY_MP_driver_setup",*)
'Enable negative fixer? : ', mp_do_negative_fixer
357 log_info(
"ATMOS_PHY_MP_driver_setup",*)
'Value limit of negative fixer (abs) : ', abs(mp_limit_negative)
358 log_info(
"ATMOS_PHY_MP_driver_setup",*)
'Enable sedimentation (precipitation)? : ', mp_do_precipitation
359 log_info(
"ATMOS_PHY_MP_driver_setup",*)
'Timestep of sedimentation is divided into : ', mp_ntmax_sedimentation,
'step'
360 log_info(
"ATMOS_PHY_MP_driver_setup",*)
'DT of sedimentation : ', mp_dtsec_sedimentation,
'[s]'
376 allocate( hist_hyd_id(
n_hyd) )
382 allocate( hist_crg_id(
n_hyd) )
384 call file_history_reg( w_crg_name(iq), w_crg_longname(iq), w_crg_unit(iq), &
391 if ( mp_do_precipitation )
then
400 sflx_rain(:,:) = 0.0_rp
401 sflx_snow(:,:) = 0.0_rp
402 sflx_engi(:,:) = 0.0_rp
407 if ( mp_do_negative_fixer )
then
408 call file_history_reg(
"RHOH_MP_NF",
"sensible heat by the negative fixer",
"J/m3/s", &
410 call file_history_reg(
"DENS_t_MP_NF",
"vapor supply by the negative fixer",
"kg/m3/s", &
412 call file_history_reg(
"ENGI_t_MP_NF",
"internal energy supply by the negative fixer",
"J/m3/s", &
414 call monitor_reg(
"QTOTTND_NF",
"vapor supply by the negative fixer",
"kg", &
417 call monitor_reg(
"ENGITND_NF",
"internal energy supply by the negative fixer",
"J", &
421 call monitor_put( monit_nf_mass_id, zero(:,:,:) )
422 call monitor_put( monit_nf_engi_id, zero(:,:,:) )
427 log_info(
"ATMOS_PHY_MP_driver_setup",*)
'this component is never called.'
428 log_info(
"ATMOS_PHY_MP_driver_setup",*)
'SFLX_rain and SFLX_snow is set to zero.'
429 sflx_rain(:,:) = 0.0_rp
430 sflx_snow(:,:) = 0.0_rp
431 sflx_engi(:,:) = 0.0_rp
464 file_history_query, &
474 logical :: do_put_rhoh
475 logical :: do_put_dens
476 logical :: do_put_engi
478 integer ::
k, i, j, iq
482 call file_history_query( hist_nf_rhoh_id, do_put_rhoh )
483 call file_history_query( hist_nf_dens_id, do_put_dens )
484 call file_history_query( hist_nf_engi_id, do_put_engi )
486 if ( monit_nf_mass_id > 0 .or. monit_nf_engi_id > 0 .or. &
487 do_put_rhoh .or. do_put_dens .or. do_put_engi )
then
489 ka,
ks,
ke,
ia, 1,
ia,
ja, 1,
ja,
qla,
qia, &
495 dens_diff = dens_d, engi_diff = engi_d )
498 ka,
ks,
ke,
ia, 1,
ia,
ja, 1,
ja,
qla,
qia, &
512 rhot(
k,i,j) = pre00 / rtot * (
dens(
k,i,j) *
temp(
k,i,j) * rtot / pre00 )**(
cvtot(
k,i,j) /
cptot(
k,i,j) )
524 qtrc(
k,i,j,iq) = max(
qtrc(
k,i,j,iq), 0.0_rp )
532 if ( do_put_rhoh )
then
537 rhoh(
k,i,j) = rhoh(
k,i,j) / dt
541 call file_history_put( hist_nf_rhoh_id, rhoh(:,:,:) )
543 if ( monit_nf_mass_id > 0 .or. do_put_dens )
then
548 dens_d(
k,i,j) = dens_d(
k,i,j) / dt
552 call file_history_put( hist_nf_dens_id, dens_d(:,:,:) )
553 call monitor_put( monit_nf_mass_id, dens_d(:,:,:) )
555 if ( monit_nf_engi_id > 0 .or. do_put_engi )
then
560 engi_d(
k,i,j) = engi_d(
k,i,j) / dt
564 call file_history_put( hist_nf_engi_id, engi_d(:,:,:) )
565 call monitor_put( monit_nf_engi_id, engi_d(:,:,:) )
597 file_history_query, &
633 file_history_query, &
668 rhou_t_mp => atmos_phy_mp_rhou_t, &
669 rhov_t_mp => atmos_phy_mp_rhov_t, &
670 rhoq_t_mp => atmos_phy_mp_rhoq_t, &
671 rhoc_t_mp => atmos_phy_mp_rhoc_t, &
672 rhoh_mp => atmos_phy_mp_rhoh, &
673 evaporate => atmos_phy_mp_evaporate, &
674 sflx_rain => atmos_phy_mp_sflx_rain, &
675 sflx_snow => atmos_phy_mp_sflx_snow, &
676 sflx_engi => atmos_phy_mp_sflx_engi
689 logical,
intent(in) :: update_flag
699 real(
rp) :: flx_hydro(
ka)
700 real(
rp) :: dens2 (
ka)
701 real(
rp) :: temp2 (
ka)
702 real(
rp) :: pres2 (
ka)
703 real(
rp) :: cptot2 (
ka)
704 real(
rp) :: cvtot2 (
ka)
705 real(
rp) :: rhoe (
ka)
706 real(
rp) :: rhoe2 (
ka)
709 real(
rp) :: mflux (
ka)
710 real(
rp) :: sflux (2)
719 real(
rp) :: cp_t, cv_t
721 real(
rp) :: precip (
ia,
ja)
724 logical :: hist_sw(
n_hyd)
726 logical :: hist_crg_sw(
n_hyd)
729 real(
rp),
allocatable :: vterm_hist(:,:,:,:)
734 integer ::
k, i, j, iq
739 real(
rp) :: mflux_crg(
ka), sflux_crg(2), eflux_crg
742 real(
rp) :: dummy(
ka)
745 if ( update_flag )
then
747 ccn(:,:,:) = ccn_t(:,:,:) * dt_mp
752 temp1(:,:,:) = temp(:,:,:)
756 cvtot1(:,:,:) = cvtot(:,:,:)
758 cptot1(:,:,:) = cptot(:,:,:)
762 dens(:,:,:), pres(:,:,:), dt_mp, &
763 temp1(:,:,:), qtrc1(:,:,:,
qs_mp:
qe_mp), cptot1(:,:,:), cvtot1(:,:,:), &
764 rhoe_t(:,:,:), evaporate(:,:,:) )
770 rhoq_t_mp(
k,i,j,iq) = ( qtrc1(
k,i,j,iq) -
qtrc(
k,i,j,iq) ) *
dens(
k,i,j) / dt_mp
779 cptot_t(
k,i,j) = ( cptot1(
k,i,j) - cptot(
k,i,j) ) / dt_mp
780 cvtot_t(
k,i,j) = ( cvtot1(
k,i,j) - cvtot(
k,i,j) ) / dt_mp
790 temp1(
k,i,j) = temp(
k,i,j)
799 qtrc1(
k,i,j,iq) =
qtrc(
k,i,j,iq)
808 cvtot1(
k,i,j) = cvtot(
k,i,j)
816 cptot1(
k,i,j) = cptot(
k,i,j)
827 qtrc1_crg(
k,i,j,iq) =
qtrc(
k,i,j,iq)
836 temp1(:,:,:),
dens(:,:,:), &
838 dqcrg(:,:,:), beta_crg(:,:,:) )
841 dens(:,:,:), pres(:,:,:), ccn(:,:,:), dt_mp, &
842 temp1(:,:,:), qtrc1(:,:,:,
qs_mp:
qe_mp), cptot1(:,:,:), cvtot1(:,:,:), &
843 rhoe_t(:,:,:), evaporate(:,:,:), &
845 qsplt_in(:,:,:,:), sarea(:,:,:,:), &
850 dens(:,:,:), pres(:,:,:), ccn(:,:,:), dt_mp, &
851 temp1(:,:,:), qtrc1(:,:,:,
qs_mp:
qe_mp), cptot1(:,:,:), cvtot1(:,:,:), &
852 rhoe_t(:,:,:), evaporate(:,:,:) )
859 rhoq_t_mp(
k,i,j,iq) = ( qtrc1(
k,i,j,iq) -
qtrc(
k,i,j,iq) ) *
dens(
k,i,j) / dt_mp
868 cptot_t(
k,i,j) = ( cptot1(
k,i,j) - cptot(
k,i,j) ) / dt_mp
869 cvtot_t(
k,i,j) = ( cvtot1(
k,i,j) - cvtot(
k,i,j) ) / dt_mp
879 rhoc_t_mp(
k,i,j,iq) = ( qtrc1_crg(
k,i,j,iq) -
qtrc(
k,i,j,iq) ) *
dens(
k,i,j) / dt_mp
892 temp(:,:,:),
dens(:,:,:), &
894 dqcrg(:,:,:), beta_crg(:,:,:) )
897 dens(:,:,:),
w(:,:,:),
qtrc(:,:,:,
qs_mp:
qe_mp), pres(:,:,:), temp(:,:,:), &
898 qdry(:,:,:), cptot(:,:,:), cvtot(:,:,:), ccn(:,:,:), dt_mp, real_cz(:,:,:), real_fz(:,:,:), &
899 rhoq_t_mp(:,:,:,
qs_mp:
qe_mp), rhoe_t(:,:,:), cptot_t(:,:,:), cvtot_t(:,:,:), evaporate(:,:,:),&
902 qsplt_in(:,:,:,:), sarea(:,:,:,:), &
907 dens(:,:,:),
w(:,:,:),
qtrc(:,:,:,
qs_mp:
qe_mp), pres(:,:,:), temp(:,:,:), &
908 qdry(:,:,:), cptot(:,:,:), cvtot(:,:,:), ccn(:,:,:), dt_mp, real_cz(:,:,:), real_fz(:,:,:), &
909 rhoq_t_mp(:,:,:,
qs_mp:
qe_mp), rhoe_t(:,:,:), cptot_t(:,:,:), cvtot_t(:,:,:), evaporate(:,:,:) )
918 temp(:,:,:),
dens(:,:,:), &
920 dqcrg(:,:,:), beta_crg(:,:,:) )
921 call atmos_phy_mp_suzuki10_tendency(
ka,
ks,
ke,
ia,
is,
ie,
ja,
js,
je,
kijmax, &
923 dens(:,:,:), pres(:,:,:), temp(:,:,:), &
925 cptot(:,:,:), cvtot(:,:,:), &
929 cptot_t(:,:,:), cvtot_t(:,:,:), &
932 dqcrg(:,:,:), beta_crg(:,:,:), &
934 qsplt_in(:,:,:,:), sarea(:,:,:,:), &
937 call atmos_phy_mp_suzuki10_tendency(
ka,
ks,
ke,
ia,
is,
ie,
ja,
js,
je,
kijmax, &
939 dens(:,:,:), pres(:,:,:), temp(:,:,:), &
941 cptot(:,:,:), cvtot(:,:,:), &
945 cptot_t(:,:,:), cvtot_t(:,:,:), &
954 call file_history_query( hist_hyd_id(iq), hist_sw(iq) )
957 if( hist_sw(iq) )
then
958 call file_history_put( hist_hyd_id(iq), qe(:,:,:,iq) )
969 call file_history_query( hist_crg_id(iq), hist_crg_sw(iq) )
972 if( hist_crg_sw(iq) )
then
973 call file_history_put( hist_crg_id(iq), qecrg(:,:,:,iq) )
985 rhoh_mp(
k,i,j) = rhoe_t(
k,i,j) &
986 - ( 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) ) ) &
987 *
dens(
k,i,j) * temp(
k,i,j)
996 if ( mp_do_precipitation )
then
1001 hist_vterm_idx(:) = -1
1004 call file_history_query( hist_vterm_id(iq), flag )
1007 hist_vterm_idx(iq) = ih
1011 allocate( vterm_hist(
ka,
ia,
ja,ih) )
1012 vterm_hist(:,:,:,:) = 0.0_rp
1036 fz(1:
ka) = real_fz(1:
ka,i,j)
1038 fdz(
ks-1) = real_cz(
ks,i,j) - real_fz(
ks-1,i,j)
1039 rfdz(
ks-1) = 1.0_rp / fdz(
ks-1)
1041 fdz(
k) = real_cz(
k+1,i,j) - real_cz(
k ,i,j)
1042 rfdz(
k) = 1.0_rp / fdz(
k)
1043 rcdz(
k) = 1.0_rp / ( real_fz(
k ,i,j) - real_fz(
k-1,i,j) )
1048 temp2(
k) = temp(
k,i,j)
1049 pres2(
k) = pres(
k,i,j)
1050 cptot2(
k) = cptot(
k,i,j)
1051 cvtot2(
k) = cvtot(
k,i,j)
1052 rhoe(
k) = temp(
k,i,j) * cvtot(
k,i,j) * dens2(
k)
1057 rhoq(
k,iq) = dens2(
k) *
qtrc(
k,i,j,iq) + rhoq_t_mp(
k,i,j,iq) * dt_mp
1058 rhoq2(
k,iq) = rhoq(
k,iq)
1065 rhoq2_crg(
k,iq) = dens2(
k) *
qtrc(
k,i,j,iq)
1070 sflx_rain(i,j) = 0.0_rp
1071 sflx_snow(i,j) = 0.0_rp
1072 sflx_engi(i,j) = 0.0_rp
1073 flx_hydro(:) = 0.0_rp
1074 do step = 1, mp_nstep_sedimentation
1080 dens2(:), rhoq2(:,:), &
1081 refstate_dens(:,i,j), &
1086 dens2(:), temp2(:), rhoq2(:,:), &
1091 dens2(:), temp2(:), rhoq2(:,:), pres2(:), &
1103 if ( hist_vterm_idx(iq) > 0 )
then
1105 vterm_hist(
k,i,j,hist_vterm_idx(iq)) = vterm_hist(
k,i,j,hist_vterm_idx(iq)) &
1106 + vterm(
k,iq) * mp_rnstep_sedimentation
1112 case (
'Upwind-Euler' )
1115 temp2(:), vterm(:,:), &
1117 mp_dtsec_sedimentation, &
1119 dens2(:), rhoq2(:,:), &
1120 cptot2(:), cvtot2(:), &
1122 mflux(:), sflux(:), &
1127 temp2(:), vterm(:,:), &
1128 fz(:), fdz(:), rcdz(:), &
1129 mp_dtsec_sedimentation, &
1131 dens2(:), rhoq2(:,:), &
1132 cptot2(:), cvtot2(:), &
1134 mflux(:), sflux(:), &
1145 case (
'Upwind-Euler' )
1148 temp2(:), vterm(:,
qhs:
qhe), &
1150 mp_dtsec_sedimentation, &
1152 dens2(:), rhoq2_crg(:,:), &
1153 cptot2(:), cvtot2(:), &
1155 mflux_crg(:), sflux_crg(:), &
1160 temp2(:), vterm(:,
qhs:
qhe), &
1161 fz(:), fdz(:), rcdz(:), &
1162 mp_dtsec_sedimentation, &
1164 dens2(:), rhoq2_crg(:,:), &
1165 cptot2(:), cvtot2(:), &
1167 mflux_crg(:), sflux_crg(:), &
1170 mflux_crg(:) = 0.0_rp
1171 sflux_crg(:) = 0.0_rp
1178 temp2(
k) = rhoe2(
k) / ( dens2(
k) * cvtot2(
k) )
1182 flx_hydro(
k) = flx_hydro(
k) + mflux(
k) * mp_rnstep_sedimentation
1185 sflx_rain(i,j) = sflx_rain(i,j) - sflux(1) * mp_rnstep_sedimentation
1186 sflx_snow(i,j) = sflx_snow(i,j) - sflux(2) * mp_rnstep_sedimentation
1187 sflx_engi(i,j) = sflx_engi(i,j) - eflux * mp_rnstep_sedimentation
1190 sflx_engi(i,j) = sflx_engi(i,j) - sflx_snow(i,j) *
lhf
1194 dens_t_mp(
k,i,j) = ( dens2(
k) -
dens(
k,i,j) ) / dt_mp
1198 cp_t = ( cptot2(
k) - cptot(
k,i,j) ) / dt_mp
1199 cv_t = ( cvtot2(
k) - cvtot(
k,i,j) ) / dt_mp
1200 rhoh_mp(
k,i,j) = rhoh_mp(
k,i,j) &
1201 + ( rhoe2(
k) - rhoe(
k) ) / dt_mp &
1202 - ( cp_t + log( pres(
k,i,j) / pre00 ) * ( cvtot(
k,i,j) / cptot(
k,i,j) * cp_t - cv_t ) ) &
1203 *
dens(
k,i,j) * temp(
k,i,j)
1213 rhoq_t_mp(
k,i,j,iq) = rhoq_t_mp(
k,i,j,iq) &
1214 + ( rhoq2(
k,iq) - rhoq(
k,iq) ) / dt_mp
1221 rhoc_t_mp(
k,i,j,iq) = rhoc_t_mp(
k,i,j,iq) &
1222 + ( rhoq2_crg(
k,iq) -
dens(
k,i,j) *
qtrc(
k,i,j,iq) ) / dt_mp
1229 dens(:,i,j),
momz(:,i,j),
u(:,i,j),
v(:,i,j), &
1232 momz_t_mp(:,i,j), rhou_t_mp(:,i,j), rhov_t_mp(:,i,j) )
1239 if ( hist_vterm_idx(iq) > 0 ) &
1240 call file_history_put( hist_vterm_id(iq), vterm_hist(:,:,:,hist_vterm_idx(iq)) )
1242 if (
allocated( vterm_hist ) )
deallocate( vterm_hist )
1251 precip(i,j) = sflx_rain(i,j) + sflx_snow(i,j)
1255 call file_history_in( sflx_rain(:,:),
'RAIN_MP',
'surface rain rate by MP',
'kg/m2/s', fill_halo=.true. )
1256 call file_history_in( sflx_snow(:,:),
'SNOW_MP',
'surface snow rate by MP',
'kg/m2/s', fill_halo=.true. )
1257 call file_history_in( precip(:,:),
'PREC_MP',
'surface precipitation rate by MP',
'kg/m2/s', fill_halo=.true. )
1258 call file_history_in( evaporate(:,:,:),
'EVAPORATE',
'evaporated cloud number',
'num/m3/s', fill_halo=.true. )
1260 call file_history_in( dens_t_mp(:,:,:),
'DENS_t_MP',
'tendency DENS in MP',
'kg/m3/s' , fill_halo=.true. )
1261 call file_history_in( momz_t_mp(:,:,:),
'MOMZ_t_MP',
'tendency MOMZ in MP',
'kg/m2/s2' , fill_halo=.true. )
1262 call file_history_in( rhou_t_mp(:,:,:),
'RHOU_t_MP',
'tendency RHOU in MP',
'kg/m2/s2' , fill_halo=.true. )
1263 call file_history_in( rhov_t_mp(:,:,:),
'RHOV_t_MP',
'tendency RHOV in MP',
'kg/m2/s2' , fill_halo=.true. )
1265 call file_history_in( rhoh_mp(:,:,:),
'RHOH_MP',
'diabatic heating rate in MP',
'J/m3/s', fill_halo=.true. )
1267 call file_history_in( rhoq_t_mp(:,:,:,iq), trim(
tracer_name(iq))//
'_t_MP', &
1268 'tendency rho*'//trim(
tracer_name(iq))//
' in MP',
'kg/m3/s', fill_halo=.true. )
1272 call file_history_in( qsplt_in(:,:,:,1),
'QSPLT_G',
'Charge split of QG by Non-inductive process',
'fC/m3/s', fill_halo=.true. )
1273 call file_history_in( qsplt_in(:,:,:,2),
'QSPLT_I',
'Charge split of QI by Non-inductive process',
'fC/m3/s', fill_halo=.true. )
1274 call file_history_in( qsplt_in(:,:,:,3),
'QSPLT_S',
'Charge split of QS by Non-inductive process',
'fC/m3/s', fill_halo=.true. )
1277 call file_history_in( rhoc_t_mp(:,:,:,iq), trim(
tracer_name(iq))//
'_t_MP', &
1278 'tendency rho*'//trim(
tracer_name(iq))//
' in MP',
'fC/m3/s', fill_halo=.true. )
1292 dens_t(
k,i,j) = dens_t(
k,i,j) + dens_t_mp(
k,i,j)
1293 momz_t(
k,i,j) = momz_t(
k,i,j) + momz_t_mp(
k,i,j)
1294 rhou_t(
k,i,j) = rhou_t(
k,i,j) + rhou_t_mp(
k,i,j)
1295 rhov_t(
k,i,j) = rhov_t(
k,i,j) + rhov_t_mp(
k,i,j)
1297 rhoh(
k,i,j) = rhoh(
k,i,j) + rhoh_mp(
k,i,j)
1308 rhoq_t(
k,i,j,iq) = rhoq_t(
k,i,j,iq) + rhoq_t_mp(
k,i,j,iq)
1319 rhoq_t(
k,i,j,iq) = rhoq_t(
k,i,j,iq) &
1320 + rhoc_t_mp(
k,i,j,iq)
1329 dens_t_mp(:,:,:),
'DENS_t_MP', &
1333 momz_t_mp(:,:,:),
'MOMZ_t_MP', &
1337 rhoh_mp(:,:,:),
'RHOH_MP', &
1347 rhoq_t_mp(:,:,:,iq), trim(
tracer_name(iq))//
'_t_MP', &
1357 KA, KS, KE, IA, IS, IE, JA, JS, JE, &
1377 integer,
intent(in) ::
ka,
ks,
ke
1378 integer,
intent(in) ::
ia,
is,
ie
1379 integer,
intent(in) ::
ja,
js,
je
1381 real(
rp),
intent(in) :: qv (
ka,
ia,
ja)
1394 qv(:,:,:), qhyd(:,:,:,:), &
1403 qtrc(
k,i,j,1) = qv(
k,i,j)
1415 qtrc(
k,i,j,1) = qv(
k,i,j)
1427 qtrc(
k,i,j,1) = qv(
k,i,j)
1440 qtrc(
k,i,j,1) = qv(
k,i,j)
1449 log_error(
"ATMOS_PHY_MP_driver_qhyd2qtrc",*)
'ATMOS_PHY_MP_TYPE (', trim(
atmos_phy_mp_type),
') is not supported'
1457 KA, KS, KE, IA, IS, IE, JA, JS, JE, &
1465 integer,
intent(in) ::
ka,
ks,
ke
1466 integer,
intent(in) ::
ia,
is,
ie
1467 integer,
intent(in) ::
ja,
js,
je
1469 real(
rp),
intent(in) :: qv (
ka,
ia,
ja)
1482 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_terminal_velocity(KA, KS, KE, DENS0, TEMP0, RHOQ0, vterm)
Lin-type cold rain microphysics (terminal velocity)
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
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_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
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
integer, parameter, public dp
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
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_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