29#include "h5core/h5_types.h"
42 if (restartStep == -1) {
43 restartStep = H5GetNumSteps(
file_m) - 1 ;
52 h5_int64_t numFileAttributes = H5GetNumFileAttribs(
file_m);
54 const h5_size_t lengthAttributeName = 256;
56 h5_int64_t attributeType;
57 h5_size_t numAttributeElements;
58 std::set<std::string> attributeNames;
60 for (h5_int64_t i = 0; i < numFileAttributes; ++ i) {
66 &numAttributeElements));
71 if (attributeNames.find(
"dump frequency") != attributeNames.end()) {
77 if (attributeNames.find(
"dPhiGlobal") != attributeNames.end()) {
83 if (attributeNames.find(
"nAutoPhaseCavities") != attributeNames.end()) {
86 h5_int64_t numAutoPhaseCavities = 0;
87 if (!H5HasFileAttrib(
file_m,
"nAutoPhaseCavities") ||
88 H5ReadFileAttribInt64(
file_m,
"nAutoPhaseCavities", &numAutoPhaseCavities) != H5_SUCCESS) {
89 numAutoPhaseCavities = 0;
91 for (
long i = 0; i < numAutoPhaseCavities; ++ i) {
92 std::string elementName =
"Cav-" + std::to_string(i + 1) +
"-name";
93 std::string elementPhase =
"Cav-" + std::to_string(i + 1) +
"-value";
99 opal->setMaxPhase(
name, phase);
106 h5_ssize_t numStepsInSource = H5GetNumSteps(
file_m);
107 h5_ssize_t
readStep = numStepsInSource - 1;
117 bunch->
setT(actualT);
144 Quaternion rotation = rotTheta * (rotPhi * rotPsi);
150 if (lastParticle >= numParticles || firstParticle > lastParticle) {
152 "the provided particle numbers don't match the number of particles in the file");
157 numParticles = lastParticle - firstParticle + 1;
159 std::vector<char> buffer(numParticles *
sizeof(h5_float64_t));
161 h5_float64_t* f64buffer =
reinterpret_cast<h5_float64_t*
>(buffer_ptr);
162 h5_int32_t* i32buffer =
reinterpret_cast<h5_int32_t*
>(buffer_ptr);
165 for (
long int n = 0;
n < numParticles; ++
n) {
166 bunch->
R[
n](0) = f64buffer[
n];
171 for (
long int n = 0;
n < numParticles; ++
n) {
172 bunch->
R[
n](1) = f64buffer[
n];
176 for (
long int n = 0;
n < numParticles; ++
n) {
177 bunch->
R[
n](2) = f64buffer[
n];
181 for (
long int n = 0;
n < numParticles; ++
n) {
182 bunch->
P[
n](0) = f64buffer[
n];
186 for (
long int n = 0;
n < numParticles; ++
n) {
187 bunch->
P[
n](1) = f64buffer[
n];
191 for (
long int n = 0;
n < numParticles; ++
n) {
192 bunch->
P[
n](2) = f64buffer[
n];
196 for (
long int n = 0;
n < numParticles; ++
n) {
197 bunch->
Q[
n] = f64buffer[
n];
201 for (
long int n = 0;
n < numParticles; ++
n) {
202 bunch->
ID[
n] = i32buffer[
n];
209 std::stringstream OPAL_version;
294 open(H5_O_APPENDONLY);
303 double t = bunch->
getT();
321 double energySpread = bunch->
getdE();
323 double sigma = ((xsigma[0] * xsigma[0]) + (xsigma[1] * xsigma[1])) /
324 (2.0 * bunch->
get_gamma() * I_0 * (geomvareps[0] * geomvareps[0] + geomvareps[1] * geomvareps[1]));
332 h5_int64_t numBunch = 1;
333 h5_int64_t SteptoLastInj = 0;
341 char const* OPALFlavour =
"opal-t";
383 Vector_t referenceB(additionalStepAttributes.at(
"B-ref_x"),
384 additionalStepAttributes.at(
"B-ref_z"),
385 additionalStepAttributes.at(
"B-ref_y"));
386 Vector_t referenceE(additionalStepAttributes.at(
"E-ref_x"),
387 additionalStepAttributes.at(
"E-ref_z"),
388 additionalStepAttributes.at(
"E-ref_y"));
392 }
catch (std::out_of_range & m) {
396 "some additional step attribute not found");
407 std::vector<char> buffer(numLocalParticles *
sizeof(h5_float64_t));
409 h5_float64_t* f64buffer =
reinterpret_cast<h5_float64_t*
>(buffer_ptr);
410 h5_int64_t* i64buffer =
reinterpret_cast<h5_int64_t*
>(buffer_ptr);
411 h5_int32_t* i32buffer =
reinterpret_cast<h5_int32_t*
>(buffer_ptr);
413 for (
size_t i = 0; i < numLocalParticles; ++ i)
414 f64buffer[i] = bunch->
R[i](0);
417 for (
size_t i = 0; i < numLocalParticles; ++ i)
418 f64buffer[i] = bunch->
R[i](1);
421 for (
size_t i = 0; i < numLocalParticles; ++ i)
422 f64buffer[i] = bunch->
R[i](2);
425 for (
size_t i = 0; i < numLocalParticles; ++ i)
426 f64buffer[i] = bunch->
P[i](0);
429 for (
size_t i = 0; i < numLocalParticles; ++ i)
430 f64buffer[i] = bunch->
P[i](1);
433 for (
size_t i = 0; i < numLocalParticles; ++ i)
434 f64buffer[i] = bunch->
P[i](2);
437 for (
size_t i = 0; i < numLocalParticles; ++ i)
438 f64buffer[i] = bunch->
Q[i];
441 for (
size_t i = 0; i < numLocalParticles; ++ i)
442 i64buffer[i] = bunch->
ID[i];
445 for (
size_t i = 0; i < numLocalParticles; ++ i)
446 i32buffer[i] = (h5_int32_t) bunch->
PType[i];
449 for (
size_t i = 0; i < numLocalParticles; ++ i)
450 i32buffer[i] = (h5_int32_t) bunch->
POrigin[i];
454 for (
size_t i = 0; i < numLocalParticles; ++ i)
455 f64buffer[i] = bunch->
Ef[i](0);
458 for (
size_t i = 0; i < numLocalParticles; ++ i)
459 f64buffer[i] = bunch->
Ef[i](1);
462 for (
size_t i = 0; i < numLocalParticles; ++ i)
463 f64buffer[i] = bunch->
Ef[i](2);
466 for (
size_t i = 0; i < numLocalParticles; ++ i)
467 f64buffer[i] = bunch->
Bf[i](0);
470 for (
size_t i = 0; i < numLocalParticles; ++ i)
471 f64buffer[i] = bunch->
Bf[i](1);
474 for (
size_t i = 0; i < numLocalParticles; ++ i)
475 f64buffer[i] = bunch->
Bf[i](2);
484 h5_err_t herr = H5Block3dSetView(
486 idx[0].
min(), idx[0].
max(),
487 idx[1].
min(), idx[1].
max(),
488 idx[2].
min(), idx[2].
max());
491 std::unique_ptr<h5_float64_t[]> data(
new h5_float64_t[(idx[0].
max() + 1) * (idx[1].
max() + 1) * (idx[2].
max() + 1)]);
497 for (
int i = idx[2].
min(); i <= idx[2].max(); ++ i) {
498 for (
int j = idx[1].
min(); j <= idx[1].max(); ++ j) {
499 for (
int k = idx[0].
min(); k <= idx[0].max(); ++ k) {
500 data[ii] = bunch->
getRho(k, j, i);
505 herr = H5Block3dWriteScalarFieldFloat64(
file_m,
"rho", data.get());
509 herr = H5Block3dSetFieldOrigin(
file_m,
"rho",
515 herr = H5Block3dSetFieldSpacing(
file_m,
"rho",
516 (h5_float64_t)bunch->
get_hr()(0),
517 (h5_float64_t)bunch->
get_hr()(1),
518 (h5_float64_t)bunch->
get_hr()(2));
#define OPAL_PROJECT_VERSION
#define OPAL_PROJECT_NAME
Tps< T > cos(const Tps< T > &x)
Cosine.
Tps< T > sin(const Tps< T > &x)
Sine.
#define WRITESTRINGFILEATTRIB(file, name, value)
#define WRITESTEPATTRIB(type, file, name, value, length)
#define REPORTONERROR(rc)
#define READSTEPATTRIB(type, file, name, value)
#define WRITEDATA(type, file, name, value)
#define WRITEFILEATTRIB(type, file, name, value, length)
#define WRITESTRINGSTEPATTRIB(file, name, value)
#define READDATA(type, file, name, value)
#define READFILEATTRIB(type, file, name, value)
T::PETE_Expr_t::PETE_Return_t max(const PETE_Expr< T > &expr, NDIndex< D > &loc)
T::PETE_Expr_t::PETE_Return_t min(const PETE_Expr< T > &expr, NDIndex< D > &loc)
Inform & endl(Inform &inf)
std::map< AttributeType, std::string > attributeName
constexpr double epsilon_0
The permittivity of vacuum in As/Vm.
constexpr double c
The velocity of light in m/s.
constexpr double pi
The value of.
int psDumpFreq
The frequency to dump the phase space, i.e.dump data when steppsDumpFreq==0.
Vector_t getTaitBryantAngles(Quaternion rotation, const std::string &)
T * c_data(std::vector< T, A > &v)
std::string getGitRevision()
ParticleAttrib< Vector_t > Ef
double get_meanKineticEnergy() const
ParticleAttrib< int > Bin
double getQ() const
Access to reference data.
size_t getLocalNum() const
void setLocalTrackStep(long long n)
step in a TRACK command
size_t getTotalNum() const
ParticleAttrib< Vector_t > P
ParticleAttrib< ParticleType > PType
ParticleAttrib< ParticleOrigin > POrigin
Vector_t get_rrms() const
ParticleAttrib< double > Q
void calcBeamParameters()
virtual double getRho(int x, int y, int z)=0
Vector_t get_origin() const
Vector_t get_prms() const
double getCharge() const
get the total charge per simulation particle
CoordinateSystemTrafo toLabTrafo_m
long long getLocalTrackStep() const
Vector_t get_norm_emit() const
Vector_t get_maxExtent() const
void get_PBounds(Vector_t &min, Vector_t &max) const
void setGlobalTrackStep(long long n)
step in multiple TRACK commands
Vector_t get_centroid() const
Vector_t get_pmean() const
ParticleAttrib< Vector_t > Bf
long long getGlobalTrackStep() const
virtual Vector_t get_hr() const
Vector_t get_emit() const
virtual FieldLayout_t & getFieldLayout()=0
void setRestartDumpFreq(const int &N)
set the dump frequency as found in restart file
double getGlobalPhaseShift()
units: (sec)
void setGlobalPhaseShift(double shift)
units: (sec)
static OpalData * getInstance()
void setRestartStep(int s)
store the location where to restart
Quaternion getRotation() const
Vector_t rotate(const Vector_t &) const
Quaternion conjugate() const
size_t getNumParticles() const
void open(h5_int32_t flags)
static void reportOnError(h5_int64_t rc, const char *file, int line)
virtual ~H5PartWrapperForPT()
void writeStepData(PartBunchBase< double, 3 > *)
void readStepHeader(PartBunchBase< double, 3 > *)
virtual void writeHeader()
virtual void writeStep(PartBunchBase< double, 3 > *, const std::map< std::string, double > &additionalStepAttributes)
void readStepData(PartBunchBase< double, 3 > *, h5_ssize_t, h5_ssize_t)
H5PartWrapperForPT(const std::string &fileName, h5_int32_t flags=H5_O_WRONLY)
virtual void readHeader()
virtual void readStep(PartBunchBase< double, 3 > *, h5_ssize_t firstParticle, h5_ssize_t lastParticle)
void writeStepHeader(PartBunchBase< double, 3 > *, const std::map< std::string, double > &)
The base class for all OPAL exceptions.
NDIndex< Dim > getLocalNDIndex()