38 #include "Epetra_MpiComm.h" 40 #include "Epetra_SerialComm.h" 43 #include "Epetra_CrsMatrix.h" 44 #include "Epetra_Import.h" 45 #include "Epetra_Export.h" 46 #include "Epetra_Map.h" 47 #include "Epetra_MultiVector.h" 48 #include "Epetra_Vector.h" 49 #include "Epetra_LinearProblem.h" 50 #include "Galeri_ReadHB.h" 69 int main(
int argc,
char *argv[])
72 MPI_Init(&argc, &argv);
73 Epetra_MpiComm Comm(MPI_COMM_WORLD);
75 Epetra_SerialComm Comm;
78 std::string matrix_file;
79 std::string solver_type;
82 matrix_file = argv[1];
84 matrix_file =
"662_bus.rsa";
87 solver_type = argv[2];
91 if (Comm.MyPID() == 0)
92 std::cout <<
"Reading matrix `" << matrix_file <<
"'";
105 Epetra_CrsMatrix* readA;
106 Epetra_Vector* readx;
107 Epetra_Vector* readb;
108 Epetra_Vector* readxexact;
112 Galeri::ReadHB(matrix_file.c_str(), Comm, readMap,
113 readA, readx, readb, readxexact);
117 std::cout <<
"Caught exception, maybe file name is incorrect" << std::endl;
129 Epetra_Map* mapPtr = 0;
131 if(readMap->GlobalIndicesInt())
132 mapPtr =
new Epetra_Map((
int) readMap->NumGlobalElements(), 0, Comm);
133 else if(readMap->GlobalIndicesLongLong())
134 mapPtr =
new Epetra_Map(readMap->NumGlobalElements(), 0, Comm);
138 Epetra_Map& map = *mapPtr;
141 Epetra_CrsMatrix A(Copy, map, 0);
143 const Epetra_Map &OriginalMap = readA->RowMatrixRowMap() ;
144 assert (OriginalMap.SameAs(*readMap));
145 Epetra_Export exporter(OriginalMap, map);
147 Epetra_Vector x(map);
148 Epetra_Vector b(map);
149 Epetra_Vector xexact(map);
152 x.Export(*readx, exporter, Add);
153 b.Export(*readb, exporter, Add);
154 xexact.Export(*readxexact, exporter, Add);
155 A.Export(*readA, exporter, Add);
168 Epetra_LinearProblem Problem(&A,&x,&b);
175 std::cout <<
"Calling Amesos..." << std::endl;
183 Solver = Factory.
Create(solver_type,Problem);
188 std::cerr <<
"Selected solver (" << solver_type <<
") is not available" << std::endl;
194 return(EXIT_SUCCESS);
244 Epetra_Vector Ax(b.Map());
245 A.Multiply(
false, x, Ax);
246 Ax.Update(1.0, b, -1.0);
250 std::cout <<
"After Amesos solution, ||b - A * x||_2 = " << residual << std::endl;
257 return(EXIT_FAILURE);
263 return(EXIT_SUCCESS);
virtual int Solve()=0
Solves A X = B (or AT x = B)
virtual void PrintTiming() const =0
Prints timing information about the current solver.
Factory for binding a third party direct solver to an Epetra_LinearProblem.
int main(int argc, char *argv[])
virtual void PrintStatus() const =0
Prints status information about the current solver.
Amesos_BaseSolver * Create(const char *ClassType, const Epetra_LinearProblem &LinearProblem)
Amesos Create method.
Amesos_BaseSolver: A pure virtual class for direct solution of real-valued double-precision operators...