PhysicsBasedAnimationToolkit 0.0.10
Cross-platform C++20 library of algorithms and data structures commonly used in computer graphics research on physically-based simulation.
Loading...
Searching...
No Matches
Preconditioner.h
1#ifndef PBAT_SIM_ALGORITHM_NEWTON_PRECONDITIONER_H
2#define PBAT_SIM_ALGORITHM_NEWTON_PRECONDITIONER_H
3
4#include "HessianProduct.h"
5#include "pbat/Aliases.h"
6
7#ifdef PBAT_USE_SUITESPARSE
8 #include <Eigen/CholmodSupport>
9#else
10 #include <Eigen/SparseCholesky>
11#endif
12
14
21struct Preconditioner
22{
23#ifdef PBAT_USE_SUITESPARSE
24 using DecompositionType = Eigen::CholmodDecomposition<CSCMatrix, Eigen::Upper | Eigen::Lower>;
25#else
26 using DecompositionType = Eigen::SimplicialLDLT<CSCMatrix, Eigen::Upper | Eigen::Lower>;
27#endif // PBAT_USE_SUITESPARSE
28
29 Preconditioner() = default;
30 Preconditioner(Preconditioner const&) = delete;
31 Preconditioner(Preconditioner&&) = default;
32 Preconditioner& operator=(Preconditioner const&) = delete;
33 Preconditioner& operator=(Preconditioner&&) = default;
34
35 DecompositionType mLLT;
36 bool mIsPatternAnalyzed{false};
37};
38
44{
55 explicit PreconditionerOperator(HessianOperator const& A);
61 PreconditionerOperator& analyzePattern(HessianOperator const& A);
67 PreconditionerOperator& factorize(HessianOperator const& A);
73 PreconditionerOperator& compute(HessianOperator const& A);
81 template <typename Rhs>
82 inline auto solve(const Rhs& b) const
83 {
84 return mImpl->mLLT.solve(b);
85 }
86
92 Eigen::ComputationInfo info() const;
93};
94
95} // namespace pbat::sim::algorithm::newton
96
97#endif // PBAT_SIM_ALGORITHM_NEWTON_PRECONDITIONER_H
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