71 class ALIEN_EXPORT DirectMatrixBuilder
74 using ResetFlag = DirectMatrixOptions::ResetFlag;
75 using ReserveFlag = DirectMatrixOptions::ReserveFlag;
76 using SymmetricFlag = DirectMatrixOptions::SymmetricFlag;
82 DirectMatrixBuilder(
IMatrix& matrix, ResetFlag reset_flag,
83 SymmetricFlag symmetric_flag = SymmetricFlag::eSymmetric);
85 virtual ~DirectMatrixBuilder();
87 DirectMatrixBuilder(DirectMatrixBuilder&) =
delete;
88 DirectMatrixBuilder(DirectMatrixBuilder&&) =
delete;
89 DirectMatrixBuilder& operator=(
const DirectMatrixBuilder&) =
delete;
90 DirectMatrixBuilder& operator=(DirectMatrixBuilder&&) =
delete;
93 MatrixElement operator()(
const Integer iIndex,
const Integer jIndex)
95 return MatrixElement(iIndex, jIndex, *
this);
98 void reserve(Arccore::Integer n, ReserveFlag flag = ReserveFlag::eResetReservation);
100 void reserve(Arccore::ConstArrayView<Arccore::Integer> indices, Arccore::Integer n,
101 ReserveFlag flag = ReserveFlag::eResetReservation);
105 void addData(Arccore::Integer iIndex, Arccore::Integer jIndex, Arccore::Real value);
107 void addData(Arccore::Integer iIndex, Arccore::Real factor,
108 Arccore::ConstArrayView<Arccore::Integer> jIndexes,
109 Arccore::ConstArrayView<Arccore::Real> jValues);
111 void setData(Arccore::Integer iIndex, Arccore::Integer jIndex, Arccore::Real value);
113 void setData(Arccore::Integer iIndex, Arccore::Real factor,
114 Arccore::ConstArrayView<Arccore::Integer> jIndexes,
115 Arccore::ConstArrayView<Arccore::Real> jValues);
121 [[nodiscard]] Arccore::String stats()
const;
122 [[nodiscard]] Arccore::String stats(Arccore::IntegerConstArrayView ids)
const;
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;
136 ResetFlag m_reset_flag;
139 bool m_symmetric_profile;
142 IMessagePassingMng* m_parallel_mng;
148 typedef std::map<Integer, Real> ColValueData;
150 typedef std::map<Integer, ColValueData> ExtraRows;
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);
162 template <
typename Enumerator>
163 void _stats(std::ostream& o,
const Enumerator& e)
const;
165 void _startTimer() {}