2 #ifndef DUNE_PDELAB_BACKEND_SIMPLE_MATRIX_HH
3 #define DUNE_PDELAB_BACKEND_SIMPLE_MATRIX_HH
10 #include <dune/common/typetraits.hh>
11 #include <dune/common/shared_ptr.hh>
21 template<
typename GFSV,
typename GFSU,
typename C>
37 typedef typename GFSV::Ordering::Traits::ContainerIndex
RowIndex;
38 typedef typename GFSU::Ordering::Traits::ContainerIndex
ColIndex;
40 template<
typename RowCache,
typename ColCache>
43 template<
typename RowCache,
typename ColCache>
49 : _rows(go.testGridFunctionSpace().size())
50 , _cols(go.trialGridFunctionSpace().size())
51 , _container(make_shared<
Container>(_rows*_cols,
E(0)))
56 : _rows(go.testGridFunctionSpace().size())
57 , _cols(go.trialGridFunctionSpace().size())
58 , _container(make_shared<
Container>(_rows*_cols,e))
77 , _container(make_shared<
Container>(*(rhs._container)))
84 if (_rows == 0 && _cols == 0)
91 (*_container) = (*(rhs._container));
95 _container = make_shared<Container>(*(rhs._container));
105 void attach(shared_ptr<Container> container)
107 _container = container;
112 return bool(_container);
132 std::fill(_container->begin(),_container->end(),
e);
138 using namespace std::placeholders;
139 std::transform(_container->begin(),_container->end(),_container->begin(),std::bind(std::multiplies<E>(),e,_1));
144 void mv(
const V& x, V& y)
const
146 auto rowit = _container->begin();
149 v = std::inner_product(rowit,rowit + _cols,x.begin(),
E(0));
155 void usmv(
const E alpha,
const V& x, V& y)
const
157 auto rowit = _container->begin();
160 v += alpha * std::inner_product(rowit,rowit + _cols,x.begin(),
E(0));
167 return (*_container)[ri[0]*_cols + ci[0]];
172 return (*_container)[ri[0]*_cols + ci[0]];
193 std::fill(_container->begin() + ri[0]*_cols,_container->begin() + (ri[0]+1)*_cols,
E(0));
194 (*this)(ri,ri) = diagonal_entry;
201 shared_ptr<Container> _container;
210 #endif // DUNE_PDELAB_BACKEND_SIMPLE_MATRIX_HH
Definition: uncachedmatrixview.hh:14
ElementType E
Definition: simple/matrix.hh:29
Definition: uncachedmatrixview.hh:159
const shared_ptr< Container > & storage() const
Definition: simple/matrix.hh:115
E & operator()(const RowIndex &ri, const ColIndex &ci)
Definition: simple/matrix.hh:165
Container & base()
Definition: simple/matrix.hh:180
size_type M() const
Definition: simple/matrix.hh:125
Tag for requesting a vector or matrix container with a pre-attached underlying object.
Definition: backend/tags.hh:27
size_type N() const
Definition: simple/matrix.hh:120
MatrixContainer & operator=(const E &e)
Definition: simple/matrix.hh:130
MatrixContainer(tags::attached_container)
Creates an ISTLMatrixContainer with an empty underlying ISTL matrix.
Definition: simple/matrix.hh:68
GFSU TrialGridFunctionSpace
Definition: simple/matrix.hh:34
GFSU::Ordering::Traits::ContainerIndex ColIndex
Definition: simple/matrix.hh:38
void flush()
Definition: simple/matrix.hh:185
void mv(const V &x, V &y) const
Definition: simple/matrix.hh:144
Definition: simple/matrix.hh:22
void finalize()
Definition: simple/matrix.hh:188
Tag for requesting a vector or matrix container without a pre-attached underlying object...
Definition: backend/tags.hh:23
void usmv(const E alpha, const V &x, V &y) const
Definition: simple/matrix.hh:155
ElementType field_type
Definition: simple/matrix.hh:31
Container::value_type ElementType
Definition: simple/matrix.hh:28
const E & operator()(const RowIndex &ri, const ColIndex &ci) const
Definition: simple/matrix.hh:170
const Container & base() const
Definition: simple/matrix.hh:175
GFSV::Ordering::Traits::ContainerIndex RowIndex
Definition: simple/matrix.hh:37
MatrixContainer(const GO &go, const E &e)
Definition: simple/matrix.hh:55
MatrixContainer & operator*=(const E &e)
Definition: simple/matrix.hh:136
C Container
Definition: simple/matrix.hh:27
MatrixContainer & operator=(const MatrixContainer &rhs)
Definition: simple/matrix.hh:80
MatrixContainer(const GO &go)
Definition: simple/matrix.hh:48
GFSV TestGridFunctionSpace
Definition: simple/matrix.hh:35
MatrixContainer(const MatrixContainer &rhs)
Definition: simple/matrix.hh:74
Container::size_type size_type
Definition: simple/matrix.hh:32
void clear_row(const RowIndex &ri, const E &diagonal_entry)
Definition: simple/matrix.hh:191
const E & e
Definition: interpolate.hh:172
bool attached() const
Definition: simple/matrix.hh:110
void attach(shared_ptr< Container > container)
Definition: simple/matrix.hh:105
MatrixContainer(tags::unattached_container=tags::unattached_container())
Creates an ISTLMatrixContainer without allocating an underlying ISTL matrix.
Definition: simple/matrix.hh:62
void detach()
Definition: simple/matrix.hh:100
Various tags for influencing backend behavior.