diff --git a/src/main.cpp b/src/main.cpp index 68e082619a81c1a70c12f4a133e27eaf6dafcffa..69c9ec388503ef93294a153f5a87e76bdccc8cb6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,10 +1,7 @@ #include <iostream> #include <PastisUtils.hpp> -#include <RevisionInfo.hpp> + #include <rang.hpp> -#include <FPEManager.hpp> -#include <SignalManager.hpp> -#include <ConsoleManager.hpp> #include <Connectivity.hpp> @@ -25,72 +22,12 @@ #include <GmshReader.hpp> -#include <CLI/CLI.hpp> #include <limits> #include <map> int main(int argc, char *argv[]) { - long unsigned number = 10; - std::string filename; - { - CLI::App app{"Pastis 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([](){std::cout << rang::style::reset;}); - try { - app.parse(argc, argv); - } catch (const CLI::ParseError &e) { - return app.exit(e); - } - - ConsoleManager::init(colorize); - FPEManager::init(not disable_fpe); - SignalManager::setPauseForDebug(pause_on_error); - SignalManager::init(not disable_signals); - } - - std::cout << "Code version: " - << rang::style::bold << RevisionInfo::version() << rang::style::reset << '\n'; - - std::cout << "-------------------- " - << rang::fg::green - << "git info" - << rang::fg::reset - <<" -------------------------" - << '\n'; - std::cout << "tag: " << rang::fg::reset - << rang::style::bold << RevisionInfo::gitTag() << rang::style::reset << '\n'; - std::cout << "HEAD: " << rang::style::bold << RevisionInfo::gitHead() << rang::style::reset << '\n'; - std::cout << "hash: " << rang::style::bold << RevisionInfo::gitHash() << rang::style::reset << " ("; - - if (RevisionInfo::gitIsClean()) { - std::cout << rang::fgB::green << "clean" << rang::fg::reset; - } else { - std::cout << rang::fgB::red << "dirty" << rang::fg::reset; - } - std::cout << ")\n"; - std::cout << "-------------------------------------------------------\n"; - - initialize(argc, argv); - Kokkos::DefaultExecutionSpace::print_configuration(std::cout); + std::string filename = initialize(argc, argv); std::map<std::string, double> method_cost_map; diff --git a/src/utils/PastisUtils.cpp b/src/utils/PastisUtils.cpp index c86974b81440953f2785ecca564df54def7e0716..4149fabe36f0d0ee86c18600e866d30529ad6fbd 100644 --- a/src/utils/PastisUtils.cpp +++ b/src/utils/PastisUtils.cpp @@ -1,9 +1,89 @@ #include <PastisUtils.hpp> #include <Kokkos_Core.hpp> -void initialize(int& argc, char* argv[]) +#include <RevisionInfo.hpp> +#include <rang.hpp> + +#include <FPEManager.hpp> +#include <SignalManager.hpp> +#include <ConsoleManager.hpp> + +#include <CLI/CLI.hpp> + +std::string initialize(int& argc, char* argv[]) { + long unsigned number = 10; + std::string filename; + + std::cout << "Pastis version: " + << rang::style::bold << RevisionInfo::version() << rang::style::reset << '\n'; + + std::cout << "-------------------- " + << rang::fg::green + << "git info" + << rang::fg::reset + <<" -------------------------" + << '\n'; + std::cout << "tag: " << rang::fg::reset + << rang::style::bold << RevisionInfo::gitTag() << rang::style::reset << '\n'; + std::cout << "HEAD: " << rang::style::bold << RevisionInfo::gitHead() << rang::style::reset << '\n'; + std::cout << "hash: " << rang::style::bold << RevisionInfo::gitHash() << rang::style::reset << " ("; + + if (RevisionInfo::gitIsClean()) { + std::cout << rang::fgB::green << "clean" << rang::fg::reset; + } else { + std::cout << rang::fgB::red << "dirty" << rang::fg::reset; + } + std::cout << ")\n"; + std::cout << "-------------------------------------------------------\n"; + { + CLI::App app{"Pastis 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([](){std::cout << rang::style::reset;}); + try { + app.parse(argc, argv); + } catch (const CLI::ParseError &e) { + std::exit(app.exit(e)); + } + + ConsoleManager::init(colorize); + FPEManager::init(not disable_fpe); + SignalManager::setPauseForDebug(pause_on_error); + SignalManager::init(not disable_signals); + } + Kokkos::initialize(argc,argv); + std::cout << "-------------------- " + << rang::fg::green + << "exec info" + << rang::fg::reset + <<" ------------------------" + << '\n'; + + std::cout << rang::style::bold; + Kokkos::DefaultExecutionSpace::print_configuration(std::cout); + std::cout << rang::style::reset; + std::cout << "-------------------------------------------------------\n"; + + return filename; } void finalize() diff --git a/src/utils/PastisUtils.hpp b/src/utils/PastisUtils.hpp index 939b76f0b9e3c3ee5516a8a7a1e9f6dece4577d5..d0a68cfdb91af7acbb5393cc00fdc0c2611a4848 100644 --- a/src/utils/PastisUtils.hpp +++ b/src/utils/PastisUtils.hpp @@ -26,7 +26,7 @@ void parallel_reduce(const size_t& size, Kokkos::parallel_reduce(label, size, array, value); } -void initialize(int& argc, char* argv[]); +std::string initialize(int& argc, char* argv[]); void finalize();