chombo-discharge
Loading...
Searching...
No Matches
CD_ItoKMCStepper.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_ITOKMCSTEPPER_H
14#define CD_ITOKMCSTEPPER_H
15
16// Std includes
17#include <functional>
18#include <optional>
19
20// Our includes
21#include <CD_TimeStepper.H>
22#include <CD_ItoKMCPhysics.H>
23#include <CD_ItoLayout.H>
24#include <CD_CdrLayout.H>
27#include <CD_RtLayout.H>
28#include <CD_McPhoto.H>
29#include <CD_FieldSolver.H>
30#include <CD_ItoSolver.H>
31#include <CD_CdrCTU.H>
32#include <CD_FieldSolverGMG.H>
33#include <CD_SurfaceODESolver.H>
34#include <CD_NamespaceHeader.H>
35
36namespace Physics {
37namespace ItoKMC {
38
56
64template <typename I = ItoSolver, typename C = CdrCTU, typename R = McPhoto, typename F = FieldSolverGMG>
66{
67public:
68 static_assert(std::is_base_of<ItoSolver, I>::value, "I must derive from ItoSolver");
69 static_assert(std::is_base_of<CdrSolver, C>::value, "C must derive from CdrSolver");
70 static_assert(std::is_base_of<McPhoto, R>::value, "R must derive from McPhoto");
71 static_assert(std::is_base_of<FieldSolver, FieldSolverGMG>::value, "F must derive from FieldSolver");
72
76 ItoKMCStepper() noexcept;
77
82 ItoKMCStepper(RefCountedPtr<ItoKMCPhysics>& a_physics) noexcept;
83
87 virtual ~ItoKMCStepper() noexcept;
88
92 virtual void
93 parseOptions() noexcept;
94
98 virtual void
99 parseRuntimeOptions() noexcept override;
100
104 virtual void
105 allocate() noexcept override;
106
110 virtual void
111 setupSolvers() noexcept override;
112
116 virtual void
117 initialData() noexcept override;
118
124 virtual void
125 postCheckpointSetup() noexcept override;
126
130 virtual void
131 postInitialize() noexcept override;
132
133#ifdef CH_USE_HDF5
138 virtual void
139 writeCheckpointHeader(HDF5HeaderData& a_header) const noexcept override;
140#endif
141
142#ifdef CH_USE_HDF5
147 virtual void
148 readCheckpointHeader(HDF5HeaderData& a_header) noexcept override;
149#endif
150
151#ifdef CH_USE_HDF5
157 virtual void
158 writeCheckpointData(HDF5Handle& a_handle, const int a_lvl) const noexcept override;
159#endif
160
161#ifdef CH_USE_HDF5
167 virtual void
168 readCheckpointData(HDF5Handle& a_handle, const int a_lvl) noexcept override;
169#endif
170
175 virtual int
176 getNumberOfPlotVariables() const noexcept override;
177
182 virtual Vector<std::string>
183 getPlotVariableNames() const noexcept override;
184
192 virtual void
193 writePlotData(LevelData<EBCellFAB>& a_output,
194 int& a_icomp,
195 const std::string& a_outputRealm,
196 const int a_level) const noexcept override;
197
207 virtual Vector<long int>
208 getCheckpointLoads(const std::string& a_realm, const int a_level) const override;
209
215 virtual Real
216 advance(const Real a_dt) override = 0;
217
222 virtual Real
223 computeDt() override;
224
231 virtual void
232 synchronizeSolverTimes(const int a_step, const Real a_time, const Real a_dt) noexcept override;
233
237 virtual void
238 printStepReport() noexcept override;
239
243 virtual void
244 registerRealms() noexcept override;
245
249 virtual void
250 registerOperators() noexcept override;
251
255 virtual void
256 prePlot() noexcept override;
257
261 virtual void
262 postPlot() noexcept override;
263
269 virtual void
270 preRegrid(const int a_lmin, const int a_oldFinestLevel) noexcept override;
271
278 virtual void
279 regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) noexcept override;
280
284 virtual void
285 postRegrid() noexcept override;
286
293 virtual bool
294 loadBalanceThisRealm(const std::string& a_realm) const override;
295
310 virtual void
311 loadBalanceBoxes(Vector<Vector<int>>& a_procs,
312 Vector<Vector<Box>>& a_boxes,
313 const std::string& a_realm,
314 const Vector<DisjointBoxLayout>& a_grids,
315 const int a_lmin,
316 const int a_finestLevel) override;
317
323 virtual void
324 setVoltage(const std::function<Real(const Real a_time)>& a_voltage) noexcept;
325
330 virtual Real
331 getTime() const noexcept;
332
338 virtual void
339 computeElectricField(EBAMRCellData& a_electricField, const phase::which_phase a_phase) const noexcept;
340
341protected:
345 enum class TimeCode
346 {
347 AdvectionIto,
348 DiffusionIto,
349 AdvectionDiffusionIto,
350 AdvectionDiffusionCDR,
351 RelaxationTime,
352 Hardcap,
353 Physics
354 };
355
362 {
367 Mesh,
368
376 };
377
382
387
392 std::string m_fluidRealm;
393
397 std::string m_particleRealm;
398
402 std::string m_name;
403
409
414 RefCountedPtr<ItoKMCPhysics> m_physics;
415
419 RefCountedPtr<ItoLayout<ItoSolver>> m_ito;
420
424 RefCountedPtr<CdrLayout<CdrSolver>> m_cdr;
425
429 RefCountedPtr<RtLayout<McPhoto>> m_rte;
430
434 RefCountedPtr<FieldSolver> m_fieldSolver;
435
439 RefCountedPtr<SurfaceODESolver<1>> m_sigmaSolver;
440
446 Vector<RefCountedPtr<ParticleContainer<ItoParticle>>> m_secondaryParticles;
447
453 Vector<RefCountedPtr<ParticleContainer<Photon>>> m_secondaryPhotons;
454
460 Vector<EBAMRIVData> m_cdrFluxes;
461
465 Vector<EBAMRIVData> m_cdrFluxesExtrap;
466
470 std::function<Real(const Real a_time)> m_voltage;
471
476
483
491
496
501
506
511
516
521
526
532
537
542
547
552
559
564
569
574
579
584
589
594
599
605
610
615
620
625
630
635
640
645
650
654 Vector<EBAMRCellData> m_loadBalancePPC;
655
660 Vector<EBAMRCellData> m_cdrMobilities;
661
666 Vector<EBAMRCellData> m_fluidGradPhiCDR;
667
672 Vector<EBAMRCellData> m_fluidGradPhiIto;
673
677 Vector<EBAMRCellData> m_fluidPhiIto;
678
686 mutable Vector<RefCountedPtr<ParticleContainer<NoPayload>>> m_cdrProducts;
687
695
700
705 EBAMRCellData m_currentDensity;
706
711
715 EBAMRCellData m_neutralDensity;
716
721 EBAMRCellData m_conductivityCell;
722
727 EBAMRFluxData m_conductivityFace;
728
733 EBAMRIVData m_conductivityEB;
734
739 EBAMRCellData m_particleItoPPC;
740
745 EBAMRCellData m_particleYPC;
746
751 EBAMRCellData m_particleEPS;
752
757 EBAMRCellData m_particleOldItoPPC;
758
763 EBAMRCellData m_fluidCdrPPC;
764
769 EBAMRCellData m_fluidOldCdrPPC;
770
775 EBAMRCellData m_fluidPPC;
776
781 EBAMRCellData m_fluidYPC;
782
786 EBAMRCellData m_electricFieldFluid;
787
792
798 EBAMRCellData m_kmcDt;
799
804 Vector<EBAMRCellData> m_energySources;
805
809 EBAMRCellData m_EdotJ;
810
814 mutable EBAMRCellData m_fluidScratch1;
815
819 mutable EBAMRCellData m_fluidScratchD;
820
824 mutable EBAMRCellData m_particleScratch1;
825
829 mutable EBAMRCellData m_particleScratchD;
830
834 mutable EBAMRIVData m_fluidScratchEB;
835
839 mutable EBAMRIVData m_particleScratchEB;
840
849 Vector<EBAMRCellData> m_fluidScratchIto;
850
854 virtual void
855 allocateInternals() noexcept;
856
860 virtual void
861 setupIto() noexcept;
862
866 virtual void
867 setupCdr() noexcept;
868
872 virtual void
873 setupRadiativeTransfer() noexcept;
874
878 virtual void
879 setupPoisson() noexcept;
880
884 virtual void
885 setupSigma() noexcept;
886
897 virtual void
899 const SpeciesSubset a_speciesSubset,
900 const bool a_delete,
901 const std::function<void(ParticleSoA<ItoParticle>&, std::size_t)> a_nonDeletionModifier =
902 [](ParticleSoA<ItoParticle>&, std::size_t) -> void {
903 return;
904 }) noexcept;
905
917 virtual void
919 const SpeciesSubset a_speciesSubset,
920 const ItoSolver::WhichContainer a_containerBulk,
921 const ItoSolver::WhichContainer a_containerEB,
922 const ItoSolver::WhichContainer a_containerDomain,
923 const bool a_delete,
924 const std::function<void(ParticleSoA<ItoParticle>&, std::size_t)> a_nonDeletionModifier =
925 [](ParticleSoA<ItoParticle>&, std::size_t) -> void {
926 return;
927 }) noexcept;
928
936 virtual void
938 const EBRepresentation a_representation,
939 const Real a_tolerance) noexcept;
940
949 virtual void
951 const ItoSolver::WhichContainer a_container,
952 const EBRepresentation a_representation,
953 const Real a_tolerance) noexcept;
954
963 virtual void
964 transferCoveredParticles(const SpeciesSubset a_speciesSubset,
965 const EBRepresentation a_representation,
966 const Real a_tolerance) noexcept;
967
978 virtual void
979 transferCoveredParticles(const SpeciesSubset a_speciesSubset,
980 const ItoSolver::WhichContainer a_containerFrom,
981 const ItoSolver::WhichContainer a_containerTo,
982 const EBRepresentation a_representation,
983 const Real a_tolerance) noexcept;
984
996 virtual void
997 writeData(LevelData<EBCellFAB>& a_output,
998 int& a_comp,
999 const EBAMRCellData& a_data,
1000 const std::string a_outputRealm,
1001 const int a_level,
1002 const bool a_interpToCentroids,
1003 const bool a_interpGhost) const noexcept;
1004
1012 virtual void
1013 writeNumberOfParticlesPerPatch(LevelData<EBCellFAB>& a_output,
1014 int& a_icomp,
1015 const std::string a_outputRealm,
1016 const int a_level) const noexcept;
1017
1025 virtual void
1026 getMaxMinRelativeItoDensity(Real& a_maxDensity,
1027 Real& a_minDensity,
1028 std::string& a_maxSolver,
1029 std::string& a_minSolver) const noexcept;
1030
1038 virtual void
1039 getMaxMinRelativeCDRDensity(Real& a_maxDensity,
1040 Real& a_minDensity,
1041 std::string& a_maxSolver,
1042 std::string& a_minSolver) const noexcept;
1043
1053 virtual void
1054 getParticleStatistics(Real& a_avgParticles,
1055 Real& a_sigma,
1056 Real& a_minParticles,
1057 Real& a_maxParticles,
1058 int& a_minRank,
1059 int& a_maxRank);
1060
1070 virtual void
1071 loadBalanceParticleRealm(Vector<Vector<int>>& a_procs,
1072 Vector<Vector<Box>>& a_boxes,
1073 const std::string a_realm,
1074 const Vector<DisjointBoxLayout>& a_grids,
1075 const int a_lmin,
1076 const int a_finestLevel) noexcept;
1077
1087 virtual void
1088 loadBalanceFluidRealm(Vector<Vector<int>>& a_procs,
1089 Vector<Vector<Box>>& a_boxes,
1090 const std::string a_realm,
1091 const Vector<DisjointBoxLayout>& a_grids,
1092 const int a_lmin,
1093 const int a_finestLevel) noexcept;
1094
1100 virtual Vector<RefCountedPtr<ItoSolver>>
1101 getLoadBalanceSolvers() const noexcept;
1102
1107 virtual void
1108 fillNeutralDensity() noexcept;
1109
1118 virtual Real
1119 computeMaxReducedElectricField(const phase::which_phase a_phase) const noexcept;
1120
1126 virtual void
1127 computeSpaceChargeDensity() noexcept;
1128
1135 virtual void
1136 computeSpaceChargeDensity(MFAMRCellData& a_rho,
1137 const Vector<EBAMRCellData*>& a_itoDensities,
1138 const Vector<EBAMRCellData*>& a_cdrDensities) noexcept;
1139
1145 virtual void
1146 computeConductivityCell(EBAMRCellData& a_conductivity) noexcept;
1147
1154 virtual void
1155 computeConductivityCell(EBAMRCellData& a_conductivity,
1156 const Vector<ParticleContainer<ItoParticle>*>& a_particles) noexcept;
1157
1164 virtual void
1165 computeDensityGradients() noexcept;
1166
1172 virtual void
1173 computeCurrentDensity(EBAMRCellData& a_J) noexcept;
1174
1179 virtual Real
1180 computeRelaxationTime() noexcept;
1181
1188 virtual bool
1189 solvePoisson() noexcept;
1190
1196 virtual void
1197 depositParticles(const SpeciesSubset a_speciesSubset) noexcept;
1198
1204 virtual void
1205 depositParticles(const SpeciesSubset a_speciesSubset, const ItoSolver::WhichContainer a_container) noexcept;
1206
1212 virtual void
1213 remapParticles(const SpeciesSubset a_speciesSubset) noexcept;
1214
1220 virtual void
1221 remapParticles(const SpeciesSubset a_speciesSubset, const ItoSolver::WhichContainer a_container) noexcept;
1222
1227 virtual void
1228 computeDriftVelocities() noexcept;
1229
1234 virtual void
1235 setItoVelocityFunctions() noexcept;
1236
1242 virtual void
1243 setCdrVelocityFunctions() noexcept;
1244
1248 virtual void
1250
1256 virtual void
1257 computeMobilities() noexcept;
1258
1266 virtual void
1267 computeMobilities(Vector<EBAMRCellData*>& a_itoMobilities,
1268 Vector<EBAMRCellData>& a_cdrMobilities,
1269 const EBAMRCellData& a_electricField,
1270 const Real a_time) noexcept;
1271
1280 virtual void
1281 computeMobilities(Vector<LevelData<EBCellFAB>*>& a_itoMobilities,
1282 Vector<LevelData<EBCellFAB>*>& a_cdrMobilities,
1283 const LevelData<EBCellFAB>& a_E,
1284 const int a_level,
1285 const Real a_time) noexcept;
1286
1297 virtual void
1298 computeMobilities(Vector<EBCellFAB*>& a_itoMobilities,
1299 Vector<EBCellFAB*>& a_cdrMobilities,
1300 const EBCellFAB& a_electricField,
1301 const int a_level,
1302 const DataIndex a_din,
1303 const Box a_cellBox,
1304 const Real a_time) noexcept;
1305
1310 virtual void
1312
1322 virtual void
1323 computeDiffusionCoefficients(Vector<EBAMRCellData*>& a_itoDiffusionCoefficients,
1324 Vector<EBAMRCellData*>& a_cdrDiffusionCoefficients,
1325 const EBAMRCellData& a_electricField,
1326 const Real a_time) noexcept;
1327
1338 virtual void
1339 computeDiffusionCoefficients(Vector<LevelData<EBCellFAB>*>& a_itoDiffusionCoefficients,
1340 Vector<LevelData<EBCellFAB>*>& a_cdrDiffusionCoefficients,
1341 const LevelData<EBCellFAB>& a_electricField,
1342 const int a_level,
1343 const Real a_time) noexcept;
1344
1357 virtual void
1358 computeDiffusionCoefficients(Vector<EBCellFAB*>& a_itoDiffusionCoefficients,
1359 Vector<EBCellFAB*>& a_cdrDiffusionCoefficients,
1360 const EBCellFAB& a_E,
1361 const int a_level,
1362 const DataIndex a_din,
1363 const Box a_box,
1364 const Real a_time) noexcept;
1365
1369 virtual void
1371
1376 virtual void
1377 getPhysicalParticlesPerCell(EBAMRCellData& a_ppc) const noexcept;
1378
1385 virtual void
1386 computeReactiveItoParticlesPerCell(EBAMRCellData& a_ppc) noexcept;
1387
1395 virtual void
1396 computeReactiveItoParticlesPerCell(LevelData<EBCellFAB>& a_ppc, const int a_level) noexcept;
1397
1408 virtual void
1409 computeReactiveItoParticlesPerCell(EBCellFAB& a_ppc,
1410 const int a_level,
1411 const DataIndex a_din,
1412 const Box a_box,
1413 const EBISBox& a_ebisbox) noexcept;
1414
1422 virtual void
1423 computeReactiveCdrParticlesPerCell(EBAMRCellData& a_ppc) noexcept;
1424
1432 virtual void
1433 computeReactiveCdrParticlesPerCell(LevelData<EBCellFAB>& a_ppc, const int a_level) noexcept;
1434
1445 virtual void
1446 computeReactiveCdrParticlesPerCell(EBCellFAB& a_ppc,
1447 const int a_level,
1448 const DataIndex a_din,
1449 const Box a_box,
1450 const EBISBox& a_ebisbox) noexcept;
1451
1458 virtual void
1459 computeReactiveMeanEnergiesPerCell(EBAMRCellData& a_meanEnergies) noexcept;
1460
1468 virtual void
1469 computeReactiveMeanEnergiesPerCell(LevelData<EBCellFAB>& a_meanEnergies, const int a_level) noexcept;
1470
1481 virtual void
1482 computeReactiveMeanEnergiesPerCell(EBCellFAB& a_meanEnergies,
1483 const int a_level,
1484 const DataIndex a_din,
1485 const Box a_box,
1486 const EBISBox& a_ebisbox) noexcept;
1487
1494 virtual void
1495 advanceReactionNetwork(const Real a_dt) noexcept;
1496
1504 virtual void
1505 advanceReactionNetwork(const EBAMRCellData& a_E, const Real a_dt) noexcept;
1506
1517 inline void
1518 advanceReactionNetwork(LevelData<EBCellFAB>& a_particlesPerCell,
1519 LevelData<EBCellFAB>& a_newPhotonsPerCell,
1520 const LevelData<EBCellFAB>& a_electricField,
1521 const int a_level,
1522 const Real a_dt) const noexcept;
1523
1537 inline void
1538 advanceReactionNetwork(EBCellFAB& a_particlesPerCell,
1539 EBCellFAB& a_newPhotonsPerCell,
1540 const EBCellFAB& a_electricField,
1541 const int a_level,
1542 const DataIndex a_din,
1543 const Box a_box,
1544 const Real a_dx,
1545 const Real a_dt) const noexcept;
1546
1556 inline void
1557 reconcileParticles(const EBAMRCellData& a_newParticlesPerCell,
1558 const EBAMRCellData& a_oldParticlesPerCell,
1559 const EBAMRCellData& a_newPhotonsPerCell,
1560 const EBAMRCellData& a_cdrProduction,
1561 const EBAMRCellData& a_electricField) const noexcept;
1562
1573 inline void
1574 reconcileParticles(const LevelData<EBCellFAB>& a_newParticlesPerCell,
1575 const LevelData<EBCellFAB>& a_oldParticlesPerCell,
1576 const LevelData<EBCellFAB>& a_newPhotonsPerCell,
1577 const LevelData<EBCellFAB>& a_cdrProduction,
1578 const LevelData<EBCellFAB>& a_electricField,
1579 const int a_level) const noexcept;
1580
1594 inline void
1595 reconcileParticles(const EBCellFAB& a_newParticlesPerCell,
1596 const EBCellFAB& a_oldParticlesPerCell,
1597 const EBCellFAB& a_newPhotonsPerCell,
1598 const EBCellFAB& a_cdrProduction,
1599 const EBCellFAB& a_electricField,
1600 const int a_level,
1601 const DataIndex a_din,
1602 const Box a_box,
1603 const Real a_dx) const noexcept;
1604
1611 virtual void
1612 reconcilePhotoionization() noexcept;
1613
1623 virtual void
1624 depositCdrProducts(EBAMRCellData& a_cdrChange) noexcept;
1625
1632 virtual void
1633 reconcileCdrDensities(const EBAMRCellData& a_cdrChange, const Real a_dt) noexcept;
1634
1642 virtual void
1643 reconcileCdrDensities(const LevelData<EBCellFAB>& a_cdrChange, const int a_level, const Real a_dt) noexcept;
1644
1655 virtual void
1656 reconcileCdrDensities(const EBCellFAB& a_cdrChange,
1657 const int a_level,
1658 const DataIndex a_din,
1659 const Box a_box,
1660 const Real a_dx,
1661 const Real a_dt) noexcept;
1662
1673 virtual void
1674 coarsenCDRSolvers(const bool a_interpGhosts) noexcept;
1675
1693 virtual bool
1694 needSecondaryEmissionEB() const noexcept;
1695
1701 virtual void
1702 fillSecondaryEmissionEB(const Real a_dt) noexcept;
1703
1716 virtual void
1717 fillSecondaryEmissionEB(Vector<RefCountedPtr<ParticleContainer<ItoParticle>>>& a_secondaryParticles,
1718 Vector<EBAMRIVData>& a_cdrFluxes,
1719 Vector<RefCountedPtr<ParticleContainer<Photon>>>& a_secondaryPhotons,
1720 Vector<ParticleContainer<ItoParticle>*>& a_primaryParticles,
1721 Vector<EBAMRIVData>& a_cdrFluxesExtrap,
1722 Vector<ParticleContainer<Photon>*>& a_primaryPhotons,
1723 const EBAMRCellData& a_electricField,
1724 const Real a_dt) noexcept;
1725
1731 virtual void
1732 resolveSecondaryEmissionEB(const Real a_dt) noexcept;
1733
1746 virtual void
1747 resolveSecondaryEmissionEB(Vector<ParticleContainer<ItoParticle>*>& a_secondaryParticles,
1748 Vector<ParticleContainer<ItoParticle>*>& a_primaryParticles,
1749 Vector<EBAMRIVData*>& a_cdrFluxes,
1750 EBAMRIVData& a_surfaceChargeDensity,
1751 const Real a_dt) noexcept;
1752
1761 virtual void
1762 computePhysicsDt() noexcept;
1763
1769 virtual void
1770 computeDummyPhysicsDt() noexcept;
1771
1776 virtual Real
1777 computeTotalCharge() const noexcept;
1778
1783 virtual Real
1784 computeQplus() const noexcept;
1785
1790 virtual Real
1791 computeQminu() const noexcept;
1792
1797 virtual Real
1798 computeQsurf() const noexcept;
1799
1804 virtual void
1805 advancePhotons(const Real a_dt) noexcept;
1806
1811 virtual void
1812 sortPhotonsByCell(const McPhoto::WhichContainer a_which) noexcept;
1813
1818 virtual void
1819 sortPhotonsByPatch(const McPhoto::WhichContainer a_which) noexcept;
1820
1826 virtual void
1827 postCheckpointPoisson() noexcept;
1828
1834 virtual void
1835 computeEdotJSource(const Real a_dt) noexcept;
1836
1840 virtual void
1841 initialSigma() noexcept;
1842
1847 virtual void
1848 parseVerbosity() noexcept;
1849
1853 virtual void
1854 parseExitOnFailure() noexcept;
1855
1859 virtual void
1860 parseRedistributeCDR() noexcept;
1861
1865 virtual void
1866 parseCdrProducts() noexcept;
1867
1874 virtual void
1875 parseSuperParticles() noexcept;
1876
1881 virtual void
1882 parseDualGrid() noexcept;
1883
1887 virtual void
1888 parseLoadBalance() noexcept;
1889
1893 virtual void
1894 parseTimeStepRestrictions() noexcept;
1895
1899 virtual void
1900 parseParametersEB() noexcept;
1901
1905 virtual void
1906 parsePlotVariables() noexcept;
1907
1912 virtual void
1913 computePhysicsPlotVariables(EBAMRCellData& a_physicsPlotVars) noexcept;
1914};
1915} // namespace ItoKMC
1916} // namespace Physics
1917
1918#include <CD_NamespaceFooter.H>
1919
1920#include <CD_ItoKMCStepperImplem.H>
1921
1922#endif
BoxSorting
Enum for sorting boxes.
Definition CD_BoxSorting.H:22
Declaration of a class which implements CdrMultigrid using MUSCL for advection.
Declaration of a class that holds a set of CdrSolvers (to cut down on typing).
EBRepresentation
Enum for putting some logic into how we think about EBs. This is just a simply supporting class for v...
Definition CD_EBRepresentation.H:23
Declaration of FieldSolverGMG.
Contains declaration of a base electrostatics solver class.
Declaration of the Physics::ItoKMC::ItoKMCPhysics abstract base class.
Implementation of CD_ItoKMCStepper.H.
SpeciesSubset
Enum for selecting a subset of plasma species by mobility/diffusion/charge properties.
Definition CD_ItoKMCStepper.H:43
@ ChargedDiffusive
All charged, diffusive species.
@ AllMobileOrDiffusive
All species that are mobile or diffusive.
@ ChargedMobileAndDiffusive
All charged species that are both mobile and diffusive.
@ AllMobileAndDiffusive
All species that are both mobile and diffusive.
@ AllDiffusive
All species with nonzero diffusion coefficient.
@ AllMobile
All species with nonzero mobility.
@ Charged
All charged species (any mobility/diffusion).
@ All
All plasma species.
@ ChargedMobile
All charged, mobile species.
@ ChargedMobileOrDiffusive
All charged species that are mobile or diffusive.
Declaration of a class that holds a set of ItoSolvers.
Declaration of solver class for Ito diffusion.
Declaration of a radiative transfer solver which uses Monte Carlo sampling of computational or real p...
Declaration of an AMR-hierarchy container that owns per-patch ParticleSoA leaves.
Namespace containing various particle management utilities.
Declaration of a class that holds a set of RtSolvers.
Declaration of a cut-cell ODE solver.
Declaration of main (abstract) time stepper class.
Base class for Ito diffusion particle models.
Definition CD_ItoSolver.H:41
WhichContainer
Enum class for distinguishing various types of particle containers.
Definition CD_ItoSolver.H:52
Radiative transfer equation solver using Monte-Carlo simulation.
Definition CD_McPhoto.H:37
AMR-hierarchy container of computational particles, stored per patch in Struct-of-Arrays form.
Definition CD_ParticleContainer.H:123
Arena-backed Struct-of-Arrays particle container for a single grid patch.
Definition CD_ParticleSoA.H:655
Abstract TimeStepper for the Ito-KMC-Poisson system of equations.
Definition CD_ItoKMCStepper.H:66
virtual void transferCoveredParticles(const SpeciesSubset a_speciesSubset, const EBRepresentation a_representation, const Real a_tolerance) noexcept
Transfer covered particles (i.e., particles inside the EB) from the ItoSolver bulk container to EB co...
Definition CD_ItoKMCStepperImplem.H:2596
Real m_relaxationTime
The relaxation time eps0/sigma.
Definition CD_ItoKMCStepper.H:639
virtual void setupCdr() noexcept
Set up the CDR solvers.
Definition CD_ItoKMCStepperImplem.H:530
EBAMRCellData m_particleCdrProduction
Per-cell CDR production from the reaction network, on the particle realm.
Definition CD_ItoKMCStepper.H:694
Vector< RefCountedPtr< ParticleContainer< NoPayload > > > m_cdrProducts
Reaction products to be put in the CDR equations, as particles.
Definition CD_ItoKMCStepper.H:686
Real m_maxReducedField
Storage for the maximum field strength that was computed.
Definition CD_ItoKMCStepper.H:536
bool m_abortOnFailure
Flag for aborting the simulation if the Poisson solver fails to converge.
Definition CD_ItoKMCStepper.H:475
virtual void getParticleStatistics(Real &a_avgParticles, Real &a_sigma, Real &a_minParticles, Real &a_maxParticles, int &a_minRank, int &a_maxRank)
Compute some particle statistics.
Definition CD_ItoKMCStepperImplem.H:1487
RefCountedPtr< SurfaceODESolver< 1 > > m_sigmaSolver
Surface charge solver.
Definition CD_ItoKMCStepper.H:439
virtual void computePhysicsPlotVariables(EBAMRCellData &a_physicsPlotVars) noexcept
Compute physics plot variables.
Definition CD_ItoKMCStepperImplem.H:6414
Vector< EBAMRCellData > m_fluidPhiIto
For holding the Ito species densities on the fluid realm.
Definition CD_ItoKMCStepper.H:677
virtual void computePhysicsDt() noexcept
Compute a physics-based maximum time step.
Definition CD_ItoKMCStepperImplem.H:5616
virtual void computeReactiveMeanEnergiesPerCell(EBAMRCellData &a_meanEnergies) noexcept
Compute the mean particle energy in all grid cells.
Definition CD_ItoKMCStepperImplem.H:3879
EBAMRCellData m_conductivityCell
Cell-centered conductivity.
Definition CD_ItoKMCStepper.H:721
EBAMRCellData m_particleOldItoPPC
For holding the previous number of particles per cell for all species.
Definition CD_ItoKMCStepper.H:757
Real m_particleAdvectionDt
The particle advective time step.
Definition CD_ItoKMCStepper.H:619
Real m_minParticleAdvectionCFL
Minimum CFL-like time step for particle advection.
Definition CD_ItoKMCStepper.H:568
Vector< EBAMRIVData > m_cdrFluxes
CDR fluxes for CDR BCs.
Definition CD_ItoKMCStepper.H:460
virtual void parseRuntimeOptions() noexcept override
Parse runtime configurable options.
Definition CD_ItoKMCStepperImplem.H:173
std::string m_name
Time stepper name.
Definition CD_ItoKMCStepper.H:402
phase::which_phase m_plasmaPhase
Phase where we solve for the plasma.
Definition CD_ItoKMCStepper.H:408
bool m_profile
Profile kernels or not.
Definition CD_ItoKMCStepper.H:500
EBAMRCellData m_neutralDensity
Storage for the neutral density.
Definition CD_ItoKMCStepper.H:715
virtual void computeElectricField(EBAMRCellData &a_electricField, const phase::which_phase a_phase) const noexcept
Recompute the electric field onto the specified data holder.
Definition CD_ItoKMCStepperImplem.H:1970
virtual void removeCoveredParticles(const SpeciesSubset a_which, const EBRepresentation a_representation, const Real a_tolerance) noexcept
Remove covered particles (i.e., particles inside the EB)
Definition CD_ItoKMCStepperImplem.H:2477
BoxSorting m_boxSort
Box sorting method when using dual-grid with particle load balancing.
Definition CD_ItoKMCStepper.H:381
Real m_fluidAdvectionDiffusionCFL
CFL-like time step for fluid advection-diffusion.
Definition CD_ItoKMCStepper.H:598
virtual void setupRadiativeTransfer() noexcept
Set up the radiative transfer solver.
Definition CD_ItoKMCStepperImplem.H:549
Real m_physicsDt
The physics-based time step.
Definition CD_ItoKMCStepper.H:644
EBAMRCellData m_electricFieldParticle
Storage for holding the plasma phase electric field on the particle realm.
Definition CD_ItoKMCStepper.H:791
virtual void registerRealms() noexcept override
Register realms used for the simulation.
Definition CD_ItoKMCStepperImplem.H:1634
Real m_particleAdvectionDiffusionDt
The advection-diffusion time step.
Definition CD_ItoKMCStepper.H:629
virtual void loadBalanceBoxes(Vector< Vector< int > > &a_procs, Vector< Vector< Box > > &a_boxes, const std::string &a_realm, const Vector< DisjointBoxLayout > &a_grids, const int a_lmin, const int a_finestLevel) override
Load balance grid boxes for a specified realm.
Definition CD_ItoKMCStepperImplem.H:5945
virtual Vector< RefCountedPtr< ItoSolver > > getLoadBalanceSolvers() const noexcept
Get the solvers used for load balancing.
Definition CD_ItoKMCStepperImplem.H:5889
virtual void computeSpaceChargeDensity() noexcept
Compute the space charge. Calls the other version.
Definition CD_ItoKMCStepperImplem.H:1997
bool m_plotCurrentDensity
Plot current density or not.
Definition CD_ItoKMCStepper.H:520
Real m_maxShrinkDt
Maximum permissible time step shrinkage.
Definition CD_ItoKMCStepper.H:551
virtual void fillNeutralDensity() noexcept
Compute the neutral density on the mesh.
Definition CD_ItoKMCStepperImplem.H:1877
virtual void setVoltage(const std::function< Real(const Real a_time)> &a_voltage) noexcept
Set voltage used for the simulation.
Definition CD_ItoKMCStepperImplem.H:1865
virtual void advanceReactionNetwork(const Real a_dt) noexcept
Chemistry advance over time a_dt.
Definition CD_ItoKMCStepperImplem.H:4020
virtual Real getTime() const noexcept
Get current simulation time.
Definition CD_ItoKMCStepperImplem.H:1985
virtual Vector< long int > getCheckpointLoads(const std::string &a_realm, const int a_level) const override
Get computational loads to be checkpointed.
Definition CD_ItoKMCStepperImplem.H:6171
virtual void computeDummyPhysicsDt() noexcept
Special routine which performs a dummy KMC advance over a zero time step.
Definition CD_ItoKMCStepperImplem.H:5633
void reconcileParticles(const EBAMRCellData &a_newParticlesPerCell, const EBAMRCellData &a_oldParticlesPerCell, const EBAMRCellData &a_newPhotonsPerCell, const EBAMRCellData &a_cdrProduction, const EBAMRCellData &a_electricField) const noexcept
Reconcile particles. At the bottom, this will call the physics interface for particle reconciliation.
Definition CD_ItoKMCStepperImplem.H:4489
virtual int getNumberOfPlotVariables() const noexcept override
Get number of plot variables for the output file.
Definition CD_ItoKMCStepperImplem.H:985
Real m_loadPerCell
The "background" load per cell when using particle load balancing.
Definition CD_ItoKMCStepper.H:558
EBAMRCellData m_physicsPlotVariables
Storage for physics plot variables.
Definition CD_ItoKMCStepper.H:710
virtual void remapParticles(const SpeciesSubset a_speciesSubset) noexcept
Remap a subset of ItoSolver particles.
Definition CD_ItoKMCStepperImplem.H:2720
Real m_physicsDtFactor
Scaling factor applied to the physics-based time step estimate.
Definition CD_ItoKMCStepper.H:649
bool m_redistributeCDR
Flag for redistributing CDR mass when particles cross the EB.
Definition CD_ItoKMCStepper.H:482
virtual void parseVerbosity() noexcept
Parse chattiness.
Definition CD_ItoKMCStepperImplem.H:201
virtual void computeReactiveCdrParticlesPerCell(EBAMRCellData &a_ppc) noexcept
Compute the number of reactive particles per cell for the CDR solvers.
Definition CD_ItoKMCStepperImplem.H:3772
RefCountedPtr< FieldSolver > m_fieldSolver
Field solver.
Definition CD_ItoKMCStepper.H:434
virtual void registerOperators() noexcept override
Register operators used for the simulation.
Definition CD_ItoKMCStepperImplem.H:1648
EBAMRCellData m_particleScratch1
Scratch storage on the particle realm with 1 component.
Definition CD_ItoKMCStepper.H:824
EBAMRCellData m_EdotJ
Storage for E·J (Ohmic heating) on the fluid realm. 1 component.
Definition CD_ItoKMCStepper.H:809
virtual void loadBalanceParticleRealm(Vector< Vector< int > > &a_procs, Vector< Vector< Box > > &a_boxes, const std::string a_realm, const Vector< DisjointBoxLayout > &a_grids, const int a_lmin, const int a_finestLevel) noexcept
Routine called by loadBalanceBoxes and used for particle-based load balancing.
Definition CD_ItoKMCStepperImplem.H:5967
Vector< RefCountedPtr< ParticleContainer< ItoParticle > > > m_secondaryParticles
List of secondary particles injected through the EB.
Definition CD_ItoKMCStepper.H:446
virtual void averageDiffusionCoefficientsCellToFace() noexcept
Average cell-centered diffusion coefficient to faces.
Definition CD_ItoKMCStepperImplem.H:3582
virtual void parsePlotVariables() noexcept
Parse plot variables.
Definition CD_ItoKMCStepperImplem.H:272
virtual void parseSuperParticles() noexcept
Parse the super-particle merge cadence.
Definition CD_ItoKMCStepperImplem.H:308
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_ItoKMCStepperImplem.H:1143
virtual void computeDensityGradients() noexcept
Compute grad(phi) and phi for both CDR and Ito species and put the result on the fluid realm.
Definition CD_ItoKMCStepperImplem.H:2136
virtual void computeEdotJSource(const Real a_dt) noexcept
Compute the energy source term for the various plasma species.
Definition CD_ItoKMCStepperImplem.H:6220
virtual void parseCdrProducts() noexcept
Parse how the reaction network's CDR production reaches the mesh.
Definition CD_ItoKMCStepperImplem.H:244
EBAMRCellData m_particleItoPPC
For holding the number of physical particles per cell for all Ito species.
Definition CD_ItoKMCStepper.H:739
virtual bool solvePoisson() noexcept
Solve the electrostatic problem.
Definition CD_ItoKMCStepperImplem.H:2253
virtual Real computeQminu() const noexcept
Compute negative charge.
Definition CD_ItoKMCStepperImplem.H:5754
virtual void multiplyCdrVelocitiesByMobilities() noexcept
Multiply CDR solver velocities by mobilities.
Definition CD_ItoKMCStepperImplem.H:3015
virtual void parseRedistributeCDR() noexcept
Parse CDR mass redistribution when assigning reactive products.
Definition CD_ItoKMCStepperImplem.H:230
virtual void computeCurrentDensity(EBAMRCellData &a_J) noexcept
Compute the current density.
Definition CD_ItoKMCStepperImplem.H:2199
TimeCode
An enum for encapsulating how time steps were restricted.
Definition CD_ItoKMCStepper.H:346
Real m_toleranceEB
Accepted tolerance (relative to dx) for EB intersection.
Definition CD_ItoKMCStepper.H:563
virtual void writeNumberOfParticlesPerPatch(LevelData< EBCellFAB > &a_output, int &a_icomp, const std::string a_outputRealm, const int a_level) const noexcept
Write number of particles per patch to output holder.
Definition CD_ItoKMCStepperImplem.H:1210
EBAMRCellData m_fluidScratchD
Scratch storage on the fluid realm with SpaceDim components.
Definition CD_ItoKMCStepper.H:819
bool m_loadBalanceFluid
Load balance fluid realm or not.
Definition CD_ItoKMCStepper.H:510
virtual void parseTimeStepRestrictions() noexcept
Parse time step restrictions.
Definition CD_ItoKMCStepperImplem.H:401
EBAMRIVData m_particleScratchEB
Scratch storage for EB-only data on the particle realm. One component.
Definition CD_ItoKMCStepper.H:839
virtual void fillSecondaryEmissionEB(const Real a_dt) noexcept
Resolve particle injection at EBs.
Definition CD_ItoKMCStepperImplem.H:5157
EBAMRCellData m_particleYPC
For holding the number of generated photons per cell.
Definition CD_ItoKMCStepper.H:745
virtual void initialSigma() noexcept
Fill surface charge solver with initial data taken from the physics interface.
Definition CD_ItoKMCStepperImplem.H:800
virtual void intersectParticles(const SpeciesSubset a_speciesSubset, const bool a_delete, const std::function< void(ParticleSoA< ItoParticle > &, std::size_t)> a_nonDeletionModifier=[](ParticleSoA< ItoParticle > &, std::size_t) -> void { return;}) noexcept
Intersect a subset of the particles with the domain and embedded boundary.
Definition CD_ItoKMCStepperImplem.H:2292
ItoKMCStepper() noexcept
Default constructor. Sets default options.
Definition CD_ItoKMCStepperImplem.H:98
EBAMRCellData m_currentDensity
Storage for current density.
Definition CD_ItoKMCStepper.H:705
virtual void printStepReport() noexcept override
Print a step report. Used by Driver for user monitoring of simulation.
Definition CD_ItoKMCStepperImplem.H:1275
virtual void depositParticles(const SpeciesSubset a_speciesSubset) noexcept
Deposit a subset of the ItoSolver particles on the mesh.
Definition CD_ItoKMCStepperImplem.H:2835
Vector< EBAMRCellData > m_cdrMobilities
For holding the mobilities for the CDR species.
Definition CD_ItoKMCStepper.H:660
virtual void setupSigma() noexcept
Set up the surface charge solver.
Definition CD_ItoKMCStepperImplem.H:586
Vector< EBAMRCellData > m_loadBalancePPC
For holding the number of computational particles per cell when load balancing.
Definition CD_ItoKMCStepper.H:654
CdrProductInjection m_cdrProductInjection
How the reaction network's CDR production is put onto the mesh.
Definition CD_ItoKMCStepper.H:490
virtual void setupSolvers() noexcept override
Set up solvers.
Definition CD_ItoKMCStepperImplem.H:495
EBAMRCellData m_fluidPPC
For holding the number of particles per cell for all species.
Definition CD_ItoKMCStepper.H:775
virtual void parseOptions() noexcept
Parse options.
Definition CD_ItoKMCStepperImplem.H:152
virtual void advancePhotons(const Real a_dt) noexcept
Photon advancement routine.
Definition CD_ItoKMCStepperImplem.H:5810
Real m_minDt
Minimum permitted time step.
Definition CD_ItoKMCStepper.H:609
int m_mergeInterval
How often to merge superparticles.
Definition CD_ItoKMCStepper.H:531
virtual void preRegrid(const int a_lmin, const int a_oldFinestLevel) noexcept override
Perform pre-regrid operations - storing relevant data from the old grids.
Definition CD_ItoKMCStepperImplem.H:1700
virtual void depositCdrProducts(EBAMRCellData &a_cdrChange) noexcept
Deposit the CDR reaction products in m_cdrProducts and add the result to a per-cell change.
Definition CD_ItoKMCStepperImplem.H:4165
EBAMRIVData m_fluidScratchEB
Scratch storage for EB-only data on the fluid realm. One component.
Definition CD_ItoKMCStepper.H:834
virtual void parseDualGrid() noexcept
Parse dual or single realm calculations.
Definition CD_ItoKMCStepperImplem.H:325
Vector< EBAMRCellData > m_fluidScratchIto
Per-Ito-species scratch storage on the fluid realm, one component each.
Definition CD_ItoKMCStepper.H:849
virtual void reconcilePhotoionization() noexcept
Reconcile the results from photoionization reactions.
Definition CD_ItoKMCStepperImplem.H:4895
EBAMRCellData m_fluidScratch1
Scratch storage on the fluid realm having 1 component.
Definition CD_ItoKMCStepper.H:814
virtual void loadBalanceFluidRealm(Vector< Vector< int > > &a_procs, Vector< Vector< Box > > &a_boxes, const std::string a_realm, const Vector< DisjointBoxLayout > &a_grids, const int a_lmin, const int a_finestLevel) noexcept
Routine called by loadBalanceBoxes and used for particle-based load balancing.
Definition CD_ItoKMCStepperImplem.H:6120
EBAMRCellData m_fluidOldCdrPPC
For holding the previous number of physical particles per cell for all CDR species.
Definition CD_ItoKMCStepper.H:769
EBAMRCellData m_kmcDt
Storage for the non-critical time step computed by ItoKMCPhysics.
Definition CD_ItoKMCStepper.H:798
virtual Vector< std::string > getPlotVariableNames() const noexcept override
Get plot variable names.
Definition CD_ItoKMCStepperImplem.H:1038
std::string m_fluidRealm
Realm used for the fluid part (i.e., electrostatic) part of the simulation.
Definition CD_ItoKMCStepper.H:392
virtual void sortPhotonsByCell(const McPhoto::WhichContainer a_which) noexcept
Sort photons by cells.
Definition CD_ItoKMCStepperImplem.H:5861
virtual Real computeQplus() const noexcept
Compute positive charge.
Definition CD_ItoKMCStepperImplem.H:5710
virtual void parseLoadBalance() noexcept
Parse load balancing.
Definition CD_ItoKMCStepperImplem.H:348
virtual void computeDriftVelocities() noexcept
Compute ItoSolver velocities.
Definition CD_ItoKMCStepperImplem.H:3041
EBAMRCellData m_electricFieldFluid
Storage for holding the plasma phase electric field on the fluid realm.
Definition CD_ItoKMCStepper.H:786
Real m_prevDt
Previous time step.
Definition CD_ItoKMCStepper.H:541
std::string m_particleRealm
Realm used for the particle part of the simulation.
Definition CD_ItoKMCStepper.H:397
EBAMRCellData m_particleScratchD
Scratch storage on the particle realm with SpaceDim components.
Definition CD_ItoKMCStepper.H:829
Real m_fluidAdvectionDiffusionDt
The advection-diffusion time step for the CDR equations.
Definition CD_ItoKMCStepper.H:634
Vector< EBAMRCellData > m_fluidGradPhiCDR
For holding the gradient of all CDR species densities.
Definition CD_ItoKMCStepper.H:666
virtual void setupPoisson() noexcept
Set up the electrostatic field solver.
Definition CD_ItoKMCStepperImplem.H:569
Real m_relaxTimeFactor
Factor proportional to the dielectric relaxation time dtRelax = eps0/sigma.
Definition CD_ItoKMCStepper.H:604
RefCountedPtr< CdrLayout< CdrSolver > > m_cdr
CDR solvers.
Definition CD_ItoKMCStepper.H:424
virtual void setupIto() noexcept
Set up the Ito particle solvers.
Definition CD_ItoKMCStepperImplem.H:511
virtual Real computeQsurf() const noexcept
Compute surface charge.
Definition CD_ItoKMCStepperImplem.H:5798
virtual Real computeDt() override
Compute a time step used for the advance method.
Definition CD_ItoKMCStepperImplem.H:1519
virtual void synchronizeSolverTimes(const int a_step, const Real a_time, const Real a_dt) noexcept override
Synchronize solver times for all the solvers.
Definition CD_ItoKMCStepperImplem.H:1256
virtual Real computeTotalCharge() const noexcept
Compute total charge.
Definition CD_ItoKMCStepperImplem.H:5690
virtual void resolveSecondaryEmissionEB(const Real a_dt) noexcept
Resolve secondary emission at the EB.
Definition CD_ItoKMCStepperImplem.H:5461
Real m_maxDt
Maximum permitted time step.
Definition CD_ItoKMCStepper.H:614
TimeCode m_timeCode
Time code for understanding how the time step was restricted.
Definition CD_ItoKMCStepper.H:386
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) noexcept override
Regrid methods – puts all data on the new mesh.
Definition CD_ItoKMCStepperImplem.H:1810
virtual void coarsenCDRSolvers(const bool a_interpGhosts) noexcept
Coarsen data for CDR solvers.
Definition CD_ItoKMCStepperImplem.H:5096
Real m_minParticleAdvectionDiffusionCFL
Maximum CFL-like time step for particle advection-diffusion.
Definition CD_ItoKMCStepper.H:588
EBAMRCellData m_fluidCdrPPC
For holding the number of physical particles per cell for all CDR species.
Definition CD_ItoKMCStepper.H:763
EBAMRFluxData m_conductivityFace
Face-centered conductivity.
Definition CD_ItoKMCStepper.H:727
virtual void computeDiffusionCoefficients() noexcept
Compute mesh-based diffusion coefficients for LFA coupling.
Definition CD_ItoKMCStepperImplem.H:3299
virtual void allocateInternals() noexcept
Allocate "internal" storage.
Definition CD_ItoKMCStepperImplem.H:621
virtual bool loadBalanceThisRealm(const std::string &a_realm) const override
Load balancing query for a specified realm. If this returns true for a_realm, load balancing routines...
Definition CD_ItoKMCStepperImplem.H:5924
bool m_plotParticlesPerPatch
Plot number of particles per patch or not.
Definition CD_ItoKMCStepper.H:525
virtual Real computeMaxReducedElectricField(const phase::which_phase a_phase) const noexcept
Compute the maximum electric field (norm)
Definition CD_ItoKMCStepperImplem.H:1934
EBAMRIVData m_conductivityEB
EB-centered conductivity.
Definition CD_ItoKMCStepper.H:733
Vector< EBAMRIVData > m_cdrFluxesExtrap
Extrapolated CDR fluxes.
Definition CD_ItoKMCStepper.H:465
Real m_maxParticleAdvectionCFL
Maximum CFL-like time step for particle advection.
Definition CD_ItoKMCStepper.H:573
virtual void setCdrVelocityFunctions() noexcept
Set the Cdr velocities to be sgn(charge) * E.
Definition CD_ItoKMCStepperImplem.H:2981
virtual void postRegrid() noexcept override
Perform post-regrid operations.
Definition CD_ItoKMCStepperImplem.H:1852
virtual Real computeRelaxationTime() noexcept
Compute the dielectric relaxation time.
Definition CD_ItoKMCStepperImplem.H:2218
virtual void parseParametersEB() noexcept
Parse parameters related to how we treat particle-EB interaction.
Definition CD_ItoKMCStepperImplem.H:479
virtual Real advance(const Real a_dt) override=0
Advancement method. Needs to be implemented by subclasses.
virtual void initialData() noexcept override
Fill solvers with initial data.
Definition CD_ItoKMCStepperImplem.H:763
Real m_maxParticleDiffusionCFL
Maximum CFL-like time step for particle diffusion.
Definition CD_ItoKMCStepper.H:583
virtual void postPlot() noexcept override
Perform post-plot operations.
Definition CD_ItoKMCStepperImplem.H:1688
virtual ~ItoKMCStepper() noexcept
Destructor.
Definition CD_ItoKMCStepperImplem.H:145
RefCountedPtr< ItoKMCPhysics > m_physics
Implementation of ItoKMCPhysics.
Definition CD_ItoKMCStepper.H:414
virtual void getMaxMinRelativeItoDensity(Real &a_maxDensity, Real &a_minDensity, std::string &a_maxSolver, std::string &a_minSolver) const noexcept
Get maximum density of the Ito species (only for charged species)
Definition CD_ItoKMCStepperImplem.H:1392
virtual void computeReactiveItoParticlesPerCell(EBAMRCellData &a_ppc) noexcept
Compute the number of reactive particles per cell.
Definition CD_ItoKMCStepperImplem.H:3648
virtual bool needSecondaryEmissionEB() const noexcept
Whether anything can be emitted from the EB this step, answered globally.
Definition CD_ItoKMCStepperImplem.H:5126
bool m_dualGrid
Using dual grid or not.
Definition CD_ItoKMCStepper.H:495
EBAMRCellData m_fluidYPC
For holding the number of generated photons per cell.
Definition CD_ItoKMCStepper.H:781
virtual void allocate() noexcept override
Allocate storage for solvers.
Definition CD_ItoKMCStepperImplem.H:603
RefCountedPtr< RtLayout< McPhoto > > m_rte
Radiative transfer solvers.
Definition CD_ItoKMCStepper.H:429
bool m_plotConductivity
Plot conductivity or not.
Definition CD_ItoKMCStepper.H:515
virtual void parseExitOnFailure() noexcept
Parse exit on failure.
Definition CD_ItoKMCStepperImplem.H:216
RefCountedPtr< ItoLayout< ItoSolver > > m_ito
Ito solvers.
Definition CD_ItoKMCStepper.H:419
Vector< int > m_loadBalanceIndices
Solver indices used when load-balancing the particle solvers.
Definition CD_ItoKMCStepper.H:699
EBAMRCellData m_particleEPS
For holding the mean particle energy.
Definition CD_ItoKMCStepper.H:751
std::function< Real(const Real a_time)> m_voltage
Voltage curve on the electrodes used in the simulation.
Definition CD_ItoKMCStepper.H:470
virtual void computeConductivityCell(EBAMRCellData &a_conductivity) noexcept
Compute the cell-centered conductiivty.
Definition CD_ItoKMCStepperImplem.H:2068
Real m_minParticleDiffusionCFL
Minimum CFL-like time step for particle diffusion.
Definition CD_ItoKMCStepper.H:578
virtual void postCheckpointPoisson() noexcept
Do some post-checkpoint operations for the electrostatic part.
Definition CD_ItoKMCStepperImplem.H:868
virtual void reconcileCdrDensities(const EBAMRCellData &a_cdrChange, const Real a_dt) noexcept
Reconcile the CDR densities after the reaction network.
Definition CD_ItoKMCStepperImplem.H:4953
virtual void prePlot() noexcept override
Perform pre-plot operations.
Definition CD_ItoKMCStepperImplem.H:1667
virtual void postInitialize() noexcept override
Post-initialization operations. Default does nothing.
Definition CD_ItoKMCStepperImplem.H:753
CdrProductInjection
How the reaction network's CDR production is put onto the mesh.
Definition CD_ItoKMCStepper.H:362
@ Particle
Emit the production as particles and deposit it with the Ito solvers' deposition.
@ Mesh
Add the production directly into the cell that produced it.
Real m_maxParticleAdvectionDiffusionCFL
Maximum CFL-like time step for particle advection-diffusion.
Definition CD_ItoKMCStepper.H:593
virtual void postCheckpointSetup() noexcept override
Perform post-checkpoint operations.
Definition CD_ItoKMCStepperImplem.H:849
Vector< RefCountedPtr< ParticleContainer< Photon > > > m_secondaryPhotons
List of secondary photons injected through the EB.
Definition CD_ItoKMCStepper.H:453
Real m_particleDiffusionDt
The particle diffusive time step.
Definition CD_ItoKMCStepper.H:624
virtual void getMaxMinRelativeCDRDensity(Real &a_maxDensity, Real &a_minDensity, std::string &a_maxSolver, std::string &a_minSolver) const noexcept
Get maximum density of the CDR species (only for charged species)
Definition CD_ItoKMCStepperImplem.H:1440
Vector< EBAMRCellData > m_energySources
Storage for holding the energy sources for each species.
Definition CD_ItoKMCStepper.H:804
virtual void writePlotData(LevelData< EBCellFAB > &a_output, int &a_icomp, const std::string &a_outputRealm, const int a_level) const noexcept override
Write plot data to output holder.
Definition CD_ItoKMCStepperImplem.H:1089
Real m_maxGrowthDt
Maximum permissible time step growth.
Definition CD_ItoKMCStepper.H:546
virtual void computeMobilities() noexcept
Compute mesh-based mobilities for LFA coupling.
Definition CD_ItoKMCStepperImplem.H:3066
virtual void setItoVelocityFunctions() noexcept
Set the Ito velocity functions. This is sgn(charge) * E.
Definition CD_ItoKMCStepperImplem.H:2950
Vector< EBAMRCellData > m_fluidGradPhiIto
For holding the gradient of all Ito species densities.
Definition CD_ItoKMCStepper.H:672
bool m_loadBalanceParticles
Load balance particle realm or not.
Definition CD_ItoKMCStepper.H:505
virtual void sortPhotonsByPatch(const McPhoto::WhichContainer a_which) noexcept
Sort photons by patch.
Definition CD_ItoKMCStepperImplem.H:5875
virtual void getPhysicalParticlesPerCell(EBAMRCellData &a_ppc) const noexcept
Get the physical number of particles per cell.
Definition CD_ItoKMCStepperImplem.H:3626
Base class for advancing equations.
Definition CD_TimeStepper.H:32
Namespace containing physics models for use with chombo-discharge.
Definition CD_AdvectionDiffusion.H:16
Phase names namespace.
Definition CD_MultiFluidIndexSpace.H:28
which_phase
Enumeration of supported phases.
Definition CD_MultiFluidIndexSpace.H:38
SoA payload for ItoSolver particles, i.e. drifting Brownian walkers.
Definition CD_ItoParticle.H:31
SoA payload for Monte Carlo radiative-transfer photons.
Definition CD_Photon.H:29