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
static ::ExceptionBase & ExcTrilinosError(int arg1)
__global__ void add_and_dot(Number *res, Number *v1, const Number *v2, const Number *v3, const Number a, const size_type N)
SymmetricTensor< rank_, dim, Number > operator*(const SymmetricTensor< rank_, dim, Number > &t, const Number &factor)
LinearAlgebra::distributed::Vector< Number > Vector
__global__ void scale(Number *val, const Number *V_val, const size_type N)
#define DeclException1(Exception1, type1, outsequence)
#define DeclException0(Exception0)
__global__ void equ(Number *val, const Number a, const Number *V_val, const size_type N)
__global__ void sadd(const Number s, Number *val, const Number a, const Number *V_val, const size_type N)
bool has_ghost_elements() const
std::enable_if< std::is_fundamental< T >::value, std::size_t >::type memory_consumption(const T &t)