Arcane  v3.16.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
AlephMatrix.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* AlephMatrix.h (C) 2000-2024 */
9/* */
10/*---------------------------------------------------------------------------*/
11#ifndef ARCANE_ALEPH_MATRIX_H
12#define ARCANE_ALEPH_MATRIX_H
13/*---------------------------------------------------------------------------*/
14/*---------------------------------------------------------------------------*/
15
16#include "arcane/aleph/AlephGlobal.h"
17
18#include <map>
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
31class ARCANE_ALEPH_EXPORT AlephMatrix
32: public TraceAccessor
33{
34 public:
35
36 explicit AlephMatrix(AlephKernel*);
37 ~AlephMatrix();
38
39 public:
40 void create(void);
41 void create(IntegerConstArrayView, bool = false);
42 void create_really(void);
43 void reset(void);
45 void reSetValuesIn(AlephMatrix*, Array<Int32*>&);
46 void reAddValuesIn(AlephMatrix*, Array<Int32*>&);
47 void updateKnownRowCol(Integer, Integer, Real);
48 void rowMapMapCol(Integer, Integer, Real);
49 void addValue(const VariableRef&, const Item&,
50 const VariableRef&, const Item&, const Real);
51 void addValue(const VariableRef&, const ItemEnumerator&,
52 const VariableRef&, const ItemEnumerator&, const Real);
53 void setValue(const VariableRef&, const Item&,
54 const VariableRef&, const Item&, const Real);
55 void setValue(const VariableRef&, const ItemEnumerator&,
56 const VariableRef&, const ItemEnumerator&, const Real);
57 void addValue(Integer, Integer, Real);
59 void writeToFile(const String);
60 void startFilling();
61 void assemble();
63 void reassemble(Integer&, Real*);
65 void solve(AlephVector*, AlephVector*, Integer&, Real*, AlephParams*, bool = false);
67
68 private:
69
70 AlephKernel* m_kernel = nullptr;
71 Integer m_index;
72 ArrayView<Integer> m_ranks;
73 bool m_participating_in_solver = false;
74 IAlephMatrix* m_implementation = nullptr;
75
76 private:
77
78 // Matrice utilisée dans le cas où nous sommes le solveur
79 MultiArray2<AlephInt> m_aleph_matrix_buffer_rows;
80 MultiArray2<AlephInt> m_aleph_matrix_buffer_cols;
81 MultiArray2<Real> m_aleph_matrix_buffer_vals;
82 // Tableaux tampons des setValues
83 Integer m_setValue_idx;
84 UniqueArray<AlephInt> m_setValue_row;
85 UniqueArray<AlephInt> m_setValue_col;
86 UniqueArray<Real> m_setValue_val;
87
88 private: // Tableaux tampons des addValues
89 typedef std::map<Integer, Integer> colMap;
90 typedef std::map<Integer, colMap*> rowColMap;
91 rowColMap m_row_col_map;
92 Integer m_addValue_idx;
93 UniqueArray<Integer> m_addValue_row;
94 UniqueArray<Integer> m_addValue_col;
95 UniqueArray<Real> m_addValue_val;
96
97 private: // Tableaux des requètes
98 UniqueArray<Parallel::Request> m_aleph_matrix_mpi_data_requests;
99 UniqueArray<Parallel::Request> m_aleph_matrix_mpi_results_requests;
100
101 private: // Résultats. Placés ici afin de les conserver hors du scope de la fonction les utilisant
102 UniqueArray<Int32> m_aleph_matrix_buffer_n_iteration;
103 UniqueArray<Real> m_aleph_matrix_buffer_residual_norm;
104};
105
106/*---------------------------------------------------------------------------*/
107/*---------------------------------------------------------------------------*/
108
109} // End namespace Arcane
110
111/*---------------------------------------------------------------------------*/
112/*---------------------------------------------------------------------------*/
113
114#endif
void solve(AlephVector *, AlephVector *, Integer &, Real *, AlephParams *, bool=false)
'Poste' le solver au scheduler de façon asynchrone ou pas
void reSetValuesIn(AlephMatrix *, Array< Int32 * > &)
reSetValuesIn rejoue les setValue avec les indexes calculés via l'AlephIndexing
void startFilling()
Permet de spécifier le début d'une phase de remplissage.
void solveNow(AlephVector *, AlephVector *, AlephVector *, Integer &, Real *, AlephParams *)
Résout le système linéraire.
void create_really(void)
create_really transmet l'ordre de création à la bibliothèque externe
void setValue(const VariableRef &, const Item &, const VariableRef &, const Item &, const Real)
setValue à partir d'arguments en IVariables, Items et Real
void reset(void)
reset pour flusher les tableaux des [set&add]Value
void reassemble(Integer &, Real *)
Déclenche l'ordre de récupération des résultats.
void reAddValuesIn(AlephMatrix *, Array< Int32 * > &)
reAddValuesIn rejoue les addValue avec les indexes calculés via l'AlephIndexing
void assemble()
assemble les matrices avant résolution
void writeToFile(const String)
Déclenche l'écriture de la matrice dans un fichier.
Integer reIdx(Integer, Array< Int32 * > &)
reIdx recherche la correspondance de l'AlephIndexing
void reassemble_waitAndFill(Integer &, Real *)
Synchronise les réceptions des résultats.
void assemble_waitAndFill()
assemble_waitAndFill attend que les requètes précédemment postées aient été traitées
Paramètres d'un système linéraire.
Definition AlephParams.h:34
Vecteur d'un système linéaire.
Definition AlephVector.h:33
Vue modifiable d'un tableau d'un type T.
Tableau d'items de types quelconques.
Enumérateur sur une liste d'entités.
Classe de base d'un élément de maillage.
Definition Item.h:83
Classe de base des tableau 2D à taille multiple.
Definition MultiArray2.h:61
Chaîne de caractères unicode.
TraceAccessor(ITraceMng *m)
Construit un accesseur via le gestionnaire de trace m.
Vecteur 1D de données avec sémantique par valeur (style STL).
Référence à une variable.
Definition VariableRef.h:56
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
double Real
Type représentant un réel.
ConstArrayView< Integer > IntegerConstArrayView
Equivalent C d'un tableau à une dimension d'entiers.
Definition UtilsTypes.h:573