Go to the documentation of this file.
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>
25 template<
typename GFS,
typename C>
27 :
public Backend::impl::Wrapper<C>
30 friend Backend::impl::Wrapper<C>;
49 template<
typename LFSCache>
52 template<
typename LFSCache>
55 template<
typename LFSCache>
58 template<
typename LFSCache>
63 , _container(std::make_shared<
Container>(_gfs.ordering().blockCount()))
65 ISTL::dispatch_vector_allocation(_gfs.ordering(),*_container,
typename GFS::Ordering::ContainerAllocationTag());
66 (*_container) = rhs.native();
71 , _container(std::make_shared<
Container>(gfs.ordering().blockCount()))
73 ISTL::dispatch_vector_allocation(gfs.ordering(),*_container,
typename GFS::Ordering::ContainerAllocationTag());
88 , _container(stackobject_to_shared_ptr(container))
90 _container->resize(gfs.ordering().blockCount());
91 ISTL::dispatch_vector_allocation(gfs.ordering(),*_container,
typename GFS::Ordering::ContainerAllocationTag());
96 , _container(std::make_shared<
Container>(gfs.ordering().blockCount()))
98 ISTL::dispatch_vector_allocation(gfs.ordering(),*_container,
typename GFS::Ordering::ContainerAllocationTag());
107 template<
typename LFSCache>
110 return &((*this)[lfs_cache.containerIndex(0)]);
113 template<
typename LFSCache>
116 return &((*this)[lfs_cache.containerIndex(0)]);
119 void attach(std::shared_ptr<Container> container)
121 _container = container;
126 return bool(_container);
129 const std::shared_ptr<Container>&
storage()
const
136 return _container->N();
145 (*_container) = r.native();
149 _container = std::make_shared<Container>(r.native());
175 (*_container)+=
e.native();
181 (*_container)-=
e.native();
187 return (*_container)[i];
192 return (*_container)[i];
197 return ISTL::access_vector_element(
ISTL::container_tag(*_container),*_container,ci,ci.size()-1);
202 return ISTL::access_vector_element(
ISTL::container_tag(*_container),*_container,ci,ci.size()-1);
205 typename Dune::template FieldTraits<E>::real_type
two_norm()
const
207 return _container->two_norm();
210 typename Dune::template FieldTraits<E>::real_type
one_norm()
const
212 return _container->one_norm();
217 return _container->infinity_norm();
222 return (*_container)*y.native();
227 return _container->dot(y.native());
232 _container->axpy(a, y.native());
285 return _container->dim();
295 std::shared_ptr<Container> _container;
301 template<
typename GFS,
typename E>
302 struct BlockVectorSelectorHelper
305 typedef typename TypeTree::AccumulateType<
307 ISTL::vector_creation_policy<E>
308 >::type vector_descriptor;
310 typedef BlockVector<GFS,typename vector_descriptor::vector_type> Type;
324 template<Dune::PDELab::ISTL::Blocking blocking, std::
size_t block_size,
typename GFS,
typename E>
325 struct BackendVectorSelectorHelper<ISTL::VectorBackend<blocking,block_size>, GFS, E>
326 :
public ISTL::BlockVectorSelectorHelper<GFS,E>
337 #endif // DUNE_PDELAB_BACKEND_ISTL_VECTOR_HH
BlockVector & operator=(const BlockVector &r)
Definition: istl/vector.hh:139
ISTL::vector_iterator< C > iterator
Definition: istl/vector.hh:45
Definition: aliasedvectorview.hh:112
size_type N() const
Definition: istl/vector.hh:134
BlockVector(const GFS &gfs, Backend::attached_container=Backend::attached_container())
Definition: istl/vector.hh:69
E & operator[](const ContainerIndex &ci)
Definition: istl/vector.hh:195
void detach()
Definition: istl/vector.hh:102
Dune::template FieldTraits< E >::real_type two_norm() const
Definition: istl/vector.hh:205
value_type * data(const LFSCache &lfs_cache)
Definition: istl/vector.hh:108
tags::container< T >::type container_tag(const T &)
Gets instance of container tag associated with T.
Definition: backend/istl/tags.hh:246
BlockVector & operator+=(const E &e)
Definition: istl/vector.hh:167
Definition: vectoriterator.hh:111
size_t flatsize() const
Definition: istl/vector.hh:283
Tag for requesting a vector or matrix container with a pre-attached underlying object.
Definition: backend/common/tags.hh:27
BlockVector(const GFS &gfs, Backend::unattached_container)
Creates an BlockVector without allocating an underlying ISTL vector.
Definition: istl/vector.hh:77
Definition: istl/vector.hh:26
GFS::Ordering::Traits::ContainerIndex ContainerIndex
Definition: istl/vector.hh:43
ISTL::vector_iterator< const C > const_iterator
Definition: istl/vector.hh:46
For backward compatibility – Do not use this!
Definition: adaptivity.hh:28
iterator end()
Definition: istl/vector.hh:272
Dune::template FieldTraits< E >::real_type infinity_norm() const
Definition: istl/vector.hh:215
BlockVector(const GFS &gfs, Container &container)
Constructs an BlockVector for an explicitly given vector object.
Definition: istl/vector.hh:86
Container::size_type size_type
Definition: istl/vector.hh:39
const GFS & gridFunctionSpace() const
Definition: istl/vector.hh:288
GFS GridFunctionSpace
Definition: istl/vector.hh:36
block_type & block(std::size_t i)
Definition: istl/vector.hh:185
const_iterator begin() const
Definition: istl/vector.hh:267
const_iterator end() const
Definition: istl/vector.hh:278
const E & operator[](const ContainerIndex &ci) const
Definition: istl/vector.hh:200
Definition: uncachedvectorview.hh:134
BlockVector(const GFS &gfs, const E &e)
Definition: istl/vector.hh:94
bool attached() const
Definition: istl/vector.hh:124
E operator*(const BlockVector &y) const
Definition: istl/vector.hh:220
const block_type & block(std::size_t i) const
Definition: istl/vector.hh:190
ElementType E
Definition: istl/vector.hh:34
const Entity & e
Definition: localfunctionspace.hh:120
iterator begin()
Definition: istl/vector.hh:261
Various tags for influencing backend behavior.
Definition: aliasedvectorview.hh:14
BlockVector & operator-=(const BlockVector &e)
Definition: istl/vector.hh:179
const std::shared_ptr< Container > & storage() const
Definition: istl/vector.hh:129
BlockVector & axpy(const E &a, const BlockVector &y)
Definition: istl/vector.hh:230
C::field_type ElementType
Definition: istl/vector.hh:33
Definition: uncachedvectorview.hh:14
Dune::template FieldTraits< E >::real_type one_norm() const
Definition: istl/vector.hh:210
E dot(const BlockVector &y) const
Definition: istl/vector.hh:225
Tag for requesting a vector or matrix container without a pre-attached underlying object.
Definition: backend/common/tags.hh:23
const value_type * data(const LFSCache &lfs_cache) const
Definition: istl/vector.hh:114
Container::field_type field_type
Definition: istl/vector.hh:37
Container::block_type block_type
Definition: istl/vector.hh:38
BlockVector & operator*=(const E &e)
Definition: istl/vector.hh:160
C Container
Definition: istl/vector.hh:35
void attach(std::shared_ptr< Container > container)
Definition: istl/vector.hh:119
E value_type
Definition: istl/vector.hh:41
BlockVector(const BlockVector &rhs)
Definition: istl/vector.hh:61