29 #ifndef __OperatorLinearParametrized_H
30 #define __OperatorLinearParametrized_H 1
43 template<
class DomainSpace,
class DualImageSpace>
64 typedef typename super::domain_space_type domain_space_type;
65 typedef typename super::dual_image_space_type dual_image_space_type;
66 typedef typename super::domain_space_ptrtype domain_space_ptrtype;
67 typedef typename super::dual_image_space_ptrtype dual_image_space_ptrtype;
68 typedef typename domain_space_type::element_type domain_element_type;
70 typedef typename super::backend_type backend_type;
71 typedef typename super::backend_ptrtype backend_ptrtype;
74 typedef typename backend_type::vector_ptrtype vector_ptrtype;
75 typedef boost::shared_ptr<matrix_type> matrix_ptrtype;
77 template<
typename T,
typename Storage>
78 struct domain_element:
public super::domain_space_type::template Element<T,Storage> {};
80 typedef FsFunctionalLinear<DualImageSpace> image_element_type;
84 typedef boost::shared_ptr<parameterspace_type> parameterspace_ptrtype;
86 typedef parameterspace_type::element_ptrtype parameter_ptrtype;
88 typedef parameterspace_type::sampling_ptrtype sampling_ptrtype;
90 typedef Eigen::VectorXd theta_vector_type;
117 dual_image_space_ptrtype dualImageSpace,
118 backend_ptrtype backend )
120 super_type( domainSpace, dualImageSpace, backend )
129 init( domain_space_ptrtype domainSpace,
130 dual_image_space_ptrtype dualImageSpace,
131 backend_ptrtype backend )
133 super::init( domainSpace, dualImageSpace, backend );
196 virtual theta_vector_type
computeThetaq( parameter_type
const& mu ) = 0;
199 template<
class ExprT>
200 this_type& add(
int q, ExprT
const& e )
203 form2( this->domainSpace(),
204 this->dualImageSpace(),
213 template<
class ExprT>
214 this_type& operator+=( ExprT
const& e )
216 form2( this->domainSpace(),
217 this->dualImageSpace(),
229 return offlineMerge( mu );
236 sparse_matrix_type
merge( parameter_type
const& mu );
248 std::vector<sparse_matrix_ptrtype>
M_Aq;
259 template<
class DomainSpace,
class DualImageSpace>
263 sparse_matrix_ptrtype A( M_backend->newMatrix( domainSpace(), dualImageSpace() ) )
267 A->scale( this->thetaq( 0 ) );
269 for (
int q = 1; q < Qa(); ++q )
271 A->addMatrix( this->thetaq( q ), M_Aq[q] );