Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
18 changes: 11 additions & 7 deletions src/mam4xx/aero_model.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -627,8 +627,13 @@ inline void modal_aero_bcscavcoef_init(

// =============================================================================
KOKKOS_INLINE_FUNCTION
void define_act_frac(const int lphase, const int imode, Real &sol_facti,
Real &sol_factic, Real &sol_factb, Real &f_act_conv) {
void define_act_frac(const int lphase, const int imode,
const Real scav_fraction_in_cloud_strat,
const Real scav_fraction_in_cloud_conv,
const Real scav_fraction_below_cloud_strat,
const Real activation_fraction_in_cloud_conv,
Real &sol_facti, Real &sol_factic, Real &sol_factb,
Real &f_act_conv) {
// clang-format off
// -----------------------------------------------------------------------
// define sol_factb and sol_facti values, and f_act_conv
Expand Down Expand Up @@ -668,7 +673,6 @@ void define_act_frac(const int lphase, const int imode, Real &sol_facti,
*/
// clang-format on
const int modeptr_pcarbon = static_cast<int>(mam4::ModeIndex::PrimaryCarbon);
const Real sol_facti_cloud_borne = 1.0;
if (lphase == 1) { // interstial aerosol
sol_facti = 0.0; // strat in-cloud scav totally OFF for institial
// if modal aero convproc is turned on for aerosols, then
Expand All @@ -677,20 +681,20 @@ void define_act_frac(const int lphase, const int imode, Real &sol_facti,
// and turn off the outfld SFWET, SFSIC, SFSID, SFSEC, and SFSED calls
// for (stratiform)-cloudborne aerosols, convective wet removal
// (all forms) is zero, so no action is needed
sol_factic = 0.0;
sol_factic = scav_fraction_in_cloud_conv;
// all below-cloud scav ON (0.1 "tuning factor")
sol_factb = 0.03;
sol_factb = scav_fraction_below_cloud_strat;
if (imode == modeptr_pcarbon)
f_act_conv = 0.0;
else
f_act_conv = 0.4;
f_act_conv = activation_fraction_in_cloud_conv;

} else {
// cloud-borne aerosol (borne by stratiform cloud drops)
// all below-cloud scav OFF (anything cloud-borne is located "in-cloud")
sol_factb = 0.0;
// strat in-cloud scav totally ON for cloud-borne
sol_facti = haero::min(0.6, sol_facti_cloud_borne);
sol_facti = haero::min(0.6, scav_fraction_in_cloud_strat);
// conv in-cloud scav OFF (having this on would mean
// that conv precip collects strat droplets)
sol_factic = 0.0;
Expand Down
22 changes: 17 additions & 5 deletions src/mam4xx/wet_dep.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1305,10 +1305,17 @@ KOKKOS_INLINE_FUNCTION
void define_act_frac(const ThreadTeam &team, const View1D &sol_facti,
const View1D &sol_factic, const View1D &sol_factb,
const View1D &f_act_conv, const int lphase,
const int imode, const int nlev) {
const int imode, const int nlev,
const Real scav_fraction_in_cloud_strat,
const Real scav_fraction_in_cloud_conv,
const Real scav_fraction_below_cloud_strat,
const Real activation_fraction_in_cloud_conv) {
Kokkos::parallel_for(Kokkos::TeamVectorRange(team, nlev), [&](int k) {
aero_model::define_act_frac(lphase, imode, sol_facti[k], sol_factic[k],
sol_factb[k], f_act_conv[k]);
aero_model::define_act_frac(lphase, imode, scav_fraction_in_cloud_strat,
scav_fraction_in_cloud_conv,
scav_fraction_below_cloud_strat,
activation_fraction_in_cloud_conv, sol_facti[k],
sol_factic[k], sol_factb[k], f_act_conv[k]);
});
}

Expand Down Expand Up @@ -1564,7 +1571,10 @@ int get_aero_model_wetdep_work_len() {
KOKKOS_INLINE_FUNCTION
void aero_model_wetdep(
const ThreadTeam &team, const Atmosphere &atm, Prognostics &progs,
Tendencies &tends, const Real dt,
Tendencies &tends, const Real dt, const Real scav_fraction_in_cloud_strat,
const Real scav_fraction_in_cloud_conv,
const Real scav_fraction_below_cloud_strat,
const Real activation_fraction_in_cloud_conv,
// inputs
const haero::ConstColumnView &cldt, const haero::ConstColumnView &rprdsh,
const haero::ConstColumnView &rprddp, const haero::ConstColumnView &evapcdp,
Expand Down Expand Up @@ -1963,7 +1973,9 @@ void aero_model_wetdep(
// outputs
sol_facti, sol_factic, sol_factb, f_act_conv,
// inputs
lphase, imode, nlev);
lphase, imode, nlev, scav_fraction_in_cloud_strat,
scav_fraction_in_cloud_conv, scav_fraction_below_cloud_strat,
activation_fraction_in_cloud_conv);

// REASTER 08/12/2015 - changed ordering (mass then number) for
// prevap resuspend to coarse loop over number + chem constituents +
Expand Down
28 changes: 17 additions & 11 deletions src/validation/aero_model/aero_model_wetdep.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -181,17 +181,23 @@ void aero_model_wetdep(Ensemble *ensemble) {
});
team.team_barrier();

wetdep::aero_model_wetdep(team, atm, progs_in, tends_in, dt,
// inputs
cldt, rprdsh, rprddp, evapcdp, evapcsh,
dp_frac, sh_frac, icwmrdp, icwmrsh, evapr,
// outputs
dlf, prain, scavimptblnum, scavimptblvol,
cal_data, wet_geometric_mean_diameter_i,
dry_geometric_mean_diameter_i, qaerwat,
wetdens,
// output
aerdepwetis, aerdepwetcw, work, isprx);
const Real scav_fraction_in_cloud_strat = 1.00;
const Real scav_fraction_in_cloud_conv = 0.00;
const Real cav_fraction_below_cloud_strat = 0.03;
const Real activation_fraction_in_cloud_conv = 0.40;
wetdep::aero_model_wetdep(
team, atm, progs_in, tends_in, dt, scav_fraction_in_cloud_strat,
scav_fraction_in_cloud_conv, cav_fraction_below_cloud_strat,
activation_fraction_in_cloud_conv,
// inputs
cldt, rprdsh, rprddp, evapcdp, evapcsh, dp_frac, sh_frac, icwmrdp,
icwmrsh, evapr,
// outputs
dlf, prain, scavimptblnum, scavimptblvol, cal_data,
wet_geometric_mean_diameter_i, dry_geometric_mean_diameter_i,
qaerwat, wetdens,
// output
aerdepwetis, aerdepwetcw, work, isprx);

team.team_barrier();
Kokkos::parallel_for(
Expand Down