126 eigen_assert(mat.isCompressed() &&
"COLAMDOrdering requires a sparse matrix in compressed mode. Call .makeCompressed() before passing it to COLAMDOrdering");
128 StorageIndex m = StorageIndex(mat.rows());
129 StorageIndex n = StorageIndex(mat.cols());
130 StorageIndex nnz = StorageIndex(mat.nonZeros());
132 StorageIndex Alen = internal::Colamd::recommended(nnz, m, n);
134 double knobs [internal::Colamd::NKnobs];
135 StorageIndex stats [internal::Colamd::NStats];
136 internal::Colamd::set_defaults(knobs);
139 for(StorageIndex i=0; i <= n; i++) p(i) = mat.outerIndexPtr()[i];
140 for(StorageIndex i=0; i < nnz; i++) A(i) = mat.innerIndexPtr()[i];
142 StorageIndex info = internal::Colamd::compute_ordering(m, n, Alen, A.data(), p.data(), knobs, stats);
143 EIGEN_UNUSED_VARIABLE(info);
144 eigen_assert( info &&
"COLAMD failed " );
147 for (StorageIndex i = 0; i < n; i++) perm.
indices()(p(i)) = i;