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 std::lock_guard<std::mutex> lock(mutex);
53 std::lock_guard<std::mutex> lock(mutex);
54 m_errors.emplace_back(std::move(
message));
58 const std::string &msg,
59 const char *function,
const char *file,
61 std::lock_guard<std::mutex> lock(mutex);
62 m_errors.emplace_back(level, m_comm.rank(), msg, std::string(function),
63 std::string(file), line);
67 const char *function,
const char *file,
69 std::lock_guard<std::mutex> lock(mutex);
71 std::string(function), std::string(file), line);
75 const char *file,
const int line) {
76 warning(std::string(msg), function, file, line);
80 const char *function,
const char *file,
82 warning(mstr.str(), function, file, line);
86 const char *file,
const int line) {
87 std::lock_guard<std::mutex> lock(mutex);
89 std::string(function), std::string(file), line);
93 const char *file,
const int line) {
94 error(std::string(msg), function, file, line);
98 const char *function,
const char *file,
100 error(mstr.str(), function, file, line);
104 std::lock_guard<std::mutex> lock(mutex);
105 return boost::mpi::all_reduce(m_comm,
static_cast<int>(m_errors.size()),
110 return static_cast<int>(std::ranges::count_if(
111 m_errors, [level](
auto const &e) {
return e.level() >= level; }));
115 std::lock_guard<std::mutex> lock(mutex);
121 std::lock_guard<std::mutex> lock(mutex);
122 for (
auto const &e : m_errors) {
123 std::cerr << e.format() << std::endl;
130 std::lock_guard<std::mutex> lock(mutex);
131 std::vector<RuntimeError> all_errors{};
132 std::swap(all_errors, m_errors);
141 std::lock_guard<std::mutex> lock(mutex);
void clear()
Reset error messages.
void message(RuntimeError message)
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 gather_buffer(std::vector< T, Allocator > &buffer, boost::mpi::communicator const &comm, int root=0)
Gather buffer with different size on each node.
ErrorLevel
The error level, warnings are only displayed to the user, errors are fatal.