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