5 #ifndef ERF_LAGRANGIANMICROPHYSICS_H
6 #define ERF_LAGRANGIANMICROPHYSICS_H
8 #ifdef ERF_USE_PARTICLES
31 LagrangianMicrophysics () { }
34 ~LagrangianMicrophysics () =
default;
37 LagrangianMicrophysics (
const int& ,
38 const MoistureType& a_model_type )
41 amrex::ignore_unused(a_model_type);
42 amrex::Abort(
"No Lagrangian moisture model implemented yet!") ;
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,
58 const amrex::Real& dt_advance,
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,
69 const amrex::Real& dt_advance,
71 const amrex::Real& time,
73 amrex::Vector<amrex::Vector<amrex::MultiFab>>& a_vars,
74 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& a_z,
75 const amrex::GpuArray<ERF_BC, AMREX_SPACEDIM*2>& a_phys_bc_types )
override
78 m_moist_model->Advance(dt_advance, iter, time, a_vars, a_z, a_phys_bc_types);
83 amrex::MultiFab& cons_in )
override
86 m_moist_model->Update_Micro_Vars(cons_in);
91 amrex::MultiFab& cons_in )
override
94 m_moist_model->Update_State_Vars(cons_in);
99 const int& varIdx )
override
101 return (lev > 0 ?
nullptr : m_moist_model->Qmoist_Ptr(varIdx));
107 return (a_lev > 0 ? 0 : m_moist_model->Qmoist_Size());
113 return m_moist_model->Qstate_Size();
117 inline void initParticles ( std::unique_ptr<amrex::MultiFab>& z_phys_nd )
119 m_moist_model->InitParticles(z_phys_nd);
123 inline void restartParticles ( amrex::ParGDBBase* a_gdb,
const std::string& a_fname)
125 m_moist_model->RestartParticles(a_gdb, a_fname);
129 inline ERFPC* getParticleContainer ()
const
131 return m_moist_model->getParticleContainer();
135 inline const std::string& getName ()
const
137 return m_moist_model->getName();
144 std::vector<int>& a_idx,
145 std::vector<std::string>& a_names )
const override
148 m_moist_model->Qmoist_Restart_Vars( a_sc, a_idx, a_names );
158 template<
class NewMoistModel>
161 m_moist_model = std::make_unique<NewMoistModel>();
164 std::unique_ptr<NullMoistLagrangian> m_moist_model;
Contains the base class for microphysics.
Contains the Lagrangian moisture model base class.
Base class for microphysics interface.
Definition: ERF_Microphysics.H:14
virtual int Get_Qmoist_Size(const int &)=0
get the number of moisture model variables
virtual void Define(const int &, SolverChoice &)=0
define the microphysics object
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 void Update_State_Vars_Lev(const int &, amrex::MultiFab &)=0
update ERF state variables from microphysics variables
virtual void Update_Micro_Vars_Lev(const int &, amrex::MultiFab &)=0
update microphysics variables from ERF state variables
virtual int Get_Qstate_Size()=0
get the number of moisture-model-related conserved state variables
virtual amrex::MultiFab * Get_Qmoist_Ptr(const int &, const int &)=0
get pointer to a moisture variable
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
static MoistureModelType modelType(const MoistureType a_moisture_type)
query if a specified moisture model is Eulerian or Lagrangian
Definition: ERF_Microphysics.H:69
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
Definition: ERF_DataStruct.H:86