Linear Solvers¶
Intel MKL Pardiso¶
Warning
doxygenclass: Cannot find class “mocca::mkl::MatrixTypes” in doxygen xml output for project “mocca” from directory: doxygen/xml/
-
template<typename T>
class PardisoSolver : public mocca::internal::Solver<PardisoSolver<T>>¶ A sparse direct factorization and solver from the Intel MKL PARDISO library.
This class solve a sparse linear system \( \mathbb{A} \vec{x} = \vec{b}\) via direct LLT (symmetric positive definite), LDLT (symmetric undefinite), QLUT (structurally symmetric) or QLUR (asymmetric) factorization using the Intel MKL PARDISO library. See https://www.intel.com/content/www/us/en/docs/onemkl/developer-reference-c/2023-2/onemkl-pardiso-parallel-direct-sparse-solver-iface.html for more information.
Note
This solver is only available when using the Intel MKL (i.e.,
MOCCA_BLAS=MKL
). Not all parameter options are supported.Warning
This solver only supports CSRMatrix. The template parameter
T
corresponds to the element type of the matrix.Public Functions
-
inline PardisoSolver()¶
Default constructor. Initialize the parameters of the solver to their default values.
-
inline PardisoSolver(CSRMatrix<T> &mat, param_t type)¶
Constructs a new solver and sets the coefficient matrix. Immediately after, this routine will analyze and factorize the matrix.
- Parameters:
mat – [in] coefficient matrix
type – [in] type of coefficient matrix. See mkl::MatrixType for all the options.
-
inline virtual ~PardisoSolver()¶
Destructor. Free the internal allocated resources.
-
inline std::array<param_t, 64> ¶m()¶
- Returns:
a reference to the parameters of the solver.
-
inline void set_matrix(CSRMatrix<T> &mat, param_t type)¶
Sets the coefficient matrix and then right after analyzes and factorizes the matrix.
- Parameters:
mat – [in] coefficient matrix
type – [in] type of coefficient matrix. See mkl::MatrixType for all the options.
-
template<internal::TypeLayout L>
inline evaluator<L> solve(CSRMatrix<T> &A, param_t type, const Vector<T, L> &b)¶ Solve the sparse linear system \( \mathbb{A} \vec{x} = \vec{b}\).
- Parameters:
A – [in] coefficient matrix
type – [in] type of coefficient matrix. See mkl::MatrixType for all the options.
b – [in] right hand side
-
template<internal::TypeLayout L>
inline evaluator<L> solve(const Vector<T, L> &b)¶ Solve the sparse linear system \( \mathbb{A} \vec{x} = \vec{b}\).
Note
You must first set the coefficient matrix before calling this method using either the constructor or the
set_matrix()
method.- Parameters:
b – [in] right hand side
-
inline void free()¶
Free all the internal resources allocated by the solver.
-
inline PardisoSolver()¶