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// Chombo includes
20#include <Particle.H>
21#include <ParticleData.H>
22#include <BinItem.H>
23
24// Our includes
25#include <CD_RtSolver.H>
26#include <CD_EBParticleMesh.H>
28#include <CD_Photon.H>
29#include <CD_PointParticle.H>
30#include <CD_NamespaceHeader.H>
31
39class McPhoto : public RtSolver
40{
41public:
45 enum class WhichContainer
46 {
47 Photons,
48 Bulk,
49 EB,
50 Domain,
51 Source
52 };
53
57 McPhoto();
58
64
70
76 McPhoto&
78
84 McPhoto&
86
90 virtual ~McPhoto();
91
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
129
140 virtual void
145 const Real a_dt);
146
154 virtual void
157 const EBAMRCellData& a_source,
158 const Real a_dt) const noexcept;
159
166 virtual void
169 const size_t a_maxPhotonsPerCell) const noexcept;
170
182 virtual void
186 const size_t a_maxPhotonsPerCell) const noexcept;
187
191 virtual void
192 remap();
193
198 virtual void
200
205 virtual void
207
214 template <class P, class Ret, Ret (P::*MemberFunc)() const>
215 void
218 const DepositionType& a_deposition) const noexcept;
219
225 virtual void
227
233 virtual void
235
239 virtual void
240 parseOptions() override;
241
245 virtual void
246 parseRuntimeOptions() override;
247
251 virtual void
252 allocate() override;
253
259 virtual void
260 preRegrid(const int a_lmin, const int a_oldFinestLevel) override;
261
265 virtual void
266 deallocate() override;
267
274 virtual void
275 regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override;
276
280 virtual void
281 registerOperators() override;
282
289 virtual void
291
298 virtual void
300
307 virtual void
309
316 virtual void
318
323 virtual void
325
329 virtual void
330 clear();
331
336 virtual void
338
343 virtual void
345
350 virtual void
351 writePlotFile() override;
352
360 virtual void
362 int& a_comp,
364 const int a_level) const noexcept override;
365
366#ifdef CH_USE_HDF5
372 virtual void
373 writeCheckpointLevel(HDF5Handle& a_handle, const int a_level) const override;
374#endif
375
376#ifdef CH_USE_HDF5
382 virtual void
383 readCheckpointLevel(HDF5Handle& a_handle, const int a_level) override;
384#endif
385
390 virtual Vector<std::string>
391 getPlotVariableNames() const override;
392
397 virtual int
398 getNumberOfPlotVariables() const override;
399
405 virtual int
407
413 getPhotons();
414
421
427 getEbPhotons();
428
435
442
447 virtual int
449
454 virtual int
456
465 virtual void
467
473 {
474 Deterministic,
475 Stochastic
476 };
477
481 enum class SourceType
482 {
483 Number,
484 PerVol,
485 PerVolSecond,
486 PerSecond
487 };
488
494 enum class IntersectionEB
495 {
496 Raycast,
497 Bisection,
498 };
499
504
509
514
519
524
529
534
539
544
549
554
559
565
570
575
580
585
591
596
601
606
611
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 template <class P, class Ret, Ret (P::*MemberFunc)() const>
678 void
682 const CoarseFineDeposition a_coarseFineDeposition) const noexcept;
683
689 void
691
698 void
701 const EBAMRIVData& a_depositionNC) const noexcept;
702
706 void
708
715 void
717
721 void
723
727 void
729
733 void
735
739 void
741
745 void
747
751 void
753
757 void
759
763 void
765
772 virtual void
775 const int a_level) const noexcept;
776};
777
778#include <CD_NamespaceFooter.H>
779
780#include <CD_McPhotoImplem.H>
781
782#endif
CoarseFineDeposition
Coarse-fine deposition types (see CD_EBAMRParticleMesh for how these are handled).
Definition CD_CoarseFineDeposition.H:27
DepositionType
Deposition types.
Definition CD_DepositionType.H:24
Declaration of a class for handling particle-mesh interpolation and deposition.
Implementation of CD_McPhoto.H.
Declaration of a class for holding particles on an AMR hierarchy.
Declaration of a photon class for particle methods.
Declaration of a computational point particle.
Abstract parent class for various radiative transfer solvers.
Radiative transfer equation solver using Monte-Carlo simulation.
Definition CD_McPhoto.H:40
void depositNonConservative(EBAMRIVData &a_depositionNC, const EBAMRCellData &a_depositionKappaC) const noexcept
Make the "non-conservative" kappa deposition.
Definition CD_McPhoto.cpp:1307
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:840
bool m_transparentEB
Turn on/off transparent boundaries.
Definition CD_McPhoto.H:503
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:732
void parseInstantaneous()
Parse whether instantaneous propagation or not.
Definition CD_McPhoto.cpp:237
void parseIntersectionEB()
Parse EB intersection algorithm.
Definition CD_McPhoto.cpp:331
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:581
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:980
bool m_blendConservation
Flag for blending the deposition clouds with the nonconservative divergence.
Definition CD_McPhoto.H:513
virtual ParticleContainer< Photon > & getDomainPhotons()
Get domain photons, i.e. photons absorbed on domain edges/faces.
Definition CD_McPhoto.cpp:1934
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:1782
WhichContainer
Enum class for identifying various containers. Only used for interface reasons.
Definition CD_McPhoto.H:46
virtual void computeDensity(EBAMRCellData &a_isotropic, const EBAMRCellData &a_phi) override
Compute isotropic radiative density from mesh solution.
Definition CD_McPhoto.cpp:746
virtual ParticleContainer< Photon > & getEbPhotons()
Get eb Photons, i.e. photons absorbed on the EB.
Definition CD_McPhoto.cpp:1923
virtual ~McPhoto()
Destructor.
virtual void dirtySamplePhotons(ParticleContainer< PointParticle > &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:1136
bool m_depositNumber
If true, the NUMBER of of Photons will be deposited in each cell.
Definition CD_McPhoto.H:518
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:196
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:893
void parseDirtySampling()
Parse dirty sampling for photons.
Definition CD_McPhoto.cpp:209
virtual void computeBoundaryFlux(EBAMRIVData &a_ebFlux, const EBAMRCellData &a_phi) override
Compute the boundary flux.
Definition CD_McPhoto.cpp:710
bool m_instantaneous
Instantaneous transport or not.
Definition CD_McPhoto.H:508
void parseSourceType()
Parse source term type.
Definition CD_McPhoto.cpp:301
ParticleContainer< Photon > m_bulkPhotons
Photons absorbed in the volume.
Definition CD_McPhoto.H:625
void parsePhotoGeneration()
Parse photogeneration type.
Definition CD_McPhoto.cpp:277
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:566
void parsePseudoPhotons()
Parse pseudophotons, i.e. parse how many photons can be generated per cell.
Definition CD_McPhoto.cpp:250
IntersectionEB
An enum for switching between various types of EB intersection algorithms when intersecting photons w...
Definition CD_McPhoto.H:495
virtual void computeDomainFlux(EBAMRIFData &a_domainFlux, const EBAMRCellData &a_phi) override
Compute the domain flux.
Definition CD_McPhoto.cpp:721
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:1576
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:1743
virtual void allocate() override
Allocate internal storage.
Definition CD_McPhoto.cpp:526
bool m_plotNumbers
Switch for plotting numbers or densities.
Definition CD_McPhoto.H:523
McPhoto()
Constructor.
Definition CD_McPhoto.cpp:35
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:1978
virtual void preRegrid(const int a_lmin, const int a_oldFinestLevel) override
preRegrid operations
Definition CD_McPhoto.cpp:549
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:805
virtual ParticleContainer< Photon > & getPhotons()
Get m_photons.
Definition CD_McPhoto.cpp:1901
static int domainBcMap(const int a_dir, const Side::LoHiSide a_side)
Mapping function for domain boundary conditions.
Definition CD_McPhoto.cpp:875
virtual ParticleContainer< Photon > & getSourcePhotons()
Get source photons.
Definition CD_McPhoto.cpp:1945
virtual ParticleContainer< Photon > & getBulkPhotons()
Get bulk photons, i.e. photons absorbed on the mesh.
Definition CD_McPhoto.cpp:1912
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:1323
virtual void clear()
Clear data holder.
Definition CD_McPhoto.cpp:491
virtual void parseOptions() override
Parse class options.
Definition CD_McPhoto.cpp:154
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:175
CoarseFineDeposition m_coarseFineDeposition
Coarse-fine deposition strategy.
Definition CD_McPhoto.H:600
void parseDivergenceComputation()
Parse the divergence computation, i.e. if we blend with non-conservative divergence or not.
Definition CD_McPhoto.cpp:224
PhotonGeneration
Enum for interpreting how photons are generated when using fluid codes.
Definition CD_McPhoto.H:473
virtual void sortPhotonsByPatch(const WhichContainer &a_which)
Sort container by patch.
Definition CD_McPhoto.cpp:648
SourceType
Enum for adding flexibility in what the fluid source term contains.
Definition CD_McPhoto.H:482
ParticleContainer< Photon > m_photons
All particles.
Definition CD_McPhoto.H:620
void depositKappaConservative(EBAMRCellData &a_phi, ParticleContainer< P > &a_particles, const DepositionType a_deposition, const CoarseFineDeposition a_coarseFineDeposition) const noexcept
This computes the "conservative" deposition, multiplied by kappa.
Definition CD_McPhotoImplem.H:68
virtual void writePlotFile() override
Write plot file.
Definition CD_McPhoto.cpp:758
virtual void depositPhotons()
Deposit photons on the mesh.
Definition CD_McPhoto.cpp:1296
void parseDeposition()
Parse deposition method.
Definition CD_McPhoto.cpp:357
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:1415
PhotonGeneration m_photoGenerationMethod
Photon generation type.
Definition CD_McPhoto.H:579
McPhoto & operator=(const McPhoto &&a_other)
Disallowed move assignment operator.
void parsePlotVariables()
Parse plot variables.
Definition CD_McPhoto.cpp:403
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:1956
McPhoto & operator=(const McPhoto &a_other)
Disallowed assignment operator.
virtual void sortPhotonsByCell(const WhichContainer &a_which)
Sort container by cell.
Definition CD_McPhoto.cpp:606
virtual int getNumSamplingPackets() const noexcept
Get maximum number of photons generated per cell.
Definition CD_McPhoto.cpp:1967
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:48
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:1022
virtual int countPhotons(const AMRParticles< Photon > &a_photons) const
Count number of photons in particle list.
Definition CD_McPhoto.cpp:1765
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:1371
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:690
static Real randomExponential(const Real a_rate) noexcept
Random exponential trial.
Definition CD_McPhoto.cpp:883
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:148
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
Abstract RTE solver class for doing various kinds of radiative transfer equations....
Definition CD_RtSolver.H:31
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:38
TracerParticleSolver()
Default constructor.
Definition CD_TracerParticleSolverImplem.H:26