ImpactX
Loading...
Searching...
No Matches
BeamMonitor.H
Go to the documentation of this file.
1/* Copyright 2022-2026 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, Chad Mitchell
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 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 (amrex::Long const &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
75 static constexpr char const * DEFAULT_backend = "default";
76 static constexpr char const * DEFAULT_encoding = "g";
77 static constexpr int DEFAULT_period_sample_intervals = 1;
78
89 std::string series_name,
90 std::string backend = DEFAULT_backend,
91 std::string encoding = DEFAULT_encoding,
93 );
94
95 BeamMonitor (BeamMonitor const & other) = default;
96 BeamMonitor (BeamMonitor && other) = default;
97 BeamMonitor& operator= (BeamMonitor const & other) = default;
98 BeamMonitor& operator= (BeamMonitor && other) = default;
99
101 void reverse () { }
102
113 void prepare (
114 PinnedContainer & pc,
115 std::vector<std::string> const & real_soa_names,
116 std::vector<std::string> const & int_soa_names,
117 RefPart const & ref_part,
118 int step
119 );
120
129 void operator() (
131 int step,
132 int period
133 );
134
142 void operator() (
143 PinnedContainer::ParIterType & pti,
144 std::vector<std::string> const & real_soa_names,
145 std::vector<std::string> const & int_soa_names,
146 RefPart const & ref_part
147 );
148
150 using Thin::operator();
151
153 using LinearTransport::operator();
154
161 Map6x6
162 transport_map ([[maybe_unused]] RefPart const & AMREX_RESTRICT refpart) const
163 {
164 // nothing to do
165 return Map6x6::Identity();
166 }
167
173 std::string name () const { return m_series_name; }
174
177 bool has_name () const { return true; }
178
181 std::string backend () const { return m_OpenPMDFileType; }
182
185 std::string encoding () const { return m_encoding; }
186
190
195 static inline std::map<std::string, std::any> m_unique_series = {};
196
199 void
200 finalize ();
201
202 private:
204 void open ();
205
206 std::string m_series_name;
207 std::string m_OpenPMDFileType;
208 std::string m_encoding;
209 std::any m_series;
210 std::string m_series_key;
211 int m_step = 0;
212
214
216
221 std::vector<uint64_t> m_offset;
222
227 std::unordered_map<std::string, amrex::ParticleReal> m_rbc;
228
229 };
230
236 void
238 std::string const & element_name,
240 );
241
242} // namespace impactx::diagnostics
243
244#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 long GetTotalNumParticles()
Definition BeamMonitor.H:38
void GetParticleOffsetOfProcessor(amrex::Long const &numParticles, unsigned long long &offset, unsigned long long &sum) const
Definition BeamMonitor.cpp:85
typename ImpactXParticleContainer::ContainerLike< amrex::PolymorphicArenaAllocator > ParticleContainer
Definition BeamMonitor.H:33
ImpactXParticleCounter(ParticleContainer &pc)
Definition BeamMonitor.cpp:39
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
amrex_long Long
Real sum(int comp=0, bool local=false) const
Definition BeamMonitor.cpp:38
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
static constexpr int DEFAULT_period_sample_intervals
Definition BeamMonitor.H:77
std::string m_OpenPMDFileType
openPMD filename
Definition BeamMonitor.H:207
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:219
static constexpr char const * DEFAULT_encoding
Definition BeamMonitor.H:76
AMREX_FORCE_INLINE std::string backend() const
Definition BeamMonitor.H:181
AMREX_FORCE_INLINE std::string name() const
Definition BeamMonitor.H:173
static constexpr auto type
Definition BeamMonitor.H:71
std::unordered_map< std::string, amrex::ParticleReal > m_rbc
Definition BeamMonitor.H:227
std::string m_series_name
Definition BeamMonitor.H:206
AMREX_FORCE_INLINE int period_sample_intervals() const
Definition BeamMonitor.H:189
BeamMonitor(BeamMonitor const &other)=default
std::string m_series_key
openPMD::Series that holds potentially multiple outputs
Definition BeamMonitor.H:210
static constexpr char const * DEFAULT_backend
Definition BeamMonitor.H:75
void finalize()
Definition BeamMonitor.cpp:110
AMREX_FORCE_INLINE std::string encoding() const
Definition BeamMonitor.H:185
BeamMonitor(BeamMonitor &&other)=default
std::any m_series
openPMD iteration encoding: "v"ariable based, "f"ile based, "g"roup based (default)
Definition BeamMonitor.H:209
AMREX_FORCE_INLINE bool has_name() const
Definition BeamMonitor.H:177
void reverse()
Definition BeamMonitor.H:101
int m_file_min_digits
global step for output
Definition BeamMonitor.H:213
AMREX_GPU_HOST AMREX_FORCE_INLINE Map6x6 transport_map(RefPart const &AMREX_RESTRICT refpart) const
Definition BeamMonitor.H:162
int m_period_sample_intervals
minimum number of digits to iteration number in file name
Definition BeamMonitor.H:215
int m_step
full path used as key in m_unique_series
Definition BeamMonitor.H:211
static std::map< std::string, std::any > m_unique_series
Definition BeamMonitor.H:195
BeamMonitor(std::string series_name, std::string backend=DEFAULT_backend, std::string encoding=DEFAULT_encoding, int period_sample_intervals=DEFAULT_period_sample_intervals)
Definition BeamMonitor.cpp:129
void open()
Definition BeamMonitor.cpp:133
std::vector< uint64_t > m_offset
only output every Nth period (turn or cycle) of periodic lattices
Definition BeamMonitor.H:221
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:208
void operator()(ImpactXParticleContainer &pc, int step, int period)
Definition BeamMonitor.cpp:312
Definition lineartransport.H:50
Definition thin.H:24