18#ifndef PART_BUNCH_BASE_H
19#define PART_BUNCH_BASE_H
23#include <Kokkos_MathematicalConstants.hpp>
24#include <Kokkos_MathematicalFunctions.hpp>
33#include "Algorithms/Quaternion.h"
40#include "Structure/FieldSolver.h"
54template <
class T,
unsigned Dim>
55class PartBunch : std::enable_shared_from_this<PartBunch<T, Dim>> {
99 "PartBunch::ConstIterator::operator*",
"out of bounds");
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"
PartBunch< T, Dim >::ConstIterator end(PartBunch< T, Dim > const &bunch)
PartBunch< T, Dim >::ConstIterator begin(PartBunch< T, Dim > const &bunch)
KOKKOS_INLINE_FUNCTION Vector< T, Dim > max(const Vector< T, Dim > &a, const Vector< T, Dim > &b)
KOKKOS_INLINE_FUNCTION Vector< T, Dim > min(const Vector< T, Dim > &a, const Vector< T, Dim > &b)
Vector_t< double, 3 > getKs3DRefr()
ConstIterator begin() const
void setKs3DRefp(Vector_t< double, 3 > p)
virtual void updateDomainLength(Vektor< int, 3 > &grid)=0
Vector_t< double, Dim > R(size_t)
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)
void get_PBounds(Vector_t< T, Dim > &min, Vector_t< T, Dim > &max) const
size_t getDestroyNum() const
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
ParticleAttrib< Vector_t< T, Dim > > P
void setup(AbstractParticle< T, Dim > *pb)
void setBConds(const ParticleBConds< Position_t, Dimension > &bc)
ParticleBConds< Position_t, Dimension > & getBConds()
void setUpdateFlag(UpdateFlags_t f, bool val)
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)
ParticleAttrib< double > Q
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
particle_index_type ID
view of particle IDs