chombo-discharge
Loading...
Searching...
No Matches
CD_McPhoto.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_MCPHOTO_H
14#define CD_MCPHOTO_H
15
16// Std includes
17#include <random>
18
19// Our includes
20#include <CD_RtSolver.H>
21#include <CD_EBParticleMesh.H>
23#include <CD_Photon.H>
25#include <CD_NamespaceHeader.H>
26
36class McPhoto : public RtSolver
37{
38public:
42 enum class WhichContainer
43 {
44 Photons,
45 Bulk,
46 EB,
47 Domain,
48 Source
49 };
50
54 McPhoto();
55
60 McPhoto(const McPhoto& a_other);
61
66 McPhoto(const McPhoto&& a_other);
67
73 McPhoto&
74 operator=(const McPhoto& a_other);
75
81 McPhoto&
82 operator=(const McPhoto&& a_other);
83
87 virtual ~McPhoto();
88
105 virtual bool
106 advance(const Real a_dt, EBAMRCellData& a_phi, const EBAMRCellData& a_source, const bool a_zeroPhi = false) override;
107
112 virtual bool
114
124 virtual void
126 ParticleContainer<Photon>& a_ebPhotons,
127 ParticleContainer<Photon>& a_domainPhotons,
128 ParticleContainer<Photon>& a_photons);
129
141 virtual void
143 ParticleContainer<Photon>& a_ebPhotons,
144 ParticleContainer<Photon>& a_domainPhotons,
145 ParticleContainer<Photon>& a_photons,
146 const Real a_dt);
147
156 virtual void
157 computeNumPhysicalPhotons(EBAMRCellData& a_numPhysPhotonsTotal,
158 EBAMRCellData& a_numPhysPhotonsPacket,
159 const EBAMRCellData& a_source,
160 const Real a_dt) const noexcept;
161
168 virtual void
170 const EBAMRCellData& a_numPhysPhotons,
171 const size_t a_maxPhotonsPerCell) const noexcept;
172
183 virtual void
185 EBAMRCellData& a_phi,
186 const EBAMRCellData& a_numPhysicalPhotons,
187 const size_t a_maxPhotonsPerCell) const noexcept;
188
192 virtual void
193 remap();
194
199 virtual void
201
206 virtual void
208
217 void
218 depositPhotons(EBAMRCellData& a_phi,
219 ParticleContainer<Photon>& a_photons,
220 const DepositionType& a_deposition) const noexcept;
221
227 virtual void
228 sortPhotonsByCell(const WhichContainer& a_which);
229
235 virtual void
236 sortPhotonsByPatch(const WhichContainer& a_which);
237
241 virtual void
242 parseOptions() override;
243
247 virtual void
248 parseRuntimeOptions() override;
249
253 virtual void
254 allocate() override;
255
261 virtual void
262 preRegrid(const int a_lmin, const int a_oldFinestLevel) override;
263
267 virtual void
268 deallocate() override;
269
276 virtual void
277 regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override;
278
282 virtual void
283 registerOperators() override;
284
291 virtual void
292 computeBoundaryFlux(EBAMRIVData& a_ebFlux, const EBAMRCellData& a_phi) override;
293
300 virtual void
301 computeDomainFlux(EBAMRIFData& a_domainFlux, const EBAMRCellData& a_phi) override;
302
309 virtual void
310 computeFlux(EBAMRCellData& a_flux, const EBAMRCellData& a_phi) override;
311
318 virtual void
319 computeDensity(EBAMRCellData& a_isotropic, const EBAMRCellData& a_phi) override;
320
325 virtual void
326 clear(const WhichContainer& a_which);
327
331 virtual void
332 clear();
333
338 virtual void
340
345 virtual void
346 writePlotFile() override;
347
355 virtual void
356 writePlotData(LevelData<EBCellFAB>& a_output,
357 int& a_comp,
358 const std::string& a_outputRealm,
359 const int a_level) const noexcept override;
360
361#ifdef CH_USE_HDF5
367 virtual void
368 writeCheckpointLevel(HDF5Handle& a_handle, const int a_level) const override;
369#endif
370
371#ifdef CH_USE_HDF5
377 virtual void
378 readCheckpointLevel(HDF5Handle& a_handle, const int a_level) override;
379#endif
380
385 virtual Vector<std::string>
386 getPlotVariableNames() const override;
387
392 virtual int
393 getNumberOfPlotVariables() const override;
394
400 virtual int
401 countPhotons(const ParticleContainer<Photon>& a_photons) const;
402
408 getPhotons();
409
416
422 getEbPhotons();
423
430
437
442 virtual int
443 getMaxPhotonsPerCell() const noexcept;
444
449 virtual int
450 getNumSamplingPackets() const noexcept;
451
462 virtual void
463 computeLoads(Vector<long long>& a_loads, const DisjointBoxLayout& a_dbl, const int a_level) const noexcept override;
464
465protected:
470 {
471 Deterministic,
472 Stochastic
473 };
474
478 enum class SourceType
479 {
480 Number,
481 PerVol,
482 PerVolSecond,
483 PerSecond
484 };
485
493 enum class IntersectionEB
494 {
495 Raycast,
496 Bisection,
497 };
498
503
508
514
519
524
529
534
539
544
549
554
559
565
570
575
580
585
591
596
601
605 mutable EBAMRCellData m_scratch;
606
610 mutable EBAMRIVData m_depositionNC;
611
615 mutable EBAMRIVData m_massDiff;
616
621
626
631
636
641
650 size_t
651 drawPhotons(const Real a_source, const Real a_volume, const Real a_dt) const noexcept;
652
659 static int
660 domainBcMap(const int a_dir, const Side::LoHiSide a_side);
661
667 static Real
668 randomExponential(const Real a_rate) noexcept;
669
677 void
678 depositHybridDivergence(EBAMRCellData& a_phi) const noexcept;
679
685 void
686 depositNonConservative(EBAMRIVData& a_depositionNC, const EBAMRCellData& a_depositionKappaC) const noexcept;
687
694 void
695 depositHybrid(EBAMRCellData& a_depositionH,
696 EBAMRIVData& a_massDifference,
697 const EBAMRIVData& a_depositionNC) const noexcept;
698
702 void
704
711 void
713
717 void
719
723 void
725
729 void
731
735 void
737
741 void
743
747 void
749
753 void
755
759 void
761
768 virtual void
769 depositPhotonsNGP(LevelData<EBCellFAB>& a_output,
770 const ParticleContainer<Photon>& a_photons,
771 const int a_level) const noexcept;
772};
773
774#include <CD_NamespaceFooter.H>
775
776#endif
CoarseFineDeposition
Coarse-fine deposition types (see CD_EBAMRParticleMesh for how these are handled).
Definition CD_CoarseFineDeposition.H:28
DepositionType
Deposition types.
Definition CD_DepositionType.H:24
Single-patch ParticleSoA deposit/interpolate onto an embedded-boundary mesh.
Declaration of cut-cell deposition strategies.
IrregularDeposition
How a deposition scheme treats the cut cells.
Definition CD_IrregularDeposition.H:36
Declaration of an AMR-hierarchy container that owns per-patch ParticleSoA leaves.
SoA payload for Monte Carlo radiative-transfer photons.
Abstract parent class for various radiative transfer solvers.
Radiative transfer equation solver using Monte-Carlo simulation.
Definition CD_McPhoto.H:37
void depositNonConservative(EBAMRIVData &a_depositionNC, const EBAMRCellData &a_depositionKappaC) const noexcept
Make the "non-conservative" kappa deposition.
Definition CD_McPhoto.cpp:1374
bool m_plotDomainPhotons
Check if m_ebPhotons should be plotted.
Definition CD_McPhoto.H:548
ParticleContainer< Photon > m_domainPhotons
This is a particle container for Photons that crossed boundaries. It is filled during the advance ste...
Definition CD_McPhoto.H:635
virtual int getNumberOfPlotVariables() const override
Get number of output variables.
Definition CD_McPhoto.cpp:837
bool m_transparentEB
Turn on/off transparent boundaries.
Definition CD_McPhoto.H:502
ParticleContainer< Photon > m_sourcePhotons
This is a particle container that can be used to add Photons directly.
Definition CD_McPhoto.H:640
virtual void computeFlux(EBAMRCellData &a_flux, const EBAMRCellData &a_phi) override
Compute the flux.
Definition CD_McPhoto.cpp:729
void parseInstantaneous()
Parse whether instantaneous propagation or not.
Definition CD_McPhoto.cpp:246
void parseIntersectionEB()
Parse EB intersection algorithm.
Definition CD_McPhoto.cpp:340
SourceType m_sourceType
Source type.
Definition CD_McPhoto.H:584
IntersectionEB m_intersectionEB
Intersection e b.
Definition CD_McPhoto.H:590
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override
Regrid function for this class.
Definition CD_McPhoto.cpp:577
size_t drawPhotons(const Real a_source, const Real a_volume, const Real a_dt) const noexcept
Draw photons in a cell and volume.
Definition CD_McPhoto.cpp:977
virtual ParticleContainer< Photon > & getDomainPhotons()
Get domain photons, i.e. photons absorbed on domain edges/faces.
Definition CD_McPhoto.cpp:2021
virtual void writePlotData(LevelData< EBCellFAB > &a_output, int &a_comp, const std::string &a_outputRealm, const int a_level) const noexcept override
Write plot data.
Definition CD_McPhoto.cpp:1869
WhichContainer
Enum class for identifying various containers. Only used for interface reasons.
Definition CD_McPhoto.H:43
virtual void computeDensity(EBAMRCellData &a_isotropic, const EBAMRCellData &a_phi) override
Compute isotropic radiative density from mesh solution.
Definition CD_McPhoto.cpp:743
virtual ParticleContainer< Photon > & getEbPhotons()
Get eb Photons, i.e. photons absorbed on the EB.
Definition CD_McPhoto.cpp:2010
void depositHybridDivergence(EBAMRCellData &a_phi) const noexcept
Shared hybrid-divergence tail for the deposition routines.
Definition CD_McPhoto.cpp:1333
virtual ~McPhoto()
Destructor.
bool m_depositNumber
If true, the NUMBER of of Photons will be deposited in each cell.
Definition CD_McPhoto.H:518
IrregularDeposition m_irregularDeposition
How the cut cells are treated when depositing.
Definition CD_McPhoto.H:513
DepositionType m_deposition
Deposition type.
Definition CD_McPhoto.H:595
size_t m_maxPhotonsGeneratedPerCell
Number of computational photons generated per cell.
Definition CD_McPhoto.H:558
bool m_dirtySampling
Dirty sampling or not.
Definition CD_McPhoto.H:553
void parseTransparentBoundaries()
Turn on/off transparent boundaries.
Definition CD_McPhoto.cpp:199
virtual void computeNumPhysicalPhotons(EBAMRCellData &a_numPhysPhotonsTotal, EBAMRCellData &a_numPhysPhotonsPacket, const EBAMRCellData &a_source, const Real a_dt) const noexcept
Compute the number of physical photons in each grid cell.
Definition CD_McPhoto.cpp:890
void parseDirtySampling()
Parse dirty sampling for photons.
Definition CD_McPhoto.cpp:212
virtual void computeBoundaryFlux(EBAMRIVData &a_ebFlux, const EBAMRCellData &a_phi) override
Compute the boundary flux.
Definition CD_McPhoto.cpp:707
bool m_instantaneous
Instantaneous transport or not.
Definition CD_McPhoto.H:507
void parseSourceType()
Parse source term type.
Definition CD_McPhoto.cpp:310
ParticleContainer< Photon > m_bulkPhotons
Photons absorbed in the volume.
Definition CD_McPhoto.H:625
void parsePhotoGeneration()
Parse photogeneration type.
Definition CD_McPhoto.cpp:286
Real m_bisectStep
Bisection step for when we use the bisection intersection algorithm.
Definition CD_McPhoto.H:574
virtual void deallocate() override
Deallocate internal storage.
Definition CD_McPhoto.cpp:562
void parsePseudoPhotons()
Parse pseudophotons, i.e. parse how many photons can be generated per cell.
Definition CD_McPhoto.cpp:259
IntersectionEB
An enum for switching between various types of EB intersection algorithms when intersecting photons w...
Definition CD_McPhoto.H:494
virtual void computeDomainFlux(EBAMRIFData &a_domainFlux, const EBAMRCellData &a_phi) override
Compute the domain flux.
Definition CD_McPhoto.cpp:718
virtual void advancePhotonsTransient(ParticleContainer< Photon > &a_bulkPhotons, ParticleContainer< Photon > &a_ebPhotons, ParticleContainer< Photon > &a_domainPhotons, ParticleContainer< Photon > &a_photons, const Real a_dt)
Move photons and absorb them on various objects.
Definition CD_McPhoto.cpp:1651
McPhoto(const McPhoto &a_other)
Disallowed copy constructor.
EBAMRIVData m_massDiff
Scratch storage for holding the mass difference when using hybrid deposition.
Definition CD_McPhoto.H:615
bool m_plotPhotons
Check if m_photons should be plotted.
Definition CD_McPhoto.H:528
virtual void remap()
Remap computational particles. This remaps m_photons.
Definition CD_McPhoto.cpp:1836
virtual void allocate() override
Allocate internal storage.
Definition CD_McPhoto.cpp:522
bool m_plotNumbers
Switch for plotting numbers or densities.
Definition CD_McPhoto.H:523
McPhoto()
Constructor.
Definition CD_McPhoto.cpp:34
virtual void computeLoads(Vector< long long > &a_loads, const DisjointBoxLayout &a_dbl, const int a_level) const noexcept override
Get computational loads for a specific grid level. This computes the number of photons in the bulk da...
Definition CD_McPhoto.cpp:2065
virtual void preRegrid(const int a_lmin, const int a_oldFinestLevel) override
preRegrid operations
Definition CD_McPhoto.cpp:545
bool m_plotEBPhotons
Check if m_ebPhotons should be plotted.
Definition CD_McPhoto.H:543
virtual Vector< std::string > getPlotVariableNames() const override
Get output plot names.
Definition CD_McPhoto.cpp:802
virtual ParticleContainer< Photon > & getPhotons()
Get m_photons.
Definition CD_McPhoto.cpp:1988
static int domainBcMap(const int a_dir, const Side::LoHiSide a_side)
Mapping function for domain boundary conditions.
Definition CD_McPhoto.cpp:872
virtual ParticleContainer< Photon > & getSourcePhotons()
Get source photons.
Definition CD_McPhoto.cpp:2032
virtual ParticleContainer< Photon > & getBulkPhotons()
Get bulk photons, i.e. photons absorbed on the mesh.
Definition CD_McPhoto.cpp:1999
void depositHybrid(EBAMRCellData &a_depositionH, EBAMRIVData &a_massDifference, const EBAMRIVData &a_depositionNC) const noexcept
Make the hybrid deposition. Also compute the mass difference.
Definition CD_McPhoto.cpp:1390
virtual void clear()
Clear data holder.
Definition CD_McPhoto.cpp:500
virtual void parseOptions() override
Parse class options.
Definition CD_McPhoto.cpp:157
ParticleContainer< Photon > m_ebPhotons
This is a particle container for Photons that crossed EBs. It is filled during the advance step.
Definition CD_McPhoto.H:630
virtual void parseRuntimeOptions() override
Parse runtime options.
Definition CD_McPhoto.cpp:178
CoarseFineDeposition m_coarseFineDeposition
Coarse-fine deposition strategy.
Definition CD_McPhoto.H:600
virtual void dirtySamplePhotons(ParticleContainer< NoPayload > &a_photons, EBAMRCellData &a_phi, const EBAMRCellData &a_numPhysicalPhotons, const size_t a_maxPhotonsPerCell) const noexcept
Dirty-sampling method for photons.
Definition CD_McPhoto.cpp:1145
void parseDivergenceComputation()
Parse the divergence computation, i.e. if we blend with non-conservative divergence or not.
Definition CD_McPhoto.cpp:227
PhotonGeneration
Enum for interpreting how photons are generated when using fluid codes.
Definition CD_McPhoto.H:470
virtual void sortPhotonsByPatch(const WhichContainer &a_which)
Sort container by patch.
Definition CD_McPhoto.cpp:645
SourceType
Enum for adding flexibility in what the fluid source term contains.
Definition CD_McPhoto.H:479
ParticleContainer< Photon > m_photons
All particles.
Definition CD_McPhoto.H:620
virtual void writePlotFile() override
Write plot file.
Definition CD_McPhoto.cpp:755
virtual void depositPhotons()
Deposit photons on the mesh.
Definition CD_McPhoto.cpp:1303
void parseDeposition()
Parse deposition method.
Definition CD_McPhoto.cpp:366
int m_numSamplingPackets
Num sampling packets.
Definition CD_McPhoto.H:564
McPhoto(const McPhoto &&a_other)
Disallowed move constructor.
virtual void advancePhotonsInstantaneous(ParticleContainer< Photon > &a_bulkPhotons, ParticleContainer< Photon > &a_ebPhotons, ParticleContainer< Photon > &a_domainPhotons, ParticleContainer< Photon > &a_photons)
Move photons and absorb them on various objects.
Definition CD_McPhoto.cpp:1482
PhotonGeneration m_photoGenerationMethod
Photon generation type.
Definition CD_McPhoto.H:579
McPhoto & operator=(const McPhoto &&a_other)
Disallowed move assignment operator.
virtual int countPhotons(const ParticleContainer< Photon > &a_photons) const
Count number of photons in particle list.
Definition CD_McPhoto.cpp:1858
void parsePlotVariables()
Parse plot variables.
Definition CD_McPhoto.cpp:412
int m_seed
RNG seed.
Definition CD_McPhoto.H:569
virtual int getMaxPhotonsPerCell() const noexcept
Get maximum number of photons generated per cell.
Definition CD_McPhoto.cpp:2043
McPhoto & operator=(const McPhoto &a_other)
Disallowed assignment operator.
virtual void sortPhotonsByCell(const WhichContainer &a_which)
Sort container by cell.
Definition CD_McPhoto.cpp:603
virtual int getNumSamplingPackets() const noexcept
Get maximum number of photons generated per cell.
Definition CD_McPhoto.cpp:2054
virtual bool advance(const Real a_dt, EBAMRCellData &a_phi, const EBAMRCellData &a_source, const bool a_zeroPhi=false) override
Advance RTE and deposit photon particles on the mesh.
Definition CD_McPhoto.cpp:47
virtual void generateComputationalPhotons(ParticleContainer< Photon > &a_photons, const EBAMRCellData &a_numPhysPhotons, const size_t a_maxPhotonsPerCell) const noexcept
Generate computational photons.
Definition CD_McPhoto.cpp:1019
virtual void depositPhotonsNGP(LevelData< EBCellFAB > &a_output, const ParticleContainer< Photon > &a_photons, const int a_level) const noexcept
Do an NGP deposit on a specific grid level. Used for IO.
Definition CD_McPhoto.cpp:1438
EBAMRIVData m_depositionNC
Scratch storage for holding the non-conservative deposition.
Definition CD_McPhoto.H:610
virtual void registerOperators() override
Register operators that this solver needs.
Definition CD_McPhoto.cpp:687
static Real randomExponential(const Real a_rate) noexcept
Random exponential trial.
Definition CD_McPhoto.cpp:880
EBAMRCellData m_scratch
Coarse data for interpolation of deposition clouds.
Definition CD_McPhoto.H:605
virtual bool isInstantaneous()
Instantaneous solver or not.
Definition CD_McPhoto.cpp:151
bool m_plotSourcePhotons
Check if source_bulkPhotons should be plotted.
Definition CD_McPhoto.H:538
bool m_plotBulkPhotons
Check if m_bulkPhotons should be plotted.
Definition CD_McPhoto.H:533
AMR-hierarchy container of computational particles, stored per patch in Struct-of-Arrays form.
Definition CD_ParticleContainer.H:123
Abstract RTE solver class for doing various kinds of radiative transfer equations....
Definition CD_RtSolver.H:31