3 #ifndef DUNE_PDELAB_BACKEND_SIMPLE_VECTOR_HH
4 #define DUNE_PDELAB_BACKEND_SIMPLE_VECTOR_HH
11 #include <dune/common/fvector.hh>
12 #include <dune/common/shared_ptr.hh>
13 #include <dune/istl/bvector.hh>
34 typename FieldTraits<K>::real_type operator()(
const K& k)
const
36 return Dune::fvmeta::abs2(k);
42 template<
typename GFS,
typename C>
44 :
public Backend::impl::Wrapper<C>
47 friend Backend::impl::Wrapper<C>;
65 template<
typename LFSCache>
68 template<
typename LFSCache>
74 , _container(std::make_shared<
Container>(*(rhs._container)))
79 , _container(std::make_shared<
Container>(gfs.ordering().blockCount()))
94 , _container(stackobject_to_shared_ptr(container))
96 _container->resize(gfs.ordering().blockCount());
101 , _container(std::make_shared<
Container>(gfs.ordering().blockCount(),
e))
109 void attach(std::shared_ptr<Container> container)
111 _container = container;
116 return bool(_container);
119 const std::shared_ptr<Container>&
storage()
const
126 return _container->size();
135 (*_container) = (*r._container);
139 _container = std::make_shared<Container>(*(r._container));
146 std::fill(_container->begin(),_container->end(),
e);
152 std::transform(_container->begin(),_container->end(),_container->begin(),
153 std::bind(std::multiplies<E>(),
e,std::placeholders::_1));
160 std::transform(_container->begin(),_container->end(),_container->begin(),
161 std::bind(std::plus<E>(),
e,std::placeholders::_1));
167 std::transform(_container->begin(),_container->end(),y._container->begin(),
168 _container->begin(),std::plus<E>());
174 std::transform(_container->begin(),_container->end(),y._container->begin(),
175 _container->begin(),std::minus<E>());
181 return (*_container)[ci[0]];
186 return (*_container)[ci[0]];
189 typename Dune::template FieldTraits<E>::real_type
two_norm()
const
191 using namespace std::placeholders;
192 typedef typename Dune::template FieldTraits<E>::real_type Real;
193 return std::sqrt(std::accumulate(_container->begin(),_container->end(),Real(0),std::bind(std::plus<Real>(),_1,std::bind(abs2<E>(),_2))));
196 typename Dune::template FieldTraits<E>::real_type
one_norm()
const
198 typedef typename Dune::template FieldTraits<E>::real_type Real;
199 return std::accumulate(_container->begin(),_container->end(),Real(0),
200 [](
const auto& n,
const auto&
e) {
208 if (_container->size() == 0)
211 return abs(*std::max_element(_container->begin(),_container->end(),
212 [](
const auto& a,
const auto& b) {
214 return abs(a) < abs(b);
220 return std::inner_product(_container->begin(),_container->end(),y._container->begin(),
E(0));
225 return std::inner_product(_container->begin(),_container->end(),y._container->begin(),
E(0),std::plus<E>(),Dune::dot<E,E>);
230 using namespace std::placeholders;
231 std::transform(_container->begin(),_container->end(),y._container->begin(),
232 _container->begin(),std::bind(std::plus<E>(),_1,std::bind(std::multiplies<E>(),a,_2)));
263 return _container->begin();
268 return _container->begin();
273 return _container->end();
278 return _container->end();
283 return _container->size();
293 std::shared_ptr<Container> _container;
302 template<
typename GFS,
typename E>
303 struct SimpleVectorSelectorHelper
306 using vector_type =
typename GFS::Traits::Backend::template vector_type<E>;
308 using Type = Simple::VectorContainer<GFS,vector_type>;
315 template<
template<
typename>
class Container,
typename GFS,
typename E>
316 struct BackendVectorSelectorHelper<Simple::VectorBackend<Container>, GFS,
E>
317 :
public SimpleVectorSelectorHelper<GFS,E>
const Entity & e
Definition: localfunctionspace.hh:121
For backward compatibility – Do not use this!
Definition: adaptivity.hh:28
Tag for requesting a vector or matrix container without a pre-attached underlying object.
Definition: backend/common/tags.hh:24
Tag for requesting a vector or matrix container with a pre-attached underlying object.
Definition: backend/common/tags.hh:28
Definition: uncachedvectorview.hh:18
Definition: uncachedvectorview.hh:149
Definition: simple/vector.hh:45
ElementType field_type
Definition: simple/vector.hh:55
Dune::template FieldTraits< E >::real_type one_norm() const
Definition: simple/vector.hh:196
Dune::template FieldTraits< E >::real_type infinity_norm() const
Definition: simple/vector.hh:206
void attach(std::shared_ptr< Container > container)
Definition: simple/vector.hh:109
const std::shared_ptr< Container > & storage() const
Definition: simple/vector.hh:119
VectorContainer & operator+=(const E &e)
Definition: simple/vector.hh:158
bool attached() const
Definition: simple/vector.hh:114
VectorContainer & axpy(const E &a, const VectorContainer &y)
Definition: simple/vector.hh:228
Container::value_type ElementType
Definition: simple/vector.hh:51
ElementType E
Definition: simple/vector.hh:52
VectorContainer(const VectorContainer &rhs)
Definition: simple/vector.hh:72
VectorContainer(const GFS &gfs, Container &container)
Constructs an VectorContainer for an explicitly given vector object.
Definition: simple/vector.hh:92
VectorContainer & operator*=(const E &e)
Definition: simple/vector.hh:150
C Container
Definition: simple/vector.hh:50
E dot(const VectorContainer &y) const
Definition: simple/vector.hh:223
const Container & base() const
Definition: simple/vector.hh:242
iterator begin()
Definition: simple/vector.hh:261
Container::size_type size_type
Definition: simple/vector.hh:58
size_t flatsize() const
Definition: simple/vector.hh:281
Container & base()
Definition: simple/vector.hh:237
VectorContainer & operator=(const E &e)
Definition: simple/vector.hh:144
const_iterator end() const
Definition: simple/vector.hh:276
E operator*(const VectorContainer &y) const
Definition: simple/vector.hh:218
E & operator[](const ContainerIndex &ci)
Definition: simple/vector.hh:179
VectorContainer & operator+=(const VectorContainer &y)
Definition: simple/vector.hh:165
VectorContainer & operator-=(const VectorContainer &y)
Definition: simple/vector.hh:172
VectorContainer(const GFS &gfs, const E &e)
Definition: simple/vector.hh:99
const GFS & gridFunctionSpace() const
Definition: simple/vector.hh:286
Container::const_iterator const_iterator
Definition: simple/vector.hh:63
Dune::template FieldTraits< E >::real_type two_norm() const
Definition: simple/vector.hh:189
iterator end()
Definition: simple/vector.hh:271
const_iterator begin() const
Definition: simple/vector.hh:266
VectorContainer(const GFS &gfs, Backend::attached_container=Backend::attached_container())
Definition: simple/vector.hh:77
const E & operator[](const ContainerIndex &ci) const
Definition: simple/vector.hh:184
void detach()
Definition: simple/vector.hh:104
size_type N() const
Definition: simple/vector.hh:124
GFS::Ordering::Traits::ContainerIndex ContainerIndex
Definition: simple/vector.hh:60
Container::iterator iterator
Definition: simple/vector.hh:62
VectorContainer & operator=(const VectorContainer &r)
Definition: simple/vector.hh:129
VectorContainer(const GFS &gfs, Backend::unattached_container)
Creates a VectorContainer without allocating storage.
Definition: simple/vector.hh:83
GFS GridFunctionSpace
Definition: simple/vector.hh:57
Various tags for influencing backend behavior.