5 #ifndef ERF_LAGRANGIANMICROPHYSICS_H
6 #define ERF_LAGRANGIANMICROPHYSICS_H
8 #ifdef ERF_USE_PARTICLES
27 LagrangianMicrophysics () { }
30 ~LagrangianMicrophysics () =
default;
33 LagrangianMicrophysics (
const int& ,
34 const MoistureType& a_model_type )
37 if (a_model_type == MoistureType::SuperDroplets) {
38 SetModel<SuperDropletsMoist>();
39 amrex::Print() <<
"Super-Droplets moisture model!\n";
41 amrex::Abort(
"Unknown Lagrangian moisture model!") ;
46 void Define (
const int& lev,
50 m_moist_model->Define(sc);
54 void Init (
const int& lev,
55 const amrex::MultiFab& cons_in,
56 const amrex::BoxArray& grids,
57 const amrex::Geometry& geom,
59 std::unique_ptr<amrex::MultiFab>& z_phys_nd,
60 std::unique_ptr<amrex::MultiFab>& detJ_cc )
override
63 m_moist_model->Init(cons_in, grids, geom, dt_advance,
66 m_moist_model->InitLevel(lev, cons_in);
72 amrex::MultiFab& cons_in,
73 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& z_phys_nd )
override
75 m_moist_model->SetCurrentLevel(lev);
76 m_moist_model->FinishInit( lev, cons_in, z_phys_nd );
85 amrex::Vector<amrex::Vector<amrex::MultiFab>>& a_vars,
86 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& a_z,
87 const amrex::GpuArray<ERF_BC, AMREX_SPACEDIM*2>& a_phys_bc_types )
override
89 m_moist_model->SetCurrentLevel(lev);
90 m_moist_model->Advance(dt_advance, iter, time, a_vars, a_z, a_phys_bc_types);
95 amrex::MultiFab& cons_in,
96 const amrex::MultiFab* base_state =
nullptr)
override
98 m_moist_model->SetCurrentLevel(lev);
99 m_moist_model->Update_Micro_Vars(cons_in, base_state);
104 amrex::MultiFab& cons_in,
105 const amrex::MultiFab& z_phys_nd )
override
107 m_moist_model->SetCurrentLevel(lev);
108 m_moist_model->Update_State_Vars(cons_in, z_phys_nd);
114 m_moist_model->AverageDownMicroVars(finest_level);
118 const amrex::MultiFab&
z)
override
120 m_moist_model->SetCurrentLevel(lev);
121 m_moist_model->Update_Diagnostic_State(
cons,
z);
126 const int& varIdx )
override
128 m_moist_model->SetCurrentLevel(lev);
129 return m_moist_model->Qmoist_Ptr(varIdx);
135 return m_moist_model->Qmoist_Size();
141 return m_moist_model->Qstate_Moist_Size();
147 return m_moist_model->Qstate_Moist_NumConc_Size();
153 return m_moist_model->Qstate_NonMoist_Size();
158 return m_moist_model->Qstate_Is_Diagnostic(
q);
164 return m_moist_model->Get_Surface_Precip_Accumulation_Ptrs(lev);
168 inline void initParticles (
const int a_lev,
169 std::unique_ptr<amrex::MultiFab>& z_phys_nd )
171 m_moist_model->InitParticles(a_lev, z_phys_nd);
175 inline void restartParticles ( amrex::ParGDBBase* a_gdb,
const std::string& a_fname)
177 m_moist_model->RestartParticles(a_gdb, a_fname);
181 inline ERFPC* getParticleContainer ()
const
183 return m_moist_model->getParticleContainer();
187 inline const std::string& getName ()
const
189 return m_moist_model->getName();
196 std::vector<int>& a_idx,
197 std::vector<std::string>& a_names )
const override
200 m_moist_model->Qmoist_Restart_Vars( a_sc, a_idx, a_names );
208 virtual void GetPlotVarNames (amrex::Vector<std::string>& a_vec)
const override
210 m_moist_model->GetPlotVarNames(a_vec);
214 virtual void GetPlotVar (
const std::string& a_name,
215 amrex::MultiFab& a_mf,
216 const int a_lev)
const override
218 m_moist_model->SetCurrentLevel(a_lev);
219 m_moist_model->GetPlotVar(a_name, a_mf, a_lev);
223 inline int getDiagnosticsInterval ()
const
225 return m_moist_model->getDiagnosticsInterval();
232 m_moist_model->Set_dzmin(dz_min);
237 amrex::iMultiFab* lmask)
const override
239 m_moist_model->Set_Lmask(lmask);
245 template<
class NewMoistModel>
248 m_moist_model = std::make_unique<NewMoistModel>();
251 std::unique_ptr<NullMoistLagrangian> m_moist_model;
Contains the base class for microphysics.
Contains the Lagrangian moisture model base class.
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Base class for microphysics interface.
Definition: ERF_Microphysics.H:18
virtual int Get_Qmoist_Size(const int &)=0
get the number of moisture model variables
virtual int Get_Qstate_NonMoist_Size()=0
get the number of microphysics conserved non-moist (non-water, i.e., other vapor/condensed species) s...
virtual void Define(const int &, SolverChoice &)=0
define the microphysics object
virtual void AverageDownMicroVars(const int)
average down moisture multifabs from finest_level to 0 (AMR coverage); no-op for non-Lagrangian model...
Definition: ERF_Microphysics.H:66
virtual int Get_Qstate_Moist_NumConc_Size()=0
get the number of microphysics conserved moist (water-related) state variables that are number concen...
virtual void Init(const int &, const amrex::MultiFab &, const amrex::BoxArray &, const amrex::Geometry &, const amrex::Real &, std::unique_ptr< amrex::MultiFab > &, std::unique_ptr< amrex::MultiFab > &)=0
initialize the microphysics object
virtual int Get_Qstate_Moist_Size()=0
get the number of microphysics conserved moist (water-related) state variables
virtual void Update_Micro_Vars_Lev(const int &, amrex::MultiFab &, const amrex::MultiFab *base_state=nullptr)=0
update microphysics variables from ERF state variables
virtual SurfacePrecipAccumulationSources Get_Surface_Precip_Accumulation_Ptrs(const int &) const
get scheme-native surface precipitation accumulators and their kg/m^2 conversion factors
Definition: ERF_Microphysics.H:70
virtual void Update_State_Vars_Lev(const int &, amrex::MultiFab &, const amrex::MultiFab &)=0
update ERF state variables from microphysics variables
virtual amrex::MultiFab * Get_Qmoist_Ptr(const int &, const int &)=0
get pointer to a moisture variable
virtual void GetPlotVarNames(amrex::Vector< std::string > &a_vec) const =0
Returns a list of additional plot variable names.
virtual void Get_Qmoist_Restart_Vars(int, const SolverChoice &, std::vector< int > &, std::vector< std::string > &) const =0
get the indices and names of moisture model variables for restart at a given level
virtual void Set_Lmask(const int lev, amrex::iMultiFab *lmask) const =0
Import ERF's land/water mask at this level.
virtual void Update_Diagnostic_State_Lev(const int &, amrex::MultiFab &, const amrex::MultiFab &)
Definition: ERF_Microphysics.H:63
virtual void Set_dzmin(const int lev, const amrex::Real dz_min) const =0
Import minimum dz at this level.
static MoistureModelType modelType(const MoistureType a_moisture_type)
query if a specified moisture model is Eulerian or Lagrangian
Definition: ERF_Microphysics.H:136
virtual void FinishInit(const int &, amrex::MultiFab &, const amrex::Vector< std::unique_ptr< amrex::MultiFab >> &)=0
finish initializations steps that require flow variables
virtual bool Qstate_Is_Diagnostic(int) const
Whether a Q-state offset is a projection rather than host-transported state.
Definition: ERF_Microphysics.H:99
virtual void GetPlotVar(const std::string &a_name, amrex::MultiFab &a_mf, const int a_lev) const =0
Fills in a MultiFab for plotting.
virtual void Advance(const int &, const amrex::Real &, const int &, const amrex::Real &, const SolverChoice &, amrex::Vector< amrex::Vector< amrex::MultiFab >> &, const amrex::Vector< std::unique_ptr< amrex::MultiFab >> &, const amrex::GpuArray< ERF_BC, AMREX_SPACEDIM *2 > &)=0
advance microphysics for one time step
@ cons
Definition: ERF_IndexDefines.H:254
@ q
Definition: ERF_WSM6.H:294
Definition: ERF_DataStruct.H:715
Definition: ERF_SurfacePrecipitation.H:34