This file is indexed.

/usr/include/trilinos/Amesos_Utils.h is in libtrilinos-amesos-dev 12.10.1-3.

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
#ifndef AMESOS_UTILS_H
#define AMESOS_UTILS_H

#include "Epetra_RowMatrix.h"
#include "Epetra_MultiVector.h"
#include "Epetra_Vector.h"
#include "Epetra_Comm.h"

/*!
 \class Amesos_Utils
 
 \brief Amesos_Utils: Collections of basic utilities.

 \author Marzio Sala, SNL 9214

 \date Last updated on 24-May-05 (Champions' League Final day)
*/

class Amesos_Utils
{
public:
  //! Default constructor.
  Amesos_Utils() {}
  
  //! Default destructor.
  ~Amesos_Utils() {}

  //! Computes the true residual, B - Matrix * X, and prints the results.
  void ComputeTrueResidual(const Epetra_RowMatrix& Matrix,
                           const Epetra_MultiVector& X,
                           const Epetra_MultiVector& B,
                           const bool UseTranspose,
                           const std::string prefix) const
  {
    double Norm;
    Epetra_Vector Ax(B.Map());
    int NumVectors = X.NumVectors();

    for (int i = 0 ; i < NumVectors ; ++i) 
    {
      Matrix.Multiply(UseTranspose, *X(i), Ax);
      Ax.Update(1.0, *B(i), -1.0);
      Ax.Norm2(&Norm);

      if (Matrix.Comm().MyPID() == 0) 
        std::cout << prefix << " : vector " << i << ", ||Ax - b|| = " 
          << Norm << std::endl;
    }
  }

  //! Computes the norms of X and B and print the results.
  void ComputeVectorNorms(const Epetra_MultiVector& X,
                          const Epetra_MultiVector& B,
                          const std::string prefix) const
  {
    double NormLHS;
    double NormRHS;
    int NumVectors = X.NumVectors();

    for (int i = 0 ; i < NumVectors ; ++i) 
    {
      X(i)->Norm2(&NormLHS);
      B(i)->Norm2(&NormRHS);
      if (X.Comm().MyPID() == 0) 
        std::cout << prefix << " : vector " << i << ", ||x|| = " << NormLHS
          << ", ||b|| = " << NormRHS << std::endl;
    }
  }

  //! Prints line on std::cout.
  void PrintLine() const
  {
    std::cout << "--------------------------------------------";
    std::cout << "--------------------------------" << std::endl;
  }

  void SetMaxProcesses(int& MaxProcesses, const Epetra_RowMatrix& A)
  {
    int MaxProcs = A.Comm().NumProc();

    switch(MaxProcesses) {
    case -3:
      MaxProcesses = MaxProcs;
      break;
    case -2:
      MaxProcesses = (int) sqrt(1.0 * MaxProcs);
      break;
    case -1:
      MaxProcesses = 1 + static_cast<int>(EPETRA_MAX(A.NumGlobalRows64() / 10000, 
                                    A.NumGlobalNonzeros64() / 1000000));
      break;
    }

    if (MaxProcesses <= 0) MaxProcesses = 1;
    if (MaxProcesses > MaxProcs) MaxProcesses = MaxProcs;

    return;
  }

};
#endif