5 #ifndef ERF_EULERIANMICROPHYSICS_H
6 #define ERF_EULERIANMICROPHYSICS_H
31 const MoistureType& a_model_type )
35 if (a_model_type == MoistureType::SAM ||
36 a_model_type == MoistureType::SAM_NoIce ||
37 a_model_type == MoistureType::SAM_NoPrecip_NoIce) {
39 }
else if (a_model_type == MoistureType::Kessler ||
40 a_model_type == MoistureType::Kessler_NoRain) {
42 }
else if (a_model_type == MoistureType::Morrison ||
43 a_model_type == MoistureType::Morrison_NoIce) {
45 }
else if (a_model_type == MoistureType::WSM6) {
47 }
else if (a_model_type == MoistureType::WDM6) {
49 }
else if (a_model_type == MoistureType::SatAdj) {
51 }
else if (a_model_type == MoistureType::MoistNoCondensation) {
52 SetModel<MoistNoCondensation>();
53 }
else if (a_model_type == MoistureType::None) {
54 SetModel<NullMoist>();
56 amrex::Abort(
"EulerianMicrophysics: Dont know this moisture_type!") ;
69 const amrex::MultiFab& cons_in,
70 const amrex::BoxArray& grids,
71 const amrex::Geometry& geom,
73 std::unique_ptr<amrex::MultiFab>& z_phys_nd,
74 std::unique_ptr<amrex::MultiFab>& detJ_cc )
override
83 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& )
override { }
91 amrex::Vector<amrex::Vector<amrex::MultiFab>>&,
92 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>&,
93 const amrex::GpuArray<ERF_BC, AMREX_SPACEDIM*2>& )
override
100 amrex::MultiFab& cons_in,
101 const amrex::MultiFab* base_state =
nullptr)
override
108 amrex::MultiFab& cons_in,
109 const amrex::MultiFab& z_phys_nd )
override
116 const int& varIdx )
override
149 std::vector<int>& a_idx,
150 std::vector<std::string>& a_names )
const override
152 m_moist_model[a_lev]->Qmoist_Restart_Vars(a_sc, a_idx, a_names);
163 amrex::MultiFab& a_mf,
164 const int a_lev)
const override
178 amrex::iMultiFab* lmask)
const override
186 return m_moist_model[lev]->Get_Surface_Precip_Accumulation_Ptrs(lev);
192 template<
class NewMoistModel>
Contains the base class for microphysics.
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Eulerian microphysics interface.
Definition: ERF_EulerianMicrophysics.H:19
void Get_Qmoist_Restart_Vars(const int a_lev, const SolverChoice &a_sc, std::vector< int > &a_idx, std::vector< std::string > &a_names) const override
get the indices and names of moisture model variables for restart at a given level
Definition: ERF_EulerianMicrophysics.H:147
virtual void Set_dzmin(const int a_lev, const amrex::Real dz_min) const override
Populates dz_min in micro model for precipitation.
Definition: ERF_EulerianMicrophysics.H:170
void Update_State_Vars_Lev(const int &lev, amrex::MultiFab &cons_in, const amrex::MultiFab &z_phys_nd) override
update ERF state variables from microphysics variables
Definition: ERF_EulerianMicrophysics.H:107
void Update_Micro_Vars_Lev(const int &lev, amrex::MultiFab &cons_in, const amrex::MultiFab *base_state=nullptr) override
update microphysics variables from ERF state variables
Definition: ERF_EulerianMicrophysics.H:99
EulerianMicrophysics(const int &nlev, const MoistureType &a_model_type)
Constructor: create the moisture model.
Definition: ERF_EulerianMicrophysics.H:30
SurfacePrecipAccumulationSources Get_Surface_Precip_Accumulation_Ptrs(const int &lev) const override
get scheme-native surface precipitation accumulators and their kg/m^2 conversion factors
Definition: ERF_EulerianMicrophysics.H:184
~EulerianMicrophysics()=default
default destructor
amrex::Vector< std::unique_ptr< NullMoist > > m_moist_model
Definition: ERF_EulerianMicrophysics.H:201
amrex::MultiFab * Get_Qmoist_Ptr(const int &lev, const int &varIdx) override
get pointer to a moisture variable
Definition: ERF_EulerianMicrophysics.H:115
void Define(const int &lev, SolverChoice &sc) override
Define the moisture model.
Definition: ERF_EulerianMicrophysics.H:61
int Get_Qstate_NonMoist_Size() override
get the number of microphysics conserved non-moist (non-water, i.e., other vapor/condensed species) s...
Definition: ERF_EulerianMicrophysics.H:140
int Get_Qstate_Moist_NumConc_Size() override
get the number of microphysics conserved moist (water-related) state variables that are number concen...
Definition: ERF_EulerianMicrophysics.H:134
virtual void GetPlotVar(const std::string &a_name, amrex::MultiFab &a_mf, const int a_lev) const override
Fills in a MultiFab for plotting.
Definition: ERF_EulerianMicrophysics.H:162
void SetModel()
Create and set the specified moisture model.
Definition: ERF_EulerianMicrophysics.H:193
virtual void GetPlotVarNames(amrex::Vector< std::string > &a_vec) const override
Returns a list of additional plot variable names.
Definition: ERF_EulerianMicrophysics.H:156
virtual void FinishInit(const int &, amrex::MultiFab &, const amrex::Vector< std::unique_ptr< amrex::MultiFab >> &) override
finish initializations steps that require flow variables
Definition: ERF_EulerianMicrophysics.H:81
void Advance(const int &lev, const amrex::Real &dt_advance, const int &, const amrex::Real &, const SolverChoice &solverChoice, amrex::Vector< amrex::Vector< amrex::MultiFab >> &, const amrex::Vector< std::unique_ptr< amrex::MultiFab >> &, const amrex::GpuArray< ERF_BC, AMREX_SPACEDIM *2 > &) override
Advance the moisture model for one time step.
Definition: ERF_EulerianMicrophysics.H:86
virtual void Set_Lmask(const int a_lev, amrex::iMultiFab *lmask) const override
Populates ERF's land/water mask in the micro model.
Definition: ERF_EulerianMicrophysics.H:177
void Init(const int &lev, const amrex::MultiFab &cons_in, const amrex::BoxArray &grids, const amrex::Geometry &geom, const amrex::Real &dt_advance, std::unique_ptr< amrex::MultiFab > &z_phys_nd, std::unique_ptr< amrex::MultiFab > &detJ_cc) override
Initialize the moisture model.
Definition: ERF_EulerianMicrophysics.H:68
int Get_Qmoist_Size(const int &) override
get the number of moisture model variables
Definition: ERF_EulerianMicrophysics.H:122
int Get_Qstate_Moist_Size() override
get the number of microphysics conserved moist (water-related) state variables
Definition: ERF_EulerianMicrophysics.H:128
EulerianMicrophysics()
Null constructor.
Definition: ERF_EulerianMicrophysics.H:24
Base class for microphysics interface.
Definition: ERF_Microphysics.H:17
static MoistureModelType modelType(const MoistureType a_moisture_type)
query if a specified moisture model is Eulerian or Lagrangian
Definition: ERF_Microphysics.H:121
Definition: ERF_DataStruct.H:634
Definition: ERF_SurfacePrecipitation.H:34