chombo-discharge
Loading...
Searching...
No Matches
CD_SurfaceODESolver.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_SURFACEODESOLVER_H
14#define CD_SURFACEODESOLVER_H
15
16// Std includes
17#include <array>
18
19// Our includes
20#include <CD_AmrMesh.H>
21#include <CD_NamespaceHeader.H>
22
27template <int N = 1>
29{
30public:
31 static_assert(N > 0, "SurfaceODESolver<N> must have N > 0");
32
38
44 SurfaceODESolver(const RefCountedPtr<AmrMesh>& a_amr);
45
50
55
59 virtual ~SurfaceODESolver();
60
65 operator=(const SurfaceODESolver&) = delete;
66
71 operator=(const SurfaceODESolver&&) = delete;
72
76 virtual void
77 parseOptions() noexcept;
78
82 virtual void
83 parseRuntimeOptions() noexcept;
84
89 virtual void
90 setAmr(const RefCountedPtr<AmrMesh>& a_amrMesh) noexcept;
91
96 virtual void
97 setRealm(const std::string& a_realm) noexcept;
98
103 virtual void
104 setName(const std::string& a_name) noexcept;
105
110 std::string
111 getRealm() const noexcept;
112
117 virtual void
118 setPhase(const phase::which_phase a_phase) noexcept;
119
124 virtual phase::which_phase
125 getPhase() const noexcept;
126
131 virtual void
132 setVerbosity(const int a_verbosity) noexcept;
133
138 virtual int
139 getVerbosity() const noexcept;
140
148 virtual void
149 setTime(const int a_step, const Real a_time, const Real a_dt) noexcept;
150
157 virtual Real
158 computeMass(const int a_comp = 0) const noexcept;
159
167 virtual Real
168 computeMass(const EBAMRIVData& a_data, const int a_comp = 0) const noexcept;
169
174 virtual int
175 getStep() const noexcept;
176
181 virtual Real
182 getTime() const noexcept;
183
188 virtual Real
189 getDt() const noexcept;
190
195 virtual void
196 setPhi(const Real a_phi);
197
202 virtual void
203 setPhi(const std::array<Real, N>& a_phi);
204
210 virtual void
211 setPhi(const EBAMRIVData& a_phi);
212
217 virtual EBAMRIVData&
218 getPhi() noexcept;
219
224 virtual const EBAMRIVData&
225 getPhi() const noexcept;
226
231 virtual void
232 setRHS(const Real a_rhs);
233
238 virtual void
239 setRHS(const std::array<Real, N>& a_rhs);
240
246 virtual void
247 setRHS(const EBAMRIVData& a_rhs);
248
253 virtual EBAMRIVData&
254 getRHS();
255
260 virtual const EBAMRIVData&
261 getRHS() const noexcept;
262
267 virtual void
268 allocate() noexcept;
269
273 virtual void
274 deallocate() noexcept;
275
279 virtual void
280 registerOperators() noexcept;
281
288 virtual void
289 preRegrid(const int a_lbase, const int a_oldFinestLevel) noexcept;
290
298 virtual void
299 regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) noexcept;
300
307 virtual void
308 resetElectrodes(const Real a_value) noexcept;
309
317 virtual void
318 resetElectrodes(EBAMRIVData& a_phi, const Real a_value) const noexcept;
319
326 virtual void
327 resetDielectrics(const Real a_value) noexcept;
328
336 virtual void
337 resetDielectrics(EBAMRIVData& a_phi, const Real a_value) const noexcept;
338
339#ifdef CH_USE_HDF5
345 virtual void
346 writeCheckpointLevel(HDF5Handle& a_handle, const int a_level) const noexcept;
347#endif
348
349#ifdef CH_USE_HDF5
355 virtual void
356 readCheckpointLevel(HDF5Handle& a_handle, const int a_level) noexcept;
357#endif
358
363 virtual void
364 writePlotFile() const noexcept;
365
370 virtual int
371 getNumberOfPlotVariables() const noexcept;
372
377 virtual Vector<std::string>
378 getPlotVariableNames() const noexcept;
379
389 virtual void
390 writePlotData(LevelData<EBCellFAB>& a_output,
391 int& a_comp,
392 const std::string& a_outputRealm,
393 const int a_level) const noexcept;
394
395protected:
399 std::string m_realm;
400
404 std::string m_className;
405
409 std::string m_name;
410
414 phase::which_phase m_phase;
415
420
425
430
435
439 RefCountedPtr<AmrMesh> m_amr;
440
445 Vector<RefCountedPtr<LayoutData<VoFIterator>>> m_electrodeVoFs;
446
450 Vector<RefCountedPtr<LayoutData<VoFIterator>>> m_dielectricVoFs;
451
455 EBAMRIVData m_phi;
456
460 EBAMRIVData m_cache;
461
465 EBAMRIVData m_rhs;
466
471
476
480 Real m_time;
481
485 Real m_dt;
486
490 void
491 parseVerbosity() noexcept;
492
496 void
497 parseRegrid() noexcept;
498
502 void
503 parsePlotVariables() noexcept;
504
508 void
509 defineVoFIterators() noexcept;
510};
511
512#include <CD_NamespaceFooter.H>
513
515
516#endif
Declaration of core class for handling AMR-related operations (with embedded boundaries)
Implementation of CD_SurfaceODESolver.H.
Class for handling spatial operations.
Definition CD_AmrMesh.H:45
Two-fluid index space.
Definition CD_MultiFluidIndexSpace.H:50
Surface ODE solver.
Definition CD_SurfaceODESolver.H:29
Real m_dt
Time increment.
Definition CD_SurfaceODESolver.H:485
virtual int getVerbosity() const noexcept
Get verbosity.
Definition CD_SurfaceODESolverImplem.H:248
virtual EBAMRIVData & getRHS()
Get internal state.
Definition CD_SurfaceODESolverImplem.H:469
void parseVerbosity() noexcept
Parse verbosity.
Definition CD_SurfaceODESolverImplem.H:91
virtual EBAMRIVData & getPhi() noexcept
Get internal state.
Definition CD_SurfaceODESolverImplem.H:407
virtual void setRHS(const Real a_rhs)
Convenience function for setting m_rhs.
Definition CD_SurfaceODESolverImplem.H:431
virtual phase::which_phase getPhase() const noexcept
Get phase.
Definition CD_SurfaceODESolverImplem.H:224
std::string m_name
Solver name.
Definition CD_SurfaceODESolver.H:409
virtual void resetElectrodes(const Real a_value) noexcept
Reset m_phi on electrode cells.
Definition CD_SurfaceODESolverImplem.H:623
virtual int getStep() const noexcept
Get current time step.
Definition CD_SurfaceODESolverImplem.H:333
virtual void parseOptions() noexcept
Parse solver options.
Definition CD_SurfaceODESolverImplem.H:63
void parsePlotVariables() noexcept
Parse plot variables.
Definition CD_SurfaceODESolverImplem.H:131
virtual void setPhase(const phase::which_phase a_phase) noexcept
Set phase.
Definition CD_SurfaceODESolverImplem.H:212
SurfaceODESolver(const SurfaceODESolver &)=delete
Disallowed copy constructor.
EBAMRIVData m_cache
Cached state used during regridding.
Definition CD_SurfaceODESolver.H:460
virtual void setAmr(const RefCountedPtr< AmrMesh > &a_amrMesh) noexcept
Set the amr object.
Definition CD_SurfaceODESolverImplem.H:162
SurfaceODESolver()
Default constructor. Must subsequently set AmrMesh.
Definition CD_SurfaceODESolverImplem.H:26
void parseRegrid() noexcept
Parse regrid method.
Definition CD_SurfaceODESolverImplem.H:105
virtual void allocate() noexcept
Allocate internal storage for this class.
Definition CD_SurfaceODESolverImplem.H:493
virtual Real getDt() const noexcept
Get last time step.
Definition CD_SurfaceODESolverImplem.H:357
std::string getRealm() const noexcept
Get the realm where the solver is registered.
Definition CD_SurfaceODESolverImplem.H:200
int m_step
Time step.
Definition CD_SurfaceODESolver.H:475
Real m_time
Current time.
Definition CD_SurfaceODESolver.H:480
bool m_plotRHS
Plot rhs or not.
Definition CD_SurfaceODESolver.H:429
RefCountedPtr< AmrMesh > m_amr
AMR; needed for grid stuff.
Definition CD_SurfaceODESolver.H:439
virtual void preRegrid(const int a_lbase, const int a_oldFinestLevel) noexcept
Pre-regrid function.
Definition CD_SurfaceODESolverImplem.H:586
std::string m_className
Class name.
Definition CD_SurfaceODESolver.H:404
SurfaceODESolver & operator=(const SurfaceODESolver &)=delete
Disallowed assignment operator.
SurfaceODESolver & operator=(const SurfaceODESolver &&)=delete
Disallowed assignment operator.
bool m_plotPhi
Plot phi or not.
Definition CD_SurfaceODESolver.H:424
virtual ~SurfaceODESolver()
Destructor (does nothing).
Definition CD_SurfaceODESolverImplem.H:53
virtual void setRealm(const std::string &a_realm) noexcept
Set the realm.
Definition CD_SurfaceODESolverImplem.H:176
virtual Real getTime() const noexcept
Get current time.
Definition CD_SurfaceODESolverImplem.H:345
virtual void setVerbosity(const int a_verbosity) noexcept
Set verbosity.
Definition CD_SurfaceODESolverImplem.H:236
virtual void setPhi(const Real a_phi)
Convenience function for setting m_phi.
Definition CD_SurfaceODESolverImplem.H:369
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_SurfaceODESolverImplem.H:820
EBAMRIVData m_phi
State. Stored on cut-cells.
Definition CD_SurfaceODESolver.H:455
bool m_conservativeRegrid
Conservative regrid or not.
Definition CD_SurfaceODESolver.H:419
std::string m_realm
Realm where this solver is registered.
Definition CD_SurfaceODESolver.H:399
RefCountedPtr< MultiFluidIndexSpace > m_mfis
Index spaces.
Definition CD_SurfaceODESolver.H:434
virtual void setName(const std::string &a_name) noexcept
Set the solver name.
Definition CD_SurfaceODESolverImplem.H:188
virtual Real computeMass(const int a_comp=0) const noexcept
Compute the total mass for component a_comp in m_phi.
Definition CD_SurfaceODESolverImplem.H:274
virtual Vector< std::string > getPlotVariableNames() const noexcept
Get output plot names.
Definition CD_SurfaceODESolverImplem.H:893
Vector< RefCountedPtr< LayoutData< VoFIterator > > > m_dielectricVoFs
Cut-cells that are also dielectric cells. This does not include ghost cells.
Definition CD_SurfaceODESolver.H:450
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) noexcept
Regrid function.
Definition CD_SurfaceODESolverImplem.H:604
virtual void registerOperators() noexcept
Register operators.
Definition CD_SurfaceODESolverImplem.H:572
EBAMRIVData m_rhs
Right-hand side.
Definition CD_SurfaceODESolver.H:465
int m_verbosity
Solver verbosity.
Definition CD_SurfaceODESolver.H:470
virtual void deallocate() noexcept
Deallocate internal storage.
Definition CD_SurfaceODESolverImplem.H:510
virtual void parseRuntimeOptions() noexcept
Parse runtime solver options.
Definition CD_SurfaceODESolverImplem.H:77
SurfaceODESolver(const SurfaceODESolver &&)=delete
Disallowed move constructor.
virtual void writePlotFile() const noexcept
Write a plot file.
Definition CD_SurfaceODESolverImplem.H:767
phase::which_phase m_phase
Phase where the data lives.
Definition CD_SurfaceODESolver.H:414
virtual void setTime(const int a_step, const Real a_time, const Real a_dt) noexcept
Set the time.
Definition CD_SurfaceODESolverImplem.H:260
void defineVoFIterators() noexcept
Define iterators for iterating over cell subsets.
Definition CD_SurfaceODESolverImplem.H:523
virtual int getNumberOfPlotVariables() const noexcept
Get number of variables to be plotted.
Definition CD_SurfaceODESolverImplem.H:871
Vector< RefCountedPtr< LayoutData< VoFIterator > > > m_electrodeVoFs
Cut-cells that are electrode cells. This does not include ghost cells.
Definition CD_SurfaceODESolver.H:445
virtual void resetDielectrics(const Real a_value) noexcept
Reset m_phi on dielectric cells.
Definition CD_SurfaceODESolverImplem.H:668
Phase names namespace.
Definition CD_MultiFluidIndexSpace.H:28