16 #ifndef dealii_vector_h 17 #define dealii_vector_h 32 #include <boost/serialization/split_member.hpp> 35 #include <initializer_list> 45 # ifdef DEAL_II_WITH_PETSC 52 # ifdef DEAL_II_WITH_TRILINOS 62 template <
typename number>
108 template <
typename Number>
116 "The Vector class does not support auto-differentiable numbers.");
160 Vector(
const Vector<Number> &v);
166 Vector(Vector<Number> &&v) noexcept =
default;
176 template <
typename OtherNumber>
177 explicit Vector(
const Vector<OtherNumber> &v);
194 template <
typename OtherNumber>
195 explicit Vector(
const std::initializer_list<OtherNumber> &v);
197 #ifdef DEAL_II_WITH_PETSC 212 #ifdef DEAL_II_WITH_TRILINOS 245 template <
typename InputIterator>
246 Vector(
const InputIterator
first,
const InputIterator last);
252 virtual ~
Vector()
override =
default;
323 apply_givens_rotation(
const std::array<Number, 3> &csr,
334 template <
typename Number2>
336 reinit(
const Vector<Number2> &
V,
const bool omit_zeroing_entries =
false);
354 swap(Vector<Number> &v);
367 operator=(
const Number s);
375 operator=(
const Vector<Number> &v);
383 operator=(Vector<Number> &&v) noexcept =
default;
390 template <
typename Number2>
392 operator=(
const Vector<Number2> &v);
400 #ifdef DEAL_II_WITH_PETSC 417 #ifdef DEAL_II_WITH_TRILINOS 442 template <
typename Number2>
451 template <
typename Number2>
476 template <
typename Number2>
477 Number
operator*(
const Vector<Number2> &
V)
const;
562 add_and_dot(
const Number a,
const Vector<Number> &
V,
const Vector<Number> &W);
628 Number operator[](
const size_type i)
const;
652 template <
typename OtherNumber>
654 extract_subvector_to(
const std::vector<size_type> &indices,
655 std::vector<OtherNumber> &
values)
const;
684 template <
typename ForwardIterator,
typename OutputIterator>
686 extract_subvector_to(ForwardIterator indices_begin,
687 const ForwardIterator indices_end,
688 OutputIterator values_begin)
const;
703 operator+=(
const Vector<Number> &
V);
711 operator-=(
const Vector<Number> &
V);
717 template <
typename OtherNumber>
719 add(
const std::vector<size_type> & indices,
720 const std::vector<OtherNumber> &
values);
726 template <
typename OtherNumber>
728 add(
const std::vector<size_type> &indices,
const Vector<OtherNumber> &
values);
735 template <
typename OtherNumber>
739 const OtherNumber *
values);
757 const Vector<Number> &
V,
759 const Vector<Number> &W);
767 add(
const Number a,
const Vector<Number> &
V);
775 sadd(
const Number s,
const Vector<Number> &
V);
783 sadd(
const Number s,
const Number a,
const Vector<Number> &
V);
791 operator*=(
const Number factor);
799 operator/=(
const Number factor);
809 scale(
const Vector<Number> &scaling_factors);
816 template <
typename Number2>
818 scale(
const Vector<Number2> &scaling_factors);
826 equ(
const Number a,
const Vector<Number> &u);
831 template <
typename Number2>
833 equ(
const Number a,
const Vector<Number2> &u);
840 update_ghost_values()
const;
855 print(std::ostream & out,
856 const unsigned int precision = 3,
857 const bool scientific =
true,
858 const bool across =
true)
const;
866 block_write(std::ostream &out)
const;
880 block_read(std::istream &in);
887 template <
class Archive>
889 save(Archive &ar,
const unsigned int version)
const;
896 template <
class Archive>
898 load(Archive &ar,
const unsigned int version);
906 template <
class Archive>
908 serialize(Archive &archive,
const unsigned int version);
912 BOOST_SERIALIZATION_SPLIT_MEMBER()
948 locally_owned_elements()
const;
964 locally_owned_size()
const;
999 has_ghost_elements()
const;
1014 maybe_reset_thread_partitioner();
1021 const bool omit_zeroing_entries,
1022 const bool reset_partitioner);
1028 mutable std::shared_ptr<parallel::internal::TBBPartitioner>
1032 template <
typename Number2>
1051 template <
typename Number>
1062 template <
typename Number>
1063 template <
typename OtherNumber>
1070 template <
typename Number>
1071 template <
typename InputIterator>
1076 reinit(std::distance(first, last),
true);
1082 template <
typename Number>
1093 template <
typename Number>
1102 template <
typename Number>
1111 template <
typename Number>
1120 template <
typename Number>
1129 template <
typename Number>
1138 template <
typename Number>
1147 template <
typename Number>
1156 template <
typename Number>
1165 template <
typename Number>
1174 template <
typename Number>
1184 template <
typename Number>
1194 template <
typename Number>
1202 template <
typename Number>
1210 template <
typename Number>
1211 template <
typename OtherNumber>
1214 std::vector<OtherNumber> &
values)
const 1216 for (
size_type i = 0; i < indices.size(); ++i)
1217 values[i] =
operator()(indices[i]);
1222 template <
typename Number>
1223 template <
typename ForwardIterator,
typename OutputIterator>
1226 const ForwardIterator indices_end,
1227 OutputIterator values_begin)
const 1229 while (indices_begin != indices_end)
1239 template <
typename Number>
1240 inline Vector<Number> &
1252 template <
typename Number>
1253 template <
typename OtherNumber>
1256 const std::vector<OtherNumber> &values)
1258 Assert(indices.size() == values.size(),
1260 add(indices.size(), indices.data(), values.data());
1265 template <
typename Number>
1266 template <
typename OtherNumber>
1269 const Vector<OtherNumber> & values)
1271 Assert(indices.size() == values.size(),
1273 add(indices.size(), indices.data(), values.values.begin());
1278 template <
typename Number>
1279 template <
typename OtherNumber>
1283 const OtherNumber *values)
1285 for (
size_type i = 0; i < n_indices; ++i)
1291 "The given value is not finite but either infinite or Not A Number (NaN)"));
1293 this->values[indices[i]] += values[i];
1299 template <
typename Number>
1300 template <
typename Number2>
1304 return !(*
this == v);
1309 template <
typename Number>
1314 template <
typename Number>
1321 template <
typename Number>
1331 template <
typename Number>
1335 values.swap(v.values);
1341 template <
typename Number>
1342 template <
class Archive>
1353 template <
typename Number>
1354 template <
class Archive>
1379 template <
typename Number>
1381 swap(Vector<Number> &u, Vector<Number> &v)
1394 template <
typename number>
1395 inline std::ostream &
1396 operator<<(std::ostream &out, const Vector<number> &v)
1403 out << v(v.size() - 1);
1418 template <
typename Number>
void update_ghost_values() const
void reinit(MatrixBlock< MatrixType > &v, const BlockSparsityPattern &p)
Number operator[](const size_type i) const
bool operator!=(const Vector< Number2 > &v) const
void load(Archive &ar, const unsigned int version)
void extract_subvector_to(const std::vector< size_type > &indices, std::vector< OtherNumber > &values) const
Number operator()(const size_type i) const
static ::ExceptionBase & ExcIO()
types::global_dof_index size_type
typename numbers::NumberTraits< typename VectorType::value_type >::real_type real_type
bool operator!=(const AlignedVector< T > &lhs, const AlignedVector< T > &rhs)
std::vector< value_type > l2_norm(const typename ::Triangulation< dim, spacedim >::cell_iterator &parent, const value_type parent_value)
#define AssertIndexRange(index, range)
void swap(VectorBase &u, VectorBase &v)
__global__ void add_and_dot(Number *res, Number *v1, const Number *v2, const Number *v3, const Number a, const size_type N)
#define AssertThrow(cond, exc)
bool operator==(const AlignedVector< T > &lhs, const AlignedVector< T > &rhs)
bool is_finite(const double x)
void add(const std::vector< size_type > &indices, const std::vector< OtherNumber > &values)
static ::ExceptionBase & ExcMessage(std::string arg1)
bool has_ghost_elements() const
std::string compress(const std::string &input)
typename VectorType::value_type value_type
bool in_local_range(const size_type global_index) const
void maybe_reset_thread_partitioner()
#define Assert(cond, exc)
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
real_type lp_norm(const real_type p) const
const value_type * const_pointer
Number linfty_norm(const Tensor< 2, dim, Number > &t)
#define DEAL_II_NAMESPACE_CLOSE
bool is_non_negative(const T &t)
VectorType::value_type * end(VectorType &V)
Vector< Number > & operator*=(const Number factor)
__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)
SymmetricTensor< 2, dim, Number > b(const Tensor< 2, dim, Number > &F)
void swap(Vector< Number > &u, Vector< Number > &v)
unsigned int global_dof_index
virtual void swap(Vector< Number > &v)
Vector< Number > & operator/=(const Number factor)
const value_type * const_iterator
void save(Archive &ar, const unsigned int version) const
#define DEAL_II_NAMESPACE_OPEN
VectorType::value_type * begin(VectorType &V)
const value_type * const_pointer
size_type locally_owned_size() const
Number l1_norm(const Tensor< 2, dim, Number > &t)
static ::ExceptionBase & ExcEmptyObject()
void compress(::VectorOperation::values operation=::VectorOperation::unknown) const
virtual void reinit(const size_type N, const bool omit_zeroing_entries=false)
AlignedVector< Number > values
std::shared_ptr< parallel::internal::TBBPartitioner > thread_loop_partitioner
TrilinosWrappers::types::int_type global_index(const Epetra_BlockMap &map, const ::types::global_dof_index i)
std::enable_if< std::is_floating_point< T >::value &&std::is_floating_point< U >::value, typename ProductType< std::complex< T >, std::complex< U > >::type >::type operator*(const std::complex< T > &left, const std::complex< U > &right)
types::global_dof_index size_type
const value_type * const_iterator
static ::ExceptionBase & ExcZero()
void copy(const T *begin, const T *end, U *dest)
#define AssertIsFinite(number)
const value_type & const_reference
std::enable_if< std::is_fundamental< T >::value, std::size_t >::type memory_consumption(const T &t)