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

Add checkpoint/resume for IQuadratureDescriptor

parent d9165a03
No related branches found
No related tags found
1 merge request!199Integrate checkpointing
...@@ -701,4 +701,17 @@ SchemeModule::registerCheckpointResume() const ...@@ -701,4 +701,17 @@ SchemeModule::registerCheckpointResume() const
const HighFive::Group& symbol_table_group) -> EmbeddedData { const HighFive::Group& symbol_table_group) -> EmbeddedData {
return readIDiscreteFunctionDescriptor(symbol_name, symbol_table_group); return readIDiscreteFunctionDescriptor(symbol_name, symbol_table_group);
})); }));
CheckpointResumeRepository::instance()
.addCheckpointResume(ast_node_data_type_from<std::shared_ptr<const IQuadratureDescriptor>>,
std::function([](const std::string& symbol_name, const EmbeddedData& embedded_data,
HighFive::File& file, HighFive::Group& checkpoint_group,
HighFive::Group& symbol_table_group) {
writeIQuadratureDescriptor(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 readIQuadratureDescriptor(symbol_name, symbol_table_group);
}));
} }
#include <utils/checkpointing/CheckpointUtils.hpp> #include <utils/checkpointing/CheckpointUtils.hpp>
#include <analysis/IQuadratureDescriptor.hpp>
#include <language/modules/MeshModuleTypes.hpp> #include <language/modules/MeshModuleTypes.hpp>
#include <language/modules/SchemeModuleTypes.hpp> #include <language/modules/SchemeModuleTypes.hpp>
#include <language/utils/ASTNodeDataTypeTraits.hpp> #include <language/utils/ASTNodeDataTypeTraits.hpp>
...@@ -20,6 +21,7 @@ ...@@ -20,6 +21,7 @@
#include <utils/checkpointing/IInterfaceDescriptorHFType.hpp> #include <utils/checkpointing/IInterfaceDescriptorHFType.hpp>
#include <utils/checkpointing/IZoneDescriptorHFType.hpp> #include <utils/checkpointing/IZoneDescriptorHFType.hpp>
#include <utils/checkpointing/ItemTypeHFType.hpp> #include <utils/checkpointing/ItemTypeHFType.hpp>
#include <utils/checkpointing/QuadratureTypeHFType.hpp>
#include <utils/checkpointing/RefItemListHFType.hpp> #include <utils/checkpointing/RefItemListHFType.hpp>
template <ItemType item_type, size_t Dimension> template <ItemType item_type, size_t Dimension>
...@@ -223,6 +225,25 @@ writeIInterfaceDescriptor(const std::string& symbol_name, ...@@ -223,6 +225,25 @@ writeIInterfaceDescriptor(const std::string& symbol_name,
} }
} }
void
writeIQuadratureDescriptor(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 IQuadratureDescriptor> iquadrature_descriptor_p =
dynamic_cast<const DataHandler<const IQuadratureDescriptor>&>(embedded_data.get()).data_ptr();
const IQuadratureDescriptor& iquadrature_descriptor = *iquadrature_descriptor_p;
variable_group.createAttribute("type", dataTypeName(ast_node_data_type_from<decltype(iquadrature_descriptor_p)>));
variable_group.createAttribute("quadrature_type", iquadrature_descriptor.type());
variable_group.createAttribute("quadrature_degree", iquadrature_descriptor.degree());
}
void void
writeItemType(const std::string& symbol_name, writeItemType(const std::string& symbol_name,
const EmbeddedData& embedded_data, const EmbeddedData& embedded_data,
......
...@@ -54,13 +54,19 @@ void writeIDiscreteFunctionDescriptor(const std::string& symbol_name, ...@@ -54,13 +54,19 @@ void writeIDiscreteFunctionDescriptor(const std::string& symbol_name,
HighFive::Group& checkpoint_group, HighFive::Group& checkpoint_group,
HighFive::Group& symbol_table_group); HighFive::Group& symbol_table_group);
void writeItemType(const std::string& symbol_name, void writeIInterfaceDescriptor(const std::string& symbol_name,
const EmbeddedData& embedded_data, const EmbeddedData& embedded_data,
HighFive::File& file, HighFive::File& file,
HighFive::Group& checkpoint_group, HighFive::Group& checkpoint_group,
HighFive::Group& symbol_table_group); HighFive::Group& symbol_table_group);
void writeIInterfaceDescriptor(const std::string& symbol_name, void writeIQuadratureDescriptor(const std::string& symbol_name,
const EmbeddedData& embedded_data,
HighFive::File& file,
HighFive::Group& checkpoint_group,
HighFive::Group& symbol_table_group);
void writeItemType(const std::string& symbol_name,
const EmbeddedData& embedded_data, const EmbeddedData& embedded_data,
HighFive::File& file, HighFive::File& file,
HighFive::Group& checkpoint_group, HighFive::Group& checkpoint_group,
......
#ifndef QUADRATURE_TYPE_HF_TYPE_HPP
#define QUADRATURE_TYPE_HF_TYPE_HPP
#include <analysis/QuadratureType.hpp>
#include <utils/checkpointing/CheckpointUtils.hpp>
HighFive::EnumType<QuadratureType> PUGS_INLINE
create_enum_quadrature_descriptor_type()
{
return {{"gauss", QuadratureType::Gauss},
{"gauss-legendre", QuadratureType::GaussLegendre},
{"gauss-lobatto", QuadratureType::GaussLobatto}};
}
HIGHFIVE_REGISTER_TYPE(QuadratureType, create_enum_quadrature_descriptor_type);
#endif // QUADRATURE_TYPE_HF_TYPE_HPP
#include <utils/checkpointing/ResumeUtils.hpp> #include <utils/checkpointing/ResumeUtils.hpp>
#include <analysis/GaussLegendreQuadratureDescriptor.hpp>
#include <analysis/GaussLobattoQuadratureDescriptor.hpp>
#include <analysis/GaussQuadratureDescriptor.hpp>
#include <language/utils/DataHandler.hpp> #include <language/utils/DataHandler.hpp>
#include <language/utils/SymbolTable.hpp> #include <language/utils/SymbolTable.hpp>
#include <mesh/NamedBoundaryDescriptor.hpp> #include <mesh/NamedBoundaryDescriptor.hpp>
...@@ -15,6 +18,7 @@ ...@@ -15,6 +18,7 @@
#include <utils/checkpointing/IInterfaceDescriptorHFType.hpp> #include <utils/checkpointing/IInterfaceDescriptorHFType.hpp>
#include <utils/checkpointing/IZoneDescriptorHFType.hpp> #include <utils/checkpointing/IZoneDescriptorHFType.hpp>
#include <utils/checkpointing/ItemTypeHFType.hpp> #include <utils/checkpointing/ItemTypeHFType.hpp>
#include <utils/checkpointing/QuadratureTypeHFType.hpp>
#include <utils/checkpointing/ResumingData.hpp> #include <utils/checkpointing/ResumingData.hpp>
EmbeddedData EmbeddedData
...@@ -100,6 +104,37 @@ readIInterfaceDescriptor(const std::string& symbol_name, const HighFive::Group& ...@@ -100,6 +104,37 @@ readIInterfaceDescriptor(const std::string& symbol_name, const HighFive::Group&
return embedded_data; return embedded_data;
} }
EmbeddedData
readIQuadratureDescriptor(const std::string& symbol_name, const HighFive::Group& symbol_table_group)
{
const HighFive::Group iquadraturedescriptor_group = symbol_table_group.getGroup("embedded/" + symbol_name);
const QuadratureType quadrature_type =
iquadraturedescriptor_group.getAttribute("quadrature_type").read<QuadratureType>();
const size_t degree = iquadraturedescriptor_group.getAttribute("quadrature_degree").read<size_t>();
EmbeddedData embedded_data;
switch (quadrature_type) {
case QuadratureType::Gauss: {
embedded_data = {std::make_shared<DataHandler<const IQuadratureDescriptor>>(
std::make_shared<const GaussQuadratureDescriptor>(degree))};
break;
}
case QuadratureType::GaussLegendre: {
embedded_data = {std::make_shared<DataHandler<const IQuadratureDescriptor>>(
std::make_shared<const GaussLegendreQuadratureDescriptor>(degree))};
break;
}
case QuadratureType::GaussLobatto: {
embedded_data = {std::make_shared<DataHandler<const IQuadratureDescriptor>>(
std::make_shared<const GaussLobattoQuadratureDescriptor>(degree))};
break;
}
}
return embedded_data;
}
EmbeddedData EmbeddedData
readItemType(const std::string& symbol_name, const HighFive::Group& symbol_table_group) readItemType(const std::string& symbol_name, const HighFive::Group& symbol_table_group)
{ {
......
...@@ -31,6 +31,7 @@ read(const HighFive::Group& group, const std::string& name) ...@@ -31,6 +31,7 @@ read(const HighFive::Group& group, const std::string& name)
EmbeddedData readIBoundaryDescriptor(const std::string& symbol_name, const HighFive::Group& symbol_table_group); EmbeddedData readIBoundaryDescriptor(const std::string& symbol_name, const HighFive::Group& symbol_table_group);
EmbeddedData readIDiscreteFunctionDescriptor(const std::string& symbol_name, const HighFive::Group& symbol_table_group); EmbeddedData readIDiscreteFunctionDescriptor(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 readIInterfaceDescriptor(const std::string& symbol_name, const HighFive::Group& symbol_table_group);
EmbeddedData readIQuadratureDescriptor(const std::string& symbol_name, const HighFive::Group& symbol_table_group);
EmbeddedData readItemType(const std::string& symbol_name, const HighFive::Group& symbol_table_group); EmbeddedData readItemType(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 readIZoneDescriptor(const std::string& symbol_name, const HighFive::Group& symbol_table_group);
EmbeddedData readMesh(const std::string& symbol_name, const HighFive::Group& symbol_table_group); EmbeddedData readMesh(const std::string& symbol_name, const HighFive::Group& symbol_table_group);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment