Alien  1.3.0
Developer documentation
Loading...
Searching...
No Matches
BaseDirectMatrixBuilder.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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#ifndef ALIEN_COMMON_BUILDER_SCALAR_DIRECTMATRIXBUILDER_H
8#define ALIEN_COMMON_BUILDER_SCALAR_DIRECTMATRIXBUILDER_H
9/* Author : havep at Tue Aug 28 13:56:24 2012
10 * Generated by createNew
11 */
12
13#include <map>
14
15#include <alien/data/IMatrix.h>
17
18#define USE_VMAP
19
20#ifdef USE_VMAP
21#include <alien/utils/VMap.h>
22#endif /* USE_VMAP */
23
24#include <arccore/message_passing/MessagePassingGlobal.h>
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29namespace Alien
30{
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34
35template <typename Scalar>
36class SimpleCSRMatrix;
37
38/*---------------------------------------------------------------------------*/
39/*---------------------------------------------------------------------------*/
40
42{
43 enum ResetFlag
44 {
45 eNoReset,
46 eResetValues,
47 eResetProfile,
48 eResetAllocation
49 };
50 enum ReserveFlag
51 {
52 eResetReservation,
53 eExtendReservation
54 };
55 enum SymmetricFlag
56 {
57 eSymmetric,
58 eUnSymmetric
59 };
60};
61
62/*---------------------------------------------------------------------------*/
63/*---------------------------------------------------------------------------*/
64
65namespace Common
66{
67
68 /*---------------------------------------------------------------------------*/
69 /*---------------------------------------------------------------------------*/
70
71 class ALIEN_EXPORT DirectMatrixBuilder
72 {
73 public:
74 using ResetFlag = DirectMatrixOptions::ResetFlag;
75 using ReserveFlag = DirectMatrixOptions::ReserveFlag;
76 using SymmetricFlag = DirectMatrixOptions::SymmetricFlag;
77
78 public:
79 using MatrixElement = MatrixElementT<DirectMatrixBuilder>;
80
81 public:
82 DirectMatrixBuilder(IMatrix& matrix, ResetFlag reset_flag,
83 SymmetricFlag symmetric_flag = SymmetricFlag::eSymmetric);
84
85 virtual ~DirectMatrixBuilder();
86
87 DirectMatrixBuilder(DirectMatrixBuilder&) = delete;
88 DirectMatrixBuilder(DirectMatrixBuilder&&) = delete;
89 DirectMatrixBuilder& operator=(const DirectMatrixBuilder&) = delete;
90 DirectMatrixBuilder& operator=(DirectMatrixBuilder&&) = delete;
91
92 public:
93 MatrixElement operator()(const Integer iIndex, const Integer jIndex)
94 {
95 return MatrixElement(iIndex, jIndex, *this);
96 }
97
98 void reserve(Arccore::Integer n, ReserveFlag flag = ReserveFlag::eResetReservation);
99
100 void reserve(Arccore::ConstArrayView<Arccore::Integer> indices, Arccore::Integer n,
101 ReserveFlag flag = ReserveFlag::eResetReservation);
102
103 void allocate();
104
105 void addData(Arccore::Integer iIndex, Arccore::Integer jIndex, Arccore::Real value);
106
107 void addData(Arccore::Integer iIndex, Arccore::Real factor,
108 Arccore::ConstArrayView<Arccore::Integer> jIndexes,
109 Arccore::ConstArrayView<Arccore::Real> jValues);
110
111 void setData(Arccore::Integer iIndex, Arccore::Integer jIndex, Arccore::Real value);
112
113 void setData(Arccore::Integer iIndex, Arccore::Real factor,
114 Arccore::ConstArrayView<Arccore::Integer> jIndexes,
115 Arccore::ConstArrayView<Arccore::Real> jValues);
116
117 void finalize();
118
119 void squeeze();
120
121 [[nodiscard]] Arccore::String stats() const;
122 [[nodiscard]] Arccore::String stats(Arccore::IntegerConstArrayView ids) const;
123
124 protected:
125 IMatrix& m_matrix;
126
127 SimpleCSRMatrix<Real>* m_matrix_impl;
128
129 Integer m_local_offset, m_global_size, m_local_size;
130 Integer m_col_global_size;
131 ArrayView<Integer> m_row_starts;
132 ArrayView<Integer> m_cols;
133 ArrayView<Real> m_values;
134 UniqueArray<Integer> m_row_sizes;
135
136 ResetFlag m_reset_flag;
137 bool m_allocated;
138 bool m_finalized;
139 bool m_symmetric_profile;
140
141 Integer m_nproc;
142 IMessagePassingMng* m_parallel_mng;
143 ITraceMng* m_trace;
144
145#ifdef USE_VMAP
146 typedef VMap<Integer, Real> ColValueData;
147#else /* USE_VMAP */
148 typedef std::map<Integer, Real> ColValueData;
149#endif /* USE_VMAP */
150 typedef std::map<Integer, ColValueData> ExtraRows;
151 ExtraRows m_extras;
152
153 private:
154 void computeProfile(Arccore::ConstArrayView<Arccore::Integer> sizes);
155 void updateProfile(Arccore::UniqueArray<Arccore::Integer>& row_starts,
156 Arccore::UniqueArray<Arccore::Integer>& cols,
157 Arccore::UniqueArray<Arccore::Real>& values);
158
159 class IndexEnumerator;
160 class FullEnumerator;
161
162 template <typename Enumerator>
163 void _stats(std::ostream& o, const Enumerator& e) const;
164
165 void _startTimer() {}
166 void _stopTimer() {}
167 };
168
169 /*---------------------------------------------------------------------------*/
170 /*---------------------------------------------------------------------------*/
171
172} // namespace Common
173
174/*---------------------------------------------------------------------------*/
175/*---------------------------------------------------------------------------*/
176
177} // namespace Alien
178
179/*---------------------------------------------------------------------------*/
180/*---------------------------------------------------------------------------*/
181
182#endif /* ALIEN_COMMON_BUILDER_SCALAR_DIRECTMATRIXBUILDER_H */
IMatrix.h.
MatrixElement.h.
Interface for all matrices.
Definition IMatrix.h:51
Tool to manipulate a matrix entry while building the matrix.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Definition BackEnd.h:17