3 #ifndef DUNE_PDELAB_BACKEND_ISTL_VECTOR_HH
4 #define DUNE_PDELAB_BACKEND_ISTL_VECTOR_HH
6 #include <dune/common/fvector.hh>
7 #include <dune/istl/bvector.hh>
8 #include <dune/typetree/typetree.hh>
24 template<
typename GFS,
typename C>
26 :
public Backend::impl::Wrapper<C>
29 friend Backend::impl::Wrapper<C>;
33 typedef ElementType
E;
47 template<
typename LFSCache>
50 template<
typename LFSCache>
56 , _container(
std::make_shared<Container>(_gfs.ordering().blockCount()))
58 istl::dispatch_vector_allocation(_gfs.ordering(),*_container,
typename GFS::Ordering::ContainerAllocationTag());
59 (*_container) = rhs.native();
64 , _container(
std::make_shared<Container>(gfs.ordering().blockCount()))
66 istl::dispatch_vector_allocation(gfs.ordering(),*_container,
typename GFS::Ordering::ContainerAllocationTag());
81 , _container(stackobject_to_shared_ptr(container))
83 _container->resize(gfs.ordering().blockCount());
84 istl::dispatch_vector_allocation(gfs.ordering(),*_container,
typename GFS::Ordering::ContainerAllocationTag());
89 , _container(
std::make_shared<Container>(gfs.ordering().blockCount()))
91 istl::dispatch_vector_allocation(gfs.ordering(),*_container,
typename GFS::Ordering::ContainerAllocationTag());
100 void attach(std::shared_ptr<Container> container)
102 _container = container;
107 return bool(_container);
110 const std::shared_ptr<Container>&
storage()
const
117 return _container->N();
126 (*_container) = r.native();
130 _container = std::make_shared<Container>(r.native());
156 (*_container)+= e.native();
162 (*_container)-= e.native();
168 return (*_container)[i];
171 const block_type&
block(std::size_t i)
const
173 return (*_container)[i];
178 return istl::access_vector_element(
istl::container_tag(*_container),*_container,ci,ci.size()-1);
183 return istl::access_vector_element(
istl::container_tag(*_container),*_container,ci,ci.size()-1);
186 typename Dune::template FieldTraits<E>::real_type
two_norm()
const
188 return _container->two_norm();
191 typename Dune::template FieldTraits<E>::real_type
one_norm()
const
193 return _container->one_norm();
198 return _container->infinity_norm();
203 return (*_container)*y.native();
208 return _container->dot(y.native());
213 _container->axpy(a, y.native());
219 DUNE_DEPRECATED_MSG(
"base() is deprecated and will be removed after PDELab 2.4. Use Backend::native() instead.")
226 DUNE_DEPRECATED_MSG(
"base() is deprecated and will be removed after PDELab 2.4. Use Backend::native() instead.")
240 const Container& native ()
const
247 operator Container&()
252 operator const Container&()
const
274 const_iterator
end()
const
281 return _container->dim();
291 std::shared_ptr<Container> _container;
297 template<
typename GFS,
typename E>
298 struct BlockVectorSelectorHelper
301 typedef typename TypeTree::AccumulateType<
303 istl::vector_creation_policy<E>
304 >::type vector_descriptor;
306 typedef BlockVector<GFS,typename vector_descriptor::vector_type> Type;
320 template<Dune::PDELab::istl::Blocking blocking, std::
size_t block_size,
typename GFS,
typename E>
321 struct BackendVectorSelectorHelper<istl::VectorBackend<blocking,block_size>, GFS, E>
322 :
public istl::BlockVectorSelectorHelper<GFS,E>
333 #endif // DUNE_PDELAB_BACKEND_ISTL_VECTOR_HH
BlockVector & operator=(const BlockVector &r)
Definition: istl/vector.hh:120
BlockVector & operator+=(const E &e)
Definition: istl/vector.hh:148
GFS::Ordering::Traits::ContainerIndex ContainerIndex
Definition: istl/vector.hh:41
E dot(const BlockVector &y) const
Definition: istl/vector.hh:206
void attach(std::shared_ptr< Container > container)
Definition: istl/vector.hh:100
Dune::template FieldTraits< E >::real_type infinity_norm() const
Definition: istl/vector.hh:196
tags::container< T >::type container_tag(const T &)
Gets instance of container tag associated with T.
Definition: backend/istl/tags.hh:246
Dune::template FieldTraits< E >::real_type one_norm() const
Definition: istl/vector.hh:191
const std::shared_ptr< Container > & storage() const
Definition: istl/vector.hh:110
void detach()
Definition: istl/vector.hh:95
istl::vector_iterator< const C > const_iterator
Definition: istl/vector.hh:44
Various tags for influencing backend behavior.
BlockVector(const GFS &gfs, const E &e)
Definition: istl/vector.hh:87
Container BaseT
Definition: istl/vector.hh:36
BlockVector(const GFS &gfs, Backend::unattached_container)
Creates an BlockVector without allocating an underlying ISTL vector.
Definition: istl/vector.hh:70
const E & e
Definition: interpolate.hh:172
Container & base()
Definition: istl/vector.hh:220
E & operator[](const ContainerIndex &ci)
Definition: istl/vector.hh:176
const block_type & block(std::size_t i) const
Definition: istl/vector.hh:171
block_type & block(std::size_t i)
Definition: istl/vector.hh:166
Definition: uncachedvectorview.hh:15
ElementType E
Definition: istl/vector.hh:33
istl::vector_iterator< C > iterator
Definition: istl/vector.hh:43
const GFS & gridFunctionSpace() const
Definition: istl/vector.hh:284
BlockVector & operator-=(const BlockVector &e)
Definition: istl/vector.hh:160
const_iterator end() const
Definition: istl/vector.hh:274
Dune::template FieldTraits< E >::real_type two_norm() const
Definition: istl/vector.hh:186
Tag for requesting a vector or matrix container without a pre-attached underlying object...
Definition: backend/common/tags.hh:23
Tag for requesting a vector or matrix container with a pre-attached underlying object.
Definition: backend/common/tags.hh:27
iterator end()
Definition: istl/vector.hh:268
size_t flatsize() const
Definition: istl/vector.hh:279
BlockVector(const BlockVector &rhs)
Definition: istl/vector.hh:54
C Container
Definition: istl/vector.hh:34
size_type N() const
Definition: istl/vector.hh:115
Definition: istl/vector.hh:25
BlockVector(const GFS &gfs, Backend::attached_container=Backend::attached_container())
Definition: istl/vector.hh:62
Definition: adaptivity.hh:27
const E & operator[](const ContainerIndex &ci) const
Definition: istl/vector.hh:181
Container::block_type block_type
Definition: istl/vector.hh:38
E operator*(const BlockVector &y) const
Definition: istl/vector.hh:201
iterator begin()
Definition: istl/vector.hh:257
Definition: vectoriterator.hh:112
BlockVector & operator*=(const E &e)
Definition: istl/vector.hh:141
BlockVector(const GFS &gfs, Container &container)
Constructs an BlockVector for an explicitly given vector object.
Definition: istl/vector.hh:79
GFS GridFunctionSpace
Definition: istl/vector.hh:35
Container::field_type field_type
Definition: istl/vector.hh:37
BlockVector & axpy(const E &a, const BlockVector &y)
Definition: istl/vector.hh:211
C::field_type ElementType
Definition: istl/vector.hh:32
bool attached() const
Definition: istl/vector.hh:105
Container::size_type size_type
Definition: istl/vector.hh:39
Definition: uncachedvectorview.hh:128
const_iterator begin() const
Definition: istl/vector.hh:263