24#include <boost/mpi/collectives.hpp>
37 : m_comm(
std::move(comm)) {}
40 if (!m_errors.empty()) {
42 std::cerr <<
"There were unhandled errors.\n";
48 const std::string &msg,
49 const char *function,
const char *file,
51 std::lock_guard<std::mutex> lock(mutex);
52 m_errors.emplace_back(level, m_comm.rank(), msg, std::string(function),
53 std::string(file), line);
57 const char *function,
const char *file,
59 std::lock_guard<std::mutex> lock(mutex);
61 std::string(function), std::string(file), line);
65 const char *file,
const int line) {
66 std::lock_guard<std::mutex> lock(mutex);
68 std::string(function), std::string(file), line);
72 std::lock_guard<std::mutex> lock(mutex);
73 return boost::mpi::all_reduce(m_comm,
static_cast<int>(m_errors.size()),
78 return static_cast<int>(std::ranges::count_if(
79 m_errors, [level](
auto const &e) {
return e.level() >= level; }));
83 std::lock_guard<std::mutex> lock(mutex);
89 std::lock_guard<std::mutex> lock(mutex);
90 for (
auto const &e : m_errors) {
91 std::cerr << e.format() << std::endl;
98 std::lock_guard<std::mutex> lock(mutex);
99 std::vector<RuntimeError> all_errors{};
100 std::swap(all_errors, m_errors);
109 std::lock_guard<std::mutex> lock(mutex);
void clear()
Reset error messages.
void flush()
Flush error messages to standard error.
std::vector< RuntimeError > gather()
int count() const
Get the number of all flying messages on all nodes.
void error(const std::string &msg, const char *function, const char *file, int line)
void warning(const std::string &msg, const char *function, const char *file, int line)
RuntimeErrorCollector(boost::mpi::communicator comm)
void message(RuntimeError::ErrorLevel level, const std::string &msg, const char *function, const char *file, int line)
void gather_buffer(std::vector< T, Allocator > &buffer, boost::mpi::communicator const &comm, int root=0)
Gather buffer with different size on each node.