OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
Loading...
Searching...
No Matches
DataSink.h
Go to the documentation of this file.
1//
2// Class DataSink
3// This class acts as an observer during the calculation. It generates diagnostic
4// output of the accelerated beam such as statistical beam descriptors of particle
5// positions, momenta, beam phase space (emittance) etc. These are written to file
6// at periodic time steps during the calculation.
7//
8// This class also writes the full beam phase space to an H5 file at periodic time
9// steps in the calculation (this period is different from that of the statistical
10// numbers).
11
12// Class also writes processor load balancing data to file to track parallel
13// calculation efficiency.
14//
15// Copyright (c) 2008 - 2020, Paul Scherrer Institut, Villigen PSI, Switzerland
16// All rights reserved
17//
18// This file is part of OPAL.
19//
20// OPAL is free software: you can redistribute it and/or modify
21// it under the terms of the GNU General Public License as published by
22// the Free Software Foundation, either version 3 of the License, or
23// (at your option) any later version.
24//
25// You should have received a copy of the GNU General Public License
26// along with OPAL. If not, see <https://www.gnu.org/licenses/>.
27//
28#ifndef _OPAL_DATA_SINK_H
29#define _OPAL_DATA_SINK_H
30
33#include "Structure/H5Writer.h"
36
37#include <array>
38#include <iomanip>
39#include <memory>
40#include <string>
41#include <vector>
42
44class H5PartWrapper;
45class BinConfigWriter;
47
48class DataSink {
49private:
51 typedef std::unique_ptr<StatWriter> statWriter_t;
52 typedef std::unique_ptr<SDDSWriter> sddsWriter_t;
53 typedef std::unique_ptr<H5Writer> h5Writer_t;
54
55public:
61 DataSink();
65 const std::vector<H5PartWrapper*>& h5wrappers, bool restart,
66 size_t numParticleContainers);
67 DataSink(H5PartWrapper* h5wrapper, bool restart);
68 DataSink(H5PartWrapper* h5wrapper);
69
72 static std::string diagnosticStemForContainer(
73 const std::string& inputBasename, size_t numContainers, size_t index);
74
80 void dumpH5(PartBunch_t& beam, Vector_t<double, 3> FDext[]) const;
81
87 void dumpH5(
88 PartBunch_t& beam,
89 const std::vector<std::array<Vector_t<double, 3>, 2>>& fdextPerContainer) const;
90
95 int dumpH5(
96 PartBunch_t& beam, Vector_t<double, 3> FDext[], double meanEnergy, double refPr,
97 double refPt, double refPz, double refR, double refTheta, double refZ, double azimuth,
98 double elevation, bool local) const;
99
104 void dumpSDDS(
105 PartBunch_t& beam,
106 const std::vector<std::array<Vector_t<double, 3>, 2>>& fdextPerContainer,
107 const double& azimuth) const;
108
113 void dumpSDDS(
114 PartBunch_t& beam,
115 const std::vector<std::array<Vector_t<double, 3>, 2>>& fdextPerContainer,
116 const losses_t& losses, const double& azimuth) const;
117
121
122 void changeH5Wrappers(const std::vector<H5PartWrapper*>& h5wrappers);
123
130 void writeGeomToVtk(BoundaryGeometry& bg, std::string fn);
131 // void writeGeoContourToVtk(BoundaryGeometry &bg, std::string fn);
132
140 const PartBunch_t& beam, long long int& step, size_t& impact, double& sey_num,
141 size_t numberOfFieldEmittedParticles, bool nEmissionMode, std::string fn);
142
154 void dumpBinConfig(
155 long long step, double time, bool preMerge, const std::vector<std::size_t>& binCounts,
156 const std::vector<double>& binWidths, double xMin, const std::string& fileName);
157
173 template <typename FieldType>
175 long long step, double time, double zPlane, const FieldType& field,
176 const std::string& solveTag);
177
178private:
179 DataSink(const DataSink& ds) = delete;
180 DataSink& operator=(const DataSink&) = delete;
181
182 void rewindLines();
183
184 void init(
185 bool restart, const std::vector<H5PartWrapper*>& h5wrappers,
186 size_t numParticleContainers);
187
188 std::vector<h5Writer_t> h5Writers_m;
189 std::vector<statWriter_t> statWriters_m;
190 std::vector<sddsWriter_t> sddsWriter_m;
191
192 // Writer for binning configuration JSON output (rank 0 only).
193 std::unique_ptr<BinConfigWriter> binConfigWriter_m;
194
195 // Writer for dirichlet-plane diagnostics (rank 0 only).
196 std::unique_ptr<DirichletPlaneWriter> dirichletPlaneWriter_m;
197
198 static std::string convertToString(int number, int setw = 5);
199
201 unsigned int lossWrCounter_m;
202
204 IpplTimings::TimerRef StatMarkerTimer_m;
205};
206
207inline std::string DataSink::convertToString(int number, int setw) {
208 std::stringstream ss;
209 ss << std::setw(setw) << std::setfill('0') << number;
210 return ss.str();
211}
212
213template <typename FieldType>
215 long long step, double time, double zPlane, const FieldType& field,
216 const std::string& solveTag) {
217 if (ippl::Comm->rank() != 0) {
219 }
220
221 Inform m("DataSink::dumpDirichletPlane");
222
224 m << level4 << "Creating DirichletPlaneWriter in directory \"data/dirichletplanedumps\"."
225 << endl;
226 dirichletPlaneWriter_m = std::make_unique<DirichletPlaneWriter>("data/dirichletplanedumps");
227 }
228
229 return dirichletPlaneWriter_m->dumpInterpolatedPlane(step, time, zPlane, field, solveTag);
230}
231
232#endif // DataSink_H_
ippl::Vector< T, Dim > Vector_t
Helper to write binning configuration snapshots as a JSON array.
void rewindLines()
Definition DataSink.cpp:275
std::vector< sddsWriter_t > sddsWriter_m
Definition DataSink.h:190
StatWriter::losses_t losses_t
Definition DataSink.h:50
DataSink & operator=(const DataSink &)=delete
DirichletPlaneWriter::PlaneDiagnostics dumpDirichletPlane(long long step, double time, double zPlane, const FieldType &field, const std::string &solveTag)
Interpolate and dump potential values on a 2D z-plane.
Definition DataSink.h:214
void dumpH5(PartBunch_t &beam, Vector_t< double, 3 > FDext[]) const
Write H5 phase-space data for all particle containers.
Definition DataSink.cpp:71
std::unique_ptr< DirichletPlaneWriter > dirichletPlaneWriter_m
Definition DataSink.h:196
void changeH5Wrappers(const std::vector< H5PartWrapper * > &h5wrappers)
Definition DataSink.cpp:180
void writeGeomToVtk(BoundaryGeometry &bg, std::string fn)
Definition DataSink.cpp:197
std::unique_ptr< SDDSWriter > sddsWriter_t
Definition DataSink.h:52
static std::string convertToString(int number, int setw=5)
Definition DataSink.h:207
void writeImpactStatistics(const PartBunch_t &beam, long long int &step, size_t &impact, double &sey_num, size_t numberOfFieldEmittedParticles, bool nEmissionMode, std::string fn)
Definition DataSink.cpp:203
std::vector< h5Writer_t > h5Writers_m
Definition DataSink.h:188
void storeCavityInformation()
Write cavity information from H5 file.
Definition DataSink.cpp:172
static std::string diagnosticStemForContainer(const std::string &inputBasename, size_t numContainers, size_t index)
Definition DataSink.cpp:43
IpplTimings::TimerRef StatMarkerTimer_m
Timer to track statistics write time.
Definition DataSink.h:204
void init(bool restart, const std::vector< H5PartWrapper * > &h5wrappers, size_t numParticleContainers)
Definition DataSink.cpp:296
std::unique_ptr< H5Writer > h5Writer_t
Definition DataSink.h:53
unsigned int lossWrCounter_m
needed to create index for vtk file
Definition DataSink.h:201
DataSink(const DataSink &ds)=delete
void dumpBinConfig(long long step, double time, bool preMerge, const std::vector< std::size_t > &binCounts, const std::vector< double > &binWidths, double xMin, const std::string &fileName)
Append a binning configuration snapshot to a JSON file.
Definition DataSink.cpp:246
std::unique_ptr< BinConfigWriter > binConfigWriter_m
Definition DataSink.h:193
DataSink()
Default constructor.
Definition DataSink.cpp:51
std::vector< statWriter_t > statWriters_m
Definition DataSink.h:189
std::unique_ptr< StatWriter > statWriter_t
Definition DataSink.h:51
void dumpSDDS(PartBunch_t &beam, const std::vector< std::array< Vector_t< double, 3 >, 2 > > &fdextPerContainer, const double &azimuth) const
Write SDDS statistics with per-container external fields.
Definition DataSink.cpp:122
Writes dirichlet-plane potential snapshots to ASCII files.
std::vector< std::pair< std::string, unsigned int > > losses_t
Definition StatWriter.h:26