|
OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
|
Generating particles following a Gaussian distribution. More...
#include <Gaussian.h>


Public Member Functions | |
| Gaussian (std::shared_ptr< ParticleContainer_t > pc, std::shared_ptr< FieldContainer_t > fc, Distribution_t *opalDist) | |
| Constructor for the Gaussian sampler. | |
| Gaussian (std::shared_ptr< ParticleContainer_t > pc, const Vector_t< double, 3 > &sigmaR, const Vector_t< double, 3 > &sigmaP, double avrgpz, const Vector_t< double, 3 > &cutoffR, bool fix_meanR=true) | |
| Constructor for the Gaussian sampler without field container and distribution object. | |
| void | generateParticles (size_t &numberOfParticles, Vector_t< double, 3 > nr) override |
| Generates particles with a Gaussian distribution. | |
| void | emitParticles (double t, double dt) override |
| Time-stepped emission hook for one-shot delayed injection. | |
| void | setSigmaR (const Vector_t< double, 3 > &sigmaR) |
| void | setSigmaP (const Vector_t< double, 3 > &sigmaP) |
| void | setAvrgpz (double avrgpz) |
| void | setCutoffR (const Vector_t< double, 3 > &cutoffR) |
| void | getParameters (Vector_t< double, 3 > &sigmaR, Vector_t< double, 3 > &sigmaP, double &avrgpz, Vector_t< double, 3 > &cutoffR) const |
| void | setFixMeanR (bool fixMeanR) |
| void | getFixMeanR (bool &fixMeanR) const |
| void | setEmissionOffsets (ippl::Vector< double, 3 > R0, ippl::Vector< double, 3 > P0, double t0, const std::string &emissionModel="NONE") |
| void | setInitialPolarization (const ippl::Vector< double, 3 > &pol) |
| void | fillPolarization (size_t startIdx, size_t count) |
| Vector_t< double, 3 > | getEmissionR0 () const |
| virtual bool | isEmissionDone (double t) const |
| Whether this sampler has finished all emission (no more particles will be created). | |
| virtual double | getGlobalTimeShift () const |
| Optional tracker time shift needed before the first emitted particles are born. | |
| virtual bool | hasInitialReferenceMomentum () const |
| Optional initial reference momentum in the source-local frame. | |
| virtual Vector_t< double, 3 > | getInitialReferenceMomentum () const |
| virtual double | getEmissionTimeStep () const |
| Optional OPAL-like tracker time step while this sampler is still emitting. | |
| virtual void | testNumEmitParticles (size_t, double) |
| virtual void | testEmitParticles (size_t, double) |
| virtual void | initDomainDecomp (double) |
| virtual void | setWithDomainDecomp (bool) |
| size_t | computeLocalEmitCount (size_t totalToSample) const |
| Computes the number of particles this rank should emit so that the global total equals totalToSample and no rank exceeds its capacity (space left). | |
Public Attributes | |
| IpplTimings::TimerRef | samperTimer_m |
| Timer for performance profiling. | |
Protected Attributes | |
| std::shared_ptr< ParticleContainer_t > | pc_m |
| std::shared_ptr< FieldContainer_t > | fc_m |
| Distribution_t * | opalDist_m = nullptr |
| std::string | samplingMethod_m |
| Vector_t< double, 3 > | R0_m = 0.0 |
| Emission source offset: position R0, momentum P0, start time t0 (applied in sample step). | |
| Vector_t< double, 3 > | P0_m = 0.0 |
| double | t0_m = 0.0 |
| std::string | emissionModel_m = "NONE" |
| Vector_t< double, 3 > | initialPol_m = 0.0 |
| bool | hasEmittedOnce_m = false |
| For one-shot emitters (e.g. Gaussian at delayed t0): guard to avoid double sampling. | |
Private Member Functions | |
| void | initRandomPool () |
| Initializes the random number generator pool. | |
Private Attributes | |
| GeneratorPool | randPool_m |
| Pool of random number generators for parallel sampling. | |
| Vector_t< double, 3 > | sigmaR_m |
| Standard deviations for position and momentum distributions. | |
| Vector_t< double, 3 > | sigmaP_m |
| double | avrgpz_m |
| Average momentum in the z-direction. | |
| Vector_t< double, 3 > | cutoffR_m |
| Cutoff multiplier for position distribution. | |
| bool | fixMeanR_m = true |
| Flag to exactly fix the mean position of particles after sampling. | |
Generating particles following a Gaussian distribution.
This function samples particle positions R and momenta P given following normal distributions a normal distribution R ~ N ( [0, 0, 0 ], sdR) P ~ N ( [0, 0, avrgpz], sdP) where sdR = [SigmaR[0] 0 0 0 SigmaR[1] 0 0 0 SigmaR[2]]
and sdP = [SigmaP[0] 0 0 0 SigmaP[1] 0 0 0 SigmaP[2]].
Here, R is sampled in a bounded domains R \in [-CutoffR*SigmaR, CutoffR*SigmaR]^3 and corrected by translation to ensure mean = [0,0,0].
| numberOfParticles | The total number of particles to generate. |
| nr | The number of grid points in each dimension (not used here). |
Definition at line 38 of file Gaussian.h.
| Gaussian::Gaussian | ( | std::shared_ptr< ParticleContainer_t > | pc, |
| std::shared_ptr< FieldContainer_t > | fc, | ||
| Distribution_t * | opalDist | ||
| ) |
Constructor for the Gaussian sampler.
Constructs a Gaussian sampler.
| pc | Shared pointer to the particle container. |
| fc | Shared pointer to the field container. |
| opalDist | Borrowed distribution object. |
Definition at line 15 of file Gaussian.cpp.
References Distribution::getAvrgpz(), Distribution::getCutoffR(), Distribution::getSigmaP(), Distribution::getSigmaR(), initRandomPool(), samperTimer_m, setAvrgpz(), setCutoffR(), setSigmaP(), and setSigmaR().

| Gaussian::Gaussian | ( | std::shared_ptr< ParticleContainer_t > | pc, |
| const Vector_t< double, 3 > & | sigmaR, | ||
| const Vector_t< double, 3 > & | sigmaP, | ||
| double | avrgpz, | ||
| const Vector_t< double, 3 > & | cutoffR, | ||
| bool | fix_meanR = true |
||
| ) |
Constructor for the Gaussian sampler without field container and distribution object.
| pc | Shared pointer to the particle container. |
| sigmaR | Standard deviation for position distribution. |
| sigmaP | Standard deviation for momentum distribution. |
| avrgpz | Average momentum in the z-direction. |
| cutoffR | Cutoff multiplier for position distribution. |
| fix_meanR | Flag to exactly fix the mean position of particles after sampling. |
Definition at line 27 of file Gaussian.cpp.
References initRandomPool(), samperTimer_m, setAvrgpz(), setCutoffR(), setFixMeanR(), setSigmaP(), and setSigmaR().

|
inherited |
Computes the number of particles this rank should emit so that the global total equals totalToSample and no rank exceeds its capacity (space left).
| totalToSample | Global number of particles to emit this timestep. |
Definition at line 6 of file SamplingBase.cpp.
References SamplingBase::pc_m.
Referenced by FlatTop::countEnteringParticlesPerRank(), FromFile::generateParticles(), generateParticles(), and MultiVariateGaussian::generateParticles().
|
overridevirtual |
Time-stepped emission hook for one-shot delayed injection.
For GAUSS, this emits once when [t, t+dt] crosses t0 for sources with t0 > 0. Initial sampling at t0 == 0 is handled via generateParticles.
Reimplemented from SamplingBase.
Definition at line 187 of file Gaussian.cpp.
References generateParticles(), Distribution::getNumParticles(), SamplingBase::hasEmittedOnce_m, SamplingBase::opalDist_m, SamplingBase::pc_m, and SamplingBase::t0_m.

|
inlineinherited |
Fill the Pol particle attribute with initialPol_m on the half-open range [startIdx, startIdx + count). No-op when the container does not store spin. Must be called after the particles have been created and before they are pushed downstream.
Definition at line 63 of file SamplingBase.hpp.
References SamplingBase::initialPol_m, and SamplingBase::pc_m.
Referenced by FlatTop::emitParticles(), FromFile::generateParticles(), generateParticles(), and MultiVariateGaussian::generateParticles().
|
overridevirtual |
Generates particles with a Gaussian distribution.
Generates particles following a Gaussian distribution.
| numberOfParticles | The total number of particles to generate. |
| nr | the number of grid cells in R (used in domain decomposition). |
| numberOfParticles | The total number of particles to generate. |
| nr | The number of grid points in each dimension (not used here). |
Reimplemented from SamplingBase.
Definition at line 64 of file Gaussian.cpp.
References avrgpz_m, SamplingBase::computeLocalEmitCount(), cutoffR_m, SamplingBase::emissionModel_m, SamplingBase::fillPolarization(), fixMeanR_m, SamplingBase::hasEmittedOnce_m, SamplingBase::P0_m, SamplingBase::pc_m, SamplingBase::R0_m, randPool_m, samperTimer_m, sigmaP_m, sigmaR_m, and SamplingBase::t0_m.
Referenced by emitParticles(), TEST_F(), TEST_F(), and TEST_F().

|
inlineinherited |
Definition at line 78 of file SamplingBase.hpp.
References SamplingBase::R0_m.
|
inlinevirtualinherited |
Optional OPAL-like tracker time step while this sampler is still emitting.
Reimplemented in EmittedFromFile, and OpalFlatTop.
Definition at line 102 of file SamplingBase.hpp.
|
inline |
Definition at line 104 of file Gaussian.h.
References fixMeanR_m.
|
inlinevirtualinherited |
Optional tracker time shift needed before the first emitted particles are born.
Reimplemented in EmittedFromFile, and OpalFlatTop.
Definition at line 92 of file SamplingBase.hpp.
|
inlinevirtualinherited |
Reimplemented in EmittedFromFile, and OpalFlatTop.
Definition at line 97 of file SamplingBase.hpp.
|
inlinevirtualinherited |
Optional initial reference momentum in the source-local frame.
Reimplemented in EmittedFromFile, and OpalFlatTop.
Definition at line 95 of file SamplingBase.hpp.
|
inlinevirtualinherited |
Reimplemented in FlatTop, and OpalFlatTop.
Definition at line 110 of file SamplingBase.hpp.
|
private |
Initializes the random number generator pool.
Definition at line 42 of file Gaussian.cpp.
References gmsg, randPool_m, and Options::seed.
Referenced by Gaussian(), and Gaussian().
|
inlinevirtualinherited |
Whether this sampler has finished all emission (no more particles will be created).
| t | Current simulation time (s). |
Reimplemented in FlatTop, EmittedFromFile, and OpalFlatTop.
Definition at line 86 of file SamplingBase.hpp.
References SamplingBase::hasEmittedOnce_m.
|
inline |
Definition at line 89 of file Gaussian.h.
References avrgpz_m.
Referenced by Gaussian(), and Gaussian().
|
inline |
Definition at line 91 of file Gaussian.h.
References cutoffR_m.
Referenced by Gaussian(), and Gaussian().
|
inlineinherited |
Definition at line 48 of file SamplingBase.hpp.
References SamplingBase::emissionModel_m, SamplingBase::P0_m, SamplingBase::R0_m, and SamplingBase::t0_m.
Referenced by TEST_F(), TEST_F(), TEST_F(), TEST_F(), TEST_F(), TEST_F(), TEST_F(), TEST_F(), and TEST_F().
|
inline |
|
inlineinherited |
Definition at line 57 of file SamplingBase.hpp.
References SamplingBase::initialPol_m.
|
inline |
Definition at line 87 of file Gaussian.h.
References sigmaP_m.
Referenced by Gaussian(), and Gaussian().
|
inline |
Definition at line 85 of file Gaussian.h.
References sigmaR_m.
Referenced by Gaussian(), and Gaussian().
|
inlinevirtualinherited |
Reimplemented in FlatTop, and OpalFlatTop.
Definition at line 112 of file SamplingBase.hpp.
|
inlinevirtualinherited |
Definition at line 108 of file SamplingBase.hpp.
|
inlinevirtualinherited |
Definition at line 105 of file SamplingBase.hpp.
|
private |
Average momentum in the z-direction.
Definition at line 126 of file Gaussian.h.
Referenced by generateParticles(), getParameters(), and setAvrgpz().
|
private |
Cutoff multiplier for position distribution.
Definition at line 131 of file Gaussian.h.
Referenced by generateParticles(), getParameters(), and setCutoffR().
|
protectedinherited |
Definition at line 25 of file SamplingBase.hpp.
Referenced by OpalFlatTop::generateLocalParticles(), EmittedFromFile::generateParticles(), FromFile::generateParticles(), generateParticles(), MultiVariateGaussian::generateParticles(), FlatTop::generateUniformDisk(), OpalFlatTop::getInitialReferenceMomentum(), and SamplingBase::setEmissionOffsets().
|
protectedinherited |
Definition at line 18 of file SamplingBase.hpp.
Referenced by FlatTop::initDomainDecomp(), OpalFlatTop::initDomainDecomp(), FlatTop::setParameters(), and OpalFlatTop::setParameters().
|
private |
Flag to exactly fix the mean position of particles after sampling.
Definition at line 136 of file Gaussian.h.
Referenced by generateParticles(), getFixMeanR(), and setFixMeanR().
|
protectedinherited |
For one-shot emitters (e.g. Gaussian at delayed t0): guard to avoid double sampling.
Definition at line 33 of file SamplingBase.hpp.
Referenced by FromFile::emitParticles(), emitParticles(), MultiVariateGaussian::emitParticles(), FromFile::generateParticles(), generateParticles(), MultiVariateGaussian::generateParticles(), and SamplingBase::isEmissionDone().
|
protectedinherited |
Initial polarization vector P applied to every particle this sampler creates. Rest-frame Pauli expectations along lab-frame axes; |Pol| in [0, 1]. Ignored when the container does not have a spin attribute (hasSpin() == false).
Definition at line 30 of file SamplingBase.hpp.
Referenced by SamplingBase::fillPolarization(), and SamplingBase::setInitialPolarization().
|
protectedinherited |
Definition at line 19 of file SamplingBase.hpp.
Referenced by EmittedFromFile::buildInventory(), FromFile::emitParticles(), emitParticles(), MultiVariateGaussian::emitParticles(), EmittedFromFile::generateParticles(), MultiVariateGaussian::MultiVariateGaussian(), and FlatTop::setParameters().
|
protectedinherited |
Definition at line 23 of file SamplingBase.hpp.
Referenced by EmittedFromFile::buildInventory(), EmittedFromFile::generateLocalParticles(), OpalFlatTop::generateLocalParticles(), FromFile::generateParticles(), generateParticles(), MultiVariateGaussian::generateParticles(), FlatTop::generateUniformDisk(), OpalFlatTop::getInitialReferenceMomentum(), and SamplingBase::setEmissionOffsets().
|
protectedinherited |
Definition at line 17 of file SamplingBase.hpp.
Referenced by SamplingBase::computeLocalEmitCount(), EmittedFromFile::computeLocalEmitRange(), OpalFlatTop::computeLocalEmitRange(), FlatTop::countEnteringParticlesPerRank(), EmittedFromFile::emitParticles(), FlatTop::emitParticles(), FromFile::emitParticles(), emitParticles(), MultiVariateGaussian::emitParticles(), OpalFlatTop::emitParticles(), SamplingBase::fillPolarization(), EmittedFromFile::generateLocalParticles(), OpalFlatTop::generateLocalParticles(), FromFile::generateParticles(), generateParticles(), MultiVariateGaussian::generateParticles(), FlatTop::generateUniformDisk(), FlatTop::initDomainDecomp(), OpalFlatTop::initDomainDecomp(), and FlatTop::testNumEmitParticles().
|
protectedinherited |
Emission source offset: position R0, momentum P0, start time t0 (applied in sample step).
Definition at line 22 of file SamplingBase.hpp.
Referenced by EmittedFromFile::generateLocalParticles(), OpalFlatTop::generateLocalParticles(), FromFile::generateParticles(), generateParticles(), MultiVariateGaussian::generateParticles(), FlatTop::generateUniformDisk(), SamplingBase::getEmissionR0(), and SamplingBase::setEmissionOffsets().
|
private |
Pool of random number generators for parallel sampling.
Definition at line 115 of file Gaussian.h.
Referenced by generateParticles(), and initRandomPool().
| IpplTimings::TimerRef Gaussian::samperTimer_m |
Timer for performance profiling.
Definition at line 43 of file Gaussian.h.
Referenced by Gaussian(), Gaussian(), and generateParticles().
|
protectedinherited |
Definition at line 20 of file SamplingBase.hpp.
|
private |
Definition at line 121 of file Gaussian.h.
Referenced by generateParticles(), getParameters(), and setSigmaP().
|
private |
Standard deviations for position and momentum distributions.
Definition at line 120 of file Gaussian.h.
Referenced by generateParticles(), getParameters(), and setSigmaR().
|
protectedinherited |
Definition at line 24 of file SamplingBase.hpp.
Referenced by EmittedFromFile::buildInventory(), FlatTop::emitParticles(), FromFile::emitParticles(), emitParticles(), MultiVariateGaussian::emitParticles(), FromFile::generateParticles(), generateParticles(), MultiVariateGaussian::generateParticles(), EmittedFromFile::getGlobalTimeShift(), OpalFlatTop::getGlobalTimeShift(), FlatTop::isEmissionDone(), SamplingBase::setEmissionOffsets(), and OpalFlatTop::toBirthTime().