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/istl/bvector.hh> 33 typename FieldTraits<K>::real_type operator()(
const K& k)
const 35 return Dune::fvmeta::abs2(k);
41 template<
typename GFS,
typename C>
43 :
public Backend::impl::Wrapper<C>
46 friend Backend::impl::Wrapper<C>;
51 typedef ElementType
E;
64 template<
typename LFSCache>
67 template<
typename LFSCache>
73 , _container(
std::make_shared<Container>(*(rhs._container)))
78 , _container(
std::make_shared<Container>(gfs.ordering().blockCount()))
93 , _container(stackobject_to_shared_ptr(container))
95 _container->resize(gfs.ordering().blockCount());
100 , _container(
std::make_shared<Container>(gfs.ordering().blockCount(),e))
108 void attach(std::shared_ptr<Container> container)
110 _container = container;
115 return bool(_container);
118 const std::shared_ptr<Container>&
storage()
const 125 return _container->size();
134 (*_container) = (*r._container);
138 _container = std::make_shared<Container>(*(r._container));
145 std::fill(_container->begin(),_container->end(),
e);
151 std::transform(_container->begin(),_container->end(),_container->begin(),
152 std::bind(std::multiplies<E>(),e,std::placeholders::_1));
159 std::transform(_container->begin(),_container->end(),_container->begin(),
160 std::bind(std::plus<E>(),e,std::placeholders::_1));
166 std::transform(_container->begin(),_container->end(),y._container->begin(),
167 _container->begin(),std::plus<E>());
173 std::transform(_container->begin(),_container->end(),y._container->begin(),
174 _container->begin(),std::minus<E>());
180 return (*_container)[ci[0]];
185 return (*_container)[ci[0]];
188 typename Dune::template FieldTraits<E>::real_type
two_norm()
const 190 using namespace std::placeholders;
191 typedef typename Dune::template FieldTraits<E>::real_type Real;
192 return std::sqrt(std::accumulate(_container->begin(),_container->end(),Real(0),std::bind(std::plus<Real>(),_1,std::bind(abs2<E>(),_2))));
195 typename Dune::template FieldTraits<E>::real_type
one_norm()
const 197 typedef typename Dune::template FieldTraits<E>::real_type Real;
198 return std::accumulate(_container->begin(),_container->end(),Real(0),
199 [](
const auto& n,
const auto&
e) {
207 if (_container->size() == 0)
210 typedef typename Dune::template FieldTraits<E>::real_type Real;
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)));
254 const Container&
native ()
const 263 return _container->begin();
268 return _container->begin();
273 return _container->end();
276 const_iterator
end()
const 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>;
315 template<
template<
typename>
class Container,
typename GFS,
typename E>
316 struct BackendVectorSelectorHelper<Simple::
VectorBackend<Container>, GFS,
E>
317 :
public SimpleVectorSelectorHelper<GFS,E>
328 #endif // DUNE_PDELAB_BACKEND_SIMPLE_VECTOR_HH Container::const_iterator const_iterator
Definition: simple/vector.hh:62
ElementType field_type
Definition: simple/vector.hh:54
VectorContainer(const VectorContainer &rhs)
Definition: simple/vector.hh:71
const Entity & e
Definition: localfunctionspace.hh:120
VectorContainer(const GFS &gfs, Backend::attached_container=Backend::attached_container())
Definition: simple/vector.hh:76
VectorContainer(const GFS &gfs, Backend::unattached_container)
Creates a VectorContainer without allocating storage.
Definition: simple/vector.hh:82
Dune::template FieldTraits< E >::real_type one_norm() const
Definition: simple/vector.hh:195
Definition: simple/descriptors.hh:38
const E & operator[](const ContainerIndex &ci) const
Definition: simple/vector.hh:183
const_iterator end() const
Definition: simple/vector.hh:276
GFS GridFunctionSpace
Definition: simple/vector.hh:56
VectorContainer & axpy(const E &a, const VectorContainer &y)
Definition: simple/vector.hh:228
Dune::template FieldTraits< E >::real_type two_norm() const
Definition: simple/vector.hh:188
VectorContainer & operator+=(const E &e)
Definition: simple/vector.hh:157
const_iterator begin() const
Definition: simple/vector.hh:266
Definition: uncachedvectorview.hh:14
ElementType E
Definition: simple/vector.hh:51
VectorContainer & operator+=(const VectorContainer &y)
Definition: simple/vector.hh:164
VectorContainer(const GFS &gfs, const E &e)
Definition: simple/vector.hh:98
GFS::Ordering::Traits::ContainerIndex ContainerIndex
Definition: simple/vector.hh:59
Tag for requesting a vector or matrix container with a pre-attached underlying object.
Definition: backend/common/tags.hh:27
E & operator[](const ContainerIndex &ci)
Definition: simple/vector.hh:178
void detach()
Definition: simple/vector.hh:103
bool attached() const
Definition: simple/vector.hh:113
VectorContainer & operator=(const E &e)
Definition: simple/vector.hh:143
size_t flatsize() const
Definition: simple/vector.hh:281
size_type N() const
Definition: simple/vector.hh:123
VectorContainer & operator*=(const E &e)
Definition: simple/vector.hh:149
Definition: simple/vector.hh:42
const std::shared_ptr< Container > & storage() const
Definition: simple/vector.hh:118
E dot(const VectorContainer &y) const
Definition: simple/vector.hh:223
iterator end()
Definition: simple/vector.hh:271
For backward compatibility – Do not use this!
Definition: adaptivity.hh:28
VectorContainer & operator=(const VectorContainer &r)
Definition: simple/vector.hh:128
Container::size_type size_type
Definition: simple/vector.hh:57
Container & base()
Definition: simple/vector.hh:237
iterator begin()
Definition: simple/vector.hh:261
Dune::template FieldTraits< E >::real_type infinity_norm() const
Definition: simple/vector.hh:205
VectorContainer(const GFS &gfs, Container &container)
Constructs an VectorContainer for an explicitly given vector object.
Definition: simple/vector.hh:91
E operator*(const VectorContainer &y) const
Definition: simple/vector.hh:218
Container::iterator iterator
Definition: simple/vector.hh:61
const Container & base() const
Definition: simple/vector.hh:242
C Container
Definition: simple/vector.hh:49
Tag for requesting a vector or matrix container without a pre-attached underlying object...
Definition: backend/common/tags.hh:23
std::enable_if< std::is_base_of< impl::WrapperBase, T >::value, Native< T > &>::type native(T &t)
Definition: backend/interface.hh:192
Various tags for influencing backend behavior.
Container::value_type ElementType
Definition: simple/vector.hh:50
void attach(std::shared_ptr< Container > container)
Definition: simple/vector.hh:108
const GFS & gridFunctionSpace() const
Definition: simple/vector.hh:286
Definition: uncachedvectorview.hh:134