Select Git revision
PugsUtils.cpp
PugsUtils.cpp 3.63 KiB
#include <PugsOStream.hpp>
#include <PugsUtils.hpp>
#include <Kokkos_Core.hpp>
#include <BuildInfo.hpp>
#include <RevisionInfo.hpp>
#include <Messenger.hpp>
#include <rang.hpp>
#include <ConsoleManager.hpp>
#include <FPEManager.hpp>
#include <SignalManager.hpp>
#include <CLI/CLI.hpp>
std::string
initialize(int& argc, char* argv[])
{
parallel::Messenger::create(argc, argv);
long unsigned number = 10;
std::string filename;
pout() << "Pugs version: " << rang::style::bold << RevisionInfo::version()
<< rang::style::reset << '\n';
pout() << "-------------------- " << rang::fg::green << "git info"
<< rang::fg::reset << " -------------------------" << '\n';
pout() << "tag: " << rang::style::bold << RevisionInfo::gitTag()
<< rang::style::reset << '\n';
pout() << "HEAD: " << rang::style::bold << RevisionInfo::gitHead()
<< rang::style::reset << '\n';
pout() << "hash: " << rang::style::bold << RevisionInfo::gitHash()
<< rang::style::reset << " (";
if (RevisionInfo::gitIsClean()) {
pout() << rang::fgB::green << "clean" << rang::fg::reset;
} else {
pout() << rang::fgB::red << "dirty" << rang::fg::reset;
}
pout() << ")\n";
pout() << "-------------------- " << rang::fg::green << "build info"
<< rang::fg::reset << " -----------------------" << '\n';
pout() << "type: " << rang::style::bold << BuildInfo::type()
<< rang::style::reset << '\n';
pout() << "compiler: " << rang::style::bold << BuildInfo::compiler()
<< rang::style::reset << '\n';
pout() << "kokkos: " << rang::style::bold << BuildInfo::kokkosDevices()
<< rang::style::reset << '\n';
pout() << "mpi: " << rang::style::bold << BuildInfo::mpiLibrary()
<< rang::style::reset << '\n';
pout() << "-------------------------------------------------------\n";
{
CLI::App app{"Pugs help"};
app.add_option("-n,--number", number, "Number of cells"); //->required();
app.add_option("filename,-f,--filename", filename,
"gmsh file"); //->required();
int threads = -1;
app.add_option("--threads", threads, "Number of Kokkos threads")
->check(CLI::Range(1, std::numeric_limits<decltype(threads)>::max()));
std::string colorize = "auto";
app.add_set("--colorize", colorize, {"auto", "yes", "no"},
"Colorize console output", true);
bool disable_fpe = false;
app.add_flag("--no-fpe", disable_fpe,
"Do not trap floating point exceptions");
bool disable_signals = false;
app.add_flag("--no-signal", disable_signals, "Do not catches signals");
std::string pause_on_error = "auto";
app.add_set("--pause-on-error", pause_on_error, {"auto", "yes", "no"},
"Pause for debugging on unexpected error", true);
std::atexit([]() { pout() << rang::style::reset; });
try {
app.parse(argc, argv);
} catch (const CLI::ParseError& e) {
parallel::Messenger::destroy();
std::exit(app.exit(e, pout(), perr()));
}
ConsoleManager::init(colorize);
FPEManager::init(not disable_fpe);
SignalManager::setPauseForDebug(pause_on_error);
SignalManager::init(not disable_signals);
}
Kokkos::initialize(argc, argv);
pout() << "-------------------- " << rang::fg::green << "exec info"
<< rang::fg::reset << " ------------------------" << '\n';
pout() << rang::style::bold;
Kokkos::DefaultExecutionSpace::print_configuration(pout());
pout() << rang::style::reset;
pout() << "-------------------------------------------------------\n";
return filename;
}
void
finalize()
{
Kokkos::finalize();
parallel::Messenger::destroy();
}