17 #ifndef __deal2__parallel_vector_h 18 #define __deal2__parallel_vector_h 20 #include <deal.II/base/config.h> 21 #include <deal.II/base/index_set.h> 22 #include <deal.II/base/mpi.h> 23 #include <deal.II/base/template_constraints.h> 24 #include <deal.II/base/types.h> 25 #include <deal.II/base/utilities.h> 26 #include <deal.II/base/memory_consumption.h> 27 #include <deal.II/base/partitioner.h> 28 #include <deal.II/base/thread_management.h> 29 #include <deal.II/lac/vector_view.h> 104 template <
typename Number>
114 typedef value_type *pointer;
115 typedef const value_type *const_pointer;
116 typedef value_type *iterator;
117 typedef const value_type *const_iterator;
118 typedef value_type &reference;
119 typedef const value_type &const_reference;
171 const MPI_Comm communicator);
177 const MPI_Comm communicator);
185 Vector (
const std_cxx1x::shared_ptr<const Utilities::MPI::Partitioner> &
partitioner);
197 const bool fast =
false);
208 template <
typename Number2>
210 const bool fast =
false);
227 const MPI_Comm communicator);
233 const MPI_Comm communicator);
241 void reinit (
const std_cxx1x::shared_ptr<const Utilities::MPI::Partitioner> &
partitioner);
271 template <
typename Number2>
280 const bool call_update_ghost_values =
false);
312 void compress (::VectorOperation::values operation);
353 void compress_start (const
unsigned int communication_channel = 0,
448 template <typename Number2>
449 bool operator == (const
Vector<Number2> &v) const;
454 template <typename Number2>
455 bool operator != (const
Vector<Number2> &v) const;
460 template <typename Number2>
461 Number operator * (const
Vector<Number2> &V) const;
491 real_type
lp_norm (const real_type p) const;
503 size_type
size () const;
572 const_iterator begin () const;
584 const_iterator end () const;
602 Number operator () (const size_type global_index) const;
613 Number &operator () (const size_type global_index);
622 Number operator [] (const size_type global_index) const;
631 Number &operator [] (const size_type global_index);
643 template <typename OtherNumber>
645 std::vector<OtherNumber> &values) const;
651 template <typename ForwardIterator, typename OutputIterator>
653 const ForwardIterator indices_end,
654 OutputIterator values_begin) const;
697 template <typename OtherNumber>
698 void add (const
std::vector<size_type> &indices,
699 const
std::vector<OtherNumber> &values);
705 template <typename OtherNumber>
706 void add (const
std::vector<size_type> &indices,
707 const ::
Vector<OtherNumber> &values);
714 template <typename OtherNumber>
715 void add (const size_type n_elements,
716 const size_type *indices,
717 const OtherNumber *values);
723 void add (const Number s);
728 void add (const
Vector<Number> &V);
734 void add (const Number a, const
Vector<Number> &V);
739 void add (const Number a, const
Vector<Number> &V,
740 const Number b, const
Vector<Number> &W);
746 void sadd (const Number s,
752 void sadd (const Number s,
759 void sadd (const Number s,
769 void sadd (const Number s,
784 void scale (const Number factor) DEAL_II_DEPRECATED;
789 Vector<Number> &operator *= (const Number factor);
794 Vector<Number> &operator /= (const Number factor);
801 void scale (const
Vector<Number> &scaling_factors);
808 template <typename Number2>
809 void scale (const
Vector<Number2> &scaling_factors);
814 void equ (const Number a, const
Vector<Number> &u);
819 template <typename Number2>
820 void equ (const Number a, const
Vector<Number2> &u);
825 void equ (const Number a, const
Vector<Number> &u,
826 const Number b, const
Vector<Number> &v);
831 void equ (const Number a, const
Vector<Number> &u,
832 const Number b, const
Vector<Number> &v,
833 const Number c, const
Vector<Number> &w);
877 const
unsigned int precision = 3,
878 const
bool scientific = true,
879 const
bool across = true) const;
901 template <typename Number2>
907 template <typename Number2>
974 #ifdef DEAL_II_WITH_MPI 1008 void resize_val (
const size_type new_allocated_size);
1013 template <
typename Number2>
friend class Vector;
1028 template <
typename Number>
1042 template <
typename Number>
1059 template <
typename Number>
1063 const MPI_Comm communicator)
1071 reinit (local_range, ghost_indices, communicator);
1076 template <
typename Number>
1079 const MPI_Comm communicator)
1088 reinit (local_range, ghost_indices, communicator);
1093 template <
typename Number>
1108 template <
typename Number>
1111 Vector (
const std_cxx1x::shared_ptr<const Utilities::MPI::Partitioner> &
partitioner)
1124 template <
typename Number>
1141 template <
typename Number>
1151 bool must_update_ghost_values =
true;
1158 else if (
partitioner.get() != c.partitioner.get())
1160 size_type local_ranges_different_loc = (
local_range() !=
1166 local_ranges_different_loc)
1173 if (must_update_ghost_values)
1180 template <
typename Number>
1181 template <
typename Number2>
1195 size_type local_ranges_different_loc = (
local_range() !=
1201 local_ranges_different_loc)
1216 template <
typename Number>
1227 template <
typename Number>
1232 compress(VectorOperation::unknown);
1237 template <
typename Number>
1250 template <
typename Number>
1261 template <
typename Number>
1274 template <
typename Number>
1284 template <
typename Number>
1294 template <
typename Number>
1309 return -local_result;
1314 template <
typename Number>
1324 template <
typename Number>
1334 return -local_result;
1339 template <
typename Number>
1340 template <
typename Number2>
1352 template <
typename Number>
1353 template <
typename Number2>
1361 unsigned int result =
1372 template <
typename Number>
1373 template <
typename Number2>
1383 template <
typename Number>
1384 template <
typename Number2>
1398 template <
typename Number>
1399 template <
typename Number2>
1409 return local_result;
1414 template <
typename Number>
1416 typename Vector<Number>::real_type
1424 template <
typename Number>
1426 typename Vector<Number>::real_type
1434 return local_result;
1439 template <
typename Number>
1452 template <
typename Number>
1464 return local_result;
1469 template <
typename Number>
1471 typename Vector<Number>::real_type
1479 template <
typename Number>
1481 typename Vector<Number>::real_type
1489 return local_result;
1494 template <
typename Number>
1496 typename Vector<Number>::real_type
1504 template <
typename Number>
1506 typename Vector<Number>::real_type
1514 template <
typename Number>
1516 typename Vector<Number>::real_type
1523 static_cast<real_type>(1.0/p));
1525 return local_result;
1530 template <
typename Number>
1532 typename Vector<Number>::real_type
1540 template <
typename Number>
1542 typename Vector<Number>::real_type
1550 return local_result;
1555 template <
typename Number>
1557 typename Vector<Number>::size_type
1565 template <
typename Number>
1567 typename Vector<Number>::size_type
1575 template <
typename Number>
1577 std::pair<typename Vector<Number>::size_type,
1578 typename Vector<Number>::size_type>
1586 template <
typename Number>
1590 (
const size_type global_index)
const 1592 return partitioner->in_local_range (global_index);
1597 template <
typename Number>
1611 template <
typename Number>
1613 typename Vector<Number>::size_type
1621 template <
typename Number>
1631 template <
typename Number>
1636 return partitioner->is_ghost_entry (global_index);
1641 template <
typename Number>
1643 typename Vector<Number>::iterator
1651 template <
typename Number>
1653 typename Vector<Number>::const_iterator
1661 template <
typename Number>
1663 typename Vector<Number>::iterator
1671 template <
typename Number>
1673 typename Vector<Number>::const_iterator
1681 template <
typename Number>
1688 ExcMessage(
"You tried to read a ghost element of this vector, " 1689 "but it has not imported its ghost values."));
1695 template <
typename Number>
1711 template <
typename Number>
1721 template <
typename Number>
1731 template <
typename Number>
1732 template <
typename OtherNumber>
1735 std::vector<OtherNumber> &values)
const 1737 for (size_type i = 0; i < indices.size(); ++i)
1738 values[i] =
operator()(indices[i]);
1743 template <
typename Number>
1744 template <
typename ForwardIterator,
typename OutputIterator>
1747 const ForwardIterator indices_end,
1748 OutputIterator values_begin)
const 1750 while (indices_begin != indices_end)
1760 template <
typename Number>
1770 ExcMessage(
"You tried to read a ghost element of this vector, " 1771 "but it has not imported its ghost values."));
1772 return val[local_index];
1777 template <
typename Number>
1785 return val[local_index];
1790 template <
typename Number>
1807 template <
typename Number>
1827 template <
typename Number>
1847 template <
typename Number>
1848 template <
typename OtherNumber>
1852 const std::vector<OtherNumber> &values)
1855 add (indices.size(), &indices[0], &values[0]);
1860 template <
typename Number>
1861 template <
typename OtherNumber>
1865 const ::Vector<OtherNumber> &values)
1868 add (indices.size(), &indices[0], values.begin());
1873 template <
typename Number>
1874 template <
typename OtherNumber>
1878 const size_type *indices,
1879 const OtherNumber *values)
1881 for (size_type i=0; i<n_indices; ++i)
1884 ExcMessage(
"The given value is not finite but either infinite or Not A Number (NaN)"));
1891 template <
typename Number>
1907 template <
typename Number>
1923 template <
typename Number>
1940 template <
typename Number>
1951 vector_view.add (a, v.vector_view, b, w.vector_view);
1959 template <
typename Number>
1976 template <
typename Number>
1994 template <
typename Number>
2006 vector_view.sadd (x, a, v.vector_view, b, w.vector_view);
2014 template <
typename Number>
2028 vector_view.sadd (s, a, v.vector_view, b, w.vector_view,
2037 template <
typename Number>
2047 template <
typename Number>
2065 template <
typename Number>
2076 template <
typename Number>
2092 template <
typename Number>
2093 template <
typename Number2>
2107 template <
typename Number>
2124 template <
typename Number>
2125 template <
typename Number2>
2142 template <
typename Number>
2153 vector_view.equ (a, v.vector_view, b, w.vector_view);
2161 template <
typename Number>
2174 vector_view.equ (a, v.vector_view, b, w.vector_view,
2183 template <
typename Number>
2200 template <
typename Number>
2210 template <
typename Number>
2219 #endif // ifndef DOXYGEN 2235 template <
typename Number>
2244 DEAL_II_NAMESPACE_CLOSE
bool is_ghost_entry(const types::global_dof_index global_index) const
std::vector< MPI_Request > compress_requests
void add(const std::vector< size_type > &indices, const std::vector< OtherNumber > &values)
Number mean_value_local() const
real_type norm_sqr_local() const
bool is_non_negative() const
#define AssertDimension(dim1, dim2)
real_type linfty_norm() const
void compress_start(const unsigned int communication_channel=0,::VectorOperation::values operation=VectorOperation::add)
Number operator[](const size_type global_index) const
bool operator!=(const Vector< Number2 > &v) const
const IndexSet & ghost_elements() const
const MPI_Comm & get_mpi_communicator() const
types::global_dof_index size() const
void swap(Vector< Number > &v)
void compress_finish(::VectorOperation::values operation)
std_cxx1x::shared_ptr< const Utilities::MPI::Partitioner > partitioner
::ExceptionBase & ExcMessage(std::string arg1)
void reinit(const size_type size, const bool fast=false)
real_type norm_sqr() const
std::pair< size_type, size_type > local_range() const
#define AssertIndexRange(index, range)
void compress() DEAL_II_DEPRECATED
Vector< Number > & operator-=(const Vector< Number > &V)
void resize_val(const size_type new_allocated_size)
void ratio(const Vector< Number > &a, const Vector< Number > &b)
bool has_ghost_elements() const
size_type n_ghost_entries() const
Vector< Number > & operator/=(const Number factor)
Vector< Number > & operator+=(const Vector< Number > &V)
bool is_finite(const double x)
bool in_local_range(const size_type global_index) const
real_type lp_norm_local(const real_type p) const
Vector< Number > & operator*=(const Number factor)
Number operator()(const size_type global_index) const
real_type l1_norm() const
VectorView< Number > vector_view
void equ(const Number a, const Vector< Number > &u)
void scale(const Number factor) DEAL_II_DEPRECATED
void print(std::ostream &out, const unsigned int precision=3, const bool scientific=true, const bool across=true) const
T sum(const T &t, const MPI_Comm &mpi_communicator)
unsigned int global_dof_index
#define Assert(cond, exc)
::ExceptionBase & ExcEmptyObject()
Vector< Number > & operator=(const Vector< Number > &in_vector)
static const bool supports_distributed_data
void update_ghost_values_finish() const
bool vectors_equal_local(const Vector< Number2 > &v) const
real_type l2_norm() const
BlockCompressedSparsityPattern CompressedBlockSparsityPattern DEAL_II_DEPRECATED
void swap(parallel::distributed::Vector< Number > &u, parallel::distributed::Vector< Number > &v)
Number operator*(const Vector< Number2 > &V) const
void update_ghost_values_start(const unsigned int communication_channel=0) const
void extract_subvector_to(const std::vector< size_type > &indices, std::vector< OtherNumber > &values) const
real_type linfty_norm_local() const
Number inner_product_local(const Vector< Number2 > &V) const
std::vector< MPI_Request > update_ghost_values_requests
void sadd(const Number s, const Vector< Number > &V)
void clear_mpi_requests()
bool all_zero_local() const
real_type lp_norm(const real_type p) const
void update_ghost_values() const
bool is_non_negative_local() const
Number local_element(const size_type local_index) const
bool partitioners_are_compatible(const Utilities::MPI::Partitioner &part) const
Number mean_value() const
bool operator==(const Vector< Number2 > &v) const
::ExceptionBase & ExcNotInitialized()
void copy_from(const Vector< Number > &in_vector, const bool call_update_ghost_values=false)
std::size_t memory_consumption() const
size_type local_size() const
real_type l1_norm_local() const
IndexSet locally_owned_elements() const
T max(const T &t, const MPI_Comm &mpi_communicator)