ROL
ROL::SchurComplement Class Reference

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< OPgetS11 (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< OPA_
ROL::Ptr< OPB_
ROL::Ptr< OPC_
ROL::Ptr< OPD_
ROL::Ptr< OPL_
ROL::Ptr< OPU_
ROL::Ptr< Vscratch1_

Detailed Description

Given a 2x2 block operator, perform the Schur reduction and return the decoupled system components.

Let \(Mx=b\) where

\[ M = \begin{pmatrix} A & B \\ C & D \end{pmatrix} \]

\[ x = \begin{pmatrix} y & z \end{pmatrix} \]

\[ b = \begin{pmatrix} u & v \end{pmatrix} \]

The block factorization is \( M=USL \) 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 \end{pmatrix} \]

We can rewrite \( USLx=b\) as the block-decoupled problem \( Sw=c \) where \(w=Lx\) and \( c=U^{-1}b \)

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.

Member Typedef Documentation

◆ V

typedef Vector<Real> ROL::SchurComplement::V
private

Definition at line 46 of file ROL_SchurComplement.hpp.

◆ PV

Definition at line 47 of file ROL_SchurComplement.hpp.

◆ OP

Definition at line 48 of file ROL_SchurComplement.hpp.

◆ UPPER

◆ LOWER

Constructor & Destructor Documentation

◆ SchurComplement() [1/2]

ROL::SchurComplement::SchurComplement ( ROL::Ptr< OP > & A,
ROL::Ptr< OP > & B,
ROL::Ptr< OP > & C,
ROL::Ptr< OP > & D,
ROL::Ptr< V > & scratch1 )
inline

Definition at line 63 of file ROL_SchurComplement.hpp.

◆ SchurComplement() [2/2]

ROL::SchurComplement::SchurComplement ( BlockOperator2< Real > & op,
ROL::Ptr< Vector< Real > > & scratch1 )
inline

Definition at line 74 of file ROL_SchurComplement.hpp.

Member Function Documentation

◆ applyLower()

void ROL::SchurComplement::applyLower ( Vector< Real > & Hv,
const Vector< Real > & v,
Real & tol )
inline

Definition at line 87 of file ROL_SchurComplement.hpp.

◆ applyLowerInverse()

void ROL::SchurComplement::applyLowerInverse ( Vector< Real > & Hv,
const Vector< Real > & v,
Real & tol )
inline

Definition at line 91 of file ROL_SchurComplement.hpp.

◆ applyUpper()

void ROL::SchurComplement::applyUpper ( Vector< Real > & Hv,
const Vector< Real > & v,
Real & tol )
inline

Definition at line 95 of file ROL_SchurComplement.hpp.

◆ applyUpperInverse()

void ROL::SchurComplement::applyUpperInverse ( Vector< Real > & Hv,
const Vector< Real > & v,
Real & tol )
inline

Definition at line 99 of file ROL_SchurComplement.hpp.

◆ getS11()

ROL::Ptr< OP > ROL::SchurComplement::getS11 ( void )
inline

Definition at line 103 of file ROL_SchurComplement.hpp.

◆ solve2()

void ROL::SchurComplement::solve2 ( Vector< Real > & Hv2,
const Vector< Real > & v2,
Real & tol )
inline

Definition at line 107 of file ROL_SchurComplement.hpp.

Member Data Documentation

◆ A_ [1/2]

ROL::Ptr<OP> ROL::SchurComplement::A_
private

Definition at line 54 of file ROL_SchurComplement.hpp.

◆ B_ [1/2]

ROL::Ptr<OP> ROL::SchurComplement::B_
private

Definition at line 54 of file ROL_SchurComplement.hpp.

◆ C_ [1/2]

ROL::Ptr<OP> ROL::SchurComplement::C_
private

Definition at line 54 of file ROL_SchurComplement.hpp.

◆ D_ [1/2]

ROL::Ptr<OP> ROL::SchurComplement::D_
private

Definition at line 54 of file ROL_SchurComplement.hpp.

◆ L_ [1/2]

ROL::Ptr<OP> ROL::SchurComplement::L_
private

Definition at line 56 of file ROL_SchurComplement.hpp.

◆ U_ [1/2]

ROL::Ptr<OP> ROL::SchurComplement::U_
private

Definition at line 56 of file ROL_SchurComplement.hpp.

◆ scratch1_

ROL::Ptr<V> ROL::SchurComplement::scratch1_
private

Definition at line 57 of file ROL_SchurComplement.hpp.

◆ A_ [2/2]

ROL::SchurComplement::A_ = op.getOperator(0,0)

Definition at line 79 of file ROL_SchurComplement.hpp.

◆ B_ [2/2]

ROL::SchurComplement::B_ = op.getOperator(0,1)

Definition at line 80 of file ROL_SchurComplement.hpp.

◆ C_ [2/2]

ROL::SchurComplement::C_ = op.getOperator(1,0)

Definition at line 81 of file ROL_SchurComplement.hpp.

◆ D_ [2/2]

ROL::SchurComplement::D_ = op.getOperator(1,1)

Definition at line 82 of file ROL_SchurComplement.hpp.

◆ U_ [2/2]

ROL::SchurComplement::U_ = ROL::makePtr<UPPER>(B_)

Definition at line 84 of file ROL_SchurComplement.hpp.

◆ L_ [2/2]

ROL::SchurComplement::L_ = ROL::makePtr<LOWER>(C_)

Definition at line 85 of file ROL_SchurComplement.hpp.


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