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 using namespace std::placeholders;
198 typedef typename Dune::template FieldTraits<E>::real_type Real;
199 return std::accumulate(_container->begin(),_container->end(),Real(0),std::bind(std::plus<Real>(),_1,std::bind(std::abs<E>,_2)));
204 if (_container->size() == 0)
206 using namespace std::placeholders;
207 typedef typename Dune::template FieldTraits<E>::real_type Real;
208 return *std::max_element(_container->begin(),_container->end(),std::bind(std::less<Real>(),std::bind(std::abs<E>,_1),std::bind(std::abs<E>,_2)));
213 return std::inner_product(_container->begin(),_container->end(),y._container->begin(),E(0));
218 return std::inner_product(_container->begin(),_container->end(),y._container->begin(),E(0),std::plus<E>(),Dune::dot<E,E>);
223 using namespace std::placeholders;
224 std::transform(_container->begin(),_container->end(),y._container->begin(),
225 _container->begin(),std::bind(std::plus<E>(),_1,std::bind(std::multiplies<E>(),a,_2)));
247 const Container&
native ()
const 256 return _container->begin();
261 return _container->begin();
266 return _container->end();
269 const_iterator
end()
const 271 return _container->end();
276 return _container->size();
286 std::shared_ptr<Container> _container;
295 template<
typename GFS,
typename E>
296 struct SimpleVectorSelectorHelper
299 using vector_type =
typename GFS::Traits::Backend::template vector_type<E>;
308 template<
template<
typename>
class Container,
typename GFS,
typename E>
309 struct BackendVectorSelectorHelper<Simple::
VectorBackend<Container>, GFS,
E>
310 :
public SimpleVectorSelectorHelper<GFS,E>
321 #endif // DUNE_PDELAB_BACKEND_SIMPLE_VECTOR_HH const std::shared_ptr< Container > & storage() const
Definition: simple/vector.hh:118
ElementType E
Definition: simple/vector.hh:51
GFS::Ordering::Traits::ContainerIndex ContainerIndex
Definition: simple/vector.hh:59
Container::size_type size_type
Definition: simple/vector.hh:57
VectorContainer & operator=(const E &e)
Definition: simple/vector.hh:143
iterator begin()
Definition: simple/vector.hh:254
size_type N() const
Definition: simple/vector.hh:123
const Container & base() const
Definition: simple/vector.hh:235
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:25
VectorContainer(const GFS &gfs, Backend::unattached_container)
Creates a VectorContainer without allocating storage.
Definition: simple/vector.hh:82
const_iterator begin() const
Definition: simple/vector.hh:259
Definition: uncachedvectorview.hh:128
Container::const_iterator const_iterator
Definition: simple/vector.hh:62
VectorContainer & operator=(const VectorContainer &r)
Definition: simple/vector.hh:128
bool attached() const
Definition: simple/vector.hh:113
Definition: simple/vector.hh:42
VectorContainer(const GFS &gfs, Backend::attached_container=Backend::attached_container())
Definition: simple/vector.hh:76
Various tags for influencing backend behavior.
For backward compatibility – Do not use this!
Definition: adaptivity.hh:27
Dune::template FieldTraits< E >::real_type one_norm() const
Definition: simple/vector.hh:195
void attach(std::shared_ptr< Container > container)
Definition: simple/vector.hh:108
iterator end()
Definition: simple/vector.hh:264
Definition: simple/descriptors.hh:39
Dune::template FieldTraits< E >::real_type two_norm() const
Definition: simple/vector.hh:188
GFS GridFunctionSpace
Definition: simple/vector.hh:56
Container::value_type ElementType
Definition: simple/vector.hh:50
const Entity & e
Definition: localfunctionspace.hh:111
Dune::template FieldTraits< E >::real_type infinity_norm() const
Definition: simple/vector.hh:202
Definition: uncachedvectorview.hh:15
Tag for requesting a vector or matrix container with a pre-attached underlying object.
Definition: backend/common/tags.hh:29
const GFS & gridFunctionSpace() const
Definition: simple/vector.hh:279
ElementType field_type
Definition: simple/vector.hh:54
void detach()
Definition: simple/vector.hh:103
const_iterator end() const
Definition: simple/vector.hh:269
VectorContainer & axpy(const E &a, const VectorContainer &y)
Definition: simple/vector.hh:221
VectorContainer(const GFS &gfs, Container &container)
Constructs an VectorContainer for an explicitly given vector object.
Definition: simple/vector.hh:91
E dot(const VectorContainer &y) const
Definition: simple/vector.hh:216
VectorContainer(const VectorContainer &rhs)
Definition: simple/vector.hh:71
std::enable_if< std::is_base_of< impl::WrapperBase, T >::value, Native< T > &>::type native(T &t)
Definition: backend/interface.hh:192
const E & operator[](const ContainerIndex &ci) const
Definition: simple/vector.hh:183
Container::iterator iterator
Definition: simple/vector.hh:61
Container & base()
Definition: simple/vector.hh:230
size_t flatsize() const
Definition: simple/vector.hh:274
VectorContainer & operator+=(const VectorContainer &y)
Definition: simple/vector.hh:164
VectorContainer & operator+=(const E &e)
Definition: simple/vector.hh:157
VectorContainer(const GFS &gfs, const E &e)
Definition: simple/vector.hh:98
VectorContainer & operator*=(const E &e)
Definition: simple/vector.hh:149
E operator*(const VectorContainer &y) const
Definition: simple/vector.hh:211
E & operator[](const ContainerIndex &ci)
Definition: simple/vector.hh:178