1 #ifndef DUNE_FEM_EIGENOPERATOR_HH
2 #define DUNE_FEM_EIGENOPERATOR_HH
3 
4 #ifdef HAVE_EIGEN
5 
6 // system includes
7 #include <string>
8 
9 // local includes
10 #include <dune/fem/operator/matrix/eigenmatrix.hh>
11 
12 namespace Dune
13 {
14 
15   namespace Fem
16   {
17 
18     //! EigenLinearOperator
19     template< class DomainFunction, class RangeFunction >
20     struct EigenLinearOperator
21     : public EigenMatrixObject< typename DomainFunction::DiscreteFunctionSpaceType, typename RangeFunction::DiscreteFunctionSpaceType >,
22       public Fem::AssembledOperator< DomainFunction, RangeFunction >
23     {
24       typedef typename DomainFunction::DiscreteFunctionSpaceType DomainSpaceType;
25       typedef typename RangeFunction::DiscreteFunctionSpaceType RangeSpaceType;
26       typedef EigenLinearOperator< DomainFunction, RangeFunction > ThisType;
27       typedef EigenMatrixObject< DomainSpaceType, RangeSpaceType > BaseType;
28 
29       static constexpr bool assembled = true ;
30 
31       using BaseType::apply;
32       using BaseType::exportMatrix;
33 
EigenLinearOperatorDune::Fem::EigenLinearOperator34       EigenLinearOperator( const std::string & ,
35                            const DomainSpaceType &domainSpace,
36                            const RangeSpaceType &rangeSpace,
37                            const SolverParameter& param = SolverParameter() ) :
38         BaseType( domainSpace, rangeSpace, param )
39       {}
40 
operator ()Dune::Fem::EigenLinearOperator41       virtual void operator()( const DomainFunction &arg, RangeFunction &dest ) const
42       {
43         apply( arg, dest );
44       }
45 
46     };
47   } // namespace Fem
48 
49 } // namespace Dune
50 
51 #endif
52 
53 #endif // #ifndef DUNE_FEM_SPLINEAR_HH
54