15#ifndef dealii_vector_h
16#define dealii_vector_h
30#include <boost/serialization/split_member.hpp>
33#include <initializer_list>
42# ifdef DEAL_II_WITH_PETSC
49# ifdef DEAL_II_WITH_TRILINOS
59# ifdef DEAL_II_TRILINOS_WITH_TPETRA
62 namespace TpetraWrappers
64 template <
typename Number,
typename MemorySpace>
70template <
typename number>
117template <
typename Number>
129 std::is_arithmetic_v<typename numbers::NumberTraits<Number>::real_type>,
130 "The Vector class only supports basic numeric types. In particular, it "
131 "does not support automatically differentiated numbers.");
191 template <
typename OtherNumber>
209 template <
typename OtherNumber>
210 explicit Vector(
const std::initializer_list<OtherNumber> &v);
212#ifdef DEAL_II_WITH_PETSC
227#ifdef DEAL_II_WITH_TRILINOS
245#ifdef DEAL_II_TRILINOS_WITH_TPETRA
260 template <
typename OtherNumber,
typename MemorySpace>
280 template <
typename InputIterator>
375 template <
typename Number2>
431 template <
typename Number2>
441#ifdef DEAL_II_WITH_PETSC
458#ifdef DEAL_II_WITH_TRILINOS
478#ifdef DEAL_II_TRILINOS_WITH_TPETRA
494 template <
typename OtherNumber,
typename MemorySpace>
505 template <
typename Number2>
514 template <
typename Number2>
539 template <
typename Number2>
718 template <
typename OtherNumber>
721 std::vector<OtherNumber> &
values)
const;
757 template <
typename ForwardIterator,
typename OutputIterator>
790 template <
typename OtherNumber>
792 add(
const std::vector<size_type> &indices,
793 const std::vector<OtherNumber> &
values);
799 template <
typename OtherNumber>
808 template <
typename OtherNumber>
889 template <
typename Number2>
904 template <
typename Number2>
929 const unsigned int precision = 3,
930 const bool scientific =
true,
931 const bool across =
true)
const;
960 template <
class Archive>
969 template <
class Archive>
979 template <
class Archive>
1119 mutable std::shared_ptr<parallel::internal::TBBPartitioner>
1123 template <
typename Number2>
1142template <
typename Number>
1153template <
typename Number>
1154template <
typename OtherNumber>
1161template <
typename Number>
1162template <
typename InputIterator>
1173template <
typename Number>
1184template <
typename Number>
1193template <
typename Number>
1202template <
typename Number>
1211template <
typename Number>
1220template <
typename Number>
1229template <
typename Number>
1238template <
typename Number>
1247template <
typename Number>
1256template <
typename Number>
1265template <
typename Number>
1275template <
typename Number>
1285template <
typename Number>
1289 return operator()(i);
1294template <
typename Number>
1298 return operator()(i);
1303template <
typename Number>
1304template <
typename OtherNumber>
1307 std::vector<OtherNumber> &
values)
const
1309 for (size_type i = 0; i < indices.size(); ++i)
1310 values[i] =
operator()(indices[i]);
1315template <
typename Number>
1316template <
typename ForwardIterator,
typename OutputIterator>
1332template <
typename Number>
1345template <
typename Number>
1346template <
typename OtherNumber>
1349 const std::vector<OtherNumber> &
values)
1353 add(indices.size(), indices.data(),
values.data());
1358template <
typename Number>
1359template <
typename OtherNumber>
1366 add(indices.size(), indices.data(),
values.values.begin());
1371template <
typename Number>
1372template <
typename OtherNumber>
1378 for (size_type i = 0; i <
n_indices; ++i)
1384 "The given value is not finite but either infinite or Not A Number (NaN)"));
1386 this->values[indices[i]] +=
values[i];
1392template <
typename Number>
1393template <
typename Number2>
1397 return !(*
this == v);
1401template <
typename Number>
1405 return this->size() == 0;
1408template <
typename Number>
1415template <
typename Number>
1424template <
typename Number>
1431template <
typename Number>
1438template <
typename Number>
1446template <
typename Number>
1447template <
typename Number2>
1457 thread_loop_partitioner = v.thread_loop_partitioner;
1466template <
typename Number>
1476template <
typename Number>
1477template <
class Archive>
1488template <
typename Number>
1489template <
class Archive>
1496 maybe_reset_thread_partitioner();
1515template <
typename Number>
1530template <
typename number>
1531inline std::ostream &
1539 out << v(v.size() - 1);
1554template <
typename Number>
void swap(AlignedVector< T > &vec) noexcept
std::conditional_t< rank_==1, std::array< Number, dim >, std::array< Tensor< rank_ - 1, dim, Number >, dim > > values
constexpr Tensor & operator*=(const OtherNumber &factor)
Vector< Number > & operator=(const PETScWrappers::VectorBase &v)
typename numbers::NumberTraits< Number >::real_type real_type
Number & operator[](const size_type i)
void extract_subvector_to(ForwardIterator indices_begin, const ForwardIterator indices_end, OutputIterator values_begin) const
bool operator!=(const Vector< Number2 > &v) const
const value_type * const_pointer
void scale(const Vector< Number2 > &scaling_factors)
bool has_ghost_elements() const
void add(const std::vector< size_type > &indices, const std::vector< OtherNumber > &values)
void add(const Number a, const Vector< Number > &V, const Number b, const Vector< Number > &W)
Vector(const TrilinosWrappers::MPI::Vector &v)
Number & operator()(const size_type i)
Vector< Number > & operator=(const TrilinosWrappers::MPI::Vector &v)
bool in_local_range(const size_type global_index) const
Vector< Number > & operator=(const Number s)
Number operator*(const Vector< Number2 > &V) const
const_pointer data() const
void do_reinit(const size_type new_size, const bool omit_zeroing_entries, const bool reset_partitioner)
Vector< Number > & operator=(const BlockVector< Number > &v)
void sadd(const Number s, const Number a, const Vector< Number > &V)
Vector(const size_type n)
Vector< Number > & operator=(Vector< Number > &&v) noexcept=default
const value_type * const_iterator
void block_write(std::ostream &out) const
Number mean_value() const
Number add_and_dot(const Number a, const Vector< Number > &V, const Vector< Number > &W)
void load(Archive &ar, const unsigned int version)
const value_type & const_reference
MPI_Comm get_mpi_communicator() const
void reinit(const Vector< Number2 > &V, const bool omit_zeroing_entries=false)
void print(std::ostream &out, const unsigned int precision=3, const bool scientific=true, const bool across=true) const
Vector(const Vector< Number > &v)
std::shared_ptr< parallel::internal::TBBPartitioner > thread_loop_partitioner
void block_read(std::istream &in)
types::global_dof_index size_type
Number operator[](const size_type i) const
Vector< Number > & operator*=(const Number factor)
virtual size_type size() const override
void equ(const Number a, const Vector< Number > &u)
void zero_out_ghost_values() const
void serialize(Archive &archive, const unsigned int version)
Vector(const PETScWrappers::VectorBase &v)
real_type lp_norm(const real_type p) const
const_iterator begin() const
void sadd(const Number s, const Vector< Number > &V)
bool operator==(const Vector< Number2 > &v) const
Vector(const LinearAlgebra::TpetraWrappers::Vector< OtherNumber, MemorySpace > &v)
real_type l2_norm() const
virtual void extract_subvector_to(const ArrayView< const types::global_dof_index > &indices, const ArrayView< Number > &elements) const override
void grow_or_shrink(const size_type N)
virtual ~Vector() override=default
Vector(const Vector< OtherNumber > &v)
void save(Archive &ar, const unsigned int version) const
real_type linfty_norm() const
Vector< Number > & operator=(const Vector< Number > &v)
Vector< Number > & operator+=(const Vector< Number > &V)
void scale(const Vector< Number > &scaling_factors)
void maybe_reset_thread_partitioner()
IndexSet locally_owned_elements() const
real_type norm_sqr() const
void add(const Number a, const Vector< Number > &V)
AlignedVector< Number > values
void equ(const Number a, const Vector< Number2 > &u)
Vector< Number > & operator=(const Vector< Number2 > &v)
void apply_givens_rotation(const std::array< Number, 3 > &csr, const size_type i, const size_type k)
const_iterator end() const
Vector(Vector< Number > &&v) noexcept=default
virtual void reinit(const size_type N, const bool omit_zeroing_entries=false)
void add(const size_type n_elements, const size_type *indices, const OtherNumber *values)
size_type locally_owned_size() const
Number operator()(const size_type i) const
virtual void swap(Vector< Number > &v) noexcept
void compress(VectorOperation::values operation=VectorOperation::unknown) const
bool is_non_negative() const
Vector< Number > & operator-=(const Vector< Number > &V)
Vector< Number > & operator=(const LinearAlgebra::TpetraWrappers::Vector< OtherNumber, MemorySpace > &v)
void extract_subvector_to(const std::vector< size_type > &indices, std::vector< OtherNumber > &values) const
void update_ghost_values() const
std::size_t memory_consumption() const
real_type l1_norm() const
void add(const std::vector< size_type > &indices, const Vector< OtherNumber > &values)
Vector(const InputIterator first, const InputIterator last)
Vector(const std::initializer_list< OtherNumber > &v)
Vector< Number > & operator/=(const Number factor)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcIO()
static ::ExceptionBase & ExcZero()
static ::ExceptionBase & ExcEmptyObject()
#define Assert(cond, exc)
#define AssertIsFinite(number)
#define AssertIndexRange(index, range)
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)
std::ostream & operator<<(std::ostream &out, const Vector< number > &v)
void swap(Vector< Number > &u, Vector< Number > &v) noexcept
VectorType::value_type * begin(VectorType &V)
void reinit(MatrixBlock< MatrixType > &v, const BlockSparsityPattern &p)
bool is_finite(const double x)
unsigned int global_dof_index