1 | #ifndef EIGEN_ORDERINGMETHODS_MODULE_H |
---|
2 | #define EIGEN_ORDERINGMETHODS_MODULE_H |
---|
3 | |
---|
4 | #include "SparseCore" |
---|
5 | |
---|
6 | #include "src/Core/util/DisableStupidWarnings.h" |
---|
7 | |
---|
8 | /** |
---|
9 | * \defgroup OrderingMethods_Module OrderingMethods module |
---|
10 | * |
---|
11 | * This module is currently for internal use only |
---|
12 | * |
---|
13 | * It defines various built-in and external ordering methods for sparse matrices. |
---|
14 | * They are typically used to reduce the number of elements during |
---|
15 | * the sparse matrix decomposition (LLT, LU, QR). |
---|
16 | * Precisely, in a preprocessing step, a permutation matrix P is computed using |
---|
17 | * those ordering methods and applied to the columns of the matrix. |
---|
18 | * Using for instance the sparse Cholesky decomposition, it is expected that |
---|
19 | * the nonzeros elements in LLT(A*P) will be much smaller than that in LLT(A). |
---|
20 | * |
---|
21 | * |
---|
22 | * Usage : |
---|
23 | * \code |
---|
24 | * #include <Eigen/OrderingMethods> |
---|
25 | * \endcode |
---|
26 | * |
---|
27 | * A simple usage is as a template parameter in the sparse decomposition classes : |
---|
28 | * |
---|
29 | * \code |
---|
30 | * SparseLU<MatrixType, COLAMDOrdering<int> > solver; |
---|
31 | * \endcode |
---|
32 | * |
---|
33 | * \code |
---|
34 | * SparseQR<MatrixType, COLAMDOrdering<int> > solver; |
---|
35 | * \endcode |
---|
36 | * |
---|
37 | * It is possible as well to call directly a particular ordering method for your own purpose, |
---|
38 | * \code |
---|
39 | * AMDOrdering<int> ordering; |
---|
40 | * PermutationMatrix<Dynamic, Dynamic, int> perm; |
---|
41 | * SparseMatrix<double> A; |
---|
42 | * //Fill the matrix ... |
---|
43 | * |
---|
44 | * ordering(A, perm); // Call AMD |
---|
45 | * \endcode |
---|
46 | * |
---|
47 | * \note Some of these methods (like AMD or METIS), need the sparsity pattern |
---|
48 | * of the input matrix to be symmetric. When the matrix is structurally unsymmetric, |
---|
49 | * Eigen computes internally the pattern of \f$A^T*A\f$ before calling the method. |
---|
50 | * If your matrix is already symmetric (at leat in structure), you can avoid that |
---|
51 | * by calling the method with a SelfAdjointView type. |
---|
52 | * |
---|
53 | * \code |
---|
54 | * // Call the ordering on the pattern of the lower triangular matrix A |
---|
55 | * ordering(A.selfadjointView<Lower>(), perm); |
---|
56 | * \endcode |
---|
57 | */ |
---|
58 | |
---|
59 | #ifndef EIGEN_MPL2_ONLY |
---|
60 | #include "src/OrderingMethods/Amd.h" |
---|
61 | #endif |
---|
62 | |
---|
63 | #include "src/OrderingMethods/Ordering.h" |
---|
64 | #include "src/Core/util/ReenableStupidWarnings.h" |
---|
65 | |
---|
66 | #endif // EIGEN_ORDERINGMETHODS_MODULE_H |
---|