From f6344fe40815c0f7707a53847dd39bc0a7d5f2ce Mon Sep 17 00:00:00 2001 From: Piotr Dziekan Date: Thu, 25 May 2023 11:28:14 +0200 Subject: [PATCH 1/2] fix a typo in dot_nr limiter --- src/solvers/blk_2m/update_rhs_blk_2m_common.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/solvers/blk_2m/update_rhs_blk_2m_common.hpp b/src/solvers/blk_2m/update_rhs_blk_2m_common.hpp index c3e0113285..ef380fca3d 100644 --- a/src/solvers/blk_2m/update_rhs_blk_2m_common.hpp +++ b/src/solvers/blk_2m/update_rhs_blk_2m_common.hpp @@ -118,7 +118,7 @@ void slvr_blk_2m_common::update_rhs( dot_rc = where(dot_rc * dt <= -rc, -rc / dt, dot_rc); dot_rr = where(dot_rr * dt <= -rr, -rr / dt, dot_rr); dot_nc = where(dot_nc * dt <= -nc, -nc / dt, dot_nc); - dot_nr = where(dot_nr * dt <= -rr, -rr / dt, dot_nr); + dot_nr = where(dot_nr * dt <= -nr, -nr / dt, dot_nr); this->mem->barrier(); From 63489490a1873d7e79a84318d4aa1e82771c546d Mon Sep 17 00:00:00 2001 From: Piotr Dziekan Date: Thu, 25 May 2023 17:23:00 +0200 Subject: [PATCH 2/2] turb_diss_rate option for ILES --- CMakeLists.txt | 4 ++-- src/opts/opts_lgrngn.hpp | 13 +++++++++++++ src/solvers/lgrngn/hook_ante_loop_lgrngn.hpp | 1 + .../lgrngn/hook_mixed_rhs_ante_step_lgrngn.hpp | 6 +++--- src/solvers/slvr_lgrngn.hpp | 5 +++++ 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ab8a6ce7a8..9eacd8cb91 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -128,9 +128,9 @@ target_link_libraries(uwlcm clphxx::cloudphxx_lgrngn ) -# enabling c++14, but not gnu++14 +# enabling c++17, but not gnu++17 set_target_properties(uwlcm PROPERTIES CXX_EXTENSIONS OFF) -target_compile_features(uwlcm PRIVATE cxx_std_14) +target_compile_features(uwlcm PRIVATE cxx_std_17) # search for Boost find_package(Boost COMPONENTS thread iostreams system timer program_options filesystem REQUIRED) diff --git a/src/opts/opts_lgrngn.hpp b/src/opts/opts_lgrngn.hpp index 631be39577..eba9481552 100644 --- a/src/opts/opts_lgrngn.hpp +++ b/src/opts/opts_lgrngn.hpp @@ -76,6 +76,7 @@ void setopts_micro( ("turb_cond", po::value()->default_value(rt_params.cloudph_opts.turb_cond), "turbulence effects in SD condensation (1=on, 0=off)") ("turb_adve", po::value()->default_value(rt_params.cloudph_opts.turb_adve), "turbulence effects in SD motion (1=on, 0=off)") ("turb_coal", po::value()->default_value(rt_params.cloudph_opts.turb_coal) , "turbulence effects in SD coalescence (1=on, 0=off)") + ("turb_diss_rate", po::value()->default_value(-1), "TKE dissipation rate (constant) [cm^2/s^3] used in SGS turbulence models in SDM microphysics in ILES. In LES with Smagroinsky, dissipation rate is diagnosed from the flow.") ("ReL", po::value()->default_value(100) , "taylor-microscale reynolds number (onishi kernel)") ("out_dry_spec", po::value()->default_value(false), "enable output for plotting dry spectrum") ("out_wet_spec", po::value()->default_value(false), "enable output for plotting wet spectrum") @@ -425,6 +426,18 @@ void setopts_micro( rt_params.cloudph_opts_init.turb_adve_switch = vm["turb_adve"].as(); rt_params.cloudph_opts.turb_adve = vm["turb_adve"].as(); + + rt_params.turb_diss_rate = vm["turb_diss_rate"].as(); + + if constexpr(solver_t::ct_params_t_::sgs_scheme != libmpdataxx::solvers::iles) // SGS + { + if(rt_params.turb_diss_rate >= 0) throw std::runtime_error("turb_diss_rate cannot be set in a simulation with the Smagorinsky model (--sgs=1). It is diagnosed from the flow."); + } + else // ILES + { + if( (rt_params.cloudph_opts.turb_cond || rt_params.cloudph_opts.turb_adve || rt_params.cloudph_opts.turb_coal) && rt_params.turb_diss_rate < 0) + throw std::runtime_error("turb_cond/adve/coal in ILES require turb_diss_rate >= 0"); + } // subsidence of SDs rt_params.cloudph_opts_init.subs_switch = rt_params.subsidence; diff --git a/src/solvers/lgrngn/hook_ante_loop_lgrngn.hpp b/src/solvers/lgrngn/hook_ante_loop_lgrngn.hpp index 96f7278fc5..dc5a5aa824 100644 --- a/src/solvers/lgrngn/hook_ante_loop_lgrngn.hpp +++ b/src/solvers/lgrngn/hook_ante_loop_lgrngn.hpp @@ -167,6 +167,7 @@ void slvr_lgrngn::hook_ante_loop(int nt) this->record_aux_const("turb_adve", "lgrngn", params.cloudph_opts.turb_adve); this->record_aux_const("turb_cond", "lgrngn", params.cloudph_opts.turb_cond); this->record_aux_const("turb_coal", "lgrngn", params.cloudph_opts.turb_coal); + this->record_aux_const("turb_diss_rate", "lgrngn", params.turb_diss_rate); this->record_aux_const("chem_switch", "lgrngn", params.cloudph_opts_init.chem_switch); this->record_aux_const("coal_switch", "lgrngn", params.cloudph_opts_init.coal_switch); this->record_aux_const("sedi_switch", "lgrngn", params.cloudph_opts_init.sedi_switch); diff --git a/src/solvers/lgrngn/hook_mixed_rhs_ante_step_lgrngn.hpp b/src/solvers/lgrngn/hook_mixed_rhs_ante_step_lgrngn.hpp index b463f8109d..5345f99bed 100644 --- a/src/solvers/lgrngn/hook_mixed_rhs_ante_step_lgrngn.hpp +++ b/src/solvers/lgrngn/hook_mixed_rhs_ante_step_lgrngn.hpp @@ -83,9 +83,9 @@ void slvr_lgrngn::hook_mixed_rhs_ante_step() make_arrinfo(Cx), this->n_dims == 2 ? libcloudphxx::lgrngn::arrinfo_t() : make_arrinfo(Cy), make_arrinfo(Cz), - (ct_params_t::sgs_scheme == libmpdataxx::solvers::iles) || (!params.cloudph_opts.turb_cond && !params.cloudph_opts.turb_adve && !params.cloudph_opts.turb_coal) ? - libcloudphxx::lgrngn::arrinfo_t() : - make_arrinfo(this->diss_rate(this->domain).reindex(this->zero)) + (!params.cloudph_opts.turb_cond && !params.cloudph_opts.turb_adve && !params.cloudph_opts.turb_coal) ? + libcloudphxx::lgrngn::arrinfo_t() : + make_arrinfo(this->diss_rate(this->domain).reindex(this->zero)) ); // start sync/async run of step_cond diff --git a/src/solvers/slvr_lgrngn.hpp b/src/solvers/slvr_lgrngn.hpp index 3499379dcd..031bd402a7 100644 --- a/src/solvers/slvr_lgrngn.hpp +++ b/src/solvers/slvr_lgrngn.hpp @@ -177,6 +177,7 @@ class slvr_lgrngn : public std::conditional_t out_dry, out_wet; bool flag_coal; // do we want coal after spinup real_t gccn; // multiplicity of gccn + real_t turb_diss_rate; }; private: @@ -202,6 +203,10 @@ class slvr_lgrngn : public std::conditional_tdiss_rate = p.turb_diss_rate * 1e-4; // constant TKE dissipation rate for SGS models in microphysics; change from [cm2/s3] to [m2/s3] } static void alloc(typename parent_t::mem_t *mem, const int &n_iters)