Select Git revision
ASTNodeDataTypeBuilder.cpp
ParallelChecker.hpp 60.47 KiB
#ifndef PARALLEL_CHECKER_HPP
#define PARALLEL_CHECKER_HPP
#include <utils/pugs_config.hpp>
#ifdef PUGS_HAS_HDF5
#include <highfive/highfive.hpp>
#endif // PUGS_HAS_HDF5
#include <mesh/Connectivity.hpp>
#include <mesh/ItemArrayVariant.hpp>
#include <mesh/ItemValueVariant.hpp>
#include <mesh/SubItemArrayPerItemVariant.hpp>
#include <mesh/SubItemValuePerItemVariant.hpp>
#include <scheme/DiscreteFunctionVariant.hpp>
#include <utils/Demangle.hpp>
#include <utils/Filesystem.hpp>
#include <utils/Messenger.hpp>
#include <utils/SourceLocation.hpp>
#include <fstream>
template <typename DataType, ItemType item_type, typename ConnectivityPtr>
void parallel_check(const ItemValue<DataType, item_type, ConnectivityPtr>& item_value,
const std::string& name,
const SourceLocation& source_location = SourceLocation{});
template <typename DataType, ItemType item_type, typename ConnectivityPtr>
void parallel_check(const ItemArray<DataType, item_type, ConnectivityPtr>& item_array,
const std::string& name,
const SourceLocation& source_location = SourceLocation{});
template <typename DataType, typename ItemOfItem, typename ConnectivityPtr>
void parallel_check(const SubItemValuePerItem<DataType, ItemOfItem, ConnectivityPtr>& subitem_value_per_item,
const std::string& name,
const SourceLocation& source_location = SourceLocation{});
template <typename DataType, typename ItemOfItem, typename ConnectivityPtr>
void parallel_check(const SubItemArrayPerItem<DataType, ItemOfItem, ConnectivityPtr>& subitem_array_per_item,
const std::string& name,
const SourceLocation& source_location = SourceLocation{});
class ParallelChecker
{
public:
enum class Mode
{
automatic, // write in sequential, read in parallel
read,
write
};
// to allow special manipulations in tests
friend class ParallelCheckerTester;
private:
static ParallelChecker* m_instance;
Mode m_mode = Mode::automatic;
size_t m_tag = 0;
std::string m_filename = "parallel_checker.h5";
std::string m_path = "";
ParallelChecker() = default;
public:
template <typename DataType, ItemType item_type, typename ConnectivityPtr>
friend void parallel_check(const ItemValue<DataType, item_type, ConnectivityPtr>& item_value,
const std::string& name,
const SourceLocation& source_location);