Go to the documentation of this file.
2 #ifndef DUNE_PDELAB_BACKEND_SIMPLE_MATRIX_HH
3 #define DUNE_PDELAB_BACKEND_SIMPLE_MATRIX_HH
11 #include <dune/common/typetraits.hh>
21 template<
typename GFSV,
typename GFSU,
typename C>
23 :
public Backend::impl::Wrapper<C>
26 friend Backend::impl::Wrapper<C>;
40 typedef typename GFSV::Ordering::Traits::ContainerIndex
RowIndex;
41 typedef typename GFSU::Ordering::Traits::ContainerIndex
ColIndex;
43 template<
typename RowCache,
typename ColCache>
46 template<
typename RowCache,
typename ColCache>
52 : _rows(go.testGridFunctionSpace().size())
53 , _cols(go.trialGridFunctionSpace().size())
54 , _container(std::make_shared<
Container>(_rows*_cols,
E(0)))
59 : _rows(go.testGridFunctionSpace().size())
60 , _cols(go.trialGridFunctionSpace().size())
61 , _container(std::make_shared<
Container>(_rows*_cols,
e))
74 , _container(std::make_shared<
Container>())
80 , _container(std::make_shared<
Container>(*(rhs._container)))
87 if (_rows == 0 && _cols == 0)
94 (*_container) = (*(rhs._container));
98 _container = std::make_shared<Container>(*(rhs._container));
108 void attach(std::shared_ptr<Container> container)
110 _container = container;
115 return bool(_container);
118 const std::shared_ptr<Container>&
storage()
const
135 std::fill(_container->begin(),_container->end(),
e);
141 using namespace std::placeholders;
142 std::transform(_container->begin(),_container->end(),_container->begin(),std::bind(std::multiplies<E>(),
e,_1));
147 void mv(
const V& x, V& y)
const
149 auto rowit = _container->begin();
152 v = std::inner_product(rowit,rowit + _cols,x.begin(),
E(0));
158 void usmv(
const E alpha,
const V& x, V& y)
const
160 auto rowit = _container->begin();
163 v += alpha * std::inner_product(rowit,rowit + _cols,x.begin(),
E(0));
170 return (*_container)[ri[0]*_cols + ci[0]];
175 return (*_container)[ri[0]*_cols + ci[0]];
210 std::fill(_container->begin() + ri[0]*_cols,_container->begin() + (ri[0]+1)*_cols,
E(0));
211 (*this)(ri,ri) = diagonal_entry;
216 std::fill(_container->begin() + ri[0]*_cols,_container->begin() + (ri[0]+1)*_cols,
E(0));
217 (*this)(ri,ri) = diagonal_entry;
224 std::shared_ptr<Container> _container;
232 #endif // DUNE_PDELAB_BACKEND_SIMPLE_MATRIX_HH
void finalize()
Definition: simple/matrix.hh:205
Various tags for influencing backend behavior.
Definition: uncachedmatrixview.hh:165
ElementType E
Definition: simple/matrix.hh:32
Tag for requesting a vector or matrix container without a pre-attached underlying object.
Definition: backend/common/tags.hh:23
GFSV::Ordering::Traits::ContainerIndex RowIndex
Definition: simple/matrix.hh:40
Definition: simple/matrix.hh:22
void usmv(const E alpha, const V &x, V &y) const
Definition: simple/matrix.hh:158
MatrixContainer(Backend::attached_container)
Creates an ISTLMatrixContainer with an empty underlying ISTL matrix.
Definition: simple/matrix.hh:71
void detach()
Definition: simple/matrix.hh:103
size_type M() const
Definition: simple/matrix.hh:128
MatrixContainer & operator=(const E &e)
Definition: simple/matrix.hh:133
For backward compatibility – Do not use this!
Definition: adaptivity.hh:28
Definition: uncachedmatrixview.hh:12
const E & operator()(const RowIndex &ri, const ColIndex &ci) const
Definition: simple/matrix.hh:173
MatrixContainer(const GO &go)
Definition: simple/matrix.hh:51
void attach(std::shared_ptr< Container > container)
Definition: simple/matrix.hh:108
const Entity & e
Definition: localfunctionspace.hh:121
C Container
Definition: simple/matrix.hh:30
Container & base()
Definition: simple/matrix.hh:183
MatrixContainer & operator=(const MatrixContainer &rhs)
Definition: simple/matrix.hh:83
bool attached() const
Definition: simple/matrix.hh:113
void flush()
Definition: simple/matrix.hh:202
void mv(const V &x, V &y) const
Definition: simple/matrix.hh:147
size_type N() const
Definition: simple/matrix.hh:123
E & operator()(const RowIndex &ri, const ColIndex &ci)
Definition: simple/matrix.hh:168
GFSU TrialGridFunctionSpace
Definition: simple/matrix.hh:37
void clear_row(const RowIndex &ri, const E &diagonal_entry)
Definition: simple/matrix.hh:208
GFSU::Ordering::Traits::ContainerIndex ColIndex
Definition: simple/matrix.hh:41
Container::value_type ElementType
Definition: simple/matrix.hh:31
Container::size_type size_type
Definition: simple/matrix.hh:35
GFSV TestGridFunctionSpace
Definition: simple/matrix.hh:38
const Container & base() const
Definition: simple/matrix.hh:178
void clear_row_block(const RowIndex &ri, const E &diagonal_entry)
Definition: simple/matrix.hh:214
Tag for requesting a vector or matrix container with a pre-attached underlying object.
Definition: backend/common/tags.hh:27
const std::shared_ptr< Container > & storage() const
Definition: simple/matrix.hh:118
ElementType field_type
Definition: simple/matrix.hh:34
MatrixContainer(const MatrixContainer &rhs)
Definition: simple/matrix.hh:77
MatrixContainer(Backend::unattached_container=Backend::unattached_container())
Creates an ISTLMatrixContainer without allocating an underlying ISTL matrix.
Definition: simple/matrix.hh:65
MatrixContainer & operator*=(const E &e)
Definition: simple/matrix.hh:139
MatrixContainer(const GO &go, const E &e)
Definition: simple/matrix.hh:58