iMSTK
Interactive Medical Simulation Toolkit
imstkIterativeLinearSolver.h
1 /*
2 ** This file is part of the Interactive Medical Simulation Toolkit (iMSTK)
3 ** iMSTK is distributed under the Apache License, Version 2.0.
4 ** See accompanying NOTICE for details.
5 */
6 
7 #pragma once
8 
9 #include "imstkLinearSolver.h"
10 
11 namespace imstk
12 {
18 class IterativeLinearSolver : public LinearSolver<SparseMatrixd>
19 {
20 public:
21  IterativeLinearSolver() = default;
22  ~IterativeLinearSolver() override = default;
23 
27  //virtual void iterate(Vectord& x, bool updateResidual = true) = 0;
28 
32  virtual void setMaxNumIterations(const size_t maxIter);
33  virtual size_t getMaxNumIterations() const;
34 
38  virtual const Vectord& getResidualVector();
39  virtual const Vectord& getResidualVector(const Vectord& x);
40 
44  virtual double getResidual(const Vectord& x);
45 
49  void print() const override;
50 
54  virtual void solve(Vectord& x) override;
55 
59  bool isIterative() const override
60  {
61  return true;
62  }
63 
64 protected:
65  size_t m_maxIterations = 100;
66  Vectord m_residual;
67 };
68 } // namespace imstk
Base class for iterative linear solvers.
size_t m_maxIterations
Maximum number of iterations to be performed.
virtual void solve(Vectord &x) override
Solve the linear system using Gauss-Seidel iterations.
Vectord m_residual
Storage for residual vector.
Compound Geometry.
virtual void setMaxNumIterations(const size_t maxIter)
Do one iteration of the method.
void print() const override
Print solver information.
bool isIterative() const override
Returns true if the solver is iterative.
Base class for linear solvers.
virtual const Vectord & getResidualVector()
Return residual vector.
virtual double getResidual(const Vectord &x)
Return residue in 2-norm.