12#ifndef ARCANE_CORE_MATVEC_MATRIX_H
13#define ARCANE_CORE_MATVEC_MATRIX_H
17#include "arcane/utils/Array.h"
18#include "arcane/utils/Numeric.h"
20#include "arcane/core/matvec/Vector.h"
25namespace Arcane::MatVec
43class ARCANE_CORE_EXPORT Matrix
49 Matrix(
const Matrix& rhs);
51 void operator=(
const Matrix& rhs);
73 void dump(std::ostream& o)
const;
121 virtual void apply(
Vector& out_vec,
const Vector& vec) = 0;
127class ARCANE_CORE_EXPORT ConjugateGradientSolver
131 ConjugateGradientSolver() =
default;
133 Integer nbIteration()
const {
return m_nb_iteration; }
134 Real residualNorm()
const {
return m_residual_norm; }
135 void setMaxIteration(
Integer max_iteration)
137 m_max_iteration = max_iteration;
143 Real m_residual_norm = 0.0;
144 Integer m_max_iteration = 5000;
161class ARCANE_CORE_EXPORT DiagonalPreconditioner
166 explicit DiagonalPreconditioner(
const Matrix& matrix);
174 Vector m_inverse_diagonal;
188 void negateVector(
Vector& vec);
198 Matrix matrixMatrixProductFast(
const Matrix& left_matrix,
const Matrix& right_matrix);
204 const Matrix& right_matrix);
216class ARCANE_CORE_EXPORT AMGPreconditioner
221 explicit AMGPreconditioner(
ITraceMng* tm)
224 ~AMGPreconditioner()
override;
228 virtual void build(
const Matrix& matrix);
232 void apply(
Vector& out_vec,
const Vector& vec)
override;
237 AMG* m_amg =
nullptr;
243class ARCANE_CORE_EXPORT AMGSolver
251 virtual ~AMGSolver();
255 virtual void build(
const Matrix& matrix);
259 virtual void solve(
const Vector& vector_b,
Vector& vector_x);
264 AMG* m_amg =
nullptr;
Interface du gestionnaire de traces.
Solveur direct utilisant le pivot de gauss.
Interface d'un préconditionneur.
Matrice avec stockage CSR.
Matrice avec stockage CSR.
MatrixImpl * m_impl
Implémentation.
static Matrix readHypre(const String &filename)
Lit la matrice au format Hypre.
void sortDiagonale()
Arrange le stockage pour que la diagonale soit le premier élément.
IntegerConstArrayView rowsIndex() const
Indices des premiers éléments de chaque ligne.
Real value(Integer row, Integer column) const
Retourne la valeur d'un élément de la matrice.
void setRowsSize(IntegerConstArrayView rows_size)
Positionne le nombre d'éléments non nuls de chaque ligne.
void setValues(IntegerConstArrayView columns, RealConstArrayView values)
Positionne les valeurs des éléments de la matrice.
IntegerConstArrayView columns() const
Indices des colonnes des valeurs.
void setValue(Integer row, Integer column, Real value)
Positionne la valeur d'un élément de la matrice.
static Matrix read(const String &filename)
Lit la matrice au format X Y.
void dump(std::ostream &o) const
Imprime la matrice.
RealConstArrayView values() const
Valeurs de la matrice.
Matrix clone() const
Clone la matrice.
Vecteur d'algèbre linéraire.
Chaîne de caractères unicode.
Int32 Integer
Type représentant un entier.
ArrayView< Integer > IntegerArrayView
Equivalent C d'un tableau à une dimension d'entiers.
double Real
Type représentant un réel.
ConstArrayView< Integer > IntegerConstArrayView
Equivalent C d'un tableau à une dimension d'entiers.
ArrayView< Real > RealArrayView
Equivalent C d'un tableau à une dimension de réels.
ConstArrayView< Real > RealConstArrayView
Equivalent C d'un tableau à une dimension de réels.