MOAB: Mesh Oriented datABase  (version 5.5.0)
dagmc_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 "DagMC.hpp"
11 
12 using namespace moab;
13 
14 using moab::DagMC;
15 
16 DagMC* DAG;
17 
18 #define CHKERR( A ) \
19  do \
20  { \
21  if( MB_SUCCESS != ( A ) ) \
22  { \
23  std::cerr << "Failure (error code " << ( A ) << ") at " __FILE__ ":" << __LINE__ << std::endl; \
24  return A; \
25  } \
26  } while( false )
27 
28 std::string input_file = TestDir + "unittest/test_geom.h5m";
29 
31 {
32  ErrorCode rval = DAG->load_file( input_file.c_str() ); // open the Dag file
33  CHECK_ERR( rval );
34  rval = DAG->init_OBBTree();CHECK_ERR( rval );
35 
36  /*
37  int num_vols = DAG->num_entities(3);
38  EntityHandle vol;
39  for (int i = 0; i < num_vols; i++)
40  vol = DAG->entity_by_index(3, i);
41  */
42  // EntityHandle volume = 12682136550675316765;
43  // CHECK_EQUAL(volume, vol);
44 }
45 
47 {
48  int result = 0;
49  int expected_result = 1;
50  double xyz[3] = { 0.0, 0.0, 0.0 };
51  int vol_idx = 1;
52  EntityHandle vol_h = DAG->entity_by_index( 3, vol_idx );
53  ErrorCode rval = DAG->point_in_volume( vol_h, xyz, result );CHECK_ERR( rval );
54  CHECK_EQUAL( expected_result, result );
55 }
56 
57 int dagmc_point_in_vol_dir( double origin[3], double dir[3], int vol_idx )
58 {
59  int result = 0;
60  EntityHandle vol_h = DAG->entity_by_index( 3, vol_idx );
61  double xyz[3];
62  double next_surf_dist;
63  EntityHandle next_surf;
64 
65  // normalise the vector
66  double dir_norm = ( dir[0] * dir[0] ) + ( dir[1] * dir[1] ) + ( dir[2] * dir[2] );
67 
68  dir[0] = dir[0] / sqrt( dir_norm );
69  dir[1] = dir[1] / sqrt( dir_norm );
70  dir[2] = dir[2] / sqrt( dir_norm );
71 
72  ErrorCode rval = DAG->ray_fire( vol_h, origin, dir, next_surf, next_surf_dist );CHECK_ERR( rval );
73 
74  xyz[0] = origin[0] + ( next_surf_dist * dir[0] );
75  xyz[1] = origin[1] + ( next_surf_dist * dir[1] );
76  xyz[2] = origin[2] + ( next_surf_dist * dir[2] );
77 
78  std::cout << xyz[0] << " " << xyz[1] << " " << xyz[2] << std::endl;
79 
80  rval = DAG->point_in_volume( vol_h, xyz, result, dir );CHECK_ERR( rval );
81  return result;
82 }
83 
85 {
86  double dir[3] = { -1.0, 0.0, 0.0 };
87  double origin[3] = { 0.0, 0.0, 0.0 };
88  int vol_idx = 1;
89  int expected_result = 1;
90 
91  int result = dagmc_point_in_vol_dir( origin, dir, vol_idx );
92  CHECK_EQUAL( expected_result, result );
93 }
94 
96 {
97  int expected_result = 1;
98  int vol_idx = 1;
99  double dir[3] = { 1.0, 0.0, 0.0 };
100  double origin[3] = { 0.0, 0.0, 0.0 };
101 
102  int result = dagmc_point_in_vol_dir( origin, dir, vol_idx );
103 
104  CHECK_EQUAL( expected_result, result );
105 }
106 
108 {
109  int expected_result = 1;
110  int vol_idx = 1;
111  double dir[3] = { 0.0, -1.0, 0.0 };
112  double origin[3] = { 0.0, 0.0, 0.0 };
113 
114  int result = dagmc_point_in_vol_dir( origin, dir, vol_idx );
115 
116  CHECK_EQUAL( expected_result, result );
117 }
118 
120 {
121  int expected_result = 1;
122  int vol_idx = 1;
123  double dir[3] = { 0.0, 1.0, 0.0 };
124  double origin[3] = { 0.0, 0.0, 0.0 };
125 
126  int result = dagmc_point_in_vol_dir( origin, dir, vol_idx );
127 
128  CHECK_EQUAL( expected_result, result );
129 }
130 
132 {
133  int expected_result = 1;
134  int vol_idx = 1;
135  double dir[3] = { 0.0, 0.0, -1.0 };
136  double origin[3] = { 0.0, 0.0, 0.0 };
137 
138  int result = dagmc_point_in_vol_dir( origin, dir, vol_idx );
139 
140  CHECK_EQUAL( expected_result, result );
141 }
142 
144 {
145  int expected_result = 1;
146  int vol_idx = 1;
147  double dir[3] = { 0.0, 0.0, 1.0 };
148  double origin[3] = { 0.0, 0.0, 0.0 };
149 
150  int result = dagmc_point_in_vol_dir( origin, dir, vol_idx );
151 
152  CHECK_EQUAL( expected_result, result );
153 }
154 
156 {
157  int expected_result = 1;
158  int vol_idx = 1;
159  double dir[3] = { 1.0, 1.0, 1.0 };
160  double origin[3] = { 0.0, 0.0, 0.0 };
161 
162  int result = dagmc_point_in_vol_dir( origin, dir, vol_idx );
163 
164  CHECK_EQUAL( expected_result, result );
165 }
166 
168 {
169  int expected_result = 1;
170  int vol_idx = 1;
171  double dir[3] = { -1.0, 1.0, 1.0 };
172  double origin[3] = { 0.0, 0.0, 0.0 };
173 
174  int result = dagmc_point_in_vol_dir( origin, dir, vol_idx );
175 
176  CHECK_EQUAL( expected_result, result );
177 }
178 
180 {
181  int expected_result = 1;
182  int vol_idx = 1;
183  double dir[3] = { 1.0, 1.0, -1.0 };
184  double origin[3] = { 0.0, 0.0, 0.0 };
185 
186  int result = dagmc_point_in_vol_dir( origin, dir, vol_idx );
187 
188  CHECK_EQUAL( expected_result, result );
189 }
190 
192 {
193  int expected_result = 1;
194  int vol_idx = 1;
195  double dir[3] = { -1.0, 1.0, -1.0 };
196  double origin[3] = { 0.0, 0.0, 0.0 };
197 
198  int result = dagmc_point_in_vol_dir( origin, dir, vol_idx );
199 
200  CHECK_EQUAL( expected_result, result );
201 }
202 
204 {
205  int expected_result = 1;
206  int vol_idx = 1;
207  double dir[3] = { 1.0, -1.0, 1.0 };
208  double origin[3] = { 0.0, 0.0, 0.0 };
209 
210  int result = dagmc_point_in_vol_dir( origin, dir, vol_idx );
211 
212  CHECK_EQUAL( expected_result, result );
213 }
214 
216 {
217  int expected_result = 1;
218  int vol_idx = 1;
219  double dir[3] = { -1.0, -1.0, 1.0 };
220  double origin[3] = { 0.0, 0.0, 0.0 };
221 
222  int result = dagmc_point_in_vol_dir( origin, dir, vol_idx );
223 
224  CHECK_EQUAL( expected_result, result );
225 }
226 
228 {
229  int expected_result = 1;
230  int vol_idx = 1;
231  double dir[3] = { 1.0, -1.0, -1.0 };
232  double origin[3] = { 0.0, 0.0, 0.0 };
233 
234  int result = dagmc_point_in_vol_dir( origin, dir, vol_idx );
235 
236  CHECK_EQUAL( expected_result, result );
237 }
238 
240 {
241  int expected_result = 1;
242  int vol_idx = 1;
243  double dir[3] = { -1.0, -1.0, -1.0 };
244  double origin[3] = { 0.0, 0.0, 0.0 };
245 
246  int result = dagmc_point_in_vol_dir( origin, dir, vol_idx );
247 
248  CHECK_EQUAL( expected_result, result );
249 }
250 
251 int main( int /* argc */, char** /* argv */ )
252 {
253  int result = 0;
254 
255  DAG = new DagMC();
256 
257  result += RUN_TEST( dagmc_setup_test ); // setup problem
258  result += RUN_TEST( dagmc_point_in ); // point in centre
259  // rays fired along cardinal directions
260  result += RUN_TEST( dagmc_point_in_vol_1 ); // point in centre
261  result += RUN_TEST( dagmc_point_in_vol_2 ); // point in centre
262  result += RUN_TEST( dagmc_point_in_vol_3 ); // point in centre
263  result += RUN_TEST( dagmc_point_in_vol_4 ); // point in centre
264  result += RUN_TEST( dagmc_point_in_vol_5 ); // point in centre
265  result += RUN_TEST( dagmc_point_in_vol_6 ); // point in centre
266  // rays fired at nodes
267  result += RUN_TEST( dagmc_point_on_corner_1 );
268  result += RUN_TEST( dagmc_point_on_corner_2 );
269  result += RUN_TEST( dagmc_point_on_corner_3 );
270  result += RUN_TEST( dagmc_point_on_corner_4 );
271 
272  // result += RUN_TEST(dagmc_point_in({0.0, 0.0, 5.0}); // point in centre
273  // result += RUN_TEST(dagmc_point_in({0.0, 0.0, -5.0}); // point in centre
274  // result += RUN_TEST(dagmc_point_in({0.0, 5.0, 0.0}); // point in centre
275  // result += RUN_TEST(dagmc_point_in({0.0, -5.0, 0.0}); // point in centre
276  // result += RUN_TEST(dagmc_point_in({5.0, 0.0, 0.0}); // point in centre
277  // result += RUN_TEST(dagmc_point_in({-5.0, 0.0, 0.0}); // point in centre
278 
279  delete DAG;
280 
281  return result;
282 }