40 auto const add_time_series = [
this](
Dataset &&dataset,
bool link =
true) {
41 auto const group = dataset.
group;
42 m_datasets.push_back(std::move(dataset));
43 m_datasets.push_back({group,
"step", 1, H5T_NATIVE_INT, 1, link});
44 m_datasets.push_back({group,
"time", 1, H5T_NATIVE_DOUBLE, 1, link});
49 {
"particles/atoms/box/edges",
"value", 2, H5T_NATIVE_DOUBLE, 3,
false});
52 add_time_series({
"particles/atoms/lees_edwards/offset",
"value", 2,
53 H5T_NATIVE_DOUBLE, 1,
false});
56 add_time_series({
"particles/atoms/lees_edwards/direction",
"value", 2,
57 H5T_NATIVE_INT, 1,
false});
60 add_time_series({
"particles/atoms/lees_edwards/normal",
"value", 2,
61 H5T_NATIVE_INT, 1,
false});
65 {
"particles/atoms/mass",
"value", 2, H5T_NATIVE_DOUBLE, 1,
false});
69 {
"particles/atoms/charge",
"value", 2, H5T_NATIVE_DOUBLE, 1,
false});
71 add_time_series({
"particles/atoms/id",
"value", 2, H5T_NATIVE_INT, 1,
false},
75 {
"particles/atoms/species",
"value", 2, H5T_NATIVE_INT, 1,
false});
79 {
"particles/atoms/position",
"value", 3, H5T_NATIVE_DOUBLE, 3,
false});
83 {
"particles/atoms/velocity",
"value", 3, H5T_NATIVE_DOUBLE, 3,
false});
87 {
"particles/atoms/force",
"value", 3, H5T_NATIVE_DOUBLE, 3,
false});
91 {
"particles/atoms/image",
"value", 3, H5T_NATIVE_INT, 3,
false});
95 {
"connectivity/atoms",
"value", 3, H5T_NATIVE_INT, 2,
false});
100 h5xx::file h5md_file(filename, h5xx::file::in);
102 auto const all_groups_exist =
103 std::ranges::all_of(m_datasets, [&h5md_file](
auto const &d) {
104 return h5xx::exists_group(h5md_file, d.group);
106 auto const all_datasets_exist =
107 std::ranges::all_of(m_datasets, [&h5md_file](
auto const &d) {
108 return h5xx::exists_dataset(h5md_file, d.path());
110 return all_groups_exist and all_datasets_exist;