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>
24#include <CD_NamespaceHeader.H>
25
35class McPhoto : public RtSolver
36{
37public:
41 enum class WhichContainer
42 {
43 Photons,
44 Bulk,
45 EB,
46 Domain,
47 Source
48 };
49
53 McPhoto();
54
59 McPhoto(const McPhoto& a_other);
60
65 McPhoto(const McPhoto&& a_other);
66
72 McPhoto&
73 operator=(const McPhoto& a_other);
74
80 McPhoto&
81 operator=(const McPhoto&& a_other);
82
86 virtual ~McPhoto();
87
104 virtual bool
105 advance(const Real a_dt, EBAMRCellData& a_phi, const EBAMRCellData& a_source, const bool a_zeroPhi = false) override;
106
111 virtual bool
113
123 virtual void
125 ParticleContainer<Photon>& a_ebPhotons,
126 ParticleContainer<Photon>& a_domainPhotons,
127 ParticleContainer<Photon>& a_photons);
128
140 virtual void
142 ParticleContainer<Photon>& a_ebPhotons,
143 ParticleContainer<Photon>& a_domainPhotons,
144 ParticleContainer<Photon>& a_photons,
145 const Real a_dt);
146
155 virtual void
156 computeNumPhysicalPhotons(EBAMRCellData& a_numPhysPhotonsTotal,
157 EBAMRCellData& a_numPhysPhotonsPacket,
158 const EBAMRCellData& a_source,
159 const Real a_dt) const noexcept;
160
167 virtual void
169 const EBAMRCellData& a_numPhysPhotons,
170 const size_t a_maxPhotonsPerCell) const noexcept;
171
182 virtual void
184 EBAMRCellData& a_phi,
185 const EBAMRCellData& a_numPhysicalPhotons,
186 const size_t a_maxPhotonsPerCell) const noexcept;
187
191 virtual void
192 remap();
193
198 virtual void
200
205 virtual void
207
216 void
217 depositPhotons(EBAMRCellData& a_phi,
218 ParticleContainer<Photon>& a_photons,
219 const DepositionType& a_deposition) const noexcept;
220
226 virtual void
227 sortPhotonsByCell(const WhichContainer& a_which);
228
234 virtual void
235 sortPhotonsByPatch(const WhichContainer& a_which);
236
240 virtual void
241 parseOptions() override;
242
246 virtual void
247 parseRuntimeOptions() override;
248
252 virtual void
253 allocate() override;
254
260 virtual void
261 preRegrid(const int a_lmin, const int a_oldFinestLevel) override;
262
266 virtual void
267 deallocate() override;
268
275 virtual void
276 regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override;
277
281 virtual void
282 registerOperators() override;
283
290 virtual void
291 computeBoundaryFlux(EBAMRIVData& a_ebFlux, const EBAMRCellData& a_phi) override;
292
299 virtual void
300 computeDomainFlux(EBAMRIFData& a_domainFlux, const EBAMRCellData& a_phi) override;
301
308 virtual void
309 computeFlux(EBAMRCellData& a_flux, const EBAMRCellData& a_phi) override;
310
317 virtual void
318 computeDensity(EBAMRCellData& a_isotropic, const EBAMRCellData& a_phi) override;
319
324 virtual void
325 clear(const WhichContainer& a_which);
326
330 virtual void
331 clear();
332
337 virtual void
339
344 virtual void
345 writePlotFile() override;
346
354 virtual void
355 writePlotData(LevelData<EBCellFAB>& a_output,
356 int& a_comp,
357 const std::string& a_outputRealm,
358 const int a_level) const noexcept override;
359
360#ifdef CH_USE_HDF5
366 virtual void
367 writeCheckpointLevel(HDF5Handle& a_handle, const int a_level) const override;
368#endif
369
370#ifdef CH_USE_HDF5
376 virtual void
377 readCheckpointLevel(HDF5Handle& a_handle, const int a_level) override;
378#endif
379
384 virtual Vector<std::string>
385 getPlotVariableNames() const override;
386
391 virtual int
392 getNumberOfPlotVariables() const override;
393
399 virtual int
400 countPhotons(const ParticleContainer<Photon>& a_photons) const;
401
407 getPhotons();
408
415
421 getEbPhotons();
422
429
436
441 virtual int
442 getMaxPhotonsPerCell() const noexcept;
443
448 virtual int
449 getNumSamplingPackets() const noexcept;
450
461 virtual void
462 computeLoads(Vector<long long>& a_loads, const DisjointBoxLayout& a_dbl, const int a_level) const noexcept override;
463
464protected:
469 {
470 Deterministic,
471 Stochastic
472 };
473
477 enum class SourceType
478 {
479 Number,
480 PerVol,
481 PerVolSecond,
482 PerSecond
483 };
484
492 enum class IntersectionEB
493 {
494 Raycast,
495 Bisection,
496 };
497
502
507
512
517
522
527
532
537
542
547
552
557
563
568
573
578
583
589
594
599
603 mutable EBAMRCellData m_scratch;
604
608 mutable EBAMRIVData m_depositionNC;
609
613 mutable EBAMRIVData m_massDiff;
614
619
624
629
634
639
648 size_t
649 drawPhotons(const Real a_source, const Real a_volume, const Real a_dt) const noexcept;
650
657 static int
658 domainBcMap(const int a_dir, const Side::LoHiSide a_side);
659
665 static Real
666 randomExponential(const Real a_rate) noexcept;
667
675 void
676 depositHybridDivergence(EBAMRCellData& a_phi) const noexcept;
677
683 void
684 depositNonConservative(EBAMRIVData& a_depositionNC, const EBAMRCellData& a_depositionKappaC) const noexcept;
685
692 void
693 depositHybrid(EBAMRCellData& a_depositionH,
694 EBAMRIVData& a_massDifference,
695 const EBAMRIVData& a_depositionNC) const noexcept;
696
700 void
702
709 void
711
715 void
717
721 void
723
727 void
729
733 void
735
739 void
741
745 void
747
751 void
753
757 void
759
766 virtual void
767 depositPhotonsNGP(LevelData<EBCellFAB>& a_output,
768 const ParticleContainer<Photon>& a_photons,
769 const int a_level) const noexcept;
770};
771
772#include <CD_NamespaceFooter.H>
773
774#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 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:36
void depositNonConservative(EBAMRIVData &a_depositionNC, const EBAMRCellData &a_depositionKappaC) const noexcept
Make the "non-conservative" kappa deposition.
Definition CD_McPhoto.cpp:1366
bool m_plotDomainPhotons
Check if m_ebPhotons should be plotted.
Definition CD_McPhoto.H:546
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:633
virtual int getNumberOfPlotVariables() const override
Get number of output variables.
Definition CD_McPhoto.cpp:831
bool m_transparentEB
Turn on/off transparent boundaries.
Definition CD_McPhoto.H:501
ParticleContainer< Photon > m_sourcePhotons
This is a particle container that can be used to add Photons directly.
Definition CD_McPhoto.H:638
virtual void computeFlux(EBAMRCellData &a_flux, const EBAMRCellData &a_phi) override
Compute the flux.
Definition CD_McPhoto.cpp:723
void parseInstantaneous()
Parse whether instantaneous propagation or not.
Definition CD_McPhoto.cpp:240
void parseIntersectionEB()
Parse EB intersection algorithm.
Definition CD_McPhoto.cpp:334
SourceType m_sourceType
Source type.
Definition CD_McPhoto.H:582
IntersectionEB m_intersectionEB
Intersection e b.
Definition CD_McPhoto.H:588
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:571
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:971
bool m_blendConservation
Flag for blending the deposition clouds with the nonconservative divergence.
Definition CD_McPhoto.H:511
virtual ParticleContainer< Photon > & getDomainPhotons()
Get domain photons, i.e. photons absorbed on domain edges/faces.
Definition CD_McPhoto.cpp:2013
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:1861
WhichContainer
Enum class for identifying various containers. Only used for interface reasons.
Definition CD_McPhoto.H:42
virtual void computeDensity(EBAMRCellData &a_isotropic, const EBAMRCellData &a_phi) override
Compute isotropic radiative density from mesh solution.
Definition CD_McPhoto.cpp:737
virtual ParticleContainer< Photon > & getEbPhotons()
Get eb Photons, i.e. photons absorbed on the EB.
Definition CD_McPhoto.cpp:2002
void depositHybridDivergence(EBAMRCellData &a_phi) const noexcept
Shared hybrid-divergence tail for the deposition routines.
Definition CD_McPhoto.cpp:1326
virtual ~McPhoto()
Destructor.
bool m_depositNumber
If true, the NUMBER of of Photons will be deposited in each cell.
Definition CD_McPhoto.H:516
DepositionType m_deposition
Deposition type.
Definition CD_McPhoto.H:593
size_t m_maxPhotonsGeneratedPerCell
Number of computational photons generated per cell.
Definition CD_McPhoto.H:556
bool m_dirtySampling
Dirty sampling or not.
Definition CD_McPhoto.H:551
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:884
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:701
bool m_instantaneous
Instantaneous transport or not.
Definition CD_McPhoto.H:506
void parseSourceType()
Parse source term type.
Definition CD_McPhoto.cpp:304
ParticleContainer< Photon > m_bulkPhotons
Photons absorbed in the volume.
Definition CD_McPhoto.H:623
void parsePhotoGeneration()
Parse photogeneration type.
Definition CD_McPhoto.cpp:280
Real m_bisectStep
Bisection step for when we use the bisection intersection algorithm.
Definition CD_McPhoto.H:572
virtual void deallocate() override
Deallocate internal storage.
Definition CD_McPhoto.cpp:556
void parsePseudoPhotons()
Parse pseudophotons, i.e. parse how many photons can be generated per cell.
Definition CD_McPhoto.cpp:253
IntersectionEB
An enum for switching between various types of EB intersection algorithms when intersecting photons w...
Definition CD_McPhoto.H:493
virtual void computeDomainFlux(EBAMRIFData &a_domainFlux, const EBAMRCellData &a_phi) override
Compute the domain flux.
Definition CD_McPhoto.cpp:712
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:1643
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:613
bool m_plotPhotons
Check if m_photons should be plotted.
Definition CD_McPhoto.H:526
virtual void remap()
Remap computational particles. This remaps m_photons.
Definition CD_McPhoto.cpp:1828
virtual void allocate() override
Allocate internal storage.
Definition CD_McPhoto.cpp:516
bool m_plotNumbers
Switch for plotting numbers or densities.
Definition CD_McPhoto.H:521
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:2057
virtual void preRegrid(const int a_lmin, const int a_oldFinestLevel) override
preRegrid operations
Definition CD_McPhoto.cpp:539
bool m_plotEBPhotons
Check if m_ebPhotons should be plotted.
Definition CD_McPhoto.H:541
virtual Vector< std::string > getPlotVariableNames() const override
Get output plot names.
Definition CD_McPhoto.cpp:796
virtual ParticleContainer< Photon > & getPhotons()
Get m_photons.
Definition CD_McPhoto.cpp:1980
static int domainBcMap(const int a_dir, const Side::LoHiSide a_side)
Mapping function for domain boundary conditions.
Definition CD_McPhoto.cpp:866
virtual ParticleContainer< Photon > & getSourcePhotons()
Get source photons.
Definition CD_McPhoto.cpp:2024
virtual ParticleContainer< Photon > & getBulkPhotons()
Get bulk photons, i.e. photons absorbed on the mesh.
Definition CD_McPhoto.cpp:1991
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:1382
virtual void clear()
Clear data holder.
Definition CD_McPhoto.cpp:494
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:628
virtual void parseRuntimeOptions() override
Parse runtime options.
Definition CD_McPhoto.cpp:178
CoarseFineDeposition m_coarseFineDeposition
Coarse-fine deposition strategy.
Definition CD_McPhoto.H:598
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:1139
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:469
virtual void sortPhotonsByPatch(const WhichContainer &a_which)
Sort container by patch.
Definition CD_McPhoto.cpp:639
SourceType
Enum for adding flexibility in what the fluid source term contains.
Definition CD_McPhoto.H:478
ParticleContainer< Photon > m_photons
All particles.
Definition CD_McPhoto.H:618
virtual void writePlotFile() override
Write plot file.
Definition CD_McPhoto.cpp:749
virtual void depositPhotons()
Deposit photons on the mesh.
Definition CD_McPhoto.cpp:1296
void parseDeposition()
Parse deposition method.
Definition CD_McPhoto.cpp:360
int m_numSamplingPackets
Num sampling packets.
Definition CD_McPhoto.H:562
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:1474
PhotonGeneration m_photoGenerationMethod
Photon generation type.
Definition CD_McPhoto.H:577
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:1850
void parsePlotVariables()
Parse plot variables.
Definition CD_McPhoto.cpp:406
int m_seed
RNG seed.
Definition CD_McPhoto.H:567
virtual int getMaxPhotonsPerCell() const noexcept
Get maximum number of photons generated per cell.
Definition CD_McPhoto.cpp:2035
McPhoto & operator=(const McPhoto &a_other)
Disallowed assignment operator.
virtual void sortPhotonsByCell(const WhichContainer &a_which)
Sort container by cell.
Definition CD_McPhoto.cpp:597
virtual int getNumSamplingPackets() const noexcept
Get maximum number of photons generated per cell.
Definition CD_McPhoto.cpp:2046
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:1013
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:1430
EBAMRIVData m_depositionNC
Scratch storage for holding the non-conservative deposition.
Definition CD_McPhoto.H:608
virtual void registerOperators() override
Register operators that this solver needs.
Definition CD_McPhoto.cpp:681
static Real randomExponential(const Real a_rate) noexcept
Random exponential trial.
Definition CD_McPhoto.cpp:874
EBAMRCellData m_scratch
Coarse data for interpolation of deposition clouds.
Definition CD_McPhoto.H:603
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:536
bool m_plotBulkPhotons
Check if m_bulkPhotons should be plotted.
Definition CD_McPhoto.H:531
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