13#ifndef dealii_diagonal_matrix_h
14#define dealii_diagonal_matrix_h
26template <
typename number>
32 template <
typename,
typename>
58template <
typename VectorType = Vector<
double>>
162 template <
typename number2>
167 const number2 *values,
168 const bool elide_zero_values =
true,
169 const bool col_indices_are_sorted =
false);
184 vmult(VectorType &dst,
const VectorType &src)
const;
192 Tvmult(VectorType &dst,
const VectorType &src)
const;
200 vmult_add(VectorType &dst,
const VectorType &src)
const;
229 const unsigned int end_range,
230 const value_type *src_pointer_to_current_range,
231 value_type *dst_pointer_to_current_range)
const;
260template <
typename VectorType>
267template <
typename VectorType>
276template <
typename VectorType>
280 return diagonal.memory_consumption();
285template <
typename VectorType>
294template <
typename VectorType>
298 dst.reinit(diagonal);
303template <
typename VectorType>
312template <
typename VectorType>
321template <
typename VectorType>
330template <
typename VectorType>
331typename VectorType::size_type
339template <
typename VectorType>
340typename VectorType::size_type
348template <
typename VectorType>
349typename VectorType::value_type
351 const size_type j)
const
359template <
typename VectorType>
360typename VectorType::value_type &
369template <
typename VectorType>
370template <
typename number2>
373 const size_type n_cols,
374 const size_type *col_indices,
375 const number2 *values,
379 for (size_type i = 0; i < n_cols; ++i)
380 if (col_indices[i] == row)
386template <
typename VectorType>
402 template <
typename VectorType>
404 assign_and_scale(VectorType &dst,
405 const VectorType &src,
406 const VectorType &diagonal)
412 template <
typename Number>
420 auto *
const dst_ptr = dst.
begin();
421 const auto *
const src_ptr = src.
begin();
422 const auto *
const diagonal_ptr =
diagonal.begin();
426 dst_ptr[i] = src_ptr[i] * diagonal_ptr[i];
433template <
typename VectorType>
437 internal::DiagonalMatrix::assign_and_scale(dst, src, diagonal);
442template <
typename VectorType>
451template <
typename VectorType>
454 const VectorType &src)
const
463template <
typename VectorType>
466 const VectorType &src)
const
473template <
typename VectorType>
474typename VectorType::value_type
479 return diagonal.local_element(index) * src;
484template <
typename VectorType>
487 const unsigned int begin_range,
488 const unsigned int end_range,
489 const value_type *src_pointer_to_current_range,
490 value_type *dst_pointer_to_current_range)
const
493 diagonal.locally_owned_elements().n_elements() + 1);
495 diagonal.locally_owned_elements().n_elements() + 1);
498 const unsigned int length = end_range - begin_range;
501 for (
unsigned int i = 0; i < length; ++i)
502 dst_pointer_to_current_range[i] =
503 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