chombo-discharge
Loading...
Searching...
No Matches
CD_ItoLayout.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_ITOLAYOUT_H
14#define CD_ITOLAYOUT_H
15
16// Our includes
17#include <CD_ItoSolver.H>
18#include <CD_NamespaceHeader.H>
19
20template <class T>
21class ItoIterator;
22
30template <class T>
32{
33public:
37 ItoLayout() = delete;
38
43 ItoLayout(const Vector<RefCountedPtr<ItoSpecies>>& a_species);
44
48 virtual ~ItoLayout();
49
54 virtual phase::which_phase
55 getPhase() const;
56
61 virtual ItoIterator<T>
62 iterator();
63
68 virtual const std::string
69 getRealm() const;
70
75 virtual void
76 setRealm(const std::string& a_realm);
77
82 virtual void
83 define(const Vector<RefCountedPtr<ItoSpecies>>& a_species);
84
88 virtual void
90
94 virtual void
96
101 virtual void
102 allocate();
103
108 virtual void
109 addSolver(RefCountedPtr<T>& a_solver);
110
117 virtual void
118 preRegrid(const int a_lbase, const int a_finestLevel);
119
124 virtual void
125 initialData();
126
131 virtual void
133
139 virtual void
140 depositParticles(const ItoSolver::WhichContainer a_whichContainer);
141
145 virtual void
146 remap();
147
152 virtual void
153 remap(const ItoSolver::WhichContainer a_whichContainer);
154
159 virtual void
161
168 virtual void
169 regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel);
170
174 virtual void
176
181 virtual void
182 setAmr(const RefCountedPtr<AmrMesh>& a_amr);
183
188 virtual void
189 setComputationalGeometry(const RefCountedPtr<ComputationalGeometry>& a_computationalGeometry);
190
195 virtual void
197
202 virtual void
203 setVerbosity(const int a_verbosity);
204
212 virtual void
213 setTime(const int a_step, const Real a_time, const Real a_dt);
214
219 virtual void
221
226 virtual void
228
236 virtual void
237 makeSuperparticles(const ItoSolver::WhichContainer a_whichContainer);
238
244 virtual void
245 makeSuperparticles(const ItoSolver::WhichContainer a_whichContainer, const int a_ppc);
251 virtual void
252 makeSuperparticles(const ItoSolver::WhichContainer a_whichContainer, const Vector<int>& a_ppc);
253
261 virtual void
262 makeSuperparticles(const ItoSolver::WhichContainer a_whichContainer,
263 const Vector<int>& a_ppc,
265
272 virtual Real
273 computeDt();
274
283 virtual Real
285
294 virtual Real
295 computeHopDt(const Real a_maxCellsToMove);
296
303 virtual Real
305
314 virtual size_t
315 getNumParticles(const ItoSolver::WhichContainer a_ptype, const bool a_localOnly);
316
321 virtual Vector<RefCountedPtr<T>>&
322 getSolvers();
323
328 virtual Vector<RefCountedPtr<ItoSpecies>>&
329 getSpecies();
330
336 virtual Vector<EBAMRCellData*>
338
344 virtual Vector<EBAMRCellData*>
345 getDensities();
346
352 virtual Vector<EBAMRCellData*>
354
360 virtual Vector<EBAMRCellData*>
362
368 virtual Vector<ParticleContainer<ItoParticle>*>
369 getParticles(const ItoSolver::WhichContainer a_whichContainer);
370
371protected:
375 std::string m_realm;
376
380 Vector<RefCountedPtr<T>> m_solvers;
381
385 Vector<RefCountedPtr<ItoSpecies>> m_species;
386
391
396
401};
402
410template <class T, class S>
412{
413public:
417 ItoFactory();
418
422 ~ItoFactory();
423
430 RefCountedPtr<ItoLayout<T>>
431 newLayout(const Vector<RefCountedPtr<ItoSpecies>>& a_species) const;
432};
433
434#include <CD_NamespaceFooter.H>
435
436#include <CD_ItoLayoutImplem.H>
437
438#endif
Implementation of CD_ItoLayout.H.
Declaration of solver class for Ito diffusion.
Factory class for making ItoLayout.
Definition CD_ItoLayout.H:412
~ItoFactory()
Destructor (does nothing).
Definition CD_ItoLayoutImplem.H:433
RefCountedPtr< ItoLayout< T > > newLayout(const Vector< RefCountedPtr< ItoSpecies > > &a_species) const
Factory method which creates a new layout from a set of species. This can do automated casting betwee...
Definition CD_ItoLayoutImplem.H:438
ItoFactory()
Constructor.
Definition CD_ItoLayoutImplem.H:429
"Iterator" class for going through solvers in an ItoLayout.
Definition CD_ItoIterator.H:26
Class for holding a set of ItoSolvers.
Definition CD_ItoLayout.H:32
virtual Real computeAdvectiveDt()
Compute the classical advection time step for all solvers. This returns dt = dx/max(v) where max(v) t...
Definition CD_ItoLayoutImplem.H:307
virtual void makeSuperparticles(const ItoSolver::WhichContainer a_whichContainer)
Rearrange the input container particles into new superparticles for all solvers, each merging to its ...
Definition CD_ItoLayoutImplem.H:211
virtual void allocate()
Allocate internals for all solvers.
Definition CD_ItoLayoutImplem.H:87
virtual void parseRuntimeOptions()
Utility function – parse runtime options for all solvers.
Definition CD_ItoLayoutImplem.H:78
virtual Vector< EBAMRCellData * > getDiffusionFunctions()
Get all diffusion coefficients.
Definition CD_ItoLayoutImplem.H:387
virtual Real computeDt()
Compute smallest possible time step.
Definition CD_ItoLayoutImplem.H:293
virtual void addSolver(RefCountedPtr< T > &a_solver)
Add solver to the list of solvers.
Definition CD_ItoLayoutImplem.H:96
virtual Vector< EBAMRCellData * > getMobilityFunctions()
Get all mobility mesh functions.
Definition CD_ItoLayoutImplem.H:399
virtual ItoIterator< T > iterator()
Return a fresh iterator. The iterator is a simple random access object that can iterate through the s...
Definition CD_ItoLayoutImplem.H:37
virtual void setVerbosity(const int a_verbosity)
Set verbosity for each solver.
Definition CD_ItoLayoutImplem.H:175
phase::which_phase m_phase
Phase where solvers live.
Definition CD_ItoLayout.H:395
virtual void initialData()
Fill all solvers with initial data.
Definition CD_ItoLayoutImplem.H:121
virtual void organizeParticlesByCell(const ItoSolver::WhichContainer a_whichContainer)
Sort ItoSolver particles by cell – this is done for all solvers.
Definition CD_ItoLayoutImplem.H:193
virtual void interpolateVelocities()
Interpolate velocities.
Definition CD_ItoLayoutImplem.H:103
virtual Real computeDiffusiveDt()
Compute the classical diffusive time step dt = dx*dx/(2*D) where D is the diffusion coefficient (not ...
Definition CD_ItoLayoutImplem.H:335
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel)
Regrid method – calls the regrid method for each solver.
Definition CD_ItoLayoutImplem.H:130
virtual Vector< RefCountedPtr< ItoSpecies > > & getSpecies()
Get species.
Definition CD_ItoLayoutImplem.H:356
virtual void parseOptions()
Utility function – parse options for all solvers.
Definition CD_ItoLayoutImplem.H:69
Vector< RefCountedPtr< ItoSpecies > > m_species
ItoSolver species.
Definition CD_ItoLayout.H:385
virtual Real computeHopDt(const Real a_maxCellsToMove)
Compute the largest dt which restricts all particles to move less than a_maxCellsToMove.
Definition CD_ItoLayoutImplem.H:321
virtual void define(const Vector< RefCountedPtr< ItoSpecies > > &a_species)
Define function.
Definition CD_ItoLayoutImplem.H:62
virtual void organizeParticlesByPatch(const ItoSolver::WhichContainer a_whichContainer)
Sort ItoSolver particles by patch – this is done for all solvers.
Definition CD_ItoLayoutImplem.H:202
ItoLayout()=delete
Disallowed weak construction.
Vector< RefCountedPtr< T > > m_solvers
ItoSolver solvers.
Definition CD_ItoLayout.H:380
virtual Vector< EBAMRCellData * > getVelocityFunctions()
Get all velocity functions.
Definition CD_ItoLayoutImplem.H:363
virtual Vector< ParticleContainer< ItoParticle > * > getParticles(const ItoSolver::WhichContainer a_whichContainer)
Get particle containers of a particular container type.
Definition CD_ItoLayoutImplem.H:411
virtual phase::which_phase getPhase() const
Return phase where the solvers are defined.
Definition CD_ItoLayoutImplem.H:423
std::string m_realm
Realm where all the solvers are registered.
Definition CD_ItoLayout.H:375
virtual void setTime(const int a_step, const Real a_time, const Real a_dt)
Set time for each solver.
Definition CD_ItoLayoutImplem.H:184
int m_verbosity
Verbosity level.
Definition CD_ItoLayout.H:390
virtual ~ItoLayout()
Destructor (does nothing).
Definition CD_ItoLayoutImplem.H:32
virtual void setComputationalGeometry(const RefCountedPtr< ComputationalGeometry > &a_computationalGeometry)
Set the computational geometry. This sets the computational geometry for each solver.
Definition CD_ItoLayoutImplem.H:157
virtual void remap()
Remap function – calls remap(ItoSolver::WhichContainer::bulk) for each solver.
Definition CD_ItoLayoutImplem.H:265
virtual void depositParticles()
All solvers deposit their particles.
Definition CD_ItoLayoutImplem.H:249
bool m_isDefined
Layout is defined or not.
Definition CD_ItoLayout.H:400
virtual const std::string getRealm() const
Get the realm name where the solvers are defined.
Definition CD_ItoLayoutImplem.H:44
virtual void preRegrid(const int a_lbase, const int a_finestLevel)
Utility function which caches states before regrid step.
Definition CD_ItoLayoutImplem.H:112
virtual Vector< RefCountedPtr< T > > & getSolvers()
Get solvers all solvers.
Definition CD_ItoLayoutImplem.H:349
virtual size_t getNumParticles(const ItoSolver::WhichContainer a_ptype, const bool a_localOnly)
Get total number of particles.
Definition CD_ItoLayoutImplem.H:281
virtual void setAmr(const RefCountedPtr< AmrMesh > &a_amr)
Set AmrMesh object for each solver.
Definition CD_ItoLayoutImplem.H:148
virtual void setRealm(const std::string &a_realm)
Set the realm where the solvers are defined.
Definition CD_ItoLayoutImplem.H:51
virtual void registerOperators()
Register operators. Calls registerOperators for each solver.
Definition CD_ItoLayoutImplem.H:139
virtual Vector< EBAMRCellData * > getDensities()
Get all densities.
Definition CD_ItoLayoutImplem.H:375
virtual void setPhase(phase::which_phase a_phase)
Set phase for each solver.
Definition CD_ItoLayoutImplem.H:166
WhichContainer
Enum class for distinguishing various types of particle containers.
Definition CD_ItoSolver.H:51
ParticleMergeMethod
The specific super-particle merge methods.
Definition CD_ParticleManagement.H:40
which_phase
Enumeration of supported phases.
Definition CD_MultiFluidIndexSpace.H:38