22 #ifndef __HERMES_COMMON_PARALUTION_SOLVER_H_
23 #define __HERMES_COMMON_PARALUTION_SOLVER_H_
25 #ifdef WITH_PARALUTION
29 #include "paralution.hpp"
43 ParalutionMatrixTypeCSR,
54 template <
typename Scalar>
66 paralution::LocalMatrix<Scalar>& get_paralutionMatrix();
69 paralution::LocalMatrix<Scalar> paralutionMatrix;
77 template <
typename Scalar>
87 virtual void alloc(
unsigned int ndofs);
91 paralution::LocalVector<Scalar>* get_paralutionVector();
94 paralution::LocalVector<Scalar>* paralutionVector;
98 namespace Preconditioners
102 template <
typename Scalar>
110 paralution::Preconditioner<paralution::LocalMatrix<Scalar>, paralution::LocalVector<Scalar>, Scalar>& get_paralutionPreconditioner();
111 static paralution::Preconditioner<paralution::LocalMatrix<Scalar>, paralution::LocalVector<Scalar>, Scalar>* return_paralutionPreconditioner(
PreconditionerType preconditionerType);
114 paralution::Preconditioner<paralution::LocalMatrix<Scalar>, paralution::LocalVector<Scalar>, Scalar>* paralutionPreconditioner;
116 #if __PARALUTION_VER >= 500
117 paralution::FSAI<paralution::LocalMatrix<Scalar>, paralution::LocalVector<Scalar>, Scalar>* saddlePoint_p_k;
120 paralution::SPAI<paralution::LocalMatrix<Scalar>, paralution::LocalVector<Scalar>, Scalar>* saddlePoint_p_s;
122 paralution::MultiColoredILU<paralution::LocalMatrix<Scalar>, paralution::LocalVector<Scalar>, Scalar >* mcilu_p;
134 static void init_paralution()
136 paralution::init_paralution();
137 paralution::set_omp_threads_paralution(
HermesCommonApi.get_integral_param_value(numThreads));
138 paralution::info_paralution();
141 static void set_threads_paralution()
143 if (
HermesCommonApi.get_integral_param_value(matrixSolverType) == SOLVER_PARALUTION_AMG ||
HermesCommonApi.get_integral_param_value(matrixSolverType) == SOLVER_PARALUTION_ITERATIVE)
145 paralution::set_omp_threads_paralution(
HermesCommonApi.get_integral_param_value(numThreads));
146 paralution::info_paralution();
150 static void deinit_paralution()
152 paralution::stop_paralution();
158 template <
typename Scalar>
162 virtual void solve(Scalar* initial_guess);
163 virtual void solve();
166 virtual int get_num_iters();
169 virtual double get_residual_norm();
172 virtual int get_matrix_size();
186 void reset_internal_solver();
189 virtual void init_internal_solver() = 0;
201 double final_residual;
204 paralution::IterativeLinearSolver<paralution::LocalMatrix<Scalar>, paralution::LocalVector<Scalar>, Scalar>*
paralutionSolver;
208 void presolve_init();
216 template <
typename Scalar>
232 virtual void init_internal_solver();
240 static paralution::IterativeLinearSolver<paralution::LocalMatrix<Scalar>, paralution::LocalVector<Scalar>, Scalar>* return_paralutionSolver(
IterSolverType type);
249 template <
typename Scalar>
263 virtual void init_internal_solver();
General (abstract) matrix representation in Hermes.
General namespace for the Hermes library.
Linear matrix solver functionality.
General (abstract) vector representation in Hermes.
Abstract class to define interface for preconditioners.
HERMES_API SparseMatrix< Scalar > * create_matrix(bool use_direct_solver=false)
Function returning a matrix according to the users's choice.
General CSR Matrix class. (can be used in umfpack, in that case use the CSCMatrix subclass...
Encapsulation of PARALUTION AMG linear solver.
Namespace containing classes for vector / matrix operations.
PreconditionerType
The preconditioner type.
General (abstract) sparse matrix representation in Hermes.
Abstract class for defining interface for Algebraic Multigrid solvers. Internal, though utilizable fo...
Basic cs (Compressed sparse) matrix classes and operations.
Vector used with MUMPS solver.
ParalutionMatrix< Scalar > * matrix
Matrix to solve.
A PARALUTION preconditioner.
HERMES_COMMON_API Hermes::Api HermesCommonApi
Global instance used inside Hermes which is also accessible to users.
Namespace for linear / nonlinear / iterative solvers.
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.
General Paralution matrix.
Abstract class for defining solver interface.
paralution::IterativeLinearSolver< paralution::LocalMatrix< Scalar >, paralution::LocalVector< Scalar >, Scalar > * paralutionSolver
Internal solver.
Abstract class for defining interface for iterative solvers. Internal, though utilizable for defining...
General functionality for preconditioners. Contains class Precond.
ABSTRACT class containing common functionality of both PARALUTION iterative and AMG linear solver...
Class representing the vector for UMFPACK.
Encapsulation of PARALUTION iterative linear solver.
ParalutionVector< Scalar > * rhs
Right hand side vector.