1#ifndef _RHEOLEF_FIELD_EXPR_TERMINAL_H
2#define _RHEOLEF_FIELD_EXPR_TERMINAL_H
41#include "rheolef/field.h"
42#include "rheolef/field_wdof_sliced.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"
62template<
class Expr,
class Sfinae =
void>
struct is_field_expr_v2_nonlinear_arg : std::false_type {};
63template<
class Expr>
struct is_field_expr_v2_nonlinear_arg <Expr, typename
std::enable_if<
64 is_field_expr_v2_constant<Expr>::value>::type> : std::true_type {};
65template<
class Expr>
struct is_field_expr_v2_nonlinear_arg <Expr, typename
std::enable_if<
66 has_field_rdof_interface<Expr>::value
67 >::type> : std::true_type {};
71template<
class Expr>
struct is_field_expr_affine_homogeneous <Expr, typename
std::enable_if<
72 is_field_expr_v2_constant<Expr>::value>::type> : std::true_type {};
73template<
class Expr>
struct is_field_expr_affine_homogeneous <Expr, typename
std::enable_if<
74 has_field_rdof_interface<Expr>::value
75 >::type> : std::true_type {};
80template <
class Expr,
class Sfinae =
void>
89template<
class T,
class M>
140template<
class Function>
143 <typename float_traits<typename details::function_traits<Function>::result_type>::type>
172 { base::initialize (pops, iopt); }
178 { base::initialize (Xh, pops, iopt); }
183 Eigen::Matrix<result_type,Eigen::Dynamic,1>& value)
const
185 const Eigen::Matrix<piola<float_type>,Eigen::Dynamic,1>&
piola = base::_pops.get_piola (omega_K, K);
188 value.resize (loc_nnod);
189 for (
size_type loc_inod = 0; loc_inod < loc_nnod; ++loc_inod) {
191 value[loc_inod] =
_f (xi);
198 Eigen::Matrix<result_type,Eigen::Dynamic,1>& value)
const
200 {
evaluate (omega_L, base::get_side(omega_L,L,sid), value); }
202 template<
class Value>
214 Eigen::Matrix<scalar_type,Eigen::Dynamic,1>
217 Eigen::Matrix<point_basic<scalar_type>,Eigen::Dynamic,1>
220 Eigen::Matrix<tensor_basic<scalar_type>,Eigen::Dynamic,1>
223 Eigen::Matrix<tensor3_basic<scalar_type>,Eigen::Dynamic,1>
226 Eigen::Matrix<tensor4_basic<scalar_type>,Eigen::Dynamic,1>
230template<
class Function>
242template<
class Function>
264 template<
class TrueFunction,
265 class Sfinae =
typename std::enable_if<std::is_function<TrueFunction>::value, TrueFunction>::type>
269 template <
class Constant,
270 class Sfinae =
typename std::enable_if <is_field_expr_v2_constant<Constant>::value, Constant>::type>
281 { base::data().initialize (pops, iopt); }
287 { base::data().initialize (Xh, pops, iopt); }
292 Eigen::Matrix<result_type,Eigen::Dynamic,1>& value)
const
293 {
return base::data().evaluate (omega_K, K, value); }
299 Eigen::Matrix<result_type,Eigen::Dynamic,1>& value)
const
300 {
return base::data().evaluate_on_side (omega_L, L, sid, value); }
302 template<
class Value>
304 return base::data().template valued_check<Value>(); }
310 typename
std::enable_if<
312 std::negation<has_field_rdof_interface<F>>
313 ,is_field_function<F>
316> : std::true_type {};
321 typename
std::enable_if<
323 std::negation<has_field_rdof_interface<Expr>>
324 ,is_field_function<Expr>
334 typename
std::enable_if<
335 is_field_expr_v2_constant<Expr>::value
350 fatal_macro (
"special normal() class-function should not be directly evaluated");
393 Eigen::Matrix<result_type,Eigen::Dynamic,1>& value)
const;
399 Eigen::Matrix<result_type,Eigen::Dynamic,1>& value)
const;
401 void evaluate_internal(
405 Eigen::Matrix<result_type,Eigen::Dynamic,1>& value)
const;
407 template<
class Value>
422details::field_expr_v2_nonlinear_terminal_function <details::normal_pseudo_function<T> >
431details::field_expr_v2_nonlinear_terminal_function <details::normal_pseudo_function<Float> >
434 return normal_basic<Float>();
445 fatal_macro (
"special h_local() class-function should not be directly evaluated");
489 Eigen::Matrix<result_type,Eigen::Dynamic,1>& value)
const;
495 Eigen::Matrix<result_type,Eigen::Dynamic,1>& value)
const;
497 template<
class Value>
510details::field_expr_v2_nonlinear_terminal_function <details::h_local_pseudo_function<T> >
519details::field_expr_v2_nonlinear_terminal_function <details::h_local_pseudo_function<Float> >
522 return h_local_basic<Float>();
533 fatal_macro (
"special penalty() class-function should not be directly evaluated");
577 Eigen::Matrix<result_type,Eigen::Dynamic,1>& value)
const;
583 Eigen::Matrix<result_type,Eigen::Dynamic,1>& value)
const;
585 template<
class Value>
597 void evaluate_internal(
601 Eigen::Matrix<result_type,Eigen::Dynamic,1>& value)
const;
609details::field_expr_v2_nonlinear_terminal_function <details::penalty_pseudo_function<T> >
618details::field_expr_v2_nonlinear_terminal_function <details::penalty_pseudo_function<Float> >
621 return penalty_basic<Float>();
631template<
class T,
class M, details::differentiate_option::type Diff>
649 template <
class Expr,
650 class Sfinae =
typename std::enable_if<details::has_field_rdof_interface<Expr>::value>::type>
659 const band_type& get_band()
const {
return _uh.get_band(); }
660 const space_type& get_space()
const {
return _uh.
get_space(); }
661 bool is_on_band ()
const {
return _expr.is_on_band(); }
662 void initialize (
const geo_type& omega_K) {
_uh.initialize (omega_K); }
696 template<
class Value>
700 Eigen::Matrix<Value,Eigen::Dynamic,1>& value)
const;
702 template<
class Value>
707 Eigen::Matrix<Value,Eigen::Dynamic,1>& value)
const;
709 template<
class Value>
726 Eigen::Matrix<T,Eigen::Dynamic,1>
729 Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>
732 Eigen::Matrix<tensor_basic<T>,Eigen::Dynamic,1>
735 Eigen::Matrix<tensor3_basic<T>,Eigen::Dynamic,1>
738 Eigen::Matrix<tensor4_basic<T>,Eigen::Dynamic,1>
742template<
class T,
class M, details::differentiate_option::type Diff>
743template <
class Expr,
class Sfinae>
748 _u_test(_uh.get_space()),
751 _have_dg_on_sides(false),
753 _piola_on_geo_basis(),
755 _need_vector_piola(false),
767template<
class T,
class M, details::differentiate_option::type Diff>
776 bool status = (_uh.valued_tag() ==
valued_tag) ||
780 "unexpected "<< _uh.valued()
782 <<
"-valued one is expected in expression");
787 base::_fops.template grad_valued_check<Value>();
793 base::_fops.template div_valued_check<Value>();
799 base::_fops.template curl_valued_check<Value>();
805template<
class T,
class M, details::differentiate_option::type Diff>
824 template <
class Expr,
825 class Sfinae =
typename std::enable_if<details::has_field_rdof_interface<Expr>::value>::type>
834 const geo_type&
get_geo()
const {
return base::data().get_geo(); }
835 const band_type& get_band()
const {
return base::data().get_band(); }
836 const space_type& get_space()
const {
return base::data().get_space(); }
837 bool is_on_band ()
const {
return base::data().is_on_band(); }
838 void initialize (
const geo_type& omega_K) { base::data().initialize (omega_K); }
846 return base::data().have_homogeneous_space (Vh); }
862 { base::data().initialize (pops, iopt); }
868 { base::data().initialize (Xh, pops, iopt); }
870 template<
class Value>
874 Eigen::Matrix<Value,Eigen::Dynamic,1>& value)
const
875 { base::data().evaluate (omega_K, K, value); }
877 template<
class Value>
882 Eigen::Matrix<Value,Eigen::Dynamic,1>& value)
const
883 { base::data().evaluate_on_side (omega_L, L, sid, value); }
885 template<
class Value>
887 return base::data().template valued_check<Value>();
891template<
class T,
class M, details::differentiate_option::type Diff>
900template<
class T,
class M>
906 typename
std::enable_if<
907 has_field_rdof_interface<Expr>::value
911 typedef typename Expr::scalar_type
T;
912 typedef typename Expr::memory_type
M;
925 typename Expr::scalar_type
926 ,
typename Expr::memory_type
932 typedef typename Expr::scalar_type
T;
933 typedef typename Expr::memory_type
M;
941 details::has_field_rdof_interface<Expr>::value
942 ,details::field_expr_v2_nonlinear_terminal_field<
943 typename Expr::scalar_type
944 ,
typename Expr::memory_type
950 typedef typename Expr::scalar_type
T;
951 typedef typename Expr::memory_type
M;
952 static details::differentiate_option gopt;
953 gopt.surfacic =
true;
961 details::has_field_rdof_interface<Expr>::value
962 ,details::field_expr_v2_nonlinear_terminal_field<
963 typename Expr::scalar_type
964 ,
typename Expr::memory_type
970 typedef typename Expr::scalar_type
T;
971 typedef typename Expr::memory_type
M;
972 static details::differentiate_option gopt;
981 details::has_field_rdof_interface<Expr>::value
982 ,details::field_expr_v2_nonlinear_terminal_field<
983 typename Expr::scalar_type
984 ,
typename Expr::memory_type
990 typedef typename Expr::scalar_type
T;
991 typedef typename Expr::memory_type
M;
992 details::differentiate_option gopt;
993 gopt.symmetrized =
true;
1001 details::has_field_rdof_interface<Expr>::value
1002 ,details::field_expr_v2_nonlinear_terminal_field<
1003 typename Expr::scalar_type
1004 ,
typename Expr::memory_type
1010 typedef typename Expr::scalar_type
T;
1011 typedef typename Expr::memory_type
M;
1012 details::differentiate_option gopt;
1013 gopt.symmetrized =
true;
1014 gopt.surfacic =
true;
1022 details::has_field_rdof_interface<Expr>::value
1023 ,details::field_expr_v2_nonlinear_terminal_field<
1024 typename Expr::scalar_type
1025 ,
typename Expr::memory_type
1031 typedef typename Expr::scalar_type
T;
1032 typedef typename Expr::memory_type
M;
1033 details::differentiate_option gopt;
1034 gopt.symmetrized =
true;
1043 details::has_field_rdof_interface<Expr>::value
1044 ,details::field_expr_v2_nonlinear_terminal_field<
1045 typename Expr::scalar_type
1046 ,
typename Expr::memory_type
1052 typedef typename Expr::scalar_type
T;
1053 typedef typename Expr::memory_type
M;
1061 details::has_field_rdof_interface<Expr>::value
1062 ,details::field_expr_v2_nonlinear_terminal_field<
1063 typename Expr::scalar_type
1064 ,
typename Expr::memory_type
1070 typedef typename Expr::scalar_type
T;
1071 typedef typename Expr::memory_type
M;
1072 static details::differentiate_option gopt;
1073 gopt.surfacic =
true;
1081 details::has_field_rdof_interface<Expr>::value
1082 ,details::field_expr_v2_nonlinear_terminal_field<
1083 typename Expr::scalar_type
1084 ,
typename Expr::memory_type
1090 typedef typename Expr::scalar_type
T;
1091 typedef typename Expr::memory_type
M;
1092 static details::differentiate_option gopt;
1101 details::has_field_rdof_interface<Expr>::value
1102 ,details::field_expr_v2_nonlinear_terminal_field<
1103 typename Expr::scalar_type
1104 ,
typename Expr::memory_type
1110 typedef typename Expr::scalar_type
T;
1111 typedef typename Expr::memory_type
M;
1122template<
class T,
class M>
1136 template <
class Expr,
1137 class Sfinae =
typename std::enable_if<details::has_field_rdof_interface<Expr>::value>::type>
1158 template<
class Value>
1162 Eigen::Matrix<Value,Eigen::Dynamic,1>& value)
const;
1164 template<
class Value>
1171 <<
"-valued one is expected in expression");
1180template<
class T,
class M>
1198 template <
class Expr,
1199 class Sfinae =
typename std::enable_if<details::has_field_rdof_interface<Expr>::value>::type>
1201 :
base(new_macro(
rep(expr,c0,c1))) {}
1210 { base::data().initialize (pops, iopt); }
1216 { base::data().initialize (Xh, pops, iopt); }
1218 template<
class Value>
1222 Eigen::Matrix<Value,Eigen::Dynamic,1>& value)
const
1223 { base::data().evaluate (omega_K, K, value); }
1225 template<
class Value>
1227 {
return base::data().template valued_check<Value>(); }
1234#define _RHEOLEF_make_field_expr_v2_nonlinear_terminal_field_dg(op,c0,c1) \
1235template<class Expr> \
1239 details::has_field_rdof_interface<Expr>::value \
1240 ,details::field_expr_v2_nonlinear_terminal_field_dg< \
1241 typename Expr::scalar_type \
1242 ,typename Expr::memory_type \
1245op (const Expr& expr) \
1247 return details::field_expr_v2_nonlinear_terminal_field_dg \
1248 <typename Expr::scalar_type ,typename Expr::memory_type> \
1256#undef _RHEOLEF_make_field_expr_v2_nonlinear_terminal_field_dg
1264template<
class T,
class M>
1296 template<
class Value>
1300 Eigen::Matrix<Value,Eigen::Dynamic,1>& value)
const;
1302 template<
class Value>
1309 <<
"-valued one is expected in expression");
1314 template<
class Result>
1328template<
class T,
class M>
1343template<
class T,
class M>
1346 : _uh (uoX.get_field()),
1347 _X (uoX.get_characteristic()),
1358template<
class T,
class M>
1360 public smart_pointer<field_expr_v2_nonlinear_terminal_field_o_characteristic_rep<T,M> >
1378 :
base(new_macro(
rep(uoX))) {}
1381 :
base(new_macro(
rep(uh,X))) {}
1390 { base::data().initialize (pops, iopt); }
1396 { base::data().initialize (Xh, pops, iopt); }
1398 template<
class Value>
1402 Eigen::Matrix<Value,Eigen::Dynamic,1>& value)
const
1403 { base::data().evaluate (omega_K, K, value); }
1405 template<
class Value>
1407 return base::data().template valued_check<Value>();
1416template<
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 initialize(const piola_on_pointset< float_type > &pops, const integrate_option &iopt)
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
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
void initialize(const piola_on_pointset< float_type > &pops, const integrate_option &iopt)
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
static const space_constant::valued_type valued_hint
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
void initialize(const space_basic< float_type, memory_type > &Xh, const piola_on_pointset< float_type > &pops, const integrate_option &iopt)
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
void initialize(const piola_on_pointset< float_type > &pops, const integrate_option &iopt)
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
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
void initialize(const piola_on_pointset< float_type > &pops, const integrate_option &iopt)
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
static const space_constant::valued_type valued_hint
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
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_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
const geo_element & get_side(const geo_element &K, const side_information_type &sid) const
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
void initialize(const piola_on_pointset< T > &pops, const integrate_option &iopt)
differentiate_option _gopt
field_expr_v2_nonlinear_terminal_field_rep(const Expr &expr, const differentiate_option &gopt)
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
test_basic< T, M, details::vf_tag_01 > _u_test
typename float_traits< T >::type float_type
space_constant::valued_type valued_tag() const
const field_basic< T, M > & expr() const
bool valued_check() const
void initialize(const piola_on_pointset< float_type > &pops, const integrate_option &iopt)
typename rep::memory_type memory_type
typename rep::size_type size_type
field_expr_v2_nonlinear_terminal_field_rep< T, M, Diff > rep
void evaluate(const geo_basic< float_type, memory_type > &omega_K, const geo_element &K, Eigen::Matrix< Value, Eigen::Dynamic, 1 > &value) 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
typename rep::float_type float_type
smart_pointer< rep > base
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
void initialize(const space_basic< float_type, memory_type > &Xh, const piola_on_pointset< float_type > &pops, const integrate_option &iopt)
typename rep::scalar_type scalar_type
const geo_basic< T, M > & get_geo() const
space_constant::valued_type valued_tag() const
void initialize(const piola_on_pointset< float_type > &pops, const integrate_option &iopt)
const geo_element & get_side(const geo_basic< float_type, M > &omega_K, const geo_element &K, const side_information_type &sid) 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
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
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
scalar_traits< result_type >::type scalar_type
rheo_default_memory_model memory_type
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_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
void initialize(const piola_on_pointset< float_type > &pops, const integrate_option &iopt)
rep::result_type result_type
rep::value_type value_type
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
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 initialize(const space_basic< float_type, memory_type > &Xh, const piola_on_pointset< float_type > &pops, const integrate_option &iopt)
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
see the disarray page for the full documentation
valued_type valued_tag() const
const geo_type & get_geo() const
const space_type & get_space() const
const std::string & valued() const
generic mesh with rerefence counting
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
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 rheo_default_memory_model
#define fatal_macro(message)
void get_geo(istream &in, my_geo &omega)
check_macro(expr1.have_homogeneous_space(Xh1), "dual(expr1,expr2); expr1 should have homogeneous space. HINT: use dual(interpolate(Xh, expr1),expr2)")
#define _RHEOLEF_make_field_expr_v2_nonlinear_terminal_field_dg(op, c0, c1)
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.
details::field_expr_v2_nonlinear_terminal_function< details::h_local_pseudo_function< T > > h_local_basic()
std::enable_if< details::has_field_rdof_interface< Expr >::value, details::field_expr_v2_nonlinear_terminal_field< typenameExpr::scalar_type, typenameExpr::memory_type, details::differentiate_option::gradient > >::type grad_s(const Expr &expr)
grad_s(uh): see the expression page for the full documentation
std::enable_if< details::has_field_rdof_interface< Expr >::value, details::field_expr_v2_nonlinear_terminal_field< typenameExpr::scalar_type, typenameExpr::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::has_field_rdof_interface< Expr >::value, details::field_expr_v2_nonlinear_terminal_field< typenameExpr::scalar_type, typenameExpr::memory_type, details::differentiate_option::gradient > >::type D(const Expr &expr)
D(uh): see the expression page for the full documentation.
details::field_expr_v2_nonlinear_terminal_function< details::normal_pseudo_function< T > > normal_basic()
std::enable_if< details::has_field_rdof_interface< Expr >::value, details::field_expr_v2_nonlinear_terminal_field< typenameExpr::scalar_type, typenameExpr::memory_type, details::differentiate_option::divergence > >::type div(const Expr &expr)
div(uh): see the expression page for the full documentation
std::enable_if< details::has_field_rdof_interface< Expr >::value, details::field_expr_v2_nonlinear_terminal_field< typenameExpr::scalar_type, typenameExpr::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::has_field_rdof_interface< Expr >::value, details::field_expr_v2_nonlinear_terminal_field< typenameExpr::scalar_type, typenameExpr::memory_type, details::differentiate_option::curl > >::type curl(const Expr &expr)
curl(uh): see the expression page for the full documentation
details::field_expr_v2_nonlinear_terminal_function< details::penalty_pseudo_function< T > > penalty_basic()
std::enable_if< details::has_field_rdof_interface< Expr >::value, details::field_expr_v2_nonlinear_terminal_field< typenameExpr::scalar_type, typenameExpr::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::normal_pseudo_function< Float > > normal()
normal: see the expression page for the full documentation
std::enable_if< details::has_field_rdof_interface< Expr >::value, details::field_expr_v2_nonlinear_terminal_field< typenameExpr::scalar_type, typenameExpr::memory_type, details::differentiate_option::gradient > >::type Dh(const Expr &expr)
Dh(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
details::field_expr_v2_nonlinear_terminal_function< details::penalty_pseudo_function< Float > > penalty()
penalty(): see the expression page for the full documentation
std::enable_if< details::has_field_rdof_interface< Expr >::value, details::field_expr_v2_nonlinear_terminal_field< typenameExpr::scalar_type, typenameExpr::memory_type, details::differentiate_option::divergence > >::type div_s(const Expr &expr)
div_s(uh): see the expression page for the full documentation
std::enable_if< details::has_field_rdof_interface< Expr >::value, details::field_expr_v2_nonlinear_terminal_field< typenameExpr::scalar_type, typenameExpr::memory_type, details::differentiate_option::gradient > >::type Ds(const Expr &expr)
Ds(uh): see the expression page for the full documentation.
space_constant::valued_type valued_tag() const
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
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>