3 #ifndef DUNE_PDELAB_BACKEND_SIMPLE_VECTOR_HH
4 #define DUNE_PDELAB_BACKEND_SIMPLE_VECTOR_HH
10 #include <dune/common/fvector.hh>
11 #include <dune/common/shared_ptr.hh>
12 #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>
62 #if HAVE_TEMPLATE_ALIASES
64 template<
typename LFSCache>
67 template<
typename LFSCache>
72 template<
typename LFSCache>
86 template<
typename LFSCache>
100 #endif // HAVE_TEMPLATE_ALIASES
104 , _container(make_shared<
Container>(*(rhs._container)))
109 , _container(make_shared<
Container>(gfs.ordering().blockCount()))
124 , _container(stackobject_to_shared_ptr(container))
126 _container->resize(gfs.ordering().blockCount());
131 , _container(make_shared<
Container>(gfs.ordering().blockCount(),e))
139 void attach(shared_ptr<Container> container)
141 _container = container;
146 return bool(_container);
156 return _container->size();
165 (*_container) = (*r._container);
169 _container = make_shared<Container>(*(r._container));
176 std::fill(_container->begin(),_container->end(),
e);
182 std::transform(_container->begin(),_container->end(),_container->begin(),
183 std::bind(std::multiplies<E>(),e,std::placeholders::_1));
190 std::transform(_container->begin(),_container->end(),_container->begin(),
191 std::bind(std::plus<E>(),e,std::placeholders::_1));
197 std::transform(_container->begin(),_container->end(),y._container->begin(),
198 _container->begin(),std::plus<E>());
204 std::transform(_container->begin(),_container->end(),y._container->begin(),
205 _container->begin(),std::minus<E>());
211 return (*_container)[ci[0]];
216 return (*_container)[ci[0]];
219 typename Dune::template FieldTraits<E>::real_type
two_norm()
const
221 using namespace std::placeholders;
222 typedef typename Dune::template FieldTraits<E>::real_type Real;
223 return std::sqrt(std::accumulate(_container->begin(),_container->end(),Real(0),std::bind(std::plus<Real>(),_1,std::bind(abs2<E>(),_2))));
226 typename Dune::template FieldTraits<E>::real_type
one_norm()
const
228 using namespace std::placeholders;
229 typedef typename Dune::template FieldTraits<E>::real_type Real;
230 return std::accumulate(_container->begin(),_container->end(),Real(0),std::bind(std::plus<Real>(),_1,std::bind(std::abs<E>,_2)));
235 if (_container->size() == 0)
237 using namespace std::placeholders;
238 typedef typename Dune::template FieldTraits<E>::real_type Real;
239 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)));
244 return std::inner_product(_container->begin(),_container->end(),y._container->begin(),
E(0));
249 return std::inner_product(_container->begin(),_container->end(),y._container->begin(),
E(0),std::plus<E>(),Dune::dot<E,E>);
254 using namespace std::placeholders;
255 std::transform(_container->begin(),_container->end(),y._container->begin(),
256 _container->begin(),std::bind(std::plus<E>(),_1,std::bind(std::multiplies<E>(),a,_2)));
273 return _container->begin();
278 return _container->begin();
283 return _container->end();
288 return _container->end();
293 return _container->size();
303 shared_ptr<Container> _container;
312 template<
typename GFS,
typename E>
313 struct SimpleVectorSelectorHelper
316 using vector_type =
typename GFS::Traits::Backend::template vector_type<E>;
318 using Type = simple::VectorContainer<GFS,vector_type>;
322 template<
template<
typename>
class Container,
typename GFS,
typename E>
323 struct BackendVectorSelectorHelper<SimpleVectorBackend<
Container>, GFS,
E>
324 :
public SimpleVectorSelectorHelper<GFS,E>
332 #endif // DUNE_PDELAB_BACKEND_SIMPLE_VECTOR_HH
const_iterator begin() const
Definition: simple/vector.hh:276
void detach()
Definition: simple/vector.hh:134
Tag for requesting a vector or matrix container with a pre-attached underlying object.
Definition: backend/tags.hh:27
LocalView()
Definition: simple/vector.hh:77
iterator begin()
Definition: simple/vector.hh:271
ConstLocalView(const VectorContainer &vc)
Definition: simple/vector.hh:94
ConstLocalView()
Definition: simple/vector.hh:91
VectorContainer(const GFS &gfs, tags::attached_container=tags::attached_container())
Definition: simple/vector.hh:107
Container::const_iterator const_iterator
Definition: simple/vector.hh:60
LocalView(VectorContainer &vc)
Definition: simple/vector.hh:80
VectorContainer(const VectorContainer &rhs)
Definition: simple/vector.hh:102
VectorContainer & operator+=(const E &e)
Definition: simple/vector.hh:188
Definition: simple/vector.hh:73
VectorContainer(const GFS &gfs, const E &e)
Definition: simple/vector.hh:129
VectorContainer & operator=(const E &e)
Definition: simple/vector.hh:174
Dune::template FieldTraits< E >::real_type two_norm() const
Definition: simple/vector.hh:219
Tag for requesting a vector or matrix container without a pre-attached underlying object...
Definition: backend/tags.hh:23
Dune::template FieldTraits< E >::real_type infinity_norm() const
Definition: simple/vector.hh:233
E dot(const VectorContainer &y) const
Definition: simple/vector.hh:247
size_t flatsize() const
Definition: simple/vector.hh:291
VectorContainer & operator*=(const E &e)
Definition: simple/vector.hh:180
bool attached() const
Definition: simple/vector.hh:144
const_iterator end() const
Definition: simple/vector.hh:286
VectorContainer(const GFS &gfs, tags::unattached_container)
Creates a VectorContainer without allocating storage.
Definition: simple/vector.hh:113
E operator*(const VectorContainer &y) const
Definition: simple/vector.hh:242
LFSCache LFSCache
Definition: uncachedvectorview.hh:19
Container & base()
Definition: simple/vector.hh:261
VectorContainer(const GFS &gfs, Container &container)
Constructs an VectorContainer for an explicitly given vector object.
Definition: simple/vector.hh:122
Dune::template FieldTraits< E >::real_type one_norm() const
Definition: simple/vector.hh:226
ElementType E
Definition: simple/vector.hh:49
void attach(shared_ptr< Container > container)
Definition: simple/vector.hh:139
iterator end()
Definition: simple/vector.hh:281
Container::iterator iterator
Definition: simple/vector.hh:59
GFS::Ordering::Traits::ContainerIndex ContainerIndex
Definition: simple/vector.hh:57
VectorContainer & operator=(const VectorContainer &r)
Definition: simple/vector.hh:159
VectorContainer & operator-=(const VectorContainer &y)
Definition: simple/vector.hh:202
Definition: simple/vector.hh:87
Container::value_type ElementType
Definition: simple/vector.hh:48
Definition: simple/vector.hh:43
const Container & base() const
Definition: simple/vector.hh:266
VectorContainer & operator+=(const VectorContainer &y)
Definition: simple/vector.hh:195
ElementType field_type
Definition: simple/vector.hh:52
VectorContainer & axpy(const E &a, const VectorContainer &y)
Definition: simple/vector.hh:252
GFS GridFunctionSpace
Definition: simple/vector.hh:54
const E & e
Definition: interpolate.hh:172
const shared_ptr< Container > & storage() const
Definition: simple/vector.hh:149
Container::size_type size_type
Definition: simple/vector.hh:55
const E & operator[](const ContainerIndex &ci) const
Definition: simple/vector.hh:214
C Container
Definition: simple/vector.hh:47
const GFS & gridFunctionSpace() const
Definition: simple/vector.hh:296
E & operator[](const ContainerIndex &ci)
Definition: simple/vector.hh:209
size_type N() const
Definition: simple/vector.hh:154
Various tags for influencing backend behavior.