16 #ifndef dealii__vector_h 17 #define dealii__vector_h 20 #include <deal.II/base/config.h> 21 #include <deal.II/base/logstream.h> 22 #include <deal.II/base/exceptions.h> 23 #include <deal.II/base/subscriptor.h> 24 #include <deal.II/base/index_set.h> 25 #include <boost/serialization/array.hpp> 26 #include <boost/serialization/split_member.hpp> 33 DEAL_II_NAMESPACE_OPEN
36 #ifdef DEAL_II_WITH_PETSC 47 #ifdef DEAL_II_WITH_TRILINOS 84 enum values { unknown, insert, add };
108 template <
typename Number>
117 typedef value_type *pointer;
118 typedef const value_type *const_pointer;
119 typedef value_type *iterator;
120 typedef const value_type *const_iterator;
121 typedef value_type &reference;
122 typedef const value_type &const_reference;
145 static const bool supports_distributed_data =
false;
167 #ifdef DEAL_II_WITH_CXX11 179 #ifndef DEAL_II_EXPLICIT_CONSTRUCTOR_BUG 192 template <
typename OtherNumber>
197 #ifdef DEAL_II_WITH_PETSC 218 #ifdef DEAL_II_WITH_TRILINOS 249 explicit Vector (
const size_type n);
255 template <
typename InputIterator>
256 Vector (
const InputIterator first,
257 const InputIterator last);
278 void compress (::VectorOperation::values operation
279 =::VectorOperation::unknown)
const;
296 virtual void reinit (
const size_type N,
297 const bool omit_zeroing_entries=
false);
306 template <
typename Number2>
308 const bool omit_zeroing_entries=
false);
348 #ifdef DEAL_II_WITH_CXX11 364 template <
typename Number2>
372 #ifdef DEAL_II_WITH_PETSC 396 #ifdef DEAL_II_WITH_TRILINOS 425 template <
typename Number2>
433 template <
typename Number2>
457 template <
typename Number2>
467 real_type norm_sqr ()
const;
476 Number mean_value ()
const;
485 real_type l1_norm ()
const;
495 real_type l2_norm ()
const;
505 real_type lp_norm (
const real_type p)
const;
510 real_type linfty_norm ()
const;
532 Number add_and_dot (
const Number a,
554 const_iterator begin ()
const;
565 const_iterator end ()
const;
570 Number operator() (
const size_type i)
const;
575 Number &operator() (
const size_type i);
582 Number operator[] (
const size_type i)
const;
589 Number &operator[] (
const size_type i);
597 template <
typename OtherNumber>
598 void extract_subvector_to (
const std::vector<size_type> &indices,
599 std::vector<OtherNumber> &values)
const;
605 template <
typename ForwardIterator,
typename OutputIterator>
606 void extract_subvector_to (ForwardIterator indices_begin,
607 const ForwardIterator indices_end,
608 OutputIterator values_begin)
const;
635 template <
typename OtherNumber>
636 void add (
const std::vector<size_type> &indices,
637 const std::vector<OtherNumber> &values);
643 template <
typename OtherNumber>
644 void add (
const std::vector<size_type> &indices,
652 template <
typename OtherNumber>
653 void add (
const size_type n_elements,
654 const size_type *indices,
655 const OtherNumber *values);
663 void add (
const Number s);
695 void sadd (
const Number s,
703 void sadd (
const Number s,
714 void sadd (
const Number s,
728 void sadd (
const Number s,
764 template <
typename Number2>
777 template <
typename Number2>
827 void update_ghost_values ()
const;
841 void print (
const char *format = 0) const DEAL_II_DEPRECATED;
849 void print (
std::ostream &out,
850 const
unsigned int precision = 3,
851 const
bool scientific = true,
852 const
bool across = true) const;
863 const
unsigned int width = 6,
864 const
bool across = true) const DEAL_II_DEPRECATED;
871 void block_write (
std::ostream &out) const;
884 void block_read (
std::istream &in);
890 template <class Archive>
891 void save (Archive &ar, const
unsigned int version) const;
897 template <class Archive>
898 void load (Archive &ar, const
unsigned int version);
900 BOOST_SERIALIZATION_SPLIT_MEMBER()
916 bool in_local_range (const size_type global_index) const;
933 IndexSet locally_owned_elements () const;
938 std::
size_t size () const;
945 bool all_zero () const;
956 bool is_non_negative () const;
962 std::
size_t memory_consumption () const;
979 size_type max_vec_size;
989 template <typename Number2> friend class
Vector;
1022 template <
typename Number>
1033 template <
typename Number>
1034 template <
typename InputIterator>
1043 reinit (std::distance (first, last),
true);
1044 std::copy (first, last,
begin());
1049 template <
typename Number>
1062 template <
typename Number>
1075 template <
typename Number>
1078 const bool omit_zeroing_entries)
1084 max_vec_size = vec_size = 0;
1095 if (omit_zeroing_entries ==
false)
1096 *
this =
static_cast<Number
>(0);
1106 template <
typename T,
typename U>
1107 void copy_vector (const ::Vector<T> &src,
1114 template <
typename Number>
1119 ::internal::Vector::copy_vector (v, *
this);
1125 #ifdef DEAL_II_WITH_CXX11 1126 template <
typename Number>
1139 template <
typename Number>
1140 template <
typename Number2>
1145 internal::Vector::copy_vector (v, *
this);
1151 template <
typename Number>
1159 template <
typename Number>
1162 (
const size_type)
const 1169 template <
typename Number>
1171 typename Vector<Number>::iterator
1179 template <
typename Number>
1181 typename Vector<Number>::const_iterator
1189 template <
typename Number>
1191 typename Vector<Number>::iterator
1199 template <
typename Number>
1201 typename Vector<Number>::const_iterator
1209 template <
typename Number>
1213 Assert (i<vec_size, ExcIndexRange(i,0,vec_size));
1219 template <
typename Number>
1223 Assert (i<vec_size, ExcIndexRangeType<size_type>(i,0,vec_size));
1229 template <
typename Number>
1238 template <
typename Number>
1247 template <
typename Number>
1248 template <
typename OtherNumber>
1251 std::vector<OtherNumber> &values)
const 1253 for (size_type i = 0; i < indices.size(); ++i)
1254 values[i] =
operator()(indices[i]);
1259 template <
typename Number>
1260 template <
typename ForwardIterator,
typename OutputIterator>
1263 const ForwardIterator indices_end,
1264 OutputIterator values_begin)
const 1266 while (indices_begin != indices_end)
1276 template <
typename Number>
1282 Assert (factor != Number(0.), ExcZero() );
1290 template <
typename Number>
1291 template <
typename OtherNumber>
1295 const std::vector<OtherNumber> &values)
1297 Assert (indices.size() == values.size(),
1298 ExcDimensionMismatch(indices.size(), values.size()));
1299 add (indices.size(), &indices[0], &values[0]);
1304 template <
typename Number>
1305 template <
typename OtherNumber>
1312 ExcDimensionMismatch(indices.size(), values.
size()));
1313 add (indices.size(), &indices[0], values.
val);
1318 template <
typename Number>
1319 template <
typename OtherNumber>
1323 const size_type *indices,
1324 const OtherNumber *values)
1326 for (size_type i=0; i<n_indices; ++i)
1328 Assert (indices[i] < vec_size, ExcIndexRange(indices[i],0,vec_size));
1330 ExcMessage(
"The given value is not finite but either infinite or Not A Number (NaN)"));
1332 val[indices[i]] += values[i];
1338 template <
typename Number>
1339 template <
typename Number2>
1344 return ! (*
this == v);
1349 template <
typename Number>
1357 template <
typename Number>
1368 template <
typename Number>
1375 std::swap (val, v.
val);
1380 template <
typename Number>
1381 template <
class Archive>
1390 ar &boost::serialization::make_array(val, max_vec_size);
1395 template <
typename Number>
1396 template <
class Archive>
1409 ar &boost::serialization::make_array(val, max_vec_size);
1428 template <
typename Number>
1439 template <
typename number>
1442 operator << (std::ostream &os, const Vector<number> &v)
1451 template <
typename number>
1454 operator << (LogStream &os, const Vector<number> &v)
1463 DEAL_II_NAMESPACE_CLOSE
void update_ghost_values() const
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
::ExceptionBase & ExcMessage(std::string arg1)
Vector< Number > & operator=(const Number s)
bool is_finite(const double x)
BlockDynamicSparsityPattern BlockCompressedSparsityPattern DEAL_II_DEPRECATED
void add(const std::vector< size_type > &indices, const std::vector< OtherNumber > &values)
numbers::NumberTraits< Number >::real_type real_type
bool in_local_range(const size_type global_index) const
unsigned int global_dof_index
#define Assert(cond, exc)
Vector< Number > & operator*=(const Number factor)
void print(const char *format=0) const DEAL_II_DEPRECATED
void swap(Vector< Number > &u, Vector< Number > &v)
virtual void swap(Vector< Number > &v)
Vector< Number > & operator/=(const Number factor)
void save(Archive &ar, const unsigned int version) const
void compress(::VectorOperation::values operation=::VectorOperation::unknown) const
virtual void reinit(const size_type N, const bool omit_zeroing_entries=false)
#define AssertIsFinite(number)