|
Mechanics of Defect Evolution Library
|
Solves the system of equations in block-form: More...
#include <SchurComplementSolver.h>
Public Member Functions | |
| SchurComplementSolver (const Eigen::MatrixXd &KQQ, const Eigen::MatrixXd &KPQ, const Eigen::VectorXd &Fq, const Eigen::VectorXd &Fp) | |
| SchurComplementSolver (const Eigen::MatrixXd &KQQ, const Eigen::MatrixXd &KPQ, const Eigen::VectorXd &Fq) | |
Public Attributes | |
| const Eigen::LLT< Eigen::MatrixXd > | llt |
| The LLT decomposition of KQQ. | |
| const Eigen::PartialPivLU< Eigen::MatrixXd > | pplu |
| the partial-pivot LU decomposition of KPQ*inv(KQQ)*KPQ^T | |
| Eigen::VectorXd | L |
| The vector of Lagrange multipliers. | |
| Eigen::VectorXd | X |
| The solution vector. | |
Solves the system of equations in block-form:
\[ \left[ \begin{array}{ll} K_{qq} & K_{pq}^T\\ K_{pq} & 0\\ \end{array} \right] \left[ \begin{array}{l} X_q\\ L_p \end{array} \right] = \left[ \begin{array}{l} F_q\\ F_p \end{array} \right] \]
where the matrix \(K_{qq}\) is a symmetric positive definite matrix and \(K_{pq}\) is a full row-rank matrix.
The full system is symmetric but not necessarely poisitive-definite, therefore Cholesky decomposition (LLT) cannot be used. However, since \(K_{qq}\) is symmetric and positive-definite, LLT can be used for the decomposition of \(K_{qq}\). In order to take advantage of LLT and reduce the size of the overall matrix decomposition, the solution is found in the form:
\[ \left\{ \begin{array}{l} L_p=\left(K_{pq}K_{qq}^{-1}K_{pq}^T\right)^{-1}\left(K_{pq}K_{qq}^{-1}F_q-F_p\right)\\ X_q=K_{qq}^{-1}\left(F_q-K_{pq}^TL_p\right) \end{array} \right. \]
Numerically this is implemented as:
Definition at line 61 of file SchurComplementSolver.h.
| model::SchurComplementSolver::SchurComplementSolver | ( | const Eigen::MatrixXd & | KQQ, |
| const Eigen::MatrixXd & | KPQ, | ||
| const Eigen::VectorXd & | Fq, | ||
| const Eigen::VectorXd & | Fp ) |
Definition at line 33 of file SchurComplementSolver.cpp.
| model::SchurComplementSolver::SchurComplementSolver | ( | const Eigen::MatrixXd & | KQQ, |
| const Eigen::MatrixXd & | KPQ, | ||
| const Eigen::VectorXd & | Fq ) |
Definition at line 43 of file SchurComplementSolver.cpp.
| Eigen::VectorXd model::SchurComplementSolver::L |
The vector of Lagrange multipliers.
Definition at line 75 of file SchurComplementSolver.h.
| const Eigen::LLT<Eigen::MatrixXd> model::SchurComplementSolver::llt |
The LLT decomposition of KQQ.
Definition at line 69 of file SchurComplementSolver.h.
| const Eigen::PartialPivLU<Eigen::MatrixXd> model::SchurComplementSolver::pplu |
the partial-pivot LU decomposition of KPQ*inv(KQQ)*KPQ^T
Definition at line 72 of file SchurComplementSolver.h.
| Eigen::VectorXd model::SchurComplementSolver::X |
The solution vector.
Definition at line 78 of file SchurComplementSolver.h.