13#ifndef dealii_trilinos_epetra_vector_h
14#define dealii_trilinos_epetra_vector_h
19#ifdef DEAL_II_TRILINOS_WITH_EPETRA
30# include <Epetra_FEVector.h>
39#ifdef DEAL_II_TRILINOS_WITH_EPETRA
43 template <
typename Number>
44 class ReadWriteVector;
53 namespace EpetraWrappers
60 "Transition to functionality provided in TrilinosWrappers or TpetraWrappers!")
99 VectorReference(
Vector &vector,
const size_type index);
105 VectorReference(
const VectorReference &) =
default;
118 const VectorReference &
119 operator=(
const VectorReference &r)
const;
125 operator=(
const VectorReference &r);
130 const VectorReference &
136 const VectorReference &
142 const VectorReference &
148 const VectorReference &
154 const VectorReference &
168 <<
"An error with error number " << arg1
169 <<
" occurred while calling a Trilinos function");
177 ExcAccessToNonLocalElement,
182 <<
"You are trying to access element " << arg1
183 <<
" of a distributed vector, but this element is not stored "
184 <<
"on the current processor. Note: There are " << arg2
185 <<
" elements stored "
186 <<
"on the current processor from within the range [" << arg3 <<
','
187 << arg4 <<
"] but Trilinos vectors need not store contiguous "
188 <<
"ranges on each processor, and not every element in "
189 <<
"this range may in fact be stored locally."
191 <<
"A common source for this kind of problem is that you "
192 <<
"are passing a 'fully distributed' vector into a function "
193 <<
"that needs read access to vector elements that correspond "
194 <<
"to degrees of freedom on ghost cells (or at least to "
195 <<
"'locally active' degrees of freedom that are not also "
196 <<
"'locally owned'). You need to pass a vector that has these "
197 <<
"elements as ghost entries.");
208 const size_type index;
212 friend class ::LinearAlgebra::EpetraWrappers::Vector;
230 "Transition to functionality provided in TrilinosWrappers or TpetraWrappers!")
272 reinit(
const IndexSet ¶llel_partitioner,
274 const bool omit_zeroing_entries =
false);
281 reinit(
const Vector &V,
const bool omit_zeroing_entries =
false);
287 extract_subvector_to(
321 operator=(
const Vector &V);
337 operator=(
const double s);
351 const std::shared_ptr<const Utilities::MPI::CommunicationPatternBase>
352 &communication_pattern = {});
409 operator*=(
const double factor);
415 operator/=(
const double factor);
421 operator+=(
const Vector &V);
427 operator-=(
const Vector &V);
447 add(
const double a,
const Vector &V);
454 add(
const double a,
const Vector &V,
const double b,
const Vector &W);
461 sadd(
const double s,
const double a,
const Vector &V);
470 scale(
const Vector &scaling_factors);
476 equ(
const double a,
const Vector &V);
542 add_and_dot(
const double a,
const Vector &V,
const Vector &W);
556 has_ghost_elements()
const;
563 size()
const override;
576 get_mpi_communicator()
const;
590 locally_owned_elements()
const;
617 const Epetra_FEVector &
618 trilinos_vector()
const;
631 print(std::ostream &out,
632 const unsigned int precision = 3,
633 const bool scientific =
true,
634 const bool across =
true)
const;
640 memory_consumption()
const;
664 <<
"An error with error number " << arg1
665 <<
" occurred while calling a Trilinos function");
674 create_epetra_comm_pattern(
const IndexSet &source_index_set,
694 friend class internal::VectorReference;
702 inline VectorReference::VectorReference(
Vector &vector,
703 const size_type index)
710 inline const VectorReference &
711 VectorReference::operator=(
const VectorReference &r)
const
724 inline VectorReference &
725 VectorReference::operator=(
const VectorReference &r)
735 inline const VectorReference &
736 VectorReference::operator=(
const value_type &value)
const
740 (*vector.vector)[0][index] = value;
747 inline const VectorReference &
748 VectorReference::operator+=(
const value_type &value)
const
753 (*vector.vector)[0][index] = new_value;
760 inline const VectorReference &
761 VectorReference::operator-=(
const value_type &value)
const
766 (*vector.vector)[0][index] = new_value;
773 inline const VectorReference &
774 VectorReference::operator*=(
const value_type &value)
const
779 (*vector.vector)[0][index] = new_value;
786 inline const VectorReference &
787 VectorReference::operator/=(
const value_type &value)
const
792 (*vector.vector)[0][index] = new_value;
801 inline internal::VectorReference
804 return internal::VectorReference(*
this, index);
807 inline internal::VectorReference
* * reference operator*() const
* * Point< dim > operator()(const Point< dim > &p) const *
VectorTraits::value_type value_type
std::unique_ptr< Epetra_FEVector > vector
value_type operator()(const size_type index) const
internal::VectorReference reference
::IndexSet source_stored_elements
std::shared_ptr< const CommunicationPattern > epetra_comm_pattern
const internal::VectorReference const_reference
bool has_ghost_elements() const
Number operator[](const size_type i) const
Number operator()(const size_type i) const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_DISABLE_EXTRA_DIAGNOSTICS
#define DEAL_II_DEPRECATED_WITH_COMMENT(comment)
#define DEAL_II_NAMESPACE_CLOSE
#define DEAL_II_ENABLE_EXTRA_DIAGNOSTICS
#define DeclException0(Exception0)
static ::ExceptionBase & ExcGhostsPresent()
#define DeclException4(Exception4, type1, type2, type3, type4, outsequence)
#define Assert(cond, exc)
#define DeclException1(Exception1, type1, outsequence)
types::global_dof_index locally_owned_size
unsigned int global_dof_index
Number linfty_norm(const Tensor< 2, dim, Number > &t)
Number l1_norm(const Tensor< 2, dim, Number > &t)