chombo-discharge
Loading...
Searching...
No Matches
CD_CdrPlasmaGodunovStepper.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_CDRPLASMAGODUNOVSTEPPER_H
14#define CD_CDRPLASMAGODUNOVSTEPPER_H
15
16// Std includes
17#include <memory>
18
19// Our includes
20#include <CD_AmrMesh.H>
21#include <CD_CdrPlasmaStepper.H>
22#include <CD_CdrIterator.H>
23#include <CD_RtIterator.H>
24#include <CD_Timer.H>
25#include <CD_NamespaceHeader.H>
26
27namespace Physics {
28namespace CdrPlasma {
29
43{
44public:
45 // Forward declared utility classes for handling the extra memory when advancing the solvers.
46 class CdrStorage;
47 class FieldStorage;
48 class RtStorage;
49 class SigmaStorage;
50
55
60 CdrPlasmaGodunovStepper(RefCountedPtr<CdrPlasmaPhysics>& a_physics);
61
65 ~CdrPlasmaGodunovStepper() override;
66
69 operator=(const CdrPlasmaGodunovStepper&) = delete;
72 operator=(CdrPlasmaGodunovStepper&&) = delete;
73
77 void
78 parseOptions() override;
79
83 void
84 parseRuntimeOptions() override;
85
92 Real
93 advance(Real a_dt) override;
94
102 void
103 preRegrid(int a_lbase, int a_finestLevel) override;
104
112 void
113 regrid(int a_lmin, int a_oldFinestLevel, int a_newFinestLevel) override;
114
119 void
120 postRegrid() override;
121
126 Real
127 computeDt() override;
128
135 void
136 postCheckpointSetup() override;
137
138protected:
142 enum class FieldCoupling
143 {
144 Explicit,
146 };
147
152 {
153 Euler,
154 RK2,
155 MUSCL
156 };
157
162 {
163 Explicit,
164 Implicit,
165 Automatic,
166 };
167
172
177
182
186 std::unique_ptr<Timer> m_timer;
187
191 Vector<RefCountedPtr<CdrStorage>> m_cdrScratch;
192
196 Vector<RefCountedPtr<RtStorage>> m_rteScratch;
197
201 RefCountedPtr<FieldStorage> m_fieldScratch;
202
206 RefCountedPtr<SigmaStorage> m_sigmaScratch;
207
212 EBAMRCellData m_semiImplicitRho;
213
218
223
228
233
238
244
249
254
259
263 bool m_fhd;
264
269
274
279
284
289
293 std::vector<bool> m_useImplicitDiffusion;
294
300 RefCountedPtr<CdrStorage>&
301 getCdrStorage(const CdrIterator<CdrSolver>& a_solverIt);
302
308 RefCountedPtr<RtStorage>&
309 getRtStorage(const RtIterator<RtSolver>& a_solverIt);
310
317 void
318 regridInternals(int a_lmin, int a_oldFinestLevel, int a_newFinestLevel) override;
319
324 void
325 allocateInternals() override;
326
331 void
333
337 void
338 deallocateInternals() override;
339
344 void
346
351 void
353
357 void
359
365 void
366 extrapolateWithSourceTerm(Real a_dt);
367
371 void
373
378 void
380
384 void
386
392 void
394
398 void
400
406 void
407 advanceTransport(Real a_dt);
408
413 void
415
421 void
423
429 void
430 advanceCdrReactions(Real a_dt);
431
437 void
438 advanceRadiativeTransfer(Real a_dt);
439
448 void
449 floorMass(EBAMRCellData& a_data, const std::string& a_message, const RefCountedPtr<CdrSolver>& a_solver) const;
450
454 void
455 postStep();
456
462 void
463 computeCdrDriftVelocities(Real a_time);
464
470 void
472
477 void
478 computeSourceTerms(Real a_dt);
479
483 void
485
489 void
491
495 void
496 parseField();
497
501 void
502 parseFloor();
503
507 void
508 parseDebug();
509
513 void
514 parseProfile();
515
519 void
520 parseFHD();
521
525 void
527
531 void
533
541 bool
543
544#ifdef CH_USE_HDF5
551 void
552 writeCheckpointData(HDF5Handle& a_handle, int a_lvl) const override;
553#endif
554
555#ifdef CH_USE_HDF5
562 void
563 readCheckpointData(HDF5Handle& a_handle, int a_lvl) override;
564#endif
565};
566} // namespace CdrPlasma
567} // namespace Physics
568
569#include <CD_NamespaceFooter.H>
570
571#endif
Declaration of core class for handling AMR-related operations (with embedded boundaries)
Declaration of an iterator class for CdrLayout (for iterating through subsets of solvers).
Declaration of Physics::CdrPlasma::CdrPlasmaStepper, the abstract base class for CDR plasma time step...
Iterator class for RtLayout.
Implementation of CD_Timer.H.
Iterator class for CdrLayout. This allows iteration through solvers (or subsets of solvers).
Definition CD_CdrIterator.H:29
Utility class for memory handling in CdrPlasmaStepper.
Definition CD_CdrPlasmaGodunovStorage.H:29
Utility class for memory handling in CdrPlasmaStepper.
Definition CD_CdrPlasmaGodunovStorage.H:269
Utility class for memory handling in CdrPlasmaStepper.
Definition CD_CdrPlasmaGodunovStorage.H:375
Utility class for memory handling in CdrPlasmaStepper.
Definition CD_CdrPlasmaGodunovStorage.H:466
CdrPlasmaStepper subclass that advances plasma equations using a split-step Godunov method.
Definition CD_CdrPlasmaGodunovStepper.H:43
void deallocateInternals() override
Deallocate transient memory.
Definition CD_CdrPlasmaGodunovStepper.cpp:690
bool m_debug
Enable for debugging this class.
Definition CD_CdrPlasmaGodunovStepper.H:248
void computeElectricFieldIntoScratch()
Compute electric field into scratch storage.
Definition CD_CdrPlasmaGodunovStepper.cpp:768
EBAMRCellData m_conductivityFactorCell
Used for storing conductivity*dt/eps0 on the cell center.
Definition CD_CdrPlasmaGodunovStepper.H:217
RefCountedPtr< CdrStorage > & getCdrStorage(const CdrIterator< CdrSolver > &a_solverIt)
Function for getting the transient storage associated with a particular CDR solver.
Definition CD_CdrPlasmaGodunovStepper.cpp:294
void regrid(int a_lmin, int a_oldFinestLevel, int a_newFinestLevel) override
Regrid method.
Definition CD_CdrPlasmaGodunovStepper.cpp:417
void extrapolateCdrToEB()
Extrapolate the cell-centered states to the EB.
Definition CD_CdrPlasmaGodunovStepper.cpp:850
DiffusionAlgorithm
Diffusion treatment strategy for the CDR equations.
Definition CD_CdrPlasmaGodunovStepper.H:162
@ Implicit
Implicit (Crank-Nicholson) diffusion for all species.
@ Automatic
Implicit for diffusion-dominated species, explicit otherwise.
bool m_fhd
If true, add a stochastic diffusion flux.
Definition CD_CdrPlasmaGodunovStepper.H:263
FieldCoupling
Coupling strategy between the electric field and charge transport.
Definition CD_CdrPlasmaGodunovStepper.H:143
@ SemiImplicit
Semi-implicit Poisson coupling through the conductivity.
@ Explicit
Solve Poisson explicitly once per time step.
void computeSourceTerms(Real a_dt)
Compute source terms for the CDR and RTE equations.
Definition CD_CdrPlasmaGodunovStepper.cpp:1482
AdvectionSolver m_advectionSolver
Advection solver.
Definition CD_CdrPlasmaGodunovStepper.H:181
Real computeDt() override
Compute the time step – this will be different for the different supported algorithms.
Definition CD_CdrPlasmaGodunovStepper.cpp:1522
void parseOptions() override
Parse startup options.
Definition CD_CdrPlasmaGodunovStepper.cpp:54
void parseField()
Parse the transport algorithm.
Definition CD_CdrPlasmaGodunovStepper.cpp:165
void computeCdrDomainFluxes()
Compute the CDR boundary condition fluxes on the domain faces.
Definition CD_CdrPlasmaGodunovStepper.cpp:1038
std::unique_ptr< Timer > m_timer
Timer for run-time profiling.
Definition CD_CdrPlasmaGodunovStepper.H:186
int m_diffusionOrder
Integration order for diffusion equations.
Definition CD_CdrPlasmaGodunovStepper.H:283
RefCountedPtr< FieldStorage > m_fieldScratch
Scratch storage for the field solver.
Definition CD_CdrPlasmaGodunovStepper.H:201
AdvectionSolver
Advection solver used for the CDR transport step.
Definition CD_CdrPlasmaGodunovStepper.H:152
@ RK2
Second-order Runge-Kutta (Heun) advection.
Real m_implicitDiffusionThreshold
Diffusion threshold factor.
Definition CD_CdrPlasmaGodunovStepper.H:278
FieldCoupling m_fieldCoupling
For figuring out which transport algorithm we use.
Definition CD_CdrPlasmaGodunovStepper.H:171
void floorMass(EBAMRCellData &a_data, const std::string &a_message, const RefCountedPtr< CdrSolver > &a_solver) const
Print how much mass was injected into the system.
Definition CD_CdrPlasmaGodunovStepper.cpp:1666
void extrapolateCdrToDomain()
Extrapolate the CDR cell-centered densities to domain edges/face.
Definition CD_CdrPlasmaGodunovStepper.cpp:990
void advanceTransport(Real a_dt)
Advance the transport problem.
Definition CD_CdrPlasmaGodunovStepper.cpp:1151
void postRegrid() override
Perform post-regrid operations.
Definition CD_CdrPlasmaGodunovStepper.cpp:496
void parseRuntimeOptions() override
Parse run-time adjustable parameters.
Definition CD_CdrPlasmaGodunovStepper.cpp:83
void advanceCdrReactions(Real a_dt)
Advance the reactive problem over a time step dt.
Definition CD_CdrPlasmaGodunovStepper.cpp:1400
DiffusionAlgorithm m_diffusionAlgorithm
For figuring out how we handle diffusion.
Definition CD_CdrPlasmaGodunovStepper.H:176
Vector< RefCountedPtr< RtStorage > > m_rteScratch
Scratch storage for the RTE solvers.
Definition CD_CdrPlasmaGodunovStepper.H:196
bool m_regridSlopes
Regrid slopes or not.
Definition CD_CdrPlasmaGodunovStepper.H:268
void parseFHD()
Parse inclusion of random diffusion flux.
Definition CD_CdrPlasmaGodunovStepper.cpp:254
bool m_extrapAdvect
A special flag for letting the CDR solvers know that we want to compute advective derivatives at half...
Definition CD_CdrPlasmaGodunovStepper.H:243
void postStep()
Perform post-step operations.
Definition CD_CdrPlasmaGodunovStepper.cpp:1695
bool m_filterCompensate
Use compensation step in filter or not.
Definition CD_CdrPlasmaGodunovStepper.H:273
void parseAdvection()
Parse centering for the advective integrator.
Definition CD_CdrPlasmaGodunovStepper.cpp:188
Vector< RefCountedPtr< CdrStorage > > m_cdrScratch
Scratch storage for the CDR solvers.
Definition CD_CdrPlasmaGodunovStepper.H:191
void advanceTransportExplicitField(Real a_dt)
Advance the transport problem using the explicit or explicit-implicit Euler rule.
Definition CD_CdrPlasmaGodunovStepper.cpp:1178
void allocateScratch()
Allocate internal storage.
Definition CD_CdrPlasmaGodunovStepper.cpp:651
EBAMRCellData m_scratchConductivity
Scratch storage for storing m_conductivityFactorCell on the old grids during regrid operations.
Definition CD_CdrPlasmaGodunovStepper.H:237
int m_numFilterRho
Number of filterings for space charge.
Definition CD_CdrPlasmaGodunovStepper.H:288
void parseFloor()
Parse whether or not we should floor the mass.
Definition CD_CdrPlasmaGodunovStepper.cpp:215
void advanceRadiativeTransfer(Real a_dt)
Advance the radiative transfer problem.
Definition CD_CdrPlasmaGodunovStepper.cpp:1438
void regridInternals(int a_lmin, int a_oldFinestLevel, int a_newFinestLevel) override
For regridding internal storage. Does nothing.
Definition CD_CdrPlasmaGodunovStepper.cpp:568
EBAMRFluxData m_conductivityFactorFace
Used for storing conductivity*dt/eps0 on the face centers.
Definition CD_CdrPlasmaGodunovStepper.H:222
void computeSigmaFlux()
Compute the surface flux for the surface charge solver.
Definition CD_CdrPlasmaGodunovStepper.cpp:1121
void deallocateScratch()
Allocate internal storage.
Definition CD_CdrPlasmaGodunovStepper.cpp:732
bool m_floor
True if we floor the CDR densities. Due to reactions/EBs, they are not generally non-negative.
Definition CD_CdrPlasmaGodunovStepper.H:258
void computeCdrDiffusionCoefficients(Real a_time)
Compute CDR diffusion coefficients.
Definition CD_CdrPlasmaGodunovStepper.cpp:1469
void extrapolateWithSourceTerm(Real a_dt)
Extrapolate cell-centered states with the source term.
Definition CD_CdrPlasmaGodunovStepper.cpp:821
Real advance(Real a_dt) override
Implementation of the advance method.
Definition CD_CdrPlasmaGodunovStepper.cpp:306
std::vector< bool > m_useImplicitDiffusion
If true, we are using implicit diffusion. Otherwise it's explicit diffusion.
Definition CD_CdrPlasmaGodunovStepper.H:293
EBAMRIVData m_conductivityFactorEB
Used for storing conductivity*dt/eps0 on the EB centers.
Definition CD_CdrPlasmaGodunovStepper.H:227
bool solveSemiImplicitPoisson()
Solve the semi-implicit Poisson equation.
Definition CD_CdrPlasmaGodunovStepper.cpp:579
void computeCdrFluxesEB()
Compute the CDR boundary condition fluxes on the EBs.
Definition CD_CdrPlasmaGodunovStepper.cpp:911
CdrPlasmaGodunovStepper()=delete
Disallowed constructor – use strong construction.
void parseRegridSlopes()
Parse whether or not to use slopes when regridding.
Definition CD_CdrPlasmaGodunovStepper.cpp:267
void postCheckpointSetup() override
Run post-checkpoint setup operations.
Definition CD_CdrPlasmaGodunovStepper.cpp:513
void parseDiffusion()
Parse how we handle diffusion.
Definition CD_CdrPlasmaGodunovStepper.cpp:120
RefCountedPtr< RtStorage > & getRtStorage(const RtIterator< RtSolver > &a_solverIt)
Function for getting the transient storage associated with a particular RTE solver.
Definition CD_CdrPlasmaGodunovStepper.cpp:300
void parseDebug()
Parse debug mode.
Definition CD_CdrPlasmaGodunovStepper.cpp:228
EBAMRCellData m_scratchSemiImplicitRho
Scratch storage for storing m_semiImplicitRho on the old grids during regrid operations.
Definition CD_CdrPlasmaGodunovStepper.H:232
bool m_profile
Enable performance profiling.
Definition CD_CdrPlasmaGodunovStepper.H:253
void advanceTransportSemiImplicit(Real a_dt)
Advance the transport problem using a semi-implicit formulation for the electric field.
Definition CD_CdrPlasmaGodunovStepper.cpp:1326
void allocateInternals() override
Allocate internal storage.
Definition CD_CdrPlasmaGodunovStepper.cpp:626
void preRegrid(int a_lbase, int a_finestLevel) override
Pre-regrid method. Used for storing important variables for the solvers.
Definition CD_CdrPlasmaGodunovStepper.cpp:390
void parseProfile()
Parse profiling mode.
Definition CD_CdrPlasmaGodunovStepper.cpp:241
RefCountedPtr< SigmaStorage > m_sigmaScratch
Scratch storage for the surface charge solver.
Definition CD_CdrPlasmaGodunovStepper.H:206
void parseFiltering()
Parse filtering settings.
Definition CD_CdrPlasmaGodunovStepper.cpp:280
EBAMRCellData m_semiImplicitRho
Use for holding the "space charge" when doing semi-implicit solves.
Definition CD_CdrPlasmaGodunovStepper.H:212
~CdrPlasmaGodunovStepper() override
Destructor.
Definition CD_CdrPlasmaGodunovStepper.cpp:45
void computeCdrGradients()
Compute gradients of the CDR densities into scratch storage.
Definition CD_CdrPlasmaGodunovStepper.cpp:791
Abstract base class for advancing the coupled CDR plasma equations in time.
Definition CD_CdrPlasmaStepper.H:46
virtual void computeCdrDriftVelocities()
Compute the CDR drift velocities.
Definition CD_CdrPlasmaStepper.cpp:1837
Iterator class for RtLayout.
Definition CD_RtIterator.H:25
Namespace containing physics models for use with chombo-discharge.
Definition CD_AdvectionDiffusion.H:16