The basic container that stores a base vector and a corresponding basis. More...
#include <VectorFacade.hpp>
Public Types | |
using | size_type = typename Impl::size_type |
using | value_type = typename Impl::value_type |
template<class V > | |
using | HasLocalSize = decltype(std::declval< V >().localSize()) |
template<class V > | |
using | HasGlobalSize = decltype(std::declval< V >().globalSize()) |
Public Member Functions | |
template<class GlobalBasis , class = std::void_t<decltype(std::declval<GlobalBasis>().indexDistribution())>> | |
VectorFacade (GlobalBasis const &basis) | |
Impl const & | impl () const |
Return the underlying linear algebra backend. | |
Impl & | impl () |
std::size_t | localSize () const |
Return the number of entries in the local part of the vector. | |
std::size_t | globalSize () const |
Return the number of entries in the global vector. | |
template<class Basis > | |
void | resize (Basis const &basis) |
Resize the vector to the size of the basis. | |
template<class Basis > | |
void | resizeZero (Basis const &basis) |
Resize the vector to the size of the basis and set to zero. | |
template<class Basis > | |
void | init (Basis const &basis, bool clear) |
void | finish () |
Finish the insertion of values, see init() | |
template<class Index , class Assign = Assigner::plus_assign, REQUIRES(Concepts::MultiIndex< Index >) > | |
void | insert (Index const &idx, typename Impl::value_type const &value, Assign assign={}) |
Insert a single value into the matrix (add or overwrite to existing value) More... | |
template<class Index , REQUIRES(Concepts::MultiIndex< Index >) > | |
void | set (Index const &idx, typename Impl::value_type const &value) |
See insert for assignment operation Assigner::assign. | |
template<class Index , REQUIRES(Concepts::MultiIndex< Index >) > | |
void | add (Index const &idx, typename Impl::value_type const &value) |
See insert for assignment operation Assigner::plus_assign. | |
template<class Index , REQUIRES(Concepts::MultiIndex< Index >) > | |
Impl::value_type | get (Index const &idx) const |
Return the value of the vector at the local index idx. | |
template<class LocalView , class Node , class Buffer , REQUIRES(Concepts::LocalView< LocalView >) , REQUIRES(Concepts::BasisNode< Node >) > | |
void | gather (LocalView const &localView, Node const &node, Buffer &buffer) const |
Extract values from the vector referring to the given local indices and store it into a buffer. More... | |
template<class LocalView , class Buffer , REQUIRES(Concepts::LocalView< LocalView >) > | |
void | gather (LocalView const &localView, Buffer &buffer) const |
template<class Index , class Buffer , REQUIRES(Concepts::MultiIndex< Index >) > | |
void | gather (std::vector< Index > const &indices, Buffer &buffer) |
Call gather the values associated to the indices into the buffer. | |
template<class LocalView , class Node , class NodeVector , class MaskRange , class Assign , REQUIRES(Concepts::LocalView< LocalView >) , REQUIRES(Concepts::BasisNode< Node >) > | |
void | scatter (LocalView const &localView, Node const &node, NodeVector const &localVector, MaskRange const &mask, Assign assign) |
Insert a block of values into the vector (add or overwrite to existing values) More... | |
template<class LocalView , class Node , class NodeVector , class Assign , REQUIRES(Concepts::LocalView< LocalView >) , REQUIRES(Concepts::BasisNode< Node >) > | |
void | scatter (LocalView const &localView, Node const &node, NodeVector const &localVector, Assign assign) |
Call scatter with MaskRange set to FakeContainer. | |
template<class LocalView , class LocalVector , class Assign , REQUIRES(Concepts::LocalView< LocalView >) > | |
void | scatter (LocalView const &localView, LocalVector const &localVector, Assign assign) |
Call scatter with Node given by the tree of the localView . | |
template<class Index , class Buffer , REQUIRES(Concepts::MultiIndex< Index >) > | |
void | scatter (std::vector< Index > const &indices, Buffer const &values) |
Call scatter the values associated to the indices into the vector. | |
template<class LocalInd , class Func > | |
void | forEach (LocalInd const &localInd, Func &&func) |
Apply func to each value at given indices localInd . More... | |
template<class LocalInd , class Func > | |
void | forEach (LocalInd const &localInd, Func &&func) const |
Apply func to each value at given indices localInd . More... | |
The basic container that stores a base vector and a corresponding basis.
A vector storing all the assembled Operators indexed with DOF indices. The vector data is associated to a global basis.
T | The coefficient type of the vector |
VectorImpl | A linear-algebra backend for the vector storage |
|
inline |
Constructor. Forwards the basis to the implementation class and constructs a (type-erased) size-info object.
References VectorFacade< T, VectorImpl >::resizeZero().
|
inline |
Apply func
to each value at given indices localInd
.
First, synchronizes the values of the vector, then applies the functor to each local value associated to the local indices localInd
.
[[mutable]]
|
inline |
Apply func
to each value at given indices localInd
.
First, synchronizes the values of the vector, then applies the functor to each local value associated to the local indices localInd
.
[[const]]
|
inline |
Extract values from the vector referring to the given local indices and store it into a buffer.
Collect value of indices and store them into a buffer. The buffer must be a vector-like container with buffer.resize()
and buffer.begin()
. The indices must be stored in an iterable container.
If the vector is not in synchronized state, collects all necessary values possibly from neighbouring processors.
[[expects: localView is bound to an element]] [[expects: node is in localView.tree()]] [[possibly neighbor-wise collective operation]]
|
inline |
Prepare the vector for insertion of values, finish the insertion with finish().
Referenced by VectorFacade< T, VectorImpl >::resize(), and VectorFacade< T, VectorImpl >::resizeZero().
|
inline |
Insert a single value into the matrix (add or overwrite to existing value)
Inserts or adds a value into a certain location dof
(given as dof multi-index) of a vector. The insertion mode is determined by the assign
functor. Use Assigner::plus_assign for adding values (default) or Assigner::assign for overwriting (setting) values. Different insertion modes can not be mixed!
Insertion must be closed with a call to finish().
[[not collective]]
Referenced by VectorFacade< T, VectorImpl >::add(), and VectorFacade< T, VectorImpl >::set().
|
inline |
Insert a block of values into the vector (add or overwrite to existing values)
Inserts or adds values into certain locations of a vector. Insertion indices are extracted from the given localView
. The insertion mode is determined by the assign
functor. Use Assigner::plus_assign for adding values (default) or Assigner::assign for overwriting (setting) values. Different insertion modes can not be mixed! The localVector
is assumed to be a continuous memory container with a data()
method to get a pointer to the beginning.
The mask
models a boolean range with at least a begin()
method. Must be forward iterable for at least localVector.size()
elements. Does not need an end()
method. See, e.g. FakeContainer.
Insertion must be closed with a call to finish(). It is not allowed to switch insertion mode before calling finish()
.
[[expects: localView is bound to an element]] [[expects: node is in localView.tree()]] [[not collective]]
Referenced by VectorFacade< T, VectorImpl >::scatter().