OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
OrbitThreader.h
Go to the documentation of this file.
1 #ifndef OPAL_ORBITTHREADER_H
2 #define OPAL_ORBITTHREADER_H
3 
4 #include "Algorithms/IndexMap.h"
5 #include "Algorithms/Vektor.h"
7 #include "Steppers/BorisPusher.h"
8 
9 #include <string>
10 #include <map>
11 
13 {
14 public:
15 
16  OrbitThreader(const PartData &ref,
17  const Vector_t &r,
18  const Vector_t &p,
19  double s,
20  double maxDiffZBunch,
21  double t,
22  double dT,
23  size_t maxIntegSteps,
24  double zstop,
25  OpalBeamline &bl);
26 
27  void execute();
28 
29  IndexMap::value_t query(IndexMap::key_t::first_type step,
30  IndexMap::key_t::second_type length);
31 
32  std::pair<double, double> getRange(const IndexMap::value_t::value_type &element,
33  double position) const;
34  IndexMap::value_t getTouchingElements(const std::pair<double, double> &range);
35 
36 private:
42  double pathLength_m;
47  double time_m;
49  double dt_m;
50 
52  const size_t maxIntegSteps_m;
54  const double zstop_m;
55 
58 
59  unsigned int errorFlag_m;
60 
63 
64  std::ofstream logger_m;
66 
67  struct elementPosition {
68  double startField_m;
69  double endField_m;
70  double elementEdge_m;
71  };
72 
74  bool operator() (const elementPosition &a, const elementPosition &b) const {
75  return a.elementEdge_m < b.elementEdge_m;
76  }
77  };
78 
79  std::multimap<std::string, elementPosition> elementRegistry_m;
80 
81  void trackBack(double maxDrift);
82  void integrate(const IndexMap::value_t &activeSet, size_t maxSteps, double maxDrift = 10.0);
83  bool containsCavity(const IndexMap::value_t &activeSet);
84  void autophaseCavities(const IndexMap::value_t &activeSet, const std::set<std::string> &visitedElements);
85  double getMaxDesignEnergy(const IndexMap::value_t &elementSet) const;
86 
87  void registerElement(const IndexMap::value_t &elementSet, double, const Vector_t &r, const Vector_t &p);
89  void setDesignEnergy(FieldList &allElements, const std::set<std::string> &visitedElements);
91 };
92 
93 inline
94 IndexMap::value_t OrbitThreader::query(IndexMap::key_t::first_type pathLength,
95  IndexMap::key_t::second_type length) {
96  return imap_m.query(pathLength, length);
97 }
98 
99 inline
100 std::pair<double, double> OrbitThreader::getRange(const IndexMap::value_t::value_type &element,
101  double position) const {
102  return imap_m.getRange(element, position);
103 }
104 
105 inline
106 IndexMap::value_t OrbitThreader::getTouchingElements(const std::pair<double, double> &range) {
107  return imap_m.getTouchingElements(range);
108 }
109 
110 #endif
const size_t maxIntegSteps_m
the number of time steps to track
Definition: OrbitThreader.h:52
value_t query(key_t::first_type s, key_t::second_type ds)
Definition: IndexMap.cpp:53
size_t loggingFrequency_m
Definition: OrbitThreader.h:65
void autophaseCavities(const IndexMap::value_t &activeSet, const std::set< std::string > &visitedElements)
double getMaxDesignEnergy(const IndexMap::value_t &elementSet) const
unsigned int errorFlag_m
Definition: OrbitThreader.h:59
Vector_t p_m
momentum of reference particle
Definition: OrbitThreader.h:40
void trackBack(double maxDrift)
std::list< ClassicField > FieldList
Definition: ClassicField.h:47
void setDesignEnergy(FieldList &allElements, const std::set< std::string > &visitedElements)
Vector_t r_m
position of reference particle in lab coordinates
Definition: OrbitThreader.h:38
IndexMap imap_m
Definition: OrbitThreader.h:57
Particle reference data.
Definition: PartData.h:38
const PartData & reference_m
Definition: OrbitThreader.h:62
std::multimap< std::string, elementPosition > elementRegistry_m
Definition: OrbitThreader.h:79
void registerElement(const IndexMap::value_t &elementSet, double, const Vector_t &r, const Vector_t &p)
IndexMap::value_t getTouchingElements(const std::pair< double, double > &range)
double computeMaximalImplicitDrift()
void processElementRegister()
double distTrackBack_m
Definition: OrbitThreader.h:45
OpalBeamline & itsOpalBeamline_m
Definition: OrbitThreader.h:56
BorisPusher integrator_m
Definition: OrbitThreader.h:61
const double zstop_m
final position in path length
Definition: OrbitThreader.h:54
double time_m
the simulated time
Definition: OrbitThreader.h:47
double dt_m
the time step
Definition: OrbitThreader.h:49
OrbitThreader(const PartData &ref, const Vector_t &r, const Vector_t &p, double s, double maxDiffZBunch, double t, double dT, size_t maxIntegSteps, double zstop, OpalBeamline &bl)
IndexMap::value_t query(IndexMap::key_t::first_type step, IndexMap::key_t::second_type length)
Definition: OrbitThreader.h:94
bool containsCavity(const IndexMap::value_t &activeSet)
T * value_type(const SliceIterator< T > &)
std::ofstream logger_m
Definition: OrbitThreader.h:64
void integrate(const IndexMap::value_t &activeSet, size_t maxSteps, double maxDrift=10.0)
std::pair< double, double > getRange(const IndexMap::value_t::value_type &element, double position) const
Definition: IndexMap.cpp:350
std::pair< double, double > getRange(const IndexMap::value_t::value_type &element, double position) const
double pathLength_m
position of reference particle in path length
Definition: OrbitThreader.h:42
bool operator()(const elementPosition &a, const elementPosition &b) const
Definition: OrbitThreader.h:74
IndexMap::value_t getTouchingElements(const std::pair< double, double > &range)
Definition: IndexMap.cpp:371
std::set< std::shared_ptr< Component > > value_t
Definition: IndexMap.h:18