1#ifndef PBAT_SIM_ALGORITHM_NEWTON_PRECONDITIONER_H
2#define PBAT_SIM_ALGORITHM_NEWTON_PRECONDITIONER_H
7#ifdef PBAT_USE_SUITESPARSE
8 #include <Eigen/CholmodSupport>
10 #include <Eigen/SparseCholesky>
23#ifdef PBAT_USE_SUITESPARSE
24 using DecompositionType = Eigen::CholmodDecomposition<CSCMatrix, Eigen::Upper | Eigen::Lower>;
26 using DecompositionType = Eigen::SimplicialLDLT<CSCMatrix, Eigen::Upper | Eigen::Lower>;
29 Preconditioner() =
default;
30 Preconditioner(Preconditioner
const&) =
delete;
31 Preconditioner(Preconditioner&&) =
default;
32 Preconditioner& operator=(Preconditioner
const&) =
delete;
33 Preconditioner& operator=(Preconditioner&&) =
default;
81 template <
typename Rhs>
82 inline auto solve(
const Rhs& b)
const
84 return mImpl->mLLT.solve(b);
92 Eigen::ComputationInfo
info()
const;
Header file for Hessian product algorithms.
Namespace for Newton simulation algorithms.
Definition Config.cpp:8
Cholesky preconditioner.
Definition Preconditioner.h:22
DecompositionType mLLT
Cholesky decomposition.
Definition Preconditioner.h:35
bool mIsPatternAnalyzed
Flag to indicate if the pattern is analyzed.
Definition Preconditioner.h:36
PreconditionerOperator & compute(HessianOperator const &A)
Symbolic and numeric factorization.
Definition Preconditioner.cpp:27
PreconditionerOperator & analyzePattern(HessianOperator const &A)
Symbolic factorization.
Definition Preconditioner.cpp:11
auto solve(const Rhs &b) const
Solve the system AX = B.
Definition Preconditioner.h:82
Preconditioner * mImpl
Pointer to the stateful preconditioner.
Definition Preconditioner.h:45
PreconditionerOperator & factorize(HessianOperator const &A)
Numeric factorization.
Definition Preconditioner.cpp:21
PreconditionerOperator()=default
Construct an empty Preconditioner Operator object.
Eigen::ComputationInfo info() const
Preconditioner's status.
Definition Preconditioner.cpp:34