OPALX (Object Oriented Parallel Accelerator Library for Exascale) MINIorX
OPALX
FlatTop.h
Go to the documentation of this file.
1
6#ifndef IPPL_FLAT_TOP_H
7#define IPPL_FLAT_TOP_H
8
9#include "Distribution.h"
10#include "SamplingBase.hpp"
11#include <Kokkos_Random.hpp>
12#include "Ippl.h"
13#include "Utilities/Options.h"
14#include "OPALTypes.h"
15#include <memory>
16#include <cmath>
17
21using GeneratorPool = typename Kokkos::Random_XorShift64_Pool<>;
23
36class FlatTop : public SamplingBase {
37public:
44 FlatTop(std::shared_ptr<ParticleContainer_t> &pc,
45 std::shared_ptr<FieldContainer_t> &fc,
46 std::shared_ptr<Distribution_t> &opalDist);
47
60 FlatTop(std::shared_ptr<ParticleContainer_t> &pc,
61 std::shared_ptr<FieldContainer_t> &fc,
62 bool emitting,
63 double sigmaTFall,
64 double sigmaTRise,
66 double tPulseLengthFWHM,
68 );
69
80 FlatTop(std::shared_ptr<ParticleContainer_t> &pc,
81 bool emitting,
82 double sigmaTFall,
83 double sigmaTRise,
85 double tPulseLengthFWHM,
87 );
88
94 void testNumEmitParticles(size_type nsteps, double dt) override;
95
101 void testEmitParticles(size_type nsteps, double dt) override;
102
107 void setWithDomainDecomp(bool withDomainDecomp) override;
108
112 void setDistArea(double distArea){
113 distArea_m = distArea;
114 }
115
120 double getDistArea(){
121 return distArea_m;
122 }
123
128 return emissionTime_m;
129 }
130private:
135 double distArea_m;
139 double fallTime_m;
140 double riseTime_m;
148
153 static size_t determineRandInit();
154
159 void setParameters(const std::shared_ptr<Distribution_t> &opalDist);
160
161public:
167 void generateUniformDisk(size_type nlocal, size_t nNew);
168
174
180 void generateParticles(size_t& numberOfParticles, Vector_t<double, 3> nr) override;
181
187 double FlatTopProfile(double t);
188
194 size_t computeNlocalUniformly(size_t nglobal);
195
204 double integrateTrapezoidal(double x1, double x2, double y1, double y2);
205
210 void initDomainDecomp(double BoxIncr) override;
211
218 double countEnteringParticlesPerRank(double t0, double tf);
219
224 void allocateParticles(size_t numberOfParticles);
225
231 void emitParticles(double t, double dt) override;
232
233 void setInternalVariables(bool emitting,
234 double sigmaTFall,
235 double sigmaTRise,
236 Vector_t<double, 3> cutoff,
237 double tPulseLengthFWHM,
239 );
240};
241
242#endif // IPPL_FLAT_TOP_H
243
typename Kokkos::Random_XorShift64_Pool<> GeneratorPool
const int nr
Definition: ClassicRandom.h:24
std::size_t size_type
Definition: IpplTypes.h:13
Implements the sampling method for the flat-top distribution.
Definition: FlatTop.h:36
void setNr(Vector_t< double, 3 > nr)
Sets the number of grid points per direction.
Definition: FlatTop.cpp:156
void setDistArea(double distArea)
Sets the total area of the distribution.
Definition: FlatTop.h:112
void testEmitParticles(size_type nsteps, double dt) override
Tests particle emission over a given number of steps.
Definition: FlatTop.cpp:389
double distArea_m
Total area of the flattop distribution.
Definition: FlatTop.h:135
Vector_t< double, 3 > sigmaR_m
Definition: FlatTop.h:147
double FlatTopProfile(double t)
Computes the flat-top profile value at a given time.
Definition: FlatTop.cpp:177
bool emitting_m
Flag for particle emission status.
Definition: FlatTop.h:141
Vector_t< double, 3 > nr_m
Number of grid points per direction.
Definition: FlatTop.h:145
static size_t determineRandInit()
Determines the random seed initialization.
Definition: FlatTop.cpp:65
void allocateParticles(size_t numberOfParticles)
Allocates memory for a given number of particles.
Definition: FlatTop.cpp:315
double emissionTime_m
Total emission time.
Definition: FlatTop.h:144
double sigmaTRise_m
Standard deviation for rise time profile.
Definition: FlatTop.h:137
size_type totalN_m
Total number of particles.
Definition: FlatTop.h:142
GeneratorPool rand_pool_m
Random number generator pool.
Definition: FlatTop.h:132
double sigmaTFall_m
Standard deviation for fall time profile.
Definition: FlatTop.h:136
bool withDomainDecomp_m
Flag for domain decomposition.
Definition: FlatTop.h:143
void initDomainDecomp(double BoxIncr) override
Initializes the domain decomposition.
Definition: FlatTop.cpp:218
Vector_t< double, 3 > hr_m
Grid spacing.
Definition: FlatTop.h:146
double integrateTrapezoidal(double x1, double x2, double y1, double y2)
Integrates using the trapezoidal rule.
Definition: FlatTop.cpp:214
double fallTime_m
Time duration for the fall phase.
Definition: FlatTop.h:139
size_t computeNlocalUniformly(size_t nglobal)
Computes the local number of particles uniformly distributed among ranks.
Definition: FlatTop.cpp:196
double normalizedFlankArea_m
Normalized area of the distribution flanks.
Definition: FlatTop.h:134
void setWithDomainDecomp(bool withDomainDecomp) override
Sets whether to use domain decomposition.
Definition: FlatTop.cpp:61
double getEmissionTime()
Returns the total emission time.
Definition: FlatTop.h:127
void emitParticles(double t, double dt) override
Emits new particles within a given time interval.
Definition: FlatTop.cpp:325
void setInternalVariables(bool emitting, double sigmaTFall, double sigmaTRise, Vector_t< double, 3 > cutoff, double tPulseLengthFWHM, Vector_t< double, 3 > sigmaR)
Definition: FlatTop.cpp:93
double riseTime_m
Time duration for the rise phase.
Definition: FlatTop.h:140
void generateParticles(size_t &numberOfParticles, Vector_t< double, 3 > nr) override
Generates particles with a given number and grid configuration.
Definition: FlatTop.cpp:160
double countEnteringParticlesPerRank(double t0, double tf)
Counts the number of particles entering per rank in a given time interval.
Definition: FlatTop.cpp:239
void generateUniformDisk(size_type nlocal, size_t nNew)
Generates particles (x,y) uniformly on a disk distribution.
Definition: FlatTop.cpp:126
void testNumEmitParticles(size_type nsteps, double dt) override
Tests the number of emitted particles over a given number of steps.
Definition: FlatTop.cpp:344
Vector_t< double, 3 > cutoffR_m
Cutoff radius.
Definition: FlatTop.h:138
double flattopTime_m
Time duration of when the time profile is flat.
Definition: FlatTop.h:133
FlatTop(std::shared_ptr< ParticleContainer_t > &pc, std::shared_ptr< FieldContainer_t > &fc, std::shared_ptr< Distribution_t > &opalDist)
Constructor for FlatTop.
Definition: FlatTop.cpp:13
ippl::detail::size_type size_type
Definition: FlatTop.h:131
void setParameters(const std::shared_ptr< Distribution_t > &opalDist)
Sets distribution parameters.
Definition: FlatTop.cpp:77
double getDistArea()
Returns the total area of the distribution.
Definition: FlatTop.h:120