128template <
typename ValueT>
137template <
typename ValueT>
140 ALIEN_ASSERT((this->m_parent->m_state == eStart), (
"Inconsistent state"));
141 ALIEN_ASSERT((this->m_values != NULL), (
"Inserter is not ready for filling"));
143 this->m_current_size = this->m_n[0];
144 this->m_current_k = this->m_data_index.data();
149template <
typename ValueT>
152 this->m_index = this->m_size;
157template <
typename ValueT>
160 return (this->m_index == 0);
165template <
typename ValueT>
168 return (this->m_index == this->m_size);
173template <
typename ValueT>
177 return this->m_current_size;
182template <
typename ValueT>
186 return this->m_index;
192template <
typename ValueT>
193void StreamMatrixBuilderT<ValueT>::Profiler::addMatrixEntries(
194ConstArrayView<Integer> row_index, ConstArrayView<Integer> col_index)
200 Integer n = col_index.size();
203 for (Integer i = 0; i < n; ++i) {
204 this->m_row_index.add(row_index[i]);
205 this->m_col_index.add(col_index[i]);
213template <
typename ValueT>
214void StreamMatrixBuilderT<ValueT>::Profiler::addMatrixEntries(
215ConstArrayView<Integer> row_indexes,
216const UniqueArray<ConstArrayView<Integer>>& col_indexes)
223 for (Integer i = 0; i < row_indexes.size(); ++i)
224 n += col_indexes[i].size();
227 for (Integer i = 0; i < row_indexes.size(); ++i) {
228 Integer row = row_indexes[i];
229 for (Integer j = 0; j < col_indexes[i].size(); ++j) {
230 this->m_row_index.add(row);
231 this->m_col_index.add(col_indexes[i][j]);
240template <
typename ValueT>
242ConstArrayView<Integer> row_indexes, UniqueArray2<Integer> col_indexes,
243ConstArrayView<Integer> stencil_lids, Integer size)
249 for (Integer i = 0; i < stencil_lids.size(); ++i)
253 for (Integer j = 0; j < stencil_lids.size(); ++j) {
254 ArrayView<Integer> cols = col_indexes[stencil_lids[j]];
255 for (Integer i = 0; i < size; ++i) {
256 this->m_row_index.add(row_indexes[i]);
257 this->m_col_index.add(cols[i]);
266template <
typename ValueT>
268const Integer row_index, ConstArrayView<Integer> col_index)
272 Integer n = col_index.size();
275 for (Integer i = 0; i < n; ++i) {
276 this->m_row_index.add(row_index);
277 this->m_col_index.add(col_index[i]);
285template <
typename ValueT>
287Integer row_index, Integer col_index)
290 ALIEN_ASSERT((this->m_parent->m_state == ePrepared), (
"Inconsistent state"));
293 this->m_row_index.add(row_index);
294 this->m_col_index.add(col_index);
301template <
typename ValueT>
307 for (Integer i = 0; i < this->m_current_size; ++i)
308 this->m_values[this->m_current_k[i]] = values[i];
315template <
typename ValueT>
321 this->m_values[*this->m_current_k] = values;
327template <
typename ValueT>
333 for (Integer i = 0; i < this->m_current_size; ++i)
334 this->m_values[this->m_current_k[i]] += values[i];
340template <
typename ValueT>
342ConstArrayView<ValueT> values, ValueT factor)
347 for (Integer i = 0; i < this->m_current_size; ++i)
348 this->m_values[this->m_current_k[i]] += values[i] * factor;
354template <
typename ValueT>
360 this->m_values[*this->m_current_k] += values;
366template <
typename ValueT>
371 for (Integer i = 0; i < this->m_current_size; ++i)
372 this->m_values[this->m_current_k[i]] += value;
378template <
typename ValueT>
382 ALIEN_ASSERT((this->m_parent->m_state == eStart), (
"Inconsistent state"));
383 ALIEN_ASSERT((values.size() == this->m_current_size * this->m_block_size),
384 (
"Incompatible size %d vs %d * %d ", values.size(), this->m_current_size,
385 this->m_block_size));
386 for (Integer i = 0; i < this->m_current_size; ++i)
387 for (Integer k = 0; k < this->m_block_size; ++k)
388 this->m_values[this->m_current_k[i] * this->m_block_size + k] +=
389 values[i * this->m_block_size + k];
395template <
typename ValueT>
397ConstArrayView<ValueT> values, ValueT factor)
403 for (Integer i = 0; i < this->m_current_size; ++i)
404 for (Integer k = 0; k < this->m_block_size; ++k)
405 this->m_values[this->m_current_k[i] * this->m_block_size + k] +=
406 factor * values[i * this->m_block_size + k];
412template <
typename ValueT>
414ConstArrayView<ValueT> values, Integer size)
421 for (Integer i = 0; i < values.size(); ++i)
422 for (Integer k = 0; k < size; ++k)
423 this->m_values[this->m_current_k[icount++]] += values[i];
429template <
typename ValueT>
431ConstArrayView<ValueT> values, ValueT factor, Integer size)
437 for (Integer i = 0; i < values.size(); ++i)
438 for (Integer k = 0; k < size; ++k)
439 this->m_values[this->m_current_k[icount++]] += factor * values[i];
445template <
typename ValueT>
452 this->m_current_k += this->m_current_size;
453 this->m_current_size = this->m_n[this->m_index];