29 #ifndef _OPERATORSTEKLOVPC_HPP_
30 #define _OPERATORSTEKLOVPC_HPP_
33 #include <feel/feeldiscr/operatorlift.hpp>
34 #include <feel/feeldiscr/functionspace.hpp>
49 template<
class fs_type>
61 typedef fs_type space_type;
62 typedef boost::shared_ptr<space_type> space_ptrtype;
64 typedef typename super::backend_ptrtype backend_ptrtype;
65 typedef FsFunctionalLinear<fs_type> image_element_type;
66 typedef typename image_element_type::value_type value_type;
85 template<
typename Args,
typename IntEltsDefault>
88 typedef typename vf::detail::clean_type<Args,tag::expr>::type _expr_type;
89 typedef typename vf::detail::clean2_type<Args,tag::range,IntEltsDefault>::type _range_type;
90 typedef typename vf::detail::clean2_type<Args,tag::quad, _Q< vf::ExpressionOrder<_range_type,_expr_type>::value > >::type _quad_type;
91 typedef typename vf::detail::clean2_type<Args,tag::quad1, _Q< vf::ExpressionOrder<_range_type,_expr_type>::value_1 > >::type _quad1_type;
94 BOOST_PARAMETER_MEMBER_FUNCTION(
103 ( quad, *, (
typename integrate_type<Args,decltype(
elements( this->M_Xh->mesh() ) )>::_quad_type() ) )
104 ( quad1, *, (
typename integrate_type<Args,decltype(
elements( this->M_Xh->mesh() ) )>::_quad1_type() ) )
105 ( geomap, *, GeomapStrategyType::GEOMAP_OPT )
111 auto op_lift = operatorLift( this->M_Xh,this->M_backend );
112 auto domain_lift = op_lift->lift( _range=this->M_Xh->mesh(),_expr=idv( domain ) );
113 auto image_lift = op_lift->lift( _range=this->M_Xh->mesh(),_expr=idv( image ) );
114 value_type steklovpcr =
integrate( _range=
elements( this->M_Xh->mesh() ), _expr=gradv( domain_lift )*trans( gradv( image_lift ) ), _quad=quad, _quad1=quad1 );
118 template<
typename First,
typename Second>
120 operator()( First
const& first ,Second
const& second )
122 return this->steklovpc( first, second );
131 backend_ptrtype M_backend;
142 template<
typename space_type>
143 boost::shared_ptr< OperatorSteklovPc<space_type> >
145 typename OperatorSteklovPc<space_type>::backend_ptrtype
const& backend =
Backend<double>::build( BACKEND_PETSC ) )
148 boost::shared_ptr<StekPc_type> Steklov(
new StekPc_type( space, backend ) );