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 3a1df303f44..2181c24ba08 100644 --- a/components/eamxx/src/physics/p3/eamxx_p3_process_interface.cpp +++ b/components/eamxx/src/physics/p3/eamxx_p3_process_interface.cpp @@ -219,44 +219,8 @@ void P3Microphysics::init_buffers(const ATMBufferManager &buffer_manager) // ========================================================================================= 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.autoconversion_prefactor = - m_params.get("autoconversion_prefactor", 1350.0); - runtime_options.autoconversion_qc_exponent = - m_params.get("autoconversion_qc_exponent", 2.47); - runtime_options.autoconversion_nc_exponent = - m_params.get("autoconversion_nc_exponent", 1.79); - runtime_options.autoconversion_radius = - m_params.get("autoconversion_radius", 25.0e-6); - runtime_options.accretion_prefactor = - m_params.get("accretion_prefactor", 67.0); - runtime_options.accretion_qc_exponent = - m_params.get("accretion_qc_exponent", 1.15); - runtime_options.accretion_qr_exponent = - m_params.get("accretion_qr_exponent", 1.15); - runtime_options.rain_selfcollection_prefactor = - m_params.get("rain_selfcollection_prefactor", 5.78); - runtime_options.rain_selfcollection_breakup_diameter = - m_params.get("rain_selfcollection_breakup_diameter", 0.00028); - runtime_options.constant_mu_rain = - m_params.get("constant_mu_rain", 1.0); - runtime_options.spa_ccn_to_nc_factor = - m_params.get("spa_ccn_to_nc_factor", 1.0); - runtime_options.cldliq_to_ice_collection_factor = - m_params.get("cldliq_to_ice_collection_factor", 0.5); - runtime_options.rain_to_ice_collection_factor = - m_params.get("rain_to_ice_collection_factor", 1.0); - runtime_options.min_rime_rho = m_params.get("min_rime_rho", 50.0); - runtime_options.max_rime_rho = m_params.get("max_rime_rho", 900.0); - runtime_options.immersion_freezing_exponent = - m_params.get("immersion_freezing_exponent", 0.65); - runtime_options.deposition_nucleation_exponent = - m_params.get("deposition_nucleation_exponent", 0.304); - runtime_options.ice_sedimentation_factor = - m_params.get("ice_sedimentation_factor", 1.0); - runtime_options.do_ice_production = - m_params.get("do_ice_production", true); + // Gather runtime options from file + runtime_options.load_runtime_options_from_file(m_params); // Set property checks for fields in this process add_invariant_check(get_field_out("T_mid"),m_grid,100.0,500.0,false); diff --git a/components/eamxx/src/physics/p3/p3_functions.hpp b/components/eamxx/src/physics/p3/p3_functions.hpp index 7a9f3f1561b..72a2d536ad1 100644 --- a/components/eamxx/src/physics/p3/p3_functions.hpp +++ b/components/eamxx/src/physics/p3/p3_functions.hpp @@ -7,6 +7,7 @@ #include "ekat/ekat_pack_kokkos.hpp" #include "ekat/ekat_workspace.hpp" +#include "ekat/ekat_parameter_list.hpp" namespace scream { namespace p3 { @@ -129,6 +130,30 @@ struct Functions Scalar deposition_nucleation_exponent = 0.304; Scalar ice_sedimentation_factor = 1.0; bool do_ice_production = true; + + void load_runtime_options_from_file(ekat::ParameterList& m_params) { + max_total_ni = m_params.get("max_total_ni", 740.0e3); + autoconversion_prefactor = m_params.get("autoconversion_prefactor", 1350.0); + autoconversion_qc_exponent = m_params.get("autoconversion_qc_exponent", 2.47); + autoconversion_nc_exponent = m_params.get("autoconversion_nc_exponent", 1.79); + autoconversion_radius = m_params.get("autoconversion_radius", 25.0e-6); + accretion_prefactor = m_params.get("accretion_prefactor", 67.0); + accretion_qc_exponent = m_params.get("accretion_qc_exponent", 1.15); + accretion_qr_exponent = m_params.get("accretion_qr_exponent", 1.15); + rain_selfcollection_prefactor = m_params.get("rain_selfcollection_prefactor", 5.78); + rain_selfcollection_breakup_diameter = m_params.get("rain_selfcollection_breakup_diameter", 0.00028); + constant_mu_rain = m_params.get("constant_mu_rain", 1.0); + spa_ccn_to_nc_factor = m_params.get("spa_ccn_to_nc_factor", 1.0); + cldliq_to_ice_collection_factor = m_params.get("cldliq_to_ice_collection_factor", 0.5); + rain_to_ice_collection_factor = m_params.get("rain_to_ice_collection_factor", 1.0); + min_rime_rho = m_params.get("min_rime_rho", 50.0); + max_rime_rho = m_params.get("max_rime_rho", 900.0); + immersion_freezing_exponent = m_params.get("immersion_freezing_exponent", 0.65); + deposition_nucleation_exponent = m_params.get("deposition_nucleation_exponent", 0.304); + ice_sedimentation_factor = m_params.get("ice_sedimentation_factor", 1.0); + do_ice_production = m_params.get("do_ice_production", true); + } + }; // This struct stores prognostic variables evolved by P3.