Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions components/eam/bld/build-namelist
Original file line number Diff line number Diff line change
Expand Up @@ -3735,6 +3735,8 @@ add_default($nl, 'modal_strat_sulfate_aod_treatment');
add_default($nl, 'is_output_interactive_volc');
add_default($nl, 'mam_amicphys_optaa'); #for enabling amicphys code in eam
add_default($nl, 'n_so4_monolayers_pcage'); #number of so4(+nh4) monolayers needed to "age" a carbon particle
add_default($nl, 'dp_cut_accum_rename');
add_default($nl, 'dp_xferall_thresh_accum_rename');
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mingxuanwupnnl please add a brief description of the two namelist variables here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

added


# Microphysics scheme
add_default($nl, 'use_subcol_microp');
Expand Down
2 changes: 2 additions & 0 deletions components/eam/bld/namelist_files/namelist_defaults_eam.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1917,6 +1917,8 @@ with se_tstep, dt_remap_factor, dt_tracer_factor set to -1
<p3_wbf_coeff phys="default" clubb_sgs="1" microphys="p3"> 1.0 </p3_wbf_coeff>
<p3_nc_autocon_expon phys="default" clubb_sgs="1" microphys="p3"> -1.10D0 </p3_nc_autocon_expon>
<n_so4_monolayers_pcage phys="default" clubb_sgs="1" microphys="p3"> 3.0D0 </n_so4_monolayers_pcage>
<dp_cut_accum_rename phys="default"> 4.0D-7 </dp_cut_accum_rename>
<dp_xferall_thresh_accum_rename phys="default"> 4.0D-7 </dp_xferall_thresh_accum_rename>
<clubb_C1 phys="default"> 2.4 </clubb_C1>
<clubb_C11 phys="default"> 0.70 </clubb_C11>
<clubb_C11b phys="default"> 0.20 </clubb_C11b>
Expand Down
12 changes: 12 additions & 0 deletions components/eam/bld/namelist_files/namelist_definition.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4201,6 +4201,18 @@ number of so4(+nh4) monolayers needed to "age" a carbon particle
Default: Set by namelist
</entry>

<entry id="dp_cut_accum_rename" type="real" category="scavenging"
group="phys_ctl_nl" valid_values="" >
accum mode aerosol diameter threshold for renaming to strat coarse mode
Default: Set by namelist
</entry>

<entry id="dp_xferall_thresh_accum_rename" type="real" category="scavenging"
group="phys_ctl_nl" valid_values="" >
accum mode aerosol diameter threshold for renaming to strat coarse mode
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mingxuanwupnnl . Can you make the descriptions for these two namelist variables distinguishable?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mingxuanwupnnl @wlin7
dp_cut
Cutoff (geometric-mean) diameter for a lognormal mode. When growth pushes a mode’s mean size above dp_cut, the excess tail is shifted to the next larger mode. Applied each timestep to keep each mode’s mean/width physically reasonable.

dp_xferall_thresh
“Full-transfer” trigger. If the updated mean diameter of a mode exceeds this threshold, the entire mode (mass/number) is transferred to the next larger mode. This is a safety valve for runaway growth that dp_cut could not contain over prior steps.
Example: If the new mean diameter is 0.8 µm and dp_xferall_thresh = 0.6 µm, the mode is fully transferred—preventing an unphysical, oversized mean in that mode.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mingxuanwupnnl Based on Ziming's explanation, I suggest using the following brief description for the two namelist variables:
dp_cut_accum_rename: Cutoff diameter for larger accum mode particles renamed to the strat coarse mode
dp_xferall_thresh_accum_rename: Threshold diameter for all accum mode particles transferred to the strat coarse mode

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@wlin7 have revised the description according to @keziming 's explanation in three places

Default: Set by namelist
</entry>


<!-- Diagnostics -->

Expand Down
16 changes: 13 additions & 3 deletions components/eam/src/chemistry/modal_aero/modal_aero_amicphys.F90
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,11 @@ module modal_aero_amicphys
! aging criterion is approximate so do not try to distinguish
! sulfuric acid, bisulfate, ammonium sulfate

real(r8), public, protected :: dp_cut_accum_rename = huge(1.0_r8)
real(r8), public, protected :: dp_xferall_thresh_accum_rename = huge(1.0_r8)
! two accum mode aerosol diameter thresholds for renaming to strat coarse mode
! have to also change dgnumlo and dgnumhi in physprop accordingly to take effect

#if ( defined( CAMBOX_ACTIVATE_THIS ) )
integer, public :: cldy_rh_sameas_clear = 0
! this is only used for some specific box model tests
Expand Down Expand Up @@ -4550,11 +4555,11 @@ subroutine mam_rename_1subarea_strat( &
shrinkaa(n) = .false.
shrinkbb = .false. ! set initial value shrink switch: if calculate shrink fraction
if ( mtoo == ncrsf ) then ! stratosphere renaming
dp_cut(mfrm) = 4.0e-7_r8
dp_cut(mfrm) = dp_cut_accum_rename
lndp_cut(mfrm) = log( dp_cut(mfrm) )
dp_belowcut(mfrm) = 0.99*dp_cut(mfrm)
dp_xfernone_thresh(mfrm) = 1.0e-7_r8
dp_xferall_thresh(mfrm) = 4.0e-7_r8
dp_xferall_thresh(mfrm) = dp_xferall_thresh_accum_rename
end if
if (1>2) then ! turn off the shrink path for now
if ((mfrm == ncrsf .and. ncrsf > 0)) then
Expand Down Expand Up @@ -5994,7 +5999,8 @@ end subroutine gas_aer_uptkrates_1box1gas

!--------------------------------------------------------------------------------
!--------------------------------------------------------------------------------
subroutine modal_aero_amicphys_init( imozart, species_class,n_so4_monolayers_pcage_in)
subroutine modal_aero_amicphys_init( imozart, species_class,n_so4_monolayers_pcage_in, &
dp_cut_accum_rename_in, dp_xferall_thresh_accum_rename_in)

!-----------------------------------------------------------------------
!
Expand Down Expand Up @@ -6034,6 +6040,8 @@ subroutine modal_aero_amicphys_init( imozart, species_class,n_so4_monolayers_pca
integer, intent(in) :: imozart
integer, intent(in) :: species_class(:)
real(r8), intent(in) :: n_so4_monolayers_pcage_in
real(r8), intent(in) :: dp_cut_accum_rename_in
real(r8), intent(in) :: dp_xferall_thresh_accum_rename_in

!-----------------------------------------------------------------------
! local
Expand All @@ -6059,6 +6067,8 @@ subroutine modal_aero_amicphys_init( imozart, species_class,n_so4_monolayers_pca
n_so4_monolayers_pcage = n_so4_monolayers_pcage_in
dr_so4_monolayers_pcage = n_so4_monolayers_pcage * 4.76e-10

dp_cut_accum_rename = dp_cut_accum_rename_in
dp_xferall_thresh_accum_rename = dp_xferall_thresh_accum_rename_in

#if ( defined( CAMBOX_ACTIVATE_THIS ) )
ldiag82 = .true. ; lun82 = 82
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -425,6 +425,8 @@ subroutine modal_aero_initialize(pbuf2d, imozart, species_class)
integer :: numaerosols ! number of bulk aerosols in climate list
character(len=20) :: bulkname
real(r8) :: pi,n_so4_monolayers_pcage_in
real(r8) :: dp_cut_accum_rename_in
real(r8) :: dp_xferall_thresh_accum_rename_in
complex(r8), pointer :: refindex_aer_sw(:), &
refindex_aer_lw(:)
real(r8), pointer :: qqcw(:,:)
Expand All @@ -441,7 +443,9 @@ subroutine modal_aero_initialize(pbuf2d, imozart, species_class)
call phys_getopts(convproc_do_gas_out = convproc_do_gas, &
convproc_do_aer_out = convproc_do_aer, &
mam_amicphys_optaa_out = mam_amicphys_optaa, &
n_so4_monolayers_pcage_out = n_so4_monolayers_pcage_in)
n_so4_monolayers_pcage_out = n_so4_monolayers_pcage_in, &
dp_cut_accum_rename_out = dp_cut_accum_rename_in, &
dp_xferall_thresh_accum_rename_out = dp_xferall_thresh_accum_rename_in)


! Mode specific properties.
Expand Down Expand Up @@ -628,7 +632,9 @@ subroutine modal_aero_initialize(pbuf2d, imozart, species_class)
if ( mam_amicphys_optaa > 0 ) then
call modal_aero_calcsize_init( pbuf2d, species_class )
call modal_aero_newnuc_init( mam_amicphys_optaa )
call modal_aero_amicphys_init( imozart, species_class,n_so4_monolayers_pcage_in )
call modal_aero_amicphys_init( imozart, species_class,n_so4_monolayers_pcage_in, &
dp_cut_accum_rename_in, &
dp_xferall_thresh_accum_rename_in)
else
call modal_aero_rename_init
! calcsize call must follow rename call
Expand Down
12 changes: 11 additions & 1 deletion components/eam/src/physics/cam/phys_control.F90
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,8 @@ module phys_control
! newnuc, and coag routines)
! > 0 -- use new microphysics code (single call to amicphys routine)
real(r8) :: n_so4_monolayers_pcage = huge(1.0_r8) ! number of so4(+nh4) monolayers needed to "age" a carbon particle
real(r8) :: dp_cut_accum_rename = huge(1.0_r8) ! accum mode aerosol diameter threshold for renaming to strat coarse mode
real(r8) :: dp_xferall_thresh_accum_rename = huge(1.0_r8) ! accum mode aerosol diameter threshold for renaming to strat coarse mode
real(r8) :: micro_mg_accre_enhan_fac = huge(1.0_r8) !!Accretion enhancement factor
logical :: liqcf_fix = .false. ! liq cld fraction fix calc.
logical :: regen_fix = .false. ! aerosol regeneration bug fix for ndrop.F90
Expand Down Expand Up @@ -259,7 +261,8 @@ subroutine phys_ctl_readnl(nlfile)
cld_macmic_num_steps, micro_do_icesupersat, &
fix_g1_err_ndrop, ssalt_tuning, resus_fix, convproc_do_aer, &
convproc_do_gas, convproc_method_activate, liqcf_fix, regen_fix, demott_ice_nuc, pergro_mods, pergro_test_active, &
mam_amicphys_optaa, n_so4_monolayers_pcage,micro_mg_accre_enhan_fac, &
mam_amicphys_optaa, n_so4_monolayers_pcage, dp_cut_accum_rename, &
dp_xferall_thresh_accum_rename, micro_mg_accre_enhan_fac, &
cflx_cpl_opt, &
l_tracer_aero, l_vdiff, l_rayleigh, l_gw_drag, l_ac_energy_chk, &
l_bc_energy_fix, l_dry_adj, l_st_mac, l_st_mic, l_rad, prc_coef1,prc_exp,prc_exp1,cld_sed,mg_prc_coeff_fix, &
Expand Down Expand Up @@ -387,6 +390,8 @@ subroutine phys_ctl_readnl(nlfile)
call mpibcast(convproc_method_activate, 1 , mpiint, 0, mpicom)
call mpibcast(mam_amicphys_optaa, 1 , mpiint, 0, mpicom)
call mpibcast(n_so4_monolayers_pcage, 1 , mpir8, 0, mpicom)
call mpibcast(dp_cut_accum_rename, 1 , mpir8, 0, mpicom)
call mpibcast(dp_xferall_thresh_accum_rename, 1 , mpir8, 0, mpicom)
call mpibcast(micro_mg_accre_enhan_fac, 1 , mpir8, 0, mpicom)
call mpibcast(liqcf_fix, 1 , mpilog, 0, mpicom)
call mpibcast(regen_fix, 1 , mpilog, 0, mpicom)
Expand Down Expand Up @@ -618,6 +623,7 @@ subroutine phys_getopts(deep_scheme_out, shallow_scheme_out, eddy_scheme_out, &
cld_macmic_num_steps_out, micro_do_icesupersat_out, &
fix_g1_err_ndrop_out, ssalt_tuning_out,resus_fix_out,convproc_do_aer_out, &
convproc_do_gas_out, convproc_method_activate_out, mam_amicphys_optaa_out, n_so4_monolayers_pcage_out, &
dp_cut_accum_rename_out, dp_xferall_thresh_accum_rename_out, &
micro_mg_accre_enhan_fac_out, liqcf_fix_out, regen_fix_out,demott_ice_nuc_out, pergro_mods_out, pergro_test_active_out &
,cflx_cpl_opt_out &
,l_tracer_aero_out, l_vdiff_out, l_rayleigh_out, l_gw_drag_out, l_ac_energy_chk_out &
Expand Down Expand Up @@ -710,6 +716,8 @@ subroutine phys_getopts(deep_scheme_out, shallow_scheme_out, eddy_scheme_out, &
integer, intent(out), optional :: convproc_method_activate_out
integer, intent(out), optional :: mam_amicphys_optaa_out
real(r8), intent(out), optional :: n_so4_monolayers_pcage_out
real(r8), intent(out), optional :: dp_cut_accum_rename_out
real(r8), intent(out), optional :: dp_xferall_thresh_accum_rename_out
real(r8), intent(out), optional :: micro_mg_accre_enhan_fac_out
logical, intent(out), optional :: liqcf_fix_out
logical, intent(out), optional :: regen_fix_out
Expand Down Expand Up @@ -816,6 +824,8 @@ subroutine phys_getopts(deep_scheme_out, shallow_scheme_out, eddy_scheme_out, &
if ( present(convproc_method_activate_out ) ) convproc_method_activate_out = convproc_method_activate
if ( present(mam_amicphys_optaa_out ) ) mam_amicphys_optaa_out = mam_amicphys_optaa
if ( present(n_so4_monolayers_pcage_out ) ) n_so4_monolayers_pcage_out = n_so4_monolayers_pcage
if ( present(dp_cut_accum_rename_out ) ) dp_cut_accum_rename_out = dp_cut_accum_rename
if ( present(dp_xferall_thresh_accum_rename_out ) ) dp_xferall_thresh_accum_rename_out = dp_xferall_thresh_accum_rename
if ( present(micro_mg_accre_enhan_fac_out)) micro_mg_accre_enhan_fac_out = micro_mg_accre_enhan_fac
if ( present(liqcf_fix_out ) ) liqcf_fix_out = liqcf_fix
if ( present(regen_fix_out ) ) regen_fix_out = regen_fix
Expand Down