24#include <CD_NamespaceHeader.H>
31 CH_TIME(
"RadiativeTransferStepper::RadiativeTransferStepper");
34 ParmParse pp(
"RadiativeTransferStepper");
37 pp.get(
"verbosity", m_verbosity);
38 pp.get(
"realm", m_realm);
47 CH_TIME(
"RadiativeTransferStepper::~RadiativeTransferStepper");
48 if (m_verbosity > 5) {
49 pout() <<
"RadiativeTransferStepper::~RadiativeTransferStepper" << endl;
57 CH_TIME(
"RadiativeTransferStepper::setupSolvers");
58 if (m_verbosity > 5) {
59 pout() <<
"RadiativeTransferStepper::setupSolvers" << endl;
65 m_solver = RefCountedPtr<RtSolver>(
new T());
66 m_solver->setVerbosity(m_verbosity);
67 m_solver->setRtSpecies(m_species);
68 m_solver->parseOptions();
70 m_solver->setAmr(m_amr);
71 m_solver->setComputationalGeometry(m_computationalGeometry);
72 m_solver->setRealm(m_realm);
79 CH_TIME(
"RadiativeTransferStepper::parseRuntimeOptions");
80 if (m_verbosity > 5) {
81 pout() <<
"RadiativeTransferStepper::parseRuntimeOptions" << endl;
84 ParmParse pp(
"RadiativeTransferStepper");
86 pp.get(
"verbosity", m_verbosity);
89 m_solver->parseRuntimeOptions();
96 CH_TIME(
"RadiativeTransferStepper::allocate");
97 if (m_verbosity > 5) {
98 pout() <<
"RadiativeTransferStepper::allocate" << endl;
101 m_solver->allocate();
108 CH_TIME(
"RadiativeTransferStepper::initialData");
109 if (m_verbosity > 5) {
110 pout() <<
"RadiativeTransferStepper::initialData" << endl;
113 m_solver->initialData();
114 this->setGaussianSource();
116 if (m_solver->isStationary()) {
117 m_solver->advance(0.0,
false);
125 CH_TIME(
"RadiativeTransferStepper::postInitialize");
126 if (m_verbosity > 5) {
127 pout() <<
"RadiativeTransferStepper::postInitialize" << endl;
135 CH_TIME(
"RadiativeTransferStepper::forceDt");
136 if (m_verbosity > 5) {
137 pout() <<
"RadiativeTransferStepper::forceDt" << endl;
148 CH_TIME(
"RadiativeTransferStepper::writeCheckpointData");
149 if (m_verbosity > 5) {
150 pout() <<
"RadiativeTransferStepper::writeCheckpointData" << endl;
153 m_solver->writeCheckpointLevel(a_handle, a_lvl);
162 CH_TIME(
"RadiativeTransferStepper::readCheckpointData");
163 if (m_verbosity > 5) {
164 pout() <<
"RadiativeTransferStepper::readCheckpointData" << endl;
167 m_solver->readCheckpointLevel(a_handle, a_lvl);
175 CH_TIME(
"RadiativeTransferStepper::postCheckpointSetup");
176 if (m_verbosity > 5) {
177 pout() <<
"RadiativeTransferStepper::postCheckpointSetup" << endl;
180 this->setGaussianSource();
187 CH_TIME(
"RadiativeTransferStepper::getNumberOfPlotVariables");
188 if (m_verbosity > 5) {
189 pout() <<
"RadiativeTransferStepper::getNumberOfPlotVariables" << endl;
192 return m_solver->getNumberOfPlotVariables();
199 CH_TIME(
"RadiativeTransferStepper::getPlotVariableNames");
200 if (m_verbosity > 5) {
201 pout() <<
"RadiativeTransferStepper::getPlotVariableNames" << endl;
204 return m_solver->getPlotVariableNames();
211 const std::string& a_outputRealm,
212 const int a_level)
const
214 CH_TIME(
"RadiativeTransferStepper::writePlotData");
215 if (m_verbosity > 5) {
216 pout() <<
"RadiativeTransferStepper::writePlotData" << endl;
219 m_solver->writePlotData(a_output, a_icomp, a_outputRealm, a_level);
226 CH_TIME(
"RadiativeTransferStepper::computeDt");
227 if (m_verbosity > 5) {
228 pout() <<
"RadiativeTransferStepper::computeDt" << endl;
233 if (m_forceDt > 0.0) {
244 CH_TIME(
"RadiativeTransferStepper::advance");
245 if (m_verbosity > 5) {
246 pout() <<
"RadiativeTransferStepper::advance" << endl;
249 m_solver->advance(a_dt);
258 CH_TIME(
"RadiativeTransferStepper::synchronizeSolverTimes");
259 if (m_verbosity > 5) {
260 pout() <<
"RadiativeTransferStepper::synchronizeSolverTimes" << endl;
267 m_solver->setTime(m_timeStep, m_time, m_dt);
274 CH_TIME(
"RadiativeTransferStepper::printStepReport");
275 if (m_verbosity > 5) {
276 pout() <<
"RadiativeTransferStepper::printStepReport" << endl;
284 CH_TIME(
"RadiativeTransferStepper::registerRealms");
285 if (m_verbosity > 5) {
286 pout() <<
"RadiativeTransferStepper::registerRealms" << endl;
289 m_amr->registerRealm(m_realm);
296 CH_TIME(
"RadiativeTransferStepper::registerOperators");
297 if (m_verbosity > 5) {
298 pout() <<
"RadiativeTransferStepper::registerOperators" << endl;
301 m_solver->registerOperators();
308 CH_TIME(
"RadiativeTransferStepper::preRegrid");
309 if (m_verbosity > 5) {
310 pout() <<
"RadiativeTransferStepper::preRegrid" << endl;
313 m_solver->preRegrid(a_base, a_oldFinestLevel);
320 CH_TIME(
"RadiativeTransferStepper::regrid");
321 if (m_verbosity > 5) {
322 pout() <<
"RadiativeTransferStepper::regrid" << endl;
325 m_solver->regrid(a_lmin, a_oldFinestLevel, a_newFinestLevel);
332 CH_TIME(
"RadiativeTransferStepper::postRegrid");
333 if (m_verbosity > 5) {
334 pout() <<
"RadiativeTransferStepper::postRegrid" << endl;
337 this->setGaussianSource();
344 CH_TIME(
"RadiativeTransferStepper::getPhi");
345 if (m_verbosity > 5) {
346 pout() <<
"RadiativeTransferStepper::getPhi" << endl;
349 return m_solver->getPhi();
356 CH_TIME(
"RadiativeTransferStepper::setGaussianSource");
357 if (m_verbosity > 5) {
358 pout() <<
"RadiativeTransferStepper::setGaussianSource" << endl;
361 ParmParse pp(
"RadiativeTransferStepper");
363 Vector<Real> v(SpaceDim);
368 pp.get(
"blob_amplitude", blobAmp);
369 pp.get(
"blob_radius", blobRad);
370 pp.getarr(
"blob_center", v, 0, SpaceDim);
371 blobCenter = RealVect(D_DECL(v[0], v[1], v[2]));
373 auto sourceFunction = [blobAmp, blobRad, blobCenter](
const RealVect a_position) -> Real {
374 const RealVect dist = a_position - blobCenter;
375 const Real dist2 = dist.dotProduct(dist);
376 return blobAmp * exp(-dist2 / (2 * blobRad * blobRad));
379 m_solver->setSource(sourceFunction);
382#include <CD_NamespaceFooter.H>
Declaration of the Physics::RadiativeTransfer::RadiativeTransferSpecies RtSpecies.
Declaration of the Physics::RadiativeTransfer::RadiativeTransferStepper TimeStepper.
Implementation of RtSpecies for usage in RadiativeTransfer module.
Definition CD_RadiativeTransferSpecies.H:28
TimeStepper for advancing a single radiative transfer species on an AMR mesh.
Definition CD_RadiativeTransferStepper.H:37
void registerOperators() override
Register operators – calls the solver registration routine.
Definition CD_RadiativeTransferStepperImplem.H:294
void postCheckpointSetup() override
Perform post-checkpoint setup routines (sets the source in the solver)
Definition CD_RadiativeTransferStepperImplem.H:173
void registerRealms() override
Register realms.
Definition CD_RadiativeTransferStepperImplem.H:282
void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override
Regrid function. Calls the solver function.
Definition CD_RadiativeTransferStepperImplem.H:318
void allocate() override
Allocate necessary memory for solvers.
Definition CD_RadiativeTransferStepperImplem.H:94
RadiativeTransferStepper()
Constructor. Reads a couple of input options.
Definition CD_RadiativeTransferStepperImplem.H:29
void postInitialize() override
Post-initialization functionality – sets the source term.
Definition CD_RadiativeTransferStepperImplem.H:123
Real advance(const Real a_dt) override
Advancement method. Calls the solver function.
Definition CD_RadiativeTransferStepperImplem.H:242
Vector< std::string > getPlotVariableNames() const override
Get plot variable names.
Definition CD_RadiativeTransferStepperImplem.H:197
int getNumberOfPlotVariables() const override
Get number of plot variables for this physics module.
Definition CD_RadiativeTransferStepperImplem.H:185
void preRegrid(const int a_lmin, const int a_oldFinestLevel) override
Perform pre-regrid operations — calls the solver function.
Definition CD_RadiativeTransferStepperImplem.H:306
void parseRuntimeOptions() override
Parse runtime options.
Definition CD_RadiativeTransferStepperImplem.H:77
Real computeDt() override
Compute a time step to be used by Driver.
Definition CD_RadiativeTransferStepperImplem.H:224
void setGaussianSource()
Set a Gaussian source term in the RtSolver.
Definition CD_RadiativeTransferStepperImplem.H:354
void forceDt(const Real a_dt)
Force usage of a time step.
Definition CD_RadiativeTransferStepperImplem.H:133
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_RadiativeTransferStepperImplem.H:209
void printStepReport() override
Print a step report (does nothing)
Definition CD_RadiativeTransferStepperImplem.H:272
void setupSolvers() override
Set up the solver.
Definition CD_RadiativeTransferStepperImplem.H:55
void postRegrid() override
Post-regrid function. Sets a Gaussian source.
Definition CD_RadiativeTransferStepperImplem.H:330
void initialData() override
Fill simulation with initial data.
Definition CD_RadiativeTransferStepperImplem.H:106
void synchronizeSolverTimes(const int a_step, const Real a_time, const Real a_dt) override
Synchronize solver times and time steps.
Definition CD_RadiativeTransferStepperImplem.H:256
virtual ~RadiativeTransferStepper()
Destructor (does nothing)
Definition CD_RadiativeTransferStepperImplem.H:45
const EBAMRCellData & getPhi() const
Get the solver solution.
Definition CD_RadiativeTransferStepperImplem.H:342
Namespace for encapsulating the radiative transfer physics module.
Definition CD_RadiativeTransferSpecies.H:21
@ gas
Gas phase.
Definition CD_MultiFluidIndexSpace.H:39