17 #ifndef __deal2__vector_h 18 #define __deal2__vector_h 21 #include <deal.II/base/config.h> 22 #include <deal.II/base/logstream.h> 24 #include <deal.II/base/subscriptor.h> 25 #include <deal.II/base/index_set.h> 26 #include <boost/serialization/array.hpp> 27 #include <boost/serialization/split_member.hpp> 37 #ifdef DEAL_II_WITH_PETSC 48 #ifdef DEAL_II_WITH_TRILINOS 84 enum values { unknown, insert, add };
109 template <
typename Number>
120 typedef value_type *pointer;
121 typedef const value_type *const_pointer;
122 typedef value_type *iterator;
123 typedef const value_type *const_iterator;
124 typedef value_type &reference;
125 typedef const value_type &const_reference;
160 static const bool supports_distributed_data =
false;
186 #ifndef DEAL_II_EXPLICIT_CONSTRUCTOR_BUG 207 template <
typename OtherNumber>
212 #ifdef DEAL_II_WITH_PETSC 241 #ifdef DEAL_II_WITH_TRILINOS 294 explicit Vector (
const size_type n);
303 template <
typename InputIterator>
304 Vector (
const InputIterator first,
305 const InputIterator last);
334 void compress (::VectorOperation::values operation
335 =::VectorOperation::unknown)
const;
362 virtual void reinit (
const size_type N,
363 const bool fast=
false);
374 template <
typename Number2>
376 const bool fast=
false);
439 template <
typename Number2>
449 #ifdef DEAL_II_WITH_PETSC 484 #ifdef DEAL_II_WITH_TRILINOS 530 template <
typename Number2>
541 template <
typename Number2>
560 template <
typename Number2>
566 real_type norm_sqr ()
const;
572 Number mean_value ()
const;
578 real_type l1_norm ()
const;
585 real_type l2_norm ()
const;
593 real_type lp_norm (
const real_type p)
const;
599 real_type linfty_norm ()
const;
607 bool in_local_range (
const size_type global_index)
const;
627 IndexSet locally_owned_elements ()
const;
632 std::size_t size ()
const;
642 bool all_zero ()
const;
658 bool is_non_negative ()
const;
673 const_iterator begin ()
const;
685 const_iterator end ()
const;
697 Number operator() (
const size_type i)
const;
703 Number &operator() (
const size_type i);
711 Number operator[] (
const size_type i)
const;
719 Number &operator[] (
const size_type i);
731 template <
typename OtherNumber>
732 void extract_subvector_to (
const std::vector<size_type> &indices,
733 std::vector<OtherNumber> &values)
const;
739 template <
typename ForwardIterator,
typename OutputIterator>
740 void extract_subvector_to (ForwardIterator indices_begin,
741 const ForwardIterator indices_end,
742 OutputIterator values_begin)
const;
771 template <
typename OtherNumber>
772 void add (
const std::vector<size_type> &indices,
773 const std::vector<OtherNumber> &values);
782 template <
typename OtherNumber>
783 void add (
const std::vector<size_type> &indices,
795 template <
typename OtherNumber>
796 void add (
const size_type n_elements,
797 const size_type *indices,
798 const OtherNumber *values);
805 void add (
const Number s);
831 void sadd (
const Number s,
838 void sadd (
const Number s,
845 void sadd (
const Number s,
855 void sadd (
const Number s,
875 this->operator *= (factor);
913 template <
typename Number2>
924 template <
typename Number2>
974 void update_ghost_values ()
const;
989 void print (
const char *format = 0)
const;
1005 void print (std::ostream &out,
1006 const unsigned int precision = 3,
1007 const bool scientific =
true,
1008 const bool across =
true)
const;
1023 const unsigned int width = 6,
1024 const bool across =
true)
const;
1035 void block_write (std::ostream &out)
const;
1056 void block_read (std::istream &in);
1063 std::size_t memory_consumption ()
const;
1070 template <
class Archive>
1071 void save (Archive &ar,
const unsigned int version)
const;
1077 template <
class Archive>
1078 void load (Archive &ar,
const unsigned int version);
1080 BOOST_SERIALIZATION_SPLIT_MEMBER()
1116 template <
typename Number2>
friend class Vector;
1138 template <
typename Number>
1149 template <
typename Number>
1150 template <
typename InputIterator>
1160 reinit (std::distance (first, last),
true);
1161 std::copy (first, last,
begin());
1166 template <
typename Number>
1179 template <
typename Number>
1192 template <
typename Number>
1213 *
this =
static_cast<Number
>(0);
1223 template <
typename T,
typename U>
1224 void copy_vector (const ::Vector<T> &src,
1231 template <
typename Number>
1236 internal::Vector::copy_vector (v, *
this);
1242 template <
typename Number>
1243 template <
typename Number2>
1248 internal::Vector::copy_vector (v, *
this);
1254 template <
typename Number>
1262 template <
typename Number>
1265 (
const size_type)
const 1272 template <
typename Number>
1274 typename Vector<Number>::iterator
1282 template <
typename Number>
1284 typename Vector<Number>::const_iterator
1292 template <
typename Number>
1294 typename Vector<Number>::iterator
1302 template <
typename Number>
1304 typename Vector<Number>::const_iterator
1312 template <
typename Number>
1322 template <
typename Number>
1332 template <
typename Number>
1341 template <
typename Number>
1350 template <
typename Number>
1351 template <
typename OtherNumber>
1354 std::vector<OtherNumber> &values)
const 1356 for (size_type i = 0; i < indices.size(); ++i)
1357 values[i] =
operator()(indices[i]);
1362 template <
typename Number>
1363 template <
typename ForwardIterator,
typename OutputIterator>
1366 const ForwardIterator indices_end,
1367 OutputIterator values_begin)
const 1369 while (indices_begin != indices_end)
1379 template <
typename Number>
1393 template <
typename Number>
1394 template <
typename OtherNumber>
1398 const std::vector<OtherNumber> &values)
1400 Assert (indices.size() == values.size(),
1402 add (indices.size(), &indices[0], &values[0]);
1407 template <
typename Number>
1408 template <
typename OtherNumber>
1416 add (indices.size(), &indices[0], values.
val);
1421 template <
typename Number>
1422 template <
typename OtherNumber>
1426 const size_type *indices,
1427 const OtherNumber *values)
1429 for (size_type i=0; i<n_indices; ++i)
1433 ExcMessage(
"The given value is not finite but either infinite or Not A Number (NaN)"));
1435 val[indices[i]] += values[i];
1441 template <
typename Number>
1442 template <
typename Number2>
1447 return ! (*
this == v);
1452 template <
typename Number>
1460 template <
typename Number>
1471 template <
typename Number>
1478 std::swap (
val, v.val);
1483 template <
typename Number>
1484 template <
class Archive>
1494 ar &boost::serialization::make_array(
val, max_vec_size);
1499 template <
typename Number>
1500 template <
class Archive>
1512 ar &boost::serialization::make_array(
val, max_vec_size);
1532 template <
typename Number>
1543 template <
typename number>
1546 operator << (std::ostream &os, const Vector<number> &v)
1555 template <
typename number>
1558 operator << (LogStream &os, const Vector<number> &v)
1567 DEAL_II_NAMESPACE_CLOSE
void load(Archive &ar, const unsigned int version)
Vector< Number > & operator*=(const Number factor)
::ExceptionBase & ExcOutOfMemory()
::ExceptionBase & ExcMessage(std::string arg1)
bool in_local_range(const size_type global_index) const
void scale(const Number factor) DEAL_II_DEPRECATED
void compress(::VectorOperation::values operation=::VectorOperation::unknown) const
void update_ghost_values() const
bool is_finite(const double x)
Vector< Number > & operator=(const Number s)
void add(const std::vector< size_type > &indices, const std::vector< OtherNumber > &values)
numbers::NumberTraits< Number >::real_type real_type
unsigned int global_dof_index
virtual void reinit(const size_type N, const bool fast=false)
#define Assert(cond, exc)
Number operator[](const size_type i) const
bool operator!=(const Vector< Number2 > &v) const
::ExceptionBase & ExcIndexRange(int arg1, int arg2, int arg3)
BlockCompressedSparsityPattern CompressedBlockSparsityPattern DEAL_II_DEPRECATED
void swap(Vector< Number > &u, Vector< Number > &v)
virtual void swap(Vector< Number > &v)
Vector< Number > & operator/=(const Number factor)
::ExceptionBase & ExcNumberNotFinite()
void extract_subvector_to(const std::vector< size_type > &indices, std::vector< OtherNumber > &values) const
void save(Archive &ar, const unsigned int version) const
::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
Number operator()(const size_type i) const
::ExceptionBase & ExcZero()