4 #include "Epetra_RowMatrix.h" 5 #include "Epetra_MultiVector.h" 6 #include "Epetra_Vector.h" 7 #include "Epetra_Comm.h" 30 const Epetra_MultiVector& X,
31 const Epetra_MultiVector&
B,
32 const bool UseTranspose,
33 const std::string prefix)
const 36 Epetra_Vector Ax(
B.Map());
37 int NumVectors = X.NumVectors();
39 for (
int i = 0 ; i < NumVectors ; ++i)
41 Matrix.Multiply(UseTranspose, *X(i), Ax);
42 Ax.Update(1.0, *
B(i), -1.0);
45 if (Matrix.Comm().MyPID() == 0)
46 std::cout << prefix <<
" : vector " << i <<
", ||Ax - b|| = " 53 const Epetra_MultiVector&
B,
54 const std::string prefix)
const 58 int NumVectors = X.NumVectors();
60 for (
int i = 0 ; i < NumVectors ; ++i)
62 X(i)->Norm2(&NormLHS);
63 B(i)->Norm2(&NormRHS);
64 if (X.Comm().MyPID() == 0)
65 std::cout << prefix <<
" : vector " << i <<
", ||x|| = " << NormLHS
66 <<
", ||b|| = " << NormRHS << std::endl;
73 std::cout <<
"--------------------------------------------";
74 std::cout <<
"--------------------------------" << std::endl;
79 int MaxProcs =
A.Comm().NumProc();
81 switch(MaxProcesses) {
83 MaxProcesses = MaxProcs;
86 MaxProcesses = (int) sqrt(1.0 * MaxProcs);
89 MaxProcesses = 1 +
static_cast<int>(EPETRA_MAX(
A.NumGlobalRows64() / 10000,
90 A.NumGlobalNonzeros64() / 1000000));
94 if (MaxProcesses <= 0) MaxProcesses = 1;
95 if (MaxProcesses > MaxProcs) MaxProcesses = MaxProcs;
void SetMaxProcesses(int &MaxProcesses, const Epetra_RowMatrix &A)
Amesos_Utils()
Default constructor.
~Amesos_Utils()
Default destructor.
void ComputeTrueResidual(const Epetra_RowMatrix &Matrix, const Epetra_MultiVector &X, const Epetra_MultiVector &B, const bool UseTranspose, const std::string prefix) const
Computes the true residual, B - Matrix * X, and prints the results.
void ComputeVectorNorms(const Epetra_MultiVector &X, const Epetra_MultiVector &B, const std::string prefix) const
Computes the norms of X and B and print the results.
void PrintLine() const
Prints line on std::cout.
Amesos_Utils: Collections of basic utilities.