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 ) );
Poly::value_type integrate(Polynomial< Poly, PsetType > const &p)
integrate a polynomial over a convex
Definition: operations.hpp:51
Linear Operator between function spaces, represented by a matrix.
Definition: operatorlinear.hpp:43
elements_type const & elements() const
Definition: elements.hpp:355
base class for all linear algebra backends
Definition: backend.hpp:133
boost::shared_ptr< OperatorSteklovPc< space_type > > operatorSteklPc(boost::shared_ptr< space_type > const &space, typename OperatorSteklovPc< space_type >::backend_ptrtype const &backend=Backend< double >::build(BACKEND_PETSC))
Definition: operatorsteklovpoincare.hpp:144
OperatorSteklovPc made easy.
Definition: operatorsteklovpoincare.hpp:50