16 #ifndef dealii_trilinos_tpetra_vector_h
17 #define dealii_trilinos_tpetra_vector_h
20 #include <deal.II/base/config.h>
22 #if defined(DEAL_II_TRILINOS_WITH_TPETRA) && defined(DEAL_II_WITH_MPI)
24 # include <deal.II/base/index_set.h>
25 # include <deal.II/base/subscriptor.h>
27 # include <deal.II/lac/trilinos_tpetra_communication_pattern.h>
28 # include <deal.II/lac/vector_operation.h>
29 # include <deal.II/lac/vector_space_vector.h>
30 # include <deal.II/lac/vector_type_traits.h>
32 # include <Teuchos_Comm.hpp>
33 # include <Teuchos_OrdinalTraits.hpp>
34 # include <Tpetra_Core.hpp>
35 # include <Tpetra_Vector.hpp>
36 # include <Tpetra_Version.hpp>
41 DEAL_II_NAMESPACE_OPEN
46 template <
typename Number>
47 class ReadWriteVector;
49 namespace TpetraWrappers
74 template <
typename Number>
78 using value_type = Number;
80 using size_type =
typename VectorSpaceVector<Number>::size_type;
100 const MPI_Comm &communicator);
109 reinit(
const IndexSet ¶llel_partitioner,
110 const MPI_Comm &communicator,
111 const bool omit_zeroing_entries =
false);
118 reinit(
const VectorSpaceVector<Number> &V,
119 const bool omit_zeroing_entries =
false)
override;
127 operator=(
const Vector &V);
134 operator=(
const Number s)
override;
146 const ReadWriteVector<Number> & V,
148 std::shared_ptr<const CommunicationPatternBase> communication_pattern =
149 std::shared_ptr<const CommunicationPatternBase>())
override;
155 operator*=(
const Number factor)
override;
161 operator/=(
const Number factor)
override;
167 operator+=(
const VectorSpaceVector<Number> &V)
override;
173 operator-=(
const VectorSpaceVector<Number> &V)
override;
180 operator*(
const VectorSpaceVector<Number> &V)
const override;
186 add(
const Number a)
override;
193 add(
const Number a,
const VectorSpaceVector<Number> &V)
override;
201 const VectorSpaceVector<Number> &V,
203 const VectorSpaceVector<Number> &W)
override;
212 const VectorSpaceVector<Number> &V)
override;
221 scale(
const VectorSpaceVector<Number> &scaling_factors)
override;
227 equ(
const Number a,
const VectorSpaceVector<Number> &V)
override;
233 all_zero()
const override;
239 mean_value()
const override;
245 virtual typename LinearAlgebra::VectorSpaceVector<Number>::real_type
246 l1_norm()
const override;
252 virtual typename LinearAlgebra::VectorSpaceVector<Number>::real_type
253 l2_norm()
const override;
259 virtual typename LinearAlgebra::VectorSpaceVector<Number>::real_type
260 linfty_norm()
const override;
286 const VectorSpaceVector<Number> &V,
287 const VectorSpaceVector<Number> &W)
override;
293 has_ghost_elements()
const;
300 size()
const override;
306 get_mpi_communicator()
const;
320 locally_owned_elements()
const override;
326 const Tpetra::Vector<Number, int, types::global_dof_index> &
327 trilinos_vector()
const;
333 Tpetra::Vector<Number, int, types::global_dof_index> &
340 print(std::ostream & out,
341 const unsigned int precision = 3,
342 const bool scientific =
true,
343 const bool across =
true)
const override;
371 <<
"An error with error number " << arg1
372 <<
" occurred while calling a Trilinos function");
381 create_tpetra_comm_pattern(
const IndexSet &source_index_set,
382 const MPI_Comm &mpi_comm);
387 std::unique_ptr<Tpetra::Vector<Number, int, types::global_dof_index>>
399 std::shared_ptr<const TpetraWrappers::CommunicationPattern>
404 template <
typename Number>
417 template <
typename Number>
422 DEAL_II_NAMESPACE_CLOSE