30 #ifndef __FSFUNCTIONALLINEARFREE_H
31 #define __FSFUNCTIONALLINEARFREE_H 1
40 template<
class Space,
class ExprType>
41 class FsFunctionalLinearFree :
public FsFunctionalLinear<Space>
45 typedef FsFunctionalLinearFree<Space,ExprType> this_type;
46 typedef FsFunctionalLinear<Space> super_type;
48 typedef Space space_type;
50 typedef boost::shared_ptr<space_type> space_ptrtype;
51 typedef typename space_type::element_type element_type;
53 typedef typename space_type::value_type value_type;
55 typedef Backend<value_type> backend_type;
56 typedef boost::shared_ptr<backend_type> backend_ptrtype;
58 typedef typename backend_type::vector_type vector_type;
59 typedef typename backend_type::vector_ptrtype vector_ptrtype;
61 typedef ExprType expr_type;
63 FsFunctionalLinearFree( space_ptrtype space , expr_type expr ) :
65 M_backend( backend_type::build( BACKEND_PETSC ) ),
69 FsFunctionalLinearFree( space_ptrtype space, backend_ptrtype backend , expr_type expr ) :
83 operator()(
const element_type& x )
const
85 auto vector = M_backend->newVector( this->space() );
86 form1( _test=this->space(),_vector=vector) = M_expr;
89 return M_backend->dot( *vector, x.container() );
93 virtual void containerPtr( vector_ptrtype & vector_to_fill )
95 auto vector = M_backend->newVector( this->space() );
96 form1( _test=this->space(),_vector=vector) = M_expr;
98 vector_to_fill = vector;
102 virtual void container( vector_type & vector_to_fill )
104 auto vector = M_backend->newVector( this->space() );
105 form1( _test=this->space(),_vector=vector) = M_expr;
108 vector_to_fill = *vector;
111 this_type&
operator=( this_type
const& m )
113 M_backend = m.M_backend;
120 backend_ptrtype M_backend;
128 template<
typename Args>
129 struct compute_functionalLinearFree_return
131 typedef typename boost::remove_reference<typename parameter::binding<Args, tag::space>::type>::type::element_type space_type;
132 typedef typename boost::remove_reference<typename parameter::binding<Args, tag::expr>::type>::type expr_type;
134 typedef FsFunctionalLinearFree<space_type, expr_type> type;
135 typedef boost::shared_ptr<FsFunctionalLinearFree<space_type,expr_type> > ptrtype;
139 BOOST_PARAMETER_FUNCTION(
140 (
typename Feel::detail::compute_functionalLinearFree_return<Args>::ptrtype ),
141 functionalLinearFree,
144 ( space, *( boost::is_convertible<mpl::_,boost::shared_ptr<FunctionSpaceBase> > ) )
148 ( backend, *, Backend<
typename Feel::detail::compute_functionalLinearFree_return<Args>::space_type::value_type>::build() )
153 Feel::detail::ignore_unused_variable_warning( args );
154 typedef typename Feel::detail::compute_functionalLinearFree_return<Args>::type functionalfree_type;
155 typedef typename Feel::detail::compute_functionalLinearFree_return<Args>::ptrtype functionalfree_ptrtype;
156 return functionalfree_ptrtype (
new functionalfree_type( space , backend , expr ) );
Elements & operator=(Elements const &e)
Definition: elements.hpp:335