chombo-discharge
Loading...
Searching...
No Matches
CD_CdrPlasmaStepper.H
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2021-2026 SINTEF Energy Research
3 *
4 * SPDX-License-Identifier: GPL-3.0-or-later
5 */
6
13#ifndef CD_CDRPLASMASTEPPER_H
14#define CD_CDRPLASMASTEPPER_H
15
16// Std includes
17#include <functional>
18
19// Our includes
21#include <CD_CdrPlasmaPhysics.H>
22#include <CD_AmrMesh.H>
24#include <CD_CdrLayout.H>
25#include <CD_RtLayout.H>
26#include <CD_FieldSolver.H>
27#include <CD_SurfaceODESolver.H>
28#include <CD_TimeStepper.H>
29#include <CD_NamespaceHeader.H>
30
31namespace Physics {
32 namespace CdrPlasma {
33
46 {
47 public:
52
57 CdrPlasmaStepper(RefCountedPtr<CdrPlasmaPhysics>& a_physics);
58
63
67 virtual void
68 setupSolvers() override;
69
73 virtual void
74 allocate() override;
75
79 virtual void
80 initialData() override;
81
85 virtual void
86 postInitialize() override;
87
91 virtual void
92 postCheckpointSetup() override;
93
97 virtual void
98 registerRealms() override;
99
103 virtual void
104 registerOperators() override;
105
109 virtual void
110 parseRuntimeOptions() override = 0;
111
115 virtual void
116 prePlot() override;
117
118#ifdef CH_USE_HDF5
124 virtual void
125 writeCheckpointData(HDF5Handle& a_handle, const int a_lvl) const override;
126#endif
127
128#ifdef CH_USE_HDF5
134 virtual void
135 readCheckpointData(HDF5Handle& a_handle, const int a_lvl) override;
136#endif
137
143 virtual int
144 getNumberOfPlotVariables() const override;
145
150 virtual Vector<std::string>
151 getPlotVariableNames() const override;
152
160 virtual void
161 writePlotData(LevelData<EBCellFAB>& a_output,
162 int& a_icomp,
163 const std::string& a_outputRealm,
164 const int a_level) const override;
165
171 virtual Real
172 computeDt() override = 0;
173
179 virtual Real
180 advance(const Real a_dt) override = 0;
181
188 virtual void
189 synchronizeSolverTimes(const int a_step, const Real a_time, const Real a_dt) override;
190
195 virtual void
196 printStepReport() override;
197
203 virtual void
204 preRegrid(const int a_lmin, const int a_oldFinestLevel) override;
205
211 virtual void
212 preRegridInternals(const int a_lmin, const int a_oldFinestLevel);
213
220 virtual void
221 regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override;
222
227 virtual void
228 postRegrid() override;
229
234 virtual void
235 computeJ(EBAMRCellData& a_J) const;
236
242 virtual void
243 computeElectricField(MFAMRCellData& a_electricFieldCell, const MFAMRCellData& a_potential) const;
244
251 virtual void
252 computeElectricField(EBAMRCellData& a_electricFieldCell, const phase::which_phase a_phase) const;
253
260 virtual void
261 computeElectricField(EBAMRCellData& a_E,
262 const phase::which_phase a_phase,
263 const MFAMRCellData& a_potential) const;
264
271 virtual void
272 computeElectricField(EBAMRFluxData& a_electricFieldFace,
273 const phase::which_phase a_phase,
274 const EBAMRCellData& a_electricFieldCell) const;
275
282 virtual void
283 computeElectricField(EBAMRIVData& a_electricFieldEB,
284 const phase::which_phase a_phase,
285 const EBAMRCellData& a_electricFieldCell) const;
286
292 virtual void
293 computeMaxElectricField(Real& a_maximumElectricField, const phase::which_phase a_phase);
294
299 virtual Real
300 getTime() const;
301
306 virtual bool
308
312 virtual void
313 allocateInternals() = 0;
314
318 virtual void
320
324 virtual void
326
330 virtual void
331 deallocate();
332
338 virtual void
340
347 virtual void
348 computeSpaceChargeDensity(MFAMRCellData& a_rho, const Vector<EBAMRCellData*>& a_cdrDensities);
349
354 virtual void
355 computeCellConductivity(EBAMRCellData& a_cellConductivity) const;
356
363 virtual void
364 computeFaceConductivity(EBAMRFluxData& a_conductivityFace,
365 EBAMRIVData& a_conductivityEB,
366 const EBAMRCellData& a_conductivityCell) const;
367
374 virtual void
375 setupSemiImplicitPoisson(const Real a_dt);
376
385 virtual void
386 setupSemiImplicitPoisson(const EBAMRFluxData& a_conductivityFace,
387 const EBAMRIVData& a_conductivityEB,
388 const Real a_factor);
389
396 virtual bool
397 solvePoisson();
398
408 virtual bool
409 solvePoisson(MFAMRCellData& a_potential,
410 MFAMRCellData& a_rho,
411 const Vector<EBAMRCellData*>& a_cdrDensities,
412 const EBAMRIVData& a_sigma);
413
419 virtual void
420 advanceReactionNetwork(const Real a_time, const Real a_dt);
421
433 virtual void
434 advanceReactionNetwork(Vector<EBAMRCellData*>& a_cdrSources,
435 Vector<EBAMRCellData*>& a_rteSources,
436 const Vector<EBAMRCellData*>& a_cdrDensities,
437 const Vector<EBAMRCellData*>& a_rteDensities,
438 const EBAMRCellData& a_E,
439 const Real& a_time,
440 const Real& a_dt);
441
453 virtual void
454 advanceReactionNetwork(Vector<EBAMRCellData*>& a_cdrSources,
455 Vector<EBAMRCellData*>& a_rteSources,
456 const Vector<EBAMRCellData*>& a_cdrDensities,
457 const Vector<EBAMRCellData*>& a_cdrGradients,
458 const Vector<EBAMRCellData*>& a_rteDensities,
459 const EBAMRCellData& a_E,
460 const Real& a_time,
461 const Real& a_dt);
462
475 virtual void
476 advanceReactionNetwork(Vector<LevelData<EBCellFAB>*>& a_cdrSources,
477 Vector<LevelData<EBCellFAB>*>& a_rteSources,
478 const Vector<LevelData<EBCellFAB>*>& a_cdrDensities,
479 const Vector<LevelData<EBCellFAB>*>& a_cdrGradients,
480 const Vector<LevelData<EBCellFAB>*>& a_rteDensities,
481 const LevelData<EBCellFAB>& a_E,
482 const Real& a_time,
483 const Real& a_dt,
484 const int a_lvl);
498 virtual void
499 advanceReactionNetworkRegularCells(Vector<FArrayBox*>& a_cdrSources,
500 Vector<FArrayBox*>& a_rteSources,
501 const Vector<FArrayBox*>& a_cdrDensities,
502 const Vector<FArrayBox*>& a_cdrGradients,
503 const Vector<FArrayBox*>& a_rteDensities,
504 const FArrayBox& a_E,
505 const Real& a_time,
506 const Real& a_dt,
507 const Real& a_dx,
508 const Box& a_cellBox);
509
527 virtual void
528 advanceReactionNetworkIrreg(Vector<EBCellFAB*>& a_cdrSources,
529 Vector<EBCellFAB*>& a_rteSources,
530 const Vector<EBCellFAB*>& a_cdrDensities,
531 const Vector<EBCellFAB*>& a_cdrGradients,
532 const Vector<EBCellFAB*>& a_cdrVelocities,
533 const Vector<EBCellFAB*>& a_rteDensities,
534 const EBCellFAB& a_E,
535 const Real& a_time,
536 const Real& a_dt,
537 const Real& a_dx,
538 const Box& a_cellBox,
539 const int a_lvl,
540 const DataIndex& a_dit);
541
558 virtual void
559 advanceReactionNetworkIrregInterp(Vector<EBCellFAB*>& a_cdrSources,
560 Vector<EBCellFAB*>& a_rteSources,
561 const Vector<EBCellFAB*>& a_cdrDensities,
562 const Vector<EBCellFAB*>& a_cdrGradients,
563 const Vector<EBCellFAB*>& a_cdrVelocities,
564 const Vector<EBCellFAB*>& a_rteDensities,
565 const EBCellFAB& a_E,
566 const Real& a_time,
567 const Real& a_dt,
568 const Real& a_dx,
569 const Box& a_cellBox,
570 const int a_lvl,
571 const DataIndex& a_dit);
572
591 virtual void
592 advanceReactionNetworkIrregUpwind(Vector<EBCellFAB*>& a_cdrSources,
593 Vector<EBCellFAB*>& a_rteSources,
594 const Vector<EBCellFAB*>& a_cdrDensities,
595 const Vector<EBCellFAB*>& a_cdrGradients,
596 const Vector<EBCellFAB*>& a_cdrVelocities,
597 const Vector<EBCellFAB*>& a_rteDensities,
598 const EBCellFAB& a_E,
599 const Real& a_time,
600 const Real& a_dt,
601 const Real& a_dx,
602 const Box& a_box,
603 const int a_lvl,
604 const DataIndex& a_dit);
605
610 virtual void
612
618 virtual void
619 computeCdrDiffusion(const EBAMRCellData& a_electricFieldCell, const EBAMRIVData& a_electricFieldEB);
620
628 virtual void
629 computeCdrDiffusionCell(Vector<EBAMRCellData>& a_cdrDcoCell,
630 const Vector<EBAMRCellData*>& a_cdrDensities,
631 const EBAMRCellData& a_electricFieldCell,
632 const Real& a_time);
633
642 virtual void
643 computeCdrDiffusionCell(Vector<LevelData<EBCellFAB>*>& a_cdrDcoCell,
644 const Vector<LevelData<EBCellFAB>*>& a_cdrDensities,
645 const LevelData<EBCellFAB>& a_electricFieldCell,
646 const int a_lvl,
647 const Real& a_time);
648
658 virtual void
659 computeCdrDiffusionCellRegular(Vector<FArrayBox*>& a_cdrDcoCell,
660 const Vector<FArrayBox*>& a_cdrDensities,
661 const FArrayBox& a_electricFieldCell,
662 const Box a_cellBox,
663 const Real a_dx,
664 const Real a_time);
665
676 virtual void
677 computeCdrDiffusionCellIrregular(Vector<EBCellFAB*>& a_cdrDcoCell,
678 const Vector<EBCellFAB*>& a_cdrDensities,
679 const EBCellFAB& a_electricFieldCell,
680 const Real a_dx,
681 const Real& a_time,
682 const int a_lvl,
683 const DataIndex& a_dit);
684
693 virtual void
694 computeCdrDiffusionFace(Vector<EBAMRFluxData*>& a_cdrDcoFace,
695 const Vector<EBAMRCellData*>& a_cdrDensities,
696 const EBAMRCellData& a_electricFieldCell,
697 const Real& a_time);
698
706 virtual void
707 computeCdrDiffusionEb(Vector<EBAMRIVData*>& a_cdrDcoEB,
708 const Vector<EBAMRIVData*>& a_cdrDensitiesEB,
709 const EBAMRIVData& a_electricFieldEB,
710 const Real& a_time);
711
720 virtual void
721 computeCdrDiffusionEb(Vector<LevelData<BaseIVFAB<Real>>*>& a_cdrDcoEB,
722 const Vector<LevelData<BaseIVFAB<Real>>*>& a_cdrDensitiesEB,
723 const LevelData<BaseIVFAB<Real>>& a_electricFieldEB,
724 const Real& a_time,
725 const int a_lvl);
726
731 virtual void
733
741 virtual void
742 computeCdrDriftVelocities(Vector<EBAMRCellData*>& a_cdrVelocities,
743 const Vector<EBAMRCellData*>& a_cdrDensities,
744 const EBAMRCellData& a_E,
745 const Real& a_time);
746
756 virtual void
757 computeCdrDriftVelocities(Vector<LevelData<EBCellFAB>*>& a_cdrVelocities,
758 const Vector<LevelData<EBCellFAB>*>& a_cdrDensities,
759 const LevelData<EBCellFAB>& a_electricField,
760 const int a_lvl,
761 const Real& a_time);
762
773 virtual void
774 computeCdrDriftVelocitiesRegular(Vector<FArrayBox*>& a_cdrVelocities,
775 const Vector<FArrayBox*>& a_cdrDensities,
776 const FArrayBox& a_electricField,
777 const Box& a_cellBox,
778 const Real& a_time,
779 const Real& a_dx);
780
792 virtual void
793 computeCdrDriftVelocitiesIrregular(Vector<EBCellFAB*>& a_cdrVelocities,
794 const Vector<EBCellFAB*>& a_cdrDensities,
795 const EBCellFAB& a_electricField,
796 const Real& a_time,
797 const Real& a_dx,
798 const int a_lvl,
799 const DataIndex& a_dit);
800
812 virtual void
813 computeCdrFluxes(Vector<EBAMRIVData*>& a_cdrFluxesEB,
814 const Vector<EBAMRIVData*>& a_extrapCdrFluxes,
815 const Vector<EBAMRIVData*>& a_extrapCdrDensities,
816 const Vector<EBAMRIVData*>& a_extrapCdrVelocities,
817 const Vector<EBAMRIVData*>& a_extrapCdrGradients,
818 const Vector<EBAMRIVData*>& a_extrapRteFluxes,
819 const EBAMRIVData& a_electricField,
820 const Real& a_time);
821
834 virtual void
835 computeCdrFluxes(Vector<LevelData<BaseIVFAB<Real>>*>& a_cdrFluxesEB,
836 const Vector<LevelData<BaseIVFAB<Real>>*>& a_extrapCdrFluxes,
837 const Vector<LevelData<BaseIVFAB<Real>>*>& a_extrapCdrDensities,
838 const Vector<LevelData<BaseIVFAB<Real>>*>& a_extrapCdrVelocities,
839 const Vector<LevelData<BaseIVFAB<Real>>*>& a_extrapCdrGradients,
840 const Vector<LevelData<BaseIVFAB<Real>>*>& a_extrapRteFluxes,
841 const LevelData<BaseIVFAB<Real>>& a_electricField,
842 const Real& a_time,
843 const int a_lvl);
844
856 virtual void
857 computeCdrDomainFluxes(Vector<EBAMRIFData*>& a_cdrFluxes,
858 const Vector<EBAMRIFData*>& a_extrapCdrFluxes,
859 const Vector<EBAMRIFData*>& a_extrapCdrDensities,
860 const Vector<EBAMRIFData*>& a_extrapCdrVelocities,
861 const Vector<EBAMRIFData*>& a_extrapCdrGradients,
862 const Vector<EBAMRIFData*>& a_extrapRteFluxes,
863 const EBAMRIFData& a_electricField,
864 const Real& a_time);
865
879 virtual void
880 computeCdrDomainFluxes(Vector<LevelData<DomainFluxIFFAB>*> a_cdrFluxes,
881 const Vector<LevelData<DomainFluxIFFAB>*>& a_extrapCdrFluxes,
882 const Vector<LevelData<DomainFluxIFFAB>*>& a_extrapCdrDensities,
883 const Vector<LevelData<DomainFluxIFFAB>*>& a_extrapCdrVelocities,
884 const Vector<LevelData<DomainFluxIFFAB>*>& a_extrapCdrGradients,
885 const Vector<LevelData<DomainFluxIFFAB>*>& a_extrapRteFluxes,
886 const LevelData<DomainFluxIFFAB>& a_electricField,
887 const Real& a_time,
888 const int a_lvl);
889
897 virtual void
898 computeExtrapolatedFluxes(Vector<EBAMRIVData*>& a_extrapCdrFluxesEB,
899 const Vector<EBAMRCellData*>& a_cdrDensities,
900 const Vector<EBAMRCellData*>& a_cdrVelocities,
901 const phase::which_phase a_phase);
902
911 virtual void
912 computeExtrapolatedDomainFluxes(Vector<EBAMRIFData*>& a_cdrDomainFluxes,
913 const Vector<EBAMRCellData*>& a_cdrDensities,
914 const Vector<EBAMRCellData*>& a_cdrVelocities,
915 const phase::which_phase a_phase);
916
924 virtual void
925 computeExtrapolatedVelocities(Vector<EBAMRIVData*>& a_cdrVelocitiesEB,
926 const Vector<EBAMRCellData*>& a_cdrVelocitiesCell,
927 const phase::which_phase a_phase);
928
932 virtual void
934
941 virtual void
942 extrapolateToEb(Vector<EBAMRIVData*>& a_ebData,
943 const phase::which_phase a_phase,
944 const Vector<EBAMRCellData*>& a_cellData);
945
952 virtual void
953 extrapolateToEb(EBAMRIVData& a_ebData, const phase::which_phase a_phase, const EBAMRCellData& a_cellData);
954
962 virtual void
963 extrapolateToEb(LevelData<BaseIVFAB<Real>>& a_ebData,
964 const phase::which_phase a_phase,
965 const LevelData<EBCellFAB>& a_cellData,
966 const int a_lvl);
967
974 virtual void
975 extrapolateToDomainFaces(Vector<EBAMRIFData*>& a_domainData,
976 const phase::which_phase a_phase,
977 const Vector<EBAMRCellData*>& a_cellData);
978
985 virtual void
986 extrapolateToDomainFaces(EBAMRIFData& a_domainData,
987 const phase::which_phase a_phase,
988 const EBAMRCellData& a_cellData);
989
997 virtual void
998 extrapolateToDomainFaces(LevelData<DomainFluxIFFAB>& a_domainData,
999 const phase::which_phase a_phase,
1000 const LevelData<EBCellFAB>& a_cellData,
1001 const int a_lvl);
1002
1010 virtual void
1011 extrapolateVectorToDomainFaces(Vector<EBAMRIFData*>& a_domainData,
1012 const phase::which_phase a_phase,
1013 const Vector<EBAMRCellData*>& a_cellData);
1014
1022 virtual void
1023 extrapolateVectorToDomainFaces(EBAMRIFData& a_domainData,
1024 const phase::which_phase a_phase,
1025 const EBAMRCellData& a_cellData);
1026
1034 virtual void
1035 extrapolateVelocitiesToDomainFaces(Vector<EBAMRIFData*>& a_domainVelocities,
1036 const phase::which_phase a_phase,
1037 const Vector<EBAMRCellData*>& a_cellVelocities);
1038
1044 virtual void
1045 getCdrMax(Real& a_cdrMax, std::string& a_solverName) const;
1046
1050 virtual void
1051 initialSigma();
1052
1058 virtual void
1059 projectFlux(EBAMRIVData& a_projectedFlux, const EBAMRIVData& a_flux);
1060
1067 virtual void
1068 projectFlux(LevelData<BaseIVFAB<Real>>& a_projectedFlux,
1069 const LevelData<BaseIVFAB<Real>>& a_flux,
1070 const int a_lvl);
1071
1077 virtual void
1078 projectDomain(EBAMRIFData& a_projectedFlux, const EBAMRIFData& a_flux);
1079
1086 virtual void
1087 regridInternals(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) = 0;
1088
1095 virtual void
1096 regridSolvers(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel);
1097
1102 virtual void
1103 resetDielectricCells(EBAMRIVData& a_data) const;
1104
1108 virtual void
1109 sanityCheck() const;
1110
1114 virtual void
1115 setupCdr();
1116
1120 virtual void
1121 setupPoisson();
1122
1126 virtual void
1128
1132 virtual void
1133 setupSigma();
1134
1139 virtual void
1141
1145 virtual void
1146 solverDump();
1147
1152 virtual void
1153 setVoltage(std::function<Real(const Real a_time)> a_voltage);
1154
1160 virtual void
1161 solveRadiativeTransfer(const Real a_dt);
1162
1167 virtual void
1168 setCdrSolvers(RefCountedPtr<CdrLayout<CdrSolver>>& a_cdr);
1169
1174 virtual void
1175 setFieldSolver(RefCountedPtr<FieldSolver>& a_fieldSolver);
1176
1181 virtual void
1182 setRadiativeTransferSolvers(RefCountedPtr<RtLayout<RtSolver>>& a_rte);
1183
1190 virtual Real
1192
1198 virtual Real
1200
1206 virtual Real
1208
1214 virtual Real
1216
1221 virtual Real
1223
1228 virtual Real
1229 getDt();
1230
1231 protected:
1238 {
1239 Interpolated,
1240 Upwind
1241 };
1242
1246 enum class TimeCode
1247 {
1248 Advection,
1249 Diffusion,
1250 AdvectionDiffusion,
1251 Source,
1252 RelaxationTime,
1253 Restricted,
1254 Hardcap,
1255 Error,
1256 Physics
1257 };
1258
1263 std::string m_realm;
1264
1268 std::string m_className;
1269
1274
1279
1283 RefCountedPtr<MultiFluidIndexSpace> m_multifluidIndexSpace;
1284
1288 RefCountedPtr<CdrPlasmaPhysics> m_physics;
1289
1293 RefCountedPtr<CdrLayout<CdrSolver>> m_cdr;
1294
1298 RefCountedPtr<RtLayout<RtSolver>> m_rte;
1299
1303 RefCountedPtr<FieldSolver> m_fieldSolver;
1304
1308 RefCountedPtr<SurfaceODESolver<1>> m_sigma;
1309
1313 EBAMRCellData m_currentDensity;
1314
1318 EBAMRCellData m_physicsPlotVars;
1319
1323 std::function<Real(const Real a_time)> m_voltage;
1324
1329
1334
1338 Real m_cfl;
1339
1344
1349
1353 Real m_dt;
1354
1359
1364
1369
1374
1379
1384
1388 virtual void
1390
1394 virtual void
1396
1400 virtual void
1401 parseCFL();
1402
1406 virtual void
1408
1412 virtual void
1413 parseMinDt();
1414
1418 virtual void
1419 parseMaxDt();
1420
1424 virtual void
1426
1430 virtual void
1432
1437 virtual void
1439
1447 virtual void
1448 writeJ(LevelData<EBCellFAB>& a_output, int& a_icomp, const std::string& a_outputRealm, const int a_level) const;
1449
1454 virtual void
1455 computePhysicsPlotVars(EBAMRCellData& a_plotVars) const noexcept;
1456
1467 virtual void
1468 writeData(LevelData<EBCellFAB>& a_output,
1469 int& a_comp,
1470 const EBAMRCellData& a_data,
1471 const std::string& a_outputRealm,
1472 const int a_level,
1473 const bool a_interpToCentroids,
1474 const bool a_interpGhost) const noexcept;
1475 };
1476 } // namespace CdrPlasma
1477} // namespace Physics
1478
1479#include <CD_NamespaceFooter.H>
1480
1481#endif
Declaration of core class for handling AMR-related operations (with embedded boundaries)
Declaration of a class that holds a set of CdrSolvers (to cut down on typing).
Declaration of the Physics::CdrPlasma::CdrPlasmaPhysics interface class.
Declaration of base class for defining geometries.
Contains declaration of a base electrostatics solver class.
Multi-fluid index space.
Declaration of a class that holds a set of RtSolvers.
Declaration of a cut-cell ODE solver.
Declaration of main (abstract) time stepper class.
Class for holding a set of CdrSolvers.
Definition CD_CdrLayout.H:38
Abstract base class for advancing the coupled CDR plasma equations in time.
Definition CD_CdrPlasmaStepper.H:46
virtual Real getTime() const
Return the current simulation time.
Definition CD_CdrPlasmaStepper.cpp:4295
virtual void computeExtrapolatedFluxes(Vector< EBAMRIVData * > &a_extrapCdrFluxesEB, const Vector< EBAMRCellData * > &a_cdrDensities, const Vector< EBAMRCellData * > &a_cdrVelocities, const phase::which_phase a_phase)
Extrapolate cell-centered fluxes to the EB centroid.
Definition CD_CdrPlasmaStepper.cpp:2557
virtual void setupSigma()
Set up the surface charge solver.
Definition CD_CdrPlasmaStepper.cpp:3878
virtual void computeFaceConductivity(EBAMRFluxData &a_conductivityFace, EBAMRIVData &a_conductivityEB, const EBAMRCellData &a_conductivityCell) const
Compute the face-centered conductivity from a cell-centered conductivity.
Definition CD_CdrPlasmaStepper.cpp:234
virtual void setFieldSolver(RefCountedPtr< FieldSolver > &a_fieldSolver)
Set the field solver.
Definition CD_CdrPlasmaStepper.cpp:3263
virtual void computeExtrapolatedDomainFluxes(Vector< EBAMRIFData * > &a_cdrDomainFluxes, const Vector< EBAMRCellData * > &a_cdrDensities, const Vector< EBAMRCellData * > &a_cdrVelocities, const phase::which_phase a_phase)
Extrapolate drift fluxes to domain faces.
Definition CD_CdrPlasmaStepper.cpp:2622
virtual void printStepReport() override
Print a step report.
Definition CD_CdrPlasmaStepper.cpp:4784
virtual void extrapolateToEb(Vector< EBAMRIVData * > &a_ebData, const phase::which_phase a_phase, const Vector< EBAMRCellData * > &a_cellData)
Extrapolated cell-centered data to the EB. This is the AMR version for all species.
Definition CD_CdrPlasmaStepper.cpp:3050
virtual void extrapolateToDomainFaces(Vector< EBAMRIFData * > &a_domainData, const phase::which_phase a_phase, const Vector< EBAMRCellData * > &a_cellData)
Extrapolate cell-centered data to domain faces. This is the AMR version that does all species.
Definition CD_CdrPlasmaStepper.cpp:3101
SourceTermComputation m_whichSourceTermComputation
Which source term computation.
Definition CD_CdrPlasmaStepper.H:1278
virtual void projectFlux(EBAMRIVData &a_projectedFlux, const EBAMRIVData &a_flux)
Project a flux onto the EB normal. This is the AMR version.
Definition CD_CdrPlasmaStepper.cpp:3389
Real m_dtCFL
Computed CFL time step.
Definition CD_CdrPlasmaStepper.H:1358
virtual void setSolverVerbosity()
Set solver verbosity.
Definition CD_CdrPlasmaStepper.cpp:3815
virtual void computeCdrFluxes(Vector< EBAMRIVData * > &a_cdrFluxesEB, const Vector< EBAMRIVData * > &a_extrapCdrFluxes, const Vector< EBAMRIVData * > &a_extrapCdrDensities, const Vector< EBAMRIVData * > &a_extrapCdrVelocities, const Vector< EBAMRIVData * > &a_extrapCdrGradients, const Vector< EBAMRIVData * > &a_extrapRteFluxes, const EBAMRIVData &a_electricField, const Real &a_time)
Compute CDR fluxes on the EB. This is the AMR version – it will call the level version.
Definition CD_CdrPlasmaStepper.cpp:2134
int m_solverVerbosity
Verbosity for solvers.
Definition CD_CdrPlasmaStepper.H:1368
virtual void computeJ(EBAMRCellData &a_J) const
Compute the current density.
Definition CD_CdrPlasmaStepper.cpp:2813
std::string m_className
Time stepper class name.
Definition CD_CdrPlasmaStepper.H:1268
Real m_relaxTime
Scaling factor for the dielectric relaxation time step restriction.
Definition CD_CdrPlasmaStepper.H:1343
virtual void parseFastPoisson()
Parse the "fast poisson" method, i.e. how often we solve the Poisson equation.
Definition CD_CdrPlasmaStepper.cpp:3741
virtual Real computeOhmicInductionCurrent()
Compute induced current in external circuit due to ohmic conduction.
Definition CD_CdrPlasmaStepper.cpp:4211
RefCountedPtr< SurfaceODESolver< 1 > > m_sigma
Surface charge solver.
Definition CD_CdrPlasmaStepper.H:1308
virtual void advanceReactionNetworkRegularCells(Vector< FArrayBox * > &a_cdrSources, Vector< FArrayBox * > &a_rteSources, const Vector< FArrayBox * > &a_cdrDensities, const Vector< FArrayBox * > &a_cdrGradients, const Vector< FArrayBox * > &a_rteDensities, const FArrayBox &a_E, const Real &a_time, const Real &a_dt, const Real &a_dx, const Box &a_cellBox)
Compute reaction network sources. This is the regular version which does not do the cut-cells.
Definition CD_CdrPlasmaStepper.cpp:796
virtual void allocate() override
Allocate data for the time stepper and solvers.
Definition CD_CdrPlasmaStepper.cpp:3801
RefCountedPtr< CdrLayout< CdrSolver > > m_cdr
CDR solvers.
Definition CD_CdrPlasmaStepper.H:1293
virtual void parseMinDt()
Parse the minimum allowed time step.
Definition CD_CdrPlasmaStepper.cpp:3693
virtual void regridInternals(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel)=0
Regrid internal storage. This MUST be overwritten by implementations.
virtual void computeCdrDomainFluxes(Vector< EBAMRIFData * > &a_cdrFluxes, const Vector< EBAMRIFData * > &a_extrapCdrFluxes, const Vector< EBAMRIFData * > &a_extrapCdrDensities, const Vector< EBAMRIFData * > &a_extrapCdrVelocities, const Vector< EBAMRIFData * > &a_extrapCdrGradients, const Vector< EBAMRIFData * > &a_extrapRteFluxes, const EBAMRIFData &a_electricField, const Real &a_time)
Compute CDR fluxes on domain faces for usage in boundary conditions. This is the AMR version.
Definition CD_CdrPlasmaStepper.cpp:2367
virtual void parseRuntimeOptions() override=0
Parse runtime options. Subclasses must implement this.
RefCountedPtr< MultiFluidIndexSpace > m_multifluidIndexSpace
Index space.
Definition CD_CdrPlasmaStepper.H:1283
virtual void getCdrMax(Real &a_cdrMax, std::string &a_solverName) const
Get maximum density in the CDR species. This will fetch both the value and the solver name.
Definition CD_CdrPlasmaStepper.cpp:3223
virtual void deallocate()
Deallocation function. This will deallocate internal storage in the subclasses as well as the solvers...
Definition CD_CdrPlasmaStepper.cpp:4307
virtual void extrapolateVelocitiesToDomainFaces(Vector< EBAMRIFData * > &a_domainVelocities, const phase::which_phase a_phase, const Vector< EBAMRCellData * > &a_cellVelocities)
Extrapolate velocities data to domain faces. This is the AMR version that does all species.
Definition CD_CdrPlasmaStepper.cpp:2756
virtual void sanityCheck() const
Do a sanity check. Only works when DEBUG=TRUE.
Definition CD_CdrPlasmaStepper.cpp:3613
virtual Real advance(const Real a_dt) override=0
Advance method, advances equations.
virtual void parseVerbosity()
Parse class verbosity.
Definition CD_CdrPlasmaStepper.cpp:3637
TimeCode m_timeCode
Time code for step restriction.
Definition CD_CdrPlasmaStepper.H:1363
virtual Real computeRelaxationTime()
Compute the relaxation time as dt = eps0/conductivity.
Definition CD_CdrPlasmaStepper.cpp:4256
virtual void deallocateInternals()=0
Deallocate internals. Must be implemented by subclasses.
Definition CD_CdrPlasmaStepper.cpp:417
virtual void initialSigma()
Initialize the surface charge.
Definition CD_CdrPlasmaStepper.cpp:3330
virtual void computeCdrDriftVelocitiesRegular(Vector< FArrayBox * > &a_cdrVelocities, const Vector< FArrayBox * > &a_cdrDensities, const FArrayBox &a_electricField, const Box &a_cellBox, const Real &a_time, const Real &a_dx)
Compute the cell-centered CDR velocities.
Definition CD_CdrPlasmaStepper.cpp:1970
virtual void setupCdr()
Setup the CDR solvers.
Definition CD_CdrPlasmaStepper.cpp:3829
virtual Real computeDomainCurrent()
Compute the ohmic current through the domain faces.
Definition CD_CdrPlasmaStepper.cpp:4126
virtual bool solvePoisson()
Solve the electrostatic Poisson equation.
Definition CD_CdrPlasmaStepper.cpp:354
virtual void parseRelaxationTime()
Parse the relaxation time restriction.
Definition CD_CdrPlasmaStepper.cpp:3677
Real m_dt
Previous time step size.
Definition CD_CdrPlasmaStepper.H:1353
virtual void advanceReactionNetworkIrregInterp(Vector< EBCellFAB * > &a_cdrSources, Vector< EBCellFAB * > &a_rteSources, const Vector< EBCellFAB * > &a_cdrDensities, const Vector< EBCellFAB * > &a_cdrGradients, const Vector< EBCellFAB * > &a_cdrVelocities, const Vector< EBCellFAB * > &a_rteDensities, const EBCellFAB &a_E, const Real &a_time, const Real &a_dt, const Real &a_dx, const Box &a_cellBox, const int a_lvl, const DataIndex &a_dit)
Compute reaction network sources. This version interpolates everything to the centroid and runs with ...
Definition CD_CdrPlasmaStepper.cpp:993
virtual Real computeElectrodeCurrent()
Compute the ohmic current on electrodes.
Definition CD_CdrPlasmaStepper.cpp:3945
~CdrPlasmaStepper()
Destructor.
Definition CD_CdrPlasmaStepper.cpp:93
virtual void advanceReactionNetworkIrregUpwind(Vector< EBCellFAB * > &a_cdrSources, Vector< EBCellFAB * > &a_rteSources, const Vector< EBCellFAB * > &a_cdrDensities, const Vector< EBCellFAB * > &a_cdrGradients, const Vector< EBCellFAB * > &a_cdrVelocities, const Vector< EBCellFAB * > &a_rteDensities, const EBCellFAB &a_E, const Real &a_time, const Real &a_dt, const Real &a_dx, const Box &a_box, const int a_lvl, const DataIndex &a_dit)
Compute reaction network sources.
Definition CD_CdrPlasmaStepper.cpp:1105
virtual Real getDt()
Get dt.
Definition CD_CdrPlasmaStepper.cpp:4301
CdrPlasmaStepper()
Empty constructor.
Definition CD_CdrPlasmaStepper.cpp:30
virtual void advanceReactionNetworkIrreg(Vector< EBCellFAB * > &a_cdrSources, Vector< EBCellFAB * > &a_rteSources, const Vector< EBCellFAB * > &a_cdrDensities, const Vector< EBCellFAB * > &a_cdrGradients, const Vector< EBCellFAB * > &a_cdrVelocities, const Vector< EBCellFAB * > &a_rteDensities, const EBCellFAB &a_E, const Real &a_time, const Real &a_dt, const Real &a_dx, const Box &a_cellBox, const int a_lvl, const DataIndex &a_dit)
Compute reaction network sources. This is the irregular version which only does the cut-cells.
Definition CD_CdrPlasmaStepper.cpp:927
virtual void solverDump()
All solvers writes plot files. These are not the same as the plot files written by Driver.
Definition CD_CdrPlasmaStepper.cpp:3895
virtual void parseFastRadiativeTransfer()
Parse the "fast rte" method, i.e. how often we solve the Poisson equation.
Definition CD_CdrPlasmaStepper.cpp:3725
virtual void computeCdrDiffusionCell(Vector< EBAMRCellData > &a_cdrDcoCell, const Vector< EBAMRCellData * > &a_cdrDensities, const EBAMRCellData &a_electricFieldCell, const Real &a_time)
Compute CDR diffusion coefficients on cell centers. This will call the level version.
Definition CD_CdrPlasmaStepper.cpp:1318
Real m_maxDt
Maximum allowed time step.
Definition CD_CdrPlasmaStepper.H:1333
virtual Real computeDt() override=0
Compute the time step.
virtual void advanceReactionNetwork(const Real a_time, const Real a_dt)
Advance the reaction network. This will compute the electric field (on the appropriate phase) and cal...
Definition CD_CdrPlasmaStepper.cpp:428
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.
Definition CD_CdrPlasmaStepper.cpp:4480
EBAMRCellData m_physicsPlotVars
Storage for physics-observables.
Definition CD_CdrPlasmaStepper.H:1318
int m_upwindFactor
Upwind factor.
Definition CD_CdrPlasmaStepper.H:1383
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_CdrPlasmaStepper.cpp:4441
virtual void setupPoisson()
Setup the field solver.
Definition CD_CdrPlasmaStepper.cpp:3845
virtual void computeCdrDiffusionCellRegular(Vector< FArrayBox * > &a_cdrDcoCell, const Vector< FArrayBox * > &a_cdrDensities, const FArrayBox &a_electricFieldCell, const Box a_cellBox, const Real a_dx, const Real a_time)
Compute diffusion coefficients on cell centers. This does all the regular cells.
Definition CD_CdrPlasmaStepper.cpp:1442
int m_fastRTE
Solve RTE every m_fastRTE steps instead of every step. 0 or 1 means every step.
Definition CD_CdrPlasmaStepper.H:1373
EBAMRCellData m_currentDensity
Storage for the current.
Definition CD_CdrPlasmaStepper.H:1313
virtual void parseSourceComputation()
Parse how we compute the source terms.
Definition CD_CdrPlasmaStepper.cpp:3757
virtual void setRadiativeTransferSolvers(RefCountedPtr< RtLayout< RtSolver > > &a_rte)
Set the RTE solvers.
Definition CD_CdrPlasmaStepper.cpp:3274
virtual void computeCdrDriftVelocitiesIrregular(Vector< EBCellFAB * > &a_cdrVelocities, const Vector< EBCellFAB * > &a_cdrDensities, const EBCellFAB &a_electricField, const Real &a_time, const Real &a_dx, const int a_lvl, const DataIndex &a_dit)
Compute the cell-centered CDR velocities.
Definition CD_CdrPlasmaStepper.cpp:2039
virtual void parseMaxDt()
Parse the maximum allowed time step.
Definition CD_CdrPlasmaStepper.cpp:3709
virtual void initialData() override
Fill all solvers with initial data.
Definition CD_CdrPlasmaStepper.cpp:3307
std::string m_realm
Realm where the time stepper is registered.
Definition CD_CdrPlasmaStepper.H:1263
virtual void computeCdrDiffusionFace(Vector< EBAMRFluxData * > &a_cdrDcoFace, const Vector< EBAMRCellData * > &a_cdrDensities, const EBAMRCellData &a_electricFieldCell, const Real &a_time)
Compute diffusion coefficients on face centers.
Definition CD_CdrPlasmaStepper.cpp:1615
Real m_cfl
CFL number.
Definition CD_CdrPlasmaStepper.H:1338
virtual void computeElectricField(MFAMRCellData &a_electricFieldCell, const MFAMRCellData &a_potential) const
Compute the cell-centered electric field on both phases.
Definition CD_CdrPlasmaStepper.cpp:2890
virtual void computeCdrDiffusion()
Compute diffusion things using whatever is available in the solvers.
Definition CD_CdrPlasmaStepper.cpp:1237
virtual void preRegrid(const int a_lmin, const int a_oldFinestLevel) override
Pre-regrid function – this is the one called by Driver.
Definition CD_CdrPlasmaStepper.cpp:2786
virtual void postInitialize() override
Post-initialize operations to be performed after filling solvers with initialData.
Definition CD_CdrPlasmaStepper.cpp:48
RefCountedPtr< FieldSolver > m_fieldSolver
Poisson solver.
Definition CD_CdrPlasmaStepper.H:1303
virtual void computeExtrapolatedVelocities(Vector< EBAMRIVData * > &a_cdrVelocitiesEB, const Vector< EBAMRCellData * > &a_cdrVelocitiesCell, const phase::which_phase a_phase)
Extrapolated cell-centered velocities to the EB.
Definition CD_CdrPlasmaStepper.cpp:2674
virtual void parseSolverVerbosity()
Parse solver verbosities.
Definition CD_CdrPlasmaStepper.cpp:3649
virtual Real computeDielectricCurrent()
Compute the ohmic current on dielectrics.
Definition CD_CdrPlasmaStepper.cpp:4036
virtual void computeMaxElectricField(Real &a_maximumElectricField, const phase::which_phase a_phase)
Compute the maximum of the electric field.
Definition CD_CdrPlasmaStepper.cpp:3012
RefCountedPtr< CdrPlasmaPhysics > m_physics
Plasma kinetics.
Definition CD_CdrPlasmaStepper.H:1288
virtual void setupSolvers() override
Instantiate solvers.
Definition CD_CdrPlasmaStepper.cpp:3285
virtual bool stationaryRTE()
Check if RTE solvers are stationary.
Definition CD_CdrPlasmaStepper.cpp:102
virtual void resetDielectricCells(EBAMRIVData &a_data) const
Set data defined over dielectric cells to zero.
Definition CD_CdrPlasmaStepper.cpp:3566
virtual void computeCdrDiffusionCellIrregular(Vector< EBCellFAB * > &a_cdrDcoCell, const Vector< EBCellFAB * > &a_cdrDensities, const EBCellFAB &a_electricFieldCell, const Real a_dx, const Real &a_time, const int a_lvl, const DataIndex &a_dit)
Compute diffusion coefficients on cell centers. This version does the irregular cells.
Definition CD_CdrPlasmaStepper.cpp:1521
Real m_minDt
Minimum allowed time step.
Definition CD_CdrPlasmaStepper.H:1328
virtual void projectDomain(EBAMRIFData &a_projectedFlux, const EBAMRIFData &a_flux)
Project flux onto domain edges/faces.
Definition CD_CdrPlasmaStepper.cpp:3452
RefCountedPtr< RtLayout< RtSolver > > m_rte
Radiative transfer solvers.
Definition CD_CdrPlasmaStepper.H:1298
virtual void setVoltage(std::function< Real(const Real a_time)> a_voltage)
Set voltage curve.
Definition CD_CdrPlasmaStepper.cpp:3626
SourceTermComputation
Enum for switching between source term computations. 'Interpolated' interpolates the cell-centered da...
Definition CD_CdrPlasmaStepper.H:1238
virtual void postRegrid() override
Perform post-regrid operations.
Definition CD_CdrPlasmaStepper.cpp:70
virtual void setupRadiativeTransfer()
Setup the RTE solvers.
Definition CD_CdrPlasmaStepper.cpp:3861
phase::which_phase m_phase
Plasma phase.
Definition CD_CdrPlasmaStepper.H:1273
virtual void computeSpaceChargeDensity()
Compute the centroid-centered space charge density by using the data inside the CDR solvers.
Definition CD_CdrPlasmaStepper.cpp:113
virtual void computePhysicsPlotVars(EBAMRCellData &a_plotVars) const noexcept
Calculate the user-supplied plot variables.
Definition CD_CdrPlasmaStepper.cpp:4583
virtual void synchronizeSolverTimes(const int a_step, const Real a_time, const Real a_dt) override
Synchronize solver times.
Definition CD_CdrPlasmaStepper.cpp:3927
virtual void registerOperators() override
Register operators to be used for the simulation.
Definition CD_CdrPlasmaStepper.cpp:79
virtual void writeJ(LevelData< EBCellFAB > &a_output, int &a_icomp, const std::string &a_outputRealm, const int a_level) const
Compute and put the current density in output data holder.
Definition CD_CdrPlasmaStepper.cpp:4542
std::function< Real(const Real a_time)> m_voltage
Applied voltage as a function of time. Used to set the Poisson solver boundary condition.
Definition CD_CdrPlasmaStepper.H:1323
virtual void postCheckpointSetup() override
Post-initialize operations to be performed after filling solvers with data read from checkpoint files...
Definition CD_CdrPlasmaStepper.cpp:4756
virtual void registerRealms() override
Register realms to be used for the simulation.
Definition CD_CdrPlasmaStepper.cpp:57
virtual void extrapolateVectorToDomainFaces(Vector< EBAMRIFData * > &a_domainData, const phase::which_phase a_phase, const Vector< EBAMRCellData * > &a_cellData)
Extrapolate vector data to domain faces. This is the AMR version that does all species.
Definition CD_CdrPlasmaStepper.cpp:2713
int m_fastPoisson
Solve Poisson every m_fastPoisson steps instead of every step. 0 or 1 means every step.
Definition CD_CdrPlasmaStepper.H:1378
virtual void computeCdrDriftVelocities()
Compute the CDR drift velocities.
Definition CD_CdrPlasmaStepper.cpp:1821
virtual void parseOptions()=0
Parse TimeStepper class options. Must be implemented by subclasses.
virtual void prePlot() override
Pre-plot hook. Computes current density and physics plot variables for output.
Definition CD_CdrPlasmaStepper.cpp:4573
virtual void computeCdrDiffusionEb(Vector< EBAMRIVData * > &a_cdrDcoEB, const Vector< EBAMRIVData * > &a_cdrDensitiesEB, const EBAMRIVData &a_electricFieldEB, const Real &a_time)
Compute diffusion coefficients on the EB. This is the AMR version – it will call the level version.
Definition CD_CdrPlasmaStepper.cpp:1690
virtual void allocateInternals()=0
Allocate internal storage. Must be implemented by subclasses.
Definition CD_CdrPlasmaStepper.cpp:394
virtual void setCdrSolvers(RefCountedPtr< CdrLayout< CdrSolver > > &a_cdr)
Set the CDR layout.
Definition CD_CdrPlasmaStepper.cpp:3253
virtual void regridSolvers(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel)
Regrid all of our solvers.
Definition CD_CdrPlasmaStepper.cpp:3552
virtual void deallocateSolverInternals()
Deallocate internal solver storages.
Definition CD_CdrPlasmaStepper.cpp:3036
virtual void computeCellConductivity(EBAMRCellData &a_cellConductivity) const
Compute the cell-centered conductivity.
Definition CD_CdrPlasmaStepper.cpp:165
Real m_time
Current simulation time in seconds.
Definition CD_CdrPlasmaStepper.H:1348
virtual void solveRadiativeTransfer(const Real a_dt)
Solve the radiative transfer problem.
Definition CD_CdrPlasmaStepper.cpp:3908
virtual int getNumberOfPlotVariables() const override
Get the number of plot variables for this time stepper.
Definition CD_CdrPlasmaStepper.cpp:4371
virtual void preRegridInternals(const int a_lmin, const int a_oldFinestLevel)
Do a preRegrid operation for internal storage (if needed).
Definition CD_CdrPlasmaStepper.cpp:2804
TimeCode
An enum for encapsulating how time steps were restricted.
Definition CD_CdrPlasmaStepper.H:1247
virtual void setupSemiImplicitPoisson(const Real a_dt)
Set up a semi-implicit Poisson solver.
Definition CD_CdrPlasmaStepper.cpp:281
virtual Vector< std::string > getPlotVariableNames() const override
Get plot variable names.
Definition CD_CdrPlasmaStepper.cpp:4406
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override
Regrid method.
Definition CD_CdrPlasmaStepper.cpp:3511
virtual void parseCFL()
Parse the CFL number.
Definition CD_CdrPlasmaStepper.cpp:3661
Class for holding a set of RtSolvers. T must derive from RtSolver.
Definition CD_RtLayout.H:28
Base class for advancing equations.
Definition CD_TimeStepper.H:31
Namespace containing physics models for use with chombo-discharge.
Definition CD_AdvectionDiffusion.H:16
which_phase
Enumeration of supported phases.
Definition CD_MultiFluidIndexSpace.H:38