This file is indexed.

/usr/include/trilinos/fei_LinearProblemManager.hpp is in libtrilinos-dev 10.4.0.dfsg-1ubuntu2.

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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/*--------------------------------------------------------------------*/
/*    Copyright 2006 Sandia Corporation.                              */
/*    Under the terms of Contract DE-AC04-94AL85000, there is a       */
/*    non-exclusive license for use of this work by or on behalf      */
/*    of the U.S. Government.  Export of this program may require     */
/*    a license from the United States Government.                    */
/*--------------------------------------------------------------------*/

#ifndef _fei_LinearProblemManager_hpp_
#define _fei_LinearProblemManager_hpp_

#include <fei_macros.hpp>
#include <fei_SharedPtr.hpp>
#include <fei_mpi.h>

#include <vector>

namespace fei {
  class ParameterSet;
  class SparseRowGraph;

  /** Linear system assembly and solution manager.
  */
  class LinearProblemManager {
   public:
    //@{ \name Destructor

    /** Destructor. */
    virtual ~LinearProblemManager(){}

    //@}
    //@{ \name Initialization of size/structure

    /** Set the linear-system's global row distribution.

      @param ownedGlobalRows List of row-numbers to be owned by local processor.
    */
    virtual void setRowDistribution(const std::vector<int>& ownedGlobalRows)=0;

    /** Set the matrix-graph structure. This is the nonzero structure for
        locally-owned matrix rows.
    */
    virtual void setMatrixGraph(fei::SharedPtr<fei::SparseRowGraph> matrixGraph)=0;

    //@}
    //@{ \name Matrix access

    /** Set a specified scalar value throughout the matrix.
     */
    virtual void setMatrixValues(double scalar)=0;

    /** Query the number of local rows. This is expected to be the number of
        point-entry rows on the local processor.
    */
    virtual int getLocalNumRows()=0;

    /** Given a locally-owned global row number, query the length (number of
        nonzeros) of that row.
     */
    virtual int getRowLength(int row)=0;

    /** Given a locally-owned global row number, pass out a copy of the
        contents of that row.

        @param row Global row number

        @param len Length of user-allocated 'coefs' and 'indices' arrays.
                   if 'len' != 'getRowLength(row)', then the number of
                   coefs/indices returned will be max(len,getRowLength(row)).

        @param coefs Output array of matrix coefficients.
        @param indices Output array of column-indices.

        @return error-code 0 if successful. Non-zero return-value may indicate
        that the specified row is not locally owned.
    */
    virtual int copyOutMatrixRow(int row,
                                 int len,
                                 double* coefs,
                                 int* indices)=0;

    /** Put a C-style table (array of pointers) of coefficient data into the
        matrix.  This is a rectangular array of coefficients for
        rows/columns defined by the 'rows' and 'cols' lists.
        If the sum_into argument is true, values should be added to any that
        already exist at the specified locations. Otherwise (if sum_into is
        false) incoming values should overwrite already-existing values.
     */
    virtual int insertMatrixValues(int numRows, const int* rows,
                                   int numCols, const int* cols,
                                   const double* const* values,
                                   bool sum_into)=0;

    //@}
    //@{ \name Vector access (both soln and rhs)

    /** Set a specified scalar value throughout the vector.

        @param scalar Value to be used.

        @param soln_vector If true, scalar should be set in solution vector,
                           otherwise set rhs vector.
     */
    virtual void setVectorValues(double scalar, bool soln_vector)=0;

    /** Put coefficient data into a vector at the specified global indices.
      If any specified indices are out of range (negative or too large) the
      corresponding positions in the values array will not be referenced,
      and a positive warning code will be returned.

      @param numValues Length of caller-allocated 'globalIndices' and
                       'values' arrays.

      @param globalIndices List of global-indices specifying the locations in
                the vector for incoming values to be placed.

      @param values List of incoming values.

      @param sum_into If true, incoming values should be added to values that
                 may already be in the specified locations. If sum_into is
                 false, then incoming values should overwrite existing values.
 
      @param soln_vector If true, incoming values should be placed in the
                   solution vector. Otherwise, they should be placed in the
                   rhs vector.

      @param vectorIndex If the linear system has multiple rhs/soln vectors,
                       then this parameter specifies which vector the incoming
                       values should be put into.
    */
    virtual int insertVectorValues(int numValues,
                                   const int* globalIndices,
                                   const double* values,
                                   bool sum_into,
                                   bool soln_vector,
                                   int vectorIndex=0)=0;

    /** Copy values for the specified vector indices into the caller-allocated
      'values' array.
    */
    virtual int copyOutVectorValues(int numValues,
                                    const int* globalIndices,
                                    double* values,
                                    bool soln_vector,
                                    int vectorIndex=0) = 0;

    /** Dangerous, high-performance vector access. Return a pointer to
      local vector values. Implementations that can't support this may
      return NULL, in which case the caller will revert to using the
      copyOutVectorValues method.
    */
    virtual double* getLocalVectorValuesPtr(bool soln_vector,
                                            int vectorIndex=0) = 0;
    //@}
    //@{ \name Problem finalization

    /** Perform any necessary internal communications/synchronizations or other
        operations appropriate at the end of data input. For some
        implementations this may be a no-op.  (Trilinos/Epetra implementations
        would call 'FillComplete' on the matrix at this point.)
    */
    virtual int globalAssemble() = 0;
    //@}
  };//class LinearProblemManager

}//namespace fei

#endif // _fei_LinearProblemManager_hpp_