From 938631a0156c6e7c26e8392516dacdfe04105599 Mon Sep 17 00:00:00 2001 From: mahf708 Date: Thu, 10 Oct 2024 18:12:50 -0700 Subject: [PATCH] accr/auto runtime --- .../cime_config/namelist_defaults_scream.xml | 8 ++++++-- .../physics/p3/eamxx_p3_process_interface.cpp | 6 +++++- .../physics/p3/impl/p3_autoconversion_impl.hpp | 16 +++++++++++----- .../physics/p3/impl/p3_cloud_rain_acc_impl.hpp | 13 +++++++++---- components/eamxx/src/physics/p3/p3_functions.hpp | 6 +++++- 5 files changed, 36 insertions(+), 13 deletions(-) diff --git a/components/eamxx/cime_config/namelist_defaults_scream.xml b/components/eamxx/cime_config/namelist_defaults_scream.xml index 6f7e80bc619..1aafbe2af54 100644 --- a/components/eamxx/cime_config/namelist_defaults_scream.xml +++ b/components/eamxx/cime_config/namelist_defaults_scream.xml @@ -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 - 1350.0 + 1350.0 + 2.47 + 1.79 + 67.0 + 1.15 + 1.15 1.0 1.0 - 67.0 0.5 1.0 50.0 diff --git a/components/eamxx/src/physics/p3/eamxx_p3_process_interface.cpp b/components/eamxx/src/physics/p3/eamxx_p3_process_interface.cpp index e822435d870..71c28dbb0bd 100644 --- a/components/eamxx/src/physics/p3/eamxx_p3_process_interface.cpp +++ b/components/eamxx/src/physics/p3/eamxx_p3_process_interface.cpp @@ -222,9 +222,13 @@ void P3Microphysics::initialize_impl (const RunType /* run_type */) // Gather runtime options runtime_options.max_total_ni = m_params.get("max_total_ni", 740.0e3); runtime_options.p3_autoconversion_prefactor = m_params.get("p3_autoconversion_prefactor", 1350.0); + runtime_options.p3_autoconversion_qc_exponent = m_params.get("p3_autoconversion_qc_exponent", 2.47); + runtime_options.p3_autoconversion_nc_exponent = m_params.get("p3_autoconversion_nc_exponent", 1.79); + runtime_options.p3_accretion_prefactor = m_params.get("p3_accretion_prefactor", 67.0); + runtime_options.p3_accretion_qc_exponent = m_params.get("p3_accretion_qc_exponent", 1.15); + runtime_options.p3_accretion_qr_exponent = m_params.get("p3_accretion_qr_exponent", 1.15); runtime_options.p3_mu_r_constant = m_params.get("p3_mu_r_constant", 1.0); runtime_options.p3_spa_to_nc = m_params.get("p3_spa_to_nc", 1.0); - runtime_options.p3_k_accretion = m_params.get("p3_k_accretion", 67.0); runtime_options.p3_eci = m_params.get("p3_eci", 0.5); runtime_options.p3_eri = m_params.get("p3_eri", 1.0); runtime_options.p3_rho_rime_min = m_params.get("p3_rho_rime_min", 50.0); diff --git a/components/eamxx/src/physics/p3/impl/p3_autoconversion_impl.hpp b/components/eamxx/src/physics/p3/impl/p3_autoconversion_impl.hpp index d5cbd752314..76cfbf4e439 100644 --- a/components/eamxx/src/physics/p3/impl/p3_autoconversion_impl.hpp +++ b/components/eamxx/src/physics/p3/impl/p3_autoconversion_impl.hpp @@ -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); diff --git a/components/eamxx/src/physics/p3/impl/p3_cloud_rain_acc_impl.hpp b/components/eamxx/src/physics/p3/impl/p3_cloud_rain_acc_impl.hpp index 9cf251be3a8..0bf60e32338 100644 --- a/components/eamxx/src/physics/p3/impl/p3_cloud_rain_acc_impl.hpp +++ b/components/eamxx/src/physics/p3/impl/p3_cloud_rain_acc_impl.hpp @@ -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); diff --git a/components/eamxx/src/physics/p3/p3_functions.hpp b/components/eamxx/src/physics/p3/p3_functions.hpp index 24e8dd7998c..bfa4737cbce 100644 --- a/components/eamxx/src/physics/p3/p3_functions.hpp +++ b/components/eamxx/src/physics/p3/p3_functions.hpp @@ -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;