Reference documentation for deal.II version GIT b8135fa6eb 2023-03-25 15:55: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\}}\)
trilinos_tpetra_vector.h
Go to the documentation of this file.
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 2018 - 2021 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_trilinos_tpetra_vector_h
17 #define dealii_trilinos_tpetra_vector_h
18 
19 
20 #include <deal.II/base/config.h>
21 
22 #ifdef DEAL_II_TRILINOS_WITH_TPETRA
23 
24 # include <deal.II/base/index_set.h>
25 # include <deal.II/base/mpi_stub.h>
27 
32 
33 # include <Teuchos_Comm.hpp>
34 # include <Teuchos_OrdinalTraits.hpp>
35 # include <Tpetra_Core.hpp>
36 # include <Tpetra_Vector.hpp>
37 # include <Tpetra_Version.hpp>
38 
39 # include <memory>
40 
42 
48 template <typename Number>
49 struct is_tpetra_type : std::false_type
50 {};
51 
52 # ifdef HAVE_TPETRA_INST_FLOAT
53 template <>
54 struct is_tpetra_type<float> : std::true_type
55 {};
56 # endif
57 
58 # ifdef HAVE_TPETRA_INST_DOUBLE
59 template <>
60 struct is_tpetra_type<double> : std::true_type
61 {};
62 # endif
63 
64 # ifdef DEAL_II_WITH_COMPLEX_VALUES
65 # ifdef HAVE_TPETRA_INST_COMPLEX_FLOAT
66 template <>
67 struct is_tpetra_type<std::complex<float>> : std::true_type
68 {};
69 # endif
70 
71 # ifdef HAVE_TPETRA_INST_COMPLEX_DOUBLE
72 template <>
73 struct is_tpetra_type<std::complex<double>> : std::true_type
74 {};
75 # endif
76 # endif
77 
78 namespace LinearAlgebra
79 {
80  // Forward declaration
81 # ifndef DOXYGEN
82  template <typename Number>
83  class ReadWriteVector;
84 # endif
85 
93  namespace TpetraWrappers
94  {
117  template <typename Number>
118  class Vector : public VectorSpaceVector<Number>, public Subscriptor
119  {
120  public:
121  using value_type = Number;
122 
124 
129 
134  Vector(const Vector &V);
135 
142  explicit Vector(const IndexSet &parallel_partitioner,
143  const MPI_Comm &communicator);
144 
151  void
152  reinit(const IndexSet &parallel_partitioner,
153  const MPI_Comm &communicator,
154  const bool omit_zeroing_entries = false);
155 
160  virtual void
162  const bool omit_zeroing_entries = false) override;
163 
169  Vector &
170  operator=(const Vector &V);
171 
176  virtual Vector &
177  operator=(const Number s) override;
178 
187  virtual void
188  import(const ReadWriteVector<Number> &V,
189  VectorOperation::values operation,
190  std::shared_ptr<const Utilities::MPI::CommunicationPatternBase>
191  communication_pattern = {}) override;
192 
196  virtual Vector &
197  operator*=(const Number factor) override;
198 
202  virtual Vector &
203  operator/=(const Number factor) override;
204 
208  virtual Vector &
210 
214  virtual Vector &
216 
221  virtual Number
222  operator*(const VectorSpaceVector<Number> &V) const override;
223 
227  virtual void
228  add(const Number a) override;
229 
234  virtual void
235  add(const Number a, const VectorSpaceVector<Number> &V) override;
236 
241  virtual void
242  add(const Number a,
244  const Number b,
245  const VectorSpaceVector<Number> &W) override;
246 
251  virtual void
252  sadd(const Number s,
253  const Number a,
254  const VectorSpaceVector<Number> &V) override;
255 
262  virtual void
263  scale(const VectorSpaceVector<Number> &scaling_factors) override;
264 
268  virtual void
269  equ(const Number a, const VectorSpaceVector<Number> &V) override;
270 
274  virtual bool
275  all_zero() const override;
276 
280  virtual Number
281  mean_value() const override;
282 
288  l1_norm() const override;
289 
295  l2_norm() const override;
296 
302  linfty_norm() const override;
303 
326  virtual Number
327  add_and_dot(const Number a,
329  const VectorSpaceVector<Number> &W) override;
334  bool
335  has_ghost_elements() const;
336 
341  virtual size_type
342  size() const override;
343 
348  size_type
350 
354  MPI_Comm
356 
368  virtual ::IndexSet
369  locally_owned_elements() const override;
370 
375  const Tpetra::Vector<Number, int, types::signed_global_dof_index> &
377 
382  Tpetra::Vector<Number, int, types::signed_global_dof_index> &
384 
388  virtual void
389  print(std::ostream & out,
390  const unsigned int precision = 3,
391  const bool scientific = true,
392  const bool across = true) const override;
393 
397  virtual std::size_t
398  memory_consumption() const override;
399 
405 
412 
419  int,
420  << "An error with error number " << arg1
421  << " occurred while calling a Trilinos function");
422 
423  private:
429  void
430  create_tpetra_comm_pattern(const IndexSet &source_index_set,
431  const MPI_Comm &mpi_comm);
432 
436  std::unique_ptr<
437  Tpetra::Vector<Number, int, types::signed_global_dof_index>>
439 
444 
449  std::shared_ptr<const TpetraWrappers::CommunicationPattern>
451  };
452 
453 
454  template <typename Number>
455  inline bool
457  {
458  return false;
459  }
460  } // namespace TpetraWrappers
461 } // namespace LinearAlgebra
462 
463 
467 template <typename Number>
469  : std::false_type
470 {};
471 
473 
474 #endif
475 
476 #endif
virtual LinearAlgebra::VectorSpaceVector< Number >::real_type l2_norm() const override
Vector & operator=(const Vector &V)
virtual void add(const Number a) override
virtual size_type size() const override
virtual LinearAlgebra::VectorSpaceVector< Number >::real_type l1_norm() const override
virtual Number operator*(const VectorSpaceVector< Number > &V) const override
std::shared_ptr< const TpetraWrappers::CommunicationPattern > tpetra_comm_pattern
virtual Vector & operator-=(const VectorSpaceVector< Number > &V) override
typename VectorSpaceVector< Number >::size_type size_type
virtual void print(std::ostream &out, const unsigned int precision=3, const bool scientific=true, const bool across=true) const override
Tpetra::Vector< Number, int, types::signed_global_dof_index > & trilinos_vector()
virtual void add(const Number a, const VectorSpaceVector< Number > &V, const Number b, const VectorSpaceVector< Number > &W) override
virtual void add(const Number a, const VectorSpaceVector< Number > &V) override
virtual Number mean_value() const override
virtual Vector & operator*=(const Number factor) override
virtual void sadd(const Number s, const Number a, const VectorSpaceVector< Number > &V) override
virtual LinearAlgebra::VectorSpaceVector< Number >::real_type linfty_norm() const override
virtual Vector & operator+=(const VectorSpaceVector< Number > &V) override
void create_tpetra_comm_pattern(const IndexSet &source_index_set, const MPI_Comm &mpi_comm)
virtual ::IndexSet locally_owned_elements() const override
void reinit(const IndexSet &parallel_partitioner, const MPI_Comm &communicator, const bool omit_zeroing_entries=false)
virtual void reinit(const VectorSpaceVector< Number > &V, const bool omit_zeroing_entries=false) override
virtual void scale(const VectorSpaceVector< Number > &scaling_factors) override
virtual void equ(const Number a, const VectorSpaceVector< Number > &V) override
const Tpetra::Vector< Number, int, types::signed_global_dof_index > & trilinos_vector() const
std::unique_ptr< Tpetra::Vector< Number, int, types::signed_global_dof_index > > vector
virtual Number add_and_dot(const Number a, const VectorSpaceVector< Number > &V, const VectorSpaceVector< Number > &W) override
virtual Vector & operator=(const Number s) override
virtual Vector & operator/=(const Number factor) override
virtual std::size_t memory_consumption() const override
virtual bool all_zero() const override
Vector(const IndexSet &parallel_partitioner, const MPI_Comm &communicator)
types::global_dof_index size_type
typename numbers::NumberTraits< Number >::real_type real_type
#define DEAL_II_NAMESPACE_OPEN
Definition: config.h:474
#define DEAL_II_NAMESPACE_CLOSE
Definition: config.h:475
#define DeclException0(Exception0)
Definition: exceptions.h:465
static ::ExceptionBase & ExcDifferentParallelPartitioning()
static ::ExceptionBase & ExcTrilinosError(int arg1)
#define DeclException1(Exception1, type1, outsequence)
Definition: exceptions.h:510
static ::ExceptionBase & ExcVectorTypeNotCompatible()
static const char V
SymmetricTensor< 2, dim, Number > b(const Tensor< 2, dim, Number > &F)