12#ifndef CD_MeshODESolverImplem_H
13#define CD_MeshODESolverImplem_H
24#include <CD_NamespaceHeader.H>
29 CH_TIME(
"MeshODESolver::MeshODESolver()");
44 CH_TIME(
"MeshODESolver::MeshODESolver(AMR)");
52 CH_TIME(
"MeshODESolver::~MeshODESolver");
59 CH_TIME(
"MeshODESolver::setAmr");
60 if (m_verbosity > 5) {
61 pout() << m_name +
"::setAmr" <<
endl;
71 CH_TIME(
"MeshODESolver::parseOptions");
76 pp.get(
"use_regrid_slopes", m_regridSlopes);
89 CH_TIME(
"MeshODESolver::parseRuntimeOptions()");
97 pp.get(
"use_regrid_slopes", m_regridSlopes);
106 CH_TIME(
"MeshODESolver::parsePlotVariables()");
115 const int num =
pp.countval(
"plt_vars");
121 for (
int i = 0;
i <
num;
i++) {
122 if (
str[
i] ==
"phi") {
125 else if (
str[
i] ==
"rhs") {
136 CH_TIME(
"MeshODESolver::getPhi()");
148 CH_TIME(
"MeshODESolver::getPhi()");
160 CH_TIME(
"MeshODESolver::getRHS()");
172 CH_TIME(
"MeshODESolver::getRHS()");
184 CH_TIME(
"MeshODESolver::setPhi(std::function, size_t)");
185 if (m_verbosity > 5) {
186 pout() << m_name +
"::setPhi(std::function, size_t)" <<
endl;
196 CH_TIME(
"MeshODESolver::setPhi(std::function)");
197 if (m_verbosity > 5) {
198 pout() << m_name +
"::setPhi(std::function)" <<
endl;
201 constexpr int comp = 0;
203 for (
int lvl = 0;
lvl <= m_amr->getFinestLevel();
lvl++) {
212#pragma omp parallel for schedule(runtime)
232 for (
size_t i = 0;
i <
N;
i++) {
249 for (
size_t i = 0;
i <
N;
i++) {
269 CH_TIME(
"MeshODESolver::setRHS(std::function, size_t)");
270 if (m_verbosity > 5) {
271 pout() << m_name +
"::setRHS(std::function, size_t)" <<
endl;
281 CH_TIME(
"MeshODESolver::computeRHS(std::function<std::array<Real, N>(...)>)");
282 if (m_verbosity > 5) {
283 pout() << m_name +
"::computeRHS(std::function<std::array<Real, N>(...)>)" <<
endl;
293 CH_TIME(
"MeshODESolver::computeRHS(EBAMRCellData, std::function<std::array<Real, N>(...)>)");
294 if (m_verbosity > 5) {
295 pout() << m_name +
"::computeRHS(EBAMRCellData, std::function<std::array<Real, N>(...)>)" <<
endl;
298 constexpr int comp = 0;
300 for (
int lvl = 0;
lvl <= m_amr->getFinestLevel();
lvl++) {
307#pragma omp parallel for schedule(runtime)
328 for (
size_t i = 0;
i <
N;
i++) {
337 for (
size_t i = 0;
i <
N;
i++) {
352 for (
size_t i = 0;
i <
N;
i++) {
361 for (
size_t i = 0;
i <
N;
i++) {
381 CH_TIME(
"MeshODESolver::allocate()");
394 CH_TIME(
"MeshODESolver::preRegrid(int, int)");
395 if (m_verbosity > 5) {
396 pout() << m_name +
"::preRegrid(int, int)" <<
endl;
399 m_amr->
allocate(m_cache, m_realm, m_phase,
N);
400 m_amr->copyData(m_cache, m_phi);
409 CH_TIME(
"MeshODESolver::regrid(int, int, int)");
410 if (m_verbosity > 5) {
411 pout() << m_name +
"::regrid(int, int, int)" <<
endl;
417 : EBCoarseToFineInterp::Type::ConservativePWC;
421 m_amr->conservativeAverage(m_phi, m_realm, m_phase);
422 m_amr->interpGhost(m_phi, m_realm, m_phase);
431 CH_TIME(
"MeshODESolver::getRealm()");
443 CH_TIME(
"MeshODESolver::getName()");
455 CH_TIME(
"MeshODESolver::setName()");
456 if (m_verbosity > 5) {
457 pout() << m_name +
"::setName()" <<
endl;
467 CH_TIME(
"MeshODESolver::registerOperators()");
483 CH_TIME(
"MeshODESolver::setRealm(std::string)");
484 if (m_verbosity > 5) {
485 pout() << m_name +
"::setRealm(std::string)" <<
endl;
495 CH_TIME(
"MeshODESolver::setPhase(phase)");
496 if (m_verbosity > 5) {
497 pout() << m_name +
"::setPhase(phase)" <<
endl;
507 CH_TIME(
"MeshODESolver::setVerbosity(int)");
508 if (m_verbosity > 5) {
509 pout() << m_name +
"::setVerbosity(int)" <<
endl;
519 CH_TIME(
"MeshODESolver::setTime(int, Real, Real)");
520 if (m_verbosity > 5) {
521 pout() << m_name +
"::setTime(int, Real, Real)" <<
endl;
533 CH_TIME(
"MeshODESolver::writePlotFile()");
563 DischargeIO::writeEBHDF5(
fname,
569 m_amr->getRefinementRatios(),
573 m_amr->getFinestLevel() + 1,
582 CH_TIME(
"MeshODESolver::getNumberOfPlotVariables()");
604 CH_TIME(
"MeshODESolver::getPlotVariableNames()");
612 for (
size_t i = 0;
i <
N;
i++) {
618 for (
size_t i = 0;
i <
N;
i++) {
631 const int a_level)
const noexcept
633 CH_TIME(
"MeshODESolver::writePlotData");
634 if (m_verbosity > 5) {
635 pout() << m_name +
"::writePlotData" <<
endl;
659 CH_TIMER(
"MeshODESolver::writeData::allocate",
t1);
660 CH_TIMER(
"MeshODESolver::writeData::local_copy",
t2);
661 CH_TIMER(
"MeshODESolver::writeData::interp_ghost",
t3);
662 CH_TIMER(
"MeshODESolver::writeData::interp_centroid",
t4);
663 CH_TIMER(
"MeshODESolver::writeData::final_copy",
t5);
664 if (m_verbosity > 5) {
665 pout() << m_name +
"::writeData" <<
endl;
711 CH_TIME(
"MeshODESolver::writeCheckpointLevel(HDF5Handle, int)");
712 if (m_verbosity > 5) {
713 pout() << m_name +
"::writeCheckpointLevel(HDF5Handle, int)" <<
endl;
726 CH_TIME(
"MeshODESolver::writeCheckpointLevel(HDF5Handle, int)");
727 if (m_verbosity > 5) {
728 pout() << m_name +
"::writeCheckpointLevel(HDF5Handle, int)" <<
endl;
735 m_amr->getGrids(m_realm)[
a_level],
741#include <CD_NamespaceFooter.H>
Declaration of a namespace for proto-typing grid and EB loops.
Silly, but useful functions that override standard Chombo HDF5 IO.
Declaration of cell positions.
Encapsulation of an ODE solver on the mesh.
static void setCoveredValue(EBAMRCellData &a_lhs, const int a_comp, const Real a_value)
Set value in covered cells. Does specified component.
Definition CD_DataOps.cpp:2552
static void setValue(LevelData< MFInterfaceFAB< T > > &a_lhs, const T &a_value)
Set value in an MFInterfaceFAB data holder.
Definition CD_DataOpsImplem.H:23
Type
Type of interpolation methods supported. PWC = Piecewise constant, ignoring the embedded boundary....
Definition CD_EBCoarseToFineInterp.H:42
Class for solving dy/dt = f on an AMR hierarchy.
Definition CD_MeshODESolver.H:28
virtual std::string getRealm() const noexcept
Get the realm where this solver is registered.
Definition CD_MeshODESolverImplem.H:429
virtual void writePlotData(LevelData< EBCellFAB > &a_output, int &a_icomp, const std::string a_outputRealm, const int a_level) const noexcept
Write plot data to output holder.
Definition CD_MeshODESolverImplem.H:628
virtual Vector< std::string > getPlotVariableNames() const noexcept
Get output plot names.
Definition CD_MeshODESolverImplem.H:602
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) noexcept
Regrid this solver.
Definition CD_MeshODESolverImplem.H:407
virtual void writePlotFile() const noexcept
Write plot file.
Definition CD_MeshODESolverImplem.H:531
std::function< std::array< Real, N >(const std::array< Real, N > &, const Real)> RHSFunction
Alias for right-hand side.
Definition CD_MeshODESolver.H:33
virtual void setName(const std::string &a_name) noexcept
Set solver name.
Definition CD_MeshODESolverImplem.H:453
virtual void preRegrid(const int a_lbase, const int a_oldFinestLevel) noexcept
Perform pre-regrid operations.
Definition CD_MeshODESolverImplem.H:392
virtual void setPhi(const std::function< Real(const RealVect &a_pos)> &a_phiFunc, const size_t a_comp) noexcept
Set phi for a specific component.
Definition CD_MeshODESolverImplem.H:182
virtual void parseRuntimeOptions() noexcept
Parse run-time configurable class options.
Definition CD_MeshODESolverImplem.H:87
MeshODESolver()
Default constructor. Must subsequently set everything through public member functions.
Definition CD_MeshODESolverImplem.H:27
virtual void registerOperators() const noexcept
Register operators for AMR operations.
Definition CD_MeshODESolverImplem.H:465
virtual void setVerbosity(const int a_verbosity) noexcept
Set verbosity.
Definition CD_MeshODESolverImplem.H:505
virtual void setRHS(const std::function< Real(const RealVect &a_pos)> &a_srcFunc, const size_t a_comp) noexcept
Set right-hand side for specified component.
Definition CD_MeshODESolverImplem.H:267
virtual void setRealm(const std::string a_realm) noexcept
Set the realm for this solver.
Definition CD_MeshODESolverImplem.H:481
EBAMRCellData & getPhi() noexcept
Get the solution vector (left-hand side of equation).
Definition CD_MeshODESolverImplem.H:134
virtual ~MeshODESolver()
Destructor.
Definition CD_MeshODESolverImplem.H:50
virtual int getNumberOfPlotVariables() const noexcept
Get number of output fields.
Definition CD_MeshODESolverImplem.H:580
virtual void parseOptions() noexcept
Parse class options.
Definition CD_MeshODESolverImplem.H:69
virtual void parsePlotVariables() noexcept
Parse plot variables.
Definition CD_MeshODESolverImplem.H:104
EBAMRCellData & getRHS() noexcept
Get the solution vector (left-hand side of equation).
Definition CD_MeshODESolverImplem.H:158
virtual void setAmr(const RefCountedPtr< AmrMesh > &a_amrMesh) noexcept
Set AmrMesh.
Definition CD_MeshODESolverImplem.H:57
virtual void setPhase(phase::which_phase a_phase) noexcept
Set phase.
Definition CD_MeshODESolverImplem.H:493
virtual void allocate() noexcept
Allocate internal storage.
Definition CD_MeshODESolverImplem.H:379
virtual void setTime(const int a_step, const Real a_time, const Real a_dt) noexcept
Set the time for this solver.
Definition CD_MeshODESolverImplem.H:517
virtual std::string getName() const noexcept
Get solver name.
Definition CD_MeshODESolverImplem.H:441
virtual void computeRHS(const RHSFunction &a_rhsFunction) noexcept
Compute right-hand side from left-hand side. I.e. compute f = f(y,t).
Definition CD_MeshODESolverImplem.H:279
virtual void writeData(LevelData< EBCellFAB > &a_output, int &a_comp, const EBAMRCellData &a_data, const std::string a_outputRealm, const int a_level, const bool a_interpToCentroids, const bool a_interpGhost) const noexcept
Write data to output. Convenience function.
Definition CD_MeshODESolverImplem.H:649
static const std::string Primal
Identifier for perimal realm.
Definition CD_Realm.H:47
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:37
void parsePlotVariables()
Parse plot variables.
Definition CD_TracerParticleSolverImplem.H:145
phase::which_phase m_phase
Phase where this solver lives.
Definition CD_TracerParticleSolver.H:343
TracerParticleSolver()
Default constructor.
Definition CD_TracerParticleSolverImplem.H:25
std::string m_realm
Realm where this solver lives.
Definition CD_TracerParticleSolver.H:328
virtual void writePlotData(LevelData< EBCellFAB > &a_output, int &a_comp, const std::string a_outputRealm, const int a_level) const noexcept
Write plot data.
Definition CD_TracerParticleSolverImplem.H:505
int m_verbosity
Verbosity level.
Definition CD_TracerParticleSolver.H:363
RefCountedPtr< AmrMesh > m_amr
Handle to AMR mesh.
Definition CD_TracerParticleSolver.H:303
virtual Vector< std::string > getPlotVariableNames() const
Get plot variable names.
Definition CD_TracerParticleSolverImplem.H:476
Real m_dt
Time step.
Definition CD_TracerParticleSolver.H:348
virtual void allocate()
Allocate storage for this solver.
Definition CD_TracerParticleSolverImplem.H:195
std::string m_name
Solver name.
Definition CD_TracerParticleSolver.H:333
int m_timeStep
Time step.
Definition CD_TracerParticleSolver.H:358
std::string m_className
Class name.
Definition CD_TracerParticleSolver.H:338
virtual void parseOptions()
Parse solver options.
Definition CD_TracerParticleSolverImplem.H:63
Real m_time
Time.
Definition CD_TracerParticleSolver.H:353
virtual int getNumberOfPlotVariables() const
Get the number of plot variables.
Definition CD_TracerParticleSolverImplem.H:455
ALWAYS_INLINE void loop(const Box &a_computeBox, Functor &&kernel, const IntVect &a_stride=IntVect::Unit)
Launch a C++ kernel over a regular grid.
Definition CD_BoxLoopsImplem.H:20
RealVect position(const Location::Cell a_location, const VolIndex &a_vof, const EBISBox &a_ebisbox, const Real &a_dx)
Compute the position (ignoring the "origin) of a Vof.
Definition CD_LocationImplem.H:20