This file is indexed.

/usr/include/dolfin/common/SubSystemsManager.h is in libdolfin-dev 2017.2.0.post0-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// Copyright (C) 2008-2017 Garth N. Wells
//
// This file is part of DOLFIN.
//
// DOLFIN is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// DOLFIN is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with DOLFIN. If not, see <http://www.gnu.org/licenses/>.

#ifndef __SUB_SYSTEMS_MANAGER_H
#define __SUB_SYSTEMS_MANAGER_H

#include <string>

#ifdef HAS_PETSC
#include <petsc.h>
#endif

namespace dolfin
{

  /// This is a singleton class which manages the initialisation and
  /// finalisation of various sub systems, such as MPI and PETSc.

  class SubSystemsManager
  {
  public:

    /// Singleton instance. Calling this ensures singleton instance of
    /// SubSystemsManager is initialized according to the "Construct
    /// on First Use" idiom.
    static SubSystemsManager& singleton();

    // Copy constructor
    SubSystemsManager(const SubSystemsManager&) = delete;

    /// Initialise MPI
    static void init_mpi();

    /// Initialise MPI with required level of thread support
    static int init_mpi(int argc, char* argv[], int required_thread_level);

    /// Initialize PETSc without command-line arguments
    static void init_petsc();

    /// Initialize PETSc with command-line arguments. Note that PETSc
    /// command-line arguments may also be filtered and sent to PETSc
    /// by parameters.parse(argc, argv).
    static void init_petsc(int argc, char* argv[]);

    /// Finalize subsystems. This will be called by the destructor, but in
    /// special cases it may be necessary to call finalize() explicitly.
    static void finalize();

    /// Return true if DOLFIN initialised MPI (and is therefore responsible
    /// for finalization)
    static bool responsible_mpi();

    /// Return true if DOLFIN initialised PETSc (and is therefore
    /// responsible for finalization)
    static bool responsible_petsc();

    /// Check if MPI has been initialised (returns true if MPI has been
    /// initialised, even if it is later finalised)
    static bool mpi_initialized();

    /// Check if MPI has been finalized (returns true if MPI has been
    /// finalised)
    static bool mpi_finalized();

#ifdef HAS_PETSC
    /// PETSc error handler. Logs everything known to DOLFIN logging
    /// system (with level TRACE) and stores the error message into
    /// pests_err_msg member.
    static PetscErrorCode PetscDolfinErrorHandler(
      MPI_Comm comm, int line, const char *fun, const char *file,
      PetscErrorCode n, PetscErrorType p, const char *mess, void *ctx);
#endif

    /// Last recorded PETSc error message
    std::string petsc_err_msg;

  private:

    // Constructor (private)
    SubSystemsManager();

    // Destructor
    ~SubSystemsManager();

    // Finalize MPI
    static void finalize_mpi();

    // Finalize PETSc
    static void finalize_petsc();

    // State variables
    bool petsc_initialized;
    bool control_mpi;

  };

}

#endif