Reference documentation for deal.II version 9.2.0
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Public Member Functions | Public Attributes | List of all members
SolverQMRS< VectorType >::AdditionalData Struct Reference

#include <deal.II/lac/solver_qmrs.h>

Public Member Functions

 AdditionalData (const bool left_preconditioning=false, const double solver_tolerance=1.e-9, const bool breakdown_testing=true, const double breakdown_threshold=1.e-16)
 

Public Attributes

bool left_preconditioning
 
double solver_tolerance
 
bool breakdown_testing
 
double breakdown_threshold
 

Detailed Description

template<typename VectorType = Vector<double>>
struct SolverQMRS< VectorType >::AdditionalData

Standardized data struct to pipe additional data to the solver.

The user is able to switch between right and left preconditioning, that means solving the systems P-1A and AP-1 respectively, using the corresponding parameter. Note that left preconditioning means to employ the preconditioned (BiCG-)residual and otherwise the unpreconditioned one. The default is the application from the right side.

The solver_tolerance threshold is used to define the said bound below which the residual is computed exactly. See the class documentation for more information. The default value is 1e-9, that is the default solving precision multiplied by ten.

SQMR is susceptible to breakdowns (divisions by zero), so we need a parameter telling us which numbers are considered zero. The proper breakdown criterion is very unclear, so experiments may be necessary here. It is even possible to achieve convergence despite of dividing through by small numbers. There are even cases in which it is advantageous to accept such divisions because the cheap iteration cost makes the algorithm the fastest of all available indefinite iterative solvers. Nonetheless, the default breakdown threshold value is 1e-16.

Definition at line 122 of file solver_qmrs.h.

Constructor & Destructor Documentation

◆ AdditionalData()

template<typename VectorType = Vector<double>>
SolverQMRS< VectorType >::AdditionalData::AdditionalData ( const bool  left_preconditioning = false,
const double  solver_tolerance = 1.e-9,
const bool  breakdown_testing = true,
const double  breakdown_threshold = 1.e-16 
)
inlineexplicit

Constructor.

The default is right preconditioning, with the solver_tolerance chosen to be 1e-9 and the breakdown_threshold set at 1e-16.

Definition at line 130 of file solver_qmrs.h.

Member Data Documentation

◆ left_preconditioning

template<typename VectorType = Vector<double>>
bool SolverQMRS< VectorType >::AdditionalData::left_preconditioning

Flag for using a left-preconditioned version.

Definition at line 143 of file solver_qmrs.h.

◆ solver_tolerance

template<typename VectorType = Vector<double>>
double SolverQMRS< VectorType >::AdditionalData::solver_tolerance

The threshold below which the current residual is computed exactly.

Definition at line 148 of file solver_qmrs.h.

◆ breakdown_testing

template<typename VectorType = Vector<double>>
bool SolverQMRS< VectorType >::AdditionalData::breakdown_testing

Flag for breakdown testing.

Definition at line 153 of file solver_qmrs.h.

◆ breakdown_threshold

template<typename VectorType = Vector<double>>
double SolverQMRS< VectorType >::AdditionalData::breakdown_threshold

Breakdown threshold. Scalars measured to this bound are used for divisions.

Definition at line 159 of file solver_qmrs.h.


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