Class GooseFEM::MatrixPartitionedSolver#

template<class Solver = Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>>>
class MatrixPartitionedSolver : public MatrixSolverBase<MatrixPartitionedSolver<Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>>>>, public MatrixSolverPartitionedBase<MatrixPartitionedSolver<Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>>>>#

Solve \( x_u = A_{uu}^{-1} (b_u - A_{up} * x_p) \) for A of the MatrixPartitioned() class.

You can solve for multiple right-hand-sides using one factorisation.

For “nodevec” input x is used to read \( x_p \), while \( x_u \) is written. See MatrixPartitioned::Reaction() to get \( b_p \).

Public Functions

template<class M>
inline array_type::tensor<double, 1> Solve_u(M &A, const array_type::tensor<double, 1> &b_u, const array_type::tensor<double, 1> &x_p)#

Solve \( x = A^{-1} b \).

Parameters
Returns

x_u unknown dofval [nnu].

template<class M>
inline void solve_u(M &A, const array_type::tensor<double, 1> &b_u, const array_type::tensor<double, 1> &x_p, array_type::tensor<double, 1> &x_u)#

Same as Solve \( x = A^{-1} b \).

Parameters