OPALX (Object Oriented Parallel Accelerator Library for Exascal) MINIorX
OPALX
PartBunch.h
Go to the documentation of this file.
1#ifndef PARTBUNCH_H
2#define PARTBUNCH_H
3
4/*
5 Notes:
6
7
8Additional Functions
9--------------------
10
11 setDistribution
12 getDistribution
13
14
15Main loop
16---------
17
18
19 for integration
20 if not injectionDome
21 injected = distr_m->create()
22 injectrd = distr_m->inject()
23 update()
24
25 drift()
26 update()
27 kick()
28 drift()
29
30 diagnostics()
31 updateExternalFields()
32 update()
33
34updateExternalFields(): check if bunch has access to the fields of eternal elements. Maybe phase
35out some elements and read in new elements
36
37
38diagnostics(): calculate statistics and maybe write tp h5 and stat files
39
40*/
41
42
43
44#include <memory>
45
50#include "Manager/BaseManager.h"
51#include "Manager/PicManager.h"
56#include "Physics/Physics.h"
57#include "Random/Distribution.h"
58#include "Random/InverseTransformSampling.h"
59#include "Random/NormalDistribution.h"
60#include "Random/Randn.h"
61
63
64#include "Algorithms/PartData.h"
65
66#include "Utilities/Options.h" // Needed to define binning parameters!
67#include "PartBunch/Binning/AdaptBins.h" // TODO: binning
68
69
70extern Inform* gmsg;
71
72template <typename T>
73KOKKOS_INLINE_FUNCTION typename T::value_type L2Norm(T& x) {
74 return sqrt(dot(x, x).apply());
75}
76
77using view_type = typename ippl::detail::ViewType<ippl::Vector<double, 3>, 1>::view_type;
78
79template <typename T, unsigned Dim>
80class PartBunch
81 : public ippl::PicManager<
82 T, Dim, ParticleContainer<T, Dim>, FieldContainer<T, Dim>, LoadBalancer<T, Dim>> {
83public:
88 using Base = ippl::ParticleBase<ippl::ParticleSpatialLayout<T, Dim>>;
89
93
94 double time_m;
95
97
98 int nt_m;
99
100 double lbt_m;
101
102 double dt_m;
103
104 int it_m;
105
107
108 std::string solver_m;
109
111
112private:
113 double qi_m;
114
115 double mi_m;
116
118
119
120public:
122
126
129
130 // Landau damping specific
131 double Bext_m;
132 double alpha_m;
133 double DrInv_m;
134
135 ippl::NDIndex<Dim> domain_m;
136 std::array<bool, Dim> decomp_m;
137
138 /*
139 Up to here it is like the opaltest
140 */
141
145
148
150
151private:
152
153 std::unique_ptr<size_t[]> globalPartPerNode_m;
154
155 // ParticleOrigin refPOrigin_m;
156 // ParticleType refPType_m;
157
161 // Vector_t globalMeanR_m = Vector_t(0.0, 0.0, 0.0);
162 // Quaternion_t globalToLocalQuaternion_m = Quaternion_t(1.0, 0.0, 0.0, 0.0);
165
169
170 // PartBins* pbin_m;
171
173 double tEmission_m;
174
176 std::unique_ptr<double[]> bingamma_m;
177
178 // FIXME: this should go into the Bin class!
179 // holds number of emitted particles of the bin
180 // jjyang: opal-cycl use *nBin_m of pbin_m
181 //std::unique_ptr<size_t[]> binemitted_m; // liemen_a: TODO remove!
182 std::shared_ptr<AdaptBins_t> bins_m; // added by liemen_a for AdaptBins class!
183
185 int stepsPerTurn_m;
186
188 short numBunch_m;
189
191 std::vector<size_t> bunchTotalNum_m;
192 std::vector<size_t> bunchLocalNum_m;
193
197 int SteptoLastInj_m;
198
199 bool fixed_grid;
200
202
203 double couplingConstant_m;
204
206 long long localTrackStep_m;
207
209 long long globalTrackStep_m;
210
211
212 std::shared_ptr<Distribution> OPALdist_m;
213
214 std::shared_ptr<FieldSolverCmd> OPALFieldSolver_m;
215
216 // unit state of PartBunch
217 // UnitState_t unit_state_m;
218 // UnitState_t stateOfLastBoundP_m;
219
221 double t_m;
222
224 double spos_m;
225
226 /*
227 flags to tell if we are a DC-beam
228 */
229 bool dcBeam_m;
230 double periodLength_m;
231
233 std::shared_ptr<VField_t<T, Dim>> Etmp_m;
234
235public:
236
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);
239
241
242 void bunchUpdate(ippl::Vector<double, 3> hr);
243
245 *gmsg << "* Finished time step: " << this->it_m << " time: " << this->time_m << endl;
246 }
247
248 std::shared_ptr<ParticleContainer_t> getParticleContainer() {
249 return this->pcontainer_m;
250 }
251
252 void setSolver(std::string solver);
253
254 void pre_run() override ;
255
256public:
257 std::shared_ptr<VField_t<T, Dim>> getTempEField() { return this->Etmp_m; }
258 void setTempEField(std::shared_ptr<VField_t<T, Dim>> Etmp) { this->Etmp_m = Etmp; }
259
260 std::shared_ptr<AdaptBins_t> getBins() { return bins_m; } // TODO: Binning
261
262 void setBins(std::shared_ptr<AdaptBins_t> bins) { bins_m = bins; } // TODO: Binning
263
265 this->pcontainer_m->updateMoments();
266 }
267
268 size_t getTotalNum() const {
269 return this->pcontainer_m->getTotalNum();
270 }
271
272 size_t getLocalNum() const {
273 return this->pcontainer_m->getLocalNum();
274 }
275
277 return Vector_t<double, Dim>(0.0);
278 }
279
281 return Vector_t<double, Dim>(0.0);
282 }
283
285 return Vector_t<double, Dim>(0.0);
286 }
287
289 return Vector_t<double, Dim>(0.0);
290 }
291
293 return Vector_t<double, Dim>(0.0);
294 }
295
296 void advance() override {
297 // \todo needs to go
298 }
299
300 void par2grid() override {
301 scatterCIC();
302 }
303
304 void grid2par() override {
305 gatherCIC();
306 }
307
308 void gatherCIC();
309
310 void scatterCIC() {
312 }
313
315
316 /*
317 Up to here it is like the opaltest
318 */
319
320 double getCouplingConstant() const {
321 return couplingConstant_m;
322 }
323
324 void setCouplingConstant(double c) {
326 }
327
329
331
332 void setCharge() {
333 this->getParticleContainer()->Q = qi_m;
334 }
335
336 void setMass() {
337 this->getParticleContainer()->M = mi_m;
338 }
339
340 double getCharge() const {
341 return qi_m*this->getTotalNum();
342 }
343
344 double getChargePerParticle() const {
345 return qi_m;
346 }
347 double getMassPerParticle() const {
348 return mi_m;
349 }
350
351 double getQ() const {
352 return this->getCharge();
353 }
354 double getM() const {
355 return mi_m*this->getTotalNum();
356 }
357
358 double getdE() const {
359 return this->pcontainer_m->getStdKineticEnergy();
360 }
361
362 double getGamma(int i) const {
363 return 0.0;
364 }
365 double getBeta(int i) const {
366 return 0.0;
367 }
368
369 void actT() {
370 }
371
373 return reference_m;
374 }
375
377 return 1.0;
378 }
379
381
382 size_t getLoadBalance(int p) {
383 return globalPartPerNode_m[p];
384 }
385
386 void resizeMesh() {
387 }
388
389 /*
390
391 Mesh_t<Dim>& getMesh() {
392 }
393
394 FieldLayout_t<Dim>& getFieldLayout() {
395 return nullptr;
396 }
397 */
398
399
400
401 bool isGridFixed() {
402 return false;
403 }
404
405 void boundp() {
406 }
407
409 return 1;
410 }
411
412 /*
413 void setTotalNum(size_t newTotalNum) {
414 }
415
416 void set_meshEnlargement(double dh) {
417 }
418 */
419
421 }
423 }
424 void setupBCs() {
425 }
427 }
428
429 void resetInterpolationCache(bool clearCache = false) {
430 }
431 void swap(unsigned int i, unsigned int j) {
432 }
433 double getRho(int x, int y, int z) {
434 }
435 void gatherStatistics(unsigned int totalP) {
436 }
437 void switchToUnitlessPositions(bool use_dt_per_particle = false) {
438 }
439 void switchOffUnitlessPositions(bool use_dt_per_particle = false) {
440 }
441
443 return 0;
444 }
445
447 unsigned int nBins, std::vector<double>& lineDensity, std::pair<double, double>& meshInfo) {
448 }
449
450 void setBeamFrequency(double v) {
451 }
452
456
458
459 Inform& print(Inform& os);
460
461
463 return true;
464 }
465
467 return false;
468 }
469
471 return false;
472 }
474 return 0;
475 }
477 return 0;
478 }
480 return 0;
481 }
482
483 void Rebin() {
484 }
485
486 void setEnergyBins(int numberOfEnergyBins) {
487 }
489 return false;
490 }
491 void setTEmission(double t) {
492 }
493 double getTEmission() {
494 return 0.0;
495 }
496 bool weHaveBins() {
497 return false;
498 }
499 // void setPBins(PartBins* pbin) {}
500 size_t emitParticles(double eZ) {
501 return 0;
502 }
504 }
505 void rebin() {
506 }
508 return 0;
509 }
510 void setLocalBinCount(size_t num, int bin) {
511 }
512 void calcGammas() {
513 }
514 double getBinGamma(int bin) {
515 return 0.0;
516 }
517 bool hasBinning() {
518 return false;
519 }
520 void setBinCharge(int bin, double q) {
521 }
522 void setBinCharge(int bin) {
523 }
524 double calcMeanPhi() {
525 return 0.0;
526 }
527 bool resetPartBinID2(const double eta) {
528 return false;
529 }
531 return false;
532 }
533 double getPx(int i) {
534 return 0.0;
535 }
536 double getPy(int i) {
537 return 0.0;
538 }
539 double getPz(int i) {
540 return 0.0;
541 }
542 double getPx0(int i) {
543 return 0.0;
544 }
545 double getPy0(int i) {
546 return 0.0;
547 }
548 double getX(int i) {
549 return 0.0;
550 }
551 double getY(int i) {
552 return 0.0;
553 }
554 double getZ(int i) {
555 return 0.0;
556 }
557 double getX0(int i) {
558 return 0.0;
559 }
560 double getY0(int i) {
561 return 0.0;
562 }
563
564 void setZ(int i, double zcoo) {
565 }
566
568 rmin = rmin_m;
569 rmax = rmax_m;
570 }
571
574
577
578 /*
579
580 Misc Bunch related quantities
581
582 */
583
585 // matrix_t getSigmaMatrix() const;
586
587 void setdT(double dt) {
588 dt_m = dt;
589 }
590
591 double getdT() const {
592 return dt_m;
593 }
594
595 void setT(double t) {
596 t_m = t;
597 }
598
599 void incrementT() {
600 t_m += dt_m;
601 }
602
603 double getT() const {
604 return t_m;
605 }
606
613
614 void set_sPos(double s) {
615 spos_m = s;
616 }
617
618 double get_sPos() const {
619 return spos_m;
620 }
621
622 double get_gamma() const {
623 return 1.00;
624 }
625
627 return this->pcontainer_m->getMeanKineticEnergy();
628 }
629
631 return rmin_m;
632 }
634 return rmax_m;
635 }
636
637 // in opal, MeanPosition is return for get_centroid, which I think is wrong. We already have get_rmean()
639 return this->pcontainer_m->getCentroid();
640 }
641
643 return this->pcontainer_m->getRmsR();
644 }
645
647 return this->pcontainer_m->getRmsRP();
648 }
649
651 return this->pcontainer_m->getRmsP();
652 }
653
655 return this->pcontainer_m->getMeanR();
656 }
657
659 return this->pcontainer_m->getMeanP();
660 }
665 return Vector_t<double, Dim>(0.0);
666 }
668 return this->pcontainer_m->getNormEmit();
669 }
671 return Vector_t<double, Dim>(0.0);
672 }
698 return Vector_t<double, Dim>(0.0);
699 }
700
701 double get_Dx() const {
702 return this->pcontainer_m->getDx();
703 }
704 double get_Dy() const {
705 return this->pcontainer_m->getDy();
706 }
707 double get_DDx() const {
708 return this->pcontainer_m->getDDx();
709 }
710 double get_DDy() const {
711 return this->pcontainer_m->getDDy();
712 }
713
714 double get_temperature() const {
715 return this->pcontainer_m->getTemperature();
716 }
717
719 this->pcontainer_m->computeDebyeLength(rmsDensity_m);
720 }
721
722 double get_debyeLength() const {
723 return this->pcontainer_m->getDebyeLength();
724 }
725
726 double get_plasmaParameter() const {
727 return this->pcontainer_m->getPlasmaParameter();
728 }
729
730 double get_rmsDensity() const {
731 return rmsDensity_m;
732 }
733
734 /*
735 Some quantities related to integrations/tracking
736 */
737
738 void setStepsPerTurn(int n) {
739 stepsPerTurn_m = n;
740 }
741
742 int getStepsPerTurn() const {
743 return stepsPerTurn_m;
744 }
745
747 void setGlobalTrackStep(long long n) {
749 }
750
751 long long getGlobalTrackStep() const {
752 return globalTrackStep_m;
753 }
754
756 void setLocalTrackStep(long long n) {
758 }
759
764
765 long long getLocalTrackStep() const {
766 return localTrackStep_m;
767 }
768
769 void setNumBunch(short n) {
770 numBunch_m = n;
771 bunchTotalNum_m.resize(n);
772 bunchLocalNum_m.resize(n);
773 }
774
775 short getNumBunch() const {
776 return numBunch_m;
777 }
778
780 globalMeanR_m = globalMeanR;
781 }
782
786
787 void setGlobalToLocalQuaternion(Quaternion_t globalToLocalQuaternion) {
788 globalToLocalQuaternion_m = globalToLocalQuaternion;
789 }
790
794
795 void setSteptoLastInj(int n) {
796 SteptoLastInj_m = n;
797 }
798
799 int getSteptoLastInj() const {
800 return SteptoLastInj_m;
801 }
802
803 double calculateAngle(double x, double y) {
804 return 0.0;
805 }
806
807 // Sanity check functions
809
810};
811
812// Explicit instantiations
813extern template class PartBunch<double, 3>;
814
815#endif
double dot(const Vector3D &lhs, const Vector3D &rhs)
Vector dot product.
Definition Vector3D.cpp:118
Inform * gmsg
Definition changes.cpp:7
ippl::Field< ippl::Vector< T, Dim >, Dim, ViewArgs... > VField_t
Definition PBunchDefs.h:33
Quaternion Quaternion_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)
Definition PartBunch.h:73
Defines a structure to hold particles in energy bins and their associated data.
ippl::detail::size_type size_type
double T
Definition datatypes.h:7
Vector_t< double, Dim > get_rprms() const
Definition PartBunch.h:646
void setGlobalMeanR(Vector_t< double, Dim > globalMeanR)
Definition PartBunch.h:779
size_t boundp_destroyT()
Definition PartBunch.h:408
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)
Definition PartBunch.cpp:8
PartData * getReference()
Definition PartBunch.h:372
long long getLocalTrackStep() const
Definition PartBunch.h:765
void setT(double t)
Definition PartBunch.h:595
void incTrackSteps()
Definition PartBunch.h:760
double get_Dx() const
Definition PartBunch.h:701
double getPy(int i)
Definition PartBunch.h:536
double getdE() const
Definition PartBunch.h:358
void set_sPos(double s)
Definition PartBunch.h:614
void bunchUpdate(ippl::Vector< double, 3 > hr)
void gatherLoadBalanceStatistics()
void setZ(int i, double zcoo)
Definition PartBunch.h:564
void do_binaryRepart()
Vector_t< double, Dim > dt(size_t i)
Definition PartBunch.h:292
size_t getNumberOfEmissionSteps()
Definition PartBunch.h:476
Vector_t< double, Dim > get_rrms() const
Definition PartBunch.h:642
void pre_run() override
void setSteptoLastInj(int n)
Definition PartBunch.h:795
void updateMoments()
Definition PartBunch.h:264
size_t getTotalNum() const
Definition PartBunch.h:268
void rebin()
Definition PartBunch.h:505
Vector_t< double, Dim > get_normalizedEps_99_99Percentile() const
Definition PartBunch.h:694
Vector_t< double, Dim > get_norm_emit() const
Definition PartBunch.h:667
double get_plasmaParameter() const
Definition PartBunch.h:726
void switchOffUnitlessPositions(bool use_dt_per_particle=false)
Definition PartBunch.h:439
Vector_t< double, Dim > get_prms() const
Definition PartBunch.h:650
int getSteptoLastInj() const
Definition PartBunch.h:799
void calcDebyeLength()
Definition PartBunch.h:718
void scatterCIC()
Definition PartBunch.h:310
void setCharge()
Definition PartBunch.h:332
void setCouplingConstant(double c)
Definition PartBunch.h:324
double calculateAngle(double x, double y)
Definition PartBunch.h:803
Vector_t< double, Dim > get_pmean_Distribution() const
Definition PartBunch.h:661
void setBeamFrequency(double v)
Definition PartBunch.h:450
Vector_t< double, Dim > P(size_t i)
Definition PartBunch.h:280
int getLastEmittedEnergyBin()
Definition PartBunch.h:473
double getM() const
Definition PartBunch.h:354
bool resetPartBinBunch()
Definition PartBunch.h:530
double getPy0(int i)
Definition PartBunch.h:545
long long getGlobalTrackStep() const
Definition PartBunch.h:751
double get_rmsDensity() const
Definition PartBunch.h:730
Vector_t< double, Dim > get_emit() const
Definition PartBunch.h:664
double getChargePerParticle() const
Definition PartBunch.h:344
double getdT() const
Definition PartBunch.h:591
Vector_t< double, Dim > get_95Percentile() const
Definition PartBunch.h:676
int getStepsPerTurn() const
Definition PartBunch.h:742
std::shared_ptr< VField_t< T, Dim > > getTempEField()
Definition PartBunch.h:257
double getCouplingConstant() const
Definition PartBunch.h:320
Vector_t< double, Dim > Bf(size_t i)
Definition PartBunch.h:288
Vector_t< double, Dim > get_rmean() const
Definition PartBunch.h:654
bool hasBinning()
Definition PartBunch.h:517
bool resetPartBinID2(const double eta)
Definition PartBunch.h:527
double get_sPos() const
Definition PartBunch.h:618
void grid2par() override
Definition PartBunch.h:304
void computeSelfFields()
void scatterCICPerBin(binIndex_t binIndex)
typename ParticleBinning::AdaptBins< ParticleContainer_t, BinningSelector_t > AdaptBins_t
Definition PartBunch.h:91
bool isGridFixed()
Definition PartBunch.h:401
double get_Dy() const
Definition PartBunch.h:704
void setGlobalToLocalQuaternion(Quaternion_t globalToLocalQuaternion)
Definition PartBunch.h:787
void actT()
Definition PartBunch.h:369
bool hasFieldSolver()
Definition PartBunch.h:462
double getY(int i)
Definition PartBunch.h:551
Vector_t< double, Dim > get_maxExtent() const
Definition PartBunch.h:633
std::shared_ptr< FieldSolverCmd > OPALFieldSolver_m
Definition PartBunch.h:214
double getCharge() const
get the total charge per simulation particle
void setBinCharge(int bin, double q)
Definition PartBunch.h:520
Vector_t< double, Dim > get_68Percentile() const
Definition PartBunch.h:673
double getTEmission()
Definition PartBunch.h:493
int getNumberOfEnergyBins()
Definition PartBunch.h:479
void get_bounds(Vector_t< double, Dim > &rmin, Vector_t< double, Dim > &rmax)
Definition PartBunch.h:567
double getY0(int i)
Definition PartBunch.h:560
double get_debyeLength() const
Definition PartBunch.h:722
double getRho(int x, int y, int z)
Definition PartBunch.h:433
void setLocalBinCount(size_t num, int bin)
Definition PartBunch.h:510
int getLastemittedBin()
Definition PartBunch.h:507
typename ParticleContainer_t::bin_index_type binIndex_t
Definition PartBunch.h:92
double getGamma(int i) const
Definition PartBunch.h:362
Vector_t< double, Dim > getEExtrema()
Definition PartBunch.h:453
double getT() const
Definition PartBunch.h:603
void setBCForDCBeam()
Definition PartBunch.h:422
Inform & print(Inform &os)
FieldSolver< double, Dim > FieldSolver_t
Definition PartBunch.h:86
void setTEmission(double t)
Definition PartBunch.h:491
std::shared_ptr< ParticleContainer_t > getParticleContainer()
Definition PartBunch.h:248
double getPz(int i)
Definition PartBunch.h:539
double getQ() const
Definition PartBunch.h:351
ParticleContainer< double, Dim > ParticleContainer_t
Definition PartBunch.h:84
void setBinCharge(int bin)
Definition PartBunch.h:522
Vector_t< double, Dim > get_normalizedEps_68Percentile() const
Definition PartBunch.h:685
double get_meanKineticEnergy()
Definition PartBunch.h:626
void boundp()
Definition PartBunch.h:405
void setLocalTrackStep(long long n)
step in a TRACK command
Definition PartBunch.h:756
Vector_t< double, 2 *Dim > get_centroid() const
Definition PartBunch.h:638
void gatherStatistics(unsigned int totalP)
Definition PartBunch.h:435
void par2grid() override
Definition PartBunch.h:300
void getLocalBounds(Vector_t< double, Dim > &rmin, Vector_t< double, Dim > &rmax)
Definition PartBunch.h:572
Vector_t< double, Dim > get_halo() const
Definition PartBunch.h:670
std::shared_ptr< VField_t< double, Dim > > Etmp_m
Definition PartBunch.h:233
void setMass()
Definition PartBunch.h:336
bool getFieldSolverType()
Definition PartBunch.h:466
size_t calcNumPartsOutside(Vector_t< double, Dim > x)
Definition PartBunch.h:442
FieldContainer< double, Dim > FieldContainer_t
Definition PartBunch.h:85
double get_DDx() const
Definition PartBunch.h:707
void setSolver(std::string solver)
double calcMeanPhi()
Definition PartBunch.h:524
double get_gamma() const
Definition PartBunch.h:622
double getBinGamma(int bin)
Definition PartBunch.h:514
void swap(unsigned int i, unsigned int j)
Definition PartBunch.h:431
void resizeMesh()
Definition PartBunch.h:386
size_t getLocalNum() const
Definition PartBunch.h:272
short getNumBunch() const
Definition PartBunch.h:775
Vector_t< double, Dim > R(size_t i)
Definition PartBunch.h:276
Vector_t< double, Dim > get_normalizedEps_95Percentile() const
Definition PartBunch.h:688
bool weHaveBins()
Definition PartBunch.h:496
void setupBCs()
Definition PartBunch.h:424
void get_PBounds(Vector_t< double, Dim > &min, Vector_t< double, Dim > &max)
Definition PartBunch.h:575
Vector_t< double, Dim > get_99_99Percentile() const
Definition PartBunch.h:682
void gatherCIC()
Vector_t< double, Dim > Ef(size_t i)
Definition PartBunch.h:284
double get_temperature() const
Definition PartBunch.h:714
size_t emitParticles(double eZ)
Definition PartBunch.h:500
Vector_t< double, Dim > get_hr() const
Definition PartBunch.h:697
double getX0(int i)
Definition PartBunch.h:557
void setEnergyBins(int numberOfEnergyBins)
Definition PartBunch.h:486
void calcBeamParameters()
void setStepsPerTurn(int n)
Definition PartBunch.h:738
void bunchUpdate()
double getZ(int i)
Definition PartBunch.h:554
bool getIfBeamEmitting()
Definition PartBunch.h:470
void spaceChargeEFieldCheck(Vector_t< double, 3 > efScale)
void setNumBunch(short n)
Definition PartBunch.h:769
void switchToUnitlessPositions(bool use_dt_per_particle=false)
Definition PartBunch.h:437
void setBins(std::shared_ptr< AdaptBins_t > bins)
Definition PartBunch.h:262
size_t getLoadBalance(int p)
Definition PartBunch.h:382
double getPx(int i)
Definition PartBunch.h:533
typename ParticleBinning::CoordinateSelector< ParticleContainer_t > BinningSelector_t
Definition PartBunch.h:90
void setBCAllOpen()
Definition PartBunch.h:420
Quaternion_t getGlobalToLocalQuaternion()
Definition PartBunch.h:791
double getBeta(int i) const
Definition PartBunch.h:365
void calcGammas()
Definition PartBunch.h:512
double getCharge() const
Definition PartBunch.h:340
void setBCAllPeriodic()
Definition PartBunch.h:426
void gatherCIC()
void advance() override
Definition PartBunch.h:296
void updateNumTotal()
Definition PartBunch.h:503
size_t getTotalNum() const
Vector_t< double, Dim > get_normalizedEps_99Percentile() const
Definition PartBunch.h:691
double get_DDy() const
Definition PartBunch.h:710
void setdT(double dt)
get 2nd order beam matrix
Definition PartBunch.h:587
std::shared_ptr< Distribution > OPALdist_m
Definition PartBunch.h:212
std::shared_ptr< AdaptBins_t > getBins()
Definition PartBunch.h:260
bool weHaveEnergyBins()
Definition PartBunch.h:488
Vector_t< double, Dim > get_origin() const
Definition PartBunch.h:630
void setGlobalTrackStep(long long n)
step in multiple TRACK commands
Definition PartBunch.h:747
double getEmissionDeltaT()
Definition PartBunch.h:376
double getMassPerParticle() const
Definition PartBunch.h:347
void Rebin()
Definition PartBunch.h:483
void incrementT()
Definition PartBunch.h:599
Vector_t< double, Dim > getGlobalMeanR()
Definition PartBunch.h:783
Vector_t< double, Dim > get_99Percentile() const
Definition PartBunch.h:679
double getX(int i)
Definition PartBunch.h:548
void calcLineDensity(unsigned int nBins, std::vector< double > &lineDensity, std::pair< double, double > &meshInfo)
Definition PartBunch.h:446
ippl::ParticleBase< ippl::ParticleSpatialLayout< double, Dim > > Base
Definition PartBunch.h:88
Vector_t< double, Dim > get_pmean() const
Definition PartBunch.h:658
LoadBalancer< double, Dim > LoadBalancer_t
Definition PartBunch.h:87
std::shared_ptr< AdaptBins_t > bins_m
Definition PartBunch.h:182
void resetInterpolationCache(bool clearCache=false)
Definition PartBunch.h:429
void setTempEField(std::shared_ptr< VField_t< T, Dim > > Etmp)
Definition PartBunch.h:258
double getPx0(int i)
Definition PartBunch.h:542
Particle reference data.
Definition PartData.h:37
A class that bins particles in energy bins and allows for adaptive runtime rebinning.
Definition AdaptBins.h:36
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.