Loading...
Searching...
No Matches
form_lazy_terminal.h
Go to the documentation of this file.
# ifndef _RHEOLEF_FORM_LAZY_TERMINAL_H
# define _RHEOLEF_FORM_LAZY_TERMINAL_H
//
// This file is part of Rheolef.
//
// Copyright (C) 2000-2009 Pierre Saramito <Pierre.Saramito@imag.fr>
//
// Rheolef is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// Rheolef is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Rheolef; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// =========================================================================
// form_lazy_expr = result of a lazy integrate() that are combined in exprs
// AUTHOR: Pierre.Saramito@imag.fr
// DATE: 30 march 1920
//
// SUMMARY:
// 1. concept & base class
// 2. terminal
// 2.1. integrate
// 2.2. integrate on a band
// see also "form_lazy_expr.h"
#include "rheolef/form.h"
#include "rheolef/field_lazy_form_mult.h"
namespace rheolef {
// -------------------------------------------------------------------
// 1. concept & base class
// -------------------------------------------------------------------
namespace details {
// Define a trait type for detecting form expression valid arguments
// template<class T> struct is_form_lazy: std::false_type {};
// => should be defined in form.h for compilation reason,
// otherwise Sfinae is always failed in form.h
// Define a base class
template<class Derived>
class form_lazy_base {
public:
// a.trans_mult(u)
template<class FieldExpr>
typename std::enable_if<
details::is_field_lazy<FieldExpr>::value
,field_lazy_trans_mult_form<Derived,FieldExpr>
>::type
trans_mult (const FieldExpr& u_expr) const {
return field_lazy_trans_mult_form<Derived,FieldExpr>(derived(), u_expr);
}
// TODO: how to obtain T and M from Derived ?
// typename Derived::scalar_type => compilation failed
// see eg EigenBase in eigen library
template<class T, class M>
field_lazy_trans_mult_form<Derived,field_lazy_terminal_field<T,M>>
trans_mult (const field_basic<T,M>& uh) const {
return field_lazy_trans_mult_form<Derived,field_lazy_terminal_field<T,M>>
(derived(), field_lazy_terminal_field<T,M>(uh));
}
protected:
Derived& derived() { return *static_cast< Derived*>(this); }
const Derived& derived() const { return *static_cast<const Derived*>(this); }
};
} // namespace details
// -------------------------------------------------------------------
// 2. terminal
// -------------------------------------------------------------------
// 2.1. integrate
// -------------------------------------------------------------------
// form_lazy_terminal_integrate is returned by the integrate() function
// It contains the domain of integration
// and integration options (quadrature)
namespace details {
template<class Expr>
class form_lazy_terminal_integrate_rep {
public :
// definitions:
using size_type = geo_element::size_type;
using memory_type = typename Expr::memory_type;
using scalar_type = typename Expr::scalar_type;
using space_type = typename Expr::space_type;
using geo_type = typename Expr::geo_type;
using float_type = typename float_traits<scalar_type>::type;
using band_type = band_basic<float_type,memory_type>;
using matrix_element_type = Eigen::Matrix<scalar_type,Eigen::Dynamic,Eigen::Dynamic>;
// allocator:
form_lazy_terminal_integrate_rep (
const geo_type& domain,
const Expr& expr,
const integrate_option& iopt)
: _domain(domain),
_expr(expr),
_iopt(iopt),
_prev_omega_K(),
_prev_K_dis_ie(std::numeric_limits<size_type>::max()),
_prev_ak()
{}
// accessors:
const geo_type& get_geo() const { return _domain; }
const space_type& get_trial_space() const { return _expr.get_trial_space(); }
const space_type& get_test_space() const { return _expr.get_test_space(); }
bool is_on_band() const { return false; }
band_type get_band() const { return band_type(); }
void initialize (const geo_type& omega_K) const;
bool is_diagonal() const { return false; }
void evaluate (
const geo_type& omega_K,
const geo_element& K,
matrix_element_type& ak) const;
// data:
protected:
geo_type _domain;
mutable Expr _expr;
mutable integrate_option _iopt;
mutable geo_type _prev_omega_K;
mutable size_type _prev_K_dis_ie;
mutable matrix_element_type _prev_ak;
};
// inlined;
template<class Expr>
void
form_lazy_terminal_integrate_rep<Expr>::initialize (const geo_type& omega_K) const
{
// TODO: sub-domain
// _domain could be a subdomain of omega_K:
// in that case evaluate(omega_K,K) should return a zero ak matrix
// when K do not belongs to _domain
_iopt._is_on_interface = false;
_iopt._is_inside_on_local_sides = false;
_expr.initialize (_domain, _iopt);
_prev_omega_K = omega_K;
_prev_K_dis_ie = std::numeric_limits<size_type>::max();
}
template<class Expr>
void
form_lazy_terminal_integrate_rep<Expr>::evaluate (
const geo_type& omega_K,
const geo_element& K,
matrix_element_type& ak) const
{
if (_prev_omega_K == omega_K && _prev_K_dis_ie == K.dis_ie()) {
trace_macro("interpolate(K="<<K.name()<<K.dis_ie()<<",prev="<<_prev_K_dis_ie<<"): re-use");
ak = _prev_ak;
return;
}
_expr.evaluate (omega_K, K, ak);
_prev_ak = ak; // expensive to compute, so memorize it for common subexpressions
_prev_omega_K = omega_K;
_prev_K_dis_ie = K.dis_ie();
trace_macro("interpolate(K="<<K.name()<<K.dis_ie()<<",prev="<<_prev_K_dis_ie<<"): compute");
}
template<class Expr>
class form_lazy_terminal_integrate: public smart_pointer_nocopy<form_lazy_terminal_integrate_rep<Expr>>,
public form_lazy_base <form_lazy_terminal_integrate<Expr>> {
public :
// definitions:
using rep = form_lazy_terminal_integrate_rep<Expr>;
using base1 = smart_pointer_nocopy<rep>;
using base2 = form_lazy_base<form_lazy_terminal_integrate<Expr>>;
using size_type = typename rep::size_type;
using memory_type = typename rep::memory_type;
using scalar_type = typename rep::scalar_type;
using space_type = typename rep::space_type;
using geo_type = typename rep::geo_type;
using band_type = typename rep::band_type;
using matrix_element_type = typename rep::matrix_element_type;
// allocator:
form_lazy_terminal_integrate (
const geo_type& domain,
const Expr& expr,
const integrate_option& iopt)
: base1(new_macro(rep(domain,expr,iopt))),
base2()
{}
// accessors:
const geo_type& get_geo() const { return base1::data().get_geo(); }
const space_type& get_trial_space() const { return base1::data().get_trial_space(); }
const space_type& get_test_space() const { return base1::data().get_test_space(); }
bool is_on_band() const { return base1::data().is_on_band(); }
band_type get_band() const { return base1::data().get_band(); }
void initialize (const geo_type& omega_K) const { return base1::data().initialize (omega_K); }
bool is_diagonal() const { return base1::data().is_diagonal(); }
void evaluate (
const geo_type& omega_K,
const geo_element& K,
matrix_element_type& ak) const
{ base1::data().evaluate (omega_K, K, ak); }
};
// concept;
template<class Expr> struct is_form_lazy <form_lazy_terminal_integrate<Expr> > : std::true_type {};
}// namespace details
// ----------------------------------------------
// 2.2. integrate on a band
// ----------------------------------------------
namespace details {
template<class Expr>
class form_lazy_terminal_integrate_band_rep {
public :
// definitions:
using size_type = geo_element::size_type;
using memory_type = typename Expr::memory_type;
using scalar_type = typename Expr::scalar_type;
using space_type = typename Expr::space_type;
using geo_type = typename Expr::geo_type;
using float_type = typename float_traits<scalar_type>::type;
using band_type = band_basic<float_type,memory_type>;
using matrix_element_type = Eigen::Matrix<scalar_type,Eigen::Dynamic,Eigen::Dynamic>;
// allocators:
form_lazy_terminal_integrate_band_rep (
const band_type& gh,
const Expr& expr,
const integrate_option& iopt);
// accessors:
const geo_type& get_geo() const { return _gh.level_set(); }
const space_type& get_trial_space() const { return _expr.get_trial_space(); }
const space_type& get_test_space() const { return _expr.get_test_space(); }
bool is_on_band() const { return true; }
band_type get_band() const { return _gh; }
void initialize (const geo_type& omega_K) const;
void evaluate (
const geo_type& omega_K,
const geo_element& K,
matrix_element_type& ak) const;
// data:
protected:
band_type _gh;
mutable Expr _expr;
mutable integrate_option _iopt;
mutable geo_type _prev_omega_K;
mutable size_type _prev_K_dis_ie;
mutable matrix_element_type _prev_ak;
};
// inlined;
template<class Expr>
form_lazy_terminal_integrate_band_rep<Expr>::form_lazy_terminal_integrate_band_rep (
const band_type& gh,
const Expr& expr,
const integrate_option& iopt)
: _gh(gh),
_expr(expr),
_iopt(iopt),
_prev_omega_K(),
_prev_K_dis_ie(std::numeric_limits<size_type>::max()),
_prev_ak()
{
}
template<class Expr>
void
form_lazy_terminal_integrate_band_rep<Expr>::initialize (const geo_type& omega_K) const
{
const geo_type& band = _gh.band(); // the 3D intersected tetras
const geo_type& bgd_omega = get_test_space().get_constitution().get_background_geo();
check_macro (omega_K == get_geo(),
"integrate on band: unexpected integration domain");
check_macro (band.get_background_geo() == bgd_omega,
"do_integrate: incompatible integration domain "<<_gh.level_set().name() << " and test function based domain "
<< bgd_omega.name());
_expr.initialize (_gh, _iopt);
_prev_omega_K = omega_K;
_prev_K_dis_ie = std::numeric_limits<size_type>::max();
}
template<class Expr>
void
form_lazy_terminal_integrate_band_rep<Expr>::evaluate (
const geo_type& omega_K,
const geo_element& K,
matrix_element_type& ak) const
{
if (_prev_omega_K == omega_K && _prev_K_dis_ie == K.dis_ie()) {
trace_macro("interpolate(K="<<K.name()<<K.dis_ie()<<",prev="<<_prev_K_dis_ie<<"): re-use");
ak = _prev_ak;
return;
}
// TODO: memorize _prev
_expr.evaluate (omega_K, K, ak);
_prev_ak = ak; // expensive to compute, so memorize it for common subexpressions
_prev_omega_K = omega_K;
_prev_K_dis_ie = K.dis_ie();
}
template<class Expr>
class form_lazy_terminal_integrate_band: public smart_pointer_nocopy<form_lazy_terminal_integrate_band_rep<Expr>>,
public form_lazy_base <form_lazy_terminal_integrate_band<Expr>> {
public :
// definitions:
using rep = form_lazy_terminal_integrate_band_rep<Expr>;
using base1 = smart_pointer_nocopy<rep>;
using base2 = form_lazy_base<form_lazy_terminal_integrate_band<Expr>>;
using size_type = typename rep::size_type;
using memory_type = typename rep::memory_type;
using scalar_type = typename rep::scalar_type;
using space_type = typename rep::space_type;
using geo_type = typename rep::geo_type;
using band_type = typename rep::band_type;
using matrix_element_type = typename rep::matrix_element_type;
// allocator:
form_lazy_terminal_integrate_band (
const band_type& gh,
const Expr& expr,
const integrate_option& iopt)
: base1(new_macro(rep(gh,expr,iopt))),
base2()
{}
// accessors:
const geo_type& get_geo() const { return base1::data().get_geo(); }
const space_type& get_trial_space() const { return base1::data().get_trial_space(); }
const space_type& get_test_space() const { return base1::data().get_test_space(); }
bool is_on_band() const { return base1::data().is_on_band(); }
band_type get_band() const { return base1::data().get_band(); }
void initialize (const geo_type& omega_K) const { return base1::data().initialize (omega_K); }
void evaluate (
const geo_type& omega_K,
const geo_element& K,
matrix_element_type& ak) const
{ base1::data().evaluate (omega_K, K, ak); }
};
// concept;
template<class Expr> struct is_form_lazy <form_lazy_terminal_integrate_band<Expr> > : std::true_type {};
}// namespace details
template <class Expr>
typename
std::enable_if<
details::is_form_expr_quadrature_arg<Expr>::value
,details::form_lazy_terminal_integrate_band <Expr>
>::type
lazy_integrate (
const band_basic<typename float_traits<typename Expr::scalar_type>::type,
typename Expr::memory_type>& gh,
const Expr& expr,
const integrate_option& iopt = integrate_option())
{
return details::form_lazy_terminal_integrate_band<Expr> (gh, expr, iopt);
}
template <class Expr>
typename
std::enable_if<
details::is_form_expr_v2_variational_arg<Expr>::value
,details::form_lazy_terminal_integrate_band <details::form_expr_quadrature_on_element<Expr>>
>::type
lazy_integrate (
const band_basic<typename float_traits<typename Expr::scalar_type>::type,
typename Expr::memory_type>& gh,
const Expr& expr,
const integrate_option& iopt = integrate_option())
{
details::form_expr_quadrature_on_element<Expr> expr_quad(expr);
return lazy_integrate (gh, expr_quad, iopt);
}
}// namespace rheolef
# endif /* _RHEOLEF_FORM_LAZY_TERMINAL_H */
gh
field gh(Float epsilon, Float t, const field &uh, const test &v)
Definition burgers_diffusion_operators.icc:37
band
see the band page for the full documentation
rheolef::band_basic< float_type, memory_type >
rheolef::band_basic::level_set
const geo_basic< T, M > & level_set() const
Definition band.h:109
rheolef::details::field_lazy_terminal_field
Definition field_lazy_terminal.h:77
rheolef::details::field_lazy_trans_mult_form
Definition field_lazy_form_mult.h:328
rheolef::details::form_expr_quadrature_on_element
Definition form_expr_quadrature.h:113
rheolef::details::form_lazy_base
Definition form_lazy_terminal.h:50
rheolef::details::form_lazy_base::trans_mult
std::enable_if< details::is_field_lazy< FieldExpr >::value, field_lazy_trans_mult_form< Derived, FieldExpr > >::type trans_mult(const FieldExpr &u_expr) const
Definition form_lazy_terminal.h:59
rheolef::details::form_lazy_base::trans_mult
field_lazy_trans_mult_form< Derived, field_lazy_terminal_field< T, M > > trans_mult(const field_basic< T, M > &uh) const
Definition form_lazy_terminal.h:67
rheolef::details::form_lazy_base::derived
const Derived & derived() const
Definition form_lazy_terminal.h:74
rheolef::details::form_lazy_base::derived
Derived & derived()
Definition form_lazy_terminal.h:73
rheolef::details::form_lazy_terminal_integrate_band_rep
Definition form_lazy_terminal.h:228
rheolef::details::form_lazy_terminal_integrate_band_rep::_prev_ak
matrix_element_type _prev_ak
Definition form_lazy_terminal.h:269
rheolef::details::form_lazy_terminal_integrate_band_rep::size_type
geo_element::size_type size_type
Definition form_lazy_terminal.h:232
rheolef::details::form_lazy_terminal_integrate_band_rep::evaluate
void evaluate(const geo_type &omega_K, const geo_element &K, matrix_element_type &ak) const
Definition form_lazy_terminal.h:302
rheolef::details::form_lazy_terminal_integrate_band_rep::get_test_space
const space_type & get_test_space() const
Definition form_lazy_terminal.h:252
rheolef::details::form_lazy_terminal_integrate_band_rep::initialize
void initialize(const geo_type &omega_K) const
Definition form_lazy_terminal.h:287
rheolef::details::form_lazy_terminal_integrate_band_rep::geo_type
typename Expr::geo_type geo_type
Definition form_lazy_terminal.h:236
rheolef::details::form_lazy_terminal_integrate_band_rep::scalar_type
typename Expr::scalar_type scalar_type
Definition form_lazy_terminal.h:234
rheolef::details::form_lazy_terminal_integrate_band_rep::memory_type
typename Expr::memory_type memory_type
Definition form_lazy_terminal.h:233
rheolef::details::form_lazy_terminal_integrate_band_rep::_prev_omega_K
geo_type _prev_omega_K
Definition form_lazy_terminal.h:267
rheolef::details::form_lazy_terminal_integrate_band_rep::_expr
Expr _expr
Definition form_lazy_terminal.h:265
rheolef::details::form_lazy_terminal_integrate_band_rep::matrix_element_type
Eigen::Matrix< scalar_type, Eigen::Dynamic, Eigen::Dynamic > matrix_element_type
Definition form_lazy_terminal.h:239
rheolef::details::form_lazy_terminal_integrate_band_rep::_gh
band_type _gh
Definition form_lazy_terminal.h:264
rheolef::details::form_lazy_terminal_integrate_band_rep::form_lazy_terminal_integrate_band_rep
form_lazy_terminal_integrate_band_rep(const band_type &gh, const Expr &expr, const integrate_option &iopt)
Definition form_lazy_terminal.h:273
rheolef::details::form_lazy_terminal_integrate_band_rep::_prev_K_dis_ie
size_type _prev_K_dis_ie
Definition form_lazy_terminal.h:268
rheolef::details::form_lazy_terminal_integrate_band_rep::float_type
typename float_traits< scalar_type >::type float_type
Definition form_lazy_terminal.h:237
rheolef::details::form_lazy_terminal_integrate_band_rep::get_trial_space
const space_type & get_trial_space() const
Definition form_lazy_terminal.h:251
rheolef::details::form_lazy_terminal_integrate_band_rep::is_on_band
bool is_on_band() const
Definition form_lazy_terminal.h:253
rheolef::details::form_lazy_terminal_integrate_band_rep::get_band
band_type get_band() const
Definition form_lazy_terminal.h:254
rheolef::details::form_lazy_terminal_integrate_band_rep::get_geo
const geo_type & get_geo() const
Definition form_lazy_terminal.h:250
rheolef::details::form_lazy_terminal_integrate_band_rep::_iopt
integrate_option _iopt
Definition form_lazy_terminal.h:266
rheolef::details::form_lazy_terminal_integrate_band_rep::space_type
typename Expr::space_type space_type
Definition form_lazy_terminal.h:235
rheolef::details::form_lazy_terminal_integrate_band
Definition form_lazy_terminal.h:320
rheolef::details::form_lazy_terminal_integrate_band::evaluate
void evaluate(const geo_type &omega_K, const geo_element &K, matrix_element_type &ak) const
Definition form_lazy_terminal.h:355
rheolef::details::form_lazy_terminal_integrate_band::get_test_space
const space_type & get_test_space() const
Definition form_lazy_terminal.h:349
rheolef::details::form_lazy_terminal_integrate_band::memory_type
typename rep::memory_type memory_type
Definition form_lazy_terminal.h:328
rheolef::details::form_lazy_terminal_integrate_band::initialize
void initialize(const geo_type &omega_K) const
Definition form_lazy_terminal.h:353
rheolef::details::form_lazy_terminal_integrate_band::size_type
typename rep::size_type size_type
Definition form_lazy_terminal.h:327
rheolef::details::form_lazy_terminal_integrate_band::band_type
typename rep::band_type band_type
Definition form_lazy_terminal.h:332
rheolef::details::form_lazy_terminal_integrate_band::form_lazy_terminal_integrate_band
form_lazy_terminal_integrate_band(const band_type &gh, const Expr &expr, const integrate_option &iopt)
Definition form_lazy_terminal.h:337
rheolef::details::form_lazy_terminal_integrate_band::space_type
typename rep::space_type space_type
Definition form_lazy_terminal.h:330
rheolef::details::form_lazy_terminal_integrate_band::geo_type
typename rep::geo_type geo_type
Definition form_lazy_terminal.h:331
rheolef::details::form_lazy_terminal_integrate_band::get_trial_space
const space_type & get_trial_space() const
Definition form_lazy_terminal.h:348
rheolef::details::form_lazy_terminal_integrate_band::rep
form_lazy_terminal_integrate_band_rep< Expr > rep
Definition form_lazy_terminal.h:324
rheolef::details::form_lazy_terminal_integrate_band::is_on_band
bool is_on_band() const
Definition form_lazy_terminal.h:350
rheolef::details::form_lazy_terminal_integrate_band::get_band
band_type get_band() const
Definition form_lazy_terminal.h:351
rheolef::details::form_lazy_terminal_integrate_band::get_geo
const geo_type & get_geo() const
Definition form_lazy_terminal.h:347
rheolef::details::form_lazy_terminal_integrate_band::base1
smart_pointer_nocopy< rep > base1
Definition form_lazy_terminal.h:325
rheolef::details::form_lazy_terminal_integrate_band::scalar_type
typename rep::scalar_type scalar_type
Definition form_lazy_terminal.h:329
rheolef::details::form_lazy_terminal_integrate_band::matrix_element_type
typename rep::matrix_element_type matrix_element_type
Definition form_lazy_terminal.h:333
rheolef::details::form_lazy_terminal_integrate_rep
Definition form_lazy_terminal.h:89
rheolef::details::form_lazy_terminal_integrate_rep::_prev_ak
matrix_element_type _prev_ak
Definition form_lazy_terminal.h:138
rheolef::details::form_lazy_terminal_integrate_rep::band_type
band_basic< float_type, memory_type > band_type
Definition form_lazy_terminal.h:99
rheolef::details::form_lazy_terminal_integrate_rep::size_type
geo_element::size_type size_type
Definition form_lazy_terminal.h:93
rheolef::details::form_lazy_terminal_integrate_rep::evaluate
void evaluate(const geo_type &omega_K, const geo_element &K, matrix_element_type &ak) const
Definition form_lazy_terminal.h:157
rheolef::details::form_lazy_terminal_integrate_rep::get_test_space
const space_type & get_test_space() const
Definition form_lazy_terminal.h:120
rheolef::details::form_lazy_terminal_integrate_rep::initialize
void initialize(const geo_type &omega_K) const
Definition form_lazy_terminal.h:143
rheolef::details::form_lazy_terminal_integrate_rep::is_diagonal
bool is_diagonal() const
Definition form_lazy_terminal.h:125
rheolef::details::form_lazy_terminal_integrate_rep::geo_type
typename Expr::geo_type geo_type
Definition form_lazy_terminal.h:97
rheolef::details::form_lazy_terminal_integrate_rep::_domain
geo_type _domain
Definition form_lazy_terminal.h:133
rheolef::details::form_lazy_terminal_integrate_rep::form_lazy_terminal_integrate_rep
form_lazy_terminal_integrate_rep(const geo_type &domain, const Expr &expr, const integrate_option &iopt)
Definition form_lazy_terminal.h:104
rheolef::details::form_lazy_terminal_integrate_rep::scalar_type
typename Expr::scalar_type scalar_type
Definition form_lazy_terminal.h:95
rheolef::details::form_lazy_terminal_integrate_rep::memory_type
typename Expr::memory_type memory_type
Definition form_lazy_terminal.h:94
rheolef::details::form_lazy_terminal_integrate_rep::_prev_omega_K
geo_type _prev_omega_K
Definition form_lazy_terminal.h:136
rheolef::details::form_lazy_terminal_integrate_rep::_expr
Expr _expr
Definition form_lazy_terminal.h:134
rheolef::details::form_lazy_terminal_integrate_rep::matrix_element_type
Eigen::Matrix< scalar_type, Eigen::Dynamic, Eigen::Dynamic > matrix_element_type
Definition form_lazy_terminal.h:100
rheolef::details::form_lazy_terminal_integrate_rep::_prev_K_dis_ie
size_type _prev_K_dis_ie
Definition form_lazy_terminal.h:137
rheolef::details::form_lazy_terminal_integrate_rep::float_type
typename float_traits< scalar_type >::type float_type
Definition form_lazy_terminal.h:98
rheolef::details::form_lazy_terminal_integrate_rep::get_trial_space
const space_type & get_trial_space() const
Definition form_lazy_terminal.h:119
rheolef::details::form_lazy_terminal_integrate_rep::is_on_band
bool is_on_band() const
Definition form_lazy_terminal.h:121
rheolef::details::form_lazy_terminal_integrate_rep::get_band
band_type get_band() const
Definition form_lazy_terminal.h:122
rheolef::details::form_lazy_terminal_integrate_rep::get_geo
const geo_type & get_geo() const
Definition form_lazy_terminal.h:118
rheolef::details::form_lazy_terminal_integrate_rep::_iopt
integrate_option _iopt
Definition form_lazy_terminal.h:135
rheolef::details::form_lazy_terminal_integrate_rep::space_type
typename Expr::space_type space_type
Definition form_lazy_terminal.h:96
rheolef::details::form_lazy_terminal_integrate
Definition form_lazy_terminal.h:176
rheolef::details::form_lazy_terminal_integrate::evaluate
void evaluate(const geo_type &omega_K, const geo_element &K, matrix_element_type &ak) const
Definition form_lazy_terminal.h:212
rheolef::details::form_lazy_terminal_integrate::get_test_space
const space_type & get_test_space() const
Definition form_lazy_terminal.h:205
rheolef::details::form_lazy_terminal_integrate::memory_type
typename rep::memory_type memory_type
Definition form_lazy_terminal.h:184
rheolef::details::form_lazy_terminal_integrate::initialize
void initialize(const geo_type &omega_K) const
Definition form_lazy_terminal.h:209
rheolef::details::form_lazy_terminal_integrate::size_type
typename rep::size_type size_type
Definition form_lazy_terminal.h:183
rheolef::details::form_lazy_terminal_integrate::band_type
typename rep::band_type band_type
Definition form_lazy_terminal.h:188
rheolef::details::form_lazy_terminal_integrate::is_diagonal
bool is_diagonal() const
Definition form_lazy_terminal.h:210
rheolef::details::form_lazy_terminal_integrate::space_type
typename rep::space_type space_type
Definition form_lazy_terminal.h:186
rheolef::details::form_lazy_terminal_integrate::geo_type
typename rep::geo_type geo_type
Definition form_lazy_terminal.h:187
rheolef::details::form_lazy_terminal_integrate::get_trial_space
const space_type & get_trial_space() const
Definition form_lazy_terminal.h:204
rheolef::details::form_lazy_terminal_integrate::is_on_band
bool is_on_band() const
Definition form_lazy_terminal.h:206
rheolef::details::form_lazy_terminal_integrate::get_band
band_type get_band() const
Definition form_lazy_terminal.h:207
rheolef::details::form_lazy_terminal_integrate::get_geo
const geo_type & get_geo() const
Definition form_lazy_terminal.h:203
rheolef::details::form_lazy_terminal_integrate::base1
smart_pointer_nocopy< rep > base1
Definition form_lazy_terminal.h:181
rheolef::details::form_lazy_terminal_integrate::form_lazy_terminal_integrate
form_lazy_terminal_integrate(const geo_type &domain, const Expr &expr, const integrate_option &iopt)
Definition form_lazy_terminal.h:193
rheolef::details::form_lazy_terminal_integrate::scalar_type
typename rep::scalar_type scalar_type
Definition form_lazy_terminal.h:185
rheolef::details::form_lazy_terminal_integrate::rep
form_lazy_terminal_integrate_rep< Expr > rep
Definition form_lazy_terminal.h:180
rheolef::details::form_lazy_terminal_integrate::matrix_element_type
typename rep::matrix_element_type matrix_element_type
Definition form_lazy_terminal.h:189
rheolef::field_basic
Definition field.h:219
rheolef::geo_element
see the geo_element page for the full documentation
Definition geo_element.h:102
rheolef::geo_element::size_type
reference_element::size_type size_type
Definition geo_element.h:125
rheolef::geo_element::dis_ie
size_type dis_ie() const
Definition geo_element.h:163
rheolef::geo_element::name
char name() const
Definition geo_element.h:169
rheolef::integrate_option
see the integrate_option page for the full documentation
Definition integrate_option.h:125
rheolef::smart_pointer_nocopy
Definition smart_pointer.h:389
trace_macro
#define trace_macro(message)
Definition dis_macros.h:111
get_geo
void get_geo(istream &in, my_geo &omega)
Definition field2gmsh_pos.cc:126
check_macro
check_macro(expr1.have_homogeneous_space(Xh1), "dual(expr1,expr2); expr1 should have homogeneous space. HINT: use dual(interpolate(Xh, expr1),expr2)")
rheolef
This file is part of Rheolef.
Definition compiler_eigen.h:39
rheolef::lazy_integrate
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
Definition field_lazy_terminal.h:588
std
STL namespace.
rheolef::details::is_field_lazy
Definition field_concept.h:70
rheolef::details::is_form_expr_quadrature_arg
Definition form_expr_quadrature.h:101
rheolef::details::is_form_lazy
Definition form.h:137
rheolef::float_traits::type
T type
Definition Float.h:94