23 std::vector<double> Norm;
25 Norm.resize(NumVectors);
27 A.Multiply(
false,x,Ax);
30 bool TestPassed =
false;
31 double TotalNorm = 0.0;
32 for (
int i = 0 ; i < NumVectors ; ++i) {
35 if (
A.Comm().MyPID() == 0)
36 std::cout <<
"||Ax - b|| = " << TotalNorm << std::endl;
37 if (TotalNorm < 1e-5 )
42 Ax.
Update (1.0,x,-1.0,x_exact,0.0);
44 for (
int i = 0 ; i < NumVectors ; ++i) {
47 if (
A.Comm().MyPID() == 0)
48 std::cout <<
"||Ax - b|| = " << TotalNorm << std::endl;
49 if (TotalNorm < 1e-5 )
58 int main(
int argc,
char *argv[]) {
61 MPI_Init(&argc, &argv);
67 int NumGlobalElements = 1000;
74 int* part =
new int[NumGlobalElements];
76 if (
Comm.MyPID() == 0)
80 for(
int i=0 ; i<NumGlobalElements ; ++i )
83 part[i] = r%(
Comm.NumProc());
87 Comm.Broadcast(part,NumGlobalElements,0);
90 int NumMyElements = 0;
91 for (
int i = 0 ; i < NumGlobalElements ; ++i)
93 if (part[i] ==
Comm.MyPID())
98 int* MyGlobalElements =
new int[NumMyElements];
100 for (
int i = 0 ; i < NumGlobalElements ; ++i)
102 if (part[i] ==
Comm.MyPID() )
103 MyGlobalElements[count++] = i;
106 Epetra_Map Map(NumGlobalElements,NumMyElements,MyGlobalElements,
117 int* Indices =
new int[NumGlobalElements];
118 double* Values =
new double[NumGlobalElements];
120 for (
int i = 0 ; i < NumGlobalElements ; ++i)
123 for (
int i = 0 ; i < NumMyElements ; ++i) {
124 int iGlobal = MyGlobalElements[i];
125 for (
int jGlobal = 0 ; jGlobal < NumGlobalElements ; ++jGlobal) {
126 if (iGlobal == jGlobal)
127 Values[jGlobal] = 1.0 * (NumGlobalElements + 1 ) *
128 (NumGlobalElements + 1);
129 else if (iGlobal > jGlobal)
130 Values[jGlobal] = -1.0*(jGlobal+1);
132 Values[jGlobal] = 1.0*(iGlobal+1);
135 NumGlobalElements, Values, Indices);
141 delete[] MyGlobalElements;
154 A.Multiply(
false,x_exact,b);
173 return(EXIT_SUCCESS);
int Norm2(double *Result) const
virtual int InsertGlobalValues(int GlobalRow, int NumEntries, const double *Values, const int *Indices)
Amesos_TestRowMatrix: a class to test Epetra_RowMatrix based codes.
int FillComplete(bool OptimizeDataStorage=true)
int main(int argc, char *argv[])
#define AMESOS_CHK_ERR(a)
int Update(double ScalarA, const Epetra_MultiVector &A, double ScalarThis)
bool CheckError(const Epetra_RowMatrix &A, const Epetra_MultiVector &x, const Epetra_MultiVector &b, const Epetra_MultiVector &x_exact)
Class Amesos_Umfpack: An object-oriented wrapper for UMFPACK.