From fb251caffa2be8aaceed7190636e078ae75f889f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franz=20P=C3=B6schel?= Date: Mon, 12 Jan 2026 15:43:03 +0100 Subject: [PATCH 01/22] Base structure for scientific defaults --- CMakeLists.txt | 1 + include/openPMD/Iteration.hpp | 5 ++- include/openPMD/Mesh.hpp | 11 ++++++- include/openPMD/ParticleSpecies.hpp | 5 ++- include/openPMD/backend/Container.hpp | 28 ++++++++++++++++ .../openPMD/backend/MeshRecordComponent.hpp | 5 ++- .../openPMD/backend/ScientificDefaults.hpp | 18 +++++++++++ src/Iteration.cpp | 15 +++++++++ src/backend/ScientificDefaults.cpp | 32 +++++++++++++++++++ 9 files changed, 116 insertions(+), 4 deletions(-) create mode 100644 include/openPMD/backend/ScientificDefaults.hpp create mode 100644 src/backend/ScientificDefaults.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index dba77d38be..f741d524e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -426,6 +426,7 @@ set(CORE_SOURCE src/backend/PatchRecord.cpp src/backend/PatchRecordComponent.cpp src/backend/Writable.cpp + src/backend/ScientificDefaults.cpp src/auxiliary/OneDimensionalBlockSlicer.cpp src/helper/list_series.cpp src/snapshots/ContainerImpls.cpp diff --git a/include/openPMD/Iteration.hpp b/include/openPMD/Iteration.hpp index c66199c46f..fac3a0a269 100644 --- a/include/openPMD/Iteration.hpp +++ b/include/openPMD/Iteration.hpp @@ -27,6 +27,7 @@ #include "openPMD/auxiliary/Variant.hpp" #include "openPMD/backend/Attributable.hpp" #include "openPMD/backend/Container.hpp" +#include "openPMD/backend/ScientificDefaults.hpp" #include #include @@ -142,7 +143,9 @@ namespace internal * @see * https://github.com/openPMD/openPMD-standard/blob/latest/STANDARD.md#required-attributes-for-the-basepath */ -class Iteration : public Attributable +class Iteration + : public Attributable + , internal::ScientificDefaults { template friend class Container; diff --git a/include/openPMD/Mesh.hpp b/include/openPMD/Mesh.hpp index d0bf81ddef..deaebfcb5f 100644 --- a/include/openPMD/Mesh.hpp +++ b/include/openPMD/Mesh.hpp @@ -23,7 +23,9 @@ #include "openPMD/UnitDimension.hpp" #include "openPMD/backend/Attributable.hpp" #include "openPMD/backend/BaseRecord.hpp" +#include "openPMD/backend/Container.hpp" #include "openPMD/backend/MeshRecordComponent.hpp" +#include "openPMD/backend/ScientificDefaults.hpp" #include #include @@ -37,7 +39,9 @@ namespace openPMD * @see * https://github.com/openPMD/openPMD-standard/blob/latest/STANDARD.md#mesh-based-records */ -class Mesh : public BaseRecord +class Mesh + : public BaseRecord + , internal::ScientificDefaults { friend class Container; friend class Iteration; @@ -330,6 +334,11 @@ class Mesh : public BaseRecord void read(); }; // Mesh +static_assert(internal::IsContainer_v); +static_assert(std::is_same_v< + Container, + internal::AsContainer_t>); + template inline std::vector Mesh::gridSpacing() const { diff --git a/include/openPMD/ParticleSpecies.hpp b/include/openPMD/ParticleSpecies.hpp index 4f309c0f2a..8a0eb2fc80 100644 --- a/include/openPMD/ParticleSpecies.hpp +++ b/include/openPMD/ParticleSpecies.hpp @@ -24,13 +24,16 @@ #include "openPMD/Record.hpp" #include "openPMD/backend/Attributable.hpp" #include "openPMD/backend/Container.hpp" +#include "openPMD/backend/ScientificDefaults.hpp" #include namespace openPMD { -class ParticleSpecies : public Container +class ParticleSpecies + : public Container + , internal::ScientificDefaults { friend class Container; friend class Container; diff --git a/include/openPMD/backend/Container.hpp b/include/openPMD/backend/Container.hpp index 963fd34802..25fc9a4349 100644 --- a/include/openPMD/backend/Container.hpp +++ b/include/openPMD/backend/Container.hpp @@ -343,5 +343,33 @@ namespace internal ~EraseStaleEntries(); }; + + template