chombo-discharge
Loading...
Searching...
No Matches
CD_AdvectionDiffusionStepper.H
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2021-2026 SINTEF Energy Research
3 *
4 * SPDX-License-Identifier: GPL-3.0-or-later
5 */
6
13#ifndef CD_ADVECTIONDIFFUSIONSTEPPER_H
14#define CD_ADVECTIONDIFFUSIONSTEPPER_H
15
16// Our includes
17#include <CD_TimeStepper.H>
18#include <CD_CdrSolver.H>
20#include <CD_NamespaceHeader.H>
21
22namespace Physics {
23 namespace AdvectionDiffusion {
24
34 {
35 public:
41
46 AdvectionDiffusionStepper(RefCountedPtr<CdrSolver>& a_solver);
47
52
56 void
57 initialData() override;
58
62 void
63 allocate() override;
64
68 void
69 postInitialize() override
70 {}
71
72#ifdef CH_USE_HDF5
78 void
79 writeCheckpointData(HDF5Handle& a_handle, const int a_lvl) const override;
80#endif
81
82#ifdef CH_USE_HDF5
88 void
89 readCheckpointData(HDF5Handle& a_handle, const int a_lvl) override;
90#endif
91
96 void
97 postCheckpointSetup() override;
98
103 int
104 getNumberOfPlotVariables() const override;
105
110 Vector<std::string>
111 getPlotVariableNames() const override;
112
120 void
121 writePlotData(LevelData<EBCellFAB>& a_output,
122 int& a_icomp,
123 const std::string& a_outputRealm,
124 const int a_level) const override;
125
133 Real
134 computeDt() override;
135
142 void
143 synchronizeSolverTimes(const int a_step, const Real a_time, const Real a_dt) override;
144
148 void
150 {}
151
155 void
156 parseRuntimeOptions() override;
157
161 void
162 registerRealms() override;
163
167 void
168 registerOperators() override;
169
175 void
176 preRegrid(const int a_lbase, const int a_oldFinestLevel) override;
177
181 void
182 setupSolvers() override;
183
189 Real
190 advance(const Real a_dt) override;
191
198 void
199 regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override;
200
204 void
205 postRegrid() override
206 {}
207
212 void
213 setCFL(const Real a_cfl);
214
219 void
220 setInitialData(const std::function<Real(const RealVect& a_position)>& a_initData) noexcept;
221
226 void
227 setVelocity(const std::function<RealVect(const RealVect& a_position)>& a_velocity) noexcept;
228
233 void
234 setDiffusionCoefficient(const std::function<Real(const RealVect& a_position)>& a_diffusion) noexcept;
235
236 protected:
241 {
243 IMEX
244 };
245
249 RefCountedPtr<CdrSolver> m_solver;
250
254 RefCountedPtr<AdvectionDiffusionSpecies> m_species;
255
259 std::string m_realm;
260
265
269 std::function<RealVect(const RealVect& a_position)> m_velocity;
270
274 std::function<Real(const RealVect& a_position)> m_diffCo;
275
279 std::function<Real(const RealVect& a_initialData)> m_initialData;
280
285
290
294 Real m_cfl;
295
300
305
310
315
320
324 void
326 };
327 } // namespace AdvectionDiffusion
328} // namespace Physics
329
330#include <CD_NamespaceFooter.H>
331
332#endif
Declaration of the Physics::AdvectionDiffusion::AdvectionDiffusionSpecies class.
Declaration of an abstract class for solving scalar convection-diffusion-reaction problems.
Declaration of main (abstract) time stepper class.
TimeStepper implementation for advancing a single advection-diffusion equation.
Definition CD_AdvectionDiffusionStepper.H:34
void registerOperators() override
Register the operators required by the solver.
Definition CD_AdvectionDiffusionStepper.cpp:176
RefCountedPtr< CdrSolver > m_solver
The CDR solver used for advancing the scalar field.
Definition CD_AdvectionDiffusionStepper.H:249
void printStepReport() override
Print a step report. No output is produced.
Definition CD_AdvectionDiffusionStepper.H:149
void synchronizeSolverTimes(const int a_step, const Real a_time, const Real a_dt) override
Update internal time/step counters and forward them to the solver.
Definition CD_AdvectionDiffusionStepper.cpp:457
void setupSolvers() override
Instantiate the species and configure the solver with realm, phase, and AMR data.
Definition CD_AdvectionDiffusionStepper.cpp:137
Integrator
Supported time integration methods.
Definition CD_AdvectionDiffusionStepper.H:241
@ Heun
Second-order explicit Heun (trapezoidal) method.
Definition CD_AdvectionDiffusionStepper.H:242
@ IMEX
IMEX: explicit advection, implicit (Crank-Nicholson) diffusion.
Definition CD_AdvectionDiffusionStepper.H:243
void postInitialize() override
Post-initialization hook. No operations are performed.
Definition CD_AdvectionDiffusionStepper.H:69
void writePlotData(LevelData< EBCellFAB > &a_output, int &a_icomp, const std::string &a_outputRealm, const int a_level) const override
Write plot data into the output holder.
Definition CD_AdvectionDiffusionStepper.cpp:289
void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override
Regrid the solver and re-apply the flow fields on the new mesh.
Definition CD_AdvectionDiffusionStepper.cpp:483
void parseIntegrator()
Parse the integration method from ParmParse input.
Definition CD_AdvectionDiffusionStepper.cpp:112
virtual ~AdvectionDiffusionStepper()
Destructor.
Definition CD_AdvectionDiffusionStepper.cpp:86
void parseRuntimeOptions() override
Parse runtime options from ParmParse. Re-reads verbosity, CFL bounds, and integrator.
Definition CD_AdvectionDiffusionStepper.cpp:92
void postRegrid() override
Post-regrid hook. No operations are performed.
Definition CD_AdvectionDiffusionStepper.H:205
RefCountedPtr< AdvectionDiffusionSpecies > m_species
Species definition passed to the CDR solver.
Definition CD_AdvectionDiffusionStepper.H:254
int getNumberOfPlotVariables() const override
Return the number of output variables contributed by this stepper.
Definition CD_AdvectionDiffusionStepper.cpp:266
Real m_cfl
CFL number read from input.
Definition CD_AdvectionDiffusionStepper.H:294
void preRegrid(const int a_lbase, const int a_oldFinestLevel) override
Pre-regrid hook. Notifies the solver to store data before the mesh changes.
Definition CD_AdvectionDiffusionStepper.cpp:472
Integrator m_integrator
Selected time integration method.
Definition CD_AdvectionDiffusionStepper.H:319
Real m_minDt
Minimum permissible time step in seconds.
Definition CD_AdvectionDiffusionStepper.H:284
std::string m_realm
Name of the realm on which the solver operates.
Definition CD_AdvectionDiffusionStepper.H:259
bool m_debug
If true, print mass-conservation diagnostics to stdout after each step.
Definition CD_AdvectionDiffusionStepper.H:304
Vector< std::string > getPlotVariableNames() const override
Return the names of the output variables contributed by this stepper.
Definition CD_AdvectionDiffusionStepper.cpp:278
Real advance(const Real a_dt) override
Advance the solution by one time step using the selected integrator.
Definition CD_AdvectionDiffusionStepper.cpp:353
void initialData() override
Fill the solver with initial data and set velocity, diffusion coefficient, and source term.
Definition CD_AdvectionDiffusionStepper.cpp:199
Real m_maxDt
Maximum permissible time step in seconds.
Definition CD_AdvectionDiffusionStepper.H:289
void registerRealms() override
Register the Primal realm with the AMR mesh.
Definition CD_AdvectionDiffusionStepper.cpp:165
bool m_diffusive
If true, the scalar undergoes diffusion.
Definition CD_AdvectionDiffusionStepper.H:314
void setVelocity(const std::function< RealVect(const RealVect &a_position)> &a_velocity) noexcept
Override the velocity field functor.
Definition CD_AdvectionDiffusionStepper.cpp:526
std::function< Real(const RealVect &a_position)> m_diffCo
Functor providing the diffusion coefficient at a given position.
Definition CD_AdvectionDiffusionStepper.H:274
void setDiffusionCoefficient(const std::function< Real(const RealVect &a_position)> &a_diffusion) noexcept
Override the diffusion coefficient functor.
Definition CD_AdvectionDiffusionStepper.cpp:537
AdvectionDiffusionStepper()
Default constructor. Parses all options from ParmParse and sets default velocity, diffusion coefficie...
Definition CD_AdvectionDiffusionStepper.cpp:25
void setInitialData(const std::function< Real(const RealVect &a_position)> &a_initData) noexcept
Override the initial data functor.
Definition CD_AdvectionDiffusionStepper.cpp:515
std::function< RealVect(const RealVect &a_position)> m_velocity
Functor providing the advection velocity at a given position.
Definition CD_AdvectionDiffusionStepper.H:269
bool m_mobile
If true, the scalar is advected by the velocity field.
Definition CD_AdvectionDiffusionStepper.H:309
void setCFL(const Real a_cfl)
Force a specific CFL number, overriding the value read from input.
Definition CD_AdvectionDiffusionStepper.cpp:504
std::function< Real(const RealVect &a_initialData)> m_initialData
Functor providing the initial scalar concentration at a given position.
Definition CD_AdvectionDiffusionStepper.H:279
Real m_forceCFL
Programmatically forced CFL number. Overrides m_cfl when positive.
Definition CD_AdvectionDiffusionStepper.H:299
void allocate() override
Allocate internal storage in the solver.
Definition CD_AdvectionDiffusionStepper.cpp:188
void postCheckpointSetup() override
Post-checkpoint setup. Re-applies velocity, diffusion coefficient, source, and EB flux after a restar...
Definition CD_AdvectionDiffusionStepper.cpp:247
Real computeDt() override
Compute the next time step.
Definition CD_AdvectionDiffusionStepper.cpp:306
phase::which_phase m_phase
Computational phase (gas or solid) on which the solver operates.
Definition CD_AdvectionDiffusionStepper.H:264
Base class for advancing equations.
Definition CD_TimeStepper.H:31
Namespace containing physics models for use with chombo-discharge.
Definition CD_AdvectionDiffusion.H:16
which_phase
Enumeration of supported phases.
Definition CD_MultiFluidIndexSpace.H:38