Arcane  v3.14.10.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*);
38
39 public:
40 void create(void);
41 void create(IntegerConstArrayView, bool = false);
42 void create_really(void);
43 void reset(void);
44 Integer reIdx(Integer, Array<Int32*>&);
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);
58 void setValue(Integer, Integer, Real);
59 void writeToFile(const String);
60 void startFilling();
61 void assemble();
62 void assemble_waitAndFill();
63 void reassemble(Integer&, Real*);
64 void reassemble_waitAndFill(Integer&, Real*);
65 void solve(AlephVector*, AlephVector*, Integer&, Real*, AlephParams*, bool = false);
66 void solveNow(AlephVector*, AlephVector*, AlephVector*, Integer&, Real*, AlephParams*);
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
Matrice d'un système linéaire.
Definition AlephMatrix.h:33
Paramètres d'un système linéraire.
Definition AlephParams.h:34
Vecteur d'un système linéaire.
Definition AlephVector.h:33
Enumérateur sur une liste d'entités.
Classe de base d'un élément de maillage.
Definition Item.h:83
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Référence à une variable.
Definition VariableRef.h:56
Vue constante d'un tableau de type T.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-