OPAL (Object Oriented Parallel Accelerator Library) 2022.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
31class BeamSequence;
32
33template <class T, unsigned Dim>
34class PartBunchBase;
35
36class Track {
37
38public:
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
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
92private:
93 // Not implemented.
95 Track(const Track&);
96 void operator=(const Track&);
97
98 static std::stack<Track*> stashedTrack;
99};
100
101#endif // OPAL_Track_HH
TimeIntegrator
Definition: Steppers.h:25
The base class for all OPAL beam lines and sequences.
Definition: BeamSequence.h:32
Particle reference data.
Definition: PartData.h:35
Definition: Track.h:36
BeamSequence * use
The lattice to be tracked through.
Definition: Track.h:53
int stepsPerTurn
The timsteps per revolution period. ONLY available for OPAL-cycl.
Definition: Track.h:78
PartBunchBase< double, 3 > * bunch
The particle bunch to be tracked.
Definition: Track.h:47
PartData reference
The reference data.
Definition: Track.h:50
void operator=(const Track &)
double zstart
The location at which the simulation starts.
Definition: Track.h:81
~Track()
Definition: Track.cpp:73
std::vector< unsigned long long > localTimeSteps
Maximal number of timesteps.
Definition: Track.h:75
double deltaTau
Definition: Track.h:68
std::vector< double > zstop
The location at which the simulation stops.
Definition: Track.h:84
static Track * pop()
Definition: Track.cpp:83
static Track * block
The block of track data.
Definition: Track.h:59
Steppers::TimeIntegrator timeIntegrator
The ID of time integrator.
Definition: Track.h:87
TrackParser parser
The parser used during tracking.
Definition: Track.h:56
double t0_m
Definition: Track.h:72
double dtScInit
Definition: Track.h:68
int truncOrder
Trunction order for map tracking.
Definition: Track.h:90
static void stash()
Definition: Track.cpp:76
Track(const Track &)
std::vector< double > dT
The initial timestep.
Definition: Track.h:65
static std::stack< Track * > stashedTrack
Definition: Track.h:98