OPAL (Object Oriented Parallel Accelerator Library)  2024.1
OPAL
Track.h
Go to the documentation of this file.
1 //
2 // Class Track
3 // Hold data for tracking.
4 // Acts as a communication area between the various tracking commands.
5 //
6 // Copyright (c) 2008 - 2020, Paul Scherrer Institut, Villigen PSI, Switzerland
7 // All rights reserved
8 //
9 // This file is part of OPAL.
10 //
11 // OPAL is free software: you can redistribute it and/or modify
12 // it under the terms of the GNU General Public License as published by
13 // the Free Software Foundation, either version 3 of the License, or
14 // (at your option) any later version.
15 //
16 // You should have received a copy of the GNU General Public License
17 // along with OPAL. If not, see <https://www.gnu.org/licenses/>.
18 //
19 
20 #ifndef OPAL_Track_HH
21 #define OPAL_Track_HH
22 
23 #include "Algorithms/PartData.h"
24 #include "Steppers/Steppers.h"
25 #include "Track/TrackCmd.h"
26 #include "Track/TrackParser.h"
27 
28 #include <stack>
29 #include <vector>
30 
31 class BeamSequence;
32 
33 template <class T, unsigned Dim>
34 class PartBunchBase;
35 
36 class Track {
37 
38 public:
39  Track(BeamSequence*, const PartData&, const std::vector<double>& dt,
40  const std::vector<unsigned long long>& maxtsteps, int stepsperturn,
41  double zStart, const std::vector<double>& zStop,
42  Steppers::TimeIntegrator timeintegrator,
43  double t0, double dtScInit, double deltaTau);
44  ~Track();
45 
48 
51 
54 
57 
59  static Track* block;
60 
61  static void stash();
62  static Track* pop();
63 
65  std::vector<double> dT;
66 
67  // For AMTS integrator in OPAL-T
68  double dtScInit, deltaTau;
69 
72  double t0_m;
73 
75  std::vector<unsigned long long> localTimeSteps;
76 
79 
81  double zstart;
82 
84  std::vector<double> zstop;
85 
88 
91 
92 private:
93  // Not implemented.
94  Track();
95  Track(const Track&);
96  void operator=(const Track&);
97 
98  static std::stack<Track*> stashedTrack;
99 };
100 
101 #endif // OPAL_Track_HH
static std::stack< Track * > stashedTrack
Definition: Track.h:98
int stepsPerTurn
The timsteps per revolution period. ONLY available for OPAL-cycl.
Definition: Track.h:78
Steppers::TimeIntegrator timeIntegrator
The ID of time integrator.
Definition: Track.h:87
int truncOrder
Trunction order for map tracking.
Definition: Track.h:90
PartBunchBase< double, 3 > * bunch
The particle bunch to be tracked.
Definition: Track.h:47
std::vector< double > zstop
The location at which the simulation stops.
Definition: Track.h:84
TimeIntegrator
Definition: Steppers.h:25
PartData reference
The reference data.
Definition: Track.h:50
double deltaTau
Definition: Track.h:68
static Track * pop()
Definition: Track.cpp:83
double t0_m
Definition: Track.h:72
double dtScInit
Definition: Track.h:68
void operator=(const Track &)
The base class for all OPAL beam lines and sequences.
Definition: BeamSequence.h:32
std::vector< unsigned long long > localTimeSteps
Maximal number of timesteps.
Definition: Track.h:75
TrackParser parser
The parser used during tracking.
Definition: Track.h:56
static Track * block
The block of track data.
Definition: Track.h:59
double zstart
The location at which the simulation starts.
Definition: Track.h:81
BeamSequence * use
The lattice to be tracked through.
Definition: Track.h:53
static void stash()
Definition: Track.cpp:76
Definition: Track.h:36
~Track()
Definition: Track.cpp:73
std::vector< double > dT
The initial timestep.
Definition: Track.h:65