13#ifndef CD_CDRPLASMAIMEXSDCSTEPPER_H
14#define CD_CDRPLASMAIMEXSDCSTEPPER_H
21#include <CD_NamespaceHeader.H>
87 advance(
const Real a_dt)
override;
110 regridInternals(
const int a_lmin,
const int a_oldFinestLevel,
const int a_newFinestLevel)
override;
352 RefCountedPtr<CdrStorage>&
360 RefCountedPtr<RtStorage>&
392 Vector<EBAMRCellData*>
453 quad(EBAMRCellData& a_quad,
const Vector<EBAMRCellData>& a_integrand,
const int a_m);
462 quad(EBAMRIVData& a_quad,
const Vector<EBAMRIVData>& a_integrand,
const int a_m);
509 integrate(
const Real a_dt,
const Real a_time,
const bool a_lagged_terms);
542 Vector<EBAMRCellData*>
577 computeNewDt(
bool& a_accept_step,
const Real a_dt,
const int a_num_corrections);
594 const Real a_max_err);
608 updateField(
const Vector<EBAMRCellData*>& a_densities,
const EBAMRIVData& a_sigma);
725 computeCdrVelo(
const Vector<EBAMRCellData*>& a_phis,
const Real a_time);
765 const int a_substeps,
766 const int a_corrections,
767 const int a_rejections);
802#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: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