AMDiS 2.11-git
The Adaptive Multi-Dimensional Simulation Toolbox
 
Loading...
Searching...
No Matches
LinearSolver< Mat, VecX, VecY > Class Template Reference

Implementation of LinearSolverInterface for EIGEN solvers. More...

#include <LinearSolver.hpp>

Inherits LinearSolverInterface< M, X, Y >, LinearSolverInterface< M, X, Y >, LinearSolverInterface< M, X, Y >, and LinearSolverInterface< Matrix, VectorX, VectorY >.

Public Member Functions

 LinearSolver (std::string const &name, std::string const &prefix)
 
void init (Mat const &A) override
 Implements LinearSolverInterface::init()
 
void finish () override
 Implements LinearSolverInterface::finish()
 
void apply (VecX &x, VecY const &b, Dune::InverseOperatorResult &stat) override
 Implements LinearSolverInterface::apply()
 
 LinearSolver (std::string const &name, std::string const &prefix)
 
void init (Mat const &A) override
 
void finish () override
 Cleanup the solver, e.g. free the previously created factorization.
 
void apply (VecX &x, VecY const &b, Dune::InverseOperatorResult &stat) override
 Implements Dune::InverseOperator::apply()
 
 LinearSolver (std::string const &name, std::string const &prefix)
 
void init (Mat const &A) override
 Implements LinearSolverInterface::init()
 
void finish () override
 Implements LinearSolverInterface::finish()
 
void apply (VecX &x, VecY const &b, Dune::InverseOperatorResult &stat) override
 Implements LinearSolverInterface::apply()
 
 LinearSolver (std::string const &, std::string const &prefix)
 Constructor.
 
void init (Matrix const &A) override
 Implements LinearSolverInterface::init()
 
void finish () override
 Implements LinearSolverInterface::finish()
 
void apply (VectorX &x, VectorY const &b, Dune::InverseOperatorResult &stat) override
 Implements LinearSolverInterface::apply()
 
KSP ksp ()
 

Protected Member Functions

virtual void initKSP (KSP ksp, std::string prefix) const
 

Protected Attributes

std::string prefix_
 
int info_ = 0
 
KSP ksp_
 
bool initialized_ = false
 

Detailed Description

template<class Mat, class VecX, class VecY = VecX>
class AMDiS::LinearSolver< Mat, VecX, VecY >

Implementation of LinearSolverInterface for EIGEN solvers.

Wrapper around PETSc KSP and PC objects to solve a linear system.

Implementation of LinearSolverInterface for MTL solvers.

Implementation of RunnerInterface for ISTL solvers.

Configure the KSP and PC types using initfile parameters, based on an initfile prefix [prefix]: All parameters are names as the PETSc command-line parameters with underscore replaced by space and removing the type postfix, e.g. instead of ksp_type write ksp, instead of mat_solver_type write mat solver.

Examples:

[prefix]->max it: 100 % maximum solver iterations
[prefix]->rtol: 1.e-10 % relative residual tolerance
[prefix]->pc: bjacobi % preconditioner type
[prefix]->pc->sub ksp: preonly % sub KSP type used on the blocks
[prefix]->pc->sub ksp->pc: ilu % preconditioner of the sub KSP type

For the configuration of sub PC types and sub KSP types, one can use the current parameter as new prefix, e.g. [sub-prefix] := [prefix]->pc, or [sub-sub-prefix] := [prefix]->pc->sub ksp. Those sub PC and sub KSP types can be configured with all the possible parameters.

For the configuration using command-line arguments possible a ksp-prefix or pc-prefix must be assigned to distinguish different KSP and PC objects. Therefore, for each initfile prefix, a PETSc prefix can be set: [prefix]->prefix: name, where name can be used on the commandline, e.g. -name_ksp_type fgmres.

Constructor & Destructor Documentation

◆ LinearSolver()

template<class Mat , class VecX , class VecY = VecX>
LinearSolver ( std::string const &  ,
std::string const &  prefix 
)
inline

Constructor.

Stores the initfile prefix to configure the ksp and pc solver.

Reads an info flag [prefix]->info: 0 ... No solver convergence information 1 ... Minimal output, print residual every 10th iteration 2 ... Full convergence output. Print residual, true residual and rel. residual every iteration.

References Initfile::get().

Member Function Documentation

◆ apply()

template<class Mat , class VecX , class VecY = VecX>
void apply ( VectorX &  x,
VectorY const &  b,
Dune::InverseOperatorResult &  stat 
)
inlineoverridevirtual

◆ finish() [1/4]

template<class Mat , class VecX , class VecY = VecX>
void finish ( )
inlineoverridevirtual

◆ finish() [2/4]

template<class Mat , class VecX , class VecY = VecX>
void finish ( )
inlineoverridevirtual

Cleanup the solver, e.g. free the previously created factorization.

Implements LinearSolverInterface< M, X, Y >.

◆ finish() [3/4]

template<class Mat , class VecX , class VecY = VecX>
void finish ( )
inlineoverridevirtual

◆ finish() [4/4]

template<class Mat , class VecX , class VecY = VecX>
void finish ( )
inlineoverridevirtual

◆ init()

template<class Mat , class VecX , class VecY = VecX>
void init ( Matrix const &  A)
inlineoverridevirtual

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