51 size_type dis_ie = _locator.seq_locate (*
this,y);
52 if (dis_ie != std::numeric_limits<size_type>::max()) {
57 bool hit = _tracer_ray_boundary.seq_trace_ray_boundary (*
this, x, v, y);
60 dis_ie = _locator.seq_locate (*
this,y);
61 check_macro (dis_ie != std::numeric_limits<size_type>::max(),
"invalid ray computation");
65 dis_ie = _locator.seq_locate (*
this,y);
66 if (dis_ie != std::numeric_limits<size_type>::max()) {
72 dis_ie = seq_nearest (y, y_nearest);
73 if (dis_ie != std::numeric_limits<size_type>::max()) {
79 return std::numeric_limits<size_type>::max();
89 size_type dis_ie = _locator.dis_locate (*
this,y);
90 if (dis_ie != std::numeric_limits<size_type>::max()) {
95 bool hit = _tracer_ray_boundary.dis_trace_ray_boundary (*
this, x, v, y);
98 dis_ie = _locator.dis_locate (*
this,y);
99 check_macro (dis_ie != std::numeric_limits<size_type>::max(),
"invalid ray computation");
104 return std::numeric_limits<size_type>::max();
135 check_macro (x.ownership() == v.ownership(),
"invalid ranges for x and v argumenst");
136 if (dis_ie.ownership() != x.ownership()) dis_ie.resize (x.ownership());
137 y.resize (x.ownership());
141 for (
size_type i = 0, n = x.size(); i < n; i++) {
144 bool do_stop_when_failed =
false;
146 locate (y, dis_ie, do_stop_when_failed);
151 std::list<size_type> failed;
152 for (
size_type i = 0, n = x.size(); i < n; i++) {
153 if (dis_ie[i] != std::numeric_limits<size_type>::max())
continue;
155 failed.push_back (i);
158 if (fld_ownership.
dis_size() == 0) {
167 typename std::list<size_type>::const_iterator iter = failed.begin();
168 for (
size_type fld_i = 0, fld_n = fld_x.size(); fld_i < fld_n; ++fld_i, ++iter) {
170 fld_x [fld_i] = x[i];
171 fld_v [fld_i] = v[i];
173 do_stop_when_failed =
true;
175 trace_ray_boundary (fld_x, fld_v, fld_dis_ie, fld_y, do_stop_when_failed);
177 << fld_x.dis_size() <<
"/" << x.dis_size() <<
" = "
178 << 1.0*fld_x.dis_size()/x.dis_size());
182 iter = failed.begin();
183 for (
size_type fld_i = 0, fld_n = fld_x.size(); fld_i < fld_n; ++fld_i, ++iter) {
185 dis_ie[i] = fld_dis_ie [fld_i];
186 y[i] = fld_y [fld_i];
check_macro(expr1.have_homogeneous_space(Xh1), "dual(expr1,expr2); expr1 should have homogeneous space. HINT: use dual(interpolate(Xh, expr1),expr2)")