NEML2 2.1.0
Loading...
Searching...
No Matches

Linear solver using the Schur complement factorization. More...

Detailed Description

Linear solver using the Schur complement factorization.

Solves a block-partitioned system where the system matrix A has at least two variable groups. Let p denote the primary group index and s the Schur group index. The block system is

[ A_pp A_ps ] [ x_p ] [ b_p ] [ A_sp A_ss ] [ x_s ] = [ b_s ]

The Schur complement factorization proceeds as

Y = A_pp^{-1} A_ps (primary_solver) z = A_pp^{-1} b_p (primary_solver) S = A_ss - A_sp Y (dense arithmetic) d = b_s - A_sp z (dense arithmetic) x_s = S^{-1} d (schur_solver) x_p = z - Y x_s (dense arithmetic)

The same factorization is used for the matrix RHS overload (AX = B).

#include <SchurComplement.h>

Inheritance diagram for SchurComplement:

Public Member Functions

 SchurComplement (const OptionSet &options)
AssembledVector solve (const AssembledMatrix &, const AssembledVector &) const override
 Solve Ax = b for x.
AssembledMatrix solve (const AssembledMatrix &, const AssembledMatrix &) const override
 Solve AX = B for X.
Public Member Functions inherited from LinearSolver
 LinearSolver (const OptionSet &options)
Public Member Functions inherited from Solver
 Solver (const OptionSet &options)
 Construct a new Solver object.
virtual void to (const TensorOptions &)
 Change the device and dtype of the solver's internal data.
Public Member Functions inherited from NEML2Object
 NEML2Object ()=delete
 NEML2Object (NEML2Object &&)=delete
 NEML2Object (const NEML2Object &)=delete
NEML2Objectoperator= (NEML2Object &&)=delete
NEML2Objectoperator= (const NEML2Object &)=delete
virtual ~NEML2Object ()=default
 NEML2Object (const OptionSet &options)
 Construct a new NEML2Object object.
const OptionSetinput_options () const
virtual void setup ()
 Setup this object.
const std::string & name () const
 A readonly reference to the object's name.
std::string type () const
 The object's type.
const std::string & path () const
 A readonly reference to the object's path.
const std::string & doc () const
 A readonly reference to the object's docstring.
Factoryfactory () const
 Get the factory that created this object.
const Settingssettings () const
 Settings.
template<typename T = NEML2Object>
const T * host () const
 Get a readonly pointer to the host.
template<typename T = NEML2Object>
T * host ()
 Get a writable pointer to the host.
template<typename T>
const T & resolve_tensor (const std::string &name)
 Resolve a TensorName to a Tensor.
template<class T>
std::shared_ptr< T > get_object (const std::string &section, const std::string &name)
template<class T = EquationSystem>
std::shared_ptr< T > get_es (const std::string &name)
 Get an equation system from the factory.
template<class T = Solver>
std::shared_ptr< T > get_solver (const std::string &name)
 Get a solver from the factory.
template<class T = Data>
std::shared_ptr< T > get_data (const std::string &name)
 Get a data from the factory.
template<class T = Model>
std::shared_ptr< T > get_model (const std::string &name)
 Get a model from the factory.
template<class T = Driver>
std::shared_ptr< T > get_driver (const std::string &name)
 Get a driver from the factory.
template<class T = WorkScheduler>
std::shared_ptr< T > get_scheduler (const std::string &name)
 Get a scheduler from the factory.

Static Public Member Functions

static OptionSet expected_options ()
Static Public Member Functions inherited from LinearSolver
static OptionSet expected_options ()
Static Public Member Functions inherited from Solver
static OptionSet expected_options ()
Static Public Member Functions inherited from NEML2Object
static OptionSet expected_options ()

Additional Inherited Members

Public Attributes inherited from Solver
const bool verbose
 Whether to print additional (debugging) information during the solve.
Protected Member Functions inherited from LinearSolver
bool check_errors () const
 Whether to check for errors after solving.
Protected Member Functions inherited from NEML2Object
VariableName history_name (const VariableName &var, std::size_t nstep) const
 Helper method to wrap a variable name into its history form.
VariableName rate_name (const VariableName &var) const
 Helper method to wrap a variable name into its rate form.
VariableName residual_name (const VariableName &var) const
 Helper method to wrap a variable name into its residual form.

Constructor & Destructor Documentation

◆ SchurComplement()

SchurComplement ( const OptionSet & options)

Member Function Documentation

◆ expected_options()

OptionSet expected_options ( )
static

◆ solve() [1/2]

AssembledMatrix solve ( const AssembledMatrix & ,
const AssembledMatrix &  ) const
overridevirtual

Solve AX = B for X.

Implements LinearSolver.

◆ solve() [2/2]

AssembledVector solve ( const AssembledMatrix & ,
const AssembledVector &  ) const
overridevirtual

Solve Ax = b for x.

Implements LinearSolver.