50#include "Manager/BaseManager.h"
51#include "Manager/PicManager.h"
57#include "Random/Distribution.h"
58#include "Random/InverseTransformSampling.h"
59#include "Random/NormalDistribution.h"
60#include "Random/Randn.h"
73KOKKOS_INLINE_FUNCTION
typename T::value_type
L2Norm(
T& x) {
74 return sqrt(
dot(x, x).apply());
79template <
typename T,
unsigned Dim>
81 :
public ippl::PicManager<
82 T, Dim, ParticleContainer<T, Dim>, FieldContainer<T, Dim>, LoadBalancer<T, Dim>> {
88 using Base = ippl::ParticleBase<ippl::ParticleSpatialLayout<T, Dim>>;
233 std::shared_ptr<VField_t<T, Dim>>
Etmp_m;
237 PartBunch(
double qi,
double mi,
size_t totalP,
int nt,
double lbt, std::string integration_method,
238 std::shared_ptr<Distribution> &OPALdistribution, std::shared_ptr<FieldSolverCmd> &OPALFieldSolver);
245 *
gmsg <<
"* Finished time step: " << this->it_m <<
" time: " << this->time_m << endl;
249 return this->pcontainer_m;
265 this->pcontainer_m->updateMoments();
269 return this->pcontainer_m->getTotalNum();
273 return this->pcontainer_m->getLocalNum();
359 return this->pcontainer_m->getStdKineticEnergy();
431 void swap(
unsigned int i,
unsigned int j) {
447 unsigned int nBins, std::vector<double>& lineDensity, std::pair<double, double>& meshInfo) {
564 void setZ(
int i,
double zcoo) {
627 return this->pcontainer_m->getMeanKineticEnergy();
639 return this->pcontainer_m->getCentroid();
643 return this->pcontainer_m->getRmsR();
647 return this->pcontainer_m->getRmsRP();
651 return this->pcontainer_m->getRmsP();
655 return this->pcontainer_m->getMeanR();
659 return this->pcontainer_m->getMeanP();
668 return this->pcontainer_m->getNormEmit();
702 return this->pcontainer_m->getDx();
705 return this->pcontainer_m->getDy();
708 return this->pcontainer_m->getDDx();
711 return this->pcontainer_m->getDDy();
715 return this->pcontainer_m->getTemperature();
723 return this->pcontainer_m->getDebyeLength();
727 return this->pcontainer_m->getPlasmaParameter();
double dot(const Vector3D &lhs, const Vector3D &rhs)
Vector dot product.
ippl::Field< ippl::Vector< T, Dim >, Dim, ViewArgs... > VField_t
ippl::Vector< T, Dim > Vector_t
typename ippl::detail::ViewType< ippl::Vector< double, Dim >, 1 >::view_type view_type
KOKKOS_INLINE_FUNCTION T::value_type L2Norm(T &x)
Defines a structure to hold particles in energy bins and their associated data.
ippl::detail::size_type size_type
long long localTrackStep_m
Vector_t< double, Dim > get_rprms() const
void setGlobalMeanR(Vector_t< double, Dim > globalMeanR)
PartBunch(double qi, double mi, size_t totalP, int nt, double lbt, std::string integration_method, std::shared_ptr< Distribution > &OPALdistribution, std::shared_ptr< FieldSolverCmd > &OPALFieldSolver)
PartData * getReference()
long long getLocalTrackStep() const
Vector_t< double, Dim > rmin_m
void bunchUpdate(ippl::Vector< double, 3 > hr)
void gatherLoadBalanceStatistics()
void setZ(int i, double zcoo)
Solver_t< double, Dim > solver_m
std::array< bool, Dim > decomp_m
Vector_t< double, Dim > dt(size_t i)
size_t getNumberOfEmissionSteps()
Vector_t< double, Dim > get_rrms() const
Vector_t< double, Dim > globalMeanR_m
void setSteptoLastInj(int n)
size_t getTotalNum() const
Vector_t< double, Dim > get_normalizedEps_99_99Percentile() const
Vector_t< double, Dim > get_norm_emit() const
double get_plasmaParameter() const
void switchOffUnitlessPositions(bool use_dt_per_particle=false)
Vector_t< double, Dim > get_prms() const
int getSteptoLastInj() const
void setCouplingConstant(double c)
double calculateAngle(double x, double y)
Vector_t< double, Dim > get_pmean_Distribution() const
void setBeamFrequency(double v)
Vector_t< double, Dim > P(size_t i)
int getLastEmittedEnergyBin()
long long getGlobalTrackStep() const
double get_rmsDensity() const
Vector_t< double, Dim > get_emit() const
double getChargePerParticle() const
Vector_t< double, Dim > get_95Percentile() const
int getStepsPerTurn() const
std::shared_ptr< VField_t< T, Dim > > getTempEField()
double getCouplingConstant() const
Vector_t< double, Dim > Bf(size_t i)
Vector_t< double, Dim > get_rmean() const
bool resetPartBinID2(const double eta)
Quaternion_t globalToLocalQuaternion_m
void scatterCICPerBin(binIndex_t binIndex)
typename ParticleBinning::AdaptBins< ParticleContainer_t, BinningSelector_t > AdaptBins_t
Vector_t< double, Dim > rmax_m
void setGlobalToLocalQuaternion(Quaternion_t globalToLocalQuaternion)
Vector_t< double, Dim > get_maxExtent() const
std::shared_ptr< FieldSolverCmd > OPALFieldSolver_m
double getCharge() const
get the total charge per simulation particle
void setBinCharge(int bin, double q)
Vector_t< double, Dim > get_68Percentile() const
int getNumberOfEnergyBins()
void get_bounds(Vector_t< double, Dim > &rmin, Vector_t< double, Dim > &rmax)
bool isFirstRepartition_m
double get_debyeLength() const
Vector_t< double, Dim > RefPartR_m
Vector_t< double, Dim > nr_m
double getRho(int x, int y, int z)
void setLocalBinCount(size_t num, int bin)
typename ParticleContainer_t::bin_index_type binIndex_t
double getGamma(int i) const
Vector_t< double, Dim > getEExtrema()
Inform & print(Inform &os)
FieldSolver< double, Dim > FieldSolver_t
void setTEmission(double t)
std::shared_ptr< ParticleContainer_t > getParticleContainer()
ParticleContainer< double, Dim > ParticleContainer_t
ParticleAttrib< double > dt
void setBinCharge(int bin)
Vector_t< double, Dim > get_normalizedEps_68Percentile() const
double get_meanKineticEnergy()
void setLocalTrackStep(long long n)
step in a TRACK command
Vector_t< double, 2 *Dim > get_centroid() const
void gatherStatistics(unsigned int totalP)
void getLocalBounds(Vector_t< double, Dim > &rmin, Vector_t< double, Dim > &rmax)
long long globalTrackStep_m
Vector_t< double, Dim > get_halo() const
std::shared_ptr< VField_t< double, Dim > > Etmp_m
bool getFieldSolverType()
size_t calcNumPartsOutside(Vector_t< double, Dim > x)
FieldContainer< double, Dim > FieldContainer_t
std::vector< size_t > bunchTotalNum_m
void setSolver(std::string solver)
double getBinGamma(int bin)
void swap(unsigned int i, unsigned int j)
size_t getLocalNum() const
short getNumBunch() const
Vector_t< double, Dim > R(size_t i)
Vector_t< double, Dim > get_normalizedEps_95Percentile() const
void get_PBounds(Vector_t< double, Dim > &min, Vector_t< double, Dim > &max)
Vector_t< double, Dim > get_99_99Percentile() const
Vector_t< double, Dim > Ef(size_t i)
std::string integration_method_m
double get_temperature() const
size_t emitParticles(double eZ)
ippl::NDIndex< Dim > domain_m
Vector_t< double, Dim > get_hr() const
void setEnergyBins(int numberOfEnergyBins)
void calcBeamParameters()
void setStepsPerTurn(int n)
Vector_t< double, Dim > hr_m
void spaceChargeEFieldCheck(Vector_t< double, 3 > efScale)
void setNumBunch(short n)
void switchToUnitlessPositions(bool use_dt_per_particle=false)
void setBins(std::shared_ptr< AdaptBins_t > bins)
size_t getLoadBalance(int p)
std::vector< size_t > bunchLocalNum_m
typename ParticleBinning::CoordinateSelector< ParticleContainer_t > BinningSelector_t
Quaternion_t getGlobalToLocalQuaternion()
double getBeta(int i) const
Vector_t< double, Dim > origin_m
double couplingConstant_m
size_t getTotalNum() const
Vector_t< double, Dim > get_normalizedEps_99Percentile() const
Vector_t< double, Dim > RefPartP_m
void setdT(double dt)
get 2nd order beam matrix
std::shared_ptr< Distribution > OPALdist_m
std::shared_ptr< AdaptBins_t > getBins()
Vector_t< double, Dim > get_origin() const
void setGlobalTrackStep(long long n)
step in multiple TRACK commands
double getEmissionDeltaT()
double getMassPerParticle() const
Vector_t< double, Dim > getGlobalMeanR()
Vector_t< double, Dim > get_99Percentile() const
void calcLineDensity(unsigned int nBins, std::vector< double > &lineDensity, std::pair< double, double > &meshInfo)
ippl::ParticleBase< ippl::ParticleSpatialLayout< double, Dim > > Base
Vector_t< double, Dim > get_pmean() const
LoadBalancer< double, Dim > LoadBalancer_t
std::unique_ptr< size_t[]> globalPartPerNode_m
std::shared_ptr< AdaptBins_t > bins_m
CoordinateSystemTrafo toLabTrafo_m
void resetInterpolationCache(bool clearCache=false)
std::unique_ptr< double[]> bingamma_m
void setTempEField(std::shared_ptr< VField_t< T, Dim > > Etmp)
A class that bins particles in energy bins and allows for adaptive runtime rebinning.
Example struct used to access the binning variable for each particle.
short int bin_index_type
Defines which type to use as a particle bin.