OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
Loading...
Searching...
No Matches
TrackRun.h
Go to the documentation of this file.
1//
2// Class TrackRun
3// The RUN command.
4//
5// Copyright (c) 200x - 2022, Paul Scherrer Institut, Villigen PSI, Switzerland
6// All rights reserved
7//
8// This file is part of OPAL.
9//
10// OPAL is free software: you can redistribute it and/or modify
11// it under the terms of the GNU General Public License as published by
12// the Free Software Foundation, either version 3 of the License, or
13// (at your option) any later version.
14//
15// You should have received a copy of the GNU General Public License
16// along with OPAL. If not, see <https://www.gnu.org/licenses/>.
17//
18#ifndef OPAL_TrackRun_HH
19#define OPAL_TrackRun_HH
20
21#include "OPALTypes.h"
22
25#include "PartBunch/PartBunch.h"
26
28
29#include "Utilities/BiMap.h"
30
31#include <memory>
32#include <string>
33#include <vector>
34
35class Beam;
36class OpalData;
37class DataSink;
38class Distribution;
39class EmissionSource;
40class GlobalProcess;
41class H5PartWrapper;
42class Inform;
43class Tracker;
44
45class TrackRun : public Action {
46 using emittingSamplers_t = std::vector<std::shared_ptr<SamplingBase>>;
47
48public:
50 TrackRun();
51
52 virtual ~TrackRun();
53
55 virtual TrackRun* clone(const std::string& name);
56
58 virtual void execute();
59
60 // Bring base class print into scope to avoid hiding warning
61 using Object::print;
62
63 Inform& print(Inform& os) const;
64
65private:
66 enum class RunMethod : unsigned short { NONE, PARALLEL };
67
68 // Not implemented.
70 void operator=(const TrackRun&);
71
72 // Clone constructor.
73 TrackRun(const std::string& name, TrackRun* parent);
74
75 void setRunMethod();
76 std::string getRunMethodName() const;
77
78 void initDataSink(size_t numParticleContainers);
79 std::vector<H5PartWrapper*> borrowedPhaseSpaceSinks() const;
80
82
85 std::vector<std::vector<std::unique_ptr<GlobalProcess>>> globalProcessesLists);
86
91 void wireDaughterContainers(const std::vector<Beam*>& beams);
92
97 const std::vector<EmissionSource*>& sources, Beam* beam,
98 emittingSamplers_t& emittingSamplers, size_t index = 0);
99
115 const std::vector<std::vector<EmissionSource*>>& emissionSourcesLists);
116
120 Beam* beam, const std::vector<EmissionSource*>& sources) const;
121
122 std::unique_ptr<Tracker> itsTracker_m;
123
125 std::vector<Distribution*> distrs_m;
126
128 // std::vector<std::shared_ptr<SamplingBase>> emittingSamplers_m;
129
131
133
134 std::vector<std::unique_ptr<H5PartWrapper>> phaseSpaceSinks_m;
135
137
138 /*
139
140 this is the ippl bunch
141 */
142
144 std::unique_ptr<bunch_type> bunch_m;
145
147
150};
151
152inline Inform& operator<<(Inform& os, const TrackRun& b) { return b.print(os); }
153
154#endif // OPAL_TrackRun_HH
PartBunch< double, 3 > PartBunch_t
Template PIC bunch: IPPL PicManager, shared field mesh/solver, and multiple particle containers.
Inform & operator<<(Inform &os, const TrackRun &b)
Definition TrackRun.h:152
The base class for all OPAL actions.
Definition Action.h:29
Definition Beam.h:32
Simple bidirectional map with lookup in both directions.
Definition BiMap.h:28
virtual void print(std::ostream &) const
Print the object.
Definition Object.cpp:146
The global OPAL structure.
Definition OpalData.h:45
DataSink * ds_m
Definition TrackRun.h:132
void wireDaughterContainers(const std::vector< Beam * > &beams)
Wire daughter containers to cross-container processes (e.g. muon decay -> electron).
Definition TrackRun.cpp:603
RunMethod method_m
Definition TrackRun.h:148
void setupBoundaryGeometry()
Definition TrackRun.cpp:573
size_t computeTotalAllocationForBunch(Beam *beam, const std::vector< EmissionSource * > &sources) const
Definition TrackRun.cpp:652
virtual void execute()
Execute the command.
Definition TrackRun.cpp:258
std::vector< H5PartWrapper * > borrowedPhaseSpaceSinks() const
Definition TrackRun.cpp:564
std::vector< Distribution * > distrs_m
Distributions referenced by all emission sources (non-owning raw pointers).
Definition TrackRun.h:125
void setupDistributionsAndSamplers(const std::vector< EmissionSource * > &sources, Beam *beam, emittingSamplers_t &emittingSamplers, size_t index=0)
Definition TrackRun.cpp:677
bool isFollowupTrack_m
Definition TrackRun.h:146
void setRunMethod()
Definition TrackRun.cpp:507
virtual ~TrackRun()
Definition TrackRun.cpp:254
void operator=(const TrackRun &)
TrackRun(const TrackRun &)
TrackRun()
Exemplar constructor.
Definition TrackRun.cpp:194
OpalData * opal_m
Definition TrackRun.h:136
void setupGlobalProcesses(std::vector< std::vector< std::unique_ptr< GlobalProcess > > > globalProcessesLists)
Attach prebuilt global process vector to each particle container.
Definition TrackRun.cpp:586
virtual TrackRun * clone(const std::string &name)
Make clone.
Definition TrackRun.cpp:256
static const BiMap< RunMethod, std::string > stringMethod_s
Definition TrackRun.h:188
std::vector< std::shared_ptr< SamplingBase > > emittingSamplers_t
Definition TrackRun.h:46
FieldSolverCmd * fs_m
Samplers for time-dependent (emitting) sources; tracker calls emitParticles(t, dt) on each.
Definition TrackRun.h:130
std::string getRunMethodName() const
Definition TrackRun.cpp:520
std::unique_ptr< Tracker > itsTracker_m
Definition TrackRun.h:122
std::unique_ptr< bunch_type > bunch_m
Definition TrackRun.h:144
void configureImageChargeFromSources(const std::vector< std::vector< EmissionSource * > > &emissionSourcesLists)
Configure image-charge mode from all configured emission sources.
Definition TrackRun.cpp:790
std::vector< std::unique_ptr< H5PartWrapper > > phaseSpaceSinks_m
Definition TrackRun.h:134
void initDataSink(size_t numParticleContainers)
Definition TrackRun.cpp:522
Inform & print(Inform &os) const
Definition TrackRun.cpp:899