Skip to content

Commit

Permalink
set attributes
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexanderSinn committed Dec 17, 2023
1 parent 15a6818 commit 11b9188
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 13 deletions.
4 changes: 2 additions & 2 deletions src/Hipace.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -995,13 +995,13 @@ Hipace::WriteDiagnostics (const int step)
#ifdef HIPACE_USE_OPENPMD
if (m_diags.hasAnyFieldOutput(step, m_max_step, m_physical_time, m_max_time)) {
m_openpmd_writer.WriteDiagnostics(m_diags.getFieldData(), m_multi_beam,
m_physical_time, step, getDiagBeamNames(),
m_multi_laser, m_physical_time, step, getDiagBeamNames(),
m_3D_geom, OpenPMDWriterCallType::fields);
}

if (m_diags.hasBeamOutput(step, m_max_step, m_physical_time, m_max_time)) {
m_openpmd_writer.WriteDiagnostics(m_diags.getFieldData(), m_multi_beam,
m_physical_time, step, getDiagBeamNames(),
m_multi_laser, m_physical_time, step, getDiagBeamNames(),
m_3D_geom, OpenPMDWriterCallType::beams);
}
#else
Expand Down
6 changes: 4 additions & 2 deletions src/diagnostics/OpenPMDWriter.H
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,11 @@ private:
/** \brief writing openPMD field data
*
* \param[in] fd field diagnostic data
* \param[in] a_multi_laser multi laser to get the central wavelength
* \param[in,out] iteration openPMD iteration to which the data is written
*/
void WriteFieldData (const FieldDiagnosticData& fd, openPMD::Iteration iteration);
void WriteFieldData (const FieldDiagnosticData& fd, const MultiLaser& a_multi_laser,
openPMD::Iteration iteration);

/** Named Beam SoA attributes per particle as defined in BeamIdx
*/
Expand Down Expand Up @@ -124,7 +126,7 @@ public:
*/
void WriteDiagnostics (
const amrex::Vector<FieldDiagnosticData>& field_diag, MultiBeam& a_multi_beam,
const amrex::Real physical_time, const int output_step,
const MultiLaser& a_multi_laser, const amrex::Real physical_time, const int output_step,
const amrex::Vector< std::string > beamnames,
amrex::Vector<amrex::Geometry> const& geom3D,
const OpenPMDWriterCallType call_type);
Expand Down
25 changes: 16 additions & 9 deletions src/diagnostics/OpenPMDWriter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ OpenPMDWriter::InitDiagnostics ()
void
OpenPMDWriter::WriteDiagnostics (
const amrex::Vector<FieldDiagnosticData>& field_diag, MultiBeam& a_multi_beam,
const amrex::Real physical_time, const int output_step,
const MultiLaser& a_multi_laser, const amrex::Real physical_time, const int output_step,
const amrex::Vector< std::string > beamnames,
amrex::Vector<amrex::Geometry> const& geom3D,
const OpenPMDWriterCallType call_type)
Expand All @@ -77,14 +77,15 @@ OpenPMDWriter::WriteDiagnostics (
} else if (call_type == OpenPMDWriterCallType::fields) {
for (const auto& fd : field_diag) {
if (fd.m_has_field) {
WriteFieldData(fd.m_F, fd.m_geom_io, fd.m_slice_dir, fd.m_comps_output, iteration);
WriteFieldData(fd, a_multi_laser, iteration);
}
}
}
}

void
OpenPMDWriter::WriteFieldData (const FieldDiagnosticData& fd, openPMD::Iteration iteration)
OpenPMDWriter::WriteFieldData (
const FieldDiagnosticData& fd, const MultiLaser& a_multi_laser, openPMD::Iteration iteration)
{
HIPACE_PROFILE("OpenPMDWriter::WriteFieldData()");

Expand All @@ -94,13 +95,13 @@ OpenPMDWriter::WriteFieldData (const FieldDiagnosticData& fd, openPMD::Iteration
amrex::Vector<std::string> varnames = fd.m_comps_output;

if (fd.m_do_laser) {
varnames.push_back("laser_envelope");
varnames.push_back("laserEnvelope");
}

// loop over field components
for ( int icomp = 0; icomp < varnames.size(); ++icomp )
{
const bool is_laser_comp = varnames[icomp] == "laser_envelope";
const bool is_laser_comp = varnames[icomp] == "laserEnvelope";

// "B" "x" (todo)
// "Bx" "" (just for now)
Expand All @@ -123,8 +124,8 @@ OpenPMDWriter::WriteFieldData (const FieldDiagnosticData& fd, openPMD::Iteration
const amrex::IntVect box_offset {0, 0, data_box.smallEnd(2) - geom.Domain().smallEnd(2)};
openPMD::Offset chunk_offset = utils::getReversedVec(box_offset);
openPMD::Extent chunk_size = utils::getReversedVec(data_box.size());
if (d.m_slice_dir >= 0) {
const int remove_dir = 2 - d.m_slice_dir;
if (fd.m_slice_dir >= 0) {
const int remove_dir = 2 - fd.m_slice_dir;
// User requested slice IO
// remove the slicing direction in position, label, resolution, offset
relative_cell_pos.erase(relative_cell_pos.begin() + remove_dir);
Expand All @@ -141,14 +142,20 @@ OpenPMDWriter::WriteFieldData (const FieldDiagnosticData& fd, openPMD::Iteration
field.setGridGlobalOffset(offWindow);

openPMD::Datatype datatype = is_laser_comp ?
openPMD::determineDatatype< amrex::GpuComplex<amrex::Real> >() :
openPMD::determineDatatype< std::complex<amrex::Real> >() :
openPMD::determineDatatype< amrex::Real >();
// set data type and global size of the simulation
openPMD::Dataset dataset(datatype, global_size);
field_comp.resetDataset(dataset);

if (is_laser_comp) {
field_comp.storeChunkRaw(fd.m_F_laser.dataPtr(icomp), chunk_offset, chunk_size);
// set laser attributes and store laser
field.setAttribute("envelopeField", "normalized_vector_potential");
field.setAttribute("angularFrequency",
double(2.) * MathConst::pi * PhysConstSI::c / a_multi_laser.GetLambda0());
std::vector< std::complex<double> > polarization {{1., 0.}, {0., 0.}};
field.setAttribute("polarization", polarization);
field_comp.storeChunkRaw(fd.m_F_laser.dataPtr(), chunk_offset, chunk_size);
} else {
field_comp.storeChunkRaw(fd.m_F.dataPtr(icomp), chunk_offset, chunk_size);
}
Expand Down
3 changes: 3 additions & 0 deletions src/laser/MultiLaser.H
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,9 @@ public:
*/
void InitLaserSlice (const amrex::Geometry& geom, const int islice, const int comp);

/** Get the central wavelength */
amrex::Real GetLambda0 () const { return m_lambda0; }

bool m_use_laser {false}; /**< whether a laser is used or not */

private:
Expand Down

0 comments on commit 11b9188

Please sign in to comment.