43 #include <Epetra_ConfigDefs.h> 47 #include "Epetra_MpiComm.h" 51 #include "Epetra_SerialComm.h" 52 #include "Epetra_Time.h" 53 #include "Epetra_Map.h" 54 #include "Epetra_CrsGraph.h" 55 #include "Epetra_CrsMatrix.h" 56 #include "Epetra_IntVector.h" 57 #include "Epetra_MapColoring.h" 62 #include "../../test/epetra_test_err.h" 67 void printColoring (
const Epetra_MapColoring & ColorMap, Epetra_CrsGraph *
A,
bool verbose);
69 int main(
int argc,
char *argv[]) {
74 MPI_Init( &argc, &argv );
79 if( argc < 2 || argc > 3 )
81 cout <<
"Usage: " << argv[0] <<
" [-v] base_name \n" 82 <<
"\t{ Files: base_name_matrix contains matrix-market data and \n" 83 <<
"\t base_name_map contains the needed map.\n" << endl;
89 if(argv[loc][0]==
'-' && argv[loc][1]==
'v')
90 { verbose =
true; ++loc; }
93 Epetra_MpiComm Comm(MPI_COMM_WORLD);
95 Epetra_SerialComm Comm;
98 int MyPID = Comm.MyPID();
100 bool verbose1 =
false;
101 if(verbose) verbose1 = (MyPID==0);
108 string filename1(argv[loc++]);
109 string filename2 = filename1 +
"_map";
110 filename1 +=
"_matrix";
112 if(verbose1) cout <<
"Reading Epetra_BlockMap from file : " << filename2;
113 Epetra_BlockMap* BlkMap(0);
115 if(verbose1) cout <<
" Done." << endl;
117 if(verbose1) cout <<
"Converting Epetra_BlockMap to Epetra_Map ... ";
118 Epetra_Map* Map =
new Epetra_Map( BlkMap->NumGlobalElements(),
119 BlkMap->NumMyElements(),
120 BlkMap->MyGlobalElements(),
123 if(verbose1) cout <<
" Done." << endl;
125 if(verbose1) cout <<
"Reading Epetra_CrsMatrix from file : " << filename1;
126 Epetra_CrsMatrix* A_Matrix(0);
128 if(verbose1) cout <<
" Done." << endl;
130 A_Matrix->FillComplete();
132 if(verbose) cout << Comm << endl << flush;
136 const Epetra_CrsGraph & constA = A_Matrix->Graph();
137 Epetra_CrsGraph &
A =
const_cast<Epetra_CrsGraph&
>(constA);
140 assert(
A.FillComplete() == 0);
145 Epetra_MapColoring & Greedy0ColorMap = Greedy0MapColoringTransform(
A );
151 Epetra_MapColoring & Greedy1ColorMap = Greedy1MapColoringTransform(
A );
157 Epetra_MapColoring & Greedy2ColorMap = Greedy2MapColoringTransform(
A );
163 Epetra_MapColoring & Lubi0ColorMap = Lubi0MapColoringTransform(
A );
169 Epetra_MapColoring & Lubi1ColorMap = Lubi1MapColoringTransform(
A );
175 Epetra_MapColoring & Lubi2ColorMap = Lubi2MapColoringTransform(
A );
179 if( verbose ) cout <<
"Parallel Map Coloring 1!\n";
183 Epetra_MapColoring & Parallel1ColorMap = Parallel1MapColoringTransform(
A );
186 if( verbose ) cout <<
"Parallel Map Coloring 2!\n";
190 Epetra_MapColoring & Parallel2ColorMap = Parallel2MapColoringTransform(
A );
201 void printColoring (
const Epetra_MapColoring & ColorMap, Epetra_CrsGraph *
A,
bool verbose) {
203 int NumColors = ColorMap.NumColors();
204 int * ListOfColors = ColorMap.ListOfColors();
207 vector<Epetra_IntVector> & ColIndices = MapColoringIndexTransform( *
A );
213 cout <<
"***************************************\n";
214 cout <<
"Column Indexing by Color:\n";
215 cout <<
"***************************************\n";
217 for(
int i = 0; i < NumColors; ++i )
219 cout <<
"COLOR: " << ListOfColors[i] << endl;
220 cout << ColIndices[i];
int main(int argc, char *argv[])
std::string EpetraExt_Version()
int MatrixMarketFileToCrsMatrix(const char *filename, const Epetra_Comm &comm, Epetra_CrsMatrix *&A)
void printColoring(const Epetra_MapColoring &ColorMap, Epetra_CrsGraph *A, bool verbose)
Map Coloring of independent columns in a Graph.
int MatrixMarketFileToBlockMap(const char *filename, const Epetra_Comm &comm, Epetra_BlockMap *&map)
Constructs an Epetra_BlockMap object from a Matrix Market format file.