13#ifndef CD_CDRLAYOUTIMPLEM_H
14#define CD_CDRLAYOUTIMPLEM_H
21#include <CD_NamespaceHeader.H>
26 CH_TIME(
"CdrLayout<T>::CdrLayout()");
30 m_species = a_species;
39 CH_TIME(
"CdrLayout<T>::~CdrLayout()");
46 CH_TIME(
"CdrLayout<T>::getPhase()");
47 if (m_verbosity > 6) {
48 pout() <<
"CdrLayout<T>::getPhase()" << endl;
58 CH_TIME(
"CdrLayout<T>::iterator()");
59 if (m_verbosity > 6) {
60 pout() <<
"CdrLayout<T>::iterator()" << endl;
70 CH_TIME(
"CdrLayout<T>::getRealm()");
71 if (m_verbosity > 6) {
72 pout() <<
"CdrLayout<T>::getRealm()" << endl;
82 CH_TIME(
"CdrLayout<T>::setRealm()");
83 if (m_verbosity > 6) {
84 pout() <<
"CdrLayout<T>::setRealm()" << endl;
89 for (
auto solver_it = this->iterator(); solver_it.ok(); ++solver_it) {
90 solver_it()->setRealm(a_realm);
98 CH_TIME(
"CdrLayout<T>::addSolver(RefCountedPtr<T>");
99 if (m_verbosity > 6) {
100 pout() <<
"CdrLayout<T>::addSolver()" << endl;
103 m_solvers.push_back(a_solver);
110 CH_TIME(
"CdrLayout<T>::parseOptions()");
111 if (m_verbosity > 6) {
112 pout() <<
"CdrLayout<T>::parseOptions()" << endl;
115 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
116 solver_it()->parseOptions();
124 CH_TIME(
"CdrLayout<T>::parseRuntimeOptions()");
125 if (m_verbosity > 6) {
126 pout() <<
"CdrLayout<T>::parseRuntimeOptions()" << endl;
129 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
130 solver_it()->parseRuntimeOptions();
138 CH_TIME(
"CdrLayout<T>::allocate()");
139 if (m_verbosity > 6) {
140 pout() <<
"CdrLayout<T>::allocate()" << endl;
143 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
144 solver_it()->allocate();
152 CH_TIME(
"CdrLayout<T>::deallocate()");
153 if (m_verbosity > 6) {
154 pout() <<
"CdrLayout<T>::deallocate()" << endl;
157 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
158 solver_it()->deallocate();
166 CH_TIME(
"CdrLayout<T>::preRegrid(int, int)");
167 if (m_verbosity > 6) {
168 pout() <<
"CdrLayout<T>::preRegrid(int, int)" << endl;
171 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
172 solver_it()->preRegrid(a_lbase, a_oldFinestLevel);
180 CH_TIME(
"CdrLayout<T>::initialData()");
181 if (m_verbosity > 6) {
182 pout() <<
"CdrLayout<T>::initialData()" << endl;
185 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
186 solver_it()->initialData();
194 CH_TIME(
"CdrLayout<T>::regrid(int, int, int)");
195 if (m_verbosity > 5) {
196 pout() <<
"CdrLayout<T>::regrid(int, int, int)" << endl;
199 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
200 solver_it()->regrid(a_lmin, a_oldFinestLevel, a_newFinestLevel);
208 CH_TIME(
"CdrLayout<T>::registerOperators()");
209 if (m_verbosity > 5) {
210 pout() <<
"CdrLayout<T>::registerOperators()" << endl;
213 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
214 solver_it()->registerOperators();
222 CH_TIME(
"CdrLayout<T>::setAmr(RefCountedPtr<AmrMesh>)");
223 if (m_verbosity > 5) {
224 pout() <<
"CdrLayout<T>::setAmr(RefCountedPtr<AmrMesh>)" << endl;
227 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
228 solver_it()->setAmr(a_amrMesh);
236 CH_TIME(
"CdrLayout<T>::setComputationalGeometry(RefCountedPtr<ComputationalGeometry>)");
237 if (m_verbosity > 5) {
238 pout() <<
"CdrLayout<T>::setComputationalGeometry(RefCountedPtr<ComputationalGeometry>)" << endl;
241 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
242 solver_it()->setComputationalGeometry(a_computationalGeometry);
250 CH_TIME(
"CdrLayout<T>::setPhase(phase::which_phase)");
251 if (m_verbosity > 5) {
252 pout() <<
"CdrLayout<T>::setPhase(phase::which_phase)" << endl;
257 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
258 solver_it()->setPhase(m_phase);
266 CH_TIME(
"CdrLayout<T>::setVerbosity(int)");
267 m_verbosity = a_verbosity;
268 if (m_verbosity > 5) {
269 pout() <<
"CdrLayout<T>::setVerbosity(int)" << endl;
272 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
273 solver_it()->setVerbosity(a_verbosity);
281 CH_TIME(
"CdrLayout<T>::setTime(int, int, int)");
282 if (m_verbosity > 5) {
283 pout() <<
"CdrLayout<T>::setTime(int, int, int)" << endl;
286 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
287 solver_it()->setTime(a_step, a_time, a_dt);
295 CH_TIME(
"CdrLayout<T>::writePlotFile()");
296 if (m_verbosity > 5) {
297 pout() <<
"CdrLayout<T>::writePlotFile()" << endl;
300 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
301 solver_it()->writePlotFile();
309 CH_TIME(
"CdrLayout<T>::computeAdvectionDt()");
310 if (m_verbosity > 5) {
311 pout() <<
"CdrLayout<T>::computeAdvectionDt()" << endl;
314 Real dt = std::numeric_limits<Real>::max();
316 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
317 const Real curDt = solver_it()->computeAdvectionDt();
319 dt = std::min(dt, curDt);
329 CH_TIME(
"CdrLayout<T>::computeDiffusionDt()");
330 if (m_verbosity > 5) {
331 pout() <<
"CdrLayout<T>::computeDiffusionDt()" << endl;
334 Real dt = std::numeric_limits<Real>::max();
336 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
337 const Real curDt = solver_it()->computeDiffusionDt();
339 dt = std::min(dt, curDt);
349 CH_TIME(
"CdrLayout<T>::computeAdvectionDiffusionDt()");
350 if (m_verbosity > 5) {
351 pout() <<
"CdrLayout<T>::computeAdvectionDiffusionDt()" << endl;
354 Real dt = std::numeric_limits<Real>::max();
356 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
357 const Real curDt = solver_it()->computeAdvectionDiffusionDt();
359 dt = std::min(dt, curDt);
366Vector<RefCountedPtr<T>>&
369 CH_TIME(
"CdrLayout<T>::getSolvers()");
370 if (m_verbosity > 5) {
371 pout() <<
"CdrLayout<T>::getSolvers()" << endl;
378Vector<RefCountedPtr<CdrSpecies>>&
381 CH_TIME(
"CdrLayout<T>::getSpecies()");
382 if (m_verbosity > 5) {
383 pout() <<
"CdrLayout<T>::getSpecies()" << endl;
390Vector<EBAMRCellData*>
393 CH_TIME(
"CdrLayout<T>::getPhis()");
394 if (m_verbosity > 5) {
395 pout() <<
"CdrLayout<T>::getPhis()" << endl;
398 Vector<EBAMRCellData*> states;
400 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
401 states.push_back(&(solver_it()->getPhi()));
408Vector<EBAMRCellData*>
411 CH_TIME(
"CdrLayout<T>::getSources()");
412 if (m_verbosity > 5) {
413 pout() <<
"CdrLayout<T>::getSources()" << endl;
416 Vector<EBAMRCellData*> sources;
418 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
419 sources.push_back(&(solver_it()->getSource()));
426Vector<EBAMRCellData*>
429 CH_TIME(
"CdrLayout<T>::getVelocities()");
430 if (m_verbosity > 5) {
431 pout() <<
"CdrLayout<T>::getVelocities()" << endl;
434 Vector<EBAMRCellData*> velocities;
436 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
437 velocities.push_back(&(solver_it()->getCellCenteredVelocity()));
444Vector<EBAMRCellData*>
447 CH_TIME(
"CdrLayout<T>::getCellCenteredDiffusionCoefficients()");
448 if (m_verbosity > 5) {
449 pout() <<
"CdrLayout<T>::getCellCenteredDiffusionCoefficients()" << endl;
452 Vector<EBAMRCellData*> diffCo;
454 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
455 diffCo.push_back(&(solver_it()->getCellCenteredDiffusionCoefficient()));
462Vector<EBAMRFluxData*>
465 CH_TIME(
"CdrLayout<T>::getFaceCenteredDiffusionCoefficient()");
466 if (m_verbosity > 5) {
467 pout() <<
"CdrLayout<T>::getFaceCenteredDiffusionCoefficient()" << endl;
470 Vector<EBAMRFluxData*> diffCo;
472 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
473 diffCo.push_back(&(solver_it()->getFaceCenteredDiffusionCoefficient()));
483 CH_TIME(
"CdrLayout<T>::getEbCenteredDiffusionCoefficient");
484 if (m_verbosity > 5) {
485 pout() <<
"CdrLayout<T>::getEbCenteredDiffusionCoefficient" << endl;
488 Vector<EBAMRIVData*> diffCo;
490 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
491 diffCo.push_back(&(solver_it()->getEbCenteredDiffusionCoefficient()));
501 CH_TIME(
"CdrLayout<T>::getEbFlux()");
502 if (m_verbosity > 5) {
503 pout() <<
"CdrLayout<T>::getEbFlux()" << endl;
506 Vector<EBAMRIVData*> ebFlux;
508 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
509 ebFlux.push_back(&(solver_it()->getEbFlux()));
519 CH_TIME(
"CdrLayout<T>::getDomainFlux()");
520 if (m_verbosity > 5) {
521 pout() <<
"CdrLayout<T>::getDomainFlux()" << endl;
524 Vector<EBAMRIFData*> domainFlux;
526 for (
CdrIterator<T> solver_it = this->iterator(); solver_it.
ok(); ++solver_it) {
527 domainFlux.push_back(&(solver_it()->getDomainFlux()));
533template <
class T,
class S>
536 CH_TIME(
"CdrFactory<T, S>::CdrFactory()");
539template <
class T,
class S>
542 CH_TIME(
"CdrFactory<T, S>::~CdrFactory()");
545template <
class T,
class S>
546RefCountedPtr<CdrLayout<T>>
549 CH_TIME(
"CdrFactory<T, S>::newLayout(Vector<RefCountedPtr<CdrSpecies> >)");
552 auto cdr = RefCountedPtr<CdrLayout<T>>(
new CdrLayout<T>(a_species));
555 for (
int i = 0; i < a_species.size(); i++) {
557 auto solver = RefCountedPtr<T>(
static_cast<T*
>(
new S()));
559 solver->setSpecies(a_species[i]);
561 solver->setVerbosity(-1);
563 cdr->addSolver(solver);
569#include <CD_NamespaceFooter.H>
Declaration of an iterator class for CdrLayout (for iterating through subsets of solvers).
Declaration of a class that holds a set of CdrSolvers (to cut down on typing).
Agglomeration of useful data operations.
Declaration of various useful units.
CdrFactory()
Default constructor (does nothing)
Definition CD_CdrLayoutImplem.H:534
~CdrFactory()
Default constructor (does nothing)
Definition CD_CdrLayoutImplem.H:540
RefCountedPtr< CdrLayout< T > > newLayout(const Vector< RefCountedPtr< CdrSpecies > > &a_species) const
Factory method, create a new CdrLayout.
Definition CD_CdrLayoutImplem.H:547
Iterator class for CdrLayout. This allows iteration through solvers (or subsets of solvers).
Definition CD_CdrIterator.H:29
virtual bool ok() const
Check if the iterator is valid.
Definition CD_CdrIteratorImplem.H:77
Class for holding a set of CdrSolvers.
Definition CD_CdrLayout.H:40
virtual void setPhase(const phase::which_phase a_phase=phase::gas)
Set phase for all CdrSolvers.
Definition CD_CdrLayoutImplem.H:248
virtual std::string getRealm() const
Get the realm where the Cdr solvers live.
Definition CD_CdrLayoutImplem.H:68
virtual void parseOptions()
Parse class options.
Definition CD_CdrLayoutImplem.H:108
virtual void parseRuntimeOptions()
Parse runtime options.
Definition CD_CdrLayoutImplem.H:122
virtual Vector< EBAMRCellData * > getPhis()
Get all cell-centered states.
Definition CD_CdrLayoutImplem.H:391
virtual Vector< EBAMRIVData * > getEbFlux()
Get all EB flux data holders.
Definition CD_CdrLayoutImplem.H:499
virtual Vector< EBAMRCellData * > getSources()
Get all source terms.
Definition CD_CdrLayoutImplem.H:409
virtual phase::which_phase getPhase() const
Get phase.
Definition CD_CdrLayoutImplem.H:44
virtual void preRegrid(const int a_lbase, const int a_oldFinestLevel)
Call preRegrid(...) method for all the CdrSolvers.
Definition CD_CdrLayoutImplem.H:164
virtual Vector< EBAMRIFData * > getDomainFlux()
Get domain flux data holders.
Definition CD_CdrLayoutImplem.H:517
virtual Vector< EBAMRCellData * > getVelocities()
Get all cell-centered velocities.
Definition CD_CdrLayoutImplem.H:427
virtual void writePlotFile()
Convenience function. All solvers write plot files (for debugging purposes)
Definition CD_CdrLayoutImplem.H:293
virtual void setComputationalGeometry(const RefCountedPtr< ComputationalGeometry > &a_computationalGeometry)
Set the computational geometry for all CdrSolvers.
Definition CD_CdrLayoutImplem.H:234
virtual void setAmr(const RefCountedPtr< AmrMesh > &a_amrMesh)
Set AmrMesh for all CdrSolvers.
Definition CD_CdrLayoutImplem.H:220
virtual Real computeDiffusionDt()
Get time step for explicit diffusion.
Definition CD_CdrLayoutImplem.H:327
virtual ~CdrLayout()
Destructor.
Definition CD_CdrLayoutImplem.H:37
virtual void addSolver(RefCountedPtr< T > &a_solver)
Add solver. This appends a_solver to m_solvers.
Definition CD_CdrLayoutImplem.H:96
virtual Vector< EBAMRIVData * > getEbCenteredDiffusionCoefficient()
Get all EB-centered diffusion coefficients.
Definition CD_CdrLayoutImplem.H:481
virtual void setTime(const int a_step, const Real a_time, const Real a_dt)
Set time.
Definition CD_CdrLayoutImplem.H:279
virtual Real computeAdvectionDiffusionDt()
Get the time step for explicit advection-diffusion.
Definition CD_CdrLayoutImplem.H:347
virtual Vector< EBAMRFluxData * > getFaceCenteredDiffusionCoefficient()
Get all face-centered diffusion coefficients.
Definition CD_CdrLayoutImplem.H:463
virtual void setVerbosity(const int a_verbosity)
Set verbosity for all CdrSolvers.
Definition CD_CdrLayoutImplem.H:264
virtual void registerOperators()
Register operators.
Definition CD_CdrLayoutImplem.H:206
CdrLayout()=delete
Disallowed weak constructor. Use the full constructor.
virtual Vector< RefCountedPtr< T > > & getSolvers()
Get solvers.
Definition CD_CdrLayoutImplem.H:367
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel)
Regrid method. Calls regrid(...) for every CdrSolver.
Definition CD_CdrLayoutImplem.H:192
virtual Vector< EBAMRCellData * > getCellCenteredDiffusionCoefficients()
Get all cell-centered diffusion coefficients.
Definition CD_CdrLayoutImplem.H:445
virtual void allocate()
Allocate internal storage for solvers.
Definition CD_CdrLayoutImplem.H:136
virtual void initialData()
Initial data. Fill all solvers with initial data.
Definition CD_CdrLayoutImplem.H:178
virtual Vector< RefCountedPtr< CdrSpecies > > & getSpecies()
Get species.
Definition CD_CdrLayoutImplem.H:379
virtual void setRealm(const std::string &a_realm)
Set realm for all CdrSolvers.
Definition CD_CdrLayoutImplem.H:80
virtual CdrIterator< T > iterator()
Get an iterator which can iterate through the various Cdr solvers.
Definition CD_CdrLayoutImplem.H:56
virtual Real computeAdvectionDt()
Get CFL time for advection.
Definition CD_CdrLayoutImplem.H:307
virtual void deallocate()
Deallocate solver internals.
Definition CD_CdrLayoutImplem.H:150
static const std::string Primal
Identifier for perimal realm.
Definition CD_Realm.H:44
which_phase
Enumeration of supported phases.
Definition CD_MultiFluidIndexSpace.H:38
@ gas
Gas phase.
Definition CD_MultiFluidIndexSpace.H:39