OPAL (Object Oriented Parallel Accelerator Library) 2022.1
OPAL
Public Types | Public Member Functions | Public Attributes | Private Member Functions | Private Attributes | List of all members
PartBunch Class Reference

#include <PartBunch.h>

Inheritance diagram for PartBunch:
Inheritance graph
[legend]
Collaboration diagram for PartBunch:
Collaboration graph
[legend]

Public Types

enum  { Dim = Dimension }
 
typedef IpplParticleBase< Layout_tpbase_t
 
- Public Types inherited from PartBunchBase< double, 3 >
enum  UnitState_t
 
typedef AbstractParticle< double, Dim >::ParticlePos_t ParticlePos_t
 
typedef AbstractParticle< double, Dim >::ParticleIndex_t ParticleIndex_t
 
typedef AbstractParticle< double, Dim >::UpdateFlags UpdateFlags_t
 
typedef AbstractParticle< double, Dim >::Position_t Position_t
 
typedef std::pair< Vector_t, Vector_tVectorPair_t
 

Public Member Functions

 PartBunch (const PartData *ref)
 Default constructor. More...
 
 PartBunch ()=delete
 
 PartBunch (const PartBunch &)=delete
 
PartBunchoperator= (const PartBunch &)=delete
 
 ~PartBunch ()
 
void initialize (FieldLayout_t *fLayout)
 
void do_binaryRepart ()
 
double getRho (int x, int y, int z)
 
const Mesh_tgetMesh () const
 
Mesh_tgetMesh ()
 
FieldLayout_tgetFieldLayout ()
 
void setBCAllPeriodic ()
 
void setBCAllOpen ()
 
void setBCForDCBeam ()
 
VectorPair_t getEExtrema ()
 
void computeSelfFields ()
 
void computeSelfFields (int b)
 
void computeSelfFields_cycl (double gamma)
 Calculates the self electric field from the charge density distribution for use in cyclotrons. More...
 
void computeSelfFields_cycl (int b)
 Calculates the self electric field from the charge density distribution for use in cyclotrons. More...
 
void resetInterpolationCache (bool clearCache=false)
 
void swap (unsigned int i, unsigned int j)
 
Informprint (Inform &os)
 
- Public Member Functions inherited from PartBunchBase< double, 3 >
virtual ~PartBunchBase ()
 
 PartBunchBase (AbstractParticle< double, Dim > *pb, const PartData *ref)
 
 PartBunchBase (const PartBunchBase &rhs)=delete
 
virtual void initialize (FieldLayout_t *fLayout)=0
 
bool getIfBeamEmitting ()
 
int getLastEmittedEnergyBin ()
 
size_t getNumberOfEmissionSteps ()
 
int getNumberOfEnergyBins ()
 
void Rebin ()
 
void setEnergyBins (int numberOfEnergyBins)
 
bool weHaveEnergyBins ()
 
void switchToUnitlessPositions (bool use_dt_per_particle=false)
 
void switchOffUnitlessPositions (bool use_dt_per_particle=false)
 
void setDistribution (Distribution *d, std::vector< Distribution * > addedDistributions, size_t &np)
 
void setDistribution (Distribution *d, size_t numberOfParticles, double current, const Beamline &bl)
 
bool isGridFixed () const
 
bool hasBinning () const
 
void setTEmission (double t)
 
double getTEmission ()
 
bool doEmission ()
 
bool weHaveBins () const
 
void setPBins (PartBins *pbin)
 
void setPBins (PartBinsCyc *pbin)
 
size_t emitParticles (double eZ)
 Emit particles in the given bin i.e. copy the particles from the bin structure into the particle container. More...
 
void updateNumTotal ()
 
void rebin ()
 
int getLastemittedBin ()
 
void setLocalBinCount (size_t num, int bin)
 
void calcGammas ()
 Compute the gammas of all bins. More...
 
void calcGammas_cycl ()
 
void calcDebyeLength ()
 Compute the (global) Debye length for the beam. More...
 
double getBinGamma (int bin)
 Get gamma of one bin. More...
 
virtual void setBinCharge (int bin, double q)
 Set the charge of one bin to the value of q and all other to zero. More...
 
virtual void setBinCharge (int bin)
 Set the charge of all other the ones in bin to zero. More...
 
size_t calcNumPartsOutside (Vector_t x)
 returns the number of particles outside of a box defined by x More...
 
void calcLineDensity (unsigned int nBins, std::vector< double > &lineDensity, std::pair< double, double > &meshInfo)
 calculates the 1d line density (not normalized) and append it to a file. More...
 
void setBeamFrequency (double v)
 
virtual void boundp ()
 
void boundp_destroyCycl ()
 
size_t boundp_destroyT ()
 
size_t destroyT ()
 
virtual double getPx (int i)
 
virtual double getPy (int i)
 
virtual double getPz (int i)
 
virtual double getPx0 (int i)
 
virtual double getPy0 (int i)
 
virtual double getX (int i)
 
virtual double getY (int i)
 
virtual double getZ (int i)
 
virtual double getX0 (int i)
 
virtual double getY0 (int i)
 
virtual void setZ (int i, double zcoo)
 
void get_bounds (Vector_t &rmin, Vector_t &rmax) const
 
void getLocalBounds (Vector_t &rmin, Vector_t &rmax) const
 
std::pair< Vector_t, double > getBoundingSphere ()
 
std::pair< Vector_t, double > getLocalBoundingSphere ()
 
void push_back (OpalParticle const &p)
 
void setParticle (FVector< double, 6 > z, int ii)
 
void setParticle (OpalParticle const &p, int ii)
 
OpalParticle getParticle (int ii)
 
ConstIterator begin () const
 
ConstIterator end () const
 
void maximumAmplitudes (const FMatrix< double, 6, 6 > &D, double &axmax, double &aymax)
 Return maximum amplitudes. More...
 
void setdT (double dt)
 
double getdT () const
 
void setT (double t)
 
void incrementT ()
 
double getT () const
 
double get_sPos () const
 
void set_sPos (double s)
 
double get_gamma () const
 
double get_meanKineticEnergy () const
 
double get_temperature () const
 
double get_debyeLength () const
 
double get_plasmaParameter () const
 
double get_rmsDensity () const
 
Vector_t get_origin () const
 
Vector_t get_maxExtent () const
 
Vector_t get_centroid () const
 
Vector_t get_rrms () const
 
Vector_t get_rprms () const
 
Vector_t get_rmean () const
 
Vector_t get_prms () const
 
Vector_t get_pmean () const
 
Vector_t get_pmean_Distribution () const
 
Vector_t get_emit () const
 
Vector_t get_norm_emit () const
 
Vector_t get_halo () const
 
Vector_t get_68Percentile () const
 
Vector_t get_95Percentile () const
 
Vector_t get_99Percentile () const
 
Vector_t get_99_99Percentile () const
 
Vector_t get_normalizedEps_68Percentile () const
 
Vector_t get_normalizedEps_95Percentile () const
 
Vector_t get_normalizedEps_99Percentile () const
 
Vector_t get_normalizedEps_99_99Percentile () const
 
virtual Vector_t get_hr () const
 
double get_Dx () const
 
double get_Dy () const
 
double get_DDx () const
 
double get_DDy () const
 
virtual void set_meshEnlargement (double dh)
 
void gatherLoadBalanceStatistics ()
 
size_t getLoadBalance (int p) const
 
void get_PBounds (Vector_t &min, Vector_t &max) const
 
void calcBeamParameters ()
 
void calcBeamParametersInitial ()
 
double getCouplingConstant () const
 
void setCouplingConstant (double c)
 
void setCharge (double q)
 
void setChargeZeroPart (double q)
 
void setMass (double mass)
 
void setMassZeroPart (double mass)
 
double getCharge () const
 get the total charge per simulation particle More...
 
double getChargePerParticle () const
 get the macro particle charge More...
 
double getMassPerParticle () const
 
virtual void setSolver (FieldSolver *fs)
 
bool hasFieldSolver ()
 
FieldSolverType getFieldSolverType () const
 Return the fieldsolver type if we have a fieldsolver. More...
 
void setStepsPerTurn (int n)
 
int getStepsPerTurn () const
 
void setGlobalTrackStep (long long n)
 step in multiple TRACK commands More...
 
long long getGlobalTrackStep () const
 
void setLocalTrackStep (long long n)
 step in a TRACK command More...
 
void incTrackSteps ()
 
long long getLocalTrackStep () const
 
void setNumBunch (short n)
 
short getNumBunch () const
 
void setTotalNumPerBunch (size_t numpart, short n)
 
size_t getTotalNumPerBunch (short n) const
 
void setLocalNumPerBunch (size_t numpart, short n)
 
size_t getLocalNumPerBunch (short n) const
 
void countTotalNumPerBunch ()
 
void setGlobalMeanR (Vector_t globalMeanR)
 
Vector_t getGlobalMeanR ()
 
void setGlobalToLocalQuaternion (Quaternion_t globalToLocalQuaternion)
 
Quaternion_t getGlobalToLocalQuaternion ()
 
void setSteptoLastInj (int n)
 
int getSteptoLastInj () const
 
double calcMeanPhi ()
 calculate average angle of longitudinal direction of bins More...
 
bool resetPartBinID2 (const double eta)
 reset Bin[] for each particle according to the method given in paper PAST-AB(064402) by G. Fubiani et al. More...
 
bool resetPartBinBunch ()
 
double getdE () const
 
virtual double getGamma (int i)
 
virtual double getBeta (int i)
 
virtual void actT ()
 
const PartDatagetReference () const
 
double getEmissionDeltaT ()
 
DistributionType getDistType () const
 
Quaternion_t getQKs3D ()
 
void setQKs3D (Quaternion_t q)
 
Vector_t getKs3DRefr ()
 
void setKs3DRefr (Vector_t r)
 
Vector_t getKs3DRefp ()
 
void setKs3DRefp (Vector_t p)
 
void iterateEmittedBin (int binNumber)
 
void calcEMean ()
 
Informprint (Inform &os)
 
virtual void runTests ()
 
virtual void do_binaryRepart ()
 
virtual void resetInterpolationCache (bool clearCache=false)
 
virtual VectorPair_t getEExtrema ()=0
 
virtual double getRho (int x, int y, int z)=0
 
virtual void computeSelfFields ()=0
 
virtual void computeSelfFields (int bin)=0
 
virtual void computeSelfFields_cycl (double gamma)=0
 
virtual void computeSelfFields_cycl (int bin)=0
 
virtual void swap (unsigned int i, unsigned int j)
 
virtual void setBCAllPeriodic ()
 
virtual void setBCAllOpen ()
 
virtual void setBCForDCBeam ()
 
virtual FieldLayout_tgetFieldLayout ()=0
 
virtual void resizeMesh ()
 
size_t getTotalNum () const
 
void setTotalNum (size_t n)
 
void setLocalNum (size_t n)
 
size_t getLocalNum () const
 
size_t getDestroyNum () const
 
size_t getGhostNum () const
 
ParticleLayout< double, Dim > & getLayout ()
 
const ParticleLayout< double, Dim > & getLayout () const
 
bool getUpdateFlag (UpdateFlags_t f) const
 
void setUpdateFlag (UpdateFlags_t f, bool val)
 
ParticleBConds< Position_t, Dimension > & getBConds ()
 
void setBConds (const ParticleBConds< Position_t, Dimension > &bc)
 
bool singleInitNode () const
 
void resetID ()
 
void update ()
 
void update (const ParticleAttrib< char > &canSwap)
 
void createWithID (unsigned id)
 
void create (size_t M)
 
void globalCreate (size_t np)
 
void destroy (size_t M, size_t I, bool doNow=false)
 
void performDestroy (bool updateLocalNum=false)
 
void ghostDestroy (size_t M, size_t I)
 
FMatrix< double, 2 *Dim, 2 *DimgetSigmaMatrix () const
 
double getQ () const
 Access to reference data. More...
 
double getM () const
 
double getP () const
 
double getE () const
 
ParticleOrigin getPOrigin () const
 
ParticleType getPType () const
 
double getInitialBeta () const
 
double getInitialGamma () const
 
void resetQ (double q)
 
void resetM (double m)
 
void setPOrigin (ParticleOrigin)
 
void setPType (const std::string &type)
 

Public Attributes

Field_t rho_m
 scalar potential More...
 
VField_t eg_m
 vector field on the grid More...
 
- Public Attributes inherited from PartBunchBase< double, 3 >
ParticlePos_tR
 
ParticleIndex_tID
 
ParticleAttrib< Vector_tP
 
ParticleAttrib< double > Q
 
ParticleAttrib< double > M
 
ParticleAttrib< double > Phi
 
ParticleAttrib< Vector_tEf
 
ParticleAttrib< Vector_tEftmp
 
ParticleAttrib< Vector_tBf
 
ParticleAttrib< int > Bin
 
ParticleAttrib< double > dt
 
ParticleAttrib< ParticleTypePType
 
ParticleAttrib< ParticleOriginPOrigin
 
ParticleAttrib< int > TriID
 
ParticleAttrib< short > cavityGapCrossed
 
ParticleAttrib< short > bunchNum
 
Vector_t RefPartR_m
 
Vector_t RefPartP_m
 
CoordinateSystemTrafo toLabTrafo_m
 
ParticleOrigin refPOrigin_m
 
ParticleType refPType_m
 
PartBinspbin_m
 
IpplTimings::TimerRef distrReload_m
 timer for IC, can not be in Distribution.h More...
 
IpplTimings::TimerRef distrCreate_m
 
double dtScInit_m
 
double deltaTau_m
 

Private Member Functions

void updateDomainLength (Vektor< int, 3 > &grid)
 
void updateFields (const Vector_t &hr, const Vector_t &origin)
 
void resizeMesh ()
 resize mesh to geometry specified More...
 
ParticleLayout< double, 3 > & getLayout ()
 
const ParticleLayout< double, 3 > & getLayout () const
 

Private Attributes

BConds< double, 3, Mesh_t, Center_tbc_m
 for defining the boundary conditions More...
 
BConds< Vector_t, 3, Mesh_t, Center_tvbc_m
 
bool interpolationCacheSet_m
 
ParticleAttrib< CacheDataCIC< double, 3U > > interpolationCache_m
 

Additional Inherited Members

- Static Public Attributes inherited from PartBunchBase< double, 3 >
static const unsigned Dimension
 
- Protected Member Functions inherited from PartBunchBase< double, 3 >
size_t calcMoments ()
 
void calcMomentsInitial ()
 
double calculateAngle (double x, double y)
 angle range [0~2PI) degree More...
 
- Protected Attributes inherited from PartBunchBase< double, 3 >
IpplTimings::TimerRef boundpTimer_m
 
IpplTimings::TimerRef boundpBoundsTimer_m
 
IpplTimings::TimerRef boundpUpdateTimer_m
 
IpplTimings::TimerRef statParamTimer_m
 
IpplTimings::TimerRef histoTimer_m
 
IpplTimings::TimerRef selfFieldTimer_m
 timer for selfField calculation More...
 
const PartDatareference
 
UnitState_t unit_state_
 
UnitState_t stateOfLastBoundP_
 
double centroid_m [2 *Dim]
 holds the centroid of the beam More...
 
double dt_m
 holds the timestep in seconds More...
 
double t_m
 holds the actual time of the integration More...
 
double spos_m
 the position along design trajectory More...
 
Vector_t globalMeanR_m
 
Quaternion_t globalToLocalQuaternion_m
 
Vector_t rmax_m
 maximal extend of particles More...
 
Vector_t rmin_m
 minimal extend of particles More...
 
double rmsDensity_m
 
Vector_t hr_m
 meshspacing of cartesian mesh More...
 
Vektor< int, 3 > nr_m
 meshsize of cartesian mesh More...
 
FieldSolverfs_m
 stores the used field solver More...
 
double couplingConstant_m
 
double qi_m
 
double massPerParticle_m
 
int distDump_m
 counter to store the distribution dump More...
 
double dh_m
 Mesh enlargement. More...
 
double tEmission_m
 relative enlargement of the mesh More...
 
std::unique_ptr< double[]> bingamma_m
 holds the gamma of the bin More...
 
std::unique_ptr< size_t[]> binemitted_m
 
int stepsPerTurn_m
 steps per turn for OPAL-cycl More...
 
long long localTrackStep_m
 step in a TRACK command More...
 
long long globalTrackStep_m
 if multiple TRACK commands More...
 
short numBunch_m
 current bunch number More...
 
std::vector< size_t > bunchTotalNum_m
 number of particles per bunch More...
 
std::vector< size_t > bunchLocalNum_m
 
int SteptoLastInj_m
 
std::unique_ptr< size_t[]> globalPartPerNode_m
 
Distributiondist_m
 
DistributionMoments momentsComputer_m
 
bool dcBeam_m
 
double periodLength_m
 
std::shared_ptr< AbstractParticle< double, Dim > > pbase_m
 

Detailed Description

Definition at line 24 of file PartBunch.h.

Member Typedef Documentation

◆ pbase_t

Definition at line 27 of file PartBunch.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
Dim 

Definition at line 28 of file PartBunch.h.

Constructor & Destructor Documentation

◆ PartBunch() [1/3]

PartBunch::PartBunch ( const PartData ref)
explicit

Default constructor.

Definition at line 40 of file PartBunch.cpp.

◆ PartBunch() [2/3]

PartBunch::PartBunch ( )
delete

◆ PartBunch() [3/3]

PartBunch::PartBunch ( const PartBunch )
delete

◆ ~PartBunch()

PartBunch::~PartBunch ( )

Definition at line 48 of file PartBunch.cpp.

Member Function Documentation

◆ computeSelfFields() [1/2]

void PartBunch::computeSelfFields ( )
virtual

◆ computeSelfFields() [2/2]

void PartBunch::computeSelfFields ( int  b)
virtual

/brief used for self fields with binned distribution

Set initial charge density to zero. Create image charge potential field.

Set initial E field to zero.

Mesh the whole domain

Scatter charge onto space charge grid.

Calculate mesh-scale factor and get gamma for this specific slice (bin).

Scale charge density to get charge density in real units. Account for Lorentz transformation in longitudinal direction.

Scale mesh spacing to real units (meters). Lorentz transform the longitudinal direction.

Find potential from charge in this bin (no image yet) using Poisson's equation (without coefficient: -1/(eps)).

Scale mesh back (to same units as particle locations.)

The scalar potential is given back in rho_m and must be converted to the right units.

IPPL Grad numerical computes gradient to find the electric field (in bin rest frame).

Scale field. Combine Lorentz transform with conversion to proper field units.

Interpolate electric field at particle positions. We reuse the cached information about where the particles are relative to the field, since the particles have not moved since this the most recent scatter operation.

Magnetic field in x and y direction induced by the electric field.

\[ B_x = \gamma(B_x^{'} - \frac{beta}{c}E_y^{'}) = -\gamma \frac{beta}{c}E_y^{'} = -\frac{beta}{c}E_y \]

\[ B_y = \gamma(B_y^{'} - \frac{beta}{c}E_x^{'}) = +\gamma \frac{beta}{c}E_x^{'} = +\frac{beta}{c}E_x \]

\[ B_z = B_z^{'} = 0 \]

Now compute field due to image charge. This is done separately as the image charge is moving to -infinity (instead of +infinity) so the Lorentz transform is different.

Find z shift for shifted Green's function.

Find potential from image charge in this bin using Poisson's equation (without coefficient: -1/(eps)).

Scale mesh back (to same units as particle locations.)

The scalar potential is given back in rho_m and must be converted to the right units.

IPPL Grad numerical computes gradient to find the electric field (in rest frame of this bin's image charge).

Scale field. Combine Lorentz transform with conversion to proper field units.

Interpolate electric field at particle positions. We reuse the cached information about where the particles are relative to the field, since the particles have not moved since this the most recent scatter operation.

Magnetic field in x and y direction induced by the image charge electric field. Note that beta will have the opposite sign from the bunch charge field, as the image charge is moving in the opposite direction.

\[ B_x = \gamma(B_x^{'} - \frac{beta}{c}E_y^{'}) = -\gamma \frac{beta}{c}E_y^{'} = -\frac{beta}{c}E_y \]

\[ B_y = \gamma(B_y^{'} - \frac{beta}{c}E_x^{'}) = +\gamma \frac{beta}{c}E_x^{'} = +\frac{beta}{c}E_x \]

\[ B_z = B_z^{'} = 0 \]

Implements PartBunchBase< double, 3 >.

Definition at line 76 of file PartBunch.cpp.

References PartBunchBase< double, 3 >::Bf, Physics::c, PoissonSolver::computePotential(), ParticleAttrib< T >::create(), ParticleAttrib< T >::destroy(), PartBunchBase< double, 3 >::dt, FieldWriter::dumpField(), PartBunchBase< double, 3 >::Ef, PartBunchBase< double, 3 >::Eftmp, eg_m, endl(), PartBunchBase< double, 3 >::fs_m, Field< T, Dim, M, C >::get_mesh(), PartBunchBase< double, 3 >::getBinGamma(), PartBunchBase< double, 3 >::getCouplingConstant(), FieldLayout< Dim >::getDomain(), PartBunchBase< double, 3 >::getdT(), getFieldLayout(), FieldSolver::getFieldSolverType(), PartBunchBase< double, 3 >::getLocalNum(), gmsg, Grad(), FieldSolver::hasValidSolver(), PartBunchBase< double, 3 >::hr_m, interpolationCache_m, interpolationCacheSet_m, PartBunchBase< double, 3 >::localTrackStep_m, PartBunchBase< double, 3 >::nr_m, P3M, PartBunchBase< double, 3 >::Q, PartBunchBase< double, 3 >::R, resizeMesh(), rho_m, ParticleAttrib< T >::scatter(), PartBunchBase< double, 3 >::selfFieldTimer_m, ParticleAttrib< T >::size(), FieldSolver::solver_m, sqrt(), IpplTimings::startTimer(), and IpplTimings::stopTimer().

Here is the call graph for this function:

◆ computeSelfFields_cycl() [1/2]

void PartBunch::computeSelfFields_cycl ( double  gamma)
virtual

Calculates the self electric field from the charge density distribution for use in cyclotrons.

\method computeSelfFields_cycl()

See also
ParallelCyclotronTracker
Warning
none yet

Comments -DW: I have made some changes in here: -) Some refacturing to make more similar to computeSelfFields() -) Added meanR and quaternion to be handed to the function so that SAAMG solver knows how to rotate the boundary geometry correctly. -) Fixed an error where gamma was not taken into account correctly in direction of movement (y in cyclotron) -) Comment: There is no account for image charges in the cyclotron tracker (yet?)!

set initial charge density to zero.

set initial E field to zero

mesh the whole domain

scatter particles charge onto grid.

Lorentz transformation In particle rest frame, the longitudinal length (y for cyclotron) enlarged

from charge (C) to charge density (C/m^3).

now charge density is in rho_m calculate Possion equation (without coefficient: -1/(eps))

retrive coefficient: -1/(eps)

calculate electric field vectors from field potential

Back Lorentz transformation CAVE: y coordinate needs 1/gamma factor because IPPL function Grad() divides by hr_m which is not scaled appropriately with Lorentz contraction in y direction only hr_scaled is! -DW

interpolate electric field at particle positions.

calculate coefficient

calculate B field from E field

Implements PartBunchBase< double, 3 >.

Definition at line 481 of file PartBunch.cpp.

References PartBunchBase< double, 3 >::Bf, Physics::c, PartBunchBase< double, 3 >::calcDebyeLength(), PoissonSolver::computePotential(), FieldWriter::dumpField(), PartBunchBase< double, 3 >::Ef, eg_m, endl(), FFT, FFTBOX, PartBunchBase< double, 3 >::fs_m, PartBunchBase< double, 3 >::getCouplingConstant(), FieldSolver::getFieldSolverType(), gmsg, Grad(), FieldSolver::hasValidSolver(), PartBunchBase< double, 3 >::hr_m, PartBunchBase< double, 3 >::localTrackStep_m, PartBunchBase< double, 3 >::nr_m, P3M, PartBunchBase< double, 3 >::Q, Physics::q_e, PartBunchBase< double, 3 >::R, resizeMesh(), rho_m, PartBunchBase< double, 3 >::rmsDensity_m, ParticleAttrib< T >::scatter(), PartBunchBase< double, 3 >::selfFieldTimer_m, FieldSolver::solver_m, sqrt(), IpplTimings::startTimer(), IpplTimings::stopTimer(), and sum().

Here is the call graph for this function:

◆ computeSelfFields_cycl() [2/2]

void PartBunch::computeSelfFields_cycl ( int  bin)
virtual

Calculates the self electric field from the charge density distribution for use in cyclotrons.

\method computeSelfFields_cycl()

See also
ParallelCyclotronTracker
Warning
none yet

Overloaded version for having multiple bins with separate gamma for each bin. This is necessary For multi-bunch mode.

Comments -DW: I have made some changes in here: -) Some refacturing to make more similar to computeSelfFields() -) Added meanR and quaternion to be handed to the function (TODO: fall back to meanR = 0 and unit quaternion if not specified) so that SAAMG solver knows how to rotate the boundary geometry correctly. -) Fixed an error where gamma was not taken into account correctly in direction of movement (y in cyclotron) -) Comment: There is no account for image charges in the cyclotron tracker (yet?)!

set initial charge dentsity to zero.

set initial E field to zero

get gamma of this bin

mesh the whole domain

scatter particles charge onto grid.

Lorentz transformation In particle rest frame, the longitudinal length (y for cyclotron) enlarged

from charge (C) to charge density (C/m^3).

now charge density is in rho_m calculate Possion equation (without coefficient: -1/(eps))

retrive coefficient: -1/(eps)

calculate electric field vectors from field potential

Back Lorentz transformation CAVE: y coordinate needs 1/gamma factor because IPPL function Grad() divides by hr_m which is not scaled appropriately with Lorentz contraction in y direction only hr_scaled is! -DW

Interpolate electric field at particle positions.

Calculate coefficient

Calculate B_bin field from E_bin field accumulate B and E field

Implements PartBunchBase< double, 3 >.

Definition at line 621 of file PartBunch.cpp.

References PartBunchBase< double, 3 >::Bf, Physics::c, PoissonSolver::computePotential(), FieldWriter::dumpField(), PartBunchBase< double, 3 >::Ef, PartBunchBase< double, 3 >::Eftmp, eg_m, endl(), FFT, FFTBOX, PartBunchBase< double, 3 >::fs_m, PartBunchBase< double, 3 >::getBinGamma(), PartBunchBase< double, 3 >::getCouplingConstant(), FieldSolver::getFieldSolverType(), gmsg, Grad(), FieldSolver::hasValidSolver(), PartBunchBase< double, 3 >::hr_m, PartBunchBase< double, 3 >::localTrackStep_m, PartBunchBase< double, 3 >::nr_m, P3M, PartBunchBase< double, 3 >::Q, PartBunchBase< double, 3 >::R, resizeMesh(), rho_m, ParticleAttrib< T >::scatter(), PartBunchBase< double, 3 >::selfFieldTimer_m, FieldSolver::solver_m, sqrt(), IpplTimings::startTimer(), and IpplTimings::stopTimer().

Here is the call graph for this function:

◆ do_binaryRepart()

void PartBunch::do_binaryRepart ( )
virtual

◆ getEExtrema()

PartBunch::VectorPair_t PartBunch::getEExtrema ( )
inlinevirtual

Implements PartBunchBase< double, 3 >.

Definition at line 838 of file PartBunch.cpp.

References eg_m, max(), and min().

Here is the call graph for this function:

◆ getFieldLayout()

FieldLayout_t & PartBunch::getFieldLayout ( )
virtual

Implements PartBunchBase< double, 3 >.

Definition at line 760 of file PartBunch.cpp.

References ParticleSpatialLayout< T, Dim, Mesh, CachingPolicy >::getLayout(), and getLayout().

Referenced by computeSelfFields(), resizeMesh(), updateDomainLength(), and updateFields().

Here is the call graph for this function:

◆ getLayout() [1/2]

ParticleLayout< double, 3 > & PartBunch::getLayout ( )
inlineprivate

Definition at line 120 of file PartBunch.h.

References PartBunchBase< double, 3 >::pbase_m.

Referenced by getFieldLayout(), getMesh(), and initialize().

◆ getLayout() [2/2]

const ParticleLayout< double, 3 > & PartBunch::getLayout ( ) const
inlineprivate

Definition at line 125 of file PartBunch.h.

References PartBunchBase< double, 3 >::pbase_m.

◆ getMesh() [1/2]

Mesh_t & PartBunch::getMesh ( )
inline

Definition at line 144 of file PartBunch.h.

References ParticleSpatialLayout< T, Dim, Mesh, CachingPolicy >::getLayout(), and getLayout().

Here is the call graph for this function:

◆ getMesh() [2/2]

const Mesh_t & PartBunch::getMesh ( ) const
inline

Definition at line 138 of file PartBunch.h.

References ParticleSpatialLayout< T, Dim, Mesh, CachingPolicy >::getLayout(), and getLayout().

Referenced by resizeMesh(), and updateFields().

Here is the call graph for this function:

◆ getRho()

double PartBunch::getRho ( int  x,
int  y,
int  z 
)
inlinevirtual

Implements PartBunchBase< double, 3 >.

Definition at line 133 of file PartBunch.h.

References rho_m.

◆ initialize()

void PartBunch::initialize ( FieldLayout_t fLayout)
virtual

Implements PartBunchBase< double, 3 >.

Definition at line 57 of file PartBunch.cpp.

References ParticleSpatialLayout< T, Dim, Mesh, CachingPolicy >::getLayout(), and getLayout().

Here is the call graph for this function:

◆ operator=()

PartBunch & PartBunch::operator= ( const PartBunch )
delete

◆ print()

Inform & PartBunch::print ( Inform os)

Definition at line 865 of file PartBunch.cpp.

References PartBunchBase< T, Dim >::print().

Referenced by operator<<().

Here is the call graph for this function:

◆ resetInterpolationCache()

void PartBunch::resetInterpolationCache ( bool  clearCache = false)
inlinevirtual

Reimplemented from PartBunchBase< double, 3 >.

Definition at line 848 of file PartBunch.cpp.

References ParticleAttrib< T >::destroy(), interpolationCache_m, interpolationCacheSet_m, and ParticleAttrib< T >::size().

Here is the call graph for this function:

◆ resizeMesh()

void PartBunch::resizeMesh ( )
privatevirtual

◆ setBCAllOpen()

void PartBunch::setBCAllOpen ( )
virtual

Reimplemented from PartBunchBase< double, 3 >.

Definition at line 784 of file PartBunch.cpp.

References bc_m, PartBunchBase< double, 3 >::dcBeam_m, endl(), PartBunchBase< double, 3 >::getBConds(), INFOMSG, level3(), ParticleNoBCond(), and vbc_m.

Here is the call graph for this function:

◆ setBCAllPeriodic()

void PartBunch::setBCAllPeriodic ( )
virtual

Reimplemented from PartBunchBase< double, 3 >.

Definition at line 765 of file PartBunch.cpp.

References bc_m, PartBunchBase< double, 3 >::dcBeam_m, endl(), PartBunchBase< double, 3 >::getBConds(), IpplInfo::getNodes(), INFOMSG, level3(), ParticlePeriodicBCond(), and vbc_m.

Here is the call graph for this function:

◆ setBCForDCBeam()

void PartBunch::setBCForDCBeam ( )
virtual

◆ swap()

void PartBunch::swap ( unsigned int  i,
unsigned int  j 
)
virtual

Reimplemented from PartBunchBase< double, 3 >.

Definition at line 855 of file PartBunch.cpp.

References interpolationCache_m, interpolationCacheSet_m, and PartBunchBase< T, Dim >::swap().

Here is the call graph for this function:

◆ updateDomainLength()

void PartBunch::updateDomainLength ( Vektor< int, 3 > &  grid)
privatevirtual

Implements PartBunchBase< double, 3 >.

Definition at line 817 of file PartBunch.cpp.

References PartBunchBase< double, 3 >::Dimension, FieldLayout< Dim >::getDomain(), and getFieldLayout().

Here is the call graph for this function:

◆ updateFields()

void PartBunch::updateFields ( const Vector_t hr,
const Vector_t origin 
)
privatevirtual

Member Data Documentation

◆ bc_m

BConds<double, 3, Mesh_t, Center_t> PartBunch::bc_m
private

for defining the boundary conditions

Definition at line 111 of file PartBunch.h.

Referenced by resizeMesh(), setBCAllOpen(), setBCAllPeriodic(), setBCForDCBeam(), and updateFields().

◆ eg_m

VField_t PartBunch::eg_m

vector field on the grid

Definition at line 97 of file PartBunch.h.

Referenced by computeSelfFields(), computeSelfFields_cycl(), getEExtrema(), resizeMesh(), and updateFields().

◆ interpolationCache_m

ParticleAttrib<CacheDataCIC<double, 3U> > PartBunch::interpolationCache_m
private

Definition at line 117 of file PartBunch.h.

Referenced by computeSelfFields(), resetInterpolationCache(), and swap().

◆ interpolationCacheSet_m

bool PartBunch::interpolationCacheSet_m
private

Definition at line 115 of file PartBunch.h.

Referenced by computeSelfFields(), resetInterpolationCache(), and swap().

◆ rho_m

Field_t PartBunch::rho_m

scalar potential

Definition at line 94 of file PartBunch.h.

Referenced by computeSelfFields(), computeSelfFields_cycl(), getRho(), resizeMesh(), and updateFields().

◆ vbc_m

BConds<Vector_t, 3, Mesh_t, Center_t> PartBunch::vbc_m
private

Definition at line 112 of file PartBunch.h.

Referenced by resizeMesh(), setBCAllOpen(), setBCAllPeriodic(), setBCForDCBeam(), and updateFields().


The documentation for this class was generated from the following files: