OPALX (Object Oriented Parallel Accelerator Library for Exascal) MINIorX
OPALX
Gaussian.h
Go to the documentation of this file.
1#ifndef IPPL_GAUSSIAN_H
2#define IPPL_GAUSSIAN_H
3
4#include "Distribution.h"
5#include "SamplingBase.hpp"
6#include <Kokkos_Random.hpp>
7#include "Ippl.h"
8#include "Utilities/Options.h"
9#include "OPALTypes.h"
10#include <memory>
11#include <cmath>
12
16using GeneratorPool = typename Kokkos::Random_XorShift64_Pool<>;
17using Dist_t = ippl::random::NormalDistribution<double, 3>;
18
41class Gaussian : public SamplingBase {
42public:
46 IpplTimings::TimerRef samperTimer_m;
47
55 Gaussian(std::shared_ptr<ParticleContainer_t> &pc,
56 std::shared_ptr<FieldContainer_t> &fc,
57 std::shared_ptr<Distribution_t> &opalDist);
58
68 Gaussian(std::shared_ptr<ParticleContainer_t> pc,
69 const Vector_t<double, 3>& sigmaR,
70 const Vector_t<double, 3>& sigmaP,
71 double avrgpz, const Vector_t<double, 3>& cutoffR,
72 bool fix_meanR = true);
79 void generateParticles(size_t& numberOfParticles, Vector_t<double, 3> nr) override;
80
81 void setSigmaR(const Vector_t<double, 3>& sigmaR) {
82 sigmaR_m = sigmaR;
83 }
84
85 void setSigmaP(const Vector_t<double, 3>& sigmaP) {
86 sigmaP_m = sigmaP;
87 }
88
89 void setAvrgpz(double avrgpz) {
90 avrgpz_m = avrgpz;
91 }
92
93 void setCutoffR(const Vector_t<double, 3>& cutoffR) {
94 cutoffR_m = cutoffR;
95 }
96
98 Vector_t<double, 3>& sigmaP,
99 double& avrgpz,
100 Vector_t<double, 3>& cutoffR) const {
101 sigmaR = sigmaR_m;
102 sigmaP = sigmaP_m;
103 avrgpz = avrgpz_m;
104 cutoffR = cutoffR_m;
105 }
106
107 void setFixMeanR(bool fixMeanR) {
108 fixMeanR_m = fixMeanR;
109 }
110
111 void getFixMeanR(bool& fixMeanR) const {
112 fixMeanR = fixMeanR_m;
113 }
114
115private:
119 void initRandomPool();
120
125
131
135 double avrgpz_m;
136
141
145 bool fixMeanR_m = true;
146};
147
148#endif // IPPL_GAUSSIAN_H
149
ParticleContainer< double, 3 > ParticleContainer_t
Definition Component.h:30
ippl::Vector< T, Dim > Vector_t
typename Kokkos::Random_XorShift64_Pool<> GeneratorPool
Distribution Distribution_t
Definition FlatTop.cpp:9
ippl::random::NormalDistribution< double, 3 > Dist_t
Definition FlatTop.cpp:11
FieldContainer< double, 3 > FieldContainer_t
const int nr
Vector_t< double, 3 > sigmaP_m
Definition Gaussian.h:130
Vector_t< double, 3 > sigmaR_m
Standard deviations for position and momentum distributions.
Definition Gaussian.h:129
void initRandomPool()
Initializes the random number generator pool.
Definition Gaussian.cpp:42
void setCutoffR(const Vector_t< double, 3 > &cutoffR)
Definition Gaussian.h:93
double avrgpz_m
Average momentum in the z-direction.
Definition Gaussian.h:135
void setFixMeanR(bool fixMeanR)
Definition Gaussian.h:107
bool fixMeanR_m
Flag to exactly fix the mean position of particles after sampling.
Definition Gaussian.h:145
void setSigmaR(const Vector_t< double, 3 > &sigmaR)
Definition Gaussian.h:81
void getFixMeanR(bool &fixMeanR) const
Definition Gaussian.h:111
void generateParticles(size_t &numberOfParticles, Vector_t< double, 3 > nr) override
Generates particles with a Gaussian distribution.
Definition Gaussian.cpp:64
Vector_t< double, 3 > cutoffR_m
Cutoff multiplier for position distribution.
Definition Gaussian.h:140
GeneratorPool randPool_m
Pool of random number generators for parallel sampling.
Definition Gaussian.h:124
Gaussian(std::shared_ptr< ParticleContainer_t > &pc, std::shared_ptr< FieldContainer_t > &fc, std::shared_ptr< Distribution_t > &opalDist)
Constructor for the Gaussian sampler.
Definition Gaussian.cpp:14
void getParameters(Vector_t< double, 3 > &sigmaR, Vector_t< double, 3 > &sigmaP, double &avrgpz, Vector_t< double, 3 > &cutoffR) const
Definition Gaussian.h:97
void setAvrgpz(double avrgpz)
Definition Gaussian.h:89
void setSigmaP(const Vector_t< double, 3 > &sigmaP)
Definition Gaussian.h:85
IpplTimings::TimerRef samperTimer_m
Timer for performance profiling.
Definition Gaussian.h:46
SamplingBase(std::shared_ptr< ParticleContainer_t > &pc, std::shared_ptr< FieldContainer_t > &fc, std::shared_ptr< Distribution_t > &dist)