4 #include "rheolef/geo.h"
8 template <
class T,
class M>
16 size_type dis_ie = _locator.seq_locate (*
this,y);
20 bool hit = _tracer_ray_boundary.seq_trace_ray_boundary (*
this, x, v, y);
22 dis_ie = _locator.seq_locate (*
this,y);
26 for (
size_t i = 0; i < _dimension; i++) {
27 y[i] = (v[i] < 0) ? _xmin[i] : _xmax[i];
29 dis_ie = _locator.seq_locate (*
this,y);
36 template <
class T,
class M>
44 size_type dis_ie = _locator.dis_locate (*
this,y);
48 bool hit = _tracer_ray_boundary.dis_trace_ray_boundary (*
this, x, v, y);
50 dis_ie = _locator.dis_locate (*
this,y);
62 array<size_type, sequential>& dis_ie,
65 check_macro (x.ownership() == v.ownership(),
"invalid ranges for x and v argumenst");
66 dis_ie.resize (x.ownership());
67 y.resize (x.ownership());
68 for (
size_type i = 0, n = x.size(); i < n; i++) {
69 dis_ie[i] = base::seq_trace_move (x[i], v[i], y[i]);
72 #ifdef _RHEOLEF_HAVE_MPI
78 array<size_type, distributed>& dis_ie,
82 check_macro (x.ownership() == v.ownership(),
"invalid ranges for x and v argumenst");
83 if (dis_ie.ownership() != x.ownership()) dis_ie.resize (x.ownership());
84 y.resize (x.ownership());
85 for (
size_type i = 0, n = x.size(); i < n; i++) {
88 bool do_stop_when_failed =
false;
90 locate (y, dis_ie, do_stop_when_failed);
91 std::list<size_type> failed;
92 for (
size_type i = 0, n = x.size(); i < n; i++) {
97 if (fld_ownership.dis_size() == 0) {
101 array<point_basic<T> > fld_x (fld_ownership);
102 array<point_basic<T> > fld_v (fld_ownership);
103 array<point_basic<T> > fld_y (fld_ownership);
105 typename std::list<size_type>::const_iterator iter = failed.begin();
106 for (
size_type fld_i = 0, fld_n = fld_x.size(); fld_i < fld_n; ++fld_i, ++iter) {
108 fld_x [fld_i] = x[i];
109 fld_v [fld_i] = v[i];
111 do_stop_when_failed =
true;
113 trace_ray_boundary (fld_x, fld_v, fld_dis_ie, fld_y, do_stop_when_failed);
115 << fld_x.dis_size() <<
"/" << x.dis_size() <<
" = "
116 << 1.0*fld_x.dis_size()/x.dis_size());
117 iter = failed.begin();
118 for (
size_type fld_i = 0, fld_n = fld_x.size(); fld_i < fld_n; ++fld_i, ++iter) {
120 dis_ie[i] = fld_dis_ie [fld_i];
121 y[i] = fld_y [fld_i];
124 for (
size_type i = 0, n = x.size(); i < n; i++) {
126 "trace_move: localization failed");
131 #endif // _RHEOLEF_HAVE_MPI
134 #ifdef _RHEOLEF_HAVE_MPI
137 #endif // _RHEOLEF_HAVE_MPI