44 template<
typename ExprT,
int Part = 1>
49 static const size_type context = ExprT::context;
50 static const bool is_symetric = Part;
51 static const bool is_terminal =
false;
53 static const uint16_type imorder = ExprT::imorder;
54 static const bool imIsPoly = ExprT::imIsPoly;
56 template<
typename Func>
57 struct HasTestFunction
59 static const bool result = ExprT::template HasTestFunction<Func>::result;
62 template<
typename Func>
63 struct HasTrialFunction
65 static const bool result = ExprT::template HasTrialFunction<Func>::result;
73 typedef ExprT expression_type;
74 typedef typename expression_type::value_type value_type;
75 typedef Sym<ExprT,Part> this_type;
84 explicit Sym( expression_type
const & __expr )
122 expression_type
const& expression()
const
129 template<
typename Geo_t,
typename Basis_i_t,
typename Basis_j_t>
132 typedef typename expression_type::template tensor<Geo_t, Basis_i_t, Basis_j_t> tensor_expr_type;
133 typedef typename tensor_expr_type::value_type value_type;
135 typedef typename tensor_expr_type::shape shape;
137 template <
class Args>
struct sig
139 typedef value_type type;
144 static const bool value = tensor_expr_type::is_zero::value;
147 tensor( this_type
const& expr,
148 Geo_t
const& geom, Basis_i_t
const& fev, Basis_j_t
const& feu )
150 M_tensor_expr( expr.expression(), geom, fev, feu )
154 tensor( this_type
const& expr,
155 Geo_t
const& geom, Basis_i_t
const& fev )
157 M_tensor_expr( expr.expression(), geom, fev )
161 tensor( this_type
const& expr, Geo_t
const& geom )
163 M_tensor_expr( expr.expression(), geom )
167 template<
typename IM>
168 void init( IM
const& im )
170 M_tensor_expr.init( im );
172 void update( Geo_t
const& geom, Basis_i_t
const& fev, Basis_j_t
const& feu )
174 M_tensor_expr.update( geom, fev, feu );
176 void update( Geo_t
const& geom, Basis_i_t
const& fev )
178 M_tensor_expr.update( geom, fev );
180 void update( Geo_t
const& geom )
182 M_tensor_expr.update( geom );
184 void update( Geo_t
const& geom, uint16_type face )
186 M_tensor_expr.update( geom, face );
190 evalijq( uint16_type i, uint16_type j, uint16_type c1, uint16_type c2, uint16_type q )
const
192 value_type a = M_tensor_expr.evalijq( i, j, c1, c2, q );
193 value_type at = M_tensor_expr.evalijq( i, j, c2, c1, q );
202 evaliq( uint16_type i, uint16_type c1, uint16_type c2, uint16_type q )
const
204 value_type a = M_tensor_expr.evaliq( i, c1, c2, q );
205 value_type at = M_tensor_expr.evaliq( i, c2, c1, q );
214 evalq( uint16_type c1, uint16_type c2, uint16_type q )
const
216 value_type a = M_tensor_expr.evalq( c1, c2, q );
217 value_type at = M_tensor_expr.evalq( c2, c1, q );
227 tensor_expr_type M_tensor_expr;
231 mutable expression_type M_expr;
238 template<
typename ExprT>
243 typedef Sym<ExprT,1> sym_t;
244 return Expr< sym_t >( sym_t( v ) );
250 template<
typename ExprT>
255 typedef Sym<ExprT,0> sym_t;
256 return Expr< sym_t >( sym_t( v ) );