chombo-discharge
Loading...
Searching...
No Matches
CD_RtSolver.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_RTSOLVER_H
14#define CD_RTSOLVER_H
15
16// Std includes
17#include <functional>
18
19// Our includes
21#include <CD_AmrMesh.H>
22#include <CD_RtSpecies.H>
23#include <CD_Location.H>
24#include <CD_NamespaceHeader.H>
25
31{
32public:
36 RtSolver();
37
41 virtual ~RtSolver();
42
47 virtual std::string
48 getName();
49
54 virtual std::string
55 getRealm() const;
56
60 virtual void
62
66 virtual void
68
75 virtual bool
76 advance(const Real a_dt, const bool a_zeroPhi = false);
77
85 virtual bool
86 advance(const Real a_dt, EBAMRCellData& a_phi, const bool a_zeroPhi = false);
87
96 virtual bool
97 advance(const Real a_dt, EBAMRCellData& a_phi, const EBAMRCellData& a_source, const bool a_zeroPhi = false) = 0;
98
103 virtual void
104 setRealm(const std::string& a_realm);
105
110 virtual void
111 setRtSpecies(const RefCountedPtr<RtSpecies>& a_RtSpecies);
112
117 virtual void
118 setComputationalGeometry(const RefCountedPtr<ComputationalGeometry>& a_computationalGeometry);
119
129 virtual void
130 computeLoads(Vector<long long>& a_loads, const DisjointBoxLayout& a_dbl, const int a_level) const noexcept;
131
136 virtual void
137 setAmr(const RefCountedPtr<AmrMesh>& a_amr);
138
144 virtual void
146
151 virtual void
152 setVerbosity(const int a_verbosity);
153
161 virtual void
162 setTime(const int a_step, const Real a_time, const Real a_dt);
163
168 virtual void
169 setStationary(const bool a_stationary);
170
174 virtual void
175 sanityCheck();
176
181 virtual bool
182 isStationary();
183
190 virtual void
191 computeBoundaryFlux(EBAMRIVData& a_ebFlux, const EBAMRCellData& a_phi) = 0;
192
199 virtual void
200 computeDomainFlux(EBAMRIFData& a_domainflux, const EBAMRCellData& a_phi) = 0;
201
209 virtual void
210 computeFlux(EBAMRCellData& a_flux, const EBAMRCellData& a_phi) = 0;
211
219 virtual void
220 computeDensity(EBAMRCellData& a_isotropic, const EBAMRCellData& a_phi) = 0;
221
225 virtual void
226 allocate() = 0;
227
231 virtual void
233
239 virtual void
240 preRegrid(const int a_lbase, const int a_oldFinestLevel) = 0;
241
248 virtual void
249 regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) = 0;
250
254 virtual void
256
261 virtual void
262 initialData();
263
268 virtual void
269 setSource(const EBAMRCellData& a_source);
270
275 virtual void
276 setSource(const Real a_source);
277
282 virtual void
283 setSource(const std::function<Real(const RealVect a_pos)>& a_source);
284
288 virtual void
290
295 virtual int
297
302 virtual Vector<std::string>
303 getPlotVariableNames() const;
304
313 virtual void
314 writePlotData(LevelData<EBCellFAB>& a_output,
315 int& a_comp,
316 const std::string& a_outputRealm,
317 const int a_level) const noexcept;
318
319#ifdef CH_USE_HDF5
325 virtual void
326 writeCheckpointLevel(HDF5Handle& a_handle, const int a_level) const = 0;
327#endif
328
329#ifdef CH_USE_HDF5
335 virtual void
336 readCheckpointLevel(HDF5Handle& a_handle, const int a_level) = 0;
337#endif
338
343 virtual Real
344 getTime() const;
345
350 virtual phase::which_phase
351 getPhase();
352
357 virtual EBAMRCellData&
358 getPhi();
359
364 virtual EBAMRCellData&
365 getSource();
366
371 virtual EBAMRFluxData&
372 getKappa();
373
378 virtual EBAMRIVData&
379 getKappaEb();
380
385 virtual RefCountedPtr<RtSpecies>&
386 getSpecies();
387
388protected:
392 static constexpr int m_comp = 0;
393
397 static constexpr int m_nComp = 1;
398
403
407 std::string m_realm;
408
412 RefCountedPtr<EBIndexSpace> m_ebis;
413
417 RefCountedPtr<RtSpecies> m_rtSpecies;
418
422 RefCountedPtr<ComputationalGeometry> m_computationalGeometry;
423
427 RefCountedPtr<AmrMesh> m_amr;
428
433
437 std::string m_name = "RtSolver";
438
442 std::string m_className = "RtSolver";
443
447 EBAMRCellData m_cachePhi;
448
454 EBAMRCellData m_phi;
455
461 EBAMRCellData m_source;
462
466 EBAMRFluxData m_kappa;
467
471 EBAMRIVData m_kappaEB;
472
476 Real m_time;
477
481 Real m_dt;
482
487
492
497
502 int m_verbosity = -1;
503
508
513 void
514 setEbIndexSpace(const RefCountedPtr<EBIndexSpace>& a_ebis);
515
519 void
520 parseVerbosity() noexcept;
521
533 virtual void
534 writeData(LevelData<EBCellFAB>& a_output,
535 int& a_comp,
536 const EBAMRCellData& a_data,
537 const std::string& a_outputRealm,
538 const int a_level,
539 const bool a_interpToCentroids,
540 const bool a_interpGhost) const noexcept;
541};
542
543#include <CD_NamespaceFooter.H>
544
545#endif
Declaration of core class for handling AMR-related operations (with embedded boundaries)
Declaration of base class for defining geometries.
Declaration of cell positions.
Declaration of a class which supplies a user interface to radiative transfer code.
Abstract RTE solver class for doing various kinds of radiative transfer equations....
Definition CD_RtSolver.H:31
virtual void setRealm(const std::string &a_realm)
Set realm where this solver lives.
Definition CD_RtSolver.cpp:80
virtual void setAmr(const RefCountedPtr< AmrMesh > &a_amr)
Set the amr object.
Definition CD_RtSolver.cpp:154
EBAMRFluxData m_kappa
Absorption coefficient.
Definition CD_RtSolver.H:466
void setEbIndexSpace(const RefCountedPtr< EBIndexSpace > &a_ebis)
Set ebis.
Definition CD_RtSolver.cpp:143
virtual void computeDensity(EBAMRCellData &a_isotropic, const EBAMRCellData &a_phi)=0
Get isotropic part.
virtual Real getTime() const
Get current time.
Definition CD_RtSolver.cpp:393
virtual phase::which_phase getPhase()
Get the RTE phase.
Definition CD_RtSolver.cpp:404
RtSolver()
Constructor.
Definition CD_RtSolver.cpp:25
virtual EBAMRCellData & getPhi()
Get solver state.
Definition CD_RtSolver.cpp:415
virtual std::string getRealm() const
Get the realm where the solver lives.
Definition CD_RtSolver.cpp:42
virtual void computeLoads(Vector< long long > &a_loads, const DisjointBoxLayout &a_dbl, const int a_level) const noexcept
Get computational loads for a specific grid level.
Definition CD_RtSolver.cpp:458
virtual void deallocate()=0
Deallocate internal storage.
static constexpr int m_nComp
Default number of components.
Definition CD_RtSolver.H:397
EBAMRCellData m_source
Source term.
Definition CD_RtSolver.H:461
std::string m_realm
Realm where this solver lives.
Definition CD_RtSolver.H:407
void parseVerbosity() noexcept
Parse verbosity.
Definition CD_RtSolver.cpp:445
virtual RefCountedPtr< RtSpecies > & getSpecies()
Get species.
Definition CD_RtSolver.cpp:439
virtual void computeDomainFlux(EBAMRIFData &a_domainflux, const EBAMRCellData &a_phi)=0
Compute the domain flux given a state (a_phi will be different for different RTE approximations)
RefCountedPtr< AmrMesh > m_amr
AMR; needed for grid stuff.
Definition CD_RtSolver.H:427
EBAMRIVData m_kappaEB
Absorption coefficient on EB faces.
Definition CD_RtSolver.H:471
virtual void setRtSpecies(const RefCountedPtr< RtSpecies > &a_RtSpecies)
Set the radiative transfer species (RtSpecies)
Definition CD_RtSolver.cpp:91
virtual bool advance(const Real a_dt, EBAMRCellData &a_phi, const EBAMRCellData &a_source, const bool a_zeroPhi=false)=0
Advance method. Advances one time step.
virtual void setPhase(phase::which_phase a_phase=phase::gas)
Set phase.
Definition CD_RtSolver.cpp:103
virtual void allocate()=0
Allocate internal storage.
virtual int getNumberOfPlotVariables() const
Get number of output fields.
Definition CD_RtSolver.cpp:257
virtual void setVerbosity(const int a_verbosity)
Set verbosity.
Definition CD_RtSolver.cpp:189
Real m_dt
Time increment.
Definition CD_RtSolver.H:481
virtual EBAMRIVData & getKappaEb()
Get the absorption coefficient on irregular EB faces.
Definition CD_RtSolver.cpp:433
virtual void computeFlux(EBAMRCellData &a_flux, const EBAMRCellData &a_phi)=0
Compute the flux.
virtual EBAMRFluxData & getKappa()
Get the absorption length.
Definition CD_RtSolver.cpp:427
bool m_plotSource
Output source term.
Definition CD_RtSolver.H:496
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_RtSolver.cpp:319
virtual void sanityCheck()
Sanity check.
Definition CD_RtSolver.cpp:114
virtual void setTime(const int a_step, const Real a_time, const Real a_dt)
Set the time for this solver.
Definition CD_RtSolver.cpp:165
virtual void computeBoundaryFlux(EBAMRIVData &a_ebFlux, const EBAMRCellData &a_phi)=0
Compute the boundary flux given a state (a_phi will be different for different RTE approximations)
virtual void writePlotData(LevelData< EBCellFAB > &a_output, int &a_comp, const std::string &a_outputRealm, const int a_level) const noexcept
Write output data to a_output.
Definition CD_RtSolver.cpp:297
virtual void parseOptions()=0
Parse options.
virtual ~RtSolver()
Constructor (does nothing)
Definition CD_RtSolver.cpp:30
virtual Vector< std::string > getPlotVariableNames() const
Get output plot names.
Definition CD_RtSolver.cpp:277
EBAMRCellData m_phi
Internal state.
Definition CD_RtSolver.H:454
std::string m_name
Name for this solver.
Definition CD_RtSolver.H:437
RefCountedPtr< ComputationalGeometry > m_computationalGeometry
Computational geometry.
Definition CD_RtSolver.H:422
virtual void writePlotFile()=0
Write plot file.
phase::which_phase m_phase
Phase.
Definition CD_RtSolver.H:432
bool m_plotPhi
Output state.
Definition CD_RtSolver.H:491
virtual void initialData()
Fill solver with initial data. By default, this sets internal data to zero.
Definition CD_RtSolver.cpp:246
virtual void setComputationalGeometry(const RefCountedPtr< ComputationalGeometry > &a_computationalGeometry)
Set computational geometry.
Definition CD_RtSolver.cpp:128
virtual void preRegrid(const int a_lbase, const int a_oldFinestLevel)=0
Perform pre-regrid operations.
virtual EBAMRCellData & getSource()
Get multifluid source.
Definition CD_RtSolver.cpp:421
EBAMRCellData m_cachePhi
Cached state used for regridding.
Definition CD_RtSolver.H:447
virtual bool isStationary()
Check if solver is stationary.
Definition CD_RtSolver.cpp:48
virtual void registerOperators()=0
Register operators.
std::string m_className
Class name – needed because inherited classes will be named different.
Definition CD_RtSolver.H:442
int m_verbosity
Verbosity.
Definition CD_RtSolver.H:502
virtual void setStationary(const bool a_stationary)
Set stationary solver or not.
Definition CD_RtSolver.cpp:178
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel)=0
Regrid this solver.
Real m_time
Time.
Definition CD_RtSolver.H:476
RefCountedPtr< EBIndexSpace > m_ebis
EBIndexSpace for this solver.
Definition CD_RtSolver.H:412
Location::Cell m_dataLocation
Data location.
Definition CD_RtSolver.H:402
virtual void setSource(const EBAMRCellData &a_source)
Set source term.
Definition CD_RtSolver.cpp:200
static constexpr int m_comp
Default component that we solve for.
Definition CD_RtSolver.H:392
virtual void parseRuntimeOptions()=0
Parse runtime options.
RefCountedPtr< RtSpecies > m_rtSpecies
Radiative transfer species (contains meta-information like initial conditions)
Definition CD_RtSolver.H:417
virtual std::string getName()
Get solver name.
Definition CD_RtSolver.cpp:36
int m_timeStep
Time step.
Definition CD_RtSolver.H:507
bool m_stationary
Stationary solver or not.
Definition CD_RtSolver.H:486
virtual bool advance(const Real a_dt, const bool a_zeroPhi=false)
Advance equation one time step.
Definition CD_RtSolver.cpp:54
Cell
Enum for distinguishing between cell locations.
Definition CD_Location.H:31
which_phase
Enumeration of supported phases.
Definition CD_MultiFluidIndexSpace.H:38
@ gas
Gas phase.
Definition CD_MultiFluidIndexSpace.H:39