DOLFIN-X
DOLFIN-X C++ interface
SubSystemsManager.h
1 // Copyright (C) 2008-2017 Garth N. Wells
2 //
3 // This file is part of DOLFINX (https://www.fenicsproject.org)
4 //
5 // SPDX-License-Identifier: LGPL-3.0-or-later
6 
7 #pragma once
8 
9 #include <petscsys.h>
10 #include <string>
11 
12 namespace dolfinx::common
13 {
14 
17 
19 {
20 public:
24  static SubSystemsManager& singleton();
25 
26  // Copy constructor
27  SubSystemsManager(const SubSystemsManager&) = delete;
28 
30  static void init_mpi();
31 
33  static int init_mpi(int argc, char* argv[], int required_thread_level);
34 
36  static void init_logging(int argc, char* argv[]);
37 
39  static void init_petsc();
40 
44  static void init_petsc(int argc, char* argv[]);
45 
48  static void finalize();
49 
52  static bool responsible_mpi();
53 
56  static bool responsible_petsc();
57 
60  static bool mpi_initialized();
61 
64  static bool mpi_finalized();
65 
69  static PetscErrorCode
70  PetscDolfinErrorHandler(MPI_Comm comm, int line, const char* fun,
71  const char* file, PetscErrorCode n, PetscErrorType p,
72  const char* mess, void* ctx);
73 
75  std::string petsc_err_msg;
76 
77 private:
78  // Constructor (private)
80 
81  // Destructor
83 
84  // Finalize MPI
85  static void finalize_mpi();
86 
87  // Finalize PETSc
88  static void finalize_petsc();
89 
90  // State variables
91  bool petsc_initialized;
92  bool control_mpi;
93 };
94 } // namespace dolfinx::common
dolfinx::common::SubSystemsManager::singleton
static SubSystemsManager & singleton()
Singleton instance. Calling this ensures singleton instance of SubSystemsManager is initialized accor...
Definition: SubSystemsManager.cpp:27
dolfinx::common::SubSystemsManager::petsc_err_msg
std::string petsc_err_msg
Last recorded PETSc error message.
Definition: SubSystemsManager.h:75
dolfinx::common::SubSystemsManager::mpi_finalized
static bool mpi_finalized()
Check if MPI has been finalized (returns true if MPI has been finalised)
Definition: SubSystemsManager.cpp:193
dolfinx::common::SubSystemsManager::PetscDolfinErrorHandler
static PetscErrorCode PetscDolfinErrorHandler(MPI_Comm comm, int line, const char *fun, const char *file, PetscErrorCode n, PetscErrorType p, const char *mess, void *ctx)
PETSc error handler. Logs everything known to DOLFINX logging system (with level TRACE) and stores th...
Definition: SubSystemsManager.cpp:200
dolfinx::common::SubSystemsManager::mpi_initialized
static bool mpi_initialized()
Check if MPI has been initialised (returns true if MPI has been initialised, even if it is later fina...
Definition: SubSystemsManager.cpp:182
dolfinx::common::SubSystemsManager
This is a singleton class which manages the initialisation and finalisation of various sub systems,...
Definition: SubSystemsManager.h:18
dolfinx::common
Miscellaneous classes, functions and types.
dolfinx::common::SubSystemsManager::init_petsc
static void init_petsc()
Initialize PETSc without command-line arguments.
Definition: SubSystemsManager.cpp:79
dolfinx::common::SubSystemsManager::responsible_mpi
static bool responsible_mpi()
Return true if DOLFINX initialised MPI (and is therefore responsible for finalization)
Definition: SubSystemsManager.cpp:130
dolfinx::common::SubSystemsManager::init_mpi
static void init_mpi()
Initialise MPI.
Definition: SubSystemsManager.cpp:41
dolfinx::common::SubSystemsManager::init_logging
static void init_logging(int argc, char *argv[])
Initialise loguru.
Definition: SubSystemsManager.cpp:72
dolfinx::common::SubSystemsManager::finalize
static void finalize()
Finalize subsystems. This will be called by the destructor, but in special cases it may be necessary ...
Definition: SubSystemsManager.cpp:123
dolfinx::common::SubSystemsManager::responsible_petsc
static bool responsible_petsc()
Return true if DOLFINX initialised PETSc (and is therefore responsible for finalization)
Definition: SubSystemsManager.cpp:132