chombo-discharge
Loading...
Searching...
No Matches
CD_CdrPlasmaImExSdcStepper.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_CDRPLASMAIMEXSDCSTEPPER_H
14#define CD_CDRPLASMAIMEXSDCSTEPPER_H
15
16// Our includes
17#include <CD_AmrMesh.H>
18#include <CD_CdrPlasmaStepper.H>
19#include <CD_CdrIterator.H>
20#include <CD_RtIterator.H>
21#include <CD_NamespaceHeader.H>
22
23namespace Physics {
24namespace CdrPlasma {
25
43{
44public:
48 class CdrStorage;
49
53 class FieldStorage;
54
58 class RtStorage;
59
63 class SigmaStorage;
64
69
74 CdrPlasmaImExSdcStepper(RefCountedPtr<CdrPlasmaPhysics>& a_physics);
75
80
86 Real
87 advance(const Real a_dt) override;
88
94 void
95 allocateInternals() override;
96
100 void
101 deallocateInternals() override;
102
109 void
110 regridInternals(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override;
111
115 void
116 parseOptions() override;
117
121 void
122 parseRuntimeOptions() override;
123
124protected:
128 Vector<RefCountedPtr<CdrStorage>> m_cdrScratch;
129
133 Vector<RefCountedPtr<RtStorage>> m_rteScratch;
134
138 RefCountedPtr<FieldStorage> m_fieldScratch;
139
143 RefCountedPtr<SigmaStorage> m_sigmaScratch;
144
149
153 int m_p;
154
158 int m_k;
159
164
169
175
180
185
190
195
200
205
210
215
220
225
230
235
240
245
250
255
260
265
270
275
280
285
290
295
299 Vector<Real> m_cdrError;
300
305
310
315
320 Vector<Vector<Real>> m_qmj;
321
325 Vector<Vector<Real>> m_vandermonde;
326
330 Vector<Real> m_nodes;
331
335 Vector<Real> m_tm;
336
340 Vector<Real> m_dtm;
341
345 std::string m_whichNodes;
346
352 RefCountedPtr<CdrStorage>&
353 getCdrStorage(const CdrIterator<CdrSolver>& a_solverIt);
354
360 RefCountedPtr<RtStorage>&
361 getRtStorage(const RtIterator<RtSolver>& a_solverIt);
362
366 void
368
372 void
374
378 void
380
384 void
386
392 Vector<EBAMRCellData*>
393 getCdrSolversPhiK(const int a_m);
394
400 EBAMRIVData&
401 getSigmaSolverK(const int a_m);
402
407 void
408 setupQuadratureNodes(const int a_p);
409
414 void
415 setupUniformNodes(const int a_p);
416
421 void
422 setupLobattoNodes(const int a_p);
423
428 void
429 setupChebyshevNodes(const int a_p);
430
435 void
436 setupQmj(const int a_p);
437
443 void
444 setupSubintervals(const Real a_time, const Real a_dt);
445
452 void
453 quad(EBAMRCellData& a_quad, const Vector<EBAMRCellData>& a_integrand, const int a_m);
454
461 void
462 quad(EBAMRIVData& a_quad, const Vector<EBAMRIVData>& a_integrand, const int a_m);
463
467 void
469
473 void
475
479 void
481
485 void
487
492 void
493 integrateRtTransient(const Real a_dt);
494
498 void
500
508 void
509 integrate(const Real a_dt, const Real a_time, const bool a_lagged_terms);
510
517 void
518 integrateAdvectionReaction(const Real a_dt, const int a_m, const bool a_lagged_terms);
519
526 void
527 integrateAdvection(const Real a_dt, const int a_m, const bool a_lagged_terms);
528
535 void
536 integrateDiffusion(const Real a_dt, const int a_m, const bool a_lagged_terms);
537
542 Vector<EBAMRCellData*>
543 getCdrErrors();
544
549 void
551
555 void
556 computeFD0();
557
561 void
563
567 void
569
576 void
577 computeNewDt(bool& a_accept_step, const Real a_dt, const int a_num_corrections);
578
588 void
589 adaptiveReport(const Real a_first_dt,
590 const Real a_dt,
591 const Real a_new_dt,
592 const int a_corr,
593 const int a_rej,
594 const Real a_max_err);
595
599 void
600 updateField();
601
607 void
608 updateField(const Vector<EBAMRCellData*>& a_densities, const EBAMRIVData& a_sigma);
609
613 void
615
619 void
620 storeSolvers();
621
625 void
627
634 void
635 computeReactionNetwork(const int a_m, const Real a_time, const Real a_dt);
636
640 void
642
646 void
648
653 void
654 computeCdrEbStates(const Vector<EBAMRCellData*>& a_phis);
655
659 void
661
666 void
667 computeCdrDomainStates(const Vector<EBAMRCellData*>& a_phis);
668
672 void
674
679 void
680 computeCdrGradients(const Vector<EBAMRCellData*>& a_phis);
681
686 void
687 computeCdrFluxes(const Real a_time);
688
694 void
695 computeCdrFluxes(const Vector<EBAMRCellData*>& a_phis, const Real a_time);
696
701 void
702 computeCdrDomainFluxes(const Real a_time);
703
709 void
710 computeCdrDomainFluxes(const Vector<EBAMRCellData*>& a_phis, const Real a_time);
711
716 void
717 computeCdrVelo(const Real a_time);
718
724 void
725 computeCdrVelo(const Vector<EBAMRCellData*>& a_phis, const Real a_time);
726
731 Real
732 computeDt() override;
733
737 void
739
744 Real
746
751 Real
753
762 void
763 writeStepProfile(const Real a_dt,
764 const Real a_error,
765 const int a_substeps,
766 const int a_corrections,
767 const int a_rejections);
768
772 void
773 parseNodes();
774
778 void
780
784 void
786
790 void
792
796 void
798};
799} // namespace CdrPlasma
800} // namespace Physics
801
802#include <CD_NamespaceFooter.H>
803
804#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.
Iterator class for CdrLayout. This allows iteration through solvers (or subsets of solvers).
Definition CD_CdrIterator.H:29
Per-CDR-species scratch storage for the IMEX-SDC time stepper.
Definition CD_CdrPlasmaImExSdcStorage.H:33
Field solver scratch storage for the IMEX-SDC time stepper.
Definition CD_CdrPlasmaImExSdcStorage.H:427
Per-RTE-solver scratch storage for the IMEX-SDC time stepper.
Definition CD_CdrPlasmaImExSdcStorage.H:572
Surface charge solver scratch storage for the IMEX-SDC time stepper.
Definition CD_CdrPlasmaImExSdcStorage.H:687
CdrPlasmaStepper subclass that advances plasma equations using implicit-explicit spectral deferred co...
Definition CD_CdrPlasmaImExSdcStepper.H:43
Real getMaxNodeDistance()
Return the largest sub-interval width in the current SDC discretization.
Definition CD_CdrPlasmaImExSdcStepper.cpp:266
void copySigmaPToSigma()
Copy the SDC sigma^k storage at the final node p back into the surface charge solver.
Definition CD_CdrPlasmaImExSdcStepper.cpp:541
Vector< Real > m_nodes
Quadrature node positions in [0, 1].
Definition CD_CdrPlasmaImExSdcStepper.H:330
void integrate(const Real a_dt, const Real a_time, const bool a_lagged_terms)
Perform one complete SDC sweep over all subintervals.
Definition CD_CdrPlasmaImExSdcStepper.cpp:722
Vector< Vector< Real > > m_qmj
SDC integration matrix Q_{mj}. Entry [m][j] is the weight of node j in the quadrature approximation o...
Definition CD_CdrPlasmaImExSdcStepper.H:320
void restoreSolvers()
Restore CDR, RTE, field, and surface charge solver states from scratch.
Definition CD_CdrPlasmaImExSdcStepper.cpp:2049
bool m_computeD
Debug flag: if false, skip diffusion coefficient updates.
Definition CD_CdrPlasmaImExSdcStepper.H:264
std::string m_whichNodes
Node type selector: "uniform", "lobatto", or "chebyshev".
Definition CD_CdrPlasmaImExSdcStepper.H:345
void allocateFieldStorage()
Allocate scratch storage for the field solver.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1385
Vector< Real > m_dtm
Sub-interval widths: m_dtm[m] = m_tm[m+1] - m_tm[m].
Definition CD_CdrPlasmaImExSdcStepper.H:340
void storeSolvers()
Save the current CDR, RTE, field, and surface charge solver states to scratch.
Definition CD_CdrPlasmaImExSdcStepper.cpp:2019
void computeCdrEbStates()
Extrapolate current CDR solver states to EB centroids.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1522
Real m_maxDtGrowth
Maximum growth factor applied to the time step by the PI controller.
Definition CD_CdrPlasmaImExSdcStepper.H:179
bool m_doPoisson
Debug flag: if false, skip the Poisson solve.
Definition CD_CdrPlasmaImExSdcStepper.H:254
Real m_decreaseSafety
Additional safety factor applied when decreasing the time step.
Definition CD_CdrPlasmaImExSdcStepper.H:204
int m_k
Number of SDC correction sweeps to perform per time step.
Definition CD_CdrPlasmaImExSdcStepper.H:158
bool m_computeS
Debug flag: if false, skip source term evaluation.
Definition CD_CdrPlasmaImExSdcStepper.H:274
void setupQmj(const int a_p)
Compute the SDC integration matrix Q_{mj} from the current node positions.
Definition CD_CdrPlasmaImExSdcStepper.cpp:397
bool m_extrapAdvect
If true, extrapolate CDR states to the half-time before computing advective fluxes.
Definition CD_CdrPlasmaImExSdcStepper.H:219
void computeCdrDomainFluxes(const Real a_time)
Compute CDR boundary fluxes on domain faces from current solver states.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1734
bool m_haveDtErr
True once a time step error estimate has been computed.
Definition CD_CdrPlasmaImExSdcStepper.H:289
void copyCdrToPhiM0()
Copy current CDR solver states into the SDC phi^k storage at node 0.
Definition CD_CdrPlasmaImExSdcStepper.cpp:659
void computeCdrDomainStates()
Extrapolate current CDR solver states to domain faces.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1599
Real getMaxError()
Return the maximum CDR error norm across all species.
bool m_consistentE
If true, recompute the electric field consistently at each SDC node.
Definition CD_CdrPlasmaImExSdcStepper.H:279
Real computeDt() override
Compute the next time step based on CFL and adaptive-stepping constraints.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1264
void setupChebyshevNodes(const int a_p)
Build p+1 Chebyshev nodes on [0, 1].
Definition CD_CdrPlasmaImExSdcStepper.cpp:379
Real m_maxCFL
Maximum CFL number allowed during adaptive stepping.
Definition CD_CdrPlasmaImExSdcStepper.H:189
void parseRuntimeOptions() override
Parse runtime-adjustable options from ParmParse.
Definition CD_CdrPlasmaImExSdcStepper.cpp:88
int m_maxRetries
Maximum number of step rejections before accepting regardless.
Definition CD_CdrPlasmaImExSdcStepper.H:148
void computeNewDt(bool &a_accept_step, const Real a_dt, const int a_num_corrections)
Evaluate the PI step-size controller and decide whether to accept or reject the step.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1179
void setupLobattoNodes(const int a_p)
Build p+1 Gauss-Lobatto nodes on [0, 1].
Definition CD_CdrPlasmaImExSdcStepper.cpp:322
Real m_minCFL
Minimum CFL number allowed during adaptive stepping.
Definition CD_CdrPlasmaImExSdcStepper.H:184
void integrateRtStationary()
Advance RTE solvers to the stationary solution.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1902
Real m_errThresh
Error threshold below which a step is accepted.
Definition CD_CdrPlasmaImExSdcStepper.H:194
void reconcileIntegrands()
Compute the combined operator F = F_AR + F_D at all SDC nodes.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1026
bool m_consistentRTE
If true, recompute the RTE solution consistently at each SDC node.
Definition CD_CdrPlasmaImExSdcStepper.H:284
void computeFD0()
Compute the diffusion operator F_D at the first SDC node (t^n) from current solver states.
Definition CD_CdrPlasmaImExSdcStepper.cpp:692
void initializeErrors()
Initialize error storage to zero before beginning correction sweeps.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1100
int m_p
Number of SDC quadrature subintervals. There are p+1 nodes covering [t^n, t^{n+1}].
Definition CD_CdrPlasmaImExSdcStepper.H:153
void parseAdvectionOptions()
Parse advection-related options (half-time extrapolation).
Definition CD_CdrPlasmaImExSdcStepper.cpp:235
void computeCdrVelo(const Real a_time)
Compute CDR drift velocities from the current field in scratch storage.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1496
Vector< EBAMRCellData * > getCdrErrors()
Return AMR pointers to the CDR error fields for all species.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1932
void parseDiffusionCoupling()
Parse the implicit diffusion coupling method (TGA or Crank-Nicholson).
Definition CD_CdrPlasmaImExSdcStepper.cpp:160
void integrateRtTransient(const Real a_dt)
Advance RTE solvers transiently over a_dt.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1882
void allocateCdrStorage()
Allocate scratch storage for all CDR solvers.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1370
RefCountedPtr< CdrStorage > & getCdrStorage(const CdrIterator< CdrSolver > &a_solverIt)
Return the SDC scratch storage associated with a given CDR solver.
Definition CD_CdrPlasmaImExSdcStepper.cpp:254
Real m_sigmaError
Surface charge error norm from the most recent correction comparison.
Definition CD_CdrPlasmaImExSdcStepper.H:304
void parseNodes()
Parse the quadrature node type (m_whichNodes) and number of subintervals (m_p).
Definition CD_CdrPlasmaImExSdcStepper.cpp:124
int m_minCorr
Minimum number of corrections that must be completed before accepting a step.
Definition CD_CdrPlasmaImExSdcStepper.H:168
Real advance(const Real a_dt) override
Advance equations by one time step using the IMEX-SDC algorithm.
Definition CD_CdrPlasmaImExSdcStepper.cpp:554
void parseOptions() override
Parse all startup options from ParmParse.
Definition CD_CdrPlasmaImExSdcStepper.cpp:57
void updateField()
Solve the Poisson equation using the current CDR solver densities and surface charge.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1850
void adaptiveReport(const Real a_first_dt, const Real a_dt, const Real a_new_dt, const int a_corr, const int a_rej, const Real a_max_err)
Print a diagnostic summary of the adaptive stepping outcome.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1238
bool m_computeV
Debug flag: if false, skip drift velocity updates.
Definition CD_CdrPlasmaImExSdcStepper.H:269
void updateDiffusionCoefficients()
Recompute diffusion coefficients from the current electric field in scratch storage.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1922
void deallocateInternals() override
Deallocate all internal SDC scratch storage.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1415
bool m_doRTE
Debug flag: if false, skip the RTE advance.
Definition CD_CdrPlasmaImExSdcStepper.H:259
void computeCdrFluxes(const Real a_time)
Compute CDR boundary fluxes on EB faces from current solver states.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1666
void copySigmaToM0()
Copy current surface charge into the SDC sigma^k storage at node 0.
Definition CD_CdrPlasmaImExSdcStepper.cpp:678
Real m_preError
Error from the previous step, used by the PI controller.
Definition CD_CdrPlasmaImExSdcStepper.H:314
void copyPhiPToCdr()
Copy the SDC phi^k storage at the final node p back into the CDR solvers.
Definition CD_CdrPlasmaImExSdcStepper.cpp:523
bool m_doDiffusion
Debug flag: if false, skip the implicit diffusion integration.
Definition CD_CdrPlasmaImExSdcStepper.H:249
bool m_haveError
True once an error estimate has been computed in the current step.
Definition CD_CdrPlasmaImExSdcStepper.H:234
Real m_extrapDt
Time step used for half-time extrapolation of advection states.
Definition CD_CdrPlasmaImExSdcStepper.H:214
bool m_profileSteps
If true, write per-step SDC profile data to a file.
Definition CD_CdrPlasmaImExSdcStepper.H:294
RefCountedPtr< FieldStorage > m_fieldScratch
Field solver SDC scratch storage.
Definition CD_CdrPlasmaImExSdcStepper.H:138
EBAMRIVData & getSigmaSolverK(const int a_m)
Return the surface charge sigma^k at SDC node m.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1966
bool m_useTGA
If true, use the TGA (Crank-Nicholson/RK2) second-order implicit diffusion scheme.
Definition CD_CdrPlasmaImExSdcStepper.H:239
void quad(EBAMRCellData &a_quad, const Vector< EBAMRCellData > &a_integrand, const int a_m)
Compute the quadrature sum of a_integrand from node 0 to node a_m.
Definition CD_CdrPlasmaImExSdcStepper.cpp:481
void integrateAdvection(const Real a_dt, const int a_m, const bool a_lagged_terms)
Advance CDR species from node m to m+1 using explicit advection only (no diffusion).
Definition CD_CdrPlasmaImExSdcStepper.cpp:908
int m_errorIdx
CDR species index used to drive the adaptive step-size controller.
Definition CD_CdrPlasmaImExSdcStepper.H:174
void parseDebugOptions()
Parse debug flags that toggle individual physics operators.
Definition CD_CdrPlasmaImExSdcStepper.cpp:199
Vector< RefCountedPtr< CdrStorage > > m_cdrScratch
Per-CDR-solver SDC scratch storage.
Definition CD_CdrPlasmaImExSdcStepper.H:128
void allocateRtStorage()
Allocate scratch storage for all RTE solvers.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1393
RefCountedPtr< RtStorage > & getRtStorage(const RtIterator< RtSolver > &a_solverIt)
Return the SDC scratch storage associated with a given RTE solver.
Definition CD_CdrPlasmaImExSdcStepper.cpp:260
void finalizeErrors()
Accumulate the maximum correction norm into m_cdrError and m_sigmaError.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1128
Vector< RefCountedPtr< RtStorage > > m_rteScratch
Per-RTE-solver SDC scratch storage.
Definition CD_CdrPlasmaImExSdcStepper.H:133
void parseAdaptiveOptions()
Parse adaptive time-stepping parameters (thresholds, safety factors, growth limits).
Definition CD_CdrPlasmaImExSdcStepper.cpp:173
Vector< Real > m_tm
Absolute time at each SDC node: m_tm[m] = t^n + m_nodes[m] * dt.
Definition CD_CdrPlasmaImExSdcStepper.H:335
int m_errorNorm
Error norm selector: 0 for L-infinity, 2 for L2.
Definition CD_CdrPlasmaImExSdcStepper.H:163
RefCountedPtr< SigmaStorage > m_sigmaScratch
Surface charge solver SDC scratch storage.
Definition CD_CdrPlasmaImExSdcStepper.H:143
void writeStepProfile(const Real a_dt, const Real a_error, const int a_substeps, const int a_corrections, const int a_rejections)
Write per-step SDC performance data to a profile file.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1976
Vector< Real > m_cdrError
Per-CDR-species error norm from the most recent correction comparison.
Definition CD_CdrPlasmaImExSdcStepper.H:299
void setupUniformNodes(const int a_p)
Build p+1 uniformly spaced nodes on [0, 1].
Definition CD_CdrPlasmaImExSdcStepper.cpp:304
void regridInternals(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override
Regrid hook for internal storage. No operations are performed.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1340
void integrateDiffusion(const Real a_dt, const int a_m, const bool a_lagged_terms)
Advance CDR species from node m to m+1 using implicit diffusion only.
Definition CD_CdrPlasmaImExSdcStepper.cpp:963
Real m_maxError
Maximum error across all species and surface charge.
Definition CD_CdrPlasmaImExSdcStepper.H:309
Vector< Vector< Real > > m_vandermonde
Vandermonde matrix used to compute the integration weights from the node positions.
Definition CD_CdrPlasmaImExSdcStepper.H:325
void computeElectricFieldIntoScratch()
Compute the electric field from the current field solver state and store in m_fieldScratch.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1445
bool m_adaptiveDt
If true, use the PI controller to adaptively select the time step.
Definition CD_CdrPlasmaImExSdcStepper.H:224
Vector< EBAMRCellData * > getCdrSolversPhiK(const int a_m)
Return the CDR phi^k values at SDC node m.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1949
void setupQuadratureNodes(const int a_p)
Build quadrature nodes of type m_whichNodes with p subintervals.
Definition CD_CdrPlasmaImExSdcStepper.cpp:282
void setupSubintervals(const Real a_time, const Real a_dt)
Map the unit-interval node positions to [a_time, a_time + a_dt] and compute sub-interval widths.
Definition CD_CdrPlasmaImExSdcStepper.cpp:453
void allocateInternals() override
Allocate internal SDC scratch storage.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1351
Real m_safety
Safety factor applied to the step-size controller's growth estimate.
Definition CD_CdrPlasmaImExSdcStepper.H:199
virtual ~CdrPlasmaImExSdcStepper()
Destructor.
Definition CD_CdrPlasmaImExSdcStepper.cpp:48
void computeCdrGradients()
Compute cell-centered gradients of current CDR solver densities.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1467
bool m_doAdvectionSource
Debug flag: if false, skip the advection and reaction integration.
Definition CD_CdrPlasmaImExSdcStepper.H:244
void computeReactionNetwork(const int a_m, const Real a_time, const Real a_dt)
Evaluate the reaction network source terms at SDC node m and store the result.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1832
Real m_newDt
Tentative time step for the next advance call, set by computeNewDt().
Definition CD_CdrPlasmaImExSdcStepper.H:209
void integrateAdvectionReaction(const Real a_dt, const int a_m, const bool a_lagged_terms)
Advance CDR species from node m to m+1 using explicit advection+reaction and implicit diffusion.
Definition CD_CdrPlasmaImExSdcStepper.cpp:810
void allocateSigmaStorage()
Allocate scratch storage for the surface charge solver.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1407
void computeSigmaFlux()
Compute the surface charge boundary flux from current solver states.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1810
bool m_printReport
If true, print a report of the adaptive stepping outcome after each step.
Definition CD_CdrPlasmaImExSdcStepper.H:229
CdrPlasmaImExSdcStepper()=delete
Disallowed default constructor.
Abstract base class for advancing the coupled CDR plasma equations in time.
Definition CD_CdrPlasmaStepper.H:46
Iterator class for RtLayout.
Definition CD_RtIterator.H:25
Namespace containing physics models for use with chombo-discharge.
Definition CD_AdvectionDiffusion.H:16