ROL
|
Given a 2x2 block operator, perform the Schur reduction and return the decoupled system components. More...
#include <ROL_SchurComplement.hpp>
Public Member Functions | |
SchurComplement (ROL::Ptr< OP > &A, ROL::Ptr< OP > &B, ROL::Ptr< OP > &C, ROL::Ptr< OP > &D, ROL::Ptr< V > &scratch1) | |
SchurComplement (BlockOperator2< Real > &op, ROL::Ptr< Vector< Real > > &scratch1) | |
void | applyLower (Vector< Real > &Hv, const Vector< Real > &v, Real &tol) |
void | applyLowerInverse (Vector< Real > &Hv, const Vector< Real > &v, Real &tol) |
void | applyUpper (Vector< Real > &Hv, const Vector< Real > &v, Real &tol) |
void | applyUpperInverse (Vector< Real > &Hv, const Vector< Real > &v, Real &tol) |
ROL::Ptr< OP > | getS11 (void) |
void | solve2 (Vector< Real > &Hv2, const Vector< Real > &v2, Real &tol) |
Public Attributes | |
A_ = op.getOperator(0,0) | |
B_ = op.getOperator(0,1) | |
C_ = op.getOperator(1,0) | |
D_ = op.getOperator(1,1) | |
U_ = ROL::makePtr<UPPER>(B_) | |
L_ = ROL::makePtr<LOWER>(C_) | |
Private Types | |
typedef Vector< Real > | V |
typedef PartitionedVector< Real > | PV |
typedef LinearOperator< Real > | OP |
typedef BlockOperator2UnitUpper | UPPER |
typedef BlockOperator2UnitLower | LOWER |
Private Attributes | |
ROL::Ptr< OP > | A_ |
ROL::Ptr< OP > | B_ |
ROL::Ptr< OP > | C_ |
ROL::Ptr< OP > | D_ |
ROL::Ptr< OP > | L_ |
ROL::Ptr< OP > | U_ |
ROL::Ptr< V > | scratch1_ |
Given a 2x2 block operator, perform the Schur reduction and return the decoupled system components.
Let \form#189 where
\[ M = \begin{pmatrix} A & B \\ C & D \end{pmatrix} \]
\[ x = \begin{pmatrix} y & z \end{pmatrix} \]
\[ b = \begin{pmayrix} u & v \end{pmatrix} \]
The block factorization is \form#193 where
\[ U = \begin{pmatrix} I & BD^{-1} \\ 0 & I \end{pmatrix} \]
\[ S = \begin{pmatrix} A-BD^{-1}C & 0 \\ 0 & D \end{pmatrix} \]
\[ L = \begin{pmatrix} I & 0 \\ D^{-1} C & I \]
We can rewrite \form#197 as the block-decoupled problem \form#198 where \form#199 and \form#200 The expectation here is that we will solve the equation for the first decoupled variable iteratively.
Definition at line 44 of file ROL_SchurComplement.hpp.
|
private |
Definition at line 46 of file ROL_SchurComplement.hpp.
|
private |
Definition at line 47 of file ROL_SchurComplement.hpp.
|
private |
Definition at line 48 of file ROL_SchurComplement.hpp.
|
private |
Definition at line 49 of file ROL_SchurComplement.hpp.
|
private |
Definition at line 50 of file ROL_SchurComplement.hpp.
|
inline |
Definition at line 63 of file ROL_SchurComplement.hpp.
|
inline |
Definition at line 74 of file ROL_SchurComplement.hpp.
|
inline |
Definition at line 87 of file ROL_SchurComplement.hpp.
|
inline |
Definition at line 91 of file ROL_SchurComplement.hpp.
|
inline |
Definition at line 95 of file ROL_SchurComplement.hpp.
|
inline |
Definition at line 99 of file ROL_SchurComplement.hpp.
|
inline |
|
inline |
Definition at line 107 of file ROL_SchurComplement.hpp.
|
private |
Definition at line 54 of file ROL_SchurComplement.hpp.
|
private |
Definition at line 54 of file ROL_SchurComplement.hpp.
|
private |
Definition at line 54 of file ROL_SchurComplement.hpp.
|
private |
Definition at line 54 of file ROL_SchurComplement.hpp.
|
private |
Definition at line 56 of file ROL_SchurComplement.hpp.
|
private |
Definition at line 56 of file ROL_SchurComplement.hpp.
|
private |
Definition at line 57 of file ROL_SchurComplement.hpp.
ROL::SchurComplement::A_ = op.getOperator(0,0) |
Definition at line 79 of file ROL_SchurComplement.hpp.
ROL::SchurComplement::B_ = op.getOperator(0,1) |
Definition at line 80 of file ROL_SchurComplement.hpp.
ROL::SchurComplement::C_ = op.getOperator(1,0) |
Definition at line 81 of file ROL_SchurComplement.hpp.
ROL::SchurComplement::D_ = op.getOperator(1,1) |
Definition at line 82 of file ROL_SchurComplement.hpp.
Definition at line 84 of file ROL_SchurComplement.hpp.
Definition at line 85 of file ROL_SchurComplement.hpp.