MOAB: Mesh Oriented datABase  (version 5.5.0)
gqt_pointinvol_test.cpp
Go to the documentation of this file.
1 #include <iostream>
2 #include "moab/Interface.hpp"
3 #ifndef IS_BUILDING_MB
4 #define IS_BUILDING_MB
5 #endif
6 #include "TestUtil.hpp"
7 #include "Internals.hpp"
8 #include "moab/Core.hpp"
9 
10 #include "moab/GeomQueryTool.hpp"
11 #include "moab/GeomTopoTool.hpp"
12 
13 using namespace moab;
14 
18 
19 #define CHKERR( A ) \
20  do \
21  { \
22  if( MB_SUCCESS != ( A ) ) \
23  { \
24  std::cerr << "Failure (error code " << ( A ) << ") at " __FILE__ ":" << __LINE__ << std::endl; \
25  return A; \
26  } \
27  } while( false )
28 
29 const std::string input_file = TestDir + "unittest/test_geom.h5m";
30 
32 {
33  MBI = new Core();
34  ErrorCode rval = MBI->load_file( input_file.c_str() );CHECK_ERR( rval );
35 
36  GTT = new GeomTopoTool( MBI );
37  GQT = new GeomQueryTool( GTT );
38  rval = GQT->initialize();CHECK_ERR( rval );
39 }
40 
42 {
43  int result = 0;
44  int expected_result = 1;
45  double xyz[3] = { 0.0, 0.0, 0.0 };
46  int vol_idx = 1;
47  EntityHandle vol_h = GQT->gttool()->entity_by_id( 3, vol_idx );
48  ErrorCode rval = GQT->point_in_volume( vol_h, xyz, result );CHECK_ERR( rval );
49  CHECK_EQUAL( expected_result, result );
50 }
51 
52 int gqt_point_in_vol_dir( double origin[3], double dir[3], int vol_idx )
53 {
54  int result = 0;
55  EntityHandle vol_h = GQT->gttool()->entity_by_id( 3, vol_idx );
56  double xyz[3];
57  double next_surf_dist;
58  EntityHandle next_surf;
59 
60  // normalise the vector
61  double dir_norm = ( dir[0] * dir[0] ) + ( dir[1] * dir[1] ) + ( dir[2] * dir[2] );
62 
63  dir[0] = dir[0] / sqrt( dir_norm );
64  dir[1] = dir[1] / sqrt( dir_norm );
65  dir[2] = dir[2] / sqrt( dir_norm );
66 
67  ErrorCode rval = GQT->ray_fire( vol_h, origin, dir, next_surf, next_surf_dist );CHECK_ERR( rval );
68 
69  xyz[0] = origin[0] + ( next_surf_dist * dir[0] );
70  xyz[1] = origin[1] + ( next_surf_dist * dir[1] );
71  xyz[2] = origin[2] + ( next_surf_dist * dir[2] );
72 
73  std::cout << xyz[0] << " " << xyz[1] << " " << xyz[2] << std::endl;
74 
75  rval = GQT->point_in_volume( vol_h, xyz, result, dir );CHECK_ERR( rval );
76  return result;
77 }
78 
80 {
81  double dir[3] = { -1.0, 0.0, 0.0 };
82  double origin[3] = { 0.0, 0.0, 0.0 };
83  int vol_idx = 1;
84  int expected_result = 1;
85 
86  int result = gqt_point_in_vol_dir( origin, dir, vol_idx );
87  CHECK_EQUAL( expected_result, result );
88 }
89 
91 {
92  int expected_result = 1;
93  int vol_idx = 1;
94  double dir[3] = { 1.0, 0.0, 0.0 };
95  double origin[3] = { 0.0, 0.0, 0.0 };
96 
97  int result = gqt_point_in_vol_dir( origin, dir, vol_idx );
98 
99  CHECK_EQUAL( expected_result, result );
100 }
101 
103 {
104  int expected_result = 1;
105  int vol_idx = 1;
106  double dir[3] = { 0.0, -1.0, 0.0 };
107  double origin[3] = { 0.0, 0.0, 0.0 };
108 
109  int result = gqt_point_in_vol_dir( origin, dir, vol_idx );
110 
111  CHECK_EQUAL( expected_result, result );
112 }
113 
115 {
116  int expected_result = 1;
117  int vol_idx = 1;
118  double dir[3] = { 0.0, 1.0, 0.0 };
119  double origin[3] = { 0.0, 0.0, 0.0 };
120 
121  int result = gqt_point_in_vol_dir( origin, dir, vol_idx );
122 
123  CHECK_EQUAL( expected_result, result );
124 }
125 
127 {
128  int expected_result = 1;
129  int vol_idx = 1;
130  double dir[3] = { 0.0, 0.0, -1.0 };
131  double origin[3] = { 0.0, 0.0, 0.0 };
132 
133  int result = gqt_point_in_vol_dir( origin, dir, vol_idx );
134 
135  CHECK_EQUAL( expected_result, result );
136 }
137 
139 {
140  int expected_result = 1;
141  int vol_idx = 1;
142  double dir[3] = { 0.0, 0.0, 1.0 };
143  double origin[3] = { 0.0, 0.0, 0.0 };
144 
145  int result = gqt_point_in_vol_dir( origin, dir, vol_idx );
146 
147  CHECK_EQUAL( expected_result, result );
148 }
149 
151 {
152  int expected_result = 1;
153  int vol_idx = 1;
154  double dir[3] = { 1.0, 1.0, 1.0 };
155  double origin[3] = { 0.0, 0.0, 0.0 };
156 
157  int result = gqt_point_in_vol_dir( origin, dir, vol_idx );
158 
159  CHECK_EQUAL( expected_result, result );
160 }
161 
163 {
164  int expected_result = 1;
165  int vol_idx = 1;
166  double dir[3] = { -1.0, 1.0, 1.0 };
167  double origin[3] = { 0.0, 0.0, 0.0 };
168 
169  int result = gqt_point_in_vol_dir( origin, dir, vol_idx );
170 
171  CHECK_EQUAL( expected_result, result );
172 }
173 
175 {
176  int expected_result = 1;
177  int vol_idx = 1;
178  double dir[3] = { 1.0, 1.0, -1.0 };
179  double origin[3] = { 0.0, 0.0, 0.0 };
180 
181  int result = gqt_point_in_vol_dir( origin, dir, vol_idx );
182 
183  CHECK_EQUAL( expected_result, result );
184 }
185 
187 {
188  int expected_result = 1;
189  int vol_idx = 1;
190  double dir[3] = { -1.0, 1.0, -1.0 };
191  double origin[3] = { 0.0, 0.0, 0.0 };
192 
193  int result = gqt_point_in_vol_dir( origin, dir, vol_idx );
194 
195  CHECK_EQUAL( expected_result, result );
196 }
197 
199 {
200  int expected_result = 1;
201  int vol_idx = 1;
202  double dir[3] = { 1.0, -1.0, 1.0 };
203  double origin[3] = { 0.0, 0.0, 0.0 };
204 
205  int result = gqt_point_in_vol_dir( origin, dir, vol_idx );
206 
207  CHECK_EQUAL( expected_result, result );
208 }
209 
211 {
212  int expected_result = 1;
213  int vol_idx = 1;
214  double dir[3] = { -1.0, -1.0, 1.0 };
215  double origin[3] = { 0.0, 0.0, 0.0 };
216 
217  int result = gqt_point_in_vol_dir( origin, dir, vol_idx );
218 
219  CHECK_EQUAL( expected_result, result );
220 }
221 
223 {
224  int expected_result = 1;
225  int vol_idx = 1;
226  double dir[3] = { 1.0, -1.0, -1.0 };
227  double origin[3] = { 0.0, 0.0, 0.0 };
228 
229  int result = gqt_point_in_vol_dir( origin, dir, vol_idx );
230 
231  CHECK_EQUAL( expected_result, result );
232 }
233 
235 {
236  int expected_result = 1;
237  int vol_idx = 1;
238  double dir[3] = { -1.0, -1.0, -1.0 };
239  double origin[3] = { 0.0, 0.0, 0.0 };
240 
241  int result = gqt_point_in_vol_dir( origin, dir, vol_idx );
242 
243  CHECK_EQUAL( expected_result, result );
244 }
245 
246 int main( int /* argc */, char** /* argv */ )
247 {
248  int result = 0;
249 
250  result += RUN_TEST( gqt_setup_test ); // setup problem
251  result += RUN_TEST( gqt_point_in ); // point in centre
252  // rays fired along cardinal directions
253  result += RUN_TEST( gqt_point_in_vol_1 ); // point in centre
254  result += RUN_TEST( gqt_point_in_vol_2 ); // point in centre
255  result += RUN_TEST( gqt_point_in_vol_3 ); // point in centre
256  result += RUN_TEST( gqt_point_in_vol_4 ); // point in centre
257  result += RUN_TEST( gqt_point_in_vol_5 ); // point in centre
258  result += RUN_TEST( gqt_point_in_vol_6 ); // point in centre
259  // rays fired at nodes
260  result += RUN_TEST( gqt_point_on_corner_1 );
261  result += RUN_TEST( gqt_point_on_corner_2 );
262  result += RUN_TEST( gqt_point_on_corner_3 );
263  result += RUN_TEST( gqt_point_on_corner_4 );
264 
265  // result += RUN_TEST(dagmc_point_in({0.0, 0.0, 5.0}); // point in centre
266  // result += RUN_TEST(dagmc_point_in({0.0, 0.0, -5.0}); // point in centre
267  // result += RUN_TEST(dagmc_point_in({0.0, 5.0, 0.0}); // point in centre
268  // result += RUN_TEST(dagmc_point_in({0.0, -5.0, 0.0}); // point in centre
269  // result += RUN_TEST(dagmc_point_in({5.0, 0.0, 0.0}); // point in centre
270  // result += RUN_TEST(dagmc_point_in({-5.0, 0.0, 0.0}); // point in centre
271 
272  delete GQT;
273  delete GTT;
274  delete MBI;
275 
276  return result;
277 }