| 
    Template Numerical Library version\ main:6a1fe78
    
   | 
 
Iterative solver of linear systems based on the BICGStab(l) method. More...
#include <TNL/Solvers/Linear/BICGStabL.h>


Public Types | |
| using | ConstVectorViewType = typename Base::ConstVectorViewType | 
| Type for constant vector view.  | |
| using | DeviceType = typename Base::DeviceType | 
| Device where the solver will run on and auxiliary data will alloacted on.  | |
| using | IndexType = typename Base::IndexType | 
| Type for indexing.  | |
| using | RealType = typename Base::RealType | 
| Floating point type used for computations.  | |
| using | VectorViewType = typename Base::VectorViewType | 
| Type for vector view.  | |
| Public Types inherited from TNL::Solvers::Linear::LinearSolver< Matrix > | |
| using | ConstVectorViewType = typename Traits< Matrix >::ConstVectorViewType | 
| Type for constant vector view.  | |
| using | DeviceType = typename Matrix::DeviceType | 
| Device where the solver will run on and auxiliary data will alloacted on.   | |
| using | IndexType = typename Matrix::IndexType | 
| Type for indexing.  | |
| using | MatrixPointer = std::shared_ptr< std::add_const_t< MatrixType > > | 
| Type of shared pointer to the matrix.  | |
| using | MatrixType = Matrix | 
| Type of the matrix representing the linear system.  | |
| using | PreconditionerPointer = std::shared_ptr< std::add_const_t< PreconditionerType > > | 
| Type of shared pointer to the preconditioner.  | |
| using | PreconditionerType = Preconditioners::Preconditioner< MatrixType > | 
| Type of preconditioner.  | |
| using | RealType = typename Matrix::RealType | 
| Floating point type used for computations.  | |
| using | VectorViewType = typename Traits< Matrix >::VectorViewType | 
| Type for vector view.  | |
| Public Types inherited from TNL::Solvers::IterativeSolver< Matrix::RealType, Matrix::IndexType > | |
| using | SolverMonitorType | 
| Type of an object used for monitoring of the convergence.  | |
Public Member Functions | |
| bool | setup (const Config::ParameterContainer ¶meters, const String &prefix="") override | 
| Method for setup of the linear iterative solver based on configuration parameters.   | |
| bool | solve (ConstVectorViewType b, VectorViewType x) override | 
| Method for solving of a linear system.   | |
| Public Member Functions inherited from TNL::Solvers::Linear::LinearSolver< Matrix > | |
| virtual | ~LinearSolver ()=default | 
| Default destructor.  | |
| virtual void | setMatrix (const MatrixPointer &matrix) | 
| Set the matrix of the linear system.   | |
| void | setPreconditioner (const PreconditionerPointer &preconditioner) | 
| Set the preconditioner.   | |
| Public Member Functions inherited from TNL::Solvers::IterativeSolver< Matrix::RealType, Matrix::IndexType > | |
| IterativeSolver ()=default | |
| Default constructor.  | |
| bool | checkConvergence () | 
| Checks whether the convergence occurred already.   | |
| bool | checkNextIteration () | 
| Checks if the solver is allowed to do the next iteration.   | |
| const Matrix::RealType & | getConvergenceResidue () const | 
| Gets the the convergence threshold.   | |
| const Matrix::RealType & | getDivergenceResidue () const | 
| Gets the limit for the divergence criterion.   | |
| const Matrix::IndexType & | getIterations () const | 
| Gets the number of iterations performed by the solver so far.   | |
| const Matrix::IndexType & | getMaxIterations () const | 
| Gets the maximal number of iterations the solver is allowed to perform.   | |
| const Matrix::IndexType & | getMinIterations () const | 
| Gets the minimal number of iterations the solver is supposed to do.   | |
| const Matrix::RealType & | getResidue () const | 
| Gets the residue reached at the current iteration.   | |
| bool | nextIteration () | 
| Proceeds to the next iteration.   | |
| void | resetIterations () | 
| Sets the the number of the current iterations to zero.  | |
| void | setConvergenceResidue (const Matrix::RealType &convergenceResidue) | 
| Sets the threshold for the convergence.   | |
| void | setDivergenceResidue (const Matrix::RealType &divergenceResidue) | 
| Sets the residue limit for the divergence criterion.   | |
| void | setMaxIterations (const Matrix::IndexType &maxIterations) | 
| Sets the maximal number of iterations the solver is allowed to perform.   | |
| void | setMinIterations (const Matrix::IndexType &minIterations) | 
| Sets the minimal number of iterations the solver is supposed to do.   | |
| void | setRefreshRate (const Matrix::IndexType &refreshRate) | 
| Sets the refresh rate (in milliseconds) for the solver monitor.   | |
| void | setResidue (const Matrix::RealType &residue) | 
| Sets the residue reached at the current iteration.   | |
| void | setSolverMonitor (SolverMonitorType &solverMonitor) | 
| Sets the solver monitor object.   | |
| bool | setup (const Config::ParameterContainer ¶meters, const std::string &prefix="") | 
| Method for setup of the iterative solver based on configuration parameters.   | |
Static Public Member Functions | |
| static void | configSetup (Config::ConfigDescription &config, const String &prefix="") | 
| This is method defines configuration entries for setup of the linear iterative solver.   | |
| Static Public Member Functions inherited from TNL::Solvers::Linear::LinearSolver< Matrix > | |
| static void | configSetup (Config::ConfigDescription &config, const String &prefix="") | 
| This method defines configuration entries for setup of the linear iterative solver.   | |
| Static Public Member Functions inherited from TNL::Solvers::IterativeSolver< Matrix::RealType, Matrix::IndexType > | |
| static void | configSetup (Config::ConfigDescription &config, const std::string &prefix="") | 
| This method defines configuration entries for setup of the iterative solver.   | |
Protected Types | |
| using | DeviceVector = Containers::Vector< RealType, DeviceType, IndexType > | 
| using | HostVector = Containers::Vector< RealType, Devices::Host, IndexType > | 
| using | VectorType = typename Traits::VectorType | 
Protected Member Functions | |
| void | compute_residue (VectorViewType r, ConstVectorViewType x, ConstVectorViewType b) | 
| void | preconditioned_matvec (ConstVectorViewType src, VectorViewType dst) | 
| void | setSize (const VectorViewType &x) | 
Protected Attributes | |
| int | ell = 1 | 
| bool | exact_residue = false | 
| HostVector | g_0 | 
| HostVector | g_1 | 
| HostVector | g_2 | 
| IndexType | ldSize = 0 | 
| VectorType | M_tmp | 
| DeviceVector | R | 
| VectorType | r_ast | 
| VectorType | res_tmp | 
| HostVector | sigma | 
| IndexType | size = 0 | 
| HostVector | T | 
| DeviceVector | U | 
| Protected Attributes inherited from TNL::Solvers::Linear::LinearSolver< Matrix > | |
| MatrixPointer | matrix = nullptr | 
| PreconditionerPointer | preconditioner = nullptr | 
| Protected Attributes inherited from TNL::Solvers::IterativeSolver< Matrix::RealType, Matrix::IndexType > | |
| Matrix::RealType | convergenceResidue | 
| Matrix::IndexType | currentIteration | 
| Matrix::RealType | currentResidue | 
| Matrix::RealType | divergenceResidue | 
| Matrix::IndexType | maxIterations | 
| Matrix::IndexType | minIterations | 
| Matrix::IndexType | refreshRate | 
| std::ofstream | residualHistoryFile | 
| std::string | residualHistoryFileName | 
| IterativeSolverMonitor< double > * | solverMonitor | 
Iterative solver of linear systems based on the BICGStab(l) method.
BICGStabL implements an iterative solver for non-symmetric linear systems, using the BiCGstab(l) algorithm described in [1] and [2]. It is a generalization of the stabilized biconjugate-gradient (BiCGstab) algorithm proposed by van der Vorst [3]. BiCGstab(1) is equivalent to BiCGstab, and BiCGstab(2) is a slightly more efficient version of the BiCGstab2 algorithm by Gutknecht [4], while BiCGstab(l>2) is a further generalization.
[1] Gerard L. G. Sleijpen and Diederik R. Fokkema, "BiCGstab(l) for linear equations involving unsymmetric matrices with complex spectrum", Electronic Trans. on Numerical Analysis 1, 11-32 (1993).
[2] Gerard L. G. Sleijpen, Henk A. van der Vorst, and Diederik R. Fokkema, "BiCGstab(l) and other Hybrid Bi-CG Methods", Numerical Algorithms 7, 75-109 (1994).
[3] Henk A. van der Vorst, "Bi-CGSTAB: A fast and smoothly converging variant of Bi-CG for the solution of nonsymmetric linear systems, SIAM Journal on scientific and Statistical Computing 13.2, 631-644 (1992). [4] Martin H. Gutknecht, "Variants of BiCGStab for matrices with complex spectrum", IPS Research Report No. 91-14 (1991).
See TNL::Solvers::Linear::LinearSolver for example of showing how to use the linear solvers.
| Matrix | is type of matrix describing the linear system. | 
      
  | 
  static | 
This is method defines configuration entries for setup of the linear iterative solver.
In addition to config entries defined by IterativeSolver::configSetup, this method defines the following:
bicgstab-ell - number of Bi-CG iterations before the MR part starts.
bicgstab-exact-residue - says whether the BiCGstab should compute the exact residue in each step (true) or to use a cheap approximation (false).
| config | contains description of configuration parameters. | 
| prefix | is a prefix of particular configuration entries. | 
      
  | 
  overridevirtual | 
Method for setup of the linear iterative solver based on configuration parameters.
| parameters | contains values of the define configuration entries. | 
| prefix | is a prefix of particular configuration entries. | 
Reimplemented from TNL::Solvers::Linear::LinearSolver< Matrix >.
      
  | 
  overridevirtual | 
Method for solving of a linear system.
See LinearSolver::solve for more details.
| b | vector with the right-hand side of the linear system. | 
| x | vector for the solution of the linear system. | 
Implements TNL::Solvers::Linear::LinearSolver< Matrix >.