Add implementation of write_message and fatal_error in error.cpp

This commit is contained in:
Paul Romano 2019-02-05 22:53:53 -06:00
parent b178a66e7f
commit 102aa934ae
3 changed files with 64 additions and 65 deletions

View file

@ -1,11 +1,13 @@
#include "openmc/error.h"
#include "openmc/message_passing.h"
#include "openmc/settings.h"
#if defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))
#include <unistd.h> // for isatty
#endif
#include <cstdlib> // for exit
#include <iomanip> // for setw
#include <iostream>
@ -18,21 +20,10 @@ void abort_mpi(int code)
}
#endif
void warning(const std::string& message)
void output(const std::string& message, std::ostream& out, int indent)
{
#ifdef _POSIX_VERSION
// Make output yellow if user is in a terminal
if (isatty(STDERR_FILENO)) {
std::cerr << "\033[0;33m";
}
#endif
// Write warning at beginning
std::cerr << " WARNING: ";
// Set line wrapping and indentation
int line_wrap = 80;
int indent = 10;
// Determine length of message
int length = message.size();
@ -57,6 +48,20 @@ void warning(const std::string& message)
i_start += (pos == std::string::npos) ? line_len : pos + 1;
}
}
}
void warning(const std::string& message)
{
#ifdef _POSIX_VERSION
// Make output yellow if user is in a terminal
if (isatty(STDERR_FILENO)) {
std::cerr << "\033[0;33m";
}
#endif
// Write warning
std::cerr << " WARNING: ";
output(message, std::cerr, 10);
#ifdef _POSIX_VERSION
// Reset color for terminal
@ -66,4 +71,43 @@ void warning(const std::string& message)
#endif
}
void write_message(const std::string& message, int level)
{
// Only allow master to print to screen
if (!mpi::master) return;
if (level <= settings::verbosity) {
std::cout << " ";
output(message, std::cout, 1);
}
}
void fatal_error(const std::string& message, int err)
{
#ifdef _POSIX_VERSION
// Make output red if user is in a terminal
if (isatty(STDERR_FILENO)) {
std::cerr << "\033[0;31m";
}
#endif
// Write error message
std::cerr << " ERROR: ";
output(message, std::cerr, 8);
#ifdef _POSIX_VERSION
// Reset color for terminal
if (isatty(STDERR_FILENO)) {
std::cerr << "\033[0m";
}
#endif
#ifdef OPENMC_MPI
MPI_Abort(mpi::intracomm, err);
#endif
// Abort the program
std::exit(err);
}
} // namespace openmc