22 #ifndef __HERMES_COMMON_LINEAR_MATRIX_SOLVER_H_
23 #define __HERMES_COMMON_LINEAR_MATRIX_SOLVER_H_
99 template <
typename Scalar>
109 virtual void free() = 0;
113 virtual void solve() = 0;
118 virtual void solve(Scalar* initial_guess) = 0;
122 Scalar *get_sln_vector();
129 virtual int get_matrix_size() = 0;
139 virtual void set_reuse_scheme();
142 virtual void use_node_wise_ordering(
unsigned int num_pdes);
143 virtual void use_equations_wise_ordering();
146 virtual double get_residual_norm();
167 bool node_wise_ordering;
172 template <
typename Scalar>
177 static creation create_external_solver;
198 template <
typename Scalar>
204 void solve(Scalar* initial_guess);
210 virtual std::string command() = 0;
215 template <
typename Scalar>
220 virtual void solve() = 0;
221 virtual void solve(Scalar* initial_guess);
232 AbsoluteTolerance = 0,
233 RelativeTolerance = 1,
234 DivergenceTolerance = 2
238 template <
typename Scalar>
245 virtual int get_num_iters() = 0;
248 virtual double get_residual_norm() = 0;
252 virtual void set_tolerance(
double tol);
261 virtual void set_max_iters(
int iters);
286 template <
typename Scalar>
309 template <
typename Scalar>
328 template<
typename Scalar>
General (abstract) matrix representation in Hermes.
virtual void solve(Scalar *initial_guess)
virtual unsigned int get_size() const
General namespace for the Hermes library.
General (abstract) vector representation in Hermes.
Abstract class to define interface for preconditioners.
double tolerance
Convergence tolerance.
Namespace containing classes for vector / matrix operations.
CSCMatrix< Scalar > * m
Matrix to solve.
bool precond_yes
Whether the solver is preconditioned.
SimpleVector< Scalar > * rhs
Right hand side vector.
PreconditionerType
The preconditioner type.
CSCMatrix< Scalar > * get_matrix()
General (abstract) sparse matrix representation in Hermes.
IterSolverType smootherSolverType
Smoother.
Class using time measurement Can be used directly (is not abstract), so one can use e...
Abstract class for defining interface for Algebraic Multigrid solvers. Internal, though utilizable fo...
An example class for using external solvers that run a command and store the result in a file...
Basic cs (Compressed sparse) matrix classes and operations.
Vector used with MUMPS solver.
Special-purpose abstract class for using external solvers. For examples implementation, see the class SimpleExternalSolver.
Scalar * sln
Solution vector.
virtual int get_matrix_size()
Get size of matrix.
General CSC Matrix class. (can be used in umfpack, in that case use the CSCMatrix subclass...
Abstract middle-class for solvers that work in a loop of a kind (iterative, multigrid, ...)
HERMES_API LinearMatrixSolver< Scalar > * create_linear_solver(Matrix< Scalar > *matrix, Vector< Scalar > *rhs, bool use_direct_solver=false)
Function returning a solver according to the users's choice.
existing factorization data.
factorization / operator.
LoopSolverToleranceType toleranceType
File containing definition of exceptions classes.
Mixins classes for algebraic purposes.
Abstract class for defining solver interface.
MatrixStructureReuseScheme
Namespace containing objects for preconditioners.
Abstract class for defining interface for iterative solvers. Internal, though utilizable for defining...
unsigned int n_eq
Number of equations in a system of PDEs.
Basic vector classes and operations.
General functionality for preconditioners. Contains class Precond.
Mix-in classes for one functionality, for various classes to be derived from.
int max_iters
Maximum number of iterations.
pattern as the one already factorized.
Method is not overriden and should be.
virtual double get_residual_norm()
Returns 0. - for compatibility.
SimpleVector< Scalar > * get_rhs()
MatrixStructureReuseScheme reuse_scheme
Factorization scheme.
Class the output of which is loggable, i.e. that uses functionality of info(), warn() Contains the cl...