108 const geo_basic<T,M>& bgd_omega = Xh.get_constitution().get_background_geo();
111 "do_integrate: incompatible integration domain "<<omega.name() <<
" and test function based domain "
112 << bgd_omega.name());
117 expr.initialize (
gh, iopt);
119 expr.initialize (omega, iopt);
121 expr.template valued_check<T>();
124 std::vector<size_type> dis_idx;
125 Eigen::Matrix<T,Eigen::Dynamic,1> lk;
128 if (Xh.get_constitution().is_discontinuous()) Xh.get_constitution().neighbour_guard();
132 for (
size_type ie = 0, ne = omega.size(map_d); ie < ne; ie++) {
133 const geo_element& K = omega.get_geo_element (map_d, ie);
138 Xh.get_constitution().assembly_dis_idof (omega, K, dis_idx);
142 Xh.dis_idof (L, dis_idx);
147 expr.evaluate (omega, K, lk);
152 "incompatible sizes dis_idx("<<dis_idx.size()<<
") and lk("<<lk.size()<<
")");
153 for (
size_type loc_idof = 0, loc_ndof = lk.size(); loc_idof < loc_ndof; loc_idof++) {
154 const T& value = lk [loc_idof];
156 size_type dis_iub = Xh.dis_idof2dis_iub(dis_idof);
157 if (Xh.dis_is_blocked(dis_idof)) b.dis_entry(dis_iub) += value;
158 else u.dis_entry(dis_iub) += value;
164 u.dis_entry_assembly(details::generic_set_plus_op());
165 b.dis_entry_assembly(details::generic_set_plus_op());
void do_integrate_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)
check_macro(expr1.have_homogeneous_space(Xh1), "dual(expr1,expr2); expr1 should have homogeneous space. HINT: use dual(interpolate(Xh, expr1),expr2)")