chombo-discharge
Loading...
Searching...
No Matches
CD_RadiativeTransferStepperImplem.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// Std includes
14#include <math.h>
15
16// Chombo includes
17#include <CH_Timer.H>
18#include <ParmParse.H>
19#include <PolyGeom.H>
20
21// Our includes
24#include <CD_NamespaceHeader.H>
25
26using namespace Physics::RadiativeTransfer;
27
28template <typename T>
30{
31 CH_TIME("RadiativeTransferStepper::RadiativeTransferStepper");
32
33 // Get shit for setting the source term
34 ParmParse pp("RadiativeTransferStepper");
36
37 pp.get("verbosity", m_verbosity);
38 pp.get("realm", m_realm);
39 pp.get("dt", m_dt);
40
41 m_forceDt = -1.0;
42}
43
44template <typename T>
46{
47 CH_TIME("RadiativeTransferStepper::~RadiativeTransferStepper");
48 if (m_verbosity > 5) {
49 pout() << "RadiativeTransferStepper::~RadiativeTransferStepper" << endl;
50 }
51}
52
53template <typename T>
54void
56{
57 CH_TIME("RadiativeTransferStepper::setupSolvers");
58 if (m_verbosity > 5) {
59 pout() << "RadiativeTransferStepper::setupSolvers" << endl;
60 }
61
63
64 // Solver setup
65 m_solver = RefCountedPtr<RtSolver>(new T());
66 m_solver->setVerbosity(m_verbosity);
67 m_solver->setRtSpecies(m_species);
68 m_solver->parseOptions();
69 m_solver->setPhase(phase::gas);
70 m_solver->setAmr(m_amr);
71 m_solver->setComputationalGeometry(m_computationalGeometry);
72 m_solver->setRealm(m_realm);
73}
74
75template <typename T>
76void
78{
79 CH_TIME("RadiativeTransferStepper::parseRuntimeOptions");
80 if (m_verbosity > 5) {
81 pout() << "RadiativeTransferStepper::parseRuntimeOptions" << endl;
82 }
83
84 ParmParse pp("RadiativeTransferStepper");
85
86 pp.get("verbosity", m_verbosity);
87 pp.get("dt", m_dt);
88
89 m_solver->parseRuntimeOptions();
90}
91
92template <typename T>
93void
95{
96 CH_TIME("RadiativeTransferStepper::allocate");
97 if (m_verbosity > 5) {
98 pout() << "RadiativeTransferStepper::allocate" << endl;
99 }
100
101 m_solver->allocate();
102}
103
104template <typename T>
105void
107{
108 CH_TIME("RadiativeTransferStepper::initialData");
109 if (m_verbosity > 5) {
110 pout() << "RadiativeTransferStepper::initialData" << endl;
111 }
112
113 m_solver->initialData();
114 this->setGaussianSource();
115
116 if (m_solver->isStationary()) {
117 m_solver->advance(0.0, false);
118 }
119}
120
121template <typename T>
122void
124{
125 CH_TIME("RadiativeTransferStepper::postInitialize");
126 if (m_verbosity > 5) {
127 pout() << "RadiativeTransferStepper::postInitialize" << endl;
128 }
129}
130
131template <typename T>
132void
134{
135 CH_TIME("RadiativeTransferStepper::forceDt");
136 if (m_verbosity > 5) {
137 pout() << "RadiativeTransferStepper::forceDt" << endl;
138 }
139
140 m_forceDt = a_dt;
141}
142
143#ifdef CH_USE_HDF5
144template <typename T>
145void
147{
148 CH_TIME("RadiativeTransferStepper::writeCheckpointData");
149 if (m_verbosity > 5) {
150 pout() << "RadiativeTransferStepper::writeCheckpointData" << endl;
151 }
152
153 m_solver->writeCheckpointLevel(a_handle, a_lvl);
154}
155#endif
156
157#ifdef CH_USE_HDF5
158template <typename T>
159void
161{
162 CH_TIME("RadiativeTransferStepper::readCheckpointData");
163 if (m_verbosity > 5) {
164 pout() << "RadiativeTransferStepper::readCheckpointData" << endl;
165 }
166
167 m_solver->readCheckpointLevel(a_handle, a_lvl);
168}
169#endif
170
171template <typename T>
172void
174{
175 CH_TIME("RadiativeTransferStepper::postCheckpointSetup");
176 if (m_verbosity > 5) {
177 pout() << "RadiativeTransferStepper::postCheckpointSetup" << endl;
178 }
179
180 this->setGaussianSource();
181}
182
183template <typename T>
184int
186{
187 CH_TIME("RadiativeTransferStepper::getNumberOfPlotVariables");
188 if (m_verbosity > 5) {
189 pout() << "RadiativeTransferStepper::getNumberOfPlotVariables" << endl;
190 }
191
192 return m_solver->getNumberOfPlotVariables();
193}
194
195template <typename T>
198{
199 CH_TIME("RadiativeTransferStepper::getPlotVariableNames");
200 if (m_verbosity > 5) {
201 pout() << "RadiativeTransferStepper::getPlotVariableNames" << endl;
202 }
203
204 return m_solver->getPlotVariableNames();
205}
206
207template <typename T>
208void
210 int& a_icomp,
212 const int a_level) const
213{
214 CH_TIME("RadiativeTransferStepper::writePlotData");
215 if (m_verbosity > 5) {
216 pout() << "RadiativeTransferStepper::writePlotData" << endl;
217 }
218
219 m_solver->writePlotData(a_output, a_icomp, a_outputRealm, a_level);
220}
221
222template <typename T>
223Real
225{
226 CH_TIME("RadiativeTransferStepper::computeDt");
227 if (m_verbosity > 5) {
228 pout() << "RadiativeTransferStepper::computeDt" << endl;
229 }
230
231 Real dt = m_dt;
232
233 if (m_forceDt > 0.0) {
234 dt = m_forceDt;
235 }
236
237 return dt;
238}
239
240template <typename T>
241Real
243{
244 CH_TIME("RadiativeTransferStepper::advance");
245 if (m_verbosity > 5) {
246 pout() << "RadiativeTransferStepper::advance" << endl;
247 }
248
249 m_solver->advance(a_dt);
250
251 return a_dt;
252}
253
254template <typename T>
255void
257{
258 CH_TIME("RadiativeTransferStepper::synchronizeSolverTimes");
259 if (m_verbosity > 5) {
260 pout() << "RadiativeTransferStepper::synchronizeSolverTimes" << endl;
261 }
262
264 m_time = a_time;
265 m_dt = a_dt;
266
267 m_solver->setTime(m_timeStep, m_time, m_dt);
268}
269
270template <typename T>
271void
273{
274 CH_TIME("RadiativeTransferStepper::printStepReport");
275 if (m_verbosity > 5) {
276 pout() << "RadiativeTransferStepper::printStepReport" << endl;
277 }
278}
279
280template <typename T>
281void
283{
284 CH_TIME("RadiativeTransferStepper::registerRealms");
285 if (m_verbosity > 5) {
286 pout() << "RadiativeTransferStepper::registerRealms" << endl;
287 }
288
289 m_amr->registerRealm(m_realm);
290}
291
292template <typename T>
293void
295{
296 CH_TIME("RadiativeTransferStepper::registerOperators");
297 if (m_verbosity > 5) {
298 pout() << "RadiativeTransferStepper::registerOperators" << endl;
299 }
300
301 m_solver->registerOperators();
302}
303
304template <typename T>
305void
307{
308 CH_TIME("RadiativeTransferStepper::preRegrid");
309 if (m_verbosity > 5) {
310 pout() << "RadiativeTransferStepper::preRegrid" << endl;
311 }
312
313 m_solver->preRegrid(a_base, a_oldFinestLevel);
314}
315
316template <typename T>
317void
319{
320 CH_TIME("RadiativeTransferStepper::regrid");
321 if (m_verbosity > 5) {
322 pout() << "RadiativeTransferStepper::regrid" << endl;
323 }
324
325 m_solver->regrid(a_lmin, a_oldFinestLevel, a_newFinestLevel);
326}
327
328template <typename T>
329void
331{
332 CH_TIME("RadiativeTransferStepper::postRegrid");
333 if (m_verbosity > 5) {
334 pout() << "RadiativeTransferStepper::postRegrid" << endl;
335 }
336
337 this->setGaussianSource();
338}
339
340template <typename T>
341const EBAMRCellData&
343{
344 CH_TIME("RadiativeTransferStepper::getPhi");
345 if (m_verbosity > 5) {
346 pout() << "RadiativeTransferStepper::getPhi" << endl;
347 }
348
349 return m_solver->getPhi();
350}
351
352template <typename T>
353void
355{
356 CH_TIME("RadiativeTransferStepper::setGaussianSource");
357 if (m_verbosity > 5) {
358 pout() << "RadiativeTransferStepper::setGaussianSource" << endl;
359 }
360
361 ParmParse pp("RadiativeTransferStepper");
362
367
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]));
372
375 const Real dist2 = dist.dotProduct(dist);
376 return blobAmp * exp(-dist2 / (2 * blobRad * blobRad));
377 };
378
379 m_solver->setSource(sourceFunction);
380}
381
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
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:38
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
int m_verbosity
Verbosity level.
Definition CD_TracerParticleSolver.H:387
RefCountedPtr< AmrMesh > m_amr
Handle to AMR mesh.
Definition CD_TracerParticleSolver.H:327
RefCountedPtr< ComputationalGeometry > m_computationalGeometry
Handle to computational geometry.
Definition CD_TracerParticleSolver.H:332
virtual void parseRuntimeOptions()
Parse solver run-time options.
Definition CD_TracerParticleSolverImplem.H:77
Real m_dt
Time step.
Definition CD_TracerParticleSolver.H:372
int m_timeStep
Time step.
Definition CD_TracerParticleSolver.H:382
Real m_time
Time.
Definition CD_TracerParticleSolver.H:377
Namespace for encapsulating the radiative transfer physics module.
Definition CD_RadiativeTransferSpecies.H:21
@ gas
Gas phase.
Definition CD_MultiFluidIndexSpace.H:39