#ifndef PARTITIONER_OPTIONS_HPP #define PARTITIONER_OPTIONS_HPP #include <utils/Exceptions.hpp> #include <utils/pugs_config.hpp> #include <iostream> enum class PartitionerLibrary : int8_t { PT__begin = 0, // parmetis = PT__begin, ptscotch, // PT__end }; inline std::string name(const PartitionerLibrary library) { switch (library) { case PartitionerLibrary::parmetis: { return "ParMETIS"; } case PartitionerLibrary::ptscotch: { return "PTScotch"; } case PartitionerLibrary::PT__end: { } } throw UnexpectedError("Linear system library name is not defined!"); } class PartitionerOptions { private: PartitionerLibrary m_library = []() { #if !defined(PUGS_HAS_PARMETIS) && defined(PUGS_HAS_PTSCOTCH) return PartitionerLibrary::ptscotch; #else // sets parmetis as default if no alternative is available return PartitionerLibrary::parmetis; #endif }(); public: static PartitionerOptions default_options; friend std::ostream& operator<<(std::ostream& os, const PartitionerOptions& options); PartitionerLibrary& library() { return m_library; } PartitionerLibrary library() const { return m_library; } PartitionerOptions(const PartitionerOptions&) = default; PartitionerOptions(PartitionerOptions&&) = default; PartitionerOptions() = default; ~PartitionerOptions() = default; }; inline PartitionerOptions PartitionerOptions::default_options; #endif // PARTITIONER_OPTIONS_HPP