forked from openPMD/openPMD-api
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
JSON/TOML backend: introduce abbreviated IO modes (openPMD#1493)
* Introduce dataset template mode to JSON backend * Write used mode to JSON file * Use Attribute::getOptional for snapshot attribute * Introduce attribute mode * Add example 14_toml_template.cpp * Use Datatype::UNDEFINED to indicate no dataset definition in template * Extend example * Test short attribute mode * Copy datatypeToString to JSON implementation * Fix after rebase: Init JSON config in parallel mode * Fix after rebase: Don't erase JSON datasets when writing * openpmd-pipe: use short modes for test * Less intrusive warnings, allow disabling them * TOML: Use short modes by default * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Documentation * Short mode in default in openPMD >= 2. * Short value by default in TOML * Store the openPMD version information in the IOHandler * Fixes * Adapt test to recent rebase Reading the chunk table requires NOT using template mode, otherwise the string just consists of '\0' bytes. * toml11 4.0 compatibility * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * wip: cleanup * wip: cleanup * Cleanup * Extensive testing --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
- Loading branch information
1 parent
c639257
commit 2e246cc
Showing
18 changed files
with
1,560 additions
and
160 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
{ | ||
"json": { | ||
"dataset": { | ||
"mode": "template" | ||
}, | ||
"attribute": { | ||
"mode": "short" | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
#include <openPMD/openPMD.hpp> | ||
|
||
std::string backendEnding() | ||
{ | ||
auto extensions = openPMD::getFileExtensions(); | ||
if (auto it = std::find(extensions.begin(), extensions.end(), "toml"); | ||
it != extensions.end()) | ||
{ | ||
return *it; | ||
} | ||
else | ||
{ | ||
// Fallback for buggy old NVidia compiler | ||
return "json"; | ||
} | ||
} | ||
|
||
void write() | ||
{ | ||
std::string config = R"( | ||
{ | ||
"iteration_encoding": "variable_based", | ||
"json": { | ||
"dataset": {"mode": "template"}, | ||
"attribute": {"mode": "short"} | ||
}, | ||
"toml": { | ||
"dataset": {"mode": "template"}, | ||
"attribute": {"mode": "short"} | ||
} | ||
} | ||
)"; | ||
|
||
openPMD::Series writeTemplate( | ||
"../samples/tomlTemplate." + backendEnding(), | ||
openPMD::Access::CREATE, | ||
config); | ||
auto iteration = writeTemplate.writeIterations()[0]; | ||
|
||
openPMD::Dataset ds{openPMD::Datatype::FLOAT, {5, 5}}; | ||
|
||
auto temperature = | ||
iteration.meshes["temperature"][openPMD::RecordComponent::SCALAR]; | ||
temperature.resetDataset(ds); | ||
|
||
auto E = iteration.meshes["E"]; | ||
E["x"].resetDataset(ds); | ||
E["y"].resetDataset(ds); | ||
/* | ||
* Don't specify datatype and extent for this one to indicate that this | ||
* information is not yet known. | ||
*/ | ||
E["z"].resetDataset({}); | ||
|
||
ds.extent = {10}; | ||
|
||
auto electrons = iteration.particles["e"]; | ||
electrons["position"]["x"].resetDataset(ds); | ||
electrons["position"]["y"].resetDataset(ds); | ||
electrons["position"]["z"].resetDataset(ds); | ||
|
||
electrons["positionOffset"]["x"].resetDataset(ds); | ||
electrons["positionOffset"]["y"].resetDataset(ds); | ||
electrons["positionOffset"]["z"].resetDataset(ds); | ||
electrons["positionOffset"]["x"].makeConstant(3.14); | ||
electrons["positionOffset"]["y"].makeConstant(3.14); | ||
electrons["positionOffset"]["z"].makeConstant(3.14); | ||
|
||
ds.dtype = openPMD::determineDatatype<uint64_t>(); | ||
electrons.particlePatches["numParticles"][openPMD::RecordComponent::SCALAR] | ||
.resetDataset(ds); | ||
electrons | ||
.particlePatches["numParticlesOffset"][openPMD::RecordComponent::SCALAR] | ||
.resetDataset(ds); | ||
electrons.particlePatches["offset"]["x"].resetDataset(ds); | ||
electrons.particlePatches["offset"]["y"].resetDataset(ds); | ||
electrons.particlePatches["offset"]["z"].resetDataset(ds); | ||
electrons.particlePatches["extent"]["x"].resetDataset(ds); | ||
electrons.particlePatches["extent"]["y"].resetDataset(ds); | ||
electrons.particlePatches["extent"]["z"].resetDataset(ds); | ||
} | ||
|
||
void read() | ||
{ | ||
/* | ||
* The config is entirely optional, these things are also detected | ||
* automatically when reading | ||
*/ | ||
|
||
// std::string config = R"( | ||
// { | ||
// "iteration_encoding": "variable_based", | ||
// "toml": { | ||
// "dataset": {"mode": "template"}, | ||
// "attribute": {"mode": "short"} | ||
// } | ||
// } | ||
// )"; | ||
|
||
openPMD::Series read( | ||
"../samples/tomlTemplate." + backendEnding(), | ||
openPMD::Access::READ_LINEAR); | ||
read.parseBase(); | ||
openPMD::helper::listSeries(read); | ||
} | ||
|
||
int main() | ||
{ | ||
write(); | ||
read(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.