1 #ifndef DUNE_FEM_SPOPERATOR_HH
2 #define DUNE_FEM_SPOPERATOR_HH
3 
4 // system includes
5 #include <string>
6 
7 // local includes
8 #include <dune/fem/solver/parameter.hh>
9 #include <dune/fem/operator/matrix/spmatrix.hh>
10 
11 namespace Dune
12 {
13 
14   namespace Fem
15   {
16 
17     //! SparseRowLinearOperator
18     template< class DomainFunction, class RangeFunction,
19               class Matrix = SparseRowMatrix< typename DomainFunction::DiscreteFunctionSpaceType::RangeFieldType > >
20     struct SparseRowLinearOperator
21     : public SparseRowMatrixObject< typename DomainFunction::DiscreteFunctionSpaceType,
22                                     typename RangeFunction::DiscreteFunctionSpaceType,
23                                     Matrix >,
24       public Fem::AssembledOperator< DomainFunction, RangeFunction >
25     {
26       typedef typename DomainFunction::DiscreteFunctionSpaceType DomainSpaceType;
27       typedef typename RangeFunction::DiscreteFunctionSpaceType RangeSpaceType;
28       typedef SparseRowLinearOperator< DomainFunction, RangeFunction, Matrix > ThisType;
29       typedef SparseRowMatrixObject< DomainSpaceType, RangeSpaceType, Matrix > BaseType;
30 
31       static constexpr bool assembled = true;
32 
33       using BaseType::apply;
34       using BaseType::exportMatrix;
35 
SparseRowLinearOperatorDune::Fem::SparseRowLinearOperator36       SparseRowLinearOperator( const std::string & ,
37                                const DomainSpaceType &domainSpace,
38                                const RangeSpaceType &rangeSpace,
39                                const SolverParameter& param = SolverParameter() ) :
40         BaseType( domainSpace, rangeSpace, param )
41       {}
42 
operator ()Dune::Fem::SparseRowLinearOperator43       virtual void operator()( const DomainFunction &arg, RangeFunction &dest ) const
44       {
45         apply( arg, dest );
46       }
47 
finalizeDune::Fem::SparseRowLinearOperator48       virtual void finalize () { BaseType::compress(); }
49 
50     };
51 
52   } // namespace Fem
53 
54 } // namespace Dune
55 
56 #endif // #ifndef DUNE_FEM_SPOPERATOR_HH
57