1# ifndef _RHEOLEF_FORM_LAZY_TERMINAL_H
2# define _RHEOLEF_FORM_LAZY_TERMINAL_H
34#include "rheolef/form.h"
35#include "rheolef/field_lazy_form_mult.h"
49template<
class Derived>
54 template<
class FieldExpr>
55 typename std::enable_if<
65 template<
class T,
class M>
73 Derived&
derived() {
return *
static_cast< Derived*
>(
this); }
74 const Derived&
derived()
const {
return *
static_cast<const Derived*
>(
this); }
149 _iopt._is_on_interface =
false;
150 _iopt._is_inside_on_local_sides =
false;
151 _expr.initialize (_domain, _iopt);
152 _prev_omega_K = omega_K;
153 _prev_K_dis_ie = std::numeric_limits<size_type>::max();
162 if (_prev_omega_K == omega_K && _prev_K_dis_ie == K.
dis_ie()) {
167 _expr.evaluate (omega_K, K, ak);
169 _prev_omega_K = omega_K;
170 _prev_K_dis_ie = K.
dis_ie();
197 :
base1(new_macro(
rep(domain,expr,iopt))),
206 bool is_on_band()
const {
return base1::data().is_on_band(); }
216 { base1::data().evaluate (omega_K, K, ak); }
290 const geo_type& bgd_omega = get_test_space().get_constitution().get_background_geo();
292 "integrate on band: unexpected integration domain");
294 "do_integrate: incompatible integration domain "<<_gh.level_set().name() <<
" and test function based domain "
295 << bgd_omega.name());
296 _expr.initialize (_gh, _iopt);
297 _prev_omega_K = omega_K;
298 _prev_K_dis_ie = std::numeric_limits<size_type>::max();
307 if (_prev_omega_K == omega_K && _prev_K_dis_ie == K.
dis_ie()) {
313 _expr.evaluate (omega_K, K, ak);
315 _prev_omega_K = omega_K;
316 _prev_K_dis_ie = K.
dis_ie();
350 bool is_on_band()
const {
return base1::data().is_on_band(); }
359 { base1::data().evaluate (omega_K, K, ak); }
370 ,details::form_lazy_terminal_integrate_band <Expr>
375 typename Expr::memory_type>&
gh,
384 details::is_form_expr_v2_variational_arg<Expr>::value
385 ,details::form_lazy_terminal_integrate_band <details::form_expr_quadrature_on_element<Expr>>
390 typename Expr::memory_type>&
gh,
field gh(Float epsilon, Float t, const field &uh, const test &v)
see the band page for the full documentation
const geo_basic< T, M > & level_set() 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
#define trace_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)")
This file is part of Rheolef.
std::enable_if< details::is_field_expr_quadrature_arg< Expr >::value, details::field_lazy_terminal_integrate< Expr > >::type lazy_integrate(const typename Expr::geo_type &domain, const Expr &expr, const integrate_option &iopt=integrate_option())
see the integrate page for the full documentation