Skip to content
Snippets Groups Projects
Select Git revision
  • 1041f7bc843d09693f51e1dd0ddc312dc53b9ddd
  • develop default protected
  • feature/variational-hydro
  • origin/stage/bouguettaia
  • feature/gmsh-reader
  • feature/reconstruction
  • save_clemence
  • feature/kinetic-schemes
  • feature/local-dt-fsi
  • feature/composite-scheme-sources
  • feature/composite-scheme-other-fluxes
  • 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
  • master protected
  • 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

Messenger.cpp

Blame
  • Stephane Del Pino's avatar
    Stéphane Del Pino authored
    the untreated #warning have been converted to issues
    1041f7bc
    History
    Messenger.cpp 1.35 KiB
    #include <Messenger.hpp>
    #include <PastisOStream.hpp>
    
    namespace parallel
    {
    
    Messenger* Messenger::m_instance = nullptr;
    
    void Messenger::create(int& argc, char* argv[])
    {
      if (Messenger::m_instance == nullptr) {
        Messenger::m_instance = new Messenger(argc, argv);
      } else {
        std::cerr << "Messenger already created\n";
        std::exit(1);
      }
    }
    
    void Messenger::destroy()
    {
      // One allows multiple destruction to handle unexpected code exit
      if (Messenger::m_instance != nullptr) {
        delete Messenger::m_instance;
        Messenger::m_instance = nullptr;
      }
    }
    
    Messenger::
    Messenger([[maybe_unused]] int& argc,
              [[maybe_unused]] char* argv[])
    {
    #ifdef PASTIS_HAS_MPI
      MPI_Init(&argc, &argv);
    
      m_rank = [] () {
                 int rank;
                 MPI_Comm_rank(MPI_COMM_WORLD, &rank);
                 return rank;
               } ();
    
      m_size = [] () {
                 int size=0;
                 MPI_Comm_size(MPI_COMM_WORLD, &size);
                 return size;
               } ();
    
      if (m_rank != 0) {
        // LCOV_EXCL_START
        pout.setOutput(null_stream);
        perr.setOutput(null_stream);
        // LCOV_EXCL_STOP
      }
    #endif // PASTIS_HAS_MPI
    }
    
    Messenger::
    ~Messenger()
    {
    #ifdef PASTIS_HAS_MPI
      MPI_Finalize();
    #endif // PASTIS_HAS_MPI
    }
    
    void Messenger::barrier() const
    {
    #ifdef PASTIS_HAS_MPI
      MPI_Barrier(MPI_COMM_WORLD);
    #endif // PASTIS_HAS_MPI
    }
    
    } // namespace parallel