43 #ifdef HAVE_EXPERIMENTAL
44 #ifdef HAVE_GRAPH_REORDERINGS
48 #include <Epetra_Import.h>
49 #include <Epetra_CrsGraph.h>
50 #include <Epetra_Map.h>
63 if( NewMap_ )
delete NewMap_;
65 if( NewGraph_ )
delete NewGraph_;
74 int n = orig.NumMyRows();
75 int nnz = orig.NumMyNonzeros();
78 std::vector<int> ia(n+1,0);
79 std::vector<int> ja(nnz);
81 for(
int i = 0; i < n; ++i )
83 int * tmpP = &ja[ia[i]];
84 orig.ExtractMyRowCopy( i, nnz-ia[i], cnt, tmpP );
85 ia[i+1] = ia[i] + cnt;
89 std::vector<int> iat(n+1);
90 std::vector<int> jat(nnz);
92 for(
int i = 0; i < n; ++i )
95 for(
int j = ia[i]; j < ia[i+1]; ++j )
108 std::cout <<
"Orig Graph\n";
109 std::cout << orig << std::endl;
110 std::cout <<
"-----------------------------------------\n";
111 std::cout <<
"CRS Format Graph\n";
112 std::cout <<
"-----------------------------------------\n";
113 for(
int i = 0; i < n; ++i )
115 std::cout << i <<
": " << iat[i+1] <<
": ";
116 for(
int j = iat[i]; j<iat[i+1]; ++j )
117 std::cout <<
" " << jat[j];
118 std::cout << std::endl;
120 std::cout <<
"-----------------------------------------\n";
123 std::vector<int> perm(n);
124 std::vector<double> info(AMD_INFO);
126 amd_order( n, &iat[0], &jat[0], &perm[0], NULL, &info[0] );
128 if( info[AMD_STATUS] == AMD_INVALID )
129 std::cout <<
"AMD ORDERING: Invalid!!!!\n";
133 std::cout <<
"-----------------------------------------\n";
134 std::cout <<
"AMD Output\n";
135 std::cout <<
"-----------------------------------------\n";
136 std::cout <<
"STATUS: " << info[AMD_STATUS] << std::endl;
137 std::cout <<
"SYMM: " << info[AMD_SYMMETRY] << std::endl;
138 std::cout <<
"N: " << info[AMD_N] << std::endl;
139 std::cout <<
"NZ: " << info[AMD_NZ] << std::endl;
140 std::cout <<
"SYMM: " << info[AMD_SYMMETRY] << std::endl;
141 std::cout <<
"NZDIAG: " << info[AMD_NZDIAG] << std::endl;
142 std::cout <<
"NZ A+At: " << info[AMD_NZ_A_PLUS_AT] << std::endl;
143 std::cout <<
"NDENSE: " << info[AMD_SYMMETRY] << std::endl;
144 std::cout <<
"Perm\n";
145 for(
int i = 0; i<n; ++i )
146 std::cout << perm[i] << std::endl;
147 std::cout <<
"-----------------------------------------\n";
153 int nG = orig.NumGlobalRows();
155 std::vector<int> newElements( n );
156 for(
int i = 0; i < n; ++i )
157 newElements[i] = OldMap.
GID( perm[i] );
163 std::cout <<
"Old Map\n";
164 std::cout << OldMap << std::endl;
165 std::cout <<
"New Map\n";
166 std::cout << *NewMap_ << std::endl;
172 NewGraph_->
Import( orig, Importer, Insert );
177 std::cout <<
"New CrsGraph\n";
178 std::cout << *NewGraph_ << std::endl;
188 #endif //HAVE_GRAPH_REORDERINGS
189 #endif //HAVE_EXPERIMENTAL
~CrsGraph_AMD()
EpetraExt::CrsGraph_AMD Destructor.
const Epetra_Comm & Comm() const
NewTypeRef operator()(OriginalTypeRef orig)
EpetraExt::CrsGraph_AMD Transform Operator.
int Import(const Epetra_SrcDistObject &A, const Epetra_Import &Importer, Epetra_CombineMode CombineMode, const Epetra_OffsetIndex *Indexor=0)