Select Git revision
LinearSolver.cpp
-
Stéphane Del Pino authoredStéphane Del Pino authored
SetResumeFrom.cpp 1.46 KiB
#include <utils/checkpointing/SetResumeFrom.hpp>
#include <utils/pugs_config.hpp>
#ifdef PUGS_HAS_HDF5
#include <optional>
#include <rang.hpp>
#include <utils/Exceptions.hpp>
#include <utils/HighFivePugsUtils.hpp>
void
setResumeFrom(const std::string& filename, const uint64_t& checkpoint_number)
{
try {
HighFive::File file(filename, HighFive::File::ReadWrite);
const std::string checkpoint_name = "checkpoint_" + std::to_string(checkpoint_number);
if (not file.exist(checkpoint_name)) {
std::ostringstream error_msg;
error_msg << "cannot find checkpoint " << rang::fgB::magenta << checkpoint_number << rang::fg::reset << " in "
<< rang::fgB::yellow << filename << rang::fg::reset;
throw NormalError(error_msg.str());
}
HighFive::Group checkpoint = file.getGroup(checkpoint_name);
if (file.exist("resuming_checkpoint")) {
file.unlink("resuming_checkpoint");
}
file.createHardLink("resuming_checkpoint", checkpoint);
std::cout << "Resuming checkpoint " << rang::style::bold << "successfully" << rang::style::reset << " set to "
<< rang::fgB::yellow << checkpoint_number << rang::fg::reset << '\n';
}
catch (HighFive::Exception& e) {
throw NormalError(e.what());
}
}
#else // PUGS_HAS_HDF5
void
setResumeFrom(const std::string&, const uint64_t&)
{
std::cerr << rang::fgB::red << "error: " << rang::fg::reset << "setting resuming checkpoint requires HDF5\n";
}
#endif // PUGS_HAS_HDF5