Reference documentation for deal.II version GIT 112f7bbc69 2023-05-28 21:25:02+00:00
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
la_parallel_block_vector.h
Go to the documentation of this file.
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 1999 - 2022 by the deal.II authors
4 //
5 // This file is part of the deal.II library.
6 //
7 // The deal.II library is free software; you can use it, redistribute
8 // it, and/or modify it under the terms of the GNU Lesser General
9 // Public License as published by the Free Software Foundation; either
10 // version 2.1 of the License, or (at your option) any later version.
11 // The full text of the license can be found in the file LICENSE.md at
12 // the top level directory of deal.II.
13 //
14 // ---------------------------------------------------------------------
15 
16 #ifndef dealii_la_parallel_block_vector_h
17 #define dealii_la_parallel_block_vector_h
18 
19 
20 #include <deal.II/base/config.h>
21 
23 
29 
30 #include <cstdio>
31 #include <vector>
32 
34 
35 
36 // Forward declarations
37 #ifndef DOXYGEN
38 # ifdef DEAL_II_WITH_PETSC
39 namespace PETScWrappers
40 {
41  namespace MPI
42  {
43  class BlockVector;
44  }
45 } // namespace PETScWrappers
46 # endif
47 
48 # ifdef DEAL_II_WITH_TRILINOS
49 namespace TrilinosWrappers
50 {
51  namespace MPI
52  {
53  class BlockVector;
54  }
55 } // namespace TrilinosWrappers
56 # endif
57 #endif
58 
59 namespace LinearAlgebra
60 {
61  namespace distributed
62  {
84  template <typename Number>
85  class BlockVector : public BlockVectorBase<Vector<Number>>,
86  public VectorSpaceVector<Number>
87  {
88  public:
101  static constexpr unsigned int communication_block_size = 20;
102 
107 
111  using BlockType = typename BaseClass::BlockType;
112 
117  using real_type = typename BaseClass::real_type;
118  using pointer = typename BaseClass::pointer;
120  using reference = typename BaseClass::reference;
122  using size_type = typename BaseClass::size_type;
123  using iterator = typename BaseClass::iterator;
125 
141  explicit BlockVector(const size_type num_blocks = 0,
142  const size_type block_size = 0);
143 
149 
156  template <typename OtherNumber>
158 
163  BlockVector(const std::vector<size_type> &block_sizes);
164 
169  BlockVector(const std::vector<IndexSet> &local_ranges,
170  const std::vector<IndexSet> &ghost_indices,
171  const MPI_Comm communicator);
172 
176  BlockVector(const std::vector<IndexSet> &local_ranges,
177  const MPI_Comm communicator);
178 
187  virtual ~BlockVector() override = default;
188 
193  virtual BlockVector &
194  operator=(const value_type s) override;
195 
200  BlockVector &
202 
207  template <class Number2>
208  BlockVector &
210 
214  BlockVector &
216 
217 #ifdef DEAL_II_WITH_PETSC
227 #endif
228 
229 #ifdef DEAL_II_WITH_TRILINOS
240 #endif
241 
255  void
256  reinit(const size_type num_blocks,
257  const size_type block_size = 0,
258  const bool omit_zeroing_entries = false);
259 
279  void
280  reinit(const std::vector<size_type> &block_sizes,
281  const bool omit_zeroing_entries = false);
282 
297  template <typename Number2>
298  void
300  const bool omit_zeroing_entries = false);
301 
319  void
320  reinit(const std::vector<IndexSet> &local_ranges,
321  const std::vector<IndexSet> &ghost_indices,
322  const MPI_Comm communicator);
323 
327  void
328  reinit(const std::vector<IndexSet> &local_ranges,
329  const MPI_Comm communicator);
330 
354  virtual void
355  compress(VectorOperation::values operation) override;
356 
365  void
367 
378  DEAL_II_DEPRECATED void
380 
381 
390  void
392 
396  bool
398 
402  void
403  set_ghost_state(const bool ghosted) const;
404 
419  template <typename Number2>
420  void
422 
427  template <typename OtherNumber>
428  void
429  add(const std::vector<size_type> & indices,
430  const ::Vector<OtherNumber> &values);
431 
436  void
437  sadd(const Number s, const BlockVector<Number> &V);
438 
444  virtual bool
445  all_zero() const override;
446 
450  virtual Number
451  mean_value() const override;
452 
457  real_type
458  lp_norm(const real_type p) const;
459 
477  void
490  virtual void
492  const bool omit_zeroing_entries = false) override;
493 
497  virtual BlockVector<Number> &
498  operator*=(const Number factor) override;
499 
503  virtual BlockVector<Number> &
504  operator/=(const Number factor) override;
505 
509  virtual BlockVector<Number> &
511 
515  virtual BlockVector<Number> &
517 
526  virtual void
529  VectorOperation::values operation,
530  std::shared_ptr<const Utilities::MPI::CommunicationPatternBase>
531  communication_pattern = {}) override;
532 
536  DEAL_II_DEPRECATED_EARLY virtual void
538  VectorOperation::values operation,
539  std::shared_ptr<const Utilities::MPI::CommunicationPatternBase>
540  communication_pattern = {}) override
541  {
542  import_elements(V, operation, communication_pattern);
543  }
544 
548  virtual Number
549  operator*(const VectorSpaceVector<Number> &V) const override;
550 
567  template <typename FullMatrixType>
568  void
570  const BlockVector<Number> &V,
571  const bool symmetric = false) const;
572 
589  template <typename FullMatrixType>
590  Number
592  const BlockVector<Number> &V,
593  const bool symmetric = false) const;
594 
604  template <typename FullMatrixType>
605  void
607  const FullMatrixType &matrix,
608  const Number s = Number(0.),
609  const Number b = Number(1.)) const;
610 
614  virtual void
615  add(const Number a) override;
616 
620  virtual void
621  add(const Number a, const VectorSpaceVector<Number> &V) override;
622 
626  virtual void
627  add(const Number a,
629  const Number b,
630  const VectorSpaceVector<Number> &W) override;
631 
636  virtual void
637  add(const std::vector<size_type> &indices,
638  const std::vector<Number> & values);
639 
644  virtual void
645  sadd(const Number s,
646  const Number a,
647  const VectorSpaceVector<Number> &V) override;
648 
654  virtual void
655  scale(const VectorSpaceVector<Number> &scaling_factors) override;
656 
660  virtual void
661  equ(const Number a, const VectorSpaceVector<Number> &V) override;
662 
667  virtual real_type
668  l1_norm() const override;
669 
674  virtual real_type
675  l2_norm() const override;
676 
680  real_type
681  norm_sqr() const;
682 
687  virtual real_type
688  linfty_norm() const override;
689 
710  virtual Number
711  add_and_dot(const Number a,
713  const VectorSpaceVector<Number> &W) override;
714 
719  virtual size_type
720  size() const override;
721 
733  virtual ::IndexSet
734  locally_owned_elements() const override;
735 
739  virtual void
740  print(std::ostream & out,
741  const unsigned int precision = 3,
742  const bool scientific = true,
743  const bool across = true) const override;
744 
748  virtual std::size_t
749  memory_consumption() const override;
763 
769  };
770 
773  } // end of namespace distributed
774 
775 } // end of namespace LinearAlgebra
776 
777 
785 template <typename Number>
786 inline void
789 {
790  u.swap(v);
791 }
792 
793 
798 template <typename Number>
800  : std::false_type
801 {};
802 
803 
805 
806 #ifdef DEAL_II_MSVC
807 # include <deal.II/lac/la_parallel_block_vector.templates.h>
808 #endif
809 
810 #endif
::internal::BlockVectorIterators::Iterator< BlockVectorBase, false > iterator
typename BlockType::const_reference const_reference
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 > &u, LinearAlgebra::distributed::BlockVector< Number > &v)
BlockVector & operator=(const BlockVector &V)
BlockVector & operator=(const Vector< Number > &V)
virtual real_type linfty_norm() const override
void swap(BlockVector< Number > &v)
BlockVector(const size_type num_blocks=0, const size_type block_size=0)
virtual BlockVector & operator=(const value_type s) override
virtual real_type l1_norm() const override
virtual void add(const Number a, const VectorSpaceVector< Number > &V, const Number b, const VectorSpaceVector< Number > &W) override
virtual void add(const std::vector< size_type > &indices, const std::vector< Number > &values)
BlockVector< Number > & operator=(const TrilinosWrappers::MPI::BlockVector &trilinos_vec)
void reinit(const std::vector< IndexSet > &local_ranges, const MPI_Comm communicator)
virtual void reinit(const VectorSpaceVector< Number > &V, const bool omit_zeroing_entries=false) override
virtual ::IndexSet locally_owned_elements() const override
virtual BlockVector< Number > & operator+=(const VectorSpaceVector< Number > &V) override
static constexpr unsigned int communication_block_size
virtual BlockVector< Number > & operator/=(const Number factor) override
virtual BlockVector< Number > & operator-=(const VectorSpaceVector< Number > &V) override
virtual ~BlockVector() override=default
virtual void sadd(const Number s, const Number a, const VectorSpaceVector< Number > &V) override
virtual BlockVector< Number > & operator*=(const Number factor) override
BlockVector & operator=(const BlockVector< Number2 > &V)
BlockVector(const std::vector< size_type > &block_sizes)
virtual void scale(const VectorSpaceVector< Number > &scaling_factors) override
BlockVector(const BlockVector< OtherNumber > &v)
BlockVector(const BlockVector< Number > &V)
void reinit(const size_type num_blocks, const size_type block_size=0, const bool omit_zeroing_entries=false)
virtual std::size_t memory_consumption() const override
virtual Number mean_value() const override
virtual bool all_zero() const override
void set_ghost_state(const bool ghosted) const
void add(const std::vector< size_type > &indices, const ::Vector< OtherNumber > &values)
virtual real_type l2_norm() const override
BlockVector(const std::vector< IndexSet > &local_ranges, const MPI_Comm communicator)
virtual Number operator*(const VectorSpaceVector< Number > &V) const override
void reinit(const std::vector< IndexSet > &local_ranges, const std::vector< IndexSet > &ghost_indices, const MPI_Comm communicator)
Number multivector_inner_product_with_metric(const FullMatrixType &matrix, const BlockVector< Number > &V, const bool symmetric=false) const
BlockVector< Number > & operator=(const PETScWrappers::MPI::BlockVector &petsc_vec)
virtual void add(const Number a, const VectorSpaceVector< Number > &V) override
typename BaseClass::const_reference const_reference
real_type lp_norm(const real_type p) const
void reinit(const BlockVector< Number2 > &V, const bool omit_zeroing_entries=false)
virtual void print(std::ostream &out, const unsigned int precision=3, const bool scientific=true, const bool across=true) const override
void sadd(const Number s, const BlockVector< Number > &V)
void copy_locally_owned_data_from(const BlockVector< Number2 > &src)
virtual void add(const Number a) override
virtual void import_elements(const LinearAlgebra::ReadWriteVector< Number > &V, VectorOperation::values operation, std::shared_ptr< const Utilities::MPI::CommunicationPatternBase > communication_pattern={}) override
BlockVector(const std::vector< IndexSet > &local_ranges, const std::vector< IndexSet > &ghost_indices, const MPI_Comm communicator)
virtual void equ(const Number a, const VectorSpaceVector< Number > &V) override
typename BaseClass::const_pointer const_pointer
typename BaseClass::const_iterator const_iterator
void multivector_inner_product(FullMatrixType &matrix, const BlockVector< Number > &V, const bool symmetric=false) const
void mmult(BlockVector< Number > &V, const FullMatrixType &matrix, const Number s=Number(0.), const Number b=Number(1.)) const
void reinit(const std::vector< size_type > &block_sizes, const bool omit_zeroing_entries=false)
virtual Number add_and_dot(const Number a, const VectorSpaceVector< Number > &V, const VectorSpaceVector< Number > &W) override
virtual size_type size() const override
virtual void compress(VectorOperation::values operation) override
#define DEAL_II_DEPRECATED
Definition: config.h:174
#define DEAL_II_NAMESPACE_OPEN
Definition: config.h:474
#define DEAL_II_NAMESPACE_CLOSE
Definition: config.h:475
static ::ExceptionBase & ExcIteratorRangeDoesNotMatchVectorSize()
#define DeclException0(Exception0)
Definition: exceptions.h:465
static ::ExceptionBase & ExcVectorTypeNotCompatible()
constexpr int block_size
Definition: cuda_size.h:29
@ matrix
Contents is actually a matrix.
@ symmetric
Matrix is symmetric.
static const char V
BlockVector< double > BlockVector
SymmetricTensor< 2, dim, Number > b(const Tensor< 2, dim, Number > &F)