1 #ifndef _RHEOLEF_FIELD_EXPR_TERMINAL_H
2 #define _RHEOLEF_FIELD_EXPR_TERMINAL_H
41 #include "rheolef/field.h"
42 #include "rheolef/field_component.h"
43 #include "rheolef/field_expr_utilities.h"
44 #include "rheolef/expression.h"
45 #include "rheolef/form.h"
46 #include "rheolef/basis_on_pointset.h"
47 #include "rheolef/test.h"
48 #include "rheolef/characteristic.h"
61 template <
class T>
struct is_field : std::false_type {};
76 is_field_expr_v2_constant<Expr>::value>
::type> : std::true_type {};
78 is_field_convertible<Expr>::value>
::type> : std::true_type {};
87 is_field_expr_v2_constant<Expr>::value>
::type> : std::true_type {};
89 is_field_convertible<Expr>::value>
::type> : std::true_type {};
94 template <
class Expr,
class Sfinae =
void>
103 template<
class T,
class M>
154 template<
class Function>
157 <typename float_traits<typename details::function_traits<Function>::result_type>::type>
197 Eigen::Matrix<result_type,Eigen::Dynamic,1>&
value)
const
202 value.resize (loc_nnod);
203 for (
size_type loc_inod = 0; loc_inod < loc_nnod; ++loc_inod) {
212 Eigen::Matrix<result_type,Eigen::Dynamic,1>&
value)
const
216 template<
class Value>
228 Eigen::Matrix<scalar_type,Eigen::Dynamic,1>
231 Eigen::Matrix<point_basic<scalar_type>,Eigen::Dynamic,1>
234 Eigen::Matrix<tensor_basic<scalar_type>,Eigen::Dynamic,1>
237 Eigen::Matrix<tensor3_basic<scalar_type>,Eigen::Dynamic,1>
240 Eigen::Matrix<tensor4_basic<scalar_type>,Eigen::Dynamic,1>
244 template<
class Function>
256 template<
class Function>
278 template<
class TrueFunction,
279 class Sfinae =
typename std::enable_if<std::is_function<TrueFunction>::value, TrueFunction>
::type>
283 template <
class Constant,
284 class Sfinae =
typename std::enable_if <is_field_expr_v2_constant<Constant>::value, Constant>
::type>
306 Eigen::Matrix<result_type,Eigen::Dynamic,1>&
value)
const
313 Eigen::Matrix<result_type,Eigen::Dynamic,1>&
value)
const
316 template<
class Value>
318 return base::data().template valued_check<Value>(); }
323 typename
std::enable_if<
324 is_field_function<F>::value
326 > : std::true_type {};
329 template <
class Expr>
331 typename
std::enable_if<
332 is_field_function<Expr>::value
339 template <
class Expr>
341 typename
std::enable_if<
342 is_field_expr_v2_constant<Expr>::value
357 fatal_macro (
"special normal() class-function should not be directly evaluated");
400 Eigen::Matrix<result_type,Eigen::Dynamic,1>&
value)
const;
406 Eigen::Matrix<result_type,Eigen::Dynamic,1>&
value)
const;
408 void evaluate_internal(
412 Eigen::Matrix<result_type,Eigen::Dynamic,1>&
value)
const;
414 template<
class Value>
438 details::field_expr_v2_nonlinear_terminal_function <details::normal_pseudo_function<Float> >
441 return normal_basic<Float>();
452 fatal_macro (
"special h_local() class-function should not be directly evaluated");
496 Eigen::Matrix<result_type,Eigen::Dynamic,1>&
value)
const;
502 Eigen::Matrix<result_type,Eigen::Dynamic,1>&
value)
const;
504 template<
class Value>
517 details::field_expr_v2_nonlinear_terminal_function <details::h_local_pseudo_function<T> >
526 details::field_expr_v2_nonlinear_terminal_function <details::h_local_pseudo_function<Float> >
529 return h_local_basic<Float>();
540 fatal_macro (
"special penalty() class-function should not be directly evaluated");
584 Eigen::Matrix<result_type,Eigen::Dynamic,1>&
value)
const;
590 Eigen::Matrix<result_type,Eigen::Dynamic,1>&
value)
const;
592 template<
class Value>
604 void evaluate_internal(
608 Eigen::Matrix<result_type,Eigen::Dynamic,1>&
value)
const;
616 details::field_expr_v2_nonlinear_terminal_function <details::penalty_pseudo_function<T> >
625 details::field_expr_v2_nonlinear_terminal_function <details::penalty_pseudo_function<Float> >
628 return penalty_basic<Float>();
638 template<
class T,
class M, details::differentiate_option::type Diff>
656 template <
class Expr,
657 class Sfinae =
typename std::enable_if<details::is_field_convertible<Expr>::value>
::type>
691 template<
class Value>
695 Eigen::Matrix<Value,Eigen::Dynamic,1>&
value)
const;
697 template<
class Value>
702 Eigen::Matrix<Value,Eigen::Dynamic,1>&
value)
const;
704 template<
class Value>
721 Eigen::Matrix<T,Eigen::Dynamic,1>
724 Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>
727 Eigen::Matrix<tensor_basic<T>,Eigen::Dynamic,1>
730 Eigen::Matrix<tensor3_basic<T>,Eigen::Dynamic,1>
733 Eigen::Matrix<tensor4_basic<T>,Eigen::Dynamic,1>
737 template<
class T,
class M, details::differentiate_option::type Diff>
738 template <
class Expr,
class Sfinae>
743 _u_test(_uh.get_space()),
746 _have_dg_on_sides(false),
748 _piola_on_geo_basis(),
750 _need_vector_piola(false),
762 template<
class T,
class M, details::differentiate_option::type Diff>
763 template<
class Value>
775 "unexpected "<< _uh.valued()
777 <<
"-valued one is expected in expression");
782 base::_fops.template grad_valued_check<Value>();
788 base::_fops.template div_valued_check<Value>();
794 base::_fops.template curl_valued_check<Value>();
800 template<
class T,
class M, details::differentiate_option::type Diff>
819 template <
class Expr,
820 class Sfinae =
typename std::enable_if<details::is_field_convertible<Expr>::value>
::type>
829 return base::data().have_homogeneous_space (Vh); }
853 template<
class Value>
857 Eigen::Matrix<Value,Eigen::Dynamic,1>&
value)
const
860 template<
class Value>
865 Eigen::Matrix<Value,Eigen::Dynamic,1>&
value)
const
868 template<
class Value>
870 return base::data().template valued_check<Value>();
874 template<
class T,
class M, details::differentiate_option::type Diff>
881 template<
class T,
class M>
885 template <
class Expr>
887 typename
std::enable_if<
888 is_field_convertible<Expr>::value
892 typedef typename Expr::scalar_type
T;
893 typedef typename Expr::memory_type
M;
906 typename Expr::scalar_type
907 ,
typename Expr::memory_type
913 typedef typename Expr::scalar_type
T;
914 typedef typename Expr::memory_type
M;
922 details::is_field_convertible<Expr>::value
923 ,details::field_expr_v2_nonlinear_terminal_field<
924 typename Expr::scalar_type
925 ,
typename Expr::memory_type
931 typedef typename Expr::scalar_type
T;
932 typedef typename Expr::memory_type
M;
933 static details::differentiate_option gopt;
934 gopt.surfacic =
true;
942 details::is_field_convertible<Expr>::value
943 ,details::field_expr_v2_nonlinear_terminal_field<
944 typename Expr::scalar_type
945 ,
typename Expr::memory_type
951 typedef typename Expr::scalar_type
T;
952 typedef typename Expr::memory_type
M;
953 static details::differentiate_option gopt;
962 details::is_field_convertible<Expr>::value
963 ,details::field_expr_v2_nonlinear_terminal_field<
964 typename Expr::scalar_type
965 ,
typename Expr::memory_type
971 typedef typename Expr::scalar_type
T;
972 typedef typename Expr::memory_type
M;
973 details::differentiate_option gopt;
974 gopt.symmetrized =
true;
982 details::is_field_convertible<Expr>::value
983 ,details::field_expr_v2_nonlinear_terminal_field<
984 typename Expr::scalar_type
985 ,
typename Expr::memory_type
991 typedef typename Expr::scalar_type
T;
992 typedef typename Expr::memory_type
M;
993 details::differentiate_option gopt;
994 gopt.symmetrized =
true;
995 gopt.surfacic =
true;
1003 details::is_field_convertible<Expr>::value
1004 ,details::field_expr_v2_nonlinear_terminal_field<
1005 typename Expr::scalar_type
1006 ,
typename Expr::memory_type
1012 typedef typename Expr::scalar_type
T;
1013 typedef typename Expr::memory_type
M;
1014 details::differentiate_option gopt;
1015 gopt.symmetrized =
true;
1020 template<
class Expr>
1024 details::is_field_convertible<Expr>::value
1025 ,details::field_expr_v2_nonlinear_terminal_field<
1026 typename Expr::scalar_type
1027 ,
typename Expr::memory_type
1033 typedef typename Expr::scalar_type
T;
1034 typedef typename Expr::memory_type
M;
1038 template<
class Expr>
1042 details::is_field_convertible<Expr>::value
1043 ,details::field_expr_v2_nonlinear_terminal_field<
1044 typename Expr::scalar_type
1045 ,
typename Expr::memory_type
1051 typedef typename Expr::scalar_type
T;
1052 typedef typename Expr::memory_type
M;
1053 static details::differentiate_option gopt;
1054 gopt.surfacic =
true;
1058 template<
class Expr>
1062 details::is_field_convertible<Expr>::value
1063 ,details::field_expr_v2_nonlinear_terminal_field<
1064 typename Expr::scalar_type
1065 ,
typename Expr::memory_type
1071 typedef typename Expr::scalar_type
T;
1072 typedef typename Expr::memory_type
M;
1073 static details::differentiate_option gopt;
1078 template<
class Expr>
1082 details::is_field_convertible<Expr>::value
1083 ,details::field_expr_v2_nonlinear_terminal_field<
1084 typename Expr::scalar_type
1085 ,
typename Expr::memory_type
1091 typedef typename Expr::scalar_type
T;
1092 typedef typename Expr::memory_type
M;
1103 template<
class T,
class M>
1117 template <
class Expr,
1118 class Sfinae =
typename std::enable_if<details::is_field_convertible<Expr>::value>
::type>
1139 template<
class Value>
1143 Eigen::Matrix<Value,Eigen::Dynamic,1>&
value)
const;
1145 template<
class Value>
1152 <<
"-valued one is expected in expression");
1161 template<
class T,
class M>
1179 template <
class Expr,
1180 class Sfinae =
typename std::enable_if<details::is_field_convertible<Expr>::value>
::type>
1182 :
base(new_macro(
rep(expr,c0,c1))) {}
1197 {
base::data().initialize (Xh, pops, iopt); }
1199 template<
class Value>
1203 Eigen::Matrix<Value,Eigen::Dynamic,1>&
value)
const
1206 template<
class Value>
1208 {
return base::data().template valued_check<Value>(); }
1214 #define _RHEOLEF_make_field_expr_v2_nonlinear_terminal_field_dg(op,c0,c1) \
1215 template<class Expr> \
1219 details::is_field_convertible<Expr>::value \
1220 ,details::field_expr_v2_nonlinear_terminal_field_dg< \
1221 typename Expr::scalar_type \
1222 ,typename Expr::memory_type \
1225 op (const Expr& expr) \
1227 return details::field_expr_v2_nonlinear_terminal_field_dg \
1228 <typename Expr::scalar_type ,typename Expr::memory_type> \
1236 #undef _RHEOLEF_make_field_expr_v2_nonlinear_terminal_field_dg
1244 template<
class T,
class M>
1276 template<
class Value>
1280 Eigen::Matrix<Value,Eigen::Dynamic,1>&
value)
const;
1282 template<
class Value>
1289 <<
"-valued one is expected in expression");
1294 template<
class Result>
1308 template<
class T,
class M>
1323 template<
class T,
class M>
1326 : _uh (uoX.get_field()),
1327 _X (uoX.get_characteristic()),
1338 template<
class T,
class M>
1340 public smart_pointer<field_expr_v2_nonlinear_terminal_field_o_characteristic_rep<T,M> >
1358 :
base(new_macro(
rep(uoX))) {}
1361 :
base(new_macro(
rep(uh,X))) {}
1376 {
base::data().initialize (Xh, pops, iopt); }
1378 template<
class Value>
1382 Eigen::Matrix<Value,Eigen::Dynamic,1>&
value)
const
1385 template<
class Value>
1387 return base::data().template valued_check<Value>();
1395 template<
class T,
class M>
field_expr_v2_nonlinear_terminal_field_dg_rep(const Expr &expr, const float_type &c0, const float_type &c1)
bool valued_check() const
void evaluate(const geo_basic< float_type, memory_type > &omega_K, const geo_element &K, Eigen::Matrix< Value, Eigen::Dynamic, 1 > &value) const
field_expr_v2_nonlinear_terminal_field< T, M, details::differentiate_option::none > _expr1
void initialize(const piola_on_pointset< float_type > &pops, const integrate_option &iopt) const
static const space_constant::valued_type valued_hint
float_traits< T >::type float_type
undeterminated_basic< T > result_type
geo_element::size_type size_type
field_expr_v2_nonlinear_terminal_field< T, M, details::differentiate_option::none > _expr0
space_constant::valued_type valued_tag() const
bool valued_check() const
rep::result_type result_type
rep::value_type value_type
field_expr_v2_nonlinear_terminal_field_dg(const Expr &expr, const float_type &c0, const float_type &c1)
void evaluate(const geo_basic< float_type, memory_type > &omega_K, const geo_element &K, Eigen::Matrix< Value, Eigen::Dynamic, 1 > &value) const
void initialize(const piola_on_pointset< float_type > &pops, const integrate_option &iopt) const
static const space_constant::valued_type valued_hint
void initialize(const space_basic< float_type, memory_type > &Xh, const piola_on_pointset< float_type > &pops, const integrate_option &iopt) const
rep::float_type float_type
smart_pointer< rep > base
rep::memory_type memory_type
field_expr_v2_nonlinear_terminal_field_dg_rep< T, M > rep
space_constant::valued_type valued_tag() const
rep::scalar_type scalar_type
disarray< point_basic< T >, M > _vector_val
characteristic_basic< T, M > _X
bool valued_check() const
fem_on_pointset< T > _fops
void evaluate(const geo_basic< float_type, memory_type > &omega_K, const geo_element &K, Eigen::Matrix< Value, Eigen::Dynamic, 1 > &value) const
disarray< tensor_basic< T >, M > _tensor_val
void initialize(const piola_on_pointset< float_type > &pops, const integrate_option &iopt) const
static const space_constant::valued_type valued_hint
disarray< tensor3_basic< T >, M > _tensor3_val
field_expr_v2_nonlinear_terminal_field_o_characteristic_rep(const field_o_characteristic< T, M > &uoX)
disarray< T, M > _scalar_val
float_traits< T >::type float_type
undeterminated_basic< T > result_type
geo_element::size_type size_type
space_constant::valued_type valued_tag() const
disarray< tensor4_basic< T >, M > _tensor4_val
bool valued_check() const
rep::result_type result_type
rep::value_type value_type
field_expr_v2_nonlinear_terminal_field_o_characteristic(const field_o_characteristic< T, M > &uoX)
void evaluate(const geo_basic< float_type, memory_type > &omega_K, const geo_element &K, Eigen::Matrix< Value, Eigen::Dynamic, 1 > &value) const
void initialize(const piola_on_pointset< float_type > &pops, const integrate_option &iopt) const
static const space_constant::valued_type valued_hint
void initialize(const space_basic< float_type, memory_type > &Xh, const piola_on_pointset< float_type > &pops, const integrate_option &iopt) const
field_expr_v2_nonlinear_terminal_field_o_characteristic_rep< T, M > rep
rep::float_type float_type
smart_pointer< rep > base
rep::memory_type memory_type
field_expr_v2_nonlinear_terminal_field_o_characteristic(const field_basic< T, M > &uh, const characteristic_basic< T, M > &X)
space_constant::valued_type valued_tag() const
rep::scalar_type scalar_type
reference_element _tilde_L
std::array< Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 >,reference_element::max_variant > _vector_val
geo_element::size_type size_type
bool valued_check() const
typename std::conditional< Diff==details::differentiate_option::divergence,T,undeterminated_basic< T > >::type result_type
std::array< Eigen::Matrix< tensor_basic< T >, Eigen::Dynamic, 1 >,reference_element::max_variant > _tensor_val
differentiate_option _gopt
field_expr_v2_nonlinear_terminal_field_rep(const Expr &expr, const differentiate_option &gopt)
void initialize(const piola_on_pointset< T > &pops, const integrate_option &iopt) const
void evaluate(const geo_basic< float_type, memory_type > &omega_K, const geo_element &K, Eigen::Matrix< Value, Eigen::Dynamic, 1 > &value) const
std::array< Eigen::Matrix< T, Eigen::Dynamic, 1 >,reference_element::max_variant > _scalar_val
const_iterator begin_dof() const
static const space_constant::valued_type valued_hint
std::vector< size_type > _dis_inod_geo
basis_on_pointset< T > _piola_on_geo_basis
bool have_homogeneous_space(space_basic< scalar_type, memory_type > &Vh) const
std::array< Eigen::Matrix< tensor3_basic< T >, Eigen::Dynamic, 1 >,reference_element::max_variant > _tensor3_val
typename field_basic< T, M >::const_iterator const_iterator
std::array< Eigen::Matrix< tensor4_basic< T >, Eigen::Dynamic, 1 >,reference_element::max_variant > _tensor4_val
void evaluate_on_side(const geo_basic< float_type, memory_type > &omega_L, const geo_element &L, const side_information_type &sid, Eigen::Matrix< Value, Eigen::Dynamic, 1 > &value) const
const geo_element & get_side(const geo_element &K, const side_information_type &sid) const
test_basic< T, M, details::vf_tag_01 > _u_test
typename float_traits< T >::type float_type
space_constant::valued_type valued_tag() const
bool valued_check() const
typename rep::memory_type memory_type
const geo_basic< T, M > & get_geo() const
typename rep::size_type size_type
const field_basic< T, M > & expr() const
void evaluate(const geo_basic< float_type, memory_type > &omega_K, const geo_element &K, Eigen::Matrix< Value, Eigen::Dynamic, 1 > &value) const
void initialize(const piola_on_pointset< float_type > &pops, const integrate_option &iopt) const
typename rep::result_type result_type
typename rep::value_type value_type
const_iterator begin_dof() const
typename rep::const_iterator const_iterator
static const space_constant::valued_type valued_hint
void initialize(const space_basic< float_type, memory_type > &Xh, const piola_on_pointset< float_type > &pops, const integrate_option &iopt) const
typename rep::float_type float_type
bool have_homogeneous_space(space_basic< scalar_type, memory_type > &Vh) const
field_expr_v2_nonlinear_terminal_field(const Expr &expr, const differentiate_option &gopt=differentiate_option())
void evaluate_on_side(const geo_basic< float_type, memory_type > &omega_L, const geo_element &L, const side_information_type &sid, Eigen::Matrix< Value, Eigen::Dynamic, 1 > &value) const
typename rep::scalar_type scalar_type
space_constant::valued_type valued_tag() const
const geo_element & get_side(const geo_basic< float_type, M > &omega_K, const geo_element &K, const side_information_type &sid) const
void initialize(const piola_on_pointset< float_type > &pops, const integrate_option &iopt) const
field_expr_v2_nonlinear_terminal_function_base_rep()
piola_on_pointset< float_type > _pops
rheo_default_memory_model memory_type
geo_element::size_type size_type
point_basic< T > argument_type
bool valued_check() const
field_expr_v2_nonlinear_terminal_function_base_rep< T > base
h_local_pseudo_function< T > function_type
rheo_default_memory_model memory_type
geo_element::size_type size_type
space_constant::valued_type valued_tag() const
point_basic< T > argument_type
bool valued_check() const
field_expr_v2_nonlinear_terminal_function_base_rep< T > base
bool _is_inside_on_local_sides
normal_pseudo_function< T > function_type
point_basic< T > result_type
rheo_default_memory_model memory_type
geo_element::size_type size_type
space_constant::valued_type valued_tag() const
point_basic< T > argument_type
bool valued_check() const
field_expr_v2_nonlinear_terminal_function_base_rep< T > base
rheo_default_memory_model memory_type
penalty_pseudo_function< T > function_type
geo_element::size_type size_type
space_constant::valued_type valued_tag() const
field_expr_v2_nonlinear_terminal_function_base_rep< float_type > base
std::array< Eigen::Matrix< tensor_basic< scalar_type >, Eigen::Dynamic, 1 >,reference_element::max_variant > _tensor_val
details::function_traits< Function >::copiable_type function_type
details::function_traits< Function >::template arg< 0 >::type argument_type
bool valued_check() const
details::function_traits< Function >::result_type result_type
std::array< Eigen::Matrix< tensor3_basic< scalar_type >, Eigen::Dynamic, 1 >,reference_element::max_variant > _tensor3_val
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
void initialize(const piola_on_pointset< float_type > &pops, const integrate_option &iopt) const
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(const geo_basic< float_type, memory_type > &omega_K, const geo_element &K, Eigen::Matrix< result_type, Eigen::Dynamic, 1 > &value) const
void initialize(const space_basic< float_type, memory_type > &Xh, const piola_on_pointset< float_type > &pops, const integrate_option &iopt) const
scalar_traits< result_type >::type scalar_type
rheo_default_memory_model memory_type
field_expr_v2_nonlinear_terminal_function_rep(const Function &f)
void evaluate_on_side(const geo_basic< float_type, memory_type > &omega_L, const geo_element &L, const side_information_type &sid, Eigen::Matrix< result_type, Eigen::Dynamic, 1 > &value) const
geo_element::size_type size_type
float_traits< result_type >::type float_type
space_constant::valued_type valued_tag() const
field_expr_v2_nonlinear_terminal_function(TrueFunction f)
field_expr_v2_nonlinear_terminal_function(const Function &f)
bool valued_check() const
rep::result_type result_type
rep::value_type value_type
void initialize(const piola_on_pointset< float_type > &pops, const integrate_option &iopt) const
static const space_constant::valued_type valued_hint
void evaluate(const geo_basic< float_type, memory_type > &omega_K, const geo_element &K, Eigen::Matrix< result_type, Eigen::Dynamic, 1 > &value) const
void initialize(const space_basic< float_type, memory_type > &Xh, const piola_on_pointset< float_type > &pops, const integrate_option &iopt) const
field_expr_v2_nonlinear_terminal_function(const Constant &c)
rep::float_type float_type
smart_pointer< rep > base
field_expr_v2_nonlinear_terminal_function_rep< Function > rep
rep::memory_type memory_type
rep::argument_type argument_type
void evaluate_on_side(const geo_basic< float_type, memory_type > &omega_L, const geo_element &L, const side_information_type &sid, Eigen::Matrix< result_type, Eigen::Dynamic, 1 > &value) const
space_constant::valued_type valued_tag() const
rep::scalar_type scalar_type
const space_type & get_space() const
valued_type valued_tag() const
const std::string & valued() const
see the geo_element page for the full documentation
reference_element::size_type size_type
variant_type variant() const
see the integrate_option page for the full documentation
const Eigen::Matrix< piola< T >, Eigen::Dynamic, 1 > & get_piola(const geo_basic< T, M > &omega, const geo_element &K) const
see the reference_element page for the full documentation
static const variant_type max_variant
see the smart_pointer page for the full documentation
#define fatal_macro(message)
#define rheo_default_memory_model
check_macro(expr1.have_homogeneous_space(Xh1), "dual(expr1,expr2); expr1 should have homogeneous space. HINT: use dual(interpolate(Xh, expr1),expr2)")
const geo_element & global_get_side(const geo_basic< T, M > &omega_L, const geo_element &L, const side_information_type &sid)
const std::string & valued_name(valued_type valued_tag)
This file is part of Rheolef.
std::enable_if< details::is_field_convertible< Expr >::value,details::field_expr_v2_nonlinear_terminal_field< typename Expr::scalar_type,typename Expr::memory_type,details::differentiate_option::gradient >>::type Ds(const Expr &expr)
Ds(uh): see the expression page for the full documentation.
std::enable_if< details::is_field_convertible< Expr >::value,details::field_expr_v2_nonlinear_terminal_field< typename Expr::scalar_type,typename Expr::memory_type,details::differentiate_option::gradient >>::type grad_s(const Expr &expr)
grad_s(uh): see the expression page for the full documentation
details::field_expr_v2_nonlinear_terminal_function< details::h_local_pseudo_function< Float > > h_local()
h_local: see the expression page for the full documentation
std::enable_if< details::is_field_convertible< Expr >::value,details::field_expr_v2_nonlinear_terminal_field< typename Expr::scalar_type,typename Expr::memory_type,details::differentiate_option::curl >>::type curl(const Expr &expr)
curl(uh): see the expression page for the full documentation
std::enable_if< details::is_field_convertible< Expr >::value,details::field_expr_v2_nonlinear_terminal_field< typename Expr::scalar_type,typename Expr::memory_type,details::differentiate_option::divergence >>::type div_h(const Expr &expr)
div_h(uh): see the expression page for the full documentation
std::enable_if< details::is_field_convertible< Expr >::value,details::field_expr_v2_nonlinear_terminal_field< typename Expr::scalar_type,typename Expr::memory_type,details::differentiate_option::gradient >>::type Dh(const Expr &expr)
Dh(uh): see the expression page for the full documentation.
std::enable_if< details::is_field_convertible< Expr >::value,details::field_expr_v2_nonlinear_terminal_field< typename Expr::scalar_type,typename Expr::memory_type,details::differentiate_option::gradient >>::type grad(const Expr &expr)
grad(uh): see the expression page for the full documentation
std::enable_if< details::is_field_convertible< Expr >::value,details::field_expr_v2_nonlinear_terminal_field< typename Expr::scalar_type,typename Expr::memory_type,details::differentiate_option::gradient >>::type grad_h(const Expr &expr)
grad_h(uh): see the expression page for the full documentation
details::field_expr_v2_nonlinear_terminal_function< details::h_local_pseudo_function< T > > h_local_basic()
details::field_expr_v2_nonlinear_terminal_function< details::penalty_pseudo_function< T > > penalty_basic()
details::field_expr_v2_nonlinear_terminal_function< details::normal_pseudo_function< T > > normal_basic()
std::enable_if< details::is_field_convertible< Expr >::value,details::field_expr_v2_nonlinear_terminal_field< typename Expr::scalar_type,typename Expr::memory_type,details::differentiate_option::gradient >>::type D(const Expr &expr)
D(uh): see the expression page for the full documentation.
std::enable_if< details::is_field_convertible< Expr >::value,details::field_expr_v2_nonlinear_terminal_field< typename Expr::scalar_type,typename Expr::memory_type,details::differentiate_option::divergence >>::type div(const Expr &expr)
div(uh): see the expression page for the full documentation
details::field_expr_v2_nonlinear_terminal_function< details::penalty_pseudo_function< Float > > penalty()
penalty(): see the expression page for the full documentation
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_make_field_expr_v2_nonlinear_terminal_field_dg(jump, 1, -1) _RHEOLEF_make_field_expr_v2_nonlinear_terminal_field_dg(average
std::enable_if< details::is_field_convertible< Expr >::value,details::field_expr_v2_nonlinear_terminal_field< typename Expr::scalar_type,typename Expr::memory_type,details::differentiate_option::divergence >>::type div_s(const Expr &expr)
div_s(uh): see the expression page for the full documentation
details::field_expr_v2_nonlinear_terminal_function< details::normal_pseudo_function< Float > > normal()
normal: see the expression page for the full documentation
space_constant::valued_type valued_tag() const
field_expr_v2_nonlinear_terminal_field< T, M, details::differentiate_option::none > type
promote< Expr, Float >::type float_type
field_expr_v2_nonlinear_terminal_function< fun_t > type
f_constant< point_basic< float_type >, Expr > fun_t
field_expr_v2_nonlinear_terminal_function< Expr > type
T operator()(const point_basic< T > &) const
point_basic< T > operator()(const point_basic< T > &) const
T operator()(const point_basic< T > &) const
helper for generic field value_type: T, point_basic<T> or tensor_basic<T>