1 #ifndef _RHEO_FIELD_VF_ASSEMBLY_H
2 #define _RHEO_FIELD_VF_ASSEMBLY_H
23 #include "rheolef/field.h"
24 #include "rheolef/test.h"
25 #include "rheolef/integrate_option.h"
26 #include "rheolef/field_expr_quadrature.h"
92 template <
class T,
class M>
107 const geo_basic<T,M>& bgd_omega = Xh.get_constitution().get_background_geo();
110 "assembly: incompatible integration domain "<<omega.name() <<
" and test function based domain "
111 << bgd_omega.name());
116 expr.initialize (
gh, iopt);
118 expr.initialize (omega, iopt);
120 expr.template valued_check<T>();
123 std::vector<size_type> dis_idx;
124 Eigen::Matrix<T,Eigen::Dynamic,1> lk;
127 if (Xh.get_constitution().is_discontinuous()) Xh.get_constitution().neighbour_guard();
131 for (
size_type ie = 0, ne = omega.size(map_d); ie < ne; ie++) {
132 const geo_element& K = omega.get_geo_element (map_d, ie);
137 Xh.get_constitution().assembly_dis_idof (omega, K, dis_idx);
141 Xh.dis_idof (
L, dis_idx);
146 expr.evaluate (omega, K, lk);
151 "incompatible sizes dis_idx("<<dis_idx.size()<<
") and lk("<<lk.size()<<
")");
152 for (
size_type loc_idof = 0, loc_ndof = lk.size(); loc_idof < loc_ndof; loc_idof++) {
153 const T& value = lk [loc_idof];
156 if (Xh.dis_is_blocked(
dis_idof))
b.dis_entry(dis_iub) += value;
157 else u.dis_entry(dis_iub) += value;
166 template <
class T,
class M>
167 template <
class Expr>
177 template <
class T,
class M>
178 template <
class Expr>
186 assembly_internal (
gh.level_set(),
gh.band(),
gh,
expr, iopt,
true);
field gh(Float epsilon, Float t, const field &uh, const test &v)
see the band page for the full documentation
void assembly_internal(const geo_basic< T, M > &dom, const geo_basic< T, M > &band, const band_basic< T, M > &gh, const Expr &expr, const integrate_option &qopt, bool is_on_band)
see the geo_element page for the full documentation
see the integrate_option page for the full documentation
check_macro(expr1.have_homogeneous_space(Xh1), "dual(expr1,expr2); expr1 should have homogeneous space. HINT: use dual(interpolate(Xh, expr1),expr2)")
void dis_idof(const basis_basic< T > &b, const geo_size &gs, const geo_element &K, typename std::vector< size_type >::iterator dis_idof_tab)
This file is part of Rheolef.