44 #include "Epetra_ConfigDefs.h" 49 #include "Epetra_MpiComm.h" 51 #include "Epetra_SerialComm.h" 54 #include "Trilinos_Util.h" 55 #include "Epetra_Comm.h" 56 #include "Epetra_Map.h" 57 #include "Epetra_Time.h" 58 #include "Epetra_BlockMap.h" 59 #include "Epetra_MultiVector.h" 60 #include "Epetra_Vector.h" 61 #include "Epetra_Export.h" 63 #include "Epetra_VbrMatrix.h" 64 #include "Epetra_CrsMatrix.h" 68 int main(
int argc,
char *argv[]) {
71 MPI_Init(&argc,&argv);
72 Epetra_MpiComm Comm (MPI_COMM_WORLD);
74 Epetra_SerialComm Comm;
77 int MyPID = Comm.MyPID();
80 if (MyPID==0) verbose =
true;
87 if(argc < 2 && verbose) {
88 cerr <<
"Usage: " << argv[0]
89 <<
" HB_filename" << endl;
100 Epetra_CrsMatrix * readA;
101 Epetra_Vector * readx;
102 Epetra_Vector * readb;
103 Epetra_Vector * readxexact;
106 Trilinos_Util_ReadHb2Epetra(argv[1], Comm, readMap, readA, readx, readb, readxexact);
109 Epetra_Map map(readMap->NumGlobalElements(), 0, Comm);
113 Epetra_Export exporter(*readMap, map);
114 Epetra_CrsMatrix
A(
Copy, map, 0);
115 Epetra_Vector x(map);
116 Epetra_Vector b(map);
117 Epetra_Vector xexact(map);
119 Epetra_Time FillTimer(Comm);
120 x.Export(*readx, exporter, Add);
121 b.Export(*readb, exporter, Add);
122 xexact.Export(*readxexact, exporter, Add);
124 double vectorRedistributeTime = FillTimer.ElapsedTime();
125 A.Export(*readA, exporter, Add);
127 double matrixRedistributeTime = FillTimer.ElapsedTime() - vectorRedistributeTime;
128 assert(
A.FillComplete()==0);
130 double fillCompleteTime = FillTimer.ElapsedTime() - matrixRedistributeTime;
131 if (Comm.MyPID()==0) {
132 cout <<
"\n\n****************************************************" << endl;
133 cout <<
"\n Vector redistribute time (sec) = " << vectorRedistributeTime<< endl;
134 cout <<
" Matrix redistribute time (sec) = " << matrixRedistributeTime << endl;
135 cout <<
" Transform to Local time (sec) = " << fillCompleteTime << endl<< endl;
137 Epetra_Vector tmp1(*readMap);
138 Epetra_Vector tmp2(map);
139 readA->Multiply(
false, *readxexact, tmp1);
141 A.Multiply(
false, xexact, tmp2);
143 tmp1.Norm2(&residual);
144 if (verbose) cout <<
"Norm of Ax from file = " << residual << endl;
145 tmp2.Norm2(&residual);
146 if (verbose) cout <<
"Norm of Ax after redistribution = " << residual << endl << endl << endl;
std::string EpetraExt_Version()
int main(int argc, char *argv[])
int RowMatrixToMatrixMarketFile(const char *filename, const Epetra_RowMatrix &A, const char *matrixName, const char *matrixDescription, bool writeHeader)
Writes an Epetra_RowMatrix object to a Matrix Market format file.