41 auto const add_time_series = [
this](
Dataset &&dataset,
bool link =
true) {
42 auto const group = dataset.
group;
43 m_datasets.push_back(std::move(dataset));
44 m_datasets.push_back(
Dataset{group,
"step", 1, H5T_NATIVE_INT, 1, link});
45 m_datasets.push_back(
Dataset{group,
"time", 1, H5T_NATIVE_DOUBLE, 1, link});
49 add_time_series(
Dataset{
"/particles/atoms/box/edges",
"value", 2,
50 H5T_NATIVE_DOUBLE, 3,
false});
53 add_time_series(
Dataset{
"/particles/atoms/lees_edwards/offset",
"value", 2,
54 H5T_NATIVE_DOUBLE, 1,
false});
57 add_time_series(
Dataset{
"/particles/atoms/lees_edwards/direction",
"value",
58 2, H5T_NATIVE_INT, 1,
false});
61 add_time_series(
Dataset{
"/particles/atoms/lees_edwards/normal",
"value", 2,
62 H5T_NATIVE_INT, 1,
false});
65 add_time_series(
Dataset{
"/particles/atoms/mass",
"value", 2,
66 H5T_NATIVE_DOUBLE, 1,
false});
69 add_time_series(
Dataset{
"/particles/atoms/charge",
"value", 2,
70 H5T_NATIVE_DOUBLE, 1,
false});
73 Dataset{
"/particles/atoms/id",
"value", 2, H5T_NATIVE_INT, 1,
false},
76 add_time_series(
Dataset{
"/particles/atoms/species",
"value", 2,
77 H5T_NATIVE_INT, 1,
false});
80 add_time_series(
Dataset{
"/particles/atoms/position",
"value", 3,
81 H5T_NATIVE_DOUBLE, 3,
false});
84 add_time_series(
Dataset{
"/particles/atoms/velocity",
"value", 3,
85 H5T_NATIVE_DOUBLE, 3,
false});
88 add_time_series(
Dataset{
"/particles/atoms/force",
"value", 3,
89 H5T_NATIVE_DOUBLE, 3,
false});
92 add_time_series(
Dataset{
"/particles/atoms/image",
"value", 3,
93 H5T_NATIVE_INT, 3,
false});
97 Dataset{
"/connectivity/atoms",
"value", 3, H5T_NATIVE_INT, 2,
false});
102 HighFive::File h5md_file(file.string(), HighFive::File::ReadOnly);
104 auto const all_groups_exist =
105 std::ranges::all_of(m_datasets, [&h5md_file](
auto const &d) {
106 return h5md_file.exist(d.group);
108 auto const all_datasets_exist =
109 std::ranges::all_of(m_datasets, [&h5md_file](
auto const &d) {
110 return h5md_file.exist(d.path());
112 return all_groups_exist and all_datasets_exist;