/home/runner/work/amr-wind/amr-wind/amr-wind/equation_systems/PDEBase.H Source File

AMR-Wind API: /home/runner/work/amr-wind/amr-wind/amr-wind/equation_systems/PDEBase.H Source File
AMR-Wind API v0.1.0
CFD solver for wind plant simulations
Loading...
Searching...
No Matches
PDEBase.H
Go to the documentation of this file.
1#ifndef PDEBASE_H
2#define PDEBASE_H
3
4#include <string>
5
11
12namespace amr_wind {
13
14class CFDSim;
15
16namespace pde {
17
32
50class PDEBase : public Factory<PDEBase, CFDSim&>
51{
52public:
53 ~PDEBase() override = default;
54
56 virtual PDEFields& fields() = 0;
57 virtual const PDEFields& fields() const = 0;
58
60 virtual void initialize() = 0;
61
63 virtual void post_regrid_actions() = 0;
64
66 virtual void compute_source_term(const FieldState fstate) = 0;
67
69 virtual void compute_mueff(const FieldState fstate) = 0;
70
72 virtual void compute_diffusion_term(const FieldState fstate) = 0;
73
75 virtual void pre_advection_actions(const FieldState fstate) = 0;
76
78 virtual void compute_advection_term(const FieldState fstate) = 0;
79
86 virtual void compute_predictor_rhs(const DiffusionType difftype) = 0;
87
95 virtual void compute_corrector_rhs(const DiffusionType difftype) = 0;
96
98 virtual void solve(const amrex::Real dt) = 0;
99
101 virtual void post_solve_actions() = 0;
102
103 virtual void improve_explicit_diffusion(const amrex::Real dt) = 0;
104
106 static std::string base_identifier() { return "PDESystem"; }
107};
108
116class PDEMgr : public CollMgr<PDEMgr, PDEBase>
117{
118public:
119 explicit PDEMgr(CFDSim& sim);
120
121 ~PDEMgr() = default;
122
124 PDEBase& icns() { return *m_icns; }
125 const PDEBase& icns() const { return *m_icns; }
126
130
132 PDEBase& register_transport_pde(const std::string& pde_name);
133
135 void advance_states();
136
139 void prepare_boundaries();
140
144 void density_check();
145
148 const amrex::Real time, const FieldState fstate = FieldState::New);
149
156 const TypeVector& scalar_eqns() const { return m_obj_vec; }
157
159 bool has_pde(const std::string& pde_name) const;
160
161 int num_ghost_state() const;
162
163 bool constant_density() const { return m_constant_density; }
164
165 std::string scheme() const { return m_scheme; }
166
167private:
170
172 std::unique_ptr<PDEBase> m_icns;
173
175 std::string m_scheme;
176
178 bool m_use_godunov{true};
179
182};
183
184} // namespace pde
185} // namespace amr_wind
186
187#endif /* PDEBASE_H */
Definition CFDSim.H:54
amrex::Vector< TypePtr > TypeVector
Definition CollMgr.H:25
TypeVector m_obj_vec
Definition CollMgr.H:81
Definition PDEBase.H:51
virtual void pre_advection_actions(const FieldState fstate)=0
Perform necessary steps to prepare for advection calculations.
virtual void compute_corrector_rhs(const DiffusionType difftype)=0
virtual void initialize()=0
Perform initialization actions for a PDE after the mesh is generated.
virtual void compute_source_term(const FieldState fstate)=0
Compute the source (forcing) terms for this PDE.
virtual PDEFields & fields()=0
Return the object that holds references to fields for this PDE system.
virtual const PDEFields & fields() const =0
virtual void solve(const amrex::Real dt)=0
Solve the diffusion linear system and update the field.
~PDEBase() override=default
virtual void post_regrid_actions()=0
Perform updates specific to PDE after a regrid is performed.
virtual void compute_predictor_rhs(const DiffusionType difftype)=0
virtual void improve_explicit_diffusion(const amrex::Real dt)=0
virtual void compute_mueff(const FieldState fstate)=0
Compute the effective dynamic viscosity for this PDE.
virtual void post_solve_actions()=0
Perform post-processing actions after a system solve.
virtual void compute_diffusion_term(const FieldState fstate)=0
Compute the diffusion term used in the RHS of the PDE system.
virtual void compute_advection_term(const FieldState fstate)=0
Compute the time derivative and advective term for the PDE system.
static std::string base_identifier()
Base class identifier used for factory registration interface.
Definition PDEBase.H:106
void advance_states()
Advance states for all registered PDEs at the beginning of a timestep.
Definition PDEBase.cpp:81
const PDEBase & icns() const
Definition PDEBase.H:125
int num_ghost_state() const
Definition PDEBase.cpp:76
bool constant_density() const
Definition PDEBase.H:163
PDEMgr(CFDSim &sim)
Definition PDEBase.cpp:24
bool m_constant_density
Flag indicating whether density is constant for this simulation.
Definition PDEBase.H:181
void density_check()
Check that the bounds of density correspond to the expected values – only applies to two-phase and co...
Definition PDEBase.cpp:147
std::unique_ptr< PDEBase > m_icns
ICNS instance.
Definition PDEBase.H:172
bool m_use_godunov
Flag indicating whether Godunov scheme is active.
Definition PDEBase.H:178
std::string scheme() const
Definition PDEBase.H:165
PDEBase & icns()
Return the incompressible Navier-Stokes instance.
Definition PDEBase.H:124
PDEBase & register_icns()
Create the incompressible Navier-Stokes instance and return its reference.
Definition PDEBase.cpp:49
bool has_pde(const std::string &pde_name) const
Query if a PDE has already been registered.
Definition PDEBase.cpp:70
TypeVector & scalar_eqns()
Definition PDEBase.H:155
CFDSim & m_sim
Instance of the CFD simulation controller.
Definition PDEBase.H:169
std::string m_scheme
Unique identifier for the numerical scheme.
Definition PDEBase.H:175
void fillpatch_state_fields(const amrex::Real time, const FieldState fstate=FieldState::New)
Call fillpatch operator on state variables for all registered PDEs.
Definition PDEBase.cpp:214
PDEBase & register_transport_pde(const std::string &pde_name)
Register a new PDE instance and return its reference.
Definition PDEBase.cpp:57
const TypeVector & scalar_eqns() const
Definition PDEBase.H:156
void prepare_boundaries()
Prepare boundaries for registered PDEs at the beginning of a timestep: – intended for when boundaries...
Definition PDEBase.cpp:93
FieldState
Definition FieldDescTypes.H:14
@ New
Same as FieldState::NP1.
Definition FieldDescTypes.H:20
DiffusionType
Definition incflo_enums.H:4
Definition AdvOp_Godunov.H:18
This test case is intended as an evaluation of the momentum advection scheme.
Definition BCInterface.cpp:7
Definition PDEFields.H:27