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>
23#include <CD_TracerParticle.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 {
31 namespace DischargeInception {
32
37 {
38 Euler,
40 };
41
46 {
47 Euler,
48 Heun,
49 ImExCTU
50 };
51
55 enum class Mode
56 {
59 };
60
65 {
66 Unknown,
67 CDR,
71 };
72
92 template <typename P = TracerParticle<2, 3>, typename F = FieldSolverGMG, typename C = CdrCTU>
94 {
95 public:
100
105
110
115
121
127
131 void
132 setupSolvers() override;
133
137 void
138 allocate() override;
139
143 void
144 initialData() override;
145
149 void
150 postInitialize() override;
151
156 void
158 {}
159
163 void
164 registerRealms() override;
165
170 void
171 registerOperators() override;
172
176 void
177 parseOptions();
178
182 void
183 parseRuntimeOptions() override;
184
185#ifdef CH_USE_HDF5
192 virtual void
193 writeCheckpointData(HDF5Handle& a_handle, const int a_lvl) const override;
194#endif
195
196#ifdef CH_USE_HDF5
203 virtual void
204 readCheckpointData(HDF5Handle& a_handle, const int a_lvl) override;
205#endif
206
212 virtual int
213 getNumberOfPlotVariables() const override;
214
219 virtual Vector<std::string>
220 getPlotVariableNames() const override;
221
229 virtual void
230 writePlotData(LevelData<EBCellFAB>& a_output,
231 int& a_icomp,
232 const std::string& a_outputRealm,
233 const int a_level) const override;
234
239 virtual Vector<std::string>
240 getStationaryPlotVariableNames() const noexcept;
241
246 virtual Vector<std::string>
247 getTransientPlotVariableNames() const noexcept;
248
253 virtual Real
254 computeDt() override;
255
261 virtual Real
262 advance(const Real a_dt) override;
263
268 virtual void
269 advanceIons(const Real a_dt) noexcept;
270
277 virtual void
278 synchronizeSolverTimes(const int a_step, const Real a_time, const Real a_dt) override;
279
283 virtual void
284 printStepReport() override;
285
291 virtual void
292 preRegrid(const int a_lmin, const int a_oldFinestLevel) override;
293
300 virtual void
301 regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override;
302
307 virtual void
308 postRegrid() override;
309
314 virtual void
315 setVoltageCurve(const std::function<Real(const Real& a_time)>& a_voltageCurve) noexcept;
316
321 virtual void
322 setRho(const std::function<Real(const RealVect& x)>& a_rho) noexcept;
323
328 virtual void
329 setSigma(const std::function<Real(const RealVect& x)>& a_sigma) noexcept;
330
335 virtual void
336 setIonDensity(const std::function<Real(const RealVect x)>& a_density) noexcept;
337
342 virtual void
343 setIonMobility(const std::function<Real(const Real E)>& a_mobility) noexcept;
344
349 virtual void
350 setIonDiffusion(const std::function<Real(const Real E)>& a_diffCo) noexcept;
351
356 virtual void
357 setAlpha(const std::function<Real(const Real& E, const RealVect& x)>& a_alpha) noexcept;
358
363 virtual void
364 setEta(const std::function<Real(const Real& E, const RealVect& x)>& a_eta) noexcept;
365
370 virtual const std::function<Real(const Real& E, const RealVect& x)>&
371 getAlpha() const noexcept;
372
377 virtual const std::function<Real(const Real& E, const RealVect& x)>&
378 getEta() const noexcept;
379
384 virtual void
385 setBackgroundRate(const std::function<Real(const Real& E, const RealVect& x)>& a_backgroundRate) noexcept;
386
392 virtual void
393 setDetachmentRate(const std::function<Real(const Real& E, const RealVect& x)>& a_detachmentRate) noexcept;
394
399 virtual void
400 setFieldEmission(const std::function<Real(const Real& E, const RealVect& x)>& a_currentDensity) noexcept;
401
406 virtual void
407 setSecondaryEmission(const std::function<Real(const Real& E, const RealVect& x)>& a_coeff) noexcept;
408
413 virtual Mode
414 getMode() const noexcept;
415
420 virtual const EBAMRCellData*
421 getElectricField() const noexcept;
422
423 protected:
428
433
438
443
448
453
457 RefCountedPtr<CdrSolver> m_ionSolver;
458
462 mutable MFAMRCellData m_potential;
463
467 MFAMRCellData m_potentialHomo;
468
472 MFAMRCellData m_potentialInho;
473
477 MFAMRCellData m_scratchHomo;
478
482 MFAMRCellData m_scratchInho;
483
487 mutable MFAMRCellData m_electricField;
488
492 MFAMRCellData m_electricFieldHomo;
493
497 MFAMRCellData m_electricFieldInho;
498
503
508 EBAMRCellData m_inceptionIntegral;
509
514 Vector<EBAMRCellData> m_inceptionIntegralPlus;
515
520 Vector<EBAMRCellData> m_inceptionIntegralMinu;
521
526 Vector<EBAMRCellData> m_backgroundIonizationStationary;
527
532 Vector<EBAMRCellData> m_detachmentStationary;
533
538 Vector<EBAMRCellData> m_emissionRatesPlus;
539
544 Vector<EBAMRCellData> m_emissionRatesMinu;
545
550 Vector<EBAMRCellData> m_townsendCriterionPlus;
551
556 Vector<EBAMRCellData> m_townsendCriterionMinu;
557
562 EBAMRCellData m_emissionRate;
563
569
575
581
587
593
599
604 EBAMRCellData m_townsendCriterion;
605
610 EBAMRCellData m_detachment;
611
617
621 EBAMRCellData m_gradAlpha;
622
627 std::vector<std::tuple<Real, Real, RealVect>> m_KPlusValues;
628
633 std::vector<std::tuple<Real, Real, RealVect>> m_KMinuValues;
634
639 std::vector<std::tuple<Real, Real, RealVect>> m_TPlusValues;
640
645 std::vector<std::tuple<Real, Real, RealVect>> m_TMinuValues;
646
651 std::vector<std::pair<Real, Real>> m_maxK;
652
657 std::vector<std::pair<Real, Real>> m_maxT;
658
663 std::vector<Real> m_criticalVolumePlus;
664
669 std::vector<Real> m_criticalVolumeMinu;
670
675 std::vector<Real> m_criticalAreaPlus;
676
681 std::vector<Real> m_criticalAreaMinu;
682
687 std::vector<Real> m_ionizationVolume;
688
693 std::vector<Real> m_RdotPlus;
694
699 std::vector<Real> m_RdotMinu;
700
705 std::vector<Real> m_voltageSweeps;
706
712 std::vector<std::pair<Real, Real>> m_Rdot;
713
718 std::vector<std::pair<Real, Real>> m_inceptionProbability;
719
724 std::vector<std::pair<Real, Real>> m_criticalVolume;
725
730 std::vector<std::pair<Real, Real>> m_criticalArea;
731
736 std::vector<std::pair<Real, Real>> m_ionizationVolumeTransient;
737
743
749
754
758 Real m_cfl;
759
764
769
774
779
784
789
794
799
804
809
814
819
824
829
834
839
844
849
854
859
864
869
874
879
884
889
894
899
904
909
913 std::function<Real(const Real a_time)> m_voltageCurve;
914
918 std::string m_realm;
919
923 std::string m_dataOutputFile;
924
928 std::string m_outputFile;
929
933 phase::which_phase m_phase;
934
938 std::function<Real(const RealVect& x)> m_rho;
939
943 std::function<Real(const RealVect& x)> m_sigma;
944
948 std::function<Real(const RealVect& x)> m_initialIonDensity;
949
953 std::function<Real(const Real& E)> m_ionMobility;
954
958 std::function<Real(const Real& E)> m_ionDiffusion;
959
963 std::function<Real(const Real& E, const RealVect& x)> m_alpha;
964
968 std::function<Real(const Real& E, const RealVect& x)> m_eta;
969
973 std::function<Real(const Real& E, const RealVect& x)> m_detachmentRate;
974
978 std::function<Real(const Real& E, const RealVect& x)> m_backgroundRate;
979
983 std::function<Real(const Real& E, const RealVect& x)> m_fieldEmission;
984
988 std::function<Real(const Real& E, const RealVect& x)> m_secondaryEmission;
989
993 virtual void
994 seedUniformParticles() noexcept;
995
1001 virtual void
1002 seedIonizationParticles(const Real a_voltage) noexcept;
1003
1009 virtual void
1010 computeInceptionIntegral(EBAMRCellData& a_inceptionIntegral, const Real a_voltage) noexcept;
1011
1017 virtual void
1019
1026 virtual void
1027 computeInceptionIntegralTransient(const Real& a_voltage) noexcept;
1028
1033 virtual void
1034 inceptionIntegrateEuler(const Real& a_voltage) noexcept;
1035
1040 virtual void
1041 inceptionIntegrateTrapezoidal(const Real& a_voltage) noexcept;
1042
1046 virtual void
1048
1054 virtual void
1056
1062 virtual void
1063 computeTownsendCriterionTransient(const Real& a_voltage) noexcept;
1064
1069 virtual void
1070 townsendTrackEuler(const Real& a_voltage) noexcept;
1071
1076 virtual void
1077 townsendTrackTrapezoidal(const Real& a_voltage) noexcept;
1078
1084 virtual Real
1085 computeRdot(const Real& a_voltage) const noexcept;
1086
1090 virtual void
1091 rewindTracerParticles() noexcept;
1092
1096 virtual void
1097 resetTracerParticles() noexcept;
1098
1103 virtual void
1109 virtual void
1110 computeDetachmentStationary() noexcept;
1111
1116 virtual void
1118
1125 virtual void
1126 computeFieldEmission(EBAMRCellData& a_emissionRate, const Real& a_voltage) const noexcept;
1127
1135 virtual void
1136 evaluateFunction(EBAMRCellData& a_data,
1137 const Real& a_voltage,
1138 const std::function<Real(const Real E, const RealVect x)>& a_func) const noexcept;
1139
1148 virtual void
1149 evaluateFunction(LevelData<EBCellFAB>& a_data,
1150 const Real& a_voltage,
1151 const std::function<Real(const Real E, const RealVect x)>& a_func,
1152 const int a_level) const noexcept;
1153
1158 virtual void
1160
1166 virtual std::pair<Real, RealVect>
1167 computeMinimumInceptionVoltage(const EBAMRCellData& a_Uinc) const noexcept;
1168
1173 virtual void
1175
1181 virtual Real
1182 computeCriticalVolumeTransient() const noexcept;
1183
1188 virtual void
1190
1196 virtual Real
1197 computeCriticalAreaTransient() const noexcept;
1198
1203 virtual void
1205
1212 virtual Real
1213 computeIonizationVolumeTransient(const Real& a_voltage) const noexcept;
1214
1219 virtual void
1220 writeReportStationary() const noexcept;
1221
1226 virtual void
1227 writeReportTransient() const noexcept;
1228
1236 virtual void
1237 writePlotDataStationary(LevelData<EBCellFAB>& a_output,
1238 int& a_icomp,
1239 const std::string& a_outputRealm,
1240 const int a_level) const noexcept;
1241
1249 virtual void
1250 writePlotDataTransient(LevelData<EBCellFAB>& a_output,
1251 int& a_icomp,
1252 const std::string& a_outputRealm,
1253 const int a_level) const noexcept;
1254
1262 inline bool
1263 particleOutsideGrid(const RealVect& a_pos, const RealVect& a_probLo, const RealVect& a_probHi) const noexcept;
1264
1270 inline bool
1271 particleInsideEB(const RealVect& a_pos) const noexcept;
1272
1277 inline void
1278 computeIonVelocity(const Real& a_voltage) noexcept;
1279
1284 inline void
1285 computeIonDiffusion(const Real& a_voltage) noexcept;
1286
1290 inline void
1291 parseMode() noexcept;
1292
1296 inline void
1297 parseVoltages() noexcept;
1298
1302 inline void
1303 parseOutput() noexcept;
1304
1308 inline void
1309 parseVerbosity() noexcept;
1310
1314 inline void
1315 parseInceptionAlgorithm() noexcept;
1316
1320 inline void
1321 parseTransportAlgorithm() noexcept;
1322
1326 inline void
1327 parsePlotVariables() noexcept;
1328
1332 inline void
1333 solvePoisson() noexcept;
1334
1342 inline void
1343 superposition(EBAMRCellData& a_sumField,
1344 const MFAMRCellData& a_inhomogeneousField,
1345 const MFAMRCellData& a_homogeneousField,
1346 const Real a_voltage) const noexcept;
1347
1353 inline void
1354 superposition(EBAMRCellData& a_sumField, const Real a_voltage) const noexcept;
1355
1366 virtual void
1367 writeData(LevelData<EBCellFAB>& a_output,
1368 int& a_comp,
1369 const EBAMRCellData& a_data,
1370 const std::string a_outputRealm,
1371 const int a_level,
1372 const bool a_interpToCentroids,
1373 const bool a_interpGhost) const noexcept;
1374
1381 virtual void
1382 getMaxValueAndLocation(Real& a_maxVal, RealVect& a_maxPos, const EBAMRCellData& a_data) const noexcept;
1383
1388 virtual Real
1389 getCriticalField() const noexcept;
1390 };
1391 } // namespace DischargeInception
1392} // namespace Physics
1393
1394#include <CD_NamespaceFooter.H>
1395
1397
1398#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
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.
Declaration of a tracer particle class.
Base class for solving convection-diffusion-reaction equations.
Definition CD_CdrSolver.H:35
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:94
virtual const std::function< Real(const Real &E, const RealVect &x)> & getAlpha() const noexcept
Get ionization coefficient.
Definition CD_DischargeInceptionStepperImplem.H:2063
void parseRuntimeOptions() override
Parse runtime options.
Definition CD_DischargeInceptionStepperImplem.H:388
Vector< EBAMRCellData > m_townsendCriterionPlus
Townsend criterion for starting positive ions.
Definition CD_DischargeInceptionStepper.H:550
RefCountedPtr< FieldSolver > m_fieldSolver
Field solver.
Definition CD_DischargeInceptionStepper.H:452
std::function< Real(const Real &E, const RealVect &x)> m_secondaryEmission
Secondary emission coefficient.
Definition CD_DischargeInceptionStepper.H:988
TimeStepRestriction m_timeStepRestriction
Time step restriction.
Definition CD_DischargeInceptionStepper.H:442
virtual const EBAMRCellData * getElectricField() const noexcept
Get the electric field.
Definition CD_DischargeInceptionStepperImplem.H:5473
RefCountedPtr< TracerParticleSolver< P > > m_tracerParticleSolver
Tracer particle solver.
Definition CD_DischargeInceptionStepper.H:447
void parseMode() noexcept
Parse simulation mode.
Definition CD_DischargeInceptionStepperImplem.H:418
EBAMRCellData m_townsendInceptionVoltageMinu
Computed Townsend inception voltage.
Definition CD_DischargeInceptionStepper.H:598
EBAMRCellData m_detachment
Detachment factor.
Definition CD_DischargeInceptionStepper.H:610
void computeIonVelocity(const Real &a_voltage) noexcept
Set the negative ion velocity. Note.
Definition CD_DischargeInceptionStepperImplem.H:5167
std::vector< std::tuple< Real, Real, RealVect > > m_TPlusValues
Max T value for every voltage.
Definition CD_DischargeInceptionStepper.H:639
virtual void setIonMobility(const std::function< Real(const Real E)> &a_mobility) noexcept
Set the negative ion mobility (field-dependent)
Definition CD_DischargeInceptionStepperImplem.H:2014
bool m_plotPoisson
Plot Poisson solver or not.
Definition CD_DischargeInceptionStepper.H:858
bool m_plotTownsend
Plot the Townsend-criterion for initiatory ions.
Definition CD_DischargeInceptionStepper.H:908
std::function< Real(const RealVect &x)> m_sigma
Surface charge distribution.
Definition CD_DischargeInceptionStepper.H:943
Real m_gradAlphaDx
Space step size relative to alpha/|grad(alpha)|.
Definition CD_DischargeInceptionStepper.H:818
MFAMRCellData m_potentialInho
Electric potential with charges.
Definition CD_DischargeInceptionStepper.H:472
virtual void writeReportStationary() const noexcept
Print report to the terminal.
Definition CD_DischargeInceptionStepperImplem.H:4936
MFAMRCellData m_electricField
Electric field.
Definition CD_DischargeInceptionStepper.H:487
virtual Real advance(const Real a_dt) override
Advancement method. Swaps between various kernels.
Definition CD_DischargeInceptionStepperImplem.H:1601
std::vector< std::pair< Real, Real > > m_criticalArea
Critical area at various time instances.
Definition CD_DischargeInceptionStepper.H:730
Vector< EBAMRCellData > m_inceptionIntegralPlus
Inception integral values.
Definition CD_DischargeInceptionStepper.H:514
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:3372
virtual void seedUniformParticles() noexcept
Distribute particles in every grid cell.
Definition CD_DischargeInceptionStepperImplem.H:2136
virtual void resetTracerParticles() noexcept
Reset particles.
Definition CD_DischargeInceptionStepperImplem.H:3696
virtual void setIonDensity(const std::function< Real(const RealVect x)> &a_density) noexcept
Set the negative ion density.
Definition CD_DischargeInceptionStepperImplem.H:2002
virtual void computeCriticalVolumeStationary() noexcept
Compute the critical volume of the K values for each voltage.
Definition CD_DischargeInceptionStepperImplem.H:4478
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:1117
virtual void postRegrid() override
Perform post-regrid operations.
Definition CD_DischargeInceptionStepperImplem.H:1953
std::function< Real(const Real &E)> m_ionMobility
Negative ion mobility.
Definition CD_DischargeInceptionStepper.H:953
virtual void inceptionIntegrateTrapezoidal(const Real &a_voltage) noexcept
K integral: Add integration parts after particles move.
Definition CD_DischargeInceptionStepperImplem.H:2812
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:2077
EBAMRCellData m_gradAlpha
Calculated version of alpha/(|grad(alpha)|) on the mesh.
Definition CD_DischargeInceptionStepper.H:621
Real m_maxKLimit
Maximum K-value that is calculated in stationary mode.
Definition CD_DischargeInceptionStepper.H:753
std::function< Real(const Real &E, const RealVect &x)> m_eta
Attachment coefficient.
Definition CD_DischargeInceptionStepper.H:968
void computeIonDiffusion(const Real &a_voltage) noexcept
Set the negative ion diffusion coefficient.
Definition CD_DischargeInceptionStepperImplem.H:5233
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:4403
Real m_alphaDx
Space step size relative to 1/alpha.
Definition CD_DischargeInceptionStepper.H:808
virtual void computeTownsendCriterionStationary() noexcept
Solve for the Townsend criterion for each particle in each voltage.
Definition CD_DischargeInceptionStepperImplem.H:3069
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:1799
virtual void inceptionIntegrateEuler(const Real &a_voltage) noexcept
Integrate the inception integral using the Euler rule.
Definition CD_DischargeInceptionStepperImplem.H:2640
std::function< Real(const RealVect &x)> m_rho
Space charge distribution.
Definition CD_DischargeInceptionStepper.H:938
std::vector< Real > m_ionizationVolume
Ionization volumes for each voltage.
Definition CD_DischargeInceptionStepper.H:687
std::function< Real(const RealVect &x)> m_initialIonDensity
Negative ion density.
Definition CD_DischargeInceptionStepper.H:948
virtual void computeInceptionVoltageVolume() noexcept
Interpolate between K values to find voltage giving K_inception and store values in m_inceptionVoltag...
Definition CD_DischargeInceptionStepperImplem.H:4142
Real m_epsVoltage
Permitted relative deviation in V(t) when computing voltage-curve based time steps.
Definition CD_DischargeInceptionStepper.H:778
EBAMRCellData m_homogeneousFieldGas
Gas-phase homogeneous field.
Definition CD_DischargeInceptionStepper.H:502
bool m_fullIntegration
Use full reconstruction of critical volume or not.
Definition CD_DischargeInceptionStepper.H:843
std::vector< std::pair< Real, Real > > m_maxK
Max K value for every time step.
Definition CD_DischargeInceptionStepper.H:651
std::string m_realm
Realm where the solver lives.
Definition CD_DischargeInceptionStepper.H:918
virtual Real computeIonizationVolumeTransient(const Real &a_voltage) const noexcept
Compute the ionization volume for each voltage.
Definition CD_DischargeInceptionStepperImplem.H:4854
virtual void computeFieldEmission(EBAMRCellData &a_emissionRate, const Real &a_voltage) const noexcept
Compute field emission rates.
Definition CD_DischargeInceptionStepperImplem.H:3996
std::vector< Real > m_criticalAreaPlus
Critical area of K values for each voltage.
Definition CD_DischargeInceptionStepper.H:675
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:671
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:4569
DischargeInceptionStepper & operator=(const DischargeInceptionStepper &&)=delete
Disallowed assignment.
Real m_maxPhysDx
Maximum spatial step (physical dimensions)
Definition CD_DischargeInceptionStepper.H:793
void registerOperators() override
Register operators.
Definition CD_DischargeInceptionStepperImplem.H:359
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:5343
EBAMRCellData m_townsendInceptionVoltagePlus
Computed Townsend inception voltage.
Definition CD_DischargeInceptionStepper.H:592
Vector< EBAMRCellData > m_inceptionIntegralMinu
Inception integral values.
Definition CD_DischargeInceptionStepper.H:520
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:4055
std::vector< Real > m_voltageSweeps
Voltage sweeps.
Definition CD_DischargeInceptionStepper.H:705
MFAMRCellData m_scratchInho
Scratch storage used during regrids.
Definition CD_DischargeInceptionStepper.H:482
bool m_profile
Profile calculation or not.
Definition CD_DischargeInceptionStepper.H:828
std::function< Real(const Real &E)> m_ionDiffusion
Negative ion diffusion coefficient.
Definition CD_DischargeInceptionStepper.H:958
Real m_relativeDeltaU
Maximum relative voltage increase.
Definition CD_DischargeInceptionStepper.H:742
std::function< Real(const Real &E, const RealVect &x)> m_fieldEmission
Field emission current.
Definition CD_DischargeInceptionStepper.H:983
TransportAlgorithm m_transportAlgorithm
Transport algorithm for advancing negative ions in the transient mode.
Definition CD_DischargeInceptionStepper.H:437
void allocate() override
Allocate storage for solvers and time stepper.
Definition CD_DischargeInceptionStepperImplem.H:172
Real m_minPhysDx
Minimum spatial step (physical dimensions)
Definition CD_DischargeInceptionStepper.H:788
Vector< EBAMRCellData > m_detachmentStationary
Detachment rates.
Definition CD_DischargeInceptionStepper.H:532
EBAMRCellData m_emissionRate
Field emission rates.
Definition CD_DischargeInceptionStepper.H:562
virtual Vector< std::string > getTransientPlotVariableNames() const noexcept
Get plot variable names for transient mode.
Definition CD_DischargeInceptionStepperImplem.H:1009
virtual Mode getMode() const noexcept
Get the solver mode.
Definition CD_DischargeInceptionStepperImplem.H:2129
void parseInceptionAlgorithm() noexcept
Parse the inception algorithm.
Definition CD_DischargeInceptionStepperImplem.H:477
virtual ~DischargeInceptionStepper()
Destructor.
Definition CD_DischargeInceptionStepperImplem.H:112
Real m_firstDt
First time step.
Definition CD_DischargeInceptionStepper.H:763
void postCheckpointSetup() override
Post checkpoint operations.
Definition CD_DischargeInceptionStepper.H:157
bool m_plotInceptionIntegral
If true, plot the K-values.
Definition CD_DischargeInceptionStepper.H:873
void solvePoisson() noexcept
Solve the Poisson equation.
Definition CD_DischargeInceptionStepperImplem.H:250
virtual void setAlpha(const std::function< Real(const Real &E, const RealVect &x)> &a_alpha) noexcept
Set the ionization coefficient.
Definition CD_DischargeInceptionStepperImplem.H:2038
EBAMRCellData m_inceptionVoltageMinu
Computed inception voltage.
Definition CD_DischargeInceptionStepper.H:574
Vector< EBAMRCellData > m_emissionRatesPlus
Field emission rates.
Definition CD_DischargeInceptionStepper.H:538
MFAMRCellData m_potential
Electric potential.
Definition CD_DischargeInceptionStepper.H:462
bool m_plotDetachment
If true, plot electron detachment rate, i.e. done/dt due to detachment from negative ions.
Definition CD_DischargeInceptionStepper.H:888
Real m_minGridDx
Minimum spatial step (relative to grid resolution)
Definition CD_DischargeInceptionStepper.H:798
virtual void computeInceptionIntegral(EBAMRCellData &a_inceptionIntegral, const Real a_voltage) noexcept
Compute the inception integral for the input voltage.
Definition CD_DischargeInceptionStepperImplem.H:2446
Mode m_mode
Mode.
Definition CD_DischargeInceptionStepper.H:427
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override
Time stepper regrid method.
Definition CD_DischargeInceptionStepperImplem.H:1890
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:492
bool m_plotTracer
Plot tracer particle solver or not.
Definition CD_DischargeInceptionStepper.H:863
Real m_deltaK
Maximum targeted increase in K-value.
Definition CD_DischargeInceptionStepper.H:748
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:5127
virtual void writeReportTransient() const noexcept
Print report to the terminal.
Definition CD_DischargeInceptionStepperImplem.H:5047
virtual void rewindTracerParticles() noexcept
Move particles back to their original position.
Definition CD_DischargeInceptionStepperImplem.H:3664
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:3259
std::vector< Real > m_RdotMinu
Rate of appearance of first electron (in critical volume)
Definition CD_DischargeInceptionStepper.H:699
EBAMRCellData m_streamerInceptionVoltageMinu
Computed streamer inception voltage.
Definition CD_DischargeInceptionStepper.H:586
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:5313
std::vector< std::pair< Real, Real > > m_Rdot
Integral factor for cumulative integration.
Definition CD_DischargeInceptionStepper.H:712
void parseOptions()
Parse options.
Definition CD_DischargeInceptionStepperImplem.H:373
std::vector< std::pair< Real, Real > > m_ionizationVolumeTransient
Ionization volume at various time instances.
Definition CD_DischargeInceptionStepper.H:736
void setupSolvers() override
Instantiate the tracer particle solver.
Definition CD_DischargeInceptionStepperImplem.H:122
std::vector< Real > m_criticalVolumePlus
Critical volumes of K values for each voltage.
Definition CD_DischargeInceptionStepper.H:663
MFAMRCellData m_scratchHomo
Scratch storage used during regrids.
Definition CD_DischargeInceptionStepper.H:477
virtual void setEta(const std::function< Real(const Real &E, const RealVect &x)> &a_eta) noexcept
Set the attachment coefficient.
Definition CD_DischargeInceptionStepperImplem.H:2051
Vector< EBAMRCellData > m_backgroundIonizationStationary
Background ionization rates.
Definition CD_DischargeInceptionStepper.H:526
bool m_plotFieldEmission
If true, plot the field emission.
Definition CD_DischargeInceptionStepper.H:893
IntegrationAlgorithm m_inceptionAlgorithm
Integration algorithm for K-value.
Definition CD_DischargeInceptionStepper.H:432
std::function< Real(const Real &E, const RealVect &x)> m_backgroundRate
Background ionization rate expression.
Definition CD_DischargeInceptionStepper.H:978
EBAMRCellData m_streamerInceptionVoltagePlus
Computed streamer inception voltage.
Definition CD_DischargeInceptionStepper.H:580
virtual Vector< std::string > getStationaryPlotVariableNames() const noexcept
Get plot variable names for stationary mode.
Definition CD_DischargeInceptionStepperImplem.H:864
bool m_plotInceptionVoltage
If true, plot the inception voltage.
Definition CD_DischargeInceptionStepper.H:878
std::string m_outputFile
File name prefix for HDF5 plot output.
Definition CD_DischargeInceptionStepper.H:928
EBAMRCellData m_inceptionVoltagePlus
Computed inception voltage.
Definition CD_DischargeInceptionStepper.H:568
std::function< Real(const Real &E, const RealVect &x)> m_detachmentRate
Detachment probability for negative ion.
Definition CD_DischargeInceptionStepper.H:973
Real m_townsendGridDx
Space step size used for ion tracking.
Definition CD_DischargeInceptionStepper.H:813
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:2090
virtual void computeTownsendCriterionTransient(const Real &a_voltage) noexcept
Solve for the Townsend criterion for each particle in each voltage.
Definition CD_DischargeInceptionStepperImplem.H:3203
virtual void computeIonizationVolumeStationary() noexcept
Compute the ionization volume for each voltage.
Definition CD_DischargeInceptionStepperImplem.H:4756
std::function< Real(const Real a_time)> m_voltageCurve
Time-dependent voltage.
Definition CD_DischargeInceptionStepper.H:913
Vector< EBAMRCellData > m_townsendCriterionMinu
Townsend criterion for starting negative ions (electrons arriving at anode).
Definition CD_DischargeInceptionStepper.H:556
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:1331
phase::which_phase m_phase
Phase (gas/solid) where the solver lives.
Definition CD_DischargeInceptionStepper.H:933
virtual void computeFieldEmissionStationary() noexcept
Compute field emission rates.
Definition CD_DischargeInceptionStepperImplem.H:3896
std::string m_dataOutputFile
File name for the tabular data output (inception voltages, K-values, etc.).
Definition CD_DischargeInceptionStepper.H:923
void parseOutput() noexcept
Parse output settings.
Definition CD_DischargeInceptionStepperImplem.H:463
std::function< Real(const Real &E, const RealVect &x)> m_alpha
Ionization coefficient.
Definition CD_DischargeInceptionStepper.H:963
MFAMRCellData m_potentialHomo
Electric potential without charges.
Definition CD_DischargeInceptionStepper.H:467
EBAMRCellData m_inceptionIntegral
Inception integral values.
Definition CD_DischargeInceptionStepper.H:508
bool m_plotEta
If true, plot eta.
Definition CD_DischargeInceptionStepper.H:903
Vector< EBAMRCellData > m_emissionRatesMinu
Field emission rates.
Definition CD_DischargeInceptionStepper.H:544
bool m_debug
Debug or not.
Definition CD_DischargeInceptionStepper.H:833
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:2501
virtual Real computeCriticalAreaTransient() const noexcept
Compute the critical area of the K values for each voltage.
Definition CD_DischargeInceptionStepperImplem.H:4705
Real m_maxGridDx
Maximum spatial step (relative to grid resolution)
Definition CD_DischargeInceptionStepper.H:803
virtual Real getCriticalField() const noexcept
Get the breakdown field.
Definition CD_DischargeInceptionStepperImplem.H:5482
virtual Vector< std::string > getPlotVariableNames() const override
Get plot variable names.
Definition CD_DischargeInceptionStepperImplem.H:808
Real m_maxDt
Maximum permitted time step.
Definition CD_DischargeInceptionStepper.H:768
virtual void computeDetachmentStationary() noexcept
Compute the detachment ionization rate for all voltages.
Definition CD_DischargeInceptionStepperImplem.H:3808
bool m_plotField
Plot field.
Definition CD_DischargeInceptionStepper.H:853
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:5415
void parseVoltages() noexcept
Parse voltage levels.
Definition CD_DischargeInceptionStepperImplem.H:443
EBAMRCellData m_backgroundIonization
Background ionization.
Definition CD_DischargeInceptionStepper.H:616
virtual void interpolateGradAlphaToParticles() noexcept
Interpolate alpha/|grad(alpha)| onto some scratch particle storage.
Definition CD_DischargeInceptionStepperImplem.H:2428
std::vector< std::tuple< Real, Real, RealVect > > m_KPlusValues
Max K value for every voltage.
Definition CD_DischargeInceptionStepper.H:627
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:1074
std::vector< std::tuple< Real, Real, RealVect > > m_KMinuValues
Max K value for every voltage.
Definition CD_DischargeInceptionStepper.H:633
bool m_plotAlpha
If true, plot alpha.
Definition CD_DischargeInceptionStepper.H:898
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:2026
void postInitialize() override
Perform any post-initialization steps.
Definition CD_DischargeInceptionStepperImplem.H:2346
bool particleInsideEB(const RealVect &a_pos) const noexcept
Check if particle is inside electrode.
Definition CD_DischargeInceptionStepperImplem.H:5151
virtual void setSigma(const std::function< Real(const RealVect &x)> &a_sigma) noexcept
Set surface charge distribution.
Definition CD_DischargeInceptionStepperImplem.H:1990
EBAMRCellData m_townsendCriterion
Townsend criterion.
Definition CD_DischargeInceptionStepper.H:604
void parseTransportAlgorithm() noexcept
Parse the transport algorithm.
Definition CD_DischargeInceptionStepperImplem.H:534
bool m_ionTransport
Ion transport on/off.
Definition CD_DischargeInceptionStepper.H:848
virtual void seedIonizationParticles(const Real a_voltage) noexcept
Add particles to every cell where alpha - eta > 0.0.
Definition CD_DischargeInceptionStepperImplem.H:2214
DischargeInceptionStepper()
Default constructor.
Definition CD_DischargeInceptionStepperImplem.H:38
bool m_plotNegativeIons
Plot negative ions or not.
Definition CD_DischargeInceptionStepper.H:868
MFAMRCellData m_electricFieldInho
Electric field with space/surface charge and V = 0 on all electrodes.
Definition CD_DischargeInceptionStepper.H:497
Real m_cfl
CFL-step for negative ions.
Definition CD_DischargeInceptionStepper.H:758
std::vector< Real > m_criticalAreaMinu
Critical area of K values for each voltage.
Definition CD_DischargeInceptionStepper.H:681
void parsePlotVariables() noexcept
Parse plot variables.
Definition CD_DischargeInceptionStepperImplem.H:574
void initialData() override
Fill problem with initial data.
Definition CD_DischargeInceptionStepperImplem.H:238
virtual const std::function< Real(const Real &E, const RealVect &x)> & getEta() const noexcept
Get attachment coefficient.
Definition CD_DischargeInceptionStepperImplem.H:2070
RefCountedPtr< CdrSolver > m_ionSolver
Negative ion solver.
Definition CD_DischargeInceptionStepper.H:457
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:2116
virtual Real computeDt() override
Compute a time step to be used by Driver.
Definition CD_DischargeInceptionStepperImplem.H:1514
std::vector< std::pair< Real, Real > > m_criticalVolume
Critical volume at various time instances.
Definition CD_DischargeInceptionStepper.H:724
virtual void preRegrid(const int a_lmin, const int a_oldFinestLevel) override
Perform pre-regrid operations.
Definition CD_DischargeInceptionStepperImplem.H:1870
virtual void printStepReport() override
Print a step report. Used in transient simulations.
Definition CD_DischargeInceptionStepperImplem.H:1817
virtual void setRho(const std::function< Real(const RealVect &x)> &a_rho) noexcept
Set space charge distribution.
Definition CD_DischargeInceptionStepperImplem.H:1978
void parseVerbosity() noexcept
Parse class verbosity.
Definition CD_DischargeInceptionStepperImplem.H:403
bool m_evaluateTownsend
Evaluate secondary emission.
Definition CD_DischargeInceptionStepper.H:838
Real m_minDt
Minimum permitted time step.
Definition CD_DischargeInceptionStepper.H:773
bool m_plotBackgroundIonization
If true, plot the background ionization rates.
Definition CD_DischargeInceptionStepper.H:883
void registerRealms() override
Register realms. Primal is the only realm we need.
Definition CD_DischargeInceptionStepperImplem.H:347
Real m_inceptionK
Inception criteria (read from input)
Definition CD_DischargeInceptionStepper.H:823
virtual void computeBackgroundIonizationStationary() noexcept
Compute the background ionization rate for all voltages.
Definition CD_DischargeInceptionStepperImplem.H:3726
virtual void computeInceptionIntegralTransient(const Real &a_voltage) noexcept
Solve streamer inception integral.
Definition CD_DischargeInceptionStepperImplem.H:2605
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:1966
virtual void computeCriticalAreaStationary() noexcept
Compute the critical area of the K values for each voltage.
Definition CD_DischargeInceptionStepperImplem.H:4633
std::vector< Real > m_RdotPlus
Rate of appearance of first electron (in critical volume)
Definition CD_DischargeInceptionStepper.H:693
virtual void advanceIons(const Real a_dt) noexcept
Advance negative ions.
Definition CD_DischargeInceptionStepperImplem.H:1713
std::vector< std::pair< Real, Real > > m_inceptionProbability
Cumulative probability of breakdown by time t.
Definition CD_DischargeInceptionStepper.H:718
std::vector< std::pair< Real, Real > > m_maxT
Max Townsend value for every time step.
Definition CD_DischargeInceptionStepper.H:657
virtual Real computeRdot(const Real &a_voltage) const noexcept
Compute integral_Vcr(done/dt * (1 - eta/alpha) dV)
Definition CD_DischargeInceptionStepperImplem.H:3561
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:2103
std::vector< std::tuple< Real, Real, RealVect > > m_TMinuValues
Max T value for every voltage.
Definition CD_DischargeInceptionStepper.H:645
std::vector< Real > m_criticalVolumeMinu
Critical volumes of K values for each voltage.
Definition CD_DischargeInceptionStepper.H:669
Real m_maxDtGrowth
Maximum permitted time step growth.
Definition CD_DischargeInceptionStepper.H:783
Base class for advancing equations.
Definition CD_TimeStepper.H:31
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:38
Namespace containing physics models for use with chombo-discharge.
Definition CD_AdvectionDiffusion.H:16
Phase names namespace.
Definition CD_MultiFluidIndexSpace.H:28