chombo-discharge
Loading...
Searching...
No Matches
CD_ItoKMCGodunovStepper.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_ITOKMCGODUNOVSTEPPER_H
14#define CD_ITOKMCGODUNOVSTEPPER_H
15
16// Our includes
17#include <CD_ItoKMCStepper.H>
18#include <CD_Timer.H>
20#include <CD_NamespaceHeader.H>
21
22namespace Physics {
23namespace ItoKMC {
24
29template <typename I = ItoSolver, typename C = CdrCTU, typename R = McPhoto, typename F = FieldSolverGMG>
30class ItoKMCGodunovStepper : public ItoKMCStepper<I, C, R, F>
31{
32public:
37
44 ItoKMCGodunovStepper(RefCountedPtr<ItoKMCPhysics>& a_physics, bool a_parseOptions = true);
45
49 virtual ~ItoKMCGodunovStepper();
50
55 virtual Real
56 computeDt() override;
57
63 virtual Real
64 advance(const Real a_dt) override;
65
69 virtual void
70 allocate() noexcept override;
71
75 virtual void
76 parseOptions() noexcept override;
77
81 virtual void
82 parseRuntimeOptions() noexcept override;
83
91 virtual void
92 preRegrid(const int a_lmin, const int a_oldFinestLevel) noexcept override;
93
97 virtual void
98 registerOperators() noexcept override;
99
106 virtual void
107 regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) noexcept override;
108
109#ifdef CH_USE_HDF5
115 virtual void
116 writeCheckpointData(HDF5Handle& a_handle, const int a_lvl) const noexcept override;
117#endif
118
119#ifdef CH_USE_HDF5
124 virtual void
125 readCheckpointHeader(HDF5HeaderData& a_header) noexcept override;
126#endif
127
128#ifdef CH_USE_HDF5
133 virtual void
134 writeCheckpointHeader(HDF5HeaderData& a_header) const noexcept override;
135#endif
136
137#ifdef CH_USE_HDF5
143 virtual void
144 readCheckpointData(HDF5Handle& a_handle, const int a_lvl) noexcept override;
145#endif
146
150 virtual void
151 postPlot() noexcept override;
152
153protected:
157 enum class WhichAlgorithm
158 {
159 EulerMaruyama,
160 };
161
166
171
177
182
187
192
197
202
207
212
217
222
227
232
241
246 Vector<RefCountedPtr<ParticleContainer<NoPayload>>> m_conductivityParticles;
247
251 Vector<RefCountedPtr<ParticleContainer<NoPayload>>> m_irregularParticles;
252
257 Vector<RefCountedPtr<ParticleContainer<NoPayload>>> m_rhoDaggerParticles;
258
264 EBAMRCellData m_semiImplicitRhoCDR;
265
272
278
284
288 Vector<EBAMRCellData> m_cdrDivD;
289
296
300 virtual void
301 allocateInternals() noexcept override;
302
306 virtual void
307 parseAlgorithm() noexcept;
308
312 virtual void
313 parseFiltering() noexcept;
314
318 virtual void
319 parseCheckpointParticles() noexcept;
320
324 virtual void
326
331 virtual void
333
337 virtual void
338 setOldPositions() noexcept;
339
344 virtual void
345 barrier() const noexcept;
346
353 virtual void
354 remapPointParticles(Vector<RefCountedPtr<ParticleContainer<NoPayload>>>& a_particles,
355 const SpeciesSubset a_subset) noexcept;
356
364 virtual void
365 depositPointParticles(const Vector<RefCountedPtr<ParticleContainer<NoPayload>>>& a_particles,
366 const SpeciesSubset a_subset) noexcept;
367
374 virtual void
375 clearPointParticles(const Vector<RefCountedPtr<ParticleContainer<NoPayload>>>& a_particles,
376 const SpeciesSubset a_subset) noexcept;
377
386 virtual void
387 computeCdrConductivity() noexcept;
388
397 virtual void
398 computeConductivities(const Vector<RefCountedPtr<ParticleContainer<NoPayload>>>& a_particles,
399 const bool a_useStoredCdrConductivity) noexcept;
400
409 virtual void
410 computeCellConductivity(EBAMRCellData& a_conductivityCell,
411 const Vector<RefCountedPtr<ParticleContainer<NoPayload>>>& a_particles,
412 const bool a_useStoredCdrConductivity) noexcept;
413
418 virtual void
419 computeFaceConductivity() noexcept;
420
424 virtual void
425 computeSemiImplicitRho() noexcept;
426
431 virtual void
432 setupSemiImplicitPoisson(const Real a_dt) noexcept;
433
440 virtual bool
441 solvePoisson() noexcept override;
442
449 virtual void
450 removeCoveredPointParticles(Vector<RefCountedPtr<ParticleContainer<NoPayload>>>& a_particles,
451 const EBRepresentation a_representation,
452 const Real a_tolerance) const noexcept;
453
459 virtual void
460 copyConductivityParticles(Vector<RefCountedPtr<ParticleContainer<NoPayload>>>& a_conductivityParticles) noexcept;
461
466 virtual void
467 advanceEulerMaruyama(const Real a_dt) noexcept;
468
476 virtual void
477 diffuseParticlesEulerMaruyama(Vector<RefCountedPtr<ParticleContainer<NoPayload>>>& a_rhoDaggerParticles,
478 const Real a_dt) noexcept;
479
488 virtual void
489 computeDiffusionTermCDR(EBAMRCellData& m_semiImplicitRhoCDR, const Real a_dt) noexcept;
490
497 virtual void
498 stepEulerMaruyamaParticles(const Real a_dt) noexcept;
499
505 virtual void
506 stepEulerMaruyamaCDR(const Real a_dt) noexcept;
507
511 virtual void
512 plotParticles() const noexcept;
513};
514} // namespace ItoKMC
515} // namespace Physics
516
517#include <CD_NamespaceFooter.H>
518
520
521#endif
EBRepresentation
Enum for putting some logic into how we think about EBs. This is just a simply supporting class for v...
Definition CD_EBRepresentation.H:23
Implementation of CD_ItoKMCGodunovStepper.H.
Declaration of the Physics::ItoKMC::ItoKMCStepper abstract TimeStepper.
SpeciesSubset
Enum for selecting a subset of plasma species by mobility/diffusion/charge properties.
Definition CD_ItoKMCStepper.H:43
Declaration of an AMR-hierarchy container that owns per-patch ParticleSoA leaves.
Implementation of CD_Timer.H.
AMR-hierarchy container of computational particles, stored per patch in Struct-of-Arrays form.
Definition CD_ParticleContainer.H:123
Implementation of ItoKMCStepper that uses a semi-implicit split-step formalism for advancing the Ito-...
Definition CD_ItoKMCGodunovStepper.H:31
virtual void setupSemiImplicitPoisson(const Real a_dt) noexcept
Set up the semi-implicit Poisson solver.
Definition CD_ItoKMCGodunovStepperImplem.H:1447
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) noexcept override
Regrid methods – puts all data on the new mesh.
Definition CD_ItoKMCGodunovStepperImplem.H:684
virtual void computeDiffusionTermCDR(EBAMRCellData &m_semiImplicitRhoCDR, const Real a_dt) noexcept
Compute the diffusion term for the CDR equations as well as the resulting CDR-contributions to the sp...
Definition CD_ItoKMCGodunovStepperImplem.H:1763
virtual void allocate() noexcept override
Allocate storage required for advancing the equations.
Definition CD_ItoKMCGodunovStepperImplem.H:98
bool m_readCheckpointParticles
If true, then the HDF5 checkpoint file contained particles that we can read.
Definition CD_ItoKMCGodunovStepper.H:170
Vector< RefCountedPtr< ParticleContainer< NoPayload > > > m_rhoDaggerParticles
Storage for particles that gave rho^dagger.
Definition CD_ItoKMCGodunovStepper.H:257
virtual Real advance(const Real a_dt) override
Advance the Ito-Poisson-KMC system over a_dt.
Definition CD_ItoKMCGodunovStepperImplem.H:359
bool m_emitSecondaryParticlesBeforeReactions
If true, particles will be emitted before the reactive step.
Definition CD_ItoKMCGodunovStepper.H:186
virtual void allocateInternals() noexcept override
Allocate "internal" storage.
Definition CD_ItoKMCGodunovStepperImplem.H:131
Real m_maxFieldAbort
Limit for maximum field abort.
Definition CD_ItoKMCGodunovStepper.H:231
Real m_reactiveFieldCentering
Time-centering of the electric field that the chemistry is evaluated at.
Definition CD_ItoKMCGodunovStepper.H:240
virtual void stepEulerMaruyamaCDR(const Real a_dt) noexcept
Step the CDR equations according to the regular Euler-Maruyama scheme.
Definition CD_ItoKMCGodunovStepperImplem.H:1860
virtual void computeConductivities(const Vector< RefCountedPtr< ParticleContainer< NoPayload > > > &a_particles, const bool a_useStoredCdrConductivity) noexcept
Compute all conductivities (cell, face, and EB) from the input point particles.
Definition CD_ItoKMCGodunovStepperImplem.H:1214
WhichAlgorithm m_algorithm
Which advancement algorithm to use.
Definition CD_ItoKMCGodunovStepper.H:191
EBAMRCellData m_semiImplicitRhoCDR
Storage for CDR densities used during the semi-implicit solve.
Definition CD_ItoKMCGodunovStepper.H:264
virtual void parseAlgorithm() noexcept
Parse advancement algorithm.
Definition CD_ItoKMCGodunovStepperImplem.H:213
virtual void clearPointParticles(const Vector< RefCountedPtr< ParticleContainer< NoPayload > > > &a_particles, const SpeciesSubset a_subset) noexcept
Clear the input particle data holders.
Definition CD_ItoKMCGodunovStepperImplem.H:1078
int m_condFilterNum
Number of filterings of the conductivity.
Definition CD_ItoKMCGodunovStepper.H:216
WhichAlgorithm
Simple enum for distinguishing between algorithms.
Definition CD_ItoKMCGodunovStepper.H:158
Vector< RefCountedPtr< ParticleContainer< NoPayload > > > m_conductivityParticles
Storage for simplified particles that gave us sigma^k.
Definition CD_ItoKMCGodunovStepper.H:246
virtual void postPlot() noexcept override
Perform post-plot operations.
Definition CD_ItoKMCGodunovStepperImplem.H:2016
EBAMRCellData m_reactiveElectricField
Storage for the electric field that the chemistry is evaluated at.
Definition CD_ItoKMCGodunovStepper.H:295
virtual Real computeDt() override
Compute a time step used for the advance method.
Definition CD_ItoKMCGodunovStepperImplem.H:339
Vector< EBAMRCellData > m_cdrDivD
Storage for the finite-volume approximation of div(D*grad(phi)) for the CDR equations.
Definition CD_ItoKMCGodunovStepper.H:288
EBAMRCellData m_scratchSemiImplicitRhoCDR
Scratch storage for CDR contribution to space charge density.
Definition CD_ItoKMCGodunovStepper.H:277
virtual void diffuseParticlesEulerMaruyama(Vector< RefCountedPtr< ParticleContainer< NoPayload > > > &a_rhoDaggerParticles, const Real a_dt) noexcept
Perform the diffusive Ito advance in the Euler-Maruyama step.
Definition CD_ItoKMCGodunovStepperImplem.H:1701
virtual void parseSecondaryEmissionSpecification() noexcept
Parse when secondary particles are emitted.
Definition CD_ItoKMCGodunovStepperImplem.H:288
virtual void parseFiltering() noexcept
Parse filter settings.
Definition CD_ItoKMCGodunovStepperImplem.H:238
virtual void parseRuntimeOptions() noexcept override
Parse run-time options.
Definition CD_ItoKMCGodunovStepperImplem.H:195
Real m_condFilterAlpha
Factor for strided filter. Alpha=0.5 yields a bilinear filter.
Definition CD_ItoKMCGodunovStepper.H:226
virtual void depositPointParticles(const Vector< RefCountedPtr< ParticleContainer< NoPayload > > > &a_particles, const SpeciesSubset a_subset) noexcept
Deposit the input point particles on the mesh.
Definition CD_ItoKMCGodunovStepperImplem.H:976
virtual bool solvePoisson() noexcept override
Solve the electrostatic problem.
Definition CD_ItoKMCGodunovStepperImplem.H:1577
bool m_canRegridOnRestart
If true, then the class supports regrid-on-restart.
Definition CD_ItoKMCGodunovStepper.H:176
virtual void computeFaceConductivity() noexcept
Compute the cell-centered conductivity.
Definition CD_ItoKMCGodunovStepperImplem.H:1299
virtual void computeCellConductivity(EBAMRCellData &a_conductivityCell, const Vector< RefCountedPtr< ParticleContainer< NoPayload > > > &a_particles, const bool a_useStoredCdrConductivity) noexcept
Compute the cell-centered conductivity.
Definition CD_ItoKMCGodunovStepperImplem.H:1229
int m_condFilterMaxStride
Stride when filtering the conductivity.
Definition CD_ItoKMCGodunovStepper.H:221
EBAMRCellData m_semiImplicitConductivityCDR
Storage for conductivity term due to mobile CDR species.
Definition CD_ItoKMCGodunovStepper.H:271
virtual void removeCoveredPointParticles(Vector< RefCountedPtr< ParticleContainer< NoPayload > > > &a_particles, const EBRepresentation a_representation, const Real a_tolerance) const noexcept
Remove covered particles.
Definition CD_ItoKMCGodunovStepperImplem.H:1484
virtual void remapPointParticles(Vector< RefCountedPtr< ParticleContainer< NoPayload > > > &a_particles, const SpeciesSubset a_subset) noexcept
Remap the input point particles.
Definition CD_ItoKMCGodunovStepperImplem.H:871
virtual ~ItoKMCGodunovStepper()
Destructor. Does nothing.
Definition CD_ItoKMCGodunovStepperImplem.H:72
bool m_extendConductivityEB
For achieving a slightly smoother gradient in the conductivity near the EB.
Definition CD_ItoKMCGodunovStepper.H:181
virtual void setOldPositions() noexcept
Set the starting positions for the ItoSolver particles.
Definition CD_ItoKMCGodunovStepperImplem.H:832
bool m_writeCheckpointParticles
If true, then the particles are checkpointed so we can regrid on checkpoint-restart.
Definition CD_ItoKMCGodunovStepper.H:165
virtual void computeSemiImplicitRho() noexcept
Set up the space charge density for the regrid operation.
Definition CD_ItoKMCGodunovStepperImplem.H:1334
virtual void advanceEulerMaruyama(const Real a_dt) noexcept
Advance the particles using the Euler-Maruyama scheme.
Definition CD_ItoKMCGodunovStepperImplem.H:1616
virtual void preRegrid(const int a_lmin, const int a_oldFinestLevel) noexcept override
Perform pre-regrid operations.
Definition CD_ItoKMCGodunovStepperImplem.H:645
virtual void registerOperators() noexcept override
Register operators used for the simulation.
Definition CD_ItoKMCGodunovStepperImplem.H:82
EBAMRCellData m_scratchSemiImplicitConductivityCDR
Scratch storage for CDR contribution to conductivity.
Definition CD_ItoKMCGodunovStepper.H:283
virtual void plotParticles() const noexcept
Utility function for plotting the ItoSolver particles. These are written in a particles folder.
Definition CD_ItoKMCGodunovStepperImplem.H:2030
ItoKMCGodunovStepper()=delete
Disallowed default constructor. Use the full constructor.
Vector< RefCountedPtr< ParticleContainer< NoPayload > > > m_irregularParticles
Storage for particles that fell inside the EB but should still contribute to the conductivity.
Definition CD_ItoKMCGodunovStepper.H:251
Real m_rhoFilterAlpha
Factor for strided filter. Alpha=0.5 yields a bilinear filter.
Definition CD_ItoKMCGodunovStepper.H:211
int m_rhoFilterNum
Number of filterings when computing the semi-implicit space charge density.
Definition CD_ItoKMCGodunovStepper.H:201
Timer m_timer
Timer used for run-time logging of routines.
Definition CD_ItoKMCGodunovStepper.H:196
virtual void parseReactiveFieldCentering() noexcept
Parse the time-centering of the electric field used for the reactive substep.
Definition CD_ItoKMCGodunovStepperImplem.H:319
virtual void parseCheckpointParticles() noexcept
Parse checkpoint-restart functionality.
Definition CD_ItoKMCGodunovStepperImplem.H:274
virtual void barrier() const noexcept
Set an MPI barrier if using debug mode.
Definition CD_ItoKMCGodunovStepperImplem.H:163
virtual void parseOptions() noexcept override
Parse options.
Definition CD_ItoKMCGodunovStepperImplem.H:177
int m_rhoFilterMaxStride
Stride when filtering the space charge density.
Definition CD_ItoKMCGodunovStepper.H:206
virtual void computeCdrConductivity() noexcept
Compute the CDR contribution to the semi-implicit conductivity, i.e. sum(|Z| * phi * mu).
Definition CD_ItoKMCGodunovStepperImplem.H:1184
virtual void stepEulerMaruyamaParticles(const Real a_dt) noexcept
Step the particles according to the regular Euler-Maruyama scheme.
Definition CD_ItoKMCGodunovStepperImplem.H:1803
virtual void copyConductivityParticles(Vector< RefCountedPtr< ParticleContainer< NoPayload > > > &a_conductivityParticles) noexcept
Copy particles from the ItoSolver into PointParticles whose weight are ItoParticle::m_weight * ItoPar...
Definition CD_ItoKMCGodunovStepperImplem.H:1524
Abstract TimeStepper for the Ito-KMC-Poisson system of equations.
Definition CD_ItoKMCStepper.H:66
Class which is used for run-time monitoring of events.
Definition CD_Timer.H:32
Namespace containing physics models for use with chombo-discharge.
Definition CD_AdvectionDiffusion.H:16
Empty payload: ParticleSoA<> is a position+weight+metadata point particle.
Definition CD_ParticleSoA.H:289