13#ifndef CD_CDRPLASMAIMEXSDCSTEPPER_H
14#define CD_CDRPLASMAIMEXSDCSTEPPER_H
21#include <CD_NamespaceHeader.H>
86 advance(
const Real a_dt)
override;
109 regridInternals(
const int a_lmin,
const int a_oldFinestLevel,
const int a_newFinestLevel)
override;
351 RefCountedPtr<CdrStorage>&
359 RefCountedPtr<RtStorage>&
391 Vector<EBAMRCellData*>
452 quad(EBAMRCellData& a_quad,
const Vector<EBAMRCellData>& a_integrand,
const int a_m);
461 quad(EBAMRIVData& a_quad,
const Vector<EBAMRIVData>& a_integrand,
const int a_m);
508 integrate(
const Real a_dt,
const Real a_time,
const bool a_lagged_terms);
541 Vector<EBAMRCellData*>
576 computeNewDt(
bool& a_accept_step,
const Real a_dt,
const int a_num_corrections);
593 const Real a_max_err);
607 updateField(
const Vector<EBAMRCellData*>& a_densities,
const EBAMRIVData& a_sigma);
724 computeCdrVelo(
const Vector<EBAMRCellData*>& a_phis,
const Real a_time);
764 const int a_substeps,
765 const int a_corrections,
766 const int a_rejections);
801#include <CD_NamespaceFooter.H>
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:28
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:42
Real getMaxNodeDistance()
Return the largest sub-interval width in the current SDC discretization.
Definition CD_CdrPlasmaImExSdcStepper.cpp:265
void copySigmaPToSigma()
Copy the SDC sigma^k storage at the final node p back into the surface charge solver.
Definition CD_CdrPlasmaImExSdcStepper.cpp:540
Vector< Real > m_nodes
Quadrature node positions in [0, 1].
Definition CD_CdrPlasmaImExSdcStepper.H:329
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:719
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:319
void restoreSolvers()
Restore CDR, RTE, field, and surface charge solver states from scratch.
Definition CD_CdrPlasmaImExSdcStepper.cpp:2045
bool m_computeD
Debug flag: if false, skip diffusion coefficient updates.
Definition CD_CdrPlasmaImExSdcStepper.H:263
std::string m_whichNodes
Node type selector: "uniform", "lobatto", or "chebyshev".
Definition CD_CdrPlasmaImExSdcStepper.H:344
void allocateFieldStorage()
Allocate scratch storage for the field solver.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1381
Vector< Real > m_dtm
Sub-interval widths: m_dtm[m] = m_tm[m+1] - m_tm[m].
Definition CD_CdrPlasmaImExSdcStepper.H:339
void storeSolvers()
Save the current CDR, RTE, field, and surface charge solver states to scratch.
Definition CD_CdrPlasmaImExSdcStepper.cpp:2015
void computeCdrEbStates()
Extrapolate current CDR solver states to EB centroids.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1518
Real m_maxDtGrowth
Maximum growth factor applied to the time step by the PI controller.
Definition CD_CdrPlasmaImExSdcStepper.H:178
bool m_doPoisson
Debug flag: if false, skip the Poisson solve.
Definition CD_CdrPlasmaImExSdcStepper.H:253
Real m_decreaseSafety
Additional safety factor applied when decreasing the time step.
Definition CD_CdrPlasmaImExSdcStepper.H:203
int m_k
Number of SDC correction sweeps to perform per time step.
Definition CD_CdrPlasmaImExSdcStepper.H:157
bool m_computeS
Debug flag: if false, skip source term evaluation.
Definition CD_CdrPlasmaImExSdcStepper.H:273
void setupQmj(const int a_p)
Compute the SDC integration matrix Q_{mj} from the current node positions.
Definition CD_CdrPlasmaImExSdcStepper.cpp:396
bool m_extrapAdvect
If true, extrapolate CDR states to the half-time before computing advective fluxes.
Definition CD_CdrPlasmaImExSdcStepper.H:218
void computeCdrDomainFluxes(const Real a_time)
Compute CDR boundary fluxes on domain faces from current solver states.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1730
bool m_haveDtErr
True once a time step error estimate has been computed.
Definition CD_CdrPlasmaImExSdcStepper.H:288
void copyCdrToPhiM0()
Copy current CDR solver states into the SDC phi^k storage at node 0.
Definition CD_CdrPlasmaImExSdcStepper.cpp:656
void computeCdrDomainStates()
Extrapolate current CDR solver states to domain faces.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1595
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:278
Real computeDt() override
Compute the next time step based on CFL and adaptive-stepping constraints.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1260
void setupChebyshevNodes(const int a_p)
Build p+1 Chebyshev nodes on [0, 1].
Definition CD_CdrPlasmaImExSdcStepper.cpp:378
Real m_maxCFL
Maximum CFL number allowed during adaptive stepping.
Definition CD_CdrPlasmaImExSdcStepper.H:188
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:147
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:1175
void setupLobattoNodes(const int a_p)
Build p+1 Gauss-Lobatto nodes on [0, 1].
Definition CD_CdrPlasmaImExSdcStepper.cpp:321
Real m_minCFL
Minimum CFL number allowed during adaptive stepping.
Definition CD_CdrPlasmaImExSdcStepper.H:183
void integrateRtStationary()
Advance RTE solvers to the stationary solution.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1898
Real m_errThresh
Error threshold below which a step is accepted.
Definition CD_CdrPlasmaImExSdcStepper.H:193
void reconcileIntegrands()
Compute the combined operator F = F_AR + F_D at all SDC nodes.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1022
bool m_consistentRTE
If true, recompute the RTE solution consistently at each SDC node.
Definition CD_CdrPlasmaImExSdcStepper.H:283
void computeFD0()
Compute the diffusion operator F_D at the first SDC node (t^n) from current solver states.
Definition CD_CdrPlasmaImExSdcStepper.cpp:689
void initializeErrors()
Initialize error storage to zero before beginning correction sweeps.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1096
int m_p
Number of SDC quadrature subintervals. There are p+1 nodes covering [t^n, t^{n+1}].
Definition CD_CdrPlasmaImExSdcStepper.H:152
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:1492
Vector< EBAMRCellData * > getCdrErrors()
Return AMR pointers to the CDR error fields for all species.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1928
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:1878
void allocateCdrStorage()
Allocate scratch storage for all CDR solvers.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1366
RefCountedPtr< CdrStorage > & getCdrStorage(const CdrIterator< CdrSolver > &a_solverIt)
Return the SDC scratch storage associated with a given CDR solver.
Definition CD_CdrPlasmaImExSdcStepper.cpp:253
Real m_sigmaError
Surface charge error norm from the most recent correction comparison.
Definition CD_CdrPlasmaImExSdcStepper.H:303
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:167
Real advance(const Real a_dt) override
Advance equations by one time step using the IMEX-SDC algorithm.
Definition CD_CdrPlasmaImExSdcStepper.cpp:553
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:1846
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:1234
bool m_computeV
Debug flag: if false, skip drift velocity updates.
Definition CD_CdrPlasmaImExSdcStepper.H:268
void updateDiffusionCoefficients()
Recompute diffusion coefficients from the current electric field in scratch storage.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1918
void deallocateInternals() override
Deallocate all internal SDC scratch storage.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1411
bool m_doRTE
Debug flag: if false, skip the RTE advance.
Definition CD_CdrPlasmaImExSdcStepper.H:258
void computeCdrFluxes(const Real a_time)
Compute CDR boundary fluxes on EB faces from current solver states.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1662
void copySigmaToM0()
Copy current surface charge into the SDC sigma^k storage at node 0.
Definition CD_CdrPlasmaImExSdcStepper.cpp:675
Real m_preError
Error from the previous step, used by the PI controller.
Definition CD_CdrPlasmaImExSdcStepper.H:313
void copyPhiPToCdr()
Copy the SDC phi^k storage at the final node p back into the CDR solvers.
Definition CD_CdrPlasmaImExSdcStepper.cpp:522
bool m_doDiffusion
Debug flag: if false, skip the implicit diffusion integration.
Definition CD_CdrPlasmaImExSdcStepper.H:248
bool m_haveError
True once an error estimate has been computed in the current step.
Definition CD_CdrPlasmaImExSdcStepper.H:233
Real m_extrapDt
Time step used for half-time extrapolation of advection states.
Definition CD_CdrPlasmaImExSdcStepper.H:213
bool m_profileSteps
If true, write per-step SDC profile data to a file.
Definition CD_CdrPlasmaImExSdcStepper.H:293
RefCountedPtr< FieldStorage > m_fieldScratch
Field solver SDC scratch storage.
Definition CD_CdrPlasmaImExSdcStepper.H:137
EBAMRIVData & getSigmaSolverK(const int a_m)
Return the surface charge sigma^k at SDC node m.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1962
bool m_useTGA
If true, use the TGA (Crank-Nicholson/RK2) second-order implicit diffusion scheme.
Definition CD_CdrPlasmaImExSdcStepper.H:238
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:480
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:904
int m_errorIdx
CDR species index used to drive the adaptive step-size controller.
Definition CD_CdrPlasmaImExSdcStepper.H:173
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:127
void allocateRtStorage()
Allocate scratch storage for all RTE solvers.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1389
RefCountedPtr< RtStorage > & getRtStorage(const RtIterator< RtSolver > &a_solverIt)
Return the SDC scratch storage associated with a given RTE solver.
Definition CD_CdrPlasmaImExSdcStepper.cpp:259
void finalizeErrors()
Accumulate the maximum correction norm into m_cdrError and m_sigmaError.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1124
Vector< RefCountedPtr< RtStorage > > m_rteScratch
Per-RTE-solver SDC scratch storage.
Definition CD_CdrPlasmaImExSdcStepper.H:132
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:334
int m_errorNorm
Error norm selector: 0 for L-infinity, 2 for L2.
Definition CD_CdrPlasmaImExSdcStepper.H:162
RefCountedPtr< SigmaStorage > m_sigmaScratch
Surface charge solver SDC scratch storage.
Definition CD_CdrPlasmaImExSdcStepper.H:142
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:1972
Vector< Real > m_cdrError
Per-CDR-species error norm from the most recent correction comparison.
Definition CD_CdrPlasmaImExSdcStepper.H:298
void setupUniformNodes(const int a_p)
Build p+1 uniformly spaced nodes on [0, 1].
Definition CD_CdrPlasmaImExSdcStepper.cpp:303
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:1336
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:959
Real m_maxError
Maximum error across all species and surface charge.
Definition CD_CdrPlasmaImExSdcStepper.H:308
Vector< Vector< Real > > m_vandermonde
Vandermonde matrix used to compute the integration weights from the node positions.
Definition CD_CdrPlasmaImExSdcStepper.H:324
void computeElectricFieldIntoScratch()
Compute the electric field from the current field solver state and store in m_fieldScratch.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1441
bool m_adaptiveDt
If true, use the PI controller to adaptively select the time step.
Definition CD_CdrPlasmaImExSdcStepper.H:223
Vector< EBAMRCellData * > getCdrSolversPhiK(const int a_m)
Return the CDR phi^k values at SDC node m.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1945
void setupQuadratureNodes(const int a_p)
Build quadrature nodes of type m_whichNodes with p subintervals.
Definition CD_CdrPlasmaImExSdcStepper.cpp:281
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:452
void allocateInternals() override
Allocate internal SDC scratch storage.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1347
Real m_safety
Safety factor applied to the step-size controller's growth estimate.
Definition CD_CdrPlasmaImExSdcStepper.H:198
virtual ~CdrPlasmaImExSdcStepper()
Destructor.
Definition CD_CdrPlasmaImExSdcStepper.cpp:48
void computeCdrGradients()
Compute cell-centered gradients of current CDR solver densities.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1463
bool m_doAdvectionSource
Debug flag: if false, skip the advection and reaction integration.
Definition CD_CdrPlasmaImExSdcStepper.H:243
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:1828
Real m_newDt
Tentative time step for the next advance call, set by computeNewDt().
Definition CD_CdrPlasmaImExSdcStepper.H:208
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:806
void allocateSigmaStorage()
Allocate scratch storage for the surface charge solver.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1403
void computeSigmaFlux()
Compute the surface charge boundary flux from current solver states.
Definition CD_CdrPlasmaImExSdcStepper.cpp:1806
bool m_printReport
If true, print a report of the adaptive stepping outcome after each step.
Definition CD_CdrPlasmaImExSdcStepper.H:228
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