18#ifndef PART_BUNCH_BASE_H
19#define PART_BUNCH_BASE_H
23#include <Kokkos_MathematicalConstants.hpp>
24#include <Kokkos_MathematicalFunctions.hpp>
27#include "Particle/ParticleAttrib.h"
28#include "Particle/ParticleLayout.h"
33#include "Algorithms/Quaternion.h"
40#include "Structure/FieldSolver.h"
42#include "Utility/IpplTimings.h"
54template <
class T,
unsigned Dim>
55class PartBunch : std::enable_shared_from_this<PartBunch<T, Dim>> {
99 "PartBunch::ConstIterator::operator*",
"out of bounds");
128 return ConstIterator(
this, 0);
131 ConstIterator
end()
const {
165 return pbase_m->getBConds();
168 void setBConds(
const ParticleBConds<Position_t, Dimension>& bc) {
169 pbase_m->setBConds(bc);
181 void destroy(
size_t M,
size_t I,
bool doNow =
false);
200 void setup(AbstractParticle<T, Dim>* pb);
203template <
class T,
unsigned Dim>
205 return bunch.
begin();
208template <
class T,
unsigned Dim>
213#include "PartBunch.hpp"
ippl::Vector< T, Dim > Vector_t
PartBunch< T, Dim >::ConstIterator end(PartBunch< T, Dim > const &bunch)
PartBunch< T, Dim >::ConstIterator begin(PartBunch< T, Dim > const &bunch)
ippl::ParticleAttrib< T > ParticleAttrib
Vector_t< double, 3 > getKs3DRefr()
ConstIterator begin() const
void setKs3DRefp(Vector_t< double, 3 > p)
virtual void updateDomainLength(Vektor< int, 3 > &grid)=0
void performDestroy(bool updateLocalNum=false)
void destroy(size_t M, size_t I, bool doNow=false)
void setKs3DRefr(Vector_t< double, 3 > r)
std::pair< Vector_t< double, 3 >, Vector_t< double, 3 > > VectorPair_t
static const unsigned Dimension
double calculateAngle(double x, double y)
angle range [0~2PI) degree
ConstIterator end() const
ParticleAttrib< double > M
virtual void updateFields(const Vector_t< double, 3 > &hr, const Vector_t< double, 3 > &origin)
size_t getDestroyNum() const
void update(const ParticleAttrib< char > &canSwap)
Vector_t< double, 3 > getKs3DRefp()
void setQKs3D(Quaternion_t q)
void calcMomentsInitial()
void ghostDestroy(size_t M, size_t I)
size_t getLocalNum() const
void setLocalNum(size_t n)
PartBunch(const PartBunch &rhs)=delete
void setup(AbstractParticle< T, Dim > *pb)
void setBConds(const ParticleBConds< Position_t, Dimension > &bc)
void get_PBounds(Vector_t< double, 3 > &min, Vector_t< double, 3 > &max) const
Return maximum amplitudes.
ParticleBConds< Position_t, Dimension > & getBConds()
void setUpdateFlag(UpdateFlags_t f, bool val)
PartBunch(AbstractParticle< T, Dim > *pb, const PartData *ref)
PartBunch(PLayout_t< double, 3 > &pl, Vector_t< double, Dim > hr, Vector_t< double, Dim > rmin, Vector_t< double, Dim > rmax, std::array< bool, Dim > decomp, double Qtot)
void globalCreate(size_t np)
bool getUpdateFlag(UpdateFlags_t f) const
void createWithID(unsigned id)
size_t getTotalNum() const
void iterateEmittedBin(int binNumber)
void setTotalNum(size_t n)
size_t getGhostNum() const
ConstIterator operator++()
PartBunch const * bunch_m
bool operator!=(ConstIterator const &rhs) const
ConstIterator(PartBunch const *bunch, unsigned int i)
bool operator==(ConstIterator const &rhs) const
ConstIterator operator++(int)
int operator-(const ConstIterator &other) const
OpalParticle operator*() const