13#ifndef dealii_la_parallel_block_vector_h
14#define dealii_la_parallel_block_vector_h
36# ifdef DEAL_II_WITH_PETSC
72 template <
typename Number,
typename MemorySpace = MemorySpace::Host>
143 template <
typename OtherNumber>
157 const std::vector<IndexSet> &ghost_indices,
178 const std::vector<std::shared_ptr<const Utilities::MPI::Partitioner>>
180 const MPI_Comm &comm_sm = MPI_COMM_SELF);
222 template <
class Number2>
232#ifdef DEAL_II_WITH_PETSC
244#ifdef DEAL_II_TRILINOS_WITH_EPETRA
273 const bool omit_zeroing_entries =
false);
295 reinit(
const std::vector<size_type> &block_sizes,
296 const bool omit_zeroing_entries =
false);
312 template <
typename Number2>
315 const bool omit_zeroing_entries =
false);
335 reinit(
const std::vector<IndexSet> &local_ranges,
336 const std::vector<IndexSet> &ghost_indices,
343 reinit(
const std::vector<IndexSet> &local_ranges,
361 const std::vector<std::shared_ptr<const Utilities::MPI::Partitioner>>
363 const MPI_Comm &comm_sm = MPI_COMM_SELF);
373 const std::vector<std::shared_ptr<const Utilities::MPI::Partitioner>>
375 const bool make_ghosted,
376 const MPI_Comm &comm_sm = MPI_COMM_SELF);
432 const unsigned int communication_channel_start = 100)
const;
481 template <
typename Number2>
490 template <
typename OtherNumber>
492 add(
const std::vector<size_type> &indices,
493 const ::Vector<OtherNumber> &values);
585 const std::shared_ptr<const Utilities::MPI::CommunicationPatternBase>
586 &communication_pattern = {});
610 template <
typename FullMatrixType>
614 const bool symmetric =
false)
const;
632 template <
typename FullMatrixType>
635 const FullMatrixType &matrix,
637 const bool symmetric =
false)
const;
648 template <
typename FullMatrixType>
651 const FullMatrixType &matrix,
652 const Number s = Number(0.),
653 const Number b = Number(1.))
const;
681 add(
const std::vector<size_type> &indices,
682 const std::vector<Number> &values);
785 const unsigned int precision = 3,
786 const bool scientific =
true,
787 const bool across =
true)
const;
829template <
typename Number,
typename MemorySpace>
842template <
typename Number,
typename MemorySpace>
844 LinearAlgebra::distributed::BlockVector<Number, MemorySpace>>
::internal::BlockVectorIterators::Iterator< BlockVectorBase, false > iterator
const value_type * const_pointer
typename BlockType::const_reference const_reference
types::global_dof_index size_type
typename BlockType::value_type value_type
::internal::BlockVectorIterators::Iterator< BlockVectorBase, true > const_iterator
typename BlockType::reference reference
typename BlockType::real_type real_type
void swap(LinearAlgebra::distributed::BlockVector< Number, MemorySpace > &u, LinearAlgebra::distributed::BlockVector< Number, MemorySpace > &v) noexcept
typename BaseClass::BlockType BlockType
void scale(const BlockVector< Number, MemorySpace > &scaling_factors)
Number multivector_inner_product_with_metric(const FullMatrixType &matrix, const BlockVector< Number, MemorySpace > &V, const bool symmetric=false) const
bool has_ghost_elements() const
void mmult(BlockVector< Number, MemorySpace > &V, const FullMatrixType &matrix, const Number s=Number(0.), const Number b=Number(1.)) const
void update_ghost_values_start(const unsigned int communication_channel_start=100) const
BlockVector< Number, MemorySpace > & operator=(const TrilinosWrappers::MPI::BlockVector &trilinos_vec)
void add(const std::vector< size_type > &indices, const ::Vector< OtherNumber > &values)
void reinit(const BlockVector< Number2, MemorySpace > &V, const bool omit_zeroing_entries=false)
void add(const std::vector< size_type > &indices, const std::vector< Number > &values)
void import_elements(const LinearAlgebra::ReadWriteVector< Number > &V, const VectorOperation::values operation, const std::shared_ptr< const Utilities::MPI::CommunicationPatternBase > &communication_pattern={})
BlockVector(const std::vector< IndexSet > &local_ranges, const std::vector< IndexSet > &ghost_indices, const MPI_Comm communicator)
typename BaseClass::const_reference const_reference
void print(std::ostream &out, const unsigned int precision=3, const bool scientific=true, const bool across=true) const
void sadd(const Number s, const Number a, const BlockVector< Number, MemorySpace > &V)
Number operator*(const BlockVector< Number, MemorySpace > &V) const
BlockVector(const std::vector< IndexSet > &local_ranges, const MPI_Comm communicator)
typename BaseClass::size_type size_type
BlockVector & operator=(const Vector< Number, MemorySpace > &V)
void update_ghost_values_finish() const
BlockVector< Number, MemorySpace > & operator*=(const Number factor)
BlockVector(const BlockVector< Number, MemorySpace > &V)
void reinit(const std::vector< IndexSet > &local_ranges, const std::vector< IndexSet > &ghost_indices, const MPI_Comm communicator)
BlockVector(const std::vector< size_type > &block_sizes)
typename BaseClass::const_pointer const_pointer
void reinit(const size_type num_blocks, const size_type block_size=0, const bool omit_zeroing_entries=false)
void reinit(const std::vector< std::shared_ptr< const Utilities::MPI::Partitioner > > &partitioners, const MPI_Comm &comm_sm=MPI_COMM_SELF)
void multivector_inner_product(FullMatrixType &matrix, const BlockVector< Number, MemorySpace > &V, const bool symmetric=false) const
Number mean_value() const
BlockVector & operator=(const BlockVector &V)
void swap(BlockVector< Number, MemorySpace > &v) noexcept
void reinit(const std::vector< std::shared_ptr< const Utilities::MPI::Partitioner > > &partitioners, const bool make_ghosted, const MPI_Comm &comm_sm=MPI_COMM_SELF)
BlockVector< Number, MemorySpace > & operator/=(const Number factor)
BlockVector< Number, MemorySpace > & operator+=(const BlockVector< Number, MemorySpace > &V)
void copy_locally_owned_data_from(const BlockVector< Number2, MemorySpace > &src)
typename BaseClass::reference reference
typename BaseClass::iterator iterator
Number add_and_dot(const Number a, const BlockVector< Number, MemorySpace > &V, const BlockVector< Number, MemorySpace > &W)
real_type linfty_norm() const
BlockVector< Number, MemorySpace > & operator-=(const BlockVector< Number, MemorySpace > &V)
real_type l1_norm() const
typename BaseClass::pointer pointer
void reinit(const std::vector< size_type > &block_sizes, const bool omit_zeroing_entries=false)
typename BaseClass::value_type value_type
std::size_t memory_consumption() const
void equ(const Number a, const BlockVector< Number, MemorySpace > &V)
::IndexSet locally_owned_elements() const
BlockVector & operator=(const value_type s)
typename BaseClass::const_iterator const_iterator
virtual size_type size() const override
BlockVector(const std::vector< std::shared_ptr< const Utilities::MPI::Partitioner > > &partitioners, const MPI_Comm &comm_sm=MPI_COMM_SELF)
BlockVector(const size_type num_blocks=0, const size_type block_size=0)
static constexpr unsigned int communication_block_size
typename BaseClass::real_type real_type
void sadd(const Number s, const BlockVector< Number, MemorySpace > &V)
void add(const Number a, const BlockVector< Number, MemorySpace > &V, const Number b, const BlockVector< Number, MemorySpace > &W)
real_type l2_norm() const
void compress(VectorOperation::values operation)
real_type lp_norm(const real_type p) const
void update_ghost_values() const
void set_ghost_state(const bool ghosted) const
BlockVector< Number, MemorySpace > & operator=(const PETScWrappers::MPI::BlockVector &petsc_vec)
BlockVector & operator=(const BlockVector< Number2, MemorySpace > &V)
void add(const Number a, const BlockVector< Number, MemorySpace > &V)
real_type norm_sqr() const
void reinit(const std::vector< IndexSet > &local_ranges, const MPI_Comm communicator)
void zero_out_ghost_values() const
BlockVector(const BlockVector< OtherNumber, MemorySpace > &v)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcVectorTypeNotCompatible()
#define DeclException0(Exception0)
static ::ExceptionBase & ExcIteratorRangeDoesNotMatchVectorSize()