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