chombo-discharge
Loading...
Searching...
No Matches
CD_DischargeInceptionStepper.H
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2022-2026 SINTEF Energy Research
3 * SPDX-FileCopyrightText: 2022-2026 NTNU
4 * SPDX-FileCopyrightText: 2022-2026 Fanny Skirbekk
5 *
6 * SPDX-License-Identifier: GPL-3.0-or-later
7 */
8
17#ifndef CD_DISCHARGEINCEPTIONSTEPPER_H
18#define CD_DISCHARGEINCEPTIONSTEPPER_H
19
20// Our includes
21#include <CD_TimeStepper.H>
24#include <CD_FieldSolver.H>
25#include <CD_FieldSolverGMG.H>
26#include <CD_CdrSolver.H>
27#include <CD_CdrCTU.H>
28#include <CD_NamespaceHeader.H>
29
30namespace Physics {
31namespace DischargeInception {
32
37{
38 Euler,
40};
41
46{
47 Euler,
48 Heun,
49 ImExCTU
50};
51
55enum class Mode
56{
59};
60
65{
66 Unknown,
67 CDR,
71};
72
93template <typename P = DischargeInceptionParticle, typename F = FieldSolverGMG, typename C = CdrCTU>
95{
96public:
101
106
111
116
122
128
132 void
133 setupSolvers() override;
134
138 void
139 allocate() override;
140
144 void
145 initialData() override;
146
150 void
151 postInitialize() override;
152
157 void
159 {}
160
164 void
165 registerRealms() override;
166
171 void
172 registerOperators() override;
173
177 void
178 parseOptions();
179
183 void
184 parseRuntimeOptions() override;
185
186#ifdef CH_USE_HDF5
193 virtual void
194 writeCheckpointData(HDF5Handle& a_handle, const int a_lvl) const override;
195#endif
196
197#ifdef CH_USE_HDF5
204 virtual void
205 readCheckpointData(HDF5Handle& a_handle, const int a_lvl) override;
206#endif
207
213 virtual int
214 getNumberOfPlotVariables() const override;
215
220 virtual Vector<std::string>
221 getPlotVariableNames() const override;
222
230 virtual void
231 writePlotData(LevelData<EBCellFAB>& a_output,
232 int& a_icomp,
233 const std::string& a_outputRealm,
234 const int a_level) const override;
235
240 virtual Vector<std::string>
241 getStationaryPlotVariableNames() const noexcept;
242
247 virtual Vector<std::string>
248 getTransientPlotVariableNames() const noexcept;
249
254 virtual Real
255 computeDt() override;
256
262 virtual Real
263 advance(const Real a_dt) override;
264
269 virtual void
270 advanceIons(const Real a_dt) noexcept;
271
278 virtual void
279 synchronizeSolverTimes(const int a_step, const Real a_time, const Real a_dt) override;
280
284 virtual void
285 printStepReport() override;
286
292 virtual void
293 preRegrid(const int a_lmin, const int a_oldFinestLevel) override;
294
301 virtual void
302 regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override;
303
308 virtual void
309 postRegrid() override;
310
315 virtual void
316 setVoltageCurve(const std::function<Real(const Real& a_time)>& a_voltageCurve) noexcept;
317
322 virtual void
323 setRho(const std::function<Real(const RealVect& x)>& a_rho) noexcept;
324
329 virtual void
330 setSigma(const std::function<Real(const RealVect& x)>& a_sigma) noexcept;
331
336 virtual void
337 setIonDensity(const std::function<Real(const RealVect x)>& a_density) noexcept;
338
343 virtual void
344 setIonMobility(const std::function<Real(const Real E)>& a_mobility) noexcept;
345
350 virtual void
351 setIonDiffusion(const std::function<Real(const Real E)>& a_diffCo) noexcept;
352
357 virtual void
358 setAlpha(const std::function<Real(const Real& E, const RealVect& x)>& a_alpha) noexcept;
359
364 virtual void
365 setEta(const std::function<Real(const Real& E, const RealVect& x)>& a_eta) noexcept;
366
371 virtual const std::function<Real(const Real& E, const RealVect& x)>&
372 getAlpha() const noexcept;
373
378 virtual const std::function<Real(const Real& E, const RealVect& x)>&
379 getEta() const noexcept;
380
385 virtual void
386 setBackgroundRate(const std::function<Real(const Real& E, const RealVect& x)>& a_backgroundRate) noexcept;
387
393 virtual void
394 setDetachmentRate(const std::function<Real(const Real& E, const RealVect& x)>& a_detachmentRate) noexcept;
395
400 virtual void
401 setFieldEmission(const std::function<Real(const Real& E, const RealVect& x)>& a_currentDensity) noexcept;
402
407 virtual void
408 setSecondaryEmission(const std::function<Real(const Real& E, const RealVect& x)>& a_coeff) noexcept;
409
414 virtual Mode
415 getMode() const noexcept;
416
421 virtual const EBAMRCellData*
422 getElectricField() const noexcept;
423
424protected:
429
434
439
444
449
454
458 RefCountedPtr<CdrSolver> m_ionSolver;
459
463 mutable MFAMRCellData m_potential;
464
468 MFAMRCellData m_potentialHomo;
469
473 MFAMRCellData m_potentialInho;
474
478 MFAMRCellData m_scratchHomo;
479
483 MFAMRCellData m_scratchInho;
484
488 mutable MFAMRCellData m_electricField;
489
493 MFAMRCellData m_electricFieldHomo;
494
498 MFAMRCellData m_electricFieldInho;
499
504
509 EBAMRCellData m_inceptionIntegral;
510
515 Vector<EBAMRCellData> m_inceptionIntegralPlus;
516
521 Vector<EBAMRCellData> m_inceptionIntegralMinu;
522
527 Vector<EBAMRCellData> m_backgroundIonizationStationary;
528
533 Vector<EBAMRCellData> m_detachmentStationary;
534
539 Vector<EBAMRCellData> m_emissionRatesPlus;
540
545 Vector<EBAMRCellData> m_emissionRatesMinu;
546
551 Vector<EBAMRCellData> m_townsendCriterionPlus;
552
557 Vector<EBAMRCellData> m_townsendCriterionMinu;
558
563 EBAMRCellData m_emissionRate;
564
570
576
582
588
594
600
605 EBAMRCellData m_townsendCriterion;
606
611 EBAMRCellData m_detachment;
612
618
622 EBAMRCellData m_gradAlpha;
623
628 std::vector<std::tuple<Real, Real, RealVect>> m_KPlusValues;
629
634 std::vector<std::tuple<Real, Real, RealVect>> m_KMinuValues;
635
640 std::vector<std::tuple<Real, Real, RealVect>> m_TPlusValues;
641
646 std::vector<std::tuple<Real, Real, RealVect>> m_TMinuValues;
647
652 std::vector<std::pair<Real, Real>> m_maxK;
653
658 std::vector<std::pair<Real, Real>> m_maxT;
659
664 std::vector<Real> m_criticalVolumePlus;
665
670 std::vector<Real> m_criticalVolumeMinu;
671
676 std::vector<Real> m_criticalAreaPlus;
677
682 std::vector<Real> m_criticalAreaMinu;
683
688 std::vector<Real> m_ionizationVolume;
689
694 std::vector<Real> m_RdotPlus;
695
700 std::vector<Real> m_RdotMinu;
701
706 std::vector<Real> m_voltageSweeps;
707
713 std::vector<std::pair<Real, Real>> m_Rdot;
714
719 std::vector<std::pair<Real, Real>> m_inceptionProbability;
720
725 std::vector<std::pair<Real, Real>> m_criticalVolume;
726
731 std::vector<std::pair<Real, Real>> m_criticalArea;
732
737 std::vector<std::pair<Real, Real>> m_ionizationVolumeTransient;
738
744
750
755
759 Real m_cfl;
760
765
770
775
780
785
790
795
800
805
810
815
820
825
830
835
840
845
850
855
860
865
870
875
880
885
890
895
900
905
910
914 std::function<Real(const Real a_time)> m_voltageCurve;
915
919 std::string m_realm;
920
924 std::string m_dataOutputFile;
925
929 std::string m_outputFile;
930
934 phase::which_phase m_phase;
935
939 std::function<Real(const RealVect& x)> m_rho;
940
944 std::function<Real(const RealVect& x)> m_sigma;
945
949 std::function<Real(const RealVect& x)> m_initialIonDensity;
950
954 std::function<Real(const Real& E)> m_ionMobility;
955
959 std::function<Real(const Real& E)> m_ionDiffusion;
960
964 std::function<Real(const Real& E, const RealVect& x)> m_alpha;
965
969 std::function<Real(const Real& E, const RealVect& x)> m_eta;
970
974 std::function<Real(const Real& E, const RealVect& x)> m_detachmentRate;
975
979 std::function<Real(const Real& E, const RealVect& x)> m_backgroundRate;
980
984 std::function<Real(const Real& E, const RealVect& x)> m_fieldEmission;
985
989 std::function<Real(const Real& E, const RealVect& x)> m_secondaryEmission;
990
994 virtual void
995 seedUniformParticles() noexcept;
996
1002 virtual void
1003 seedIonizationParticles(const Real a_voltage) noexcept;
1004
1010 virtual void
1011 computeInceptionIntegral(EBAMRCellData& a_inceptionIntegral, const Real a_voltage) noexcept;
1012
1019 virtual void
1021
1028 virtual void
1029 computeInceptionIntegralTransient(const Real& a_voltage) noexcept;
1030
1035 virtual void
1036 inceptionIntegrateEuler(const Real& a_voltage) noexcept;
1037
1042 virtual void
1043 inceptionIntegrateTrapezoidal(const Real& a_voltage) noexcept;
1044
1048 virtual void
1050
1056 virtual void
1058
1064 virtual void
1065 computeTownsendCriterionTransient(const Real& a_voltage) noexcept;
1066
1071 virtual void
1072 townsendTrackEuler(const Real& a_voltage) noexcept;
1073
1078 virtual void
1079 townsendTrackTrapezoidal(const Real& a_voltage) noexcept;
1080
1086 virtual Real
1087 computeRdot(const Real& a_voltage) const noexcept;
1088
1092 virtual void
1093 rewindTracerParticles() noexcept;
1094
1098 virtual void
1099 resetTracerParticles() noexcept;
1100
1105 virtual void
1111 virtual void
1112 computeDetachmentStationary() noexcept;
1113
1118 virtual void
1120
1127 virtual void
1128 computeFieldEmission(EBAMRCellData& a_emissionRate, const Real& a_voltage) const noexcept;
1129
1137 virtual void
1138 evaluateFunction(EBAMRCellData& a_data,
1139 const Real& a_voltage,
1140 const std::function<Real(const Real E, const RealVect x)>& a_func) const noexcept;
1141
1150 virtual void
1151 evaluateFunction(LevelData<EBCellFAB>& a_data,
1152 const Real& a_voltage,
1153 const std::function<Real(const Real E, const RealVect x)>& a_func,
1154 const int a_level) const noexcept;
1155
1160 virtual void
1162
1168 virtual std::pair<Real, RealVect>
1169 computeMinimumInceptionVoltage(const EBAMRCellData& a_Uinc) const noexcept;
1170
1175 virtual void
1177
1183 virtual Real
1184 computeCriticalVolumeTransient() const noexcept;
1185
1190 virtual void
1192
1198 virtual Real
1199 computeCriticalAreaTransient() const noexcept;
1200
1205 virtual void
1207
1214 virtual Real
1215 computeIonizationVolumeTransient(const Real& a_voltage) const noexcept;
1216
1221 virtual void
1222 writeReportStationary() const noexcept;
1223
1228 virtual void
1229 writeReportTransient() const noexcept;
1230
1238 virtual void
1239 writePlotDataStationary(LevelData<EBCellFAB>& a_output,
1240 int& a_icomp,
1241 const std::string& a_outputRealm,
1242 const int a_level) const noexcept;
1243
1251 virtual void
1252 writePlotDataTransient(LevelData<EBCellFAB>& a_output,
1253 int& a_icomp,
1254 const std::string& a_outputRealm,
1255 const int a_level) const noexcept;
1256
1264 inline bool
1265 particleOutsideGrid(const RealVect& a_pos, const RealVect& a_probLo, const RealVect& a_probHi) const noexcept;
1266
1272 inline bool
1273 particleInsideEB(const RealVect& a_pos) const noexcept;
1274
1279 inline void
1280 computeIonVelocity(const Real& a_voltage) noexcept;
1281
1286 inline void
1287 computeIonDiffusion(const Real& a_voltage) noexcept;
1288
1292 inline void
1293 parseMode() noexcept;
1294
1298 inline void
1299 parseVoltages() noexcept;
1300
1304 inline void
1305 parseOutput() noexcept;
1306
1310 inline void
1311 parseVerbosity() noexcept;
1312
1316 inline void
1317 parseInceptionAlgorithm() noexcept;
1318
1322 inline void
1323 parseTransportAlgorithm() noexcept;
1324
1328 inline void
1329 parsePlotVariables() noexcept;
1330
1334 inline void
1335 solvePoisson() noexcept;
1336
1344 inline void
1345 superposition(EBAMRCellData& a_sumField,
1346 const MFAMRCellData& a_inhomogeneousField,
1347 const MFAMRCellData& a_homogeneousField,
1348 const Real a_voltage) const noexcept;
1349
1355 inline void
1356 superposition(EBAMRCellData& a_sumField, const Real a_voltage) const noexcept;
1357
1369 virtual void
1370 writeData(LevelData<EBCellFAB>& a_output,
1371 int& a_comp,
1372 const EBAMRCellData& a_data,
1373 const std::string a_outputRealm,
1374 const int a_level,
1375 const bool a_interpToCentroids,
1376 const bool a_interpGhost) const noexcept;
1377
1384 virtual void
1385 getMaxValueAndLocation(Real& a_maxVal, RealVect& a_maxPos, const EBAMRCellData& a_data) const noexcept;
1386
1391 virtual Real
1392 getCriticalField() const noexcept;
1393};
1394} // namespace DischargeInception
1395} // namespace Physics
1396
1397#include <CD_NamespaceFooter.H>
1398
1400
1401#endif
Declaration of a class which implements CdrMultigrid using MUSCL for advection.
Declaration of an abstract class for solving scalar convection-diffusion-reaction problems.
SoA payload for the discharge-inception tracer particles.
Implementation of CD_DischargeInceptionStepper.H.
Mode
Solver mode: stationary (voltage sweep) or transient (time-dependent).
Definition CD_DischargeInceptionStepper.H:56
@ Stationary
Stationary mode: solve for inception voltage over a voltage sweep.
@ Transient
Transient mode: time-dependent simulation with a voltage curve.
TimeStepRestriction
Reason the time step was restricted in transient mode.
Definition CD_DischargeInceptionStepper.H:65
@ MinHardcap
Minimum hard-cap on the time step.
@ MaxHardcap
Maximum hard-cap on the time step.
@ Unknown
Restriction not yet determined.
@ VoltageCurve
Relative change in applied voltage.
TransportAlgorithm
Transport algorithm for advancing negative ions in transient mode.
Definition CD_DischargeInceptionStepper.H:46
@ Heun
Heun's method (explicit second-order Runge-Kutta).
@ ImExCTU
Implicit-explicit corner-transport-upwind scheme.
IntegrationAlgorithm
Integration algorithm for the streamer inception (K-value) integral.
Definition CD_DischargeInceptionStepper.H:37
@ Euler
Forward Euler integration along particle trajectories.
@ Trapezoidal
Trapezoidal (second-order) integration along particle trajectories.
Declaration of FieldSolverGMG.
Contains declaration of a base electrostatics solver class.
Declaration of main (abstract) time stepper class.
Declaration of a solver class that advances tracer particles.
Base class for solving convection-diffusion-reaction equations.
Definition CD_CdrSolver.H:36
Base class for electrostatic solvers.
Definition CD_FieldSolver.H:37
TimeStepper for evaluating the streamer inception criterion in static or transient electric fields.
Definition CD_DischargeInceptionStepper.H:95
virtual const std::function< Real(const Real &E, const RealVect &x)> & getAlpha() const noexcept
Get ionization coefficient.
Definition CD_DischargeInceptionStepperImplem.H:2064
void parseRuntimeOptions() override
Parse runtime options.
Definition CD_DischargeInceptionStepperImplem.H:389
Vector< EBAMRCellData > m_townsendCriterionPlus
Townsend criterion for starting positive ions.
Definition CD_DischargeInceptionStepper.H:551
RefCountedPtr< FieldSolver > m_fieldSolver
Field solver.
Definition CD_DischargeInceptionStepper.H:453
std::function< Real(const Real &E, const RealVect &x)> m_secondaryEmission
Secondary emission coefficient.
Definition CD_DischargeInceptionStepper.H:989
TimeStepRestriction m_timeStepRestriction
Time step restriction.
Definition CD_DischargeInceptionStepper.H:443
virtual const EBAMRCellData * getElectricField() const noexcept
Get the electric field.
Definition CD_DischargeInceptionStepperImplem.H:5564
RefCountedPtr< TracerParticleSolver< P > > m_tracerParticleSolver
Tracer particle solver.
Definition CD_DischargeInceptionStepper.H:448
void parseMode() noexcept
Parse simulation mode.
Definition CD_DischargeInceptionStepperImplem.H:419
EBAMRCellData m_townsendInceptionVoltageMinu
Computed Townsend inception voltage.
Definition CD_DischargeInceptionStepper.H:599
EBAMRCellData m_detachment
Detachment factor.
Definition CD_DischargeInceptionStepper.H:611
void computeIonVelocity(const Real &a_voltage) noexcept
Set the negative ion velocity. Note.
Definition CD_DischargeInceptionStepperImplem.H:5258
std::vector< std::tuple< Real, Real, RealVect > > m_TPlusValues
Max T value for every voltage.
Definition CD_DischargeInceptionStepper.H:640
virtual void setIonMobility(const std::function< Real(const Real E)> &a_mobility) noexcept
Set the negative ion mobility (field-dependent)
Definition CD_DischargeInceptionStepperImplem.H:2015
bool m_plotPoisson
Plot Poisson solver or not.
Definition CD_DischargeInceptionStepper.H:859
bool m_plotTownsend
Plot the Townsend-criterion for initiatory ions.
Definition CD_DischargeInceptionStepper.H:909
std::function< Real(const RealVect &x)> m_sigma
Surface charge distribution.
Definition CD_DischargeInceptionStepper.H:944
Real m_gradAlphaDx
Space step size relative to alpha/|grad(alpha)|.
Definition CD_DischargeInceptionStepper.H:819
MFAMRCellData m_potentialInho
Electric potential with charges.
Definition CD_DischargeInceptionStepper.H:473
virtual void writeReportStationary() const noexcept
Print report to the terminal.
Definition CD_DischargeInceptionStepperImplem.H:5027
MFAMRCellData m_electricField
Electric field.
Definition CD_DischargeInceptionStepper.H:488
virtual Real advance(const Real a_dt) override
Advancement method. Swaps between various kernels.
Definition CD_DischargeInceptionStepperImplem.H:1602
std::vector< std::pair< Real, Real > > m_criticalArea
Critical area at various time instances.
Definition CD_DischargeInceptionStepper.H:731
Vector< EBAMRCellData > m_inceptionIntegralPlus
Inception integral values.
Definition CD_DischargeInceptionStepper.H:515
virtual void townsendTrackTrapezoidal(const Real &a_voltage) noexcept
Track particles (positive ions) using a trapezoidal rule and check if the collide with a cathode.
Definition CD_DischargeInceptionStepperImplem.H:3426
virtual void seedUniformParticles() noexcept
Distribute particles in every grid cell.
Definition CD_DischargeInceptionStepperImplem.H:2137
virtual void resetTracerParticles() noexcept
Reset particles.
Definition CD_DischargeInceptionStepperImplem.H:3785
virtual void setIonDensity(const std::function< Real(const RealVect x)> &a_density) noexcept
Set the negative ion density.
Definition CD_DischargeInceptionStepperImplem.H:2003
virtual void computeCriticalVolumeStationary() noexcept
Compute the critical volume of the K values for each voltage.
Definition CD_DischargeInceptionStepperImplem.H:4569
virtual void writePlotDataStationary(LevelData< EBCellFAB > &a_output, int &a_icomp, const std::string &a_outputRealm, const int a_level) const noexcept
Write plot data for the 'stationary' mode.
Definition CD_DischargeInceptionStepperImplem.H:1118
virtual void postRegrid() override
Perform post-regrid operations.
Definition CD_DischargeInceptionStepperImplem.H:1954
std::function< Real(const Real &E)> m_ionMobility
Negative ion mobility.
Definition CD_DischargeInceptionStepper.H:954
virtual void inceptionIntegrateTrapezoidal(const Real &a_voltage) noexcept
K integral: Add integration parts after particles move.
Definition CD_DischargeInceptionStepperImplem.H:2822
virtual void setBackgroundRate(const std::function< Real(const Real &E, const RealVect &x)> &a_backgroundRate) noexcept
Set the background ionization rate (e.g. from cosmic radiation etc).
Definition CD_DischargeInceptionStepperImplem.H:2078
EBAMRCellData m_gradAlpha
Calculated version of alpha/(|grad(alpha)|) on the mesh.
Definition CD_DischargeInceptionStepper.H:622
Real m_maxKLimit
Maximum K-value that is calculated in stationary mode.
Definition CD_DischargeInceptionStepper.H:754
std::function< Real(const Real &E, const RealVect &x)> m_eta
Attachment coefficient.
Definition CD_DischargeInceptionStepper.H:969
void computeIonDiffusion(const Real &a_voltage) noexcept
Set the negative ion diffusion coefficient.
Definition CD_DischargeInceptionStepperImplem.H:5324
virtual std::pair< Real, RealVect > computeMinimumInceptionVoltage(const EBAMRCellData &a_Uinc) const noexcept
Compute the minimum inception voltage and the starting electron position.
Definition CD_DischargeInceptionStepperImplem.H:4494
Real m_alphaDx
Space step size relative to 1/alpha.
Definition CD_DischargeInceptionStepper.H:809
virtual void computeTownsendCriterionStationary() noexcept
Solve for the Townsend criterion for each particle in each voltage.
Definition CD_DischargeInceptionStepperImplem.H:3113
virtual void synchronizeSolverTimes(const int a_step, const Real a_time, const Real a_dt) override
Synchronize solver times and time steps.
Definition CD_DischargeInceptionStepperImplem.H:1800
virtual void inceptionIntegrateEuler(const Real &a_voltage) noexcept
Integrate the inception integral using the Euler rule.
Definition CD_DischargeInceptionStepperImplem.H:2632
std::function< Real(const RealVect &x)> m_rho
Space charge distribution.
Definition CD_DischargeInceptionStepper.H:939
std::vector< Real > m_ionizationVolume
Ionization volumes for each voltage.
Definition CD_DischargeInceptionStepper.H:688
std::function< Real(const RealVect &x)> m_initialIonDensity
Negative ion density.
Definition CD_DischargeInceptionStepper.H:949
virtual void computeInceptionVoltageVolume() noexcept
Interpolate between K values to find voltage giving K_inception and store values in m_inceptionVoltag...
Definition CD_DischargeInceptionStepperImplem.H:4233
Real m_epsVoltage
Permitted relative deviation in V(t) when computing voltage-curve based time steps.
Definition CD_DischargeInceptionStepper.H:779
EBAMRCellData m_homogeneousFieldGas
Gas-phase homogeneous field.
Definition CD_DischargeInceptionStepper.H:503
bool m_fullIntegration
Use full reconstruction of critical volume or not.
Definition CD_DischargeInceptionStepper.H:844
std::vector< std::pair< Real, Real > > m_maxK
Max K value for every time step.
Definition CD_DischargeInceptionStepper.H:652
std::string m_realm
Realm where the solver lives.
Definition CD_DischargeInceptionStepper.H:919
virtual Real computeIonizationVolumeTransient(const Real &a_voltage) const noexcept
Compute the ionization volume for each voltage.
Definition CD_DischargeInceptionStepperImplem.H:4945
virtual void computeFieldEmission(EBAMRCellData &a_emissionRate, const Real &a_voltage) const noexcept
Compute field emission rates.
Definition CD_DischargeInceptionStepperImplem.H:4087
std::vector< Real > m_criticalAreaPlus
Critical area of K values for each voltage.
Definition CD_DischargeInceptionStepper.H:676
DischargeInceptionStepper(const DischargeInceptionStepper &)=delete
Disallowed constructor.
virtual int getNumberOfPlotVariables() const override
Get the number of plot variables for this time stepper.
Definition CD_DischargeInceptionStepperImplem.H:672
DischargeInceptionStepper(const DischargeInceptionStepper &&)=delete
Disallowed constructor.
virtual Real computeCriticalVolumeTransient() const noexcept
Compute the critical volume of the K values for each voltage.
Definition CD_DischargeInceptionStepperImplem.H:4660
DischargeInceptionStepper & operator=(const DischargeInceptionStepper &&)=delete
Disallowed assignment.
Real m_maxPhysDx
Maximum spatial step (physical dimensions)
Definition CD_DischargeInceptionStepper.H:794
void registerOperators() override
Register operators.
Definition CD_DischargeInceptionStepperImplem.H:360
virtual void getMaxValueAndLocation(Real &a_maxVal, RealVect &a_maxPos, const EBAMRCellData &a_data) const noexcept
Get the maximum value and location corresponding to the maximum value in the input data holder.
Definition CD_DischargeInceptionStepperImplem.H:5434
EBAMRCellData m_townsendInceptionVoltagePlus
Computed Townsend inception voltage.
Definition CD_DischargeInceptionStepper.H:593
Vector< EBAMRCellData > m_inceptionIntegralMinu
Inception integral values.
Definition CD_DischargeInceptionStepper.H:521
virtual void evaluateFunction(EBAMRCellData &a_data, const Real &a_voltage, const std::function< Real(const Real E, const RealVect x)> &a_func) const noexcept
Evaluate a function f = f(E, x) in a volume.
Definition CD_DischargeInceptionStepperImplem.H:4146
std::vector< Real > m_voltageSweeps
Voltage sweeps.
Definition CD_DischargeInceptionStepper.H:706
MFAMRCellData m_scratchInho
Scratch storage used during regrids.
Definition CD_DischargeInceptionStepper.H:483
bool m_profile
Profile calculation or not.
Definition CD_DischargeInceptionStepper.H:829
std::function< Real(const Real &E)> m_ionDiffusion
Negative ion diffusion coefficient.
Definition CD_DischargeInceptionStepper.H:959
Real m_relativeDeltaU
Maximum relative voltage increase.
Definition CD_DischargeInceptionStepper.H:743
std::function< Real(const Real &E, const RealVect &x)> m_fieldEmission
Field emission current.
Definition CD_DischargeInceptionStepper.H:984
TransportAlgorithm m_transportAlgorithm
Transport algorithm for advancing negative ions in the transient mode.
Definition CD_DischargeInceptionStepper.H:438
void allocate() override
Allocate storage for solvers and time stepper.
Definition CD_DischargeInceptionStepperImplem.H:173
Real m_minPhysDx
Minimum spatial step (physical dimensions)
Definition CD_DischargeInceptionStepper.H:789
Vector< EBAMRCellData > m_detachmentStationary
Detachment rates.
Definition CD_DischargeInceptionStepper.H:533
EBAMRCellData m_emissionRate
Field emission rates.
Definition CD_DischargeInceptionStepper.H:563
virtual Vector< std::string > getTransientPlotVariableNames() const noexcept
Get plot variable names for transient mode.
Definition CD_DischargeInceptionStepperImplem.H:1010
virtual Mode getMode() const noexcept
Get the solver mode.
Definition CD_DischargeInceptionStepperImplem.H:2130
void parseInceptionAlgorithm() noexcept
Parse the inception algorithm.
Definition CD_DischargeInceptionStepperImplem.H:478
virtual ~DischargeInceptionStepper()
Destructor.
Definition CD_DischargeInceptionStepperImplem.H:113
Real m_firstDt
First time step.
Definition CD_DischargeInceptionStepper.H:764
void postCheckpointSetup() override
Post checkpoint operations.
Definition CD_DischargeInceptionStepper.H:158
bool m_plotInceptionIntegral
If true, plot the K-values.
Definition CD_DischargeInceptionStepper.H:874
void solvePoisson() noexcept
Solve the Poisson equation.
Definition CD_DischargeInceptionStepperImplem.H:251
virtual void setAlpha(const std::function< Real(const Real &E, const RealVect &x)> &a_alpha) noexcept
Set the ionization coefficient.
Definition CD_DischargeInceptionStepperImplem.H:2039
EBAMRCellData m_inceptionVoltageMinu
Computed inception voltage.
Definition CD_DischargeInceptionStepper.H:575
Vector< EBAMRCellData > m_emissionRatesPlus
Field emission rates.
Definition CD_DischargeInceptionStepper.H:539
MFAMRCellData m_potential
Electric potential.
Definition CD_DischargeInceptionStepper.H:463
bool m_plotDetachment
If true, plot electron detachment rate, i.e. done/dt due to detachment from negative ions.
Definition CD_DischargeInceptionStepper.H:889
Real m_minGridDx
Minimum spatial step (relative to grid resolution)
Definition CD_DischargeInceptionStepper.H:799
virtual void computeInceptionIntegral(EBAMRCellData &a_inceptionIntegral, const Real a_voltage) noexcept
Compute the inception integral for the input voltage.
Definition CD_DischargeInceptionStepperImplem.H:2438
Mode m_mode
Mode.
Definition CD_DischargeInceptionStepper.H:428
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override
Time stepper regrid method.
Definition CD_DischargeInceptionStepperImplem.H:1891
DischargeInceptionStepper & operator=(const DischargeInceptionStepper &)=delete
Disallowed assignment.
MFAMRCellData m_electricFieldHomo
Electric field without space/surface charge and V = 1 on live electrodes.
Definition CD_DischargeInceptionStepper.H:493
bool m_plotTracer
Plot tracer particle solver or not.
Definition CD_DischargeInceptionStepper.H:864
Real m_deltaK
Maximum targeted increase in K-value.
Definition CD_DischargeInceptionStepper.H:749
bool particleOutsideGrid(const RealVect &a_pos, const RealVect &a_probLo, const RealVect &a_probHi) const noexcept
Check if particle is outside grid boundaries.
Definition CD_DischargeInceptionStepperImplem.H:5218
virtual void writeReportTransient() const noexcept
Print report to the terminal.
Definition CD_DischargeInceptionStepperImplem.H:5138
virtual void rewindTracerParticles() noexcept
Move particles back to their original position.
Definition CD_DischargeInceptionStepperImplem.H:3747
virtual void townsendTrackEuler(const Real &a_voltage) noexcept
Track particles (positive ions) using an Euler rule and check if the collide with a cathode.
Definition CD_DischargeInceptionStepperImplem.H:3303
std::vector< Real > m_RdotMinu
Rate of appearance of first electron (in critical volume)
Definition CD_DischargeInceptionStepper.H:700
EBAMRCellData m_streamerInceptionVoltageMinu
Computed streamer inception voltage.
Definition CD_DischargeInceptionStepper.H:587
void superposition(EBAMRCellData &a_sumField, const MFAMRCellData &a_inhomogeneousField, const MFAMRCellData &a_homogeneousField, const Real a_voltage) const noexcept
Calculate the total electric field = inhomogeneous + V * homogeneous.
Definition CD_DischargeInceptionStepperImplem.H:5404
std::vector< std::pair< Real, Real > > m_Rdot
Integral factor for cumulative integration.
Definition CD_DischargeInceptionStepper.H:713
void parseOptions()
Parse options.
Definition CD_DischargeInceptionStepperImplem.H:374
std::vector< std::pair< Real, Real > > m_ionizationVolumeTransient
Ionization volume at various time instances.
Definition CD_DischargeInceptionStepper.H:737
void setupSolvers() override
Instantiate the tracer particle solver.
Definition CD_DischargeInceptionStepperImplem.H:123
std::vector< Real > m_criticalVolumePlus
Critical volumes of K values for each voltage.
Definition CD_DischargeInceptionStepper.H:664
MFAMRCellData m_scratchHomo
Scratch storage used during regrids.
Definition CD_DischargeInceptionStepper.H:478
virtual void setEta(const std::function< Real(const Real &E, const RealVect &x)> &a_eta) noexcept
Set the attachment coefficient.
Definition CD_DischargeInceptionStepperImplem.H:2052
Vector< EBAMRCellData > m_backgroundIonizationStationary
Background ionization rates.
Definition CD_DischargeInceptionStepper.H:527
bool m_plotFieldEmission
If true, plot the field emission.
Definition CD_DischargeInceptionStepper.H:894
IntegrationAlgorithm m_inceptionAlgorithm
Integration algorithm for K-value.
Definition CD_DischargeInceptionStepper.H:433
std::function< Real(const Real &E, const RealVect &x)> m_backgroundRate
Background ionization rate expression.
Definition CD_DischargeInceptionStepper.H:979
EBAMRCellData m_streamerInceptionVoltagePlus
Computed streamer inception voltage.
Definition CD_DischargeInceptionStepper.H:581
virtual Vector< std::string > getStationaryPlotVariableNames() const noexcept
Get plot variable names for stationary mode.
Definition CD_DischargeInceptionStepperImplem.H:865
bool m_plotInceptionVoltage
If true, plot the inception voltage.
Definition CD_DischargeInceptionStepper.H:879
std::string m_outputFile
File name prefix for HDF5 plot output.
Definition CD_DischargeInceptionStepper.H:929
EBAMRCellData m_inceptionVoltagePlus
Computed inception voltage.
Definition CD_DischargeInceptionStepper.H:569
std::function< Real(const Real &E, const RealVect &x)> m_detachmentRate
Detachment probability for negative ion.
Definition CD_DischargeInceptionStepper.H:974
Real m_townsendGridDx
Space step size used for ion tracking.
Definition CD_DischargeInceptionStepper.H:814
virtual void setDetachmentRate(const std::function< Real(const Real &E, const RealVect &x)> &a_detachmentRate) noexcept
Set the detachment rate for negative ions.
Definition CD_DischargeInceptionStepperImplem.H:2091
virtual void computeTownsendCriterionTransient(const Real &a_voltage) noexcept
Solve for the Townsend criterion for each particle in each voltage.
Definition CD_DischargeInceptionStepperImplem.H:3247
virtual void computeIonizationVolumeStationary() noexcept
Compute the ionization volume for each voltage.
Definition CD_DischargeInceptionStepperImplem.H:4847
std::function< Real(const Real a_time)> m_voltageCurve
Time-dependent voltage.
Definition CD_DischargeInceptionStepper.H:914
Vector< EBAMRCellData > m_townsendCriterionMinu
Townsend criterion for starting negative ions (electrons arriving at anode).
Definition CD_DischargeInceptionStepper.H:557
virtual void writePlotDataTransient(LevelData< EBCellFAB > &a_output, int &a_icomp, const std::string &a_outputRealm, const int a_level) const noexcept
Write plot data for the 'transient' mode.
Definition CD_DischargeInceptionStepperImplem.H:1332
phase::which_phase m_phase
Phase (gas/solid) where the solver lives.
Definition CD_DischargeInceptionStepper.H:934
virtual void computeFieldEmissionStationary() noexcept
Compute field emission rates.
Definition CD_DischargeInceptionStepperImplem.H:3987
std::string m_dataOutputFile
File name for the tabular data output (inception voltages, K-values, etc.).
Definition CD_DischargeInceptionStepper.H:924
void parseOutput() noexcept
Parse output settings.
Definition CD_DischargeInceptionStepperImplem.H:464
std::function< Real(const Real &E, const RealVect &x)> m_alpha
Ionization coefficient.
Definition CD_DischargeInceptionStepper.H:964
MFAMRCellData m_potentialHomo
Electric potential without charges.
Definition CD_DischargeInceptionStepper.H:468
EBAMRCellData m_inceptionIntegral
Inception integral values.
Definition CD_DischargeInceptionStepper.H:509
bool m_plotEta
If true, plot eta.
Definition CD_DischargeInceptionStepper.H:904
Vector< EBAMRCellData > m_emissionRatesMinu
Field emission rates.
Definition CD_DischargeInceptionStepper.H:545
bool m_debug
Debug or not.
Definition CD_DischargeInceptionStepper.H:834
virtual void computeInceptionIntegralStationary() noexcept
Solve streamer inception integral for each particle in each voltage and store K values in m_inception...
Definition CD_DischargeInceptionStepperImplem.H:2493
virtual Real computeCriticalAreaTransient() const noexcept
Compute the critical area of the K values for each voltage.
Definition CD_DischargeInceptionStepperImplem.H:4796
Real m_maxGridDx
Maximum spatial step (relative to grid resolution)
Definition CD_DischargeInceptionStepper.H:804
virtual Real getCriticalField() const noexcept
Get the breakdown field.
Definition CD_DischargeInceptionStepperImplem.H:5573
virtual Vector< std::string > getPlotVariableNames() const override
Get plot variable names.
Definition CD_DischargeInceptionStepperImplem.H:809
Real m_maxDt
Maximum permitted time step.
Definition CD_DischargeInceptionStepper.H:769
virtual void computeDetachmentStationary() noexcept
Compute the detachment ionization rate for all voltages.
Definition CD_DischargeInceptionStepperImplem.H:3899
bool m_plotField
Plot field.
Definition CD_DischargeInceptionStepper.H:854
virtual void writeData(LevelData< EBCellFAB > &a_output, int &a_comp, const EBAMRCellData &a_data, const std::string a_outputRealm, const int a_level, const bool a_interpToCentroids, const bool a_interpGhost) const noexcept
Write data to output. Convenience function used for IO.
Definition CD_DischargeInceptionStepperImplem.H:5506
void parseVoltages() noexcept
Parse voltage levels.
Definition CD_DischargeInceptionStepperImplem.H:444
EBAMRCellData m_backgroundIonization
Background ionization.
Definition CD_DischargeInceptionStepper.H:617
virtual void interpolateGradAlphaToParticles() noexcept
Interpolate alpha/|grad(alpha)| onto some scratch particle storage.
Definition CD_DischargeInceptionStepperImplem.H:2420
std::vector< std::tuple< Real, Real, RealVect > > m_KPlusValues
Max K value for every voltage.
Definition CD_DischargeInceptionStepper.H:628
virtual void writePlotData(LevelData< EBCellFAB > &a_output, int &a_icomp, const std::string &a_outputRealm, const int a_level) const override
Write plot data to output holder.
Definition CD_DischargeInceptionStepperImplem.H:1075
std::vector< std::tuple< Real, Real, RealVect > > m_KMinuValues
Max K value for every voltage.
Definition CD_DischargeInceptionStepper.H:634
bool m_plotAlpha
If true, plot alpha.
Definition CD_DischargeInceptionStepper.H:899
virtual void setIonDiffusion(const std::function< Real(const Real E)> &a_diffCo) noexcept
Set the negative ion diffusion coefficient (field-dependent)
Definition CD_DischargeInceptionStepperImplem.H:2027
void postInitialize() override
Perform any post-initialization steps.
Definition CD_DischargeInceptionStepperImplem.H:2338
bool particleInsideEB(const RealVect &a_pos) const noexcept
Check if particle is inside electrode.
Definition CD_DischargeInceptionStepperImplem.H:5242
virtual void setSigma(const std::function< Real(const RealVect &x)> &a_sigma) noexcept
Set surface charge distribution.
Definition CD_DischargeInceptionStepperImplem.H:1991
EBAMRCellData m_townsendCriterion
Townsend criterion.
Definition CD_DischargeInceptionStepper.H:605
void parseTransportAlgorithm() noexcept
Parse the transport algorithm.
Definition CD_DischargeInceptionStepperImplem.H:535
bool m_ionTransport
Ion transport on/off.
Definition CD_DischargeInceptionStepper.H:849
virtual void seedIonizationParticles(const Real a_voltage) noexcept
Add particles to every cell where alpha - eta > 0.0.
Definition CD_DischargeInceptionStepperImplem.H:2210
DischargeInceptionStepper()
Default constructor.
Definition CD_DischargeInceptionStepperImplem.H:39
bool m_plotNegativeIons
Plot negative ions or not.
Definition CD_DischargeInceptionStepper.H:869
MFAMRCellData m_electricFieldInho
Electric field with space/surface charge and V = 0 on all electrodes.
Definition CD_DischargeInceptionStepper.H:498
Real m_cfl
CFL-step for negative ions.
Definition CD_DischargeInceptionStepper.H:759
std::vector< Real > m_criticalAreaMinu
Critical area of K values for each voltage.
Definition CD_DischargeInceptionStepper.H:682
void parsePlotVariables() noexcept
Parse plot variables.
Definition CD_DischargeInceptionStepperImplem.H:575
void initialData() override
Fill problem with initial data.
Definition CD_DischargeInceptionStepperImplem.H:239
virtual const std::function< Real(const Real &E, const RealVect &x)> & getEta() const noexcept
Get attachment coefficient.
Definition CD_DischargeInceptionStepperImplem.H:2071
RefCountedPtr< CdrSolver > m_ionSolver
Negative ion solver.
Definition CD_DischargeInceptionStepper.H:458
virtual void setSecondaryEmission(const std::function< Real(const Real &E, const RealVect &x)> &a_coeff) noexcept
Set the secondary emission coefficient.
Definition CD_DischargeInceptionStepperImplem.H:2117
virtual Real computeDt() override
Compute a time step to be used by Driver.
Definition CD_DischargeInceptionStepperImplem.H:1515
std::vector< std::pair< Real, Real > > m_criticalVolume
Critical volume at various time instances.
Definition CD_DischargeInceptionStepper.H:725
virtual void preRegrid(const int a_lmin, const int a_oldFinestLevel) override
Perform pre-regrid operations.
Definition CD_DischargeInceptionStepperImplem.H:1871
virtual void printStepReport() override
Print a step report. Used in transient simulations.
Definition CD_DischargeInceptionStepperImplem.H:1818
virtual void setRho(const std::function< Real(const RealVect &x)> &a_rho) noexcept
Set space charge distribution.
Definition CD_DischargeInceptionStepperImplem.H:1979
void parseVerbosity() noexcept
Parse class verbosity.
Definition CD_DischargeInceptionStepperImplem.H:404
bool m_evaluateTownsend
Evaluate secondary emission.
Definition CD_DischargeInceptionStepper.H:839
Real m_minDt
Minimum permitted time step.
Definition CD_DischargeInceptionStepper.H:774
bool m_plotBackgroundIonization
If true, plot the background ionization rates.
Definition CD_DischargeInceptionStepper.H:884
void registerRealms() override
Register realms. Primal is the only realm we need.
Definition CD_DischargeInceptionStepperImplem.H:348
Real m_inceptionK
Inception criteria (read from input)
Definition CD_DischargeInceptionStepper.H:824
virtual void computeBackgroundIonizationStationary() noexcept
Compute the background ionization rate for all voltages.
Definition CD_DischargeInceptionStepperImplem.H:3817
virtual void computeInceptionIntegralTransient(const Real &a_voltage) noexcept
Solve streamer inception integral.
Definition CD_DischargeInceptionStepperImplem.H:2597
virtual void setVoltageCurve(const std::function< Real(const Real &a_time)> &a_voltageCurve) noexcept
Set the voltage curve (used for transient mode)
Definition CD_DischargeInceptionStepperImplem.H:1967
virtual void computeCriticalAreaStationary() noexcept
Compute the critical area of the K values for each voltage.
Definition CD_DischargeInceptionStepperImplem.H:4724
std::vector< Real > m_RdotPlus
Rate of appearance of first electron (in critical volume)
Definition CD_DischargeInceptionStepper.H:694
virtual void advanceIons(const Real a_dt) noexcept
Advance negative ions.
Definition CD_DischargeInceptionStepperImplem.H:1714
std::vector< std::pair< Real, Real > > m_inceptionProbability
Cumulative probability of breakdown by time t.
Definition CD_DischargeInceptionStepper.H:719
std::vector< std::pair< Real, Real > > m_maxT
Max Townsend value for every time step.
Definition CD_DischargeInceptionStepper.H:658
virtual Real computeRdot(const Real &a_voltage) const noexcept
Compute integral_Vcr(done/dt * (1 - eta/alpha) dV)
Definition CD_DischargeInceptionStepperImplem.H:3643
virtual void setFieldEmission(const std::function< Real(const Real &E, const RealVect &x)> &a_currentDensity) noexcept
Set the field emission current.
Definition CD_DischargeInceptionStepperImplem.H:2104
std::vector< std::tuple< Real, Real, RealVect > > m_TMinuValues
Max T value for every voltage.
Definition CD_DischargeInceptionStepper.H:646
std::vector< Real > m_criticalVolumeMinu
Critical volumes of K values for each voltage.
Definition CD_DischargeInceptionStepper.H:670
Real m_maxDtGrowth
Maximum permitted time step growth.
Definition CD_DischargeInceptionStepper.H:784
Base class for advancing equations.
Definition CD_TimeStepper.H:32
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:39
Namespace containing physics models for use with chombo-discharge.
Definition CD_AdvectionDiffusion.H:16
Phase names namespace.
Definition CD_MultiFluidIndexSpace.H:28