GooseFEM 1.4.1.dev2+g78f16df
Loading...
Searching...
No Matches
GooseFEM::MatrixPartitionedTyingsSolver< Solver > Class Template Reference

Solver for MatrixPartitionedTyings(). More...

#include <GooseFEM/MatrixPartitionedTyings.h>

Inheritance diagram for GooseFEM::MatrixPartitionedTyingsSolver< Solver >:

Public Member Functions

array_type::tensor< double, 1 > Solve_u (MatrixPartitionedTyings &A, const array_type::tensor< double, 1 > &b_u, const array_type::tensor< double, 1 > &b_d, const array_type::tensor< double, 1 > &x_p)
 Same as Solve(MatrixPartitionedTyings&, const array_type::tensor<double, 2>&, const array_type::tensor<double, 2>&), but with partitioned input and output.
 
void solve_u (MatrixPartitionedTyings &A, const array_type::tensor< double, 1 > &b_u, const array_type::tensor< double, 1 > &b_d, const array_type::tensor< double, 1 > &x_p, array_type::tensor< double, 1 > &x_u)
 Same as Solve_u(MatrixPartitionedTyings&, const array_type::tensor<double, 1>&, const array_type::tensor<double, 1>&, const array_type::tensor<double, 1>&), but writing to pre-allocated output.
 

Detailed Description

template<class Solver = Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>>>
class GooseFEM::MatrixPartitionedTyingsSolver< Solver >

Solver for MatrixPartitionedTyings().

This solver class can be used to solve for multiple right-hand-sides using one factorisation.

Solving proceeds as follows:

\( A' = A_{ii} + A_{id} * C_{di} + C_{di}^T * A_{di} + C_{di}^T * A_{dd} * C_{di} \)

\( b' = b_i + C_{di}^T * b_d \)

\( x_u = A'_{uu} \ ( b'_u - A'_{up} * x_p ) \)

\( x_i = \begin{bmatrix} x_u \\ x_p \end{bmatrix} \)

\( x_d = C_{di} * x_i \)

Definition at line 528 of file MatrixPartitionedTyings.h.

Member Function Documentation

◆ Solve_u()

template<class Solver = Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>>>
array_type::tensor< double, 1 > GooseFEM::MatrixPartitionedTyingsSolver< Solver >::Solve_u ( MatrixPartitionedTyings & A,
const array_type::tensor< double, 1 > & b_u,
const array_type::tensor< double, 1 > & b_d,
const array_type::tensor< double, 1 > & x_p )
inline

Same as Solve(MatrixPartitionedTyings&, const array_type::tensor<double, 2>&, const array_type::tensor<double, 2>&), but with partitioned input and output.

Parameters
Asparse matrix, see MatrixPartitionedTyings().
b_uunknown dofval [nnu].
b_ddependent dofval [nnd].
x_pprescribed dofval [nnp]
Returns
x_u unknown dofval [nnu].

Definition at line 601 of file MatrixPartitionedTyings.h.

◆ solve_u()

template<class Solver = Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>>>
void GooseFEM::MatrixPartitionedTyingsSolver< Solver >::solve_u ( MatrixPartitionedTyings & A,
const array_type::tensor< double, 1 > & b_u,
const array_type::tensor< double, 1 > & b_d,
const array_type::tensor< double, 1 > & x_p,
array_type::tensor< double, 1 > & x_u )
inline

Same as Solve_u(MatrixPartitionedTyings&, const array_type::tensor<double, 1>&, const array_type::tensor<double, 1>&, const array_type::tensor<double, 1>&), but writing to pre-allocated output.

Parameters
Asparse matrix, see MatrixPartitionedTyings().
b_uunknown dofval [nnu].
b_ddependent dofval [nnd].
x_pprescribed dofval [nnp]
x_u(overwritten) unknown dofval [nnu].

Definition at line 625 of file MatrixPartitionedTyings.h.


The documentation for this class was generated from the following file: