13#ifndef CD_RTLAYOUTIMPLEM_H
14#define CD_RTLAYOUTIMPLEM_H
22#include <CD_NamespaceHeader.H>
27 CH_TIME(
"RtLayout<T>::RtLayout(Vector)");
31 m_species = a_RtSpecies;
38 CH_TIME(
"RtLayout<T>::~RtLayout");
61 for (
auto solver_it = this->iterator(); solver_it.ok(); ++solver_it) {
62 solver_it()->setRealm(m_realm);
70 m_solvers.push_back(a_solver);
77 CH_TIME(
"RtLayout<T>::parseOptions");
78 if (m_verbosity > 6) {
79 pout() <<
"RtLayout<T>::parseOptions" << endl;
82 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
83 RefCountedPtr<T>& solver = solver_it();
84 solver->parseOptions();
92 CH_TIME(
"RtLayout<T>::parseRuntimeOptions");
93 if (m_verbosity > 6) {
94 pout() <<
"RtLayout<T>::parseRuntimeOptions" << endl;
97 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
98 RefCountedPtr<T>& solver = solver_it();
99 solver->parseRuntimeOptions();
107 CH_TIME(
"RtLayout<T>::allocate");
108 if (m_verbosity > 6) {
109 pout() <<
"RtLayout<T>::allocate" << endl;
112 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
113 RefCountedPtr<T>& solver = solver_it();
122 CH_TIME(
"RtLayout<T>::preRegrid");
123 if (m_verbosity > 6) {
124 pout() <<
"RtLayout<T>::preRegrid" << endl;
127 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
128 RefCountedPtr<T>& solver = solver_it();
129 solver->preRegrid(a_base, a_finestLevel);
137 CH_TIME(
"RtLayout<T>::deallocate");
138 if (m_verbosity > 6) {
139 pout() <<
"RtLayout<T>::deallocate" << endl;
142 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
143 RefCountedPtr<T>& solver = solver_it();
144 solver->deallocate();
152 CH_TIME(
"RtLayout<T>::setAmr");
153 if (m_verbosity > 5) {
154 pout() <<
"RtLayout<T>::setAmr" << endl;
157 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
158 RefCountedPtr<T>& solver = solver_it();
159 solver->setAmr(a_amr);
167 CH_TIME(
"RtLayout<T>::setComputationalGeometry");
168 if (m_verbosity > 5) {
169 pout() <<
"RtLayout<T>::setComputationalGeometry" << endl;
172 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
173 RefCountedPtr<T>& solver = solver_it();
174 solver->setComputationalGeometry(a_computationalGeometry);
182 CH_TIME(
"RtLayout<T>::setPhase");
183 if (m_verbosity > 5) {
184 pout() <<
"RtLayout<T>::setPhase" << endl;
189 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
190 RefCountedPtr<T>& solver = solver_it();
191 solver->setPhase(a_phase);
199 CH_TIME(
"RtLayout<T>::setVerbosity");
201 m_verbosity = a_verbosity;
202 if (m_verbosity > 5) {
203 pout() <<
"RtLayout<T>::setVerbosity" << endl;
206 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
207 RefCountedPtr<T>& solver = solver_it();
208 solver->setVerbosity(a_verbosity);
216 CH_TIME(
"RtLayout<T>::sanityCheck");
217 if (m_verbosity > 5) {
218 pout() <<
"RtLayout<T>::sanityCheck" << endl;
221 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
222 RefCountedPtr<T>& solver = solver_it();
223 solver->sanityCheck();
231 CH_TIME(
"RtLayout<T>::setTime");
232 if (m_verbosity > 5) {
233 pout() <<
"RtLayout<T>::setTime" << endl;
236 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
237 RefCountedPtr<T>& solver = solver_it();
238 solver->setTime(a_step, a_time, a_dt);
246 CH_TIME(
"RtLayout<T>::regrid");
247 if (m_verbosity > 5) {
248 pout() <<
"RtLayout<T>::regrid" << endl;
251 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
252 RefCountedPtr<T>& solver = solver_it();
253 solver->regrid(a_lmin, a_oldFinestLevel, a_newFinestLevel);
261 CH_TIME(
"RtLayout<T>::registerOperators");
262 if (m_verbosity > 5) {
263 pout() <<
"RtLayout<T>::registerOperators" << endl;
266 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
267 RefCountedPtr<T>& solver = solver_it();
268 solver->registerOperators();
276 CH_TIME(
"RtLayout<T>::setSource(ebamrcell)");
277 if (m_verbosity > 5) {
278 pout() <<
"RtLayout<T>::setSource(ebamrcell)" << endl;
281 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
282 RefCountedPtr<T>& solver = solver_it();
283 solver->setSource(a_source);
291 CH_TIME(
"RtLayout<T>::setSource(constant)");
292 if (m_verbosity > 5) {
293 pout() <<
"RtLayout<T>::setSource(constant)" << endl;
296 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
297 RefCountedPtr<T>& solver = solver_it();
298 solver->setSource(a_source);
306 CH_TIME(
"RtLayout<T>::setStationary");
307 if (m_verbosity > 5) {
308 pout() <<
"RtLayout<T>::setStationary" << endl;
311 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
312 RefCountedPtr<T>& solver = solver_it();
313 solver->setStationary(a_stationary);
321 CH_TIME(
"RtLayout<T>::writePlotFile");
322 if (m_verbosity > 5) {
323 pout() <<
"RtLayout<T>::writePlotFile" << endl;
326 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
327 RefCountedPtr<T>& solver = solver_it();
328 solver->writePlotFile();
336 CH_TIME(
"RtLayout<T>::advance");
337 if (m_verbosity > 6) {
338 pout() <<
"RtLayout<T>::advance" << endl;
341 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
342 RefCountedPtr<T>& solver = solver_it();
343 solver->advance(a_dt, solver->getPhi(), solver->getSource());
351 CH_TIME(
"RtLayout<T>::initialData");
352 if (m_verbosity > 6) {
353 pout() <<
"RtLayout<T>::initialData" << endl;
356 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
357 RefCountedPtr<T>& solver = solver_it();
358 solver->initialData();
366 CH_TIME(
"RtLayout<T>::isStationary");
367 if (m_verbosity > 5) {
368 pout() <<
"RtLayout<T>::isStationary" << endl;
371 bool stationary =
true;
373 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
374 RefCountedPtr<T>& solver = solver_it();
376 if (solver->isStationary() ==
false) {
388 CH_TIME(
"RtLayout<T>::getPhase");
389 if (m_verbosity > 5) {
390 pout() <<
"RtLayout<T>::getPhase" << endl;
397Vector<RefCountedPtr<T>>&
404Vector<RefCountedPtr<RtSpecies>>&
411Vector<EBAMRCellData*>
414 CH_TIME(
"RtLayout<T>::getSources");
415 if (m_verbosity > 5) {
416 pout() <<
"RtLayout<T>::getSources" << endl;
419 Vector<EBAMRCellData*> sources;
421 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
422 RefCountedPtr<T>& solver = solver_it();
423 sources.push_back(&(solver->getSource()));
430Vector<EBAMRCellData*>
433 CH_TIME(
"RtLayout<T>::getPhis");
434 if (m_verbosity > 5) {
435 pout() <<
"RtLayout<T>::getPhis" << endl;
438 Vector<EBAMRCellData*> states;
440 for (
RtIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
441 RefCountedPtr<T>& solver = solver_it();
442 states.push_back(&(solver->getPhi()));
448template <
class T,
class S>
452template <
class T,
class S>
456template <
class T,
class S>
457RefCountedPtr<RtLayout<T>>
461 auto rte = RefCountedPtr<RtLayout<T>>(
new RtLayout<T>(a_species));
462 auto spe = a_species;
465 for (
int i = 0; i < a_species.size(); i++) {
466 auto solver = RefCountedPtr<T>(
static_cast<T*
>(
new S()));
467 solver->setRtSpecies(spe[i]);
469 solver->setVerbosity(-1);
470 rte->addSolver(solver);
476#include <CD_NamespaceFooter.H>
Iterator class for RtLayout.
Declaration of a class that holds a set of RtSolvers.
RefCountedPtr< RtLayout< T > > newLayout(const Vector< RefCountedPtr< RtSpecies > > &a_species) const
Get a new Layout. This will cast S to a specific class (T)
Definition CD_RtLayoutImplem.H:458
~RtFactory()
Destructor (does nothing)
Definition CD_RtLayoutImplem.H:453
RtFactory()
Constructor (does nothing)
Definition CD_RtLayoutImplem.H:449
Iterator class for RtLayout.
Definition CD_RtIterator.H:25
virtual bool ok()
Check if we can cycle further through the solvers.
Definition CD_RtIteratorImplem.H:65
Class for holding a set of RtSolvers. T must derive from RtSolver.
Definition CD_RtLayout.H:28
virtual void setVerbosity(const int a_verbosity)
Set verbosity.
Definition CD_RtLayoutImplem.H:197
virtual void setComputationalGeometry(const RefCountedPtr< ComputationalGeometry > &a_computationalGeometry)
Set the computational geometry.
Definition CD_RtLayoutImplem.H:165
virtual const std::string getRealm() const
Get realm where the solvers are allocated.
Definition CD_RtLayoutImplem.H:50
virtual Vector< RefCountedPtr< T > > & getSolvers()
Get solvers.
Definition CD_RtLayoutImplem.H:398
virtual void parseOptions()
Parse options.
Definition CD_RtLayoutImplem.H:75
virtual void setStationary(const bool a_stationary)
Turn on/off stationary.
Definition CD_RtLayoutImplem.H:304
virtual void sanityCheck()
Do a sanity check.
Definition CD_RtLayoutImplem.H:214
virtual void setTime(const int a_step, const Real a_time, const Real a_dt)
Set time.
Definition CD_RtLayoutImplem.H:229
virtual void setRealm(const std::string &a_realm)
Set realm for solvers.
Definition CD_RtLayoutImplem.H:57
virtual Vector< EBAMRCellData * > getSources()
Get all source terms.
Definition CD_RtLayoutImplem.H:412
virtual void registerOperators()
Register operators.
Definition CD_RtLayoutImplem.H:259
virtual void setSource(const EBAMRCellData &a_source)
Convenience function. Set source terms for all species. Mostly used for debugging.
Definition CD_RtLayoutImplem.H:274
virtual bool isStationary()
Check if solvers are stationary.
Definition CD_RtLayoutImplem.H:364
virtual Vector< EBAMRCellData * > getPhis()
Get all states.
Definition CD_RtLayoutImplem.H:431
virtual void deallocate()
Deallocate internal storage for solvers.
Definition CD_RtLayoutImplem.H:135
virtual void setAmr(const RefCountedPtr< AmrMesh > &a_amr)
Set amr.
Definition CD_RtLayoutImplem.H:150
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel)
Regrid all solvers.
Definition CD_RtLayoutImplem.H:244
virtual void addSolver(RefCountedPtr< T > a_solver)
Add a new solver to the solver layout.
Definition CD_RtLayoutImplem.H:68
virtual void parseRuntimeOptions()
Parse runtime options.
Definition CD_RtLayoutImplem.H:90
virtual Vector< RefCountedPtr< RtSpecies > > & getSpecies()
Get species.
Definition CD_RtLayoutImplem.H:405
virtual RtIterator< T > iterator()
Get iterator.
Definition CD_RtLayoutImplem.H:43
RtLayout(const Vector< RefCountedPtr< RtSpecies > > &a_RtSpecies)
Full constructor.
Definition CD_RtLayoutImplem.H:25
virtual ~RtLayout()
Destructor (does nothing)
Definition CD_RtLayoutImplem.H:36
virtual void writePlotFile()
Convenience function. All solvers write plot files.
Definition CD_RtLayoutImplem.H:319
virtual void preRegrid(const int a_base, const int a_oldFinestLevel)
Pre regrid stuff.
Definition CD_RtLayoutImplem.H:120
virtual void initialData()
Fill with initial data.
Definition CD_RtLayoutImplem.H:349
virtual void advance(const Real a_dt)
Convenience function. Call advance method for each solver.
Definition CD_RtLayoutImplem.H:334
virtual phase::which_phase getPhase()
Get phase.
Definition CD_RtLayoutImplem.H:386
virtual void allocate()
Allocate internal storage for solvers.
Definition CD_RtLayoutImplem.H:105
virtual void setPhase(phase::which_phase a_phase=phase::gas)
Set phase.
Definition CD_RtLayoutImplem.H:180
which_phase
Enumeration of supported phases.
Definition CD_MultiFluidIndexSpace.H:38
@ gas
Gas phase.
Definition CD_MultiFluidIndexSpace.H:39