1 #ifndef _RHEOLEF_FIELD_EXPR_RECURSIVE_H
2 #define _RHEOLEF_FIELD_EXPR_RECURSIVE_H
47 #include "rheolef/field_expr_terminal.h"
58 template<
class UnaryFunction,
class Expr>
85 std::is_same<UnaryFunction,details::unary_plus>
86 ,std::is_same<UnaryFunction,details::negate>
87 ,std::is_same<UnaryFunction,details::binder_first <details::plus, scalar_type>>
88 ,std::is_same<UnaryFunction,details::binder_second<details::plus, scalar_type>>
89 ,std::is_same<UnaryFunction,details::binder_first <details::minus, scalar_type>>
90 ,std::is_same<UnaryFunction,details::binder_second<details::minus, scalar_type>>
91 ,std::is_same<UnaryFunction,details::binder_first <details::multiplies,scalar_type>>
92 ,std::is_same<UnaryFunction,details::binder_second<details::multiplies,scalar_type>>
93 ,std::is_same<UnaryFunction,details::binder_second<details::divides, scalar_type>>
99 return is_affine_homogeneous::value
100 &&
_expr.have_homogeneous_space (Vh);
114 const UnaryFunction
_f;
137 bool is_on_band ()
const {
return _expr.is_on_band(); }
148 {
_expr.initialize (pops, iopt); }
154 {
_expr.initialize (Xh, pops, iopt); }
159 template<
class Result,
class Arg,
class Status>
166 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
168 fatal_macro (
"invalid type resolution: Result="<<typename_macro(Result)
169 <<
", Arg="<<typename_macro(Arg)
170 <<
", UnaryFunction="<<typename_macro(UnaryFunction));
178 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
180 fatal_macro (
"invalid type resolution: Result="<<typename_macro(Result)
181 <<
", Arg="<<typename_macro(Arg)
182 <<
", UnaryFunction="<<typename_macro(UnaryFunction));
185 template<
class Result,
class Arg>
193 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
195 Eigen::Matrix<Arg,Eigen::Dynamic,1> value1;
196 obj.
_expr.evaluate (omega_K, K, value1);
197 value.resize(value1.size());
199 value[i] = obj._f (value1[i]);
209 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
211 Eigen::Matrix<Arg,Eigen::Dynamic,1> value1;
212 obj.
_expr.evaluate_on_side (omega_K, K, sid, value1);
213 value.resize (value1.size());
215 value[i] = obj._f (value1[i]);
222 template<
class Result,
class Arg,
class M>
226 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
235 eval (*
this, omega_K, K,
value);
240 template<
class Result,
class Arg,
class M>
245 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
254 eval (*
this, omega_K, K, sid,
value);
259 template<class This, class Result, class Arg, space_constant::valued_type ArgTag = space_constant::valued_tag_traits<Arg>::value>
263 template<
class This,
class Result,
class Arg>
270 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
274 switch (arg_valued_tag) {
276 obj.template evaluate_call<Result,T,M> (omega_K, K,
value);
break;
278 obj.template evaluate_call<Result, point_basic<T> > (omega_K, K,
value);
break;
281 obj.template evaluate_call<Result, tensor_basic<T> > (omega_K, K,
value);
break;
282 default: {
error_macro (
"unexpected valued tag="<<arg_valued_tag); }
291 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
295 switch (arg_valued_tag) {
297 obj.template evaluate_call<Result,T> (omega_K, K, sid,
value);
break;
299 obj.template evaluate_call<Result, point_basic<T> > (omega_K, K,
value);
break;
302 obj.template evaluate_call<Result, tensor_basic<T> > (omega_K, K,
value);
break;
303 default: {
error_macro (
"unexpected valued tag="<<arg_valued_tag); }
308 #define _RHEOLEF_evaluate_switch_specialization(VALUED,VALUE) \
309 template<class This, class Result, class Arg> \
310 struct evaluate_switch <This, Result, Arg, VALUED> { \
311 typedef typename scalar_traits<Arg>::type T; \
312 typedef typename float_traits<Arg>::type float_type; \
316 const geo_basic<float_type,memory_type>& omega_K, \
317 const geo_element& K, \
318 Eigen::Matrix<Result,Eigen::Dynamic,1>& value) const \
319 { obj.template evaluate_call<Result, VALUE> (omega_K, K, value); } \
322 void evaluate_on_side ( \
324 const geo_basic<float_type,M>& omega_K, \
325 const geo_element& K, \
326 const side_information_type& sid, \
327 Eigen::Matrix<Result,Eigen::Dynamic,1>& value) const \
328 { obj.template evaluate_call<Result, VALUE> (omega_K, K, sid, value); } \
336 #undef _RHEOLEF_evaluate_switch_specialization
341 template<
class Result>
344 const geo_basic<float_type,memory_type>& omega_K,
345 const geo_element& K,
346 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
348 typedef field_expr_v2_nonlinear_node_unary<UnaryFunction, Expr> This;
349 typedef typename details::generic_unary_traits<UnaryFunction>::template hint<typename Expr::value_type,Result>::argument_type
351 evaluate_switch <This, Result, A1> helper;
352 helper.evaluate (*
this, omega_K, K,
value);
357 template<
class Result>
360 const geo_basic<float_type,memory_type>& omega_K,
361 const geo_element& K,
362 const side_information_type& sid,
363 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
365 typedef field_expr_v2_nonlinear_node_unary<UnaryFunction, Expr> This;
366 typedef typename details::generic_unary_traits<UnaryFunction>::template hint<typename Expr::value_type,Result>::argument_type
368 evaluate_switch <This, Result, A1> helper;
369 helper.evaluate_on_side (*
this, omega_K, K, sid,
value);
372 template<
class Result>
374 typedef typename details::generic_unary_traits<UnaryFunction>::template hint<typename Expr::value_type,Result>::argument_type
376 if (! is_undeterminated<A1>::value)
return _expr.template valued_check<A1>();
386 Eigen::Matrix<scalar_type,Eigen::Dynamic,1>
389 Eigen::Matrix<point_basic<scalar_type>,Eigen::Dynamic,1>
392 Eigen::Matrix<tensor_basic<scalar_type>,Eigen::Dynamic,1>
395 Eigen::Matrix<tensor3_basic<scalar_type>,Eigen::Dynamic,1>
398 Eigen::Matrix<tensor4_basic<scalar_type>,Eigen::Dynamic,1>
402 template<
class UnaryFunction,
class Expr>
404 const UnaryFunction&
f,
419 field_expr_v2_nonlinear_node_unary<F,Expr>::is_affine_homogeneous::value>
::type>: std::true_type {};
431 #define _RHEOLEF_make_field_expr_v2_nonlinear_unary_operator(FUNCTION,FUNCTOR) \
432 template<class Expr> \
436 details::is_field_expr_v2_nonlinear_arg<Expr>::value \
437 && ! details::is_field_expr_v2_constant <Expr>::value \
438 && ! details::has_field_rdof_interface <Expr>::value \
439 ,details::field_expr_v2_nonlinear_node_unary< \
441 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr>::type \
444 FUNCTION (const Expr& expr) \
446 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr>::type wrap_t; \
447 return details::field_expr_v2_nonlinear_node_unary <FUNCTOR,wrap_t> (FUNCTOR(), wrap_t(expr)); \
452 #undef _RHEOLEF_make_field_expr_v2_nonlinear_unary_operator
457 #define _RHEOLEF_make_field_expr_v2_nonlinear_unary_operator(FUNCTION,FUNCTOR) \
458 template<class Expr> \
462 ( details::is_field_expr_v2_nonlinear_arg<Expr>::value \
463 || details::is_field<Expr>::value) \
464 && ! details::is_field_expr_v2_constant <Expr>::value \
465 ,details::field_expr_v2_nonlinear_node_unary< \
467 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr>::type \
470 FUNCTION (const Expr& expr) \
472 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr>::type wrap_t; \
473 return details::field_expr_v2_nonlinear_node_unary <FUNCTOR,wrap_t> (FUNCTOR(), wrap_t(expr)); \
475 #define _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(FUNCTION) \
476 _RHEOLEF_make_field_expr_v2_nonlinear_unary_operator(FUNCTION, details::FUNCTION##_)
504 #undef _RHEOLEF_make_field_expr_v2_nonlinear_unary_function
505 #undef _RHEOLEF_make_field_expr_v2_nonlinear_unary_operator
511 template<
class Function,
class Expr>
534 template<
class BinaryFunction,
class Expr1,
class Expr2>
540 using result_type =
typename details::generic_binary_traits<BinaryFunction>::template result_hint<typename Expr1::result_type,typename Expr2::result_type>::type;
566 std::is_same<BinaryFunction,details::plus>
567 ,std::is_same<BinaryFunction,details::minus>
569 ,is_field_expr_affine_homogeneous<Expr1>
570 ,is_field_expr_affine_homogeneous<Expr2>
574 std::is_same<BinaryFunction,details::multiplies>
575 ,std::is_same<BinaryFunction,details::divides>
577 ,is_field_expr_affine_homogeneous<Expr1>
578 ,is_field_expr_v2_constant <Expr2>
581 std::is_same<BinaryFunction,details::multiplies>
582 ,is_field_expr_v2_constant <Expr1>
583 ,is_field_expr_affine_homogeneous<Expr2>
588 return is_affine_homogeneous::value
589 &&
_expr1.have_homogeneous_space (Vh)
590 &&
_expr2.have_homogeneous_space (Vh2)
591 && Vh.name() == Vh2.name();
597 typename Expr1::scalar_type,
598 typename Expr2::scalar_type>
::type;
603 :
_f(
f), _iter1 (iter1), _iter2 (iter2) {}
629 const integrate_option& iopt)
631 _expr1.initialize (pops, iopt);
632 _expr2.initialize (pops, iopt);
637 const integrate_option& iopt)
639 _expr1.initialize (Xh, pops, iopt);
640 _expr2.initialize (Xh, pops, iopt);
645 template<
class Result,
class Arg1,
class Arg2,
class M>
649 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
651 Eigen::Matrix<Arg1,Eigen::Dynamic,1> value1;
_expr1.evaluate (omega_K, K, value1);
652 Eigen::Matrix<Arg2,Eigen::Dynamic,1> value2;
_expr2.evaluate (omega_K, K, value2);
653 value.resize (value1.size());
655 for (
size_t i = 0, ni =
value.rows(); i < ni; ++i) {
656 value[i] =
_f (value1[i], value2[i]);
659 template<
class Result,
class Arg1,
class Arg2,
class M>
664 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
666 Eigen::Matrix<Arg1,Eigen::Dynamic,1> value1;
_expr1.evaluate_on_side (omega_K, K, sid, value1);
667 Eigen::Matrix<Arg2,Eigen::Dynamic,1> value2;
_expr2.evaluate_on_side (omega_K, K, sid, value2);
668 value.resize (value1.size());
669 for (
size_t i = 0, ni =
value.rows(); i < ni; ++i) {
670 value[i] =
_f (value1[i], value2[i]);
673 template<
class This,
class Result,
class ReturnType,
class Arg1,
class Arg2>
674 struct evaluate_internal {
678 const geo_basic<float_type,M>& omega_K,
679 const geo_element& K,
680 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
683 << pretty_typename_macro(ReturnType) <<
": "
684 << pretty_typename_macro(Result) <<
" was expected for function "
686 << pretty_typename_macro(Arg1) <<
","
687 << pretty_typename_macro(Arg2) <<
")");
692 const geo_basic<float_type,M>& omega_K,
693 const geo_element& K,
694 const side_information_type& sid,
695 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
698 << pretty_typename_macro(ReturnType) <<
": "
699 << pretty_typename_macro(Result) <<
" was expected for function "
701 << pretty_typename_macro(Arg1) <<
","
702 << pretty_typename_macro(Arg2) <<
")");
705 template<
class This,
class Result,
class Arg1,
class Arg2>
706 struct evaluate_internal<This,Result,Result,Arg1,Arg2> {
712 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
713 { obj.template evaluate_internal2<Result,Arg1,Arg2,M> (omega_K, K,
value); }
721 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
722 { obj.template evaluate_internal2 <Result,Arg1,Arg2,M> (omega_K, K, sid,
value);
725 template<
class Result,
class Arg1,
class Arg2,
class M>
729 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
731 typedef typename details::generic_binary_traits<BinaryFunction>::template result_hint<Arg1,Arg2>::type ReturnType;
732 typedef field_expr_v2_nonlinear_node_binary<BinaryFunction, Expr1, Expr2> This;
733 evaluate_internal<This,Result,ReturnType,Arg1,Arg2> eval_int;
734 eval_int (*
this, omega_K, K,
value);
736 template<
class Result,
class Arg1,
class Arg2,
class M>
741 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
743 typedef typename details::generic_binary_traits<BinaryFunction>::template result_hint<Arg1,Arg2>::type ReturnType;
744 typedef field_expr_v2_nonlinear_node_binary<BinaryFunction, Expr1, Expr2> This;
745 evaluate_internal<This,Result,ReturnType,Arg1,Arg2> eval_int;
746 eval_int (*
this, omega_K, K, sid,
value);
749 template<
class This,
class Result,
758 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
759 { obj.template evaluate_call<Result, Arg1, Arg2> (omega_K, K,
value); }
767 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
768 { obj.template evaluate_call<Result, Arg1, Arg2> (omega_K, K, sid,
value); }
771 template<
class This,
class Result,
782 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
788 switch (arg1_valued_tag) {
790 switch (arg2_valued_tag) {
792 return obj.template evaluate_call<Result, T1, T2> (omega_K, K,
value);
break;
794 return obj.template evaluate_call<Result, T1, point_basic<T2> > (omega_K, K,
value);
break;
797 return obj.template evaluate_call<Result, T1, tensor_basic<T2> > (omega_K, K,
value);
break;
799 return obj.template evaluate_call<Result, T1, tensor3_basic<T2> >(omega_K, K,
value);
break;
800 default:
error_macro (
"unexpected second argument valued tag="<<arg2_valued_tag);
805 switch (arg2_valued_tag) {
807 return obj.template evaluate_call<Result, point_basic<T1>, T2> (omega_K, K,
value);
break;
809 return obj.template evaluate_call<Result, point_basic<T1>,
point_basic<T2> > (omega_K, K,
value);
break;
812 return obj.template evaluate_call<Result, point_basic<T1>,
tensor_basic<T2> > (omega_K, K,
value);
break;
815 default:
error_macro (
"unexpected second argument valued tag="<<arg2_valued_tag);
821 switch (arg2_valued_tag) {
823 return obj.template evaluate_call<Result, tensor_basic<T1>, T2> (omega_K, K,
value);
break;
825 return obj.template evaluate_call<Result, tensor_basic<T1>,
point_basic<T2> > (omega_K, K,
value);
break;
828 return obj.template evaluate_call<Result, tensor_basic<T1>,
tensor_basic<T2> > (omega_K, K,
value);
break;
830 return obj.template evaluate_call<Result, tensor_basic<T1>,
tensor3_basic<T2> >(omega_K, K,
value);
break;
831 default:
error_macro (
"unexpected second argument valued tag="<<arg2_valued_tag);
836 switch (arg2_valued_tag) {
838 return obj.template evaluate_call<Result, tensor3_basic<T1>, T2> (omega_K, K,
value);
break;
840 return obj.template evaluate_call<Result, tensor3_basic<T1>,
point_basic<T2> > (omega_K, K,
value);
break;
843 return obj.template evaluate_call<Result, tensor3_basic<T1>,
tensor_basic<T2> > (omega_K, K,
value);
break;
845 return obj.template evaluate_call<Result, tensor3_basic<T1>,
tensor3_basic<T2> >(omega_K, K,
value);
break;
846 default:
error_macro (
"unexpected second argument valued tag="<<arg2_valued_tag);
850 default:
error_macro (
"unexpected first argument valued tag="<<arg1_valued_tag);
855 template<
class This,
class Result,
866 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
870 switch (arg2_valued_tag) {
872 return obj.template evaluate_call<Result, Arg1, T2> (omega_K, K,
value);
break;
874 return obj.template evaluate_call<Result, Arg1, point_basic<T2> > (omega_K, K,
value);
break;
877 return obj.template evaluate_call<Result, Arg1, tensor_basic<T2> > (omega_K, K,
value);
break;
879 return obj.template evaluate_call<Result, Arg1, tensor3_basic<T2> > (omega_K, K,
value);
break;
880 default:
error_macro (
"unexpected second argument valued tag="<<arg2_valued_tag);
885 template<
class This,
class Result,
896 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
900 switch (arg1_valued_tag) {
902 return obj.template evaluate_call<Result, T1, Arg2> (omega_K, K,
value);
break;
904 return obj.template evaluate_call<Result, point_basic<T1>, Arg2> (omega_K, K,
value);
break;
907 return obj.template evaluate_call<Result, tensor_basic<T1>, Arg2> (omega_K, K,
value);
break;
909 return obj.template evaluate_call<Result, tensor3_basic<T1>, Arg2>(omega_K, K,
value);
break;
910 default:
error_macro (
"unexpected first argument valued tag="<<arg1_valued_tag);
914 template<
class Result,
class M>
918 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
920 typedef typename details::generic_binary_traits<BinaryFunction>::template hint<
921 typename Expr1::value_type
922 ,
typename Expr2::value_type
923 ,Result>::first_argument_type A1;
924 typedef typename details::generic_binary_traits<BinaryFunction>::template hint<
925 typename Expr1::value_type
926 ,
typename Expr2::value_type
927 ,Result>::second_argument_type A2;
930 typedef field_expr_v2_nonlinear_node_binary<BinaryFunction, Expr1, Expr2> This;
932 eval (*
this, omega_K, K,
value);
934 template<
class Result,
class M>
940 Eigen::Matrix<Result,Eigen::Dynamic,1>&
value)
const
942 typedef typename details::generic_binary_traits<BinaryFunction>::template hint<
943 typename Expr1::value_type
944 ,
typename Expr2::value_type
945 ,Result>::first_argument_type A1;
946 typedef typename details::generic_binary_traits<BinaryFunction>::template hint<
947 typename Expr1::value_type
948 ,
typename Expr2::value_type
949 ,Result>::second_argument_type A2;
952 typedef field_expr_v2_nonlinear_node_binary<BinaryFunction, Expr1, Expr2> This;
954 eval (*
this, omega_K, K, sid,
value);
956 template<
class Result>
958 typedef typename details::generic_binary_traits<BinaryFunction>::template hint<
959 typename Expr1::value_type
960 ,
typename Expr2::value_type
961 ,Result>::first_argument_type A1;
962 typedef typename details::generic_binary_traits<BinaryFunction>::template hint<
963 typename Expr1::value_type
964 ,
typename Expr2::value_type
965 ,Result>::second_argument_type A2;
978 template<
class BinaryFunction,
class Expr1,
class Expr2>
992 field_expr_v2_nonlinear_node_binary<F,Expr1,Expr2>::is_affine_homogeneous::value>::type>: std::true_type {};
1044 #define _RHEOLEF_make_field_expr_v2_nonlinear_binary(FUNCTION,FUNCTOR) \
1045 template<class Expr1, class Expr2> \
1049 details::is_field_expr_v2_nonlinear_arg<Expr1>::value \
1050 && details::is_field_expr_v2_nonlinear_arg<Expr2>::value \
1051 && ! details::is_field_expr_v2_constant <Expr1>::value \
1052 && ! details::is_field_expr_v2_constant <Expr2>::value \
1053 ,details::field_expr_v2_nonlinear_node_binary< \
1055 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type \
1056 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type \
1059 FUNCTION (const Expr1& expr1, const Expr2& expr2) \
1061 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type wrap1_t; \
1062 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type wrap2_t; \
1063 return details::field_expr_v2_nonlinear_node_binary <FUNCTOR,wrap1_t,wrap2_t> \
1064 (FUNCTOR(), wrap1_t(expr1), wrap2_t(expr2)); \
1066 template<class Expr1, class Expr2> \
1070 details::is_field_expr_v2_constant <Expr1>::value \
1071 && details::is_field_expr_v2_nonlinear_arg<Expr2>::value \
1072 && ! details::is_field_expr_v2_constant <Expr2>::value \
1073 && !(details::has_field_rdof_interface <Expr2>::value \
1074 && details::is_rheolef_arithmetic <Expr1>::value) \
1075 ,details::field_expr_v2_nonlinear_node_unary< \
1076 details::binder_first< \
1078 ,typename details::field_promote_first_argument< \
1080 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type::value_type \
1083 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type \
1086 FUNCTION (const Expr1& expr1, const Expr2& expr2) \
1088 typedef typename details::field_promote_first_argument< \
1090 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type::value_type \
1093 typedef details::binder_first<FUNCTOR,value_type> fun_t; \
1094 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type wrap2_t; \
1095 return details::field_expr_v2_nonlinear_node_unary<fun_t,wrap2_t>(fun_t(FUNCTOR(), expr1), wrap2_t(expr2)); \
1097 template<class Expr1, class Expr2> \
1101 details::is_field_expr_v2_constant <Expr2>::value \
1102 && details::is_field_expr_v2_nonlinear_arg<Expr1>::value \
1103 && ! details::is_field_expr_v2_constant <Expr1>::value \
1104 && !(details::has_field_rdof_interface <Expr1>::value \
1105 && details::is_rheolef_arithmetic <Expr2>::value) \
1106 ,details::field_expr_v2_nonlinear_node_unary< \
1107 details::binder_second< \
1109 ,typename details::field_promote_second_argument< \
1110 typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type::value_type \
1114 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type \
1117 FUNCTION (const Expr1& expr1, const Expr2& expr2) \
1119 typedef typename details::field_promote_second_argument< \
1120 typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type::value_type \
1124 typedef details::binder_second<FUNCTOR,value_type> fun_t; \
1125 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type wrap1_t; \
1126 return details::field_expr_v2_nonlinear_node_unary<fun_t,wrap1_t>(fun_t(FUNCTOR(), expr2), wrap1_t(expr1)); \
1131 #undef _RHEOLEF_make_field_expr_v2_nonlinear_binary
1136 #define _RHEOLEF_make_field_expr_v2_nonlinear_binary(FUNCTION,FUNCTOR) \
1137 template<class Expr1, class Expr2> \
1141 details::is_field_expr_v2_nonlinear_arg<Expr1>::value \
1142 && details::is_field_expr_v2_nonlinear_arg<Expr2>::value \
1143 && ! details::is_field_expr_v2_constant <Expr1>::value \
1144 && ! details::is_field_expr_v2_constant <Expr2>::value \
1145 ,details::field_expr_v2_nonlinear_node_binary< \
1147 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type \
1148 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type \
1151 FUNCTION (const Expr1& expr1, const Expr2& expr2) \
1153 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type wrap1_t; \
1154 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type wrap2_t; \
1155 return details::field_expr_v2_nonlinear_node_binary <FUNCTOR,wrap1_t,wrap2_t> \
1156 (FUNCTOR(), wrap1_t(expr1), wrap2_t(expr2)); \
1158 template<class Expr1, class Expr2> \
1162 details::is_field_expr_v2_constant <Expr1>::value \
1163 && details::is_field_expr_v2_nonlinear_arg<Expr2>::value \
1164 && ! details::is_field_expr_v2_constant <Expr2>::value \
1165 && !(details::has_field_rdof_interface <Expr2>::value \
1166 && details::is_rheolef_arithmetic <Expr1>::value) \
1167 ,details::field_expr_v2_nonlinear_node_unary< \
1168 details::binder_first< \
1170 ,typename details::field_promote_first_argument< \
1172 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type::value_type \
1175 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type \
1178 FUNCTION (const Expr1& expr1, const Expr2& expr2) \
1180 typedef typename details::field_promote_first_argument< \
1182 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type::value_type \
1185 typedef details::binder_first<FUNCTOR,value_type> fun_t; \
1186 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type wrap2_t; \
1187 return details::field_expr_v2_nonlinear_node_unary<fun_t,wrap2_t>(fun_t(FUNCTOR(), expr1), wrap2_t(expr2)); \
1189 template<class Expr1, class Expr2> \
1193 details::is_field_expr_v2_constant <Expr2>::value \
1194 && details::is_field_expr_v2_nonlinear_arg<Expr1>::value \
1195 && ! details::is_field_expr_v2_constant <Expr1>::value \
1196 && !(details::has_field_rdof_interface <Expr1>::value \
1197 && details::is_rheolef_arithmetic <Expr2>::value) \
1198 ,details::field_expr_v2_nonlinear_node_unary< \
1199 details::binder_second< \
1201 ,typename details::field_promote_second_argument< \
1202 typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type::value_type \
1206 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type \
1209 FUNCTION (const Expr1& expr1, const Expr2& expr2) \
1211 typedef typename details::field_promote_second_argument< \
1212 typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type::value_type \
1216 typedef details::binder_second<FUNCTOR,value_type> fun_t; \
1217 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type wrap1_t; \
1218 return details::field_expr_v2_nonlinear_node_unary<fun_t,wrap1_t>(fun_t(FUNCTOR(), expr2), wrap1_t(expr1)); \
1221 #undef _RHEOLEF_make_field_expr_v2_nonlinear_binary
1226 #define _RHEOLEF_make_field_expr_v2_nonlinear_binary(FUNCTION,FUNCTOR) \
1227 template<class Expr1, class Expr2> \
1231 details::is_field_expr_v2_nonlinear_arg<Expr1>::value \
1232 && details::is_field_expr_v2_nonlinear_arg<Expr2>::value \
1233 && ! details::is_field_expr_v2_constant <Expr1>::value \
1234 && ! details::is_field_expr_v2_constant <Expr2>::value \
1235 ,details::field_expr_v2_nonlinear_node_binary< \
1237 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type \
1238 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type \
1241 FUNCTION (const Expr1& expr1, const Expr2& expr2) \
1243 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type wrap1_t; \
1244 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type wrap2_t; \
1245 return details::field_expr_v2_nonlinear_node_binary <FUNCTOR,wrap1_t,wrap2_t> \
1246 (FUNCTOR(), wrap1_t(expr1), wrap2_t(expr2)); \
1248 template<class Expr1, class Expr2> \
1252 details::is_field_expr_v2_constant <Expr1>::value \
1253 && details::is_field_expr_v2_nonlinear_arg<Expr2>::value \
1254 && ! details::is_field_expr_v2_constant <Expr2>::value \
1255 ,details::field_expr_v2_nonlinear_node_unary< \
1256 details::binder_first< \
1258 ,typename details::field_promote_first_argument< \
1260 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type::value_type \
1263 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type \
1266 FUNCTION (const Expr1& expr1, const Expr2& expr2) \
1268 typedef typename details::field_promote_first_argument< \
1270 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type::value_type \
1273 typedef details::binder_first<FUNCTOR,value_type> fun_t; \
1274 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type wrap2_t; \
1275 return details::field_expr_v2_nonlinear_node_unary<fun_t,wrap2_t>(fun_t(FUNCTOR(), expr1), wrap2_t(expr2)); \
1277 template<class Expr1, class Expr2> \
1281 details::is_field_expr_v2_constant <Expr2>::value \
1282 && details::is_field_expr_v2_nonlinear_arg<Expr1>::value \
1283 && ! details::is_field_expr_v2_constant <Expr1>::value \
1284 && !(details::has_field_rdof_interface <Expr1>::value \
1285 && details::is_rheolef_arithmetic <Expr2>::value) \
1286 ,details::field_expr_v2_nonlinear_node_unary< \
1287 details::binder_second< \
1289 ,typename details::field_promote_second_argument< \
1290 typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type::value_type \
1294 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type \
1297 FUNCTION (const Expr1& expr1, const Expr2& expr2) \
1299 typedef typename details::field_promote_second_argument< \
1300 typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type::value_type \
1304 typedef details::binder_second<FUNCTOR,value_type> fun_t; \
1305 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type wrap1_t; \
1306 return details::field_expr_v2_nonlinear_node_unary<fun_t,wrap1_t>(fun_t(FUNCTOR(), expr2), wrap1_t(expr1)); \
1309 #undef _RHEOLEF_make_field_expr_v2_nonlinear_binary
1314 #define _RHEOLEF_make_field_expr_v2_nonlinear_binary(FUNCTION,FUNCTOR) \
1315 template<class Expr1, class Expr2> \
1319 details::is_field_expr_v2_nonlinear_arg<Expr1>::value \
1320 && details::is_field_expr_v2_nonlinear_arg<Expr2>::value \
1321 && ! details::is_field_expr_v2_constant <Expr1>::value \
1322 && ! details::is_field_expr_v2_constant <Expr2>::value \
1323 ,details::field_expr_v2_nonlinear_node_binary< \
1325 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type \
1326 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type \
1329 FUNCTION (const Expr1& expr1, const Expr2& expr2) \
1331 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type wrap1_t; \
1332 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type wrap2_t; \
1333 return details::field_expr_v2_nonlinear_node_binary <FUNCTOR,wrap1_t,wrap2_t> \
1334 (FUNCTOR(), wrap1_t(expr1), wrap2_t(expr2)); \
1336 template<class Expr1, class Expr2> \
1340 details::is_field_expr_v2_constant <Expr1>::value \
1341 && details::is_field_expr_v2_nonlinear_arg<Expr2>::value \
1342 && ! details::is_field_expr_v2_constant <Expr2>::value \
1343 ,details::field_expr_v2_nonlinear_node_unary< \
1344 details::binder_first< \
1346 ,typename details::field_promote_first_argument< \
1348 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type::value_type \
1351 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type \
1354 FUNCTION (const Expr1& expr1, const Expr2& expr2) \
1356 typedef typename details::field_promote_first_argument< \
1358 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type::value_type \
1361 typedef details::binder_first<FUNCTOR,value_type> fun_t; \
1362 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type wrap2_t; \
1363 return details::field_expr_v2_nonlinear_node_unary<fun_t,wrap2_t>(fun_t(FUNCTOR(), expr1), wrap2_t(expr2)); \
1365 template<class Expr1, class Expr2> \
1369 details::is_field_expr_v2_constant <Expr2>::value \
1370 && details::is_field_expr_v2_nonlinear_arg<Expr1>::value \
1371 && ! details::is_field_expr_v2_constant <Expr1>::value \
1372 ,details::field_expr_v2_nonlinear_node_unary< \
1373 details::binder_second< \
1375 ,typename details::field_promote_second_argument< \
1376 typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type::value_type \
1380 ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type \
1383 FUNCTION (const Expr1& expr1, const Expr2& expr2) \
1385 typedef typename details::field_promote_second_argument< \
1386 typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type::value_type \
1390 typedef details::binder_second<FUNCTOR,value_type> fun_t; \
1391 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type wrap1_t; \
1392 return details::field_expr_v2_nonlinear_node_unary<fun_t,wrap1_t>(fun_t(FUNCTOR(), expr2), wrap1_t(expr1)); \
1395 #define _RHEOLEF_make_field_expr_v2_nonlinear_binary_function(FUNCTION) \
1396 _RHEOLEF_make_field_expr_v2_nonlinear_binary (FUNCTION, details::FUNCTION##_) \
1407 #undef _RHEOLEF_make_field_expr_v2_nonlinear_binary_function
1408 #undef _RHEOLEF_make_field_expr_v2_nonlinear_binary
1418 template<
class Function,
class Expr1,
class Expr2>
1432 compose (
const Function&
f,
const Expr1& expr1,
const Expr2& expr2)
1434 typedef typename details::function_traits<Function>::functor_type
fun_wrap_t;
1435 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type
expr1_wrap_t;
1436 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type
expr2_wrap_t;
1442 template <
class Function,
class Expr1,
class Expr2>
1450 details::binder_first<
1454 ,
typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type::value_type
1460 compose (
const Function&
f,
const Expr1& expr1,
const Expr2& expr2)
1464 ,
typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type::value_type
1467 typedef details::binder_first<wrap_fun_t,value_type> binded_fun_t;
1470 <binded_fun_t, wrap2_t>
1471 (binded_fun_t(wrap_fun_t(
f), expr1), wrap2_t(expr2));
1474 template <
class Function,
class Expr1,
class Expr2>
1478 details::is_field_expr_v2_nonlinear_arg<Expr1>::value
1479 && ! details::is_field_expr_v2_constant <Expr1>::value
1480 && details::is_field_expr_v2_constant <Expr2>::value
1481 ,details::field_expr_v2_nonlinear_node_unary<
1482 details::binder_second<
1483 typename details::function_traits<Function>::functor_type
1485 typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type::value_type
1489 ,
typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type
1492 compose (
const Function&
f,
const Expr1& expr1,
const Expr2& expr2)
1494 typedef typename promote<
1495 typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type::value_type
1498 typedef typename details::function_traits<Function>::functor_type wrap_fun_t;
1499 typedef details::binder_second<wrap_fun_t,value_type> binded_fun_t;
1500 typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type wrap1_t;
1501 return details::field_expr_v2_nonlinear_node_unary
1502 <binded_fun_t, wrap1_t>
1503 (binded_fun_t(wrap_fun_t(
f), expr2), wrap1_t(expr1));
field::size_type size_type
std::array< Eigen::Matrix< tensor_basic< scalar_type >, Eigen::Dynamic, 1 >,reference_element::max_variant > _tensor_val
band_basic< float_type, memory_type > band_type
typename scalar_traits< value_type >::type scalar_type
geo_element::size_type size_type
typename details::generic_unary_traits< UnaryFunction >::template result_hint< typename Expr::result_type >::type result_type
const Expr & expr() const
std::array< Eigen::Matrix< tensor3_basic< scalar_type >, Eigen::Dynamic, 1 >,reference_element::max_variant > _tensor3_val
void initialize(const piola_on_pointset< float_type > &pops, const integrate_option &iopt)
std::array< Eigen::Matrix< tensor4_basic< scalar_type >, Eigen::Dynamic, 1 >,reference_element::max_variant > _tensor4_val
std::array< Eigen::Matrix< scalar_type, Eigen::Dynamic, 1 >,reference_element::max_variant > _scalar_val
geo_basic< float_type, memory_type > geo_type
const_iterator begin_dof() const
typename Expr::memory_type memory_type
static const space_constant::valued_type valued_hint
std::array< Eigen::Matrix< point_basic< scalar_type >, Eigen::Dynamic, 1 >,reference_element::max_variant > _vector_val
void evaluate_call(const geo_basic< float_type, M > &omega_K, const geo_element &K, Eigen::Matrix< Result, Eigen::Dynamic, 1 > &value) const
void evaluate_call(const geo_basic< float_type, M > &omega_K, const geo_element &K, const side_information_type &sid, Eigen::Matrix< Result, Eigen::Dynamic, 1 > &value) const
bool have_homogeneous_space(space_basic< scalar_type, memory_type > &Vh) const
typename float_traits< scalar_type >::type float_type
_RHEOLEF_evaluate_switch_specialization(space_constant::scalar, T) _RHEOLEF_evaluate_switch_specialization(space_constant Expr _expr
void initialize(const space_basic< float_type, memory_type > &Xh, const piola_on_pointset< float_type > &pops, const integrate_option &iopt)
field_expr_v2_nonlinear_node_unary(const UnaryFunction &f, const Expr &expr)
space_basic< float_type, memory_type > space_type
space_constant::valued_type valued_tag() const
see the geo_element page for the full documentation
reference_element::size_type size_type
see the integrate_option page for the full documentation
static const variant_type max_variant
tensor_basic< T > tensor3_basic< T >
typename scalar_traits< value_type >::type scalar_type
typename float_traits< value_type >::type float_type
typename Expr1::memory_type memory_type
typename details::generic_binary_traits< BinaryFunction >::template result_hint< typename Expr1::result_type, typename Expr2::result_type >::type result_type
static const space_constant::valued_type valued_hint
rheolef::std BinaryFunction
or_type< and_type< or_type< std::is_same< BinaryFunction, details::plus >,std::is_same< BinaryFunction, details::minus > >,is_field_expr_affine_homogeneous< Expr1 >,is_field_expr_affine_homogeneous< Expr2 > >,and_type< or_type< std::is_same< BinaryFunction, details::multiplies >,std::is_same< BinaryFunction, details::divides > >,is_field_expr_affine_homogeneous< Expr1 >,is_field_expr_v2_constant< Expr2 > >,and_type< std::is_same< BinaryFunction, details::multiplies >,is_field_expr_v2_constant< Expr1 >,is_field_expr_affine_homogeneous< Expr2 > > > is_affine_homogeneous
rheolef::std Expr1
dot(x,y): see the expression page for the full documentation
#define error_macro(message)
#define fatal_macro(message)
void get_geo(istream &in, my_geo &omega)
details::field_expr_v2_nonlinear_terminal_wrapper_traits< Expr1 >::type expr1_wrap_t
details::function_traits< Function >::functor_type fun_wrap_t
#define _RHEOLEF_make_field_expr_v2_nonlinear_binary_function(FUNCTION)
#define _RHEOLEF_make_field_expr_v2_nonlinear_binary(FUNCTION, FUNCTOR)
#define _RHEOLEF_evaluate_switch_specialization(VALUED, VALUE)
details::field_expr_v2_nonlinear_terminal_wrapper_traits< Expr2 >::type expr2_wrap_t
pair_with_linear_algebra< T1, T2 > operator*(const T0 &k, const pair_with_linear_algebra< T1, T2 > &x)
rheolef::details::is_vec dot
This file is part of Rheolef.
void initialize(const piola_on_pointset< float_type > &pops, const integrate_option &iopt)
field_expr_v2_nonlinear_node_binary(const BinaryFunction &f, const Expr1 &expr1, const Expr2 &expr2)
bool have_homogeneous_space(space_basic< scalar_type, memory_type > &Vh) const
t operator()(const t &a, const t &b)
T dddot(const tensor3_basic< T > &a, const tensor3_basic< T > &b)
csr< T, sequential > trans(const csr< T, sequential > &a)
trans(a): see the form page for the full documentation
T norm(const vec< T, M > &x)
norm(x): see the expression page for the full documentation
bool valued_check() const
void evaluate_on_side(const geo_basic< float_type, M > &omega_K, const geo_element &K, const side_information_type &sid, Eigen::Matrix< Result, Eigen::Dynamic, 1 > &value) const
void evaluate(const geo_basic< float_type, M > &omega_K, const geo_element &K, Eigen::Matrix< Result, Eigen::Dynamic, 1 > &value) const
T norm2(const vec< T, M > &x)
norm2(x): see the expression page for the full documentation
U tr(const tensor_basic< U > &a, size_t d=3)
T ddot(const tensor_basic< T > &a, const tensor_basic< T > &b)
ddot(x,y): see the expression page for the full documentation
void evaluate_call(const geo_basic< float_type, M > &omega_K, const geo_element &K, Eigen::Matrix< Result, Eigen::Dynamic, 1 > &value) const
void evaluate_internal2(const geo_basic< float_type, M > &omega_K, const geo_element &K, Eigen::Matrix< Result, Eigen::Dynamic, 1 > &value) const
space_mult_list< T, M > pow(const space_basic< T, M > &X, size_t n)
details::field_expr_v2_nonlinear_node_nary< typename details::function_traits< Function >::functor_type,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits< Exprs >::type... > ::type compose(const Function &f, const Exprs &... exprs)
see the compose page for the full documentation
rheolef::std enable_if ::type compose const Function f, const Expr1 expr1, const Expr2 expr2 compose(const Function &f, const Expr1 &expr1, const Expr2 &expr2)
const_iterator begin_dof() const
tensor_basic< T > exp(const tensor_basic< T > &a, size_t d)
_RHEOLEF_make_field_expr_v2_nonlinear_unary_operator(operator+, details::unary_plus) _RHEOLEF_make_field_expr_v2_nonlinear_unary_operator(operator-
_RHEOLEF_make_field_expr_v2_nonlinear_unary_function(cos) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(sin) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(tan) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(acos) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(asin) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(atan) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(cosh) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(sinh) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(tanh) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(exp) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(log) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(log10) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(sqrt) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(abs) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(fabs) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(floor) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(ceil) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(sqr) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(norm) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(norm2) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(tr) _RHEOLEF_make_field_expr_v2_nonlinear_unary_function(trans) template< class Function
space_constant::valued_type valued_tag() const
std::forward_iterator_tag iterator_category
Expr2::const_iterator _iter2
typename promote< typename Expr1::scalar_type, typename Expr2::scalar_type >::type value_type
const_iterator(const BinaryFunction &f, typename Expr1::const_iterator iter1, typename Expr2::const_iterator iter2)
Expr1::const_iterator _iter1
std::ptrdiff_t difference_type
typename Expr::scalar_type value_type
std::forward_iterator_tag iterator_category
Expr::const_iterator _expr_iter
const_iterator(UnaryFunction f, typename Expr::const_iterator expr_iter)
value_type operator*() const
std::ptrdiff_t difference_type
const_iterator & operator++()
void operator()(const self_type &obj, const geo_basic< float_type, M > &omega_K, const geo_element &K, Eigen::Matrix< Result, Eigen::Dynamic, 1 > &value)
void evaluate_on_side(const This &obj, const geo_basic< float_type, M > &omega_K, const geo_element &K, const side_information_type &sid, Eigen::Matrix< Result, Eigen::Dynamic, 1 > &value) const
void evaluate(const This &obj, const geo_basic< float_type, M > &omega_K, const geo_element &K, Eigen::Matrix< Result, Eigen::Dynamic, 1 > &value) const
static space_constant::valued_type valued_tag(space_constant::valued_type, space_constant::valued_type)
static space_constant::valued_type valued_tag(space_constant::valued_type)
static const valued_type value