Template Class LagrangeMultiplierSchurSolver

Nested Relationships

Nested Types

Class Documentation

template<typename MatrixType, typename VectorType, typename PreconditionerType>
class LagrangeMultiplierSchurSolver

Algebraic Schur-complement solver for one two-field multiplier system.

Given matrices A_bulk, A_embedded, C, and M with orientations

C : bulk x multiplier,   M : multiplier x embedded,

this class solves

A_bulk u + C lambda       = f,
A_embedded w - M^T lambda = g,
C^T u - M w               = 0.

It owns no PDE object and has no knowledge of how any of the four matrices were assembled. The two diagonal inverses use the supplied AMG preconditioner type; the multiplier Schur operator is applied matrix-free.

Public Functions

inline LagrangeMultiplierSchurSolver(const MatrixType &bulk_matrix, const MatrixType &embedded_matrix, const MatrixType &coupling_matrix, const MatrixType &mass_matrix, const dealii::IndexSet &bulk_owned_dofs, const dealii::IndexSet &embedded_owned_dofs, const dealii::IndexSet &multiplier_owned_dofs, const MPI_Comm mpi_communicator, const unsigned int max_steps = 200, const double tolerance = 1.e-10, const double block_tolerance = 1.e-12)
inline void solve(VectorType &bulk_solution, VectorType &embedded_solution, VectorType &multiplier, const VectorType &bulk_rhs, const VectorType &embedded_rhs) const

Solve for u, w, and lambda from the two independent right-hand sides.