13#ifndef CD_MESHODESTEPPERIMPLEM_H
14#define CD_MESHODESTEPPERIMPLEM_H
19#include <CD_NamespaceHeader.H>
21using namespace Physics::MeshODE;
26 CH_TIME(
"MeshODEStepper::MeshODEStepper");
38 CH_TIME(
"MeshODEStepper::~MeshODEStepper");
40 pout() <<
"MeshODEStepper::~MeshODEStepper" <<
endl;
48 CH_TIME(
"MeshODEStepper::setupSolvers");
50 pout() <<
"MeshODEStepper::setupSolvers" <<
endl;
64 CH_TIME(
"MeshODEStepper::allocate()");
66 pout() <<
"MeshODEStepper::allocate()" <<
endl;
76 CH_TIME(
"MeshODEStepper::initialData()");
78 pout() <<
"MeshODEStepper::initialData()" <<
endl;
81 m_solver->setPhi(m_initialData);
82 m_solver->computeRHS(m_rhsFunction);
89 CH_TIME(
"MeshODEStepper::postInitialize()");
91 pout() <<
"MeshODEStepper::postInitialize()" <<
endl;
99 CH_TIME(
"MeshODEStepper::postCheckpointSetup()");
101 pout() <<
"MeshODEStepper::postCheckpointSetup()" <<
endl;
104 m_solver->computeRHS(m_rhsFunction);
111 CH_TIME(
"MeshODEStepper::registerRealms()");
113 pout() <<
"MeshODEStepper::registerRealms()" <<
endl;
123 CH_TIME(
"MeshODEStepper::registerOperators()");
125 pout() <<
"MeshODEStepper::registerOperators()" <<
endl;
128 m_solver->registerOperators();
135 CH_TIME(
"MeshODEStepper::parseOptions()");
137 pout() <<
"MeshODEStepper::parseOptions()" <<
endl;
140 this->parseIntegrator();
142 this->parseProblem();
149 CH_TIME(
"MeshODEStepper::parseRuntimeOptions()");
151 pout() <<
"MeshODEStepper::parseRuntimeOptions()" <<
endl;
154 m_solver->parseRuntimeOptions();
156 this->parseIntegrator();
164 CH_TIME(
"MeshODEStepper::parseProblem()");
166 pout() <<
"MeshODEStepper::parseProblem()" <<
endl;
191 for (
auto&
r :
rhs) {
204 CH_TIME(
"MeshODEStepper::writeCheckpointData(HDF5Handle, int)");
206 pout() <<
"MeshODEStepper::writeCheckpointData(HDF5Handle, int)" <<
endl;
218 CH_TIME(
"MeshODEStepper::readCheckpointData(HDF5Handle, int)");
220 pout() <<
"MeshODEStepper::readCheckpointData(HDF5Handle, int)" <<
endl;
231 CH_TIME(
"MeshODEStepper::getNumberOfPlotVariables()");
233 pout() <<
"MeshODEStepper::getNumberOfPlotVariables()" <<
endl;
236 return m_solver->getNumberOfPlotVariables();
243 CH_TIME(
"MeshODEStepper::getPlotVariableNames()");
245 pout() <<
"MeshODEStepper::getPlotVariableNames()" <<
endl;
248 return m_solver->getPlotVariableNames();
258 CH_TIME(
"MeshODEStepper::writePlotData");
260 pout() <<
"MeshODEStepper::writePlotData" <<
endl;
270 CH_TIME(
"MeshODEStepper::computeDt()");
272 pout() <<
"MeshODEStepper::computeDt()" <<
endl;
282 CH_TIME(
"MeshODEStepper::advance(Real)");
284 pout() <<
"MeshODEStepper::advance(Real)" <<
endl;
287 switch (m_algorithm) {
288 case IntegrationAlgorithm::Euler: {
289 this->advanceEuler(
a_dt);
293 case IntegrationAlgorithm::RK2: {
294 this->advanceRK2(
a_dt);
298 case IntegrationAlgorithm::RK4: {
299 this->advanceRK4(
a_dt);
304 MayDay::Error(
"MeshODEStepper::advance -- logic bust");
311 m_solver->computeRHS(m_rhsFunction);
320 CH_TIME(
"MeshODEStepper::synchronizeSolverTimes(int, Real, Real)");
322 pout() <<
"MeshODEStepper::synchronizeSolverTimes(int, Real, Real)" <<
endl;
335 CH_TIME(
"MeshODEStepper::preRegrid(int, int)");
337 pout() <<
"MeshODEStepper::preRegrid(int, int)" <<
endl;
347 CH_TIME(
"MeshODEStepper::regrid(int, int, int)");
349 pout() <<
"MeshODEStepper::regrid(int, int, int)" <<
endl;
359 CH_TIME(
"MeshODEStepper::postRegrid()");
361 pout() <<
"MeshODEStepper::postRegrid()" <<
endl;
365 m_solver->computeRHS(m_rhsFunction);
372 CH_TIME(
"MeshODEStepper::parseIntegrator()");
374 pout() <<
"MeshODEStepper::parseIntegrator()" <<
endl;
381 pp.get(
"integration",
str);
382 if (
str ==
"euler") {
383 m_algorithm = IntegrationAlgorithm::Euler;
385 else if (
str ==
"rk2") {
386 m_algorithm = IntegrationAlgorithm::RK2;
388 else if (
str ==
"rk4") {
389 m_algorithm = IntegrationAlgorithm::RK4;
392 MayDay::Error(
"MeshODEStepper::parseIntegrator -- logic bust");
400 CH_TIME(
"MeshODEStepper::parseVerbosity()");
402 pout() <<
"MeshODEStepper::parseVerbosity()" <<
endl;
414 CH_TIME(
"MeshODEStepper::advanceEuler()");
416 pout() <<
"MeshODEStepper::advanceEuler()" <<
endl;
423 m_solver->computeRHS(
rhs, m_rhsFunction);
432 CH_TIME(
"MeshODEStepper::advanceRK2()");
434 pout() <<
"MeshODEStepper::advanceRK2()" <<
endl;
445 m_solver->computeRHS(
k1, m_rhsFunction);
448 m_solver->computeRHS(
k2, m_rhsFunction);
457 CH_TIME(
"MeshODEStepper::advanceRK4()");
459 pout() <<
"MeshODEStepper::advanceRK4()" <<
endl;
462 MayDay::Error(
"MeshODEStepper::advanceRK4 -- not implemented");
465#include <CD_NamespaceFooter.H>
Encapsulation of an ODE solver on the mesh.
Declaration of main (abstract) time stepper class.
static void incr(MFAMRCellData &a_lhs, const MFAMRCellData &a_rhs, const Real a_scale) noexcept
Function which increments data in the form a_lhs = a_lhs + a_rhs*a_scale for all components.
Definition CD_DataOps.cpp:820
TimeStepper for advancing a system of N coupled ODEs on an AMR mesh.
Definition CD_MeshODEStepper.H:49
virtual void advanceEuler(const Real a_dt)
Advance using the explicit Euler rule.
Definition CD_MeshODEStepperImplem.H:412
virtual Real advance(const Real a_dt) override
Advancement method. Swaps between various kernels.
Definition CD_MeshODEStepperImplem.H:280
void registerOperators() override
Register operators.
Definition CD_MeshODEStepperImplem.H:121
void parseRuntimeOptions() override
Parse runtime options.
Definition CD_MeshODEStepperImplem.H:147
virtual Vector< std::string > getPlotVariableNames() const override
Get plot variable names.
Definition CD_MeshODEStepperImplem.H:241
virtual void advanceRK2(const Real a_dt)
Advance using a second-order Runge-Kutta method.
Definition CD_MeshODEStepperImplem.H:430
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override
Time stepper regrid method.
Definition CD_MeshODEStepperImplem.H:345
virtual void parseIntegrator()
Parse integrator.
Definition CD_MeshODEStepperImplem.H:370
void initialData() override
Fill problem with initial data.
Definition CD_MeshODEStepperImplem.H:74
void allocate() override
Allocate storage for solvers and time stepper.
Definition CD_MeshODEStepperImplem.H:62
virtual void synchronizeSolverTimes(const int a_step, const Real a_time, const Real a_dt) override
Synchronize solver times and time steps.
Definition CD_MeshODEStepperImplem.H:318
virtual ~MeshODEStepper()
Destructor.
Definition CD_MeshODEStepperImplem.H:36
virtual void parseVerbosity()
Parse chattiness.
Definition CD_MeshODEStepperImplem.H:398
virtual void parseProblem()
Parse the problem type.
Definition CD_MeshODEStepperImplem.H:162
void setupSolvers() override
Instantiate the ODE solver.
Definition CD_MeshODEStepperImplem.H:46
virtual void advanceRK4(const Real a_dt)
Advance using a fourth order Runge-Kutta method.
Definition CD_MeshODEStepperImplem.H:455
virtual void preRegrid(const int a_lmin, const int a_oldFinestLevel) override
Perform pre-regrid operations.
Definition CD_MeshODEStepperImplem.H:333
void postCheckpointSetup() override
Post checkpoint operations.
Definition CD_MeshODEStepperImplem.H:97
virtual int getNumberOfPlotVariables() const override
Get the number of plot variables for this time stepper.
Definition CD_MeshODEStepperImplem.H:229
void registerRealms() override
Register realms. Primal is the only realm we need.
Definition CD_MeshODEStepperImplem.H:109
virtual void writePlotData(LevelData< EBCellFAB > &a_output, int &a_icomp, const std::string &a_outputRealm, const int a_level) const override
Write plot data to output holder.
Definition CD_MeshODEStepperImplem.H:253
void parseOptions()
Parse options.
Definition CD_MeshODEStepperImplem.H:133
virtual void postRegrid() override
Perform post-regrid operations.
Definition CD_MeshODEStepperImplem.H:357
void postInitialize() override
Perform any post-initialization steps.
Definition CD_MeshODEStepperImplem.H:87
MeshODEStepper()
Constructor. Does nothing.
Definition CD_MeshODEStepperImplem.H:24
virtual Real computeDt() override
Compute a time step.
Definition CD_MeshODEStepperImplem.H:268
static const std::string Primal
Identifier for perimal realm.
Definition CD_Realm.H:39
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:38
virtual void setRealm(const std::string &a_realm)
Set the solver realm.
Definition CD_TracerParticleSolverImplem.H:233
phase::which_phase m_phase
Phase where this solver lives.
Definition CD_TracerParticleSolver.H:367
TracerParticleSolver()
Default constructor.
Definition CD_TracerParticleSolverImplem.H:26
virtual void setTime(const int a_step, const Real a_time, const Real a_dt)
Set the time for this solver.
Definition CD_TracerParticleSolverImplem.H:257
std::string m_realm
Realm where this solver lives.
Definition CD_TracerParticleSolver.H:352
void parseVerbosity()
Parse solver verbosity.
Definition CD_TracerParticleSolverImplem.H:163
int m_verbosity
Verbosity level.
Definition CD_TracerParticleSolver.H:387
RefCountedPtr< AmrMesh > m_amr
Handle to AMR mesh.
Definition CD_TracerParticleSolver.H:327
virtual void setPhase(const phase::which_phase &a_phase)
Set the solver phase.
Definition CD_TracerParticleSolverImplem.H:245
Real m_dt
Time step.
Definition CD_TracerParticleSolver.H:372
virtual void allocate()
Allocate storage for this solver.
Definition CD_TracerParticleSolverImplem.H:195
int m_timeStep
Time step.
Definition CD_TracerParticleSolver.H:382
virtual void parseOptions()
Parse solver options.
Definition CD_TracerParticleSolverImplem.H:63
Real m_time
Time.
Definition CD_TracerParticleSolver.H:377
@ gas
Gas phase.
Definition CD_MultiFluidIndexSpace.H:39