ImpactX
Loading...
Searching...
No Matches
BeamMonitor.H
Go to the documentation of this file.
1/* Copyright 2022-2023 The Regents of the University of California, through Lawrence
2 * Berkeley National Laboratory (subject to receipt of any required
3 * approvals from the U.S. Dept. of Energy). All rights reserved.
4 *
5 * This file is part of ImpactX.
6 *
7 * Authors: Axel Huebl
8 * License: BSD-3-Clause-LBNL
9 */
10#ifndef IMPACTX_ELEMENTS_DIAGS_BEAMMONITOR_H
11#define IMPACTX_ELEMENTS_DIAGS_BEAMMONITOR_H
12
13#include "elements/mixin/thin.H"
17
18#include <AMReX_Extension.H>
19#include <AMReX_REAL.H>
20
21#include <any>
22#include <string>
23#include <unordered_map>
24#include <vector>
25
26
28{
29namespace detail
30{
32 public:
34 using ParticleIter = typename ParticleContainer::ParIterType;
35
37
38 unsigned long GetTotalNumParticles () { return m_Total; }
39
40 std::vector<unsigned long long> m_ParticleOffsetAtRank;
41 std::vector<unsigned long long> m_ParticleSizeAtRank;
42 private:
49 void GetParticleOffsetOfProcessor (const long &numParticles,
50 unsigned long long &offset,
51 unsigned long long &sum) const;
52
53 int m_MPIRank = 0;
54 int m_MPISize = 1;
55
56 unsigned long long m_Total = 0;
57
58 std::vector<unsigned long long> m_ParticleCounterByLevel;
59 };
60} // namespace detail
61
68 : public mixin::LinearTransport<BeamMonitor>,
69 public mixin::Thin
70 {
71 static constexpr auto type = "BeamMonitor";
74
84 BeamMonitor (std::string series_name, std::string backend="default", std::string encoding="g", int period_sample_intervals=1);
85
86 BeamMonitor (BeamMonitor const & other) = default;
87 BeamMonitor (BeamMonitor && other) = default;
88 BeamMonitor& operator= (BeamMonitor const & other) = default;
89 BeamMonitor& operator= (BeamMonitor && other) = default;
90
92 void reverse () { }
93
104 void prepare (
105 PinnedContainer & pc,
106 std::vector<std::string> const & real_soa_names,
107 std::vector<std::string> const & int_soa_names,
108 RefPart const & ref_part,
109 int step
110 );
111
120 void operator() (
122 int step,
123 int period
124 );
125
133 void operator() (
134 PinnedContainer::ParIterType & pti,
135 std::vector<std::string> const & real_soa_names,
136 std::vector<std::string> const & int_soa_names,
137 RefPart const & ref_part
138 );
139
141 using Thin::operator();
142
144 using LinearTransport::operator();
145
152 Map6x6
153 transport_map ([[maybe_unused]] RefPart const & AMREX_RESTRICT refpart) const
154 {
155 // nothing to do
156 return Map6x6::Identity();
157 }
158
164 std::string name () const { return m_series_name; }
165
168 bool has_name () const { return true; }
169
172 std::string backend () const { return m_OpenPMDFileType; }
173
176 std::string encoding () const { return m_encoding; }
177
181
186 static inline std::map<std::string, std::any> m_unique_series = {};
187
190 void
191 finalize ();
192
193 private:
195 void open ();
196
197 std::string m_series_name;
198 std::string m_OpenPMDFileType;
199 std::string m_encoding;
200 std::any m_series;
201 int m_step = 0;
202
204
206
211 std::vector<uint64_t> m_offset;
212
217 std::unordered_map<std::string, amrex::ParticleReal> m_rbc;
218
219 };
220
226 void
228 std::string const & element_name,
230 );
231
232} // namespace impactx::diagnostics
233
234#endif // IMPACTX_ELEMENTS_DIAGS_BEAMMONITOR_H
#define AMREX_FORCE_INLINE
#define AMREX_RESTRICT
#define AMREX_GPU_HOST
Array4< int const > offset
amrex::ParticleContainer_impl< ParticleType, NArrayReal, NArrayInt, NewAllocator > ContainerLike
Definition ImpactXParticleContainer.H:136
std::vector< unsigned long long > m_ParticleSizeAtRank
Definition BeamMonitor.H:41
std::vector< unsigned long long > m_ParticleOffsetAtRank
Definition BeamMonitor.H:40
unsigned long GetTotalNumParticles()
Definition BeamMonitor.H:38
void GetParticleOffsetOfProcessor(const long &numParticles, unsigned long long &offset, unsigned long long &sum) const
Definition BeamMonitor.cpp:84
typename ImpactXParticleContainer::ContainerLike< amrex::PolymorphicArenaAllocator > ParticleContainer
Definition BeamMonitor.H:33
ImpactXParticleCounter(ParticleContainer &pc)
Definition BeamMonitor.cpp:38
typename ParticleContainer::ParIterType ParticleIter
Definition BeamMonitor.H:34
std::vector< unsigned long long > m_ParticleCounterByLevel
Definition BeamMonitor.H:58
unsigned long long m_Total
Definition BeamMonitor.H:56
Real sum(int comp=0, bool local=false) const
Definition BeamMonitor.cpp:37
Definition AdditionalProperties.cpp:27
void add_optional_properties(std::string const &element_name, ImpactXParticleContainer &pc)
Definition AdditionalProperties.cpp:29
amrex::SmallMatrix< amrex::ParticleReal, 6, 6, amrex::Order::F, 1 > Map6x6
Definition CovarianceMatrix.H:20
static constexpr __host__ __device__ SmallMatrix< T, NRows, NCols, ORDER, StartIndex > Identity() noexcept
Definition ReferenceParticle.H:33
typename ImpactXParticleContainer::ParticleType PType
Definition BeamMonitor.H:72
std::string m_OpenPMDFileType
openPMD filename
Definition BeamMonitor.H:198
typename ImpactXParticleContainer::ContainerLike< amrex::PolymorphicArenaAllocator > PinnedContainer
Definition BeamMonitor.H:73
void prepare(PinnedContainer &pc, std::vector< std::string > const &real_soa_names, std::vector< std::string > const &int_soa_names, RefPart const &ref_part, int step)
Definition BeamMonitor.cpp:212
AMREX_FORCE_INLINE std::string backend() const
Definition BeamMonitor.H:172
AMREX_FORCE_INLINE std::string name() const
Definition BeamMonitor.H:164
static constexpr auto type
Definition BeamMonitor.H:71
BeamMonitor(std::string series_name, std::string backend="default", std::string encoding="g", int period_sample_intervals=1)
Definition BeamMonitor.cpp:126
std::unordered_map< std::string, amrex::ParticleReal > m_rbc
Definition BeamMonitor.H:217
std::string m_series_name
Definition BeamMonitor.H:197
AMREX_FORCE_INLINE int period_sample_intervals() const
Definition BeamMonitor.H:180
BeamMonitor(BeamMonitor const &other)=default
void finalize()
Definition BeamMonitor.cpp:109
AMREX_FORCE_INLINE std::string encoding() const
Definition BeamMonitor.H:176
BeamMonitor(BeamMonitor &&other)=default
std::any m_series
openPMD iteration encoding: "v"ariable based, "f"ile based, "g"roup based (default)
Definition BeamMonitor.H:200
AMREX_FORCE_INLINE bool has_name() const
Definition BeamMonitor.H:168
void reverse()
Definition BeamMonitor.H:92
int m_file_min_digits
global step for output
Definition BeamMonitor.H:203
AMREX_GPU_HOST AMREX_FORCE_INLINE Map6x6 transport_map(RefPart const &AMREX_RESTRICT refpart) const
Definition BeamMonitor.H:153
int m_period_sample_intervals
minimum number of digits to iteration number in file name
Definition BeamMonitor.H:205
int m_step
openPMD::Series that holds potentially multiple outputs
Definition BeamMonitor.H:201
static std::map< std::string, std::any > m_unique_series
Definition BeamMonitor.H:186
void open()
Definition BeamMonitor.cpp:130
std::vector< uint64_t > m_offset
only output every Nth period (turn or cycle) of periodic lattices
Definition BeamMonitor.H:211
BeamMonitor & operator=(BeamMonitor const &other)=default
std::string m_encoding
openPMD backend: usually HDF5 (h5) or ADIOS2 (bp/bp4/bp5) or ADIOS2 SST (sst)
Definition BeamMonitor.H:199
void operator()(ImpactXParticleContainer &pc, int step, int period)
Definition BeamMonitor.cpp:305
Definition lineartransport.H:50
Definition thin.H:24