15#ifndef dealii_diagonal_matrix_h
16#define dealii_diagonal_matrix_h
28template <
typename number>
34 template <
typename,
typename>
60template <
typename VectorType = Vector<
double>>
164 template <
typename number2>
169 const number2 *values,
170 const bool elide_zero_values =
true,
171 const bool col_indices_are_sorted =
false);
186 vmult(VectorType &dst,
const VectorType &src)
const;
194 Tvmult(VectorType &dst,
const VectorType &src)
const;
202 vmult_add(VectorType &dst,
const VectorType &src)
const;
231 const unsigned int end_range,
232 const value_type *src_pointer_to_current_range,
233 value_type *dst_pointer_to_current_range)
const;
262template <
typename VectorType>
269template <
typename VectorType>
278template <
typename VectorType>
282 return diagonal.memory_consumption();
287template <
typename VectorType>
296template <
typename VectorType>
300 dst.reinit(diagonal);
305template <
typename VectorType>
314template <
typename VectorType>
323template <
typename VectorType>
332template <
typename VectorType>
333typename VectorType::size_type
341template <
typename VectorType>
342typename VectorType::size_type
350template <
typename VectorType>
351typename VectorType::value_type
353 const size_type j)
const
361template <
typename VectorType>
362typename VectorType::value_type &
371template <
typename VectorType>
372template <
typename number2>
375 const size_type n_cols,
376 const size_type *col_indices,
377 const number2 *values,
381 for (size_type i = 0; i < n_cols; ++i)
382 if (col_indices[i] == row)
388template <
typename VectorType>
392 const value_type value)
404 template <
typename VectorType>
406 assign_and_scale(VectorType &dst,
407 const VectorType &src,
408 const VectorType &diagonal)
414 template <
typename Number>
422 auto *
const dst_ptr = dst.
begin();
423 const auto *
const src_ptr = src.
begin();
424 const auto *
const diagonal_ptr =
diagonal.begin();
428 dst_ptr[i] = src_ptr[i] * diagonal_ptr[i];
435template <
typename VectorType>
439 internal::DiagonalMatrix::assign_and_scale(dst, src, diagonal);
444template <
typename VectorType>
453template <
typename VectorType>
456 const VectorType &src)
const
465template <
typename VectorType>
468 const VectorType &src)
const
475template <
typename VectorType>
476typename VectorType::value_type
478 const value_type src)
const
481 return diagonal.local_element(index) * src;
486template <
typename VectorType>
489 const unsigned int begin_range,
490 const unsigned int end_range,
491 const value_type *src_pointer_to_current_range,
492 value_type *dst_pointer_to_current_range)
const
495 diagonal.locally_owned_elements().n_elements() + 1);
497 diagonal.locally_owned_elements().n_elements() + 1);
499 const value_type *diagonal_entry =
diagonal.begin() + begin_range;
500 const unsigned int length = end_range - begin_range;
503 for (
unsigned int i = 0; i < length; ++i)
504 dst_pointer_to_current_range[i] =
505 diagonal_entry[i] * src_pointer_to_current_range[i];
void initialize_dof_vector(VectorType &dst) const
void Tvmult_add(VectorType &dst, const VectorType &src) const
value_type apply(const unsigned int index, const value_type src) const
void apply_to_subrange(const unsigned int begin_range, const unsigned int end_range, const value_type *src_pointer_to_current_range, value_type *dst_pointer_to_current_range) const
value_type & operator()(const size_type i, const size_type j)
VectorType & get_vector()
std::size_t memory_consumption() const
void add(const size_type i, const size_type j, const value_type value)
DiagonalMatrix(const VectorType &vec)
value_type operator()(const size_type i, const size_type j) const
typename VectorType::size_type size_type
void compress(VectorOperation::values operation)
const VectorType & get_vector() const
void vmult(VectorType &dst, const VectorType &src) const
void reinit(const VectorType &vec)
void add(const size_type row, const size_type n_cols, const size_type *col_indices, const number2 *values, const bool elide_zero_values=true, const bool col_indices_are_sorted=false)
typename VectorType::value_type value_type
void vmult_add(VectorType &dst, const VectorType &src) const
void Tvmult(VectorType &dst, const VectorType &src) const
size_type locally_owned_size() const
#define DEAL_II_OPENMP_SIMD_PRAGMA
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define Assert(cond, exc)
#define AssertIndexRange(index, range)
static ::ExceptionBase & ExcIndexRange(std::size_t arg1, std::size_t arg2, std::size_t arg3)
@ diagonal
Matrix is diagonal.
Tpetra::Vector< Number, LO, GO, NodeType< MemorySpace > > VectorType