Skip to content
Snippets Groups Projects
Commit be470482 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Add checkpoint/resume for ItemType variables

parent 827511cd
No related branches found
No related tags found
1 merge request!199Integrate checkpointing
......@@ -355,4 +355,13 @@ MeshModule::registerCheckpointResume() const
return readIZoneDescriptor(symbol_name, symbol_table_group);
}));
CheckpointResumeRepository::instance()
.addCheckpointResume(ast_node_data_type_from<std::shared_ptr<const ItemType>>,
std::function([](const std::string& symbol_name, const EmbeddedData& embedded_data,
HighFive::File& file, HighFive::Group& checkpoint_group,
HighFive::Group& symbol_table_group) {
writeItemType(symbol_name, embedded_data, file, checkpoint_group, symbol_table_group);
}),
std::function([](const std::string& symbol_name, const HighFive::Group& symbol_table_group)
-> EmbeddedData { return readItemType(symbol_name, symbol_table_group); }));
}
......@@ -7,8 +7,10 @@
#include <utils/checkpointing/IBoundaryDescriptorHFType.hpp>
#include <utils/checkpointing/IInterfaceDescriptorHFType.hpp>
#include <utils/checkpointing/IZoneDescriptorHFType.hpp>
#include <utils/checkpointing/ItemTypeHFType.hpp>
#include <utils/checkpointing/RefItemListHFType.hpp>
#include <mesh/ItemType.hpp>
#include <mesh/Mesh.hpp>
#include <mesh/NamedBoundaryDescriptor.hpp>
#include <mesh/NamedInterfaceDescriptor.hpp>
......@@ -285,3 +287,21 @@ writeIZoneDescriptor(const std::string& symbol_name,
}
}
}
void
writeItemType(const std::string& symbol_name,
const EmbeddedData& embedded_data,
HighFive::File&,
HighFive::Group&,
HighFive::Group& symbol_table_group)
{
HighFive::Group variable_group = symbol_table_group.createGroup("embedded/" + symbol_name);
std::shared_ptr<const ItemType> item_type_p =
dynamic_cast<const DataHandler<const ItemType>&>(embedded_data.get()).data_ptr();
const ItemType& item_type = *item_type_p;
variable_group.createAttribute("type", dataTypeName(ast_node_data_type_from<decltype(item_type_p)>));
variable_group.createAttribute("item_type", item_type);
}
......@@ -66,4 +66,10 @@ void writeIZoneDescriptor(const std::string& symbol_name,
HighFive::Group& checkpoint_group,
HighFive::Group& symbol_table_group);
void writeItemType(const std::string& symbol_name,
const EmbeddedData& embedded_data,
HighFive::File& file,
HighFive::Group& checkpoint_group,
HighFive::Group& symbol_table_group);
#endif // CHECKPOINT_UTILS_HPP
#ifndef ITEM_TYPE_HF_TYPE_HPP
#define ITEM_TYPE_HF_TYPE_HPP
#include <mesh/ItemType.hpp>
#include <utils/checkpointing/CheckpointUtils.hpp>
HighFive::EnumType<ItemType> PUGS_INLINE
create_enum_item_type()
{
return {{"node", ItemType::node}, {"edge", ItemType::edge}, {"face", ItemType::face}, {"cell", ItemType::cell}};
}
HIGHFIVE_REGISTER_TYPE(ItemType, create_enum_item_type);
#endif // ITEM_TYPE_HF_TYPE_HPP
......@@ -11,6 +11,7 @@
#include <utils/checkpointing/IBoundaryDescriptorHFType.hpp>
#include <utils/checkpointing/IInterfaceDescriptorHFType.hpp>
#include <utils/checkpointing/IZoneDescriptorHFType.hpp>
#include <utils/checkpointing/ItemTypeHFType.hpp>
#include <utils/checkpointing/ResumingData.hpp>
EmbeddedData
......@@ -109,3 +110,12 @@ readIZoneDescriptor(const std::string& symbol_name, const HighFive::Group& symbo
return embedded_data;
}
EmbeddedData
readItemType(const std::string& symbol_name, const HighFive::Group& symbol_table_group)
{
const HighFive::Group item_type_group = symbol_table_group.getGroup("embedded/" + symbol_name);
const ItemType item_type = item_type_group.getAttribute("item_type").read<ItemType>();
return {std::make_shared<DataHandler<const ItemType>>(std::make_shared<const ItemType>(item_type))};
}
......@@ -32,5 +32,6 @@ EmbeddedData readMesh(const std::string& symbol_name, const HighFive::Group& sym
EmbeddedData readIBoundaryDescriptor(const std::string& symbol_name, const HighFive::Group& symbol_table_group);
EmbeddedData readIInterfaceDescriptor(const std::string& symbol_name, const HighFive::Group& symbol_table_group);
EmbeddedData readIZoneDescriptor(const std::string& symbol_name, const HighFive::Group& symbol_table_group);
EmbeddedData readItemType(const std::string& symbol_name, const HighFive::Group& symbol_table_group);
#endif // RESUME_UTILS_HPP
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment