Skip to content
Snippets Groups Projects
Select Git revision
  • dc0c3db7a12029e4f60e7bb4bbcaca5d28167101
  • develop default protected
  • feature/advection
  • feature/composite-scheme-other-fluxes
  • origin/stage/bouguettaia
  • save_clemence
  • feature/local-dt-fsi
  • feature/variational-hydro
  • feature/gmsh-reader
  • feature/reconstruction
  • feature/kinetic-schemes
  • feature/composite-scheme-sources
  • feature/serraille
  • feature/composite-scheme
  • hyperplastic
  • feature/polynomials
  • feature/gks
  • feature/implicit-solver-o2
  • feature/coupling_module
  • feature/implicit-solver
  • feature/merge-local-dt-fsi
  • v0.5.0 protected
  • v0.4.1 protected
  • v0.4.0 protected
  • v0.3.0 protected
  • v0.2.0 protected
  • v0.1.0 protected
  • Kidder
  • v0.0.4 protected
  • v0.0.3 protected
  • v0.0.2 protected
  • v0 protected
  • v0.0.1 protected
33 results

PugsUtils.cpp

Blame
  • PugsUtils.cpp 3.93 KiB
    #include <utils/PugsUtils.hpp>
    
    #include <utils/BuildInfo.hpp>
    #include <utils/RevisionInfo.hpp>
    
    #include <utils/Messenger.hpp>
    
    #include <utils/ConsoleManager.hpp>
    #include <utils/FPEManager.hpp>
    #include <utils/SignalManager.hpp>
    
    #include <algebra/PETScWrapper.hpp>
    
    #include <rang.hpp>
    
    #include <Kokkos_Core.hpp>
    
    #include <CLI/CLI.hpp>
    
    #include <iostream>
    
    // LCOV_EXCL_START
    
    // This function cannot be unit-tested: run once when pugs starts
    
    std::string
    initialize(int& argc, char* argv[])
    {
      parallel::Messenger::create(argc, argv);
    
      std::cout << "Pugs 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::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 << "-------------------- " << rang::fg::green << "build info" << rang::fg::reset
                << " -----------------------" << '\n';
      std::cout << "type:     " << rang::style::bold << BuildInfo::type() << rang::style::reset << '\n';
      std::cout << "compiler: " << rang::style::bold << BuildInfo::compiler() << rang::style::reset << '\n';
      std::cout << "kokkos:   " << rang::style::bold << BuildInfo::kokkosDevices() << rang::style::reset << '\n';
      std::cout << "MPI:      " << rang::style::bold << BuildInfo::mpiLibrary() << rang::style::reset << '\n';
      std::cout << "PETSc:    " << rang::style::bold << BuildInfo::petscLibrary() << rang::style::reset << '\n';
      std::cout << "-------------------------------------------------------\n";
    
      std::string filename;
      {
        CLI::App app{"Pugs help"};
    
        app.add_option("filename", filename, "pugs script file")->required()->check(CLI::ExistingFile);
    
        int threads = -1;
        app.add_option("--threads", threads, "Number of Kokkos threads")
          ->check(CLI::Range(1, std::numeric_limits<decltype(threads)>::max()));
    
        bool enable_color = true;
        app.add_flag("--color,!--no-color", enable_color, "Colorize console output [default: true]");
    
        bool enable_fpe = true;
        app.add_flag("--fpe,!--no-fpe", enable_fpe, "Trap floating point exceptions [default: true]");
    
        bool enable_signals = true;
        app.add_flag("--signal,!--no-signal", enable_signals, "Catches signals [default: true]");
    
        bool pause_on_error = false;
        app.add_flag("-p,--pause-on-error", pause_on_error, "Pause for debugging on unexpected error [default: false]");
    
        std::atexit([]() { std::cout << rang::style::reset; });
        try {
          app.parse(argc, argv);
        }
        catch (const CLI::ParseError& e) {
          parallel::Messenger::destroy();
          std::exit(app.exit(e, std::cout, std::cerr));
        }
    
        ConsoleManager::init(enable_color);
        FPEManager::init(enable_fpe);
        SignalManager::setPauseForDebug(pause_on_error);
        SignalManager::init(enable_signals);
      }
    
      PETScWrapper::initialize(argc, argv);
    
      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;
    }
    
    // LCOV_EXCL_STOP
    
    // LCOV_EXCL_START
    
    // This function cannot be unit-tested: run once when pugs stops
    
    void
    finalize()
    {
      Kokkos::finalize();
      PETScWrapper::finalize();
      parallel::Messenger::destroy();
    }
    
    // LCOV_EXCL_STOP