chombo-discharge
Loading...
Searching...
No Matches
CD_DischargeInceptionStepper.H
Go to the documentation of this file.
1/* chombo-discharge
2 * Copyright © 2022 SINTEF Energy Research.
3 * Copyright © 2022 NTNU.
4 * Copyright © 2022 Fanny Skirbekk.
5 * Please refer to Copyright.txt and LICENSE in the chombo-discharge root directory.
6 */
7
16#ifndef CD_DischargeInceptionStepper_H
17#define CD_DischargeInceptionStepper_H
18
19// Our includes
20#include <CD_TimeStepper.H>
22#include <CD_TracerParticle.H>
23#include <CD_FieldSolver.H>
24#include <CD_FieldSolverGMG.H>
25#include <CD_CdrSolver.H>
26#include <CD_CdrCTU.H>
27#include <CD_NamespaceHeader.H>
28
29namespace Physics {
30 namespace DischargeInception {
31
36 {
37 Euler,
38 Trapezoidal
39 };
40
45 {
46 Euler,
47 Heun,
48 ImExCTU
49 };
50
54 enum class Mode
55 {
56 Stationary,
57 Transient
58 };
59
64 {
65 Unknown,
66 CDR,
67 VoltageCurve,
68 MinHardcap,
69 MaxHardcap
70 };
71
78 template <typename P = TracerParticle<2, 3>, typename F = FieldSolverGMG, typename C = CdrCTU>
80 {
81 public:
86
91
96
101
107
113
117 void
118 setupSolvers() override;
119
123 void
124 allocate() override;
125
129 void
130 initialData() override;
131
135 void
136 postInitialize() override;
137
142 void
144 {}
145
149 void
150 registerRealms() override;
151
156 void
157 registerOperators() override;
158
162 void
163 parseOptions();
164
168 void
169 parseRuntimeOptions() override;
170
171#ifdef CH_USE_HDF5
178 virtual void
179 writeCheckpointData(HDF5Handle& a_handle, const int a_lvl) const override;
180#endif
181
182#ifdef CH_USE_HDF5
189 virtual void
190 readCheckpointData(HDF5Handle& a_handle, const int a_lvl) override;
191#endif
192
198 virtual int
199 getNumberOfPlotVariables() const override;
200
204 virtual Vector<std::string>
205 getPlotVariableNames() const override;
206
214 virtual void
215 writePlotData(LevelData<EBCellFAB>& a_output,
216 int& a_icomp,
217 const std::string a_outputRealm,
218 const int a_level) const override;
219
223 virtual Vector<std::string>
224 getStationaryPlotVariableNames() const noexcept;
225
229 virtual Vector<std::string>
230 getTransientPlotVariableNames() const noexcept;
231
235 virtual Real
236 computeDt() override;
237
243 virtual Real
244 advance(const Real a_dt) override;
245
249 virtual void
250 advanceIons(const Real a_dt) noexcept;
251
258 virtual void
259 synchronizeSolverTimes(const int a_step, const Real a_time, const Real a_dt) override;
260
264 virtual void
265 printStepReport() override;
266
272 virtual void
273 preRegrid(const int a_lmin, const int a_oldFinestLevel) override;
274
281 virtual void
282 regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override;
283
288 virtual void
289 postRegrid() override;
290
295 virtual void
296 setVoltageCurve(const std::function<Real(const Real& a_time)>& a_voltageCurve) noexcept;
297
302 virtual void
303 setRho(const std::function<Real(const RealVect& x)>& a_rho) noexcept;
304
309 virtual void
310 setSigma(const std::function<Real(const RealVect& x)>& a_sigma) noexcept;
311
316 virtual void
317 setIonDensity(const std::function<Real(const RealVect x)>& a_density) noexcept;
318
323 virtual void
324 setIonMobility(const std::function<Real(const Real E)>& a_mobility) noexcept;
325
330 virtual void
331 setIonDiffusion(const std::function<Real(const Real E)>& a_diffCo) noexcept;
332
337 virtual void
338 setAlpha(const std::function<Real(const Real& E, const RealVect& x)>& a_alpha) noexcept;
339
344 virtual void
345 setEta(const std::function<Real(const Real& E, const RealVect& x)>& a_eta) noexcept;
346
350 virtual const std::function<Real(const Real& E, const RealVect& x)>&
351 getAlpha() const noexcept;
352
356 virtual const std::function<Real(const Real& E, const RealVect& x)>&
357 getEta() const noexcept;
358
363 virtual void
364 setBackgroundRate(const std::function<Real(const Real& E, const RealVect& x)>& a_backgroundRate) noexcept;
365
371 virtual void
372 setDetachmentRate(const std::function<Real(const Real& E, const RealVect& x)>& a_detachmentRate) noexcept;
373
378 virtual void
379 setFieldEmission(const std::function<Real(const Real& E, const RealVect& x)>& a_currentDensity) noexcept;
380
385 virtual void
386 setSecondaryEmission(const std::function<Real(const Real& E, const RealVect& x)>& a_coeff) noexcept;
387
391 virtual Mode
392 getMode() const noexcept;
393
397 virtual const EBAMRCellData*
398 getElectricField() const noexcept;
399
400 protected:
405
410
415
420
425
430
434 RefCountedPtr<CdrSolver> m_ionSolver;
435
440
445
450
455
460
465
470
475
480
486
492
498
504
510
516
522
528
534
540
546
552
558
564
570
576
582
588
594
599
604 std::vector<std::tuple<Real, Real, RealVect>> m_KPlusValues;
605
610 std::vector<std::tuple<Real, Real, RealVect>> m_KMinuValues;
611
616 std::vector<std::tuple<Real, Real, RealVect>> m_TPlusValues;
617
622 std::vector<std::tuple<Real, Real, RealVect>> m_TMinuValues;
623
628 std::vector<std::pair<Real, Real>> m_maxK;
629
634 std::vector<std::pair<Real, Real>> m_maxT;
635
640 std::vector<Real> m_criticalVolumePlus;
641
646 std::vector<Real> m_criticalVolumeMinu;
647
652 std::vector<Real> m_criticalAreaPlus;
653
658 std::vector<Real> m_criticalAreaMinu;
659
664 std::vector<Real> m_ionizationVolume;
665
670 std::vector<Real> m_RdotPlus;
671
676 std::vector<Real> m_RdotMinu;
677
682 std::vector<Real> m_voltageSweeps;
683
689 std::vector<std::pair<Real, Real>> m_Rdot;
690
695 std::vector<std::pair<Real, Real>> m_inceptionProbability;
696
701 std::vector<std::pair<Real, Real>> m_criticalVolume;
702
707 std::vector<std::pair<Real, Real>> m_criticalArea;
708
713 std::vector<std::pair<Real, Real>> m_ionizationVolumeTransient;
714
720
726
731
735 Real m_cfl;
736
741
746
751
756
761
766
771
776
781
786
791
796
801
806
811
816
821
826
831
836
841
846
851
856
861
866
871
876
881
886
890 std::function<Real(const Real a_time)> m_voltageCurve;
891
895 std::string m_realm;
896
900 std::string m_dataOutputFile;
901
905 std::string m_outputFile;
906
910 phase::which_phase m_phase;
911
915 std::function<Real(const RealVect& x)> m_rho;
916
920 std::function<Real(const RealVect& x)> m_sigma;
921
925 std::function<Real(const RealVect& x)> m_initialIonDensity;
926
930 std::function<Real(const Real& E)> m_ionMobility;
931
935 std::function<Real(const Real& E)> m_ionDiffusion;
936
940 std::function<Real(const Real& E, const RealVect& x)> m_alpha;
941
945 std::function<Real(const Real& E, const RealVect& x)> m_eta;
946
950 std::function<Real(const Real& E, const RealVect& x)> m_detachmentRate;
951
955 std::function<Real(const Real& E, const RealVect& x)> m_backgroundRate;
956
960 std::function<Real(const Real& E, const RealVect& x)> m_fieldEmission;
961
965 std::function<Real(const Real& E, const RealVect& x)> m_secondaryEmission;
966
970 virtual void
971 seedUniformParticles() noexcept;
972
978 virtual void
979 seedIonizationParticles(const Real a_voltage) noexcept;
980
986 virtual void
987 computeInceptionIntegral(EBAMRCellData& a_inceptionIntegral, const Real a_voltage) noexcept;
988
994 virtual void
996
1003 virtual void
1004 computeInceptionIntegralTransient(const Real& a_voltage) noexcept;
1005
1009 virtual void
1010 inceptionIntegrateEuler(const Real& a_voltage) noexcept;
1011
1016 virtual void
1017 inceptionIntegrateTrapezoidal(const Real& a_voltage) noexcept;
1018
1022 virtual void
1024
1030 virtual void
1032
1038 virtual void
1039 computeTownsendCriterionTransient(const Real& a_voltage) noexcept;
1040
1045 virtual void
1046 townsendTrackEuler(const Real& a_voltage) noexcept;
1047
1052 virtual void
1053 townsendTrackTrapezoidal(const Real& a_voltage) noexcept;
1054
1059 virtual Real
1060 computeRdot(const Real& a_voltage) const noexcept;
1061
1065 virtual void
1066 rewindTracerParticles() noexcept;
1067
1071 virtual void
1072 resetTracerParticles() noexcept;
1073
1078 virtual void
1084 virtual void
1085 computeDetachmentStationary() noexcept;
1086
1091 virtual void
1093
1100 virtual void
1101 computeFieldEmission(EBAMRCellData& a_emissionRate, const Real& a_voltage) const noexcept;
1102
1110 virtual void
1112 const Real& a_voltage,
1113 const std::function<Real(const Real E, const RealVect x)>& a_func) const noexcept;
1114
1123 virtual void
1124 evaluateFunction(LevelData<EBCellFAB>& a_data,
1125 const Real& a_voltage,
1126 const std::function<Real(const Real E, const RealVect x)>& a_func,
1127 const int a_level) const noexcept;
1128
1133 virtual void
1135
1140 virtual std::pair<Real, RealVect>
1141 computeMinimumInceptionVoltage(const EBAMRCellData& a_Uinc) const noexcept;
1142
1147 virtual void
1149
1154 virtual Real
1155 computeCriticalVolumeTransient() const noexcept;
1156
1161 virtual void
1163
1168 virtual Real
1169 computeCriticalAreaTransient() const noexcept;
1170
1175 virtual void
1177
1182 virtual Real
1183 computeIonizationVolumeTransient(const Real& a_voltage) const noexcept;
1184
1189 virtual void
1190 writeReportStationary() const noexcept;
1191
1196 virtual void
1197 writeReportTransient() const noexcept;
1198
1206 virtual void
1207 writePlotDataStationary(LevelData<EBCellFAB>& a_output,
1208 int& a_icomp,
1209 const std::string a_outputRealm,
1210 const int a_level) const noexcept;
1211
1219 virtual void
1220 writePlotDataTransient(LevelData<EBCellFAB>& a_output,
1221 int& a_icomp,
1222 const std::string a_outputRealm,
1223 const int a_level) const noexcept;
1224
1232 inline bool
1233 particleOutsideGrid(const RealVect& a_pos, const RealVect& a_probLo, const RealVect& a_probHi) const noexcept;
1234
1240 inline bool
1241 particleInsideEB(const RealVect a_pos) const noexcept;
1242
1247 inline void
1248 computeIonVelocity(const Real& a_voltage) noexcept;
1249
1254 inline void
1255 computeIonDiffusion(const Real& a_voltage) noexcept;
1256
1260 inline void
1261 parseMode() noexcept;
1262
1266 inline void
1267 parseVoltages() noexcept;
1268
1272 inline void
1273 parseOutput() noexcept;
1274
1278 inline void
1279 parseVerbosity() noexcept;
1280
1284 inline void
1285 parseInceptionAlgorithm() noexcept;
1286
1290 inline void
1291 parseTransportAlgorithm() noexcept;
1292
1296 inline void
1297 parsePlotVariables() noexcept;
1298
1302 inline void
1303 solvePoisson() noexcept;
1304
1312 inline void
1313 superposition(EBAMRCellData& a_sumField,
1314 const MFAMRCellData& a_inhomogeneousField,
1315 const MFAMRCellData& a_homogeneousField,
1316 const Real a_voltage) const noexcept;
1317
1323 inline void
1324 superposition(EBAMRCellData& a_sumField, const Real a_voltage) const noexcept;
1325
1336 virtual void
1337 writeData(LevelData<EBCellFAB>& a_output,
1338 int& a_comp,
1339 const EBAMRCellData& a_data,
1340 const std::string a_outputRealm,
1341 const int a_level,
1342 const bool a_interpToCentroids,
1343 const bool a_interpGhost) const noexcept;
1344
1351 virtual void
1352 getMaxValueAndLocation(Real& a_maxVal, RealVect& a_maxPos, const EBAMRCellData& a_data) const noexcept;
1353
1357 virtual Real
1358 getCriticalField() const noexcept;
1359 };
1360 } // namespace DischargeInception
1361} // namespace Physics
1362
1363#include <CD_NamespaceFooter.H>
1364
1366
1367#endif
Declaration of a class which implements CdrMultigrid using MUSCL for advection.
Declaration of an abstract class for solving scalar convection-diffusion-reaction problems.
Implementation of CD_DischargeInceptionStepper.H.
Mode
For specifying whether the module is run in stationary or transient mode.
Definition CD_DischargeInceptionStepper.H:55
TimeStepRestriction
For specifying how the time step was restricted.
Definition CD_DischargeInceptionStepper.H:64
TransportAlgorithm
Algorithm for negative ion advancement.
Definition CD_DischargeInceptionStepper.H:45
IntegrationAlgorithm
Integration algorithm for the particles.
Definition CD_DischargeInceptionStepper.H:36
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.
Declaration of a tracer particle class.
Base class for solving convection-diffusion-reaction equations.
Definition CD_CdrSolver.H:34
Base class for electrostatic solvers.
Definition CD_FieldSolver.H:32
Class for streamer inception integral evaluations.
Definition CD_DischargeInceptionStepper.H:80
virtual const std::function< Real(const Real &E, const RealVect &x)> & getAlpha() const noexcept
Get ionization coefficient.
Definition CD_DischargeInceptionStepperImplem.H:2034
void parseRuntimeOptions() override
Parse runtime options.
Definition CD_DischargeInceptionStepperImplem.H:387
Vector< EBAMRCellData > m_townsendCriterionPlus
Townsend criterion for starting positive ions.
Definition CD_DischargeInceptionStepper.H:527
RefCountedPtr< FieldSolver > m_fieldSolver
Field solver.
Definition CD_DischargeInceptionStepper.H:429
std::function< Real(const Real &E, const RealVect &x)> m_secondaryEmission
Secondary emission coefficient.
Definition CD_DischargeInceptionStepper.H:965
TimeStepRestriction m_timeStepRestriction
Time step restriction.
Definition CD_DischargeInceptionStepper.H:419
virtual const EBAMRCellData * getElectricField() const noexcept
Get the electric field.
Definition CD_DischargeInceptionStepperImplem.H:5422
RefCountedPtr< TracerParticleSolver< P > > m_tracerParticleSolver
Tracer particle solver.
Definition CD_DischargeInceptionStepper.H:424
void parseMode() noexcept
Parse simulation mode.
Definition CD_DischargeInceptionStepperImplem.H:417
EBAMRCellData m_townsendInceptionVoltageMinu
Computed Townsend inception voltage.
Definition CD_DischargeInceptionStepper.H:575
EBAMRCellData m_detachment
Detachment factor.
Definition CD_DischargeInceptionStepper.H:587
void computeIonVelocity(const Real &a_voltage) noexcept
Set the negative ion velocity. Note.
Definition CD_DischargeInceptionStepperImplem.H:5121
std::vector< std::tuple< Real, Real, RealVect > > m_TPlusValues
Max T value for every voltage.
Definition CD_DischargeInceptionStepper.H:616
virtual void setIonMobility(const std::function< Real(const Real E)> &a_mobility) noexcept
Set the negative ion mobility (field-dependent)
Definition CD_DischargeInceptionStepperImplem.H:1985
bool m_plotPoisson
Plot Poisson solver or not.
Definition CD_DischargeInceptionStepper.H:835
bool m_plotTownsend
Plot the Townsend-criterion for initiatory ions.
Definition CD_DischargeInceptionStepper.H:885
std::function< Real(const RealVect &x)> m_sigma
Surface charge distribution.
Definition CD_DischargeInceptionStepper.H:920
Real m_gradAlphaDx
Space step size relative to alpha/|grad(alpha)|.
Definition CD_DischargeInceptionStepper.H:795
MFAMRCellData m_potentialInho
Electric potential with charges.
Definition CD_DischargeInceptionStepper.H:449
virtual void writeReportStationary() const noexcept
Print report to the terminal.
Definition CD_DischargeInceptionStepperImplem.H:4890
MFAMRCellData m_electricField
Electric field.
Definition CD_DischargeInceptionStepper.H:464
virtual Real advance(const Real a_dt) override
Advancement method. Swaps between various kernels.
Definition CD_DischargeInceptionStepperImplem.H:1572
std::vector< std::pair< Real, Real > > m_criticalArea
Critical area at various time instances.
Definition CD_DischargeInceptionStepper.H:707
Vector< EBAMRCellData > m_inceptionIntegralPlus
Inception integral values.
Definition CD_DischargeInceptionStepper.H:491
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:3329
virtual void seedUniformParticles() noexcept
Distribute particles in every grid cell.
Definition CD_DischargeInceptionStepperImplem.H:2107
virtual void resetTracerParticles() noexcept
Reset particles.
Definition CD_DischargeInceptionStepperImplem.H:3652
virtual void setIonDensity(const std::function< Real(const RealVect x)> &a_density) noexcept
Set the negative ion density.
Definition CD_DischargeInceptionStepperImplem.H:1973
virtual void computeCriticalVolumeStationary() noexcept
Compute the critical volume of the K values for each voltage.
Definition CD_DischargeInceptionStepperImplem.H:4432
virtual void postRegrid() override
Perform post-regrid operations.
Definition CD_DischargeInceptionStepperImplem.H:1924
std::function< Real(const Real &E)> m_ionMobility
Negative ion mobility.
Definition CD_DischargeInceptionStepper.H:930
virtual void inceptionIntegrateTrapezoidal(const Real &a_voltage) noexcept
K integral: Add integration parts after particles move.
Definition CD_DischargeInceptionStepperImplem.H:2772
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:2048
EBAMRCellData m_gradAlpha
Calculated version of alpha/(|grad(alpha)|) on the mesh.
Definition CD_DischargeInceptionStepper.H:598
Real m_maxKLimit
Maximum K-value that is calculated in stationary mode.
Definition CD_DischargeInceptionStepper.H:730
std::function< Real(const Real &E, const RealVect &x)> m_eta
Attachment coefficient.
Definition CD_DischargeInceptionStepper.H:945
void computeIonDiffusion(const Real &a_voltage) noexcept
Set the negative ion diffusion coefficient.
Definition CD_DischargeInceptionStepperImplem.H:5187
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:4357
Real m_alphaDx
Space step size relative to 1/alpha.
Definition CD_DischargeInceptionStepper.H:785
virtual void computeTownsendCriterionStationary() noexcept
Solve for the Townsend criterion for each particle in each voltage.
Definition CD_DischargeInceptionStepperImplem.H:3029
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:1770
virtual void inceptionIntegrateEuler(const Real &a_voltage) noexcept
Integrate the inception integral using the Euler rule.
Definition CD_DischargeInceptionStepperImplem.H:2600
std::function< Real(const RealVect &x)> m_rho
Space charge distribution.
Definition CD_DischargeInceptionStepper.H:915
std::vector< Real > m_ionizationVolume
Ionization volumes for each voltage.
Definition CD_DischargeInceptionStepper.H:664
std::function< Real(const RealVect &x)> m_initialIonDensity
Negative ion density.
Definition CD_DischargeInceptionStepper.H:925
virtual void computeInceptionVoltageVolume() noexcept
Interpolate between K values to find voltage giving K_inception and store values in m_inceptionVoltag...
Definition CD_DischargeInceptionStepperImplem.H:4096
Real m_epsVoltage
Permitted relative deviation in V(t) when computing voltage-curve based time steps.
Definition CD_DischargeInceptionStepper.H:755
EBAMRCellData m_homogeneousFieldGas
Gas-phase homogeneous field.
Definition CD_DischargeInceptionStepper.H:479
bool m_fullIntegration
Use full reconstruction of critical volume or not.
Definition CD_DischargeInceptionStepper.H:820
std::vector< std::pair< Real, Real > > m_maxK
Max K value for every time step.
Definition CD_DischargeInceptionStepper.H:628
std::string m_realm
Realm where the solver lives.
Definition CD_DischargeInceptionStepper.H:895
virtual Real computeIonizationVolumeTransient(const Real &a_voltage) const noexcept
Compute the ionization volume for each voltage.
Definition CD_DischargeInceptionStepperImplem.H:4808
virtual void computeFieldEmission(EBAMRCellData &a_emissionRate, const Real &a_voltage) const noexcept
Compute field emission rates.
Definition CD_DischargeInceptionStepperImplem.H:3950
std::vector< Real > m_criticalAreaPlus
Critical area of K values for each voltage.
Definition CD_DischargeInceptionStepper.H:652
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:670
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:4523
DischargeInceptionStepper & operator=(const DischargeInceptionStepper &&)=delete
Disallowed assignment.
Real m_maxPhysDx
Maximum spatial step (physical dimensions)
Definition CD_DischargeInceptionStepper.H:770
void registerOperators() override
Register operators.
Definition CD_DischargeInceptionStepperImplem.H:358
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:5296
EBAMRCellData m_townsendInceptionVoltagePlus
Computed Townsend inception voltage.
Definition CD_DischargeInceptionStepper.H:569
Vector< EBAMRCellData > m_inceptionIntegralMinu
Inception integral values.
Definition CD_DischargeInceptionStepper.H:497
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:4009
std::vector< Real > m_voltageSweeps
Voltage sweeps.
Definition CD_DischargeInceptionStepper.H:682
MFAMRCellData m_scratchInho
Scratch storage used during regrids.
Definition CD_DischargeInceptionStepper.H:459
bool m_profile
Profile calculation or not.
Definition CD_DischargeInceptionStepper.H:805
std::function< Real(const Real &E)> m_ionDiffusion
Negative ion diffusion coefficient.
Definition CD_DischargeInceptionStepper.H:935
Real m_relativeDeltaU
Maximum relative voltage increase.
Definition CD_DischargeInceptionStepper.H:719
std::function< Real(const Real &E, const RealVect &x)> m_fieldEmission
Field emission current.
Definition CD_DischargeInceptionStepper.H:960
TransportAlgorithm m_transportAlgorithm
Transport algorithm for advancing negative ions in the transient mode.
Definition CD_DischargeInceptionStepper.H:414
void allocate() override
Allocate storage for solvers and time stepper.
Definition CD_DischargeInceptionStepperImplem.H:171
Real m_minPhysDx
Minimum spatial step (physical dimensions)
Definition CD_DischargeInceptionStepper.H:765
Vector< EBAMRCellData > m_detachmentStationary
Detachment rates.
Definition CD_DischargeInceptionStepper.H:509
EBAMRCellData m_emissionRate
Field emission rates.
Definition CD_DischargeInceptionStepper.H:539
virtual Vector< std::string > getTransientPlotVariableNames() const noexcept
Get plot variable names for transient mode.
Definition CD_DischargeInceptionStepperImplem.H:1008
virtual Mode getMode() const noexcept
Get the solver mode.
Definition CD_DischargeInceptionStepperImplem.H:2100
void parseInceptionAlgorithm() noexcept
Parse the inception algorithm.
Definition CD_DischargeInceptionStepperImplem.H:476
virtual ~DischargeInceptionStepper()
Destructor.
Definition CD_DischargeInceptionStepperImplem.H:111
Real m_firstDt
First time step.
Definition CD_DischargeInceptionStepper.H:740
void postCheckpointSetup() override
Post checkpoint operations.
Definition CD_DischargeInceptionStepper.H:143
bool m_plotInceptionIntegral
If true, plot the K-values.
Definition CD_DischargeInceptionStepper.H:850
void solvePoisson() noexcept
Solve the Poisson equation.
Definition CD_DischargeInceptionStepperImplem.H:249
virtual void setAlpha(const std::function< Real(const Real &E, const RealVect &x)> &a_alpha) noexcept
Set the ionization coefficient.
Definition CD_DischargeInceptionStepperImplem.H:2009
EBAMRCellData m_inceptionVoltageMinu
Computed inception voltage.
Definition CD_DischargeInceptionStepper.H:551
Vector< EBAMRCellData > m_emissionRatesPlus
Field emission rates.
Definition CD_DischargeInceptionStepper.H:515
MFAMRCellData m_potential
Electric potential.
Definition CD_DischargeInceptionStepper.H:439
bool m_plotDetachment
If true, plot electron detachment rate, i.e. dne/dt due to detachment from negative ions.
Definition CD_DischargeInceptionStepper.H:865
Real m_minGridDx
Minimum spatial step (relative to grid resolution)
Definition CD_DischargeInceptionStepper.H:775
virtual void computeInceptionIntegral(EBAMRCellData &a_inceptionIntegral, const Real a_voltage) noexcept
Compute the inception integral for the input voltage.
Definition CD_DischargeInceptionStepperImplem.H:2415
Mode m_mode
Mode.
Definition CD_DischargeInceptionStepper.H:404
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override
Time stepper regrid method.
Definition CD_DischargeInceptionStepperImplem.H:1861
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:469
bool m_plotTracer
Plot tracer particle solver or not.
Definition CD_DischargeInceptionStepper.H:840
Real m_deltaK
Maximum targeted increase in K-value.
Definition CD_DischargeInceptionStepper.H:725
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:5081
virtual void writeReportTransient() const noexcept
Print report to the terminal.
Definition CD_DischargeInceptionStepperImplem.H:5001
virtual void rewindTracerParticles() noexcept
Move particles back to their original position.
Definition CD_DischargeInceptionStepperImplem.H:3620
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:3216
std::vector< Real > m_RdotMinu
Rate of appearance of first electron (in critical volume)
Definition CD_DischargeInceptionStepper.H:676
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:1073
EBAMRCellData m_streamerInceptionVoltageMinu
Computed streamer inception voltage.
Definition CD_DischargeInceptionStepper.H:563
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:5266
std::vector< std::pair< Real, Real > > m_Rdot
Integral factor for cumulative integration.
Definition CD_DischargeInceptionStepper.H:689
void parseOptions()
Parse options.
Definition CD_DischargeInceptionStepperImplem.H:372
std::vector< std::pair< Real, Real > > m_ionizationVolumeTransient
Ionization volume at various time instances.
Definition CD_DischargeInceptionStepper.H:713
void setupSolvers() override
Instantiate the tracer particle solver.
Definition CD_DischargeInceptionStepperImplem.H:121
std::vector< Real > m_criticalVolumePlus
Critical volumes of K values for each voltage.
Definition CD_DischargeInceptionStepper.H:640
MFAMRCellData m_scratchHomo
Scratch storage used during regrids.
Definition CD_DischargeInceptionStepper.H:454
virtual void setEta(const std::function< Real(const Real &E, const RealVect &x)> &a_eta) noexcept
Set the attachment coefficient.
Definition CD_DischargeInceptionStepperImplem.H:2022
Vector< EBAMRCellData > m_backgroundIonizationStationary
Background ionization rates.
Definition CD_DischargeInceptionStepper.H:503
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:1315
bool m_plotFieldEmission
If true, plot the field emission.
Definition CD_DischargeInceptionStepper.H:870
IntegrationAlgorithm m_inceptionAlgorithm
Integration algorithm for K-value.
Definition CD_DischargeInceptionStepper.H:409
std::function< Real(const Real &E, const RealVect &x)> m_backgroundRate
Background ionization rate expression.
Definition CD_DischargeInceptionStepper.H:955
EBAMRCellData m_streamerInceptionVoltagePlus
Computed streamer inception voltage.
Definition CD_DischargeInceptionStepper.H:557
virtual Vector< std::string > getStationaryPlotVariableNames() const noexcept
Get plot variable names for stationary mode.
Definition CD_DischargeInceptionStepperImplem.H:863
bool m_plotInceptionVoltage
If true, plot the inception voltage.
Definition CD_DischargeInceptionStepper.H:855
std::string m_outputFile
Output file.
Definition CD_DischargeInceptionStepper.H:905
EBAMRCellData m_inceptionVoltagePlus
Computed inception voltage.
Definition CD_DischargeInceptionStepper.H:545
std::function< Real(const Real &E, const RealVect &x)> m_detachmentRate
Detachment probability for negative ion.
Definition CD_DischargeInceptionStepper.H:950
Real m_townsendGridDx
Space step size used for ion tracking.
Definition CD_DischargeInceptionStepper.H:790
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:2061
virtual void computeTownsendCriterionTransient(const Real &a_voltage) noexcept
Solve for the Townsend criterion for each particle in each voltage.
Definition CD_DischargeInceptionStepperImplem.H:3163
virtual void computeIonizationVolumeStationary() noexcept
Compute the ionization volume for each voltage.
Definition CD_DischargeInceptionStepperImplem.H:4710
std::function< Real(const Real a_time)> m_voltageCurve
Time-dependent voltage.
Definition CD_DischargeInceptionStepper.H:890
Vector< EBAMRCellData > m_townsendCriterionMinu
Townsend criterion for starting positive ions.
Definition CD_DischargeInceptionStepper.H:533
phase::which_phase m_phase
Phase (gas/solid) where the solver lives.
Definition CD_DischargeInceptionStepper.H:910
virtual void computeFieldEmissionStationary() noexcept
Compute field emission rates.
Definition CD_DischargeInceptionStepperImplem.H:3850
std::string m_dataOutputFile
output data file
Definition CD_DischargeInceptionStepper.H:900
void parseOutput() noexcept
Parse output settings.
Definition CD_DischargeInceptionStepperImplem.H:462
std::function< Real(const Real &E, const RealVect &x)> m_alpha
Ionization coefficient.
Definition CD_DischargeInceptionStepper.H:940
MFAMRCellData m_potentialHomo
Electric potential without charges.
Definition CD_DischargeInceptionStepper.H:444
EBAMRCellData m_inceptionIntegral
Inception integral values.
Definition CD_DischargeInceptionStepper.H:485
bool m_plotEta
If true, plot eta.
Definition CD_DischargeInceptionStepper.H:880
Vector< EBAMRCellData > m_emissionRatesMinu
Field emission rates.
Definition CD_DischargeInceptionStepper.H:521
bool m_debug
Debug or not.
Definition CD_DischargeInceptionStepper.H:810
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:2470
virtual Real computeCriticalAreaTransient() const noexcept
Compute the critical area of the K values for each voltage.
Definition CD_DischargeInceptionStepperImplem.H:4659
Real m_maxGridDx
Maximum spatial step (relative to grid resolution)
Definition CD_DischargeInceptionStepper.H:780
virtual Real getCriticalField() const noexcept
Get the breakdown field.
Definition CD_DischargeInceptionStepperImplem.H:5431
virtual Vector< std::string > getPlotVariableNames() const override
Get plot variable names.
Definition CD_DischargeInceptionStepperImplem.H:807
Real m_maxDt
Maximum permitted time step.
Definition CD_DischargeInceptionStepper.H:745
virtual void computeDetachmentStationary() noexcept
Compute the detachment ionization rate for all voltages.
Definition CD_DischargeInceptionStepperImplem.H:3762
bool m_plotField
Plot field.
Definition CD_DischargeInceptionStepper.H:830
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:5364
void parseVoltages() noexcept
Parse voltage levels.
Definition CD_DischargeInceptionStepperImplem.H:442
EBAMRCellData m_backgroundIonization
Background ionization.
Definition CD_DischargeInceptionStepper.H:593
virtual void interpolateGradAlphaToParticles() noexcept
Interpolate alpha/|grad(alpha)| onto some scratch particle storage.
Definition CD_DischargeInceptionStepperImplem.H:2397
std::vector< std::tuple< Real, Real, RealVect > > m_KPlusValues
Max K value for every voltage.
Definition CD_DischargeInceptionStepper.H:604
std::vector< std::tuple< Real, Real, RealVect > > m_KMinuValues
Max K value for every voltage.
Definition CD_DischargeInceptionStepper.H:610
bool m_plotAlpha
If true, plot alpha.
Definition CD_DischargeInceptionStepper.H:875
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:1997
void postInitialize() override
Perform any post-initialization steps.
Definition CD_DischargeInceptionStepperImplem.H:2315
virtual void setSigma(const std::function< Real(const RealVect &x)> &a_sigma) noexcept
Set surface charge distribution.
Definition CD_DischargeInceptionStepperImplem.H:1961
EBAMRCellData m_townsendCriterion
Townsend criterion.
Definition CD_DischargeInceptionStepper.H:581
void parseTransportAlgorithm() noexcept
Parse the transport algorithm.
Definition CD_DischargeInceptionStepperImplem.H:533
bool m_ionTransport
Ion transport on/off.
Definition CD_DischargeInceptionStepper.H:825
virtual void seedIonizationParticles(const Real a_voltage) noexcept
Add particles to every cell where alpha - eta > 0.0.
Definition CD_DischargeInceptionStepperImplem.H:2184
DischargeInceptionStepper()
Default constructor.
Definition CD_DischargeInceptionStepperImplem.H:37
bool m_plotNegativeIons
Plot negative ions or not.
Definition CD_DischargeInceptionStepper.H:845
MFAMRCellData m_electricFieldInho
Electric field with space/surface charge and V = 0 on all electrodes.
Definition CD_DischargeInceptionStepper.H:474
Real m_cfl
CFL-step for negative ions.
Definition CD_DischargeInceptionStepper.H:735
std::vector< Real > m_criticalAreaMinu
Critical area of K values for each voltage.
Definition CD_DischargeInceptionStepper.H:658
void parsePlotVariables() noexcept
Parse plot variables.
Definition CD_DischargeInceptionStepperImplem.H:573
void initialData() override
Fill problem with initial data.
Definition CD_DischargeInceptionStepperImplem.H:237
virtual const std::function< Real(const Real &E, const RealVect &x)> & getEta() const noexcept
Get attachment coefficient.
Definition CD_DischargeInceptionStepperImplem.H:2041
RefCountedPtr< CdrSolver > m_ionSolver
Negative ion solver.
Definition CD_DischargeInceptionStepper.H:434
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:2087
virtual Real computeDt() override
Compute a time step to be used by Driver.
Definition CD_DischargeInceptionStepperImplem.H:1485
std::vector< std::pair< Real, Real > > m_criticalVolume
Critical volume at various time instances.
Definition CD_DischargeInceptionStepper.H:701
virtual void preRegrid(const int a_lmin, const int a_oldFinestLevel) override
Perform pre-regrid operations.
Definition CD_DischargeInceptionStepperImplem.H:1841
virtual void printStepReport() override
Print a step report. Used in transient simulations.
Definition CD_DischargeInceptionStepperImplem.H:1788
virtual void setRho(const std::function< Real(const RealVect &x)> &a_rho) noexcept
Set space charge distribution.
Definition CD_DischargeInceptionStepperImplem.H:1949
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:1116
void parseVerbosity() noexcept
Parse class verbosity.
Definition CD_DischargeInceptionStepperImplem.H:402
bool m_evaluateTownsend
Evaluate secondary emission.
Definition CD_DischargeInceptionStepper.H:815
Real m_minDt
Minimum permitted time step.
Definition CD_DischargeInceptionStepper.H:750
bool m_plotBackgroundIonization
If true, plot the background ionization rates.
Definition CD_DischargeInceptionStepper.H:860
void registerRealms() override
Register realms. Primal is the only realm we need.
Definition CD_DischargeInceptionStepperImplem.H:346
Real m_inceptionK
Inception criteria (read from input)
Definition CD_DischargeInceptionStepper.H:800
virtual void computeBackgroundIonizationStationary() noexcept
Compute the background ionization rate for all voltages.
Definition CD_DischargeInceptionStepperImplem.H:3682
virtual void computeInceptionIntegralTransient(const Real &a_voltage) noexcept
Solve streamer inception integral.
Definition CD_DischargeInceptionStepperImplem.H:2565
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:1937
virtual void computeCriticalAreaStationary() noexcept
Compute the critical area of the K values for each voltage.
Definition CD_DischargeInceptionStepperImplem.H:4587
std::vector< Real > m_RdotPlus
Rate of appearance of first electron (in critical volume)
Definition CD_DischargeInceptionStepper.H:670
virtual void advanceIons(const Real a_dt) noexcept
Advance negative ions.
Definition CD_DischargeInceptionStepperImplem.H:1684
std::vector< std::pair< Real, Real > > m_inceptionProbability
Cumulative probability of breakdown by time t.
Definition CD_DischargeInceptionStepper.H:695
bool particleInsideEB(const RealVect a_pos) const noexcept
Check if particle is inside electrode.
Definition CD_DischargeInceptionStepperImplem.H:5105
std::vector< std::pair< Real, Real > > m_maxT
Max Townsend value for every time step.
Definition CD_DischargeInceptionStepper.H:634
virtual Real computeRdot(const Real &a_voltage) const noexcept
Compute integral_Vcr(dne/dt * (1 - eta/alpha) dV)
Definition CD_DischargeInceptionStepperImplem.H:3518
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:2074
std::vector< std::tuple< Real, Real, RealVect > > m_TMinuValues
Max T value for every voltage.
Definition CD_DischargeInceptionStepper.H:622
std::vector< Real > m_criticalVolumeMinu
Critical volumes of K values for each voltage.
Definition CD_DischargeInceptionStepper.H:646
Real m_maxDtGrowth
Maximum permitted time step growth.
Definition CD_DischargeInceptionStepper.H:760
Base class for advancing equations.
Definition CD_TimeStepper.H:30
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:37
Name containing various physics models for running chombo-discharge code.
Definition CD_AdvectionDiffusion.H:15
phase names
Definition CD_MultiFluidIndexSpace.H:27