OPAL (Object Oriented Parallel Accelerator Library) 2022.1
OPAL
|
#include <AmrPartBunch.h>
Public Types | |
typedef AmrParticle_t | pbase_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_t > | VectorPair_t |
Public Member Functions | |
AmrPartBunch (const PartData *ref) | |
AmrPartBunch (const PartData *ref, pbase_t *pbase_p) | |
~AmrPartBunch () | |
pbase_t * | getAmrParticleBase () |
const pbase_t * | getAmrParticleBase () const |
void | initialize (FieldLayout_t *fLayout) |
void | do_binaryRepart () |
Vector_t | get_hr () const |
void | set_meshEnlargement (double dh) |
VectorPair_t | getEExtrema () |
double | getRho (int x, int y, int z) |
FieldLayout_t & | getFieldLayout () |
void | boundp () |
void | computeSelfFields () |
void | computeSelfFields (int bin) |
void | computeSelfFields_cycl (double gamma) |
void | computeSelfFields_cycl (int bin) |
void | setSolver (FieldSolver *fs) |
virtual void | setBinCharge (int, double) |
Set the charge of one bin to the value of q and all other to zero. More... | |
virtual void | setBinCharge (int) |
Set the charge of all other the ones in bin to zero. More... | |
const AmrObject * | getAmrObject () const |
PoissonSolver * | getFieldSolver () |
const PoissonSolver * | getFieldSolver () const |
void | setBaseLevelMeshSpacing (const Vector_t &hr) |
void | setAmrDomainRatio (const std::vector< double > &ratio) |
void | gatherLevelStatistics () |
const size_t & | getLevelStatistics (int l) const |
void | updateLorentzFactor (int bin=0) |
void | updateLorentzFactor (double gamma) |
void | setBCAllPeriodic () |
void | setBCAllOpen () |
void | setBCForDCBeam () |
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 PartData * | getReference () 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 () |
Inform & | print (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_t & | getFieldLayout ()=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 *Dim > | getSigmaMatrix () 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) |
Private Member Functions | |
void | updateFieldContainers_m () |
void | updateDomainLength (Vektor< int, 3 > &grid) |
void | updateFields (const Vector_t &hr, const Vector_t &origin) |
Private Attributes | |
AmrObject * | amrobj_mp |
pbase_t * | amrpbase_mp |
FieldLayout_t * | fieldlayout_m |
std::unique_ptr< size_t[]> | globalPartPerLevel_m |
Definition at line 27 of file AmrPartBunch.h.
typedef AmrParticle_t AmrPartBunch::pbase_t |
Definition at line 30 of file AmrPartBunch.h.
AmrPartBunch::AmrPartBunch | ( | const PartData * | ref | ) |
Definition at line 25 of file AmrPartBunch.cpp.
Definition at line 34 of file AmrPartBunch.cpp.
AmrPartBunch::~AmrPartBunch | ( | ) |
Definition at line 43 of file AmrPartBunch.cpp.
|
virtual |
Reimplemented from PartBunchBase< double, 3 >.
Definition at line 139 of file AmrPartBunch.cpp.
References amrobj_mp, amrpbase_mp, PartBunchBase< double, 3 >::boundpTimer_m, AmrParticleBase< PLayout >::domainMapping(), PartBunchBase< double, 3 >::ID, ParticleAttrib< T >::isDirty(), AmrParticleBase< PLayout >::isForbidTransform(), PartBunchBase< double, 3 >::R, ParticleAttrib< T >::resetDirtyFlag(), AmrParticleBase< PLayout >::setForbidTransform(), IpplTimings::startTimer(), PartBunchBase< double, 3 >::stateOfLastBoundP_, IpplTimings::stopTimer(), PartBunchBase< double, 3 >::unit_state_, PartBunchBase< double, 3 >::update(), and updateLorentzFactor().
|
virtual |
Implements PartBunchBase< double, 3 >.
Definition at line 180 of file AmrPartBunch.cpp.
References amrobj_mp, AmrObject::computeSelfFields(), PartBunchBase< double, 3 >::fs_m, FieldSolver::hasValidSolver(), PartBunchBase< double, 3 >::selfFieldTimer_m, IpplTimings::startTimer(), and IpplTimings::stopTimer().
|
virtual |
Implements PartBunchBase< double, 3 >.
Definition at line 193 of file AmrPartBunch.cpp.
References amrobj_mp, AmrObject::computeSelfFields(), PartBunchBase< double, 3 >::selfFieldTimer_m, IpplTimings::startTimer(), and IpplTimings::stopTimer().
|
virtual |
Implements PartBunchBase< double, 3 >.
Definition at line 200 of file AmrPartBunch.cpp.
References amrobj_mp, AmrObject::computeSelfFields_cycl(), PartBunchBase< double, 3 >::selfFieldTimer_m, IpplTimings::startTimer(), and IpplTimings::stopTimer().
|
virtual |
Implements PartBunchBase< double, 3 >.
Definition at line 207 of file AmrPartBunch.cpp.
References amrobj_mp, AmrObject::computeSelfFields_cycl(), AmrObject::initFineLevels(), AmrObject::isRefined(), PartBunchBase< double, 3 >::selfFieldTimer_m, IpplTimings::startTimer(), and IpplTimings::stopTimer().
|
virtual |
Reimplemented from PartBunchBase< double, 3 >.
Definition at line 63 of file AmrPartBunch.cpp.
References amrobj_mp, amrpbase_mp, AmrParticleBase< PLayout >::domainMapping(), AmrObject::initFineLevels(), AmrParticleBase< PLayout >::isForbidTransform(), AmrObject::isRefined(), AmrParticleBase< PLayout >::setForbidTransform(), PartBunchBase< double, 3 >::update(), and updateLorentzFactor().
Referenced by set_meshEnlargement().
void AmrPartBunch::gatherLevelStatistics | ( | ) |
Definition at line 227 of file AmrPartBunch.cpp.
References amrobj_mp, amrpbase_mp, AmrParticleBase< PLayout >::getLocalNumPerLevel(), globalPartPerLevel_m, AmrObject::maxLevel(), and reduce().
|
virtual |
Reimplemented from PartBunchBase< double, 3 >.
Definition at line 95 of file AmrPartBunch.cpp.
References amrpbase_mp, AmrParticleBase< PLayout >::getScalingFactor(), and PartBunchBase< double, 3 >::hr_m.
|
inline |
Definition at line 82 of file AmrPartBunch.h.
References amrobj_mp.
Referenced by GridLBalWriter::fillHeader(), and GridLBalWriter::write().
AmrPartBunch::pbase_t * AmrPartBunch::getAmrParticleBase | ( | ) |
Definition at line 48 of file AmrPartBunch.cpp.
References amrpbase_mp.
Referenced by AmrBoxLib::computeSelfFields_cycl(), AmrBoxLib::initFineLevels(), AmrBoxLib::postRegrid_m(), MultiBunchHandler::readBunch(), AmrBoxLib::solvePoisson_m(), AmrBoxLib::tagForChargeDensity_m(), AmrBoxLib::tagForMaxNumParticles_m(), AmrBoxLib::tagForMinNumParticles_m(), AmrBoxLib::tagForMomenta_m(), AmrYtWriter::writeBunch(), and AmrYtWriter::writeParticles_m().
const AmrPartBunch::pbase_t * AmrPartBunch::getAmrParticleBase | ( | ) | const |
Definition at line 53 of file AmrPartBunch.cpp.
References amrpbase_mp.
|
virtual |
Implements PartBunchBase< double, 3 >.
Definition at line 114 of file AmrPartBunch.cpp.
References amrobj_mp, and AmrObject::getEExtrema().
|
virtual |
Implements PartBunchBase< double, 3 >.
Definition at line 132 of file AmrPartBunch.cpp.
References fieldlayout_m.
|
inline |
Definition at line 86 of file AmrPartBunch.h.
References PartBunchBase< double, 3 >::fs_m, and FieldSolver::solver_m.
Referenced by AmrBoxLib::computeSelfFields_cycl(), AmrBoxLib::postRegrid_m(), and AmrBoxLib::solvePoisson_m().
|
inline |
Definition at line 90 of file AmrPartBunch.h.
References PartBunchBase< double, 3 >::fs_m, and FieldSolver::solver_m.
const size_t & AmrPartBunch::getLevelStatistics | ( | int | l | ) | const |
Only a valid call of root core (core 0)
l | is the level |
Definition at line 248 of file AmrPartBunch.cpp.
References globalPartPerLevel_m.
|
virtual |
Implements PartBunchBase< double, 3 >.
Definition at line 118 of file AmrPartBunch.cpp.
References amrobj_mp, and AmrObject::getRho().
|
virtual |
Implements PartBunchBase< double, 3 >.
Definition at line 58 of file AmrPartBunch.cpp.
|
virtual |
Reimplemented from PartBunchBase< double, 3 >.
Definition at line 101 of file AmrPartBunch.cpp.
References amrpbase_mp, do_binaryRepart(), AmrParticleBase< PLayout >::getAmrLayout(), PartBunchBase< T, Dim >::set_meshEnlargement(), and BoxLibLayout< T, Dim >::setBoundingBox().
void AmrPartBunch::setAmrDomainRatio | ( | const std::vector< double > & | ratio | ) |
Change the AMR Poisson computation domain.
ratio | per direction. |
Definition at line 222 of file AmrPartBunch.cpp.
References amrpbase_mp, AmrParticleBase< PLayout >::getAmrLayout(), and BoxLibLayout< T, Dim >::setDomainRatio().
|
inline |
Definition at line 94 of file AmrPartBunch.h.
References PartBunchBase< double, 3 >::hr_m.
Referenced by AmrBoxLib::updateMesh().
|
inlinevirtual |
Reimplemented from PartBunchBase< double, 3 >.
Definition at line 133 of file AmrPartBunch.h.
|
inlinevirtual |
Reimplemented from PartBunchBase< double, 3 >.
Definition at line 132 of file AmrPartBunch.h.
|
inlinevirtual |
Reimplemented from PartBunchBase< double, 3 >.
Definition at line 134 of file AmrPartBunch.h.
|
inlinevirtual |
Set the charge of all other the ones in bin to zero.
Reimplemented from PartBunchBase< double, 3 >.
Definition at line 76 of file AmrPartBunch.h.
|
inlinevirtual |
Set the charge of one bin to the value of q and all other to zero.
Reimplemented from PartBunchBase< double, 3 >.
Definition at line 75 of file AmrPartBunch.h.
|
inlinevirtual |
Reimplemented from PartBunchBase< double, 3 >.
Definition at line 70 of file AmrPartBunch.h.
References amrobj_mp, Hypervolume::fs, FieldSolver::getAmrObject(), and PartBunchBase< T, Dim >::setSolver().
|
privatevirtual |
Implements PartBunchBase< double, 3 >.
Definition at line 296 of file AmrPartBunch.cpp.
References amrobj_mp, and AmrObject::getBaseLevelGridPoints().
|
private |
Definition at line 292 of file AmrPartBunch.cpp.
Reimplemented from PartBunchBase< double, 3 >.
Definition at line 301 of file AmrPartBunch.cpp.
void AmrPartBunch::updateLorentzFactor | ( | double | gamma | ) |
Update the Lorentz factor before every domainMapping in order to have the correct boosted frame for the particle redistribution, regrid and computation of the self-field forces. This function is only used in the single bunch case.
gamma | is the Lorentz factor |
Definition at line 278 of file AmrPartBunch.cpp.
References amrpbase_mp, OpalData::getInstance(), and AmrParticleBase< PLayout >::setLorentzFactor().
void AmrPartBunch::updateLorentzFactor | ( | int | bin = 0 | ) |
Update the Lorentz factor before every domainMapping in order to have the correct boosted frame for the particle redistribution, regrid and computation of the self-field forces
bin | is the energy bin |
Definition at line 253 of file AmrPartBunch.cpp.
References PartBunchBase< double, 3 >::get_gamma(), PartBunchBase< double, 3 >::getBinGamma(), updateLorentzFactor(), and PartBunchBase< double, 3 >::weHaveBins().
Referenced by boundp(), AmrBoxLib::computeSelfFields_cycl(), do_binaryRepart(), and updateLorentzFactor().
|
private |
Definition at line 149 of file AmrPartBunch.h.
Referenced by boundp(), computeSelfFields(), computeSelfFields_cycl(), do_binaryRepart(), gatherLevelStatistics(), getAmrObject(), getEExtrema(), getRho(), setSolver(), and updateDomainLength().
|
private |
Definition at line 150 of file AmrPartBunch.h.
Referenced by boundp(), do_binaryRepart(), gatherLevelStatistics(), get_hr(), getAmrParticleBase(), set_meshEnlargement(), setAmrDomainRatio(), and updateLorentzFactor().
|
private |
Definition at line 155 of file AmrPartBunch.h.
Referenced by getFieldLayout().
|
private |
Definition at line 157 of file AmrPartBunch.h.
Referenced by gatherLevelStatistics(), and getLevelStatistics().