3 #ifndef DUNE_PDELAB_BACKEND_ISTL_VECTOR_HH 4 #define DUNE_PDELAB_BACKEND_ISTL_VECTOR_HH 9 #include <dune/common/fvector.hh> 10 #include <dune/istl/bvector.hh> 11 #include <dune/typetree/typetree.hh> 27 template<
typename GFS,
typename C>
29 :
public Backend::impl::Wrapper<C>
32 friend Backend::impl::Wrapper<C>;
36 typedef ElementType
E;
49 template<
typename LFSCache>
52 template<
typename LFSCache>
58 , _container(
std::make_shared<Container>(_gfs.ordering().blockCount()))
60 ISTL::dispatch_vector_allocation(_gfs.ordering(),*_container,
typename GFS::Ordering::ContainerAllocationTag());
61 (*_container) = rhs.native();
66 , _container(
std::make_shared<Container>(gfs.ordering().blockCount()))
68 ISTL::dispatch_vector_allocation(gfs.ordering(),*_container,
typename GFS::Ordering::ContainerAllocationTag());
83 , _container(stackobject_to_shared_ptr(container))
85 _container->resize(gfs.ordering().blockCount());
86 ISTL::dispatch_vector_allocation(gfs.ordering(),*_container,
typename GFS::Ordering::ContainerAllocationTag());
91 , _container(
std::make_shared<Container>(gfs.ordering().blockCount()))
93 ISTL::dispatch_vector_allocation(gfs.ordering(),*_container,
typename GFS::Ordering::ContainerAllocationTag());
102 void attach(std::shared_ptr<Container> container)
104 _container = container;
109 return bool(_container);
112 const std::shared_ptr<Container>&
storage()
const 119 return _container->N();
128 (*_container) = r.native();
132 _container = std::make_shared<Container>(r.native());
158 (*_container)+= e.native();
164 (*_container)-= e.native();
170 return (*_container)[i];
173 const block_type&
block(std::size_t i)
const 175 return (*_container)[i];
180 return ISTL::access_vector_element(
ISTL::container_tag(*_container),*_container,ci,ci.size()-1);
185 return ISTL::access_vector_element(
ISTL::container_tag(*_container),*_container,ci,ci.size()-1);
188 typename Dune::template FieldTraits<E>::real_type
two_norm()
const 190 return _container->two_norm();
193 typename Dune::template FieldTraits<E>::real_type
one_norm()
const 195 return _container->one_norm();
200 return _container->infinity_norm();
205 return (*_container)*y.native();
210 return _container->dot(y.native());
215 _container->axpy(a, y.native());
227 const Container& native ()
const 234 operator Container&()
239 operator const Container&()
const 261 const_iterator
end()
const 268 return _container->dim();
278 std::shared_ptr<Container> _container;
284 template<
typename GFS,
typename E>
285 struct BlockVectorSelectorHelper
288 typedef typename TypeTree::AccumulateType<
290 ISTL::vector_creation_policy<E>
291 >::type vector_descriptor;
307 template<Dune::PDELab::ISTL::Blocking blocking, std::
size_t block_size,
typename GFS,
typename E>
308 struct BackendVectorSelectorHelper<ISTL::
VectorBackend<blocking,block_size>, GFS,
E>
309 :
public ISTL::BlockVectorSelectorHelper<GFS,E>
320 #endif // DUNE_PDELAB_BACKEND_ISTL_VECTOR_HH Definition: vectoriterator.hh:114
Various tags for influencing backend behavior.
Tag for requesting a vector or matrix container without a pre-attached underlying object...
Definition: backend/common/tags.hh:25
BlockVector(const GFS &gfs, const E &e)
Definition: istl/vector.hh:89
BlockVector & operator+=(const E &e)
Definition: istl/vector.hh:150
const_iterator end() const
Definition: istl/vector.hh:261
Definition: istl/descriptors.hh:50
Definition: uncachedvectorview.hh:135
Dune::template FieldTraits< E >::real_type two_norm() const
Definition: istl/vector.hh:188
Definition: istl/vector.hh:28
ISTL::vector_iterator< const C > const_iterator
Definition: istl/vector.hh:46
ElementType E
Definition: istl/vector.hh:36
E & operator[](const ContainerIndex &ci)
Definition: istl/vector.hh:178
BlockVector & axpy(const E &a, const BlockVector &y)
Definition: istl/vector.hh:213
BlockVector & operator=(const BlockVector &r)
Definition: istl/vector.hh:122
const GFS & gridFunctionSpace() const
Definition: istl/vector.hh:271
GFS::Ordering::Traits::ContainerIndex ContainerIndex
Definition: istl/vector.hh:43
const block_type & block(std::size_t i) const
Definition: istl/vector.hh:173
BlockVector(const GFS &gfs, Backend::unattached_container)
Creates an BlockVector without allocating an underlying ISTL vector.
Definition: istl/vector.hh:72
block_type & block(std::size_t i)
Definition: istl/vector.hh:168
Container::size_type size_type
Definition: istl/vector.hh:41
const_iterator begin() const
Definition: istl/vector.hh:250
C Container
Definition: istl/vector.hh:37
Dune::template FieldTraits< E >::real_type infinity_norm() const
Definition: istl/vector.hh:198
void attach(std::shared_ptr< Container > container)
Definition: istl/vector.hh:102
bool attached() const
Definition: istl/vector.hh:107
BlockVector(const GFS &gfs, Backend::attached_container=Backend::attached_container())
Definition: istl/vector.hh:64
Dune::template FieldTraits< E >::real_type one_norm() const
Definition: istl/vector.hh:193
iterator end()
Definition: istl/vector.hh:255
void detach()
Definition: istl/vector.hh:97
E dot(const BlockVector &y) const
Definition: istl/vector.hh:208
ISTL::vector_iterator< C > iterator
Definition: istl/vector.hh:45
BlockVector(const GFS &gfs, Container &container)
Constructs an BlockVector for an explicitly given vector object.
Definition: istl/vector.hh:81
iterator begin()
Definition: istl/vector.hh:244
For backward compatibility – Do not use this!
Definition: adaptivity.hh:27
Container::block_type block_type
Definition: istl/vector.hh:40
const Entity & e
Definition: localfunctionspace.hh:111
Container::field_type field_type
Definition: istl/vector.hh:39
size_type N() const
Definition: istl/vector.hh:117
BlockVector & operator*=(const E &e)
Definition: istl/vector.hh:143
E operator*(const BlockVector &y) const
Definition: istl/vector.hh:203
Definition: uncachedvectorview.hh:15
BlockVector(const BlockVector &rhs)
Definition: istl/vector.hh:56
Tag for requesting a vector or matrix container with a pre-attached underlying object.
Definition: backend/common/tags.hh:29
const E & operator[](const ContainerIndex &ci) const
Definition: istl/vector.hh:183
BlockVector & operator-=(const BlockVector &e)
Definition: istl/vector.hh:162
tags::container< T >::type container_tag(const T &)
Gets instance of container tag associated with T.
Definition: backend/istl/tags.hh:249
size_t flatsize() const
Definition: istl/vector.hh:266
GFS GridFunctionSpace
Definition: istl/vector.hh:38
const std::shared_ptr< Container > & storage() const
Definition: istl/vector.hh:112
C::field_type ElementType
Definition: istl/vector.hh:35