Skip to content

Commit

Permalink
accr/auto runtime
Browse files Browse the repository at this point in the history
  • Loading branch information
mahf708 committed Oct 11, 2024
1 parent 73446d8 commit 938631a
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 13 deletions.
8 changes: 6 additions & 2 deletions components/eamxx/cime_config/namelist_defaults_scream.xml
Original file line number Diff line number Diff line change
Expand Up @@ -202,10 +202,14 @@ be lost if SCREAM_HACK_XML is not enabled.
${DIN_LOC_ROOT}/atm/scream/tables/vn_table_vals.dat8,
${DIN_LOC_ROOT}/atm/scream/tables/vm_table_vals.dat8
</tables>
<p3_autoconversion_prefactor type="real" doc="P3 autoconversion_prefactor (scale factor in autoconversion)">1350.0</p3_autoconversion_prefactor>
<p3_autoconversion_prefactor type="real" doc="Autoconversion linear prefactor in P3">1350.0</p3_autoconversion_prefactor>
<p3_autoconversion_qc_exponent type="real" doc="Autoconversion qc exponent in P3">2.47</p3_autoconversion_qc_exponent>
<p3_autoconversion_nc_exponent type="real" doc="Autoconversion nc exponent in P3">1.79</p3_autoconversion_nc_exponent>
<p3_accretion_prefactor type="real" doc="Accretion linear prefactor in P3">67.0</p3_accretion_prefactor>
<p3_accretion_qc_exponent type="real" doc="Accretion qc exponent in P3">1.15</p3_accretion_qc_exponent>
<p3_accretion_qr_exponent type="real" doc="Accretion qr exponent in P3">1.15</p3_accretion_qr_exponent>
<p3_mu_r_constant type="real" doc="P3 mu_r_constant (rain shape parameter in gamma drop-size distribution)">1.0</p3_mu_r_constant>
<p3_spa_to_nc type="real" doc="P3 spa_to_nc (scaling factor for turning CCN into nc in SPA)">1.0</p3_spa_to_nc>
<p3_k_accretion type="real" doc="P3 k_accretion (scaling factor on accretion)">67.0</p3_k_accretion>
<p3_eci type="real" doc="P3 eci (liquid/ice collision/collection coefficient)">0.5</p3_eci>
<p3_eri type="real" doc="P3 eri (ice/rain collision/collection coefficient)">1.0</p3_eri>
<p3_rho_rime_min type="real" doc="P3 rho_rime_min (riming density maximum)">50.0</p3_rho_rime_min>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -222,9 +222,13 @@ void P3Microphysics::initialize_impl (const RunType /* run_type */)
// Gather runtime options
runtime_options.max_total_ni = m_params.get<double>("max_total_ni", 740.0e3);
runtime_options.p3_autoconversion_prefactor = m_params.get<double>("p3_autoconversion_prefactor", 1350.0);
runtime_options.p3_autoconversion_qc_exponent = m_params.get<double>("p3_autoconversion_qc_exponent", 2.47);
runtime_options.p3_autoconversion_nc_exponent = m_params.get<double>("p3_autoconversion_nc_exponent", 1.79);
runtime_options.p3_accretion_prefactor = m_params.get<double>("p3_accretion_prefactor", 67.0);
runtime_options.p3_accretion_qc_exponent = m_params.get<double>("p3_accretion_qc_exponent", 1.15);
runtime_options.p3_accretion_qr_exponent = m_params.get<double>("p3_accretion_qr_exponent", 1.15);
runtime_options.p3_mu_r_constant = m_params.get<double>("p3_mu_r_constant", 1.0);
runtime_options.p3_spa_to_nc = m_params.get<double>("p3_spa_to_nc", 1.0);
runtime_options.p3_k_accretion = m_params.get<double>("p3_k_accretion", 67.0);
runtime_options.p3_eci = m_params.get<double>("p3_eci", 0.5);
runtime_options.p3_eri = m_params.get<double>("p3_eri", 1.0);
runtime_options.p3_rho_rime_min = m_params.get<double>("p3_rho_rime_min", 50.0);
Expand Down
16 changes: 11 additions & 5 deletions components/eamxx/src/physics/p3/impl/p3_autoconversion_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,23 @@ ::cloud_water_autoconversion(
constexpr Scalar CONS3 = C::CONS3;

const Scalar p3_autoconversion_prefactor = runtime_options.p3_autoconversion_prefactor;
const Scalar p3_autoconversion_qc_exponent = runtime_options.p3_autoconversion_qc_exponent;
const Scalar p3_autoconversion_nc_exponent = runtime_options.p3_autoconversion_nc_exponent;

if(qc_not_small.any()){
if(qc_not_small.any()) {
Spack sgs_var_coef;
// sgs_var_coef = subgrid_variance_scaling(inv_qc_relvar, sp(2.47) );
sgs_var_coef = 1;

qc2qr_autoconv_tend.set(qc_not_small,
sgs_var_coef*p3_autoconversion_prefactor*pow(qc_incld,sp(2.47))*pow(nc_incld*sp(1.e-6)*rho,sp(-1.79)));
qc2qr_autoconv_tend.set(
qc_not_small, sgs_var_coef * p3_autoconversion_prefactor *
pow(qc_incld, sp(p3_autoconversion_qc_exponent)) *
pow(nc_incld * sp(1.e-6) * rho,
sp(-1 * p3_autoconversion_nc_exponent)));
// note: ncautr is change in Nr; nc2nr_autoconv_tend is change in Nc
ncautr.set(qc_not_small, qc2qr_autoconv_tend*CONS3);
nc2nr_autoconv_tend.set(qc_not_small, qc2qr_autoconv_tend*nc_incld/qc_incld);
ncautr.set(qc_not_small, qc2qr_autoconv_tend * CONS3);
nc2nr_autoconv_tend.set(qc_not_small,
qc2qr_autoconv_tend * nc_incld / qc_incld);
}

nc2nr_autoconv_tend.set(qc2qr_autoconv_tend == 0 && context, 0);
Expand Down
13 changes: 9 additions & 4 deletions components/eamxx/src/physics/p3/impl/p3_cloud_rain_acc_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,23 @@ ::cloud_rain_accretion(
{
constexpr Scalar qsmall = C::QSMALL;

const Scalar p3_k_accretion = runtime_options.p3_k_accretion;;
const Scalar p3_accretion_prefactor = runtime_options.p3_accretion_prefactor;
const Scalar p3_accretion_qc_exponent = runtime_options.p3_accretion_qc_exponent;
const Scalar p3_accretion_qr_exponent = runtime_options.p3_accretion_qr_exponent;

Spack sgs_var_coef;
// sgs_var_coef = subgrid_variance_scaling(inv_qc_relvar, sp(1.15) );
sgs_var_coef = 1;

const auto qr_and_qc_not_small = (qr_incld >= qsmall) && (qc_incld >= qsmall) && context;
if (qr_and_qc_not_small.any()) {
if(qr_and_qc_not_small.any()) {
// Khroutdinov and Kogan (2000)
qc2qr_accret_tend.set(qr_and_qc_not_small,
sgs_var_coef * sp(p3_k_accretion) * pow(qc_incld * qr_incld, sp(1.15)));
nc_accret_tend.set(qr_and_qc_not_small, qc2qr_accret_tend * nc_incld / qc_incld);
sgs_var_coef * sp(p3_accretion_prefactor) *
pow(qc_incld, sp(p3_accretion_qc_exponent)) *
pow(qr_incld, sp(p3_accretion_qr_exponent)));
nc_accret_tend.set(qr_and_qc_not_small,
qc2qr_accret_tend * nc_incld / qc_incld);

qc2qr_accret_tend.set(nc_accret_tend == 0 && context, 0);
nc_accret_tend.set(qc2qr_accret_tend == 0 && context, 0);
Expand Down
6 changes: 5 additions & 1 deletion components/eamxx/src/physics/p3/p3_functions.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -111,9 +111,13 @@ struct Functions
struct P3Runtime {
Scalar max_total_ni = 740.0e3;
Scalar p3_autoconversion_prefactor = 1350.0;
Scalar p3_autoconversion_qc_exponent = 2.47;
Scalar p3_autoconversion_nc_exponent = 1.79;
Scalar p3_accretion_prefactor = 67.0;
Scalar p3_accretion_qc_exponent = 1.15;
Scalar p3_accretion_qr_exponent = 1.15;
Scalar p3_mu_r_constant = 1.0;
Scalar p3_spa_to_nc = 1.0;
Scalar p3_k_accretion = 67.0;
Scalar p3_eci = 0.5;
Scalar p3_eri = 1.0;
Scalar p3_rho_rime_min = 50.0;
Expand Down

0 comments on commit 938631a

Please sign in to comment.