OPAL (Object Oriented Parallel Accelerator Library)  2024.1
OPAL
Track.cpp
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 #include "Track/Track.h"
21 
22 #include "Algorithms/PartBunch.h"
23 #ifdef ENABLE_AMR
24  #include "Algorithms/AmrPartBunch.h"
25 #endif
27 #include "Utilities/Options.h"
28 
29 Track* Track::block = 0;
30 std::stack<Track*> Track::stashedTrack;
31 
40 Track::Track(BeamSequence* u, const PartData& ref, const std::vector<double>& dt,
41  const std::vector<unsigned long long>& maxtsteps, int stepsperturn,
42  double zStart, const std::vector<double>& zStop,
43  Steppers::TimeIntegrator timeintegrator,
44  double t0, double dtScInit, double deltaTau):
45  bunch(nullptr),
46  reference(ref),
47  use(u),
48  parser(),
49  dT(dt),
50  dtScInit(dtScInit),
51  deltaTau(deltaTau),
52  t0_m(t0),
53  localTimeSteps(maxtsteps),
54  stepsPerTurn(stepsperturn),
55  zstart(zStart),
56  zstop(zStop),
57  timeIntegrator(timeintegrator),
58  truncOrder(1)
59 {
60  if(!OpalData::getInstance()->hasBunchAllocated()) {
61 #ifdef ENABLE_AMR
62  if (Options::amr)
64  else
65 #endif
67  }
68 
70 }
71 
72 
74 {}
75 
76 void Track::stash() {
77  PAssert_EQ(stashedTrack.size(), 0);
78 
79  stashedTrack.push(block);
80  block = 0;
81 }
82 
84  delete block;
85  block = stashedTrack.top();
86  stashedTrack.pop();
87 
88  return block;
89 }
#define PAssert_EQ(a, b)
Definition: PAssert.h:104
static OpalData * getInstance()
Definition: OpalData.cpp:196
static std::stack< Track * > stashedTrack
Definition: Track.h:98
PartBunchBase< double, 3 > * bunch
The particle bunch to be tracked.
Definition: Track.h:47
TimeIntegrator
Definition: Steppers.h:25
static Track * pop()
Definition: Track.cpp:83
The base class for all OPAL beam lines and sequences.
Definition: BeamSequence.h:32
static Track * block
The block of track data.
Definition: Track.h:59
bool amr
Enable AMR if true.
Definition: Options.cpp:99
PartBunchBase< double, 3 > * getPartBunch()
Definition: OpalData.cpp:377
static void stash()
Definition: Track.cpp:76
Definition: Track.h:36
~Track()
Definition: Track.cpp:73
void setPartBunch(PartBunchBase< double, 3 > *p)
Definition: OpalData.cpp:373