MOAB: Mesh Oriented datABase  (version 5.5.0)
read_cgm_senses_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 #include "MBTagConventions.hpp"
10 #include "moab/GeomTopoTool.hpp"
11 #include "InitCGMA.hpp"
12 #include "GeometryQueryTool.hpp"
13 #include "CGMConfig.h"
14 
15 #define SENSE_FORWARD 1
16 #define SENSE_REVERSE ( -1 )
17 #define SENSE_UNKNOWN 0
18 using namespace moab;
19 
20 #define CHKERR( A ) \
21  do \
22  { \
23  if( MB_SUCCESS != ( A ) ) \
24  { \
25  std::cerr << "Failure (error code " << ( A ) << ") at " __FILE__ ":" << __LINE__ << std::endl; \
26  return A; \
27  } \
28  } while( false )
29 
30 #ifdef HAVE_OCC_STEP
31 std::string input_cylcube = TestDir + "unittest/io/cylcube.stp";
32 #else
33 std::string input_cylcube = TestDir + "unittest/io/cylcube.sat";
34 #endif
35 
36 // Function used to load the test file
37 void read_file( Interface* moab, const char* input_file );
38 
39 // Functions containing known sense data
41  EntityHandle curve,
42  std::vector< int >& surf_ids_out,
43  std::vector< int >& senses_out );
45  EntityHandle curve,
46  std::vector< int >& surf_ids_out,
47  std::vector< int >& senses_out );
49  EntityHandle curve,
50  std::vector< int >& surf_ids_out,
51  std::vector< int >& senses_out );
53  EntityHandle surf,
54  std::vector< int >& vol_ids_out,
55  std::vector< int >& senses_out );
57  EntityHandle surf,
58  std::vector< int >& vol_ids_out,
59  std::vector< int >& senses_out );
61  EntityHandle surf,
62  std::vector< int >& vol_ids_out,
63  std::vector< int >& senses_out );
64 
65 // Functions used to compare sense information found in
66 // the model to reference information
68  std::vector< EntityHandle > wrt_ents,
69  std::vector< int > senses,
70  std::vector< int > known_wrt_ids,
71  std::vector< int > known_senses );
72 
73 // Function used to get id's from entity handles
74 int geom_id_by_handle( Interface* moab, const EntityHandle set );
75 
76 // List of tests in this file
80 
81 int main( int /* argc */, char** /* argv */ )
82 {
83  int result = 0;
84 
87 
88  return result;
89 }
90 
91 void read_file( Interface* moab, const char* input_file )
92 {
93  InitCGMA::initialize_cgma();
94  GeometryQueryTool::instance()->delete_geometry();
95 
96  ErrorCode rval = moab->load_file( input_file );CHECK_ERR( rval );
97 }
98 
99 // Gets the sense data for each curve from a file
100 // containing a cube and a cylinder. It then checks
101 // that this sense data matches the reference
102 // sense data from prior file reads.
104 {
105  ErrorCode rval;
106  // Open the test file
107  Core moab;
108  Interface* mb = &moab;
109  read_file( mb, input_cylcube.c_str() );
110 
111  // Get all curve handles
112  Tag geom_tag;
115 
116  // Check that the proper number of curves exist
117  int dim = 1;
118  void* val[] = { &dim };
119  int number_of_curves;
120  rval = mb->get_number_entities_by_type_and_tag( 0, MBENTITYSET, &geom_tag, val, 1, number_of_curves );CHECK_ERR( rval );
121  // Step format adds a surface on the barrel of the cylinder.
122  // This created 4 extra surfaces in comparison to the .sat format from Cubit.
123  //(New surface breaks the barrel of the cylinder into two half-pipes)
124 #ifdef HAVE_OCC_STEP
125  CHECK_EQUAL( 18, number_of_curves );
126 #else
127  CHECK_EQUAL( 14, number_of_curves );
128 #endif
129 
130  // Get curve handles
131  Range curves;
132  rval = mb->get_entities_by_type_and_tag( 0, MBENTITYSET, &geom_tag, val, 1, curves );CHECK_ERR( rval );
133 
134  // Establish GeomTopoTool instance needed to get curve data
135  moab::GeomTopoTool gt( mb, false );
136  // Initialize vectors for sense checking
137  std::vector< EntityHandle > surfs;
138  std::vector< int > senses;
139  std::vector< int > known_surf_ids;
140  std::vector< int > known_senses;
141 
142  for( unsigned int i = 0; i < curves.size(); i++ )
143  {
144 
145  // Clean data from previous curve
146  surfs.clear();
147  senses.clear();
148  // Get sense info for the current curve
149  rval = gt.get_senses( curves[i], surfs, senses );CHECK_ERR( rval );
150 
151  // Clear reference data from previous curve
152  known_surf_ids.clear();
153  known_senses.clear();
154  // Load known curve-sense ID data
155 #ifdef HAVE_OCC_STEP
156  if( CGM_MAJOR_VERSION >= 14 )
157  {
158  rval = load_stp_curve_sense_data( mb, curves[i], known_surf_ids, known_senses );
159  }
160  else
161  {
162  rval = load_precgm14_stp_curve_sense_data( mb, curves[i], known_surf_ids, known_senses );
163  }
164  CHECK_ERR( rval );
165 #else
166  rval = load_sat_curve_sense_data( mb, curves[i], known_surf_ids, known_senses );CHECK_ERR( rval );
167 #endif
168 
169  // Check that each surf and sense has a match in the references
170  check_sense_data( mb, surfs, senses, known_surf_ids, known_senses );
171  }
172 }
173 
175 {
176 
177  ErrorCode rval;
178  // Get the id_tag handle
179  Tag id_tag = moab->globalId_tag();
180  // Load the ID for the EntHandle given to the function
181  int id;
182  rval = moab->tag_get_data( id_tag, &set, 1, &id );CHECK_ERR( rval );
183  return id;
184 }
185 
187  std::vector< EntityHandle > wrt_ents,
188  std::vector< int > senses,
189  std::vector< int > known_wrt_ids,
190  std::vector< int > known_senses )
191 {
192 
193  // Get ID's of the wrt entities
194  std::vector< int > wrt_ent_ids;
195  for( unsigned int i = 0; i < wrt_ents.size(); i++ )
196  {
197  wrt_ent_ids.push_back( geom_id_by_handle( moab, wrt_ents[i] ) );
198  }
199 
200  for( unsigned int i = 0; i < wrt_ent_ids.size(); i++ )
201  {
202  for( unsigned int j = 0; j < known_wrt_ids.size(); j++ )
203  {
204  if( wrt_ent_ids[i] == known_wrt_ids[j] )
205  {
206  // Make sure the senses of the matching wrt entities
207  // are correct
208  CHECK_EQUAL( senses[i], known_senses[j] );
209  // Once a wrt entity is matched with a known entity,
210  // remove it from the list
211  wrt_ent_ids.erase( wrt_ent_ids.begin() + i );
212  senses.erase( senses.begin() + i );
213  --i;
214  break;
215  }
216  }
217  }
218 
219  // After both loops are complete, known_wrt_ents should be empty
220  int leftovers = wrt_ent_ids.size();
221  CHECK_EQUAL( leftovers, 0 );
222 }
223 
224 // Loads two vectors with reference curve and curve_sense data
226  EntityHandle curve,
227  std::vector< int >& surf_ids_out,
228  std::vector< int >& senses_out )
229 {
230 
231  int curve_id = geom_id_by_handle( moab, curve );
232  switch( curve_id )
233  {
234  case 1:
235  surf_ids_out.push_back( 1 );
236  surf_ids_out.push_back( 6 );
237  senses_out.push_back( SENSE_FORWARD );
238  senses_out.push_back( SENSE_REVERSE );
239  break;
240 
241  case 2:
242  surf_ids_out.push_back( 1 );
243  surf_ids_out.push_back( 5 );
244  senses_out.push_back( SENSE_FORWARD );
245  senses_out.push_back( SENSE_REVERSE );
246  break;
247 
248  case 3:
249  surf_ids_out.push_back( 1 );
250  surf_ids_out.push_back( 4 );
251  senses_out.push_back( SENSE_FORWARD );
252  senses_out.push_back( SENSE_REVERSE );
253  break;
254 
255  case 4:
256  surf_ids_out.push_back( 1 );
257  surf_ids_out.push_back( 3 );
258  senses_out.push_back( SENSE_FORWARD );
259  senses_out.push_back( SENSE_REVERSE );
260  break;
261 
262  case 5:
263  surf_ids_out.push_back( 2 );
264  surf_ids_out.push_back( 6 );
265  senses_out.push_back( SENSE_FORWARD );
266  senses_out.push_back( SENSE_REVERSE );
267  break;
268 
269  case 6:
270  surf_ids_out.push_back( 2 );
271  surf_ids_out.push_back( 3 );
272  senses_out.push_back( SENSE_FORWARD );
273  senses_out.push_back( SENSE_REVERSE );
274  break;
275 
276  case 7:
277  surf_ids_out.push_back( 2 );
278  surf_ids_out.push_back( 4 );
279  senses_out.push_back( SENSE_FORWARD );
280  senses_out.push_back( SENSE_REVERSE );
281  break;
282 
283  case 8:
284  surf_ids_out.push_back( 2 );
285  surf_ids_out.push_back( 5 );
286  senses_out.push_back( SENSE_FORWARD );
287  senses_out.push_back( SENSE_REVERSE );
288  break;
289 
290  case 9:
291  surf_ids_out.push_back( 3 );
292  surf_ids_out.push_back( 4 );
293  senses_out.push_back( SENSE_FORWARD );
294  senses_out.push_back( SENSE_REVERSE );
295  break;
296 
297  case 10:
298  surf_ids_out.push_back( 3 );
299  surf_ids_out.push_back( 6 );
300  senses_out.push_back( SENSE_REVERSE );
301  senses_out.push_back( SENSE_FORWARD );
302  break;
303 
304  case 11:
305  surf_ids_out.push_back( 4 );
306  surf_ids_out.push_back( 5 );
307  senses_out.push_back( SENSE_FORWARD );
308  senses_out.push_back( SENSE_REVERSE );
309  break;
310 
311  case 12:
312  surf_ids_out.push_back( 5 );
313  surf_ids_out.push_back( 6 );
314  senses_out.push_back( SENSE_FORWARD );
315  senses_out.push_back( SENSE_REVERSE );
316  break;
317 
318  case 13:
319  surf_ids_out.push_back( 7 );
320  surf_ids_out.push_back( 8 );
321  senses_out.push_back( SENSE_REVERSE );
322  senses_out.push_back( SENSE_FORWARD );
323  break;
324 
325  case 14:
326  surf_ids_out.push_back( 7 );
327  surf_ids_out.push_back( 9 );
328  senses_out.push_back( SENSE_REVERSE );
329  senses_out.push_back( SENSE_FORWARD );
330  break;
331  default:
332  return MB_FAILURE;
333  }
334  return MB_SUCCESS;
335 }
336 
337 // Loads two vectors with reference curve and curve_sense data
339  EntityHandle curve,
340  std::vector< int >& surf_ids_out,
341  std::vector< int >& senses_out )
342 {
343 
344  int curve_id = geom_id_by_handle( moab, curve );
345  switch( curve_id )
346  {
347  case 1:
348  surf_ids_out.push_back( 1 );
349  surf_ids_out.push_back( 6 );
350  senses_out.push_back( SENSE_FORWARD );
351  senses_out.push_back( SENSE_FORWARD );
352  break;
353 
354  case 2:
355  surf_ids_out.push_back( 1 );
356  surf_ids_out.push_back( 5 );
357  senses_out.push_back( SENSE_FORWARD );
358  senses_out.push_back( SENSE_FORWARD );
359  break;
360 
361  case 3:
362  surf_ids_out.push_back( 1 );
363  surf_ids_out.push_back( 4 );
364  senses_out.push_back( SENSE_FORWARD );
365  senses_out.push_back( SENSE_FORWARD );
366  break;
367 
368  case 4:
369  surf_ids_out.push_back( 1 );
370  surf_ids_out.push_back( 3 );
371  senses_out.push_back( SENSE_FORWARD );
372  senses_out.push_back( SENSE_FORWARD );
373  break;
374 
375  case 5:
376  surf_ids_out.push_back( 2 );
377  surf_ids_out.push_back( 6 );
378  senses_out.push_back( SENSE_REVERSE );
379  senses_out.push_back( SENSE_FORWARD );
380  break;
381 
382  case 6:
383  surf_ids_out.push_back( 2 );
384  surf_ids_out.push_back( 5 );
385  senses_out.push_back( SENSE_REVERSE );
386  senses_out.push_back( SENSE_FORWARD );
387  break;
388 
389  case 7:
390  surf_ids_out.push_back( 2 );
391  surf_ids_out.push_back( 4 );
392  senses_out.push_back( SENSE_REVERSE );
393  senses_out.push_back( SENSE_FORWARD );
394  break;
395 
396  case 8:
397  surf_ids_out.push_back( 2 );
398  surf_ids_out.push_back( 3 );
399  senses_out.push_back( SENSE_REVERSE );
400  senses_out.push_back( SENSE_FORWARD );
401  break;
402 
403  case 9:
404  surf_ids_out.push_back( 3 );
405  surf_ids_out.push_back( 4 );
406  senses_out.push_back( SENSE_REVERSE );
407  senses_out.push_back( SENSE_FORWARD );
408  break;
409 
410  case 10:
411  surf_ids_out.push_back( 3 );
412  surf_ids_out.push_back( 6 );
413  senses_out.push_back( SENSE_FORWARD );
414  senses_out.push_back( SENSE_REVERSE );
415  break;
416 
417  case 11:
418  surf_ids_out.push_back( 4 );
419  surf_ids_out.push_back( 5 );
420  senses_out.push_back( SENSE_REVERSE );
421  senses_out.push_back( SENSE_FORWARD );
422  break;
423 
424  case 12:
425  surf_ids_out.push_back( 5 );
426  surf_ids_out.push_back( 6 );
427  senses_out.push_back( SENSE_REVERSE );
428  senses_out.push_back( SENSE_FORWARD );
429  break;
430 
431  case 13:
432  surf_ids_out.push_back( 7 );
433  surf_ids_out.push_back( 8 );
434  senses_out.push_back( SENSE_REVERSE );
435  senses_out.push_back( SENSE_FORWARD );
436  break;
437 
438  case 14:
439  surf_ids_out.push_back( 7 );
440  surf_ids_out.push_back( 9 );
441  senses_out.push_back( SENSE_REVERSE );
442  senses_out.push_back( SENSE_FORWARD );
443  break;
444  case 15:
445  surf_ids_out.push_back( 7 );
446  surf_ids_out.push_back( 8 );
447  senses_out.push_back( SENSE_REVERSE );
448  senses_out.push_back( SENSE_FORWARD );
449  break;
450  case 16:
451  surf_ids_out.push_back( 7 );
452  surf_ids_out.push_back( 10 );
453  senses_out.push_back( SENSE_REVERSE );
454  senses_out.push_back( SENSE_FORWARD );
455  break;
456  case 17:
457  surf_ids_out.push_back( 8 );
458  surf_ids_out.push_back( 10 );
459  senses_out.push_back( SENSE_REVERSE );
460  senses_out.push_back( SENSE_FORWARD );
461  break;
462  case 18:
463  surf_ids_out.push_back( 8 );
464  surf_ids_out.push_back( 9 );
465  senses_out.push_back( SENSE_REVERSE );
466  senses_out.push_back( SENSE_FORWARD );
467  break;
468  default:
469  return MB_FAILURE;
470  }
471  return MB_SUCCESS;
472 }
473 
475  EntityHandle curve,
476  std::vector< int >& surf_ids_out,
477  std::vector< int >& senses_out )
478 {
479 
480  int curve_id = geom_id_by_handle( moab, curve );
481  switch( curve_id )
482  {
483  case 1:
484  surf_ids_out.push_back( 1 );
485  surf_ids_out.push_back( 6 );
486  senses_out.push_back( SENSE_FORWARD );
487  senses_out.push_back( SENSE_REVERSE );
488  break;
489 
490  case 2:
491  surf_ids_out.push_back( 1 );
492  surf_ids_out.push_back( 5 );
493  senses_out.push_back( SENSE_FORWARD );
494  senses_out.push_back( SENSE_REVERSE );
495  break;
496 
497  case 3:
498  surf_ids_out.push_back( 1 );
499  surf_ids_out.push_back( 4 );
500  senses_out.push_back( SENSE_FORWARD );
501  senses_out.push_back( SENSE_REVERSE );
502  break;
503 
504  case 4:
505  surf_ids_out.push_back( 1 );
506  surf_ids_out.push_back( 3 );
507  senses_out.push_back( SENSE_FORWARD );
508  senses_out.push_back( SENSE_REVERSE );
509  break;
510 
511  case 5:
512  surf_ids_out.push_back( 2 );
513  surf_ids_out.push_back( 6 );
514  senses_out.push_back( SENSE_FORWARD );
515  senses_out.push_back( SENSE_REVERSE );
516  break;
517 
518  case 6:
519  surf_ids_out.push_back( 2 );
520  surf_ids_out.push_back( 3 );
521  senses_out.push_back( SENSE_FORWARD );
522  senses_out.push_back( SENSE_REVERSE );
523  break;
524 
525  case 7:
526  surf_ids_out.push_back( 2 );
527  surf_ids_out.push_back( 4 );
528  senses_out.push_back( SENSE_FORWARD );
529  senses_out.push_back( SENSE_REVERSE );
530  break;
531 
532  case 8:
533  surf_ids_out.push_back( 2 );
534  surf_ids_out.push_back( 5 );
535  senses_out.push_back( SENSE_FORWARD );
536  senses_out.push_back( SENSE_REVERSE );
537  break;
538 
539  case 9:
540  surf_ids_out.push_back( 3 );
541  surf_ids_out.push_back( 4 );
542  senses_out.push_back( SENSE_FORWARD );
543  senses_out.push_back( SENSE_REVERSE );
544  break;
545 
546  case 10:
547  surf_ids_out.push_back( 3 );
548  surf_ids_out.push_back( 6 );
549  senses_out.push_back( SENSE_REVERSE );
550  senses_out.push_back( SENSE_FORWARD );
551  break;
552 
553  case 11:
554  surf_ids_out.push_back( 4 );
555  surf_ids_out.push_back( 5 );
556  senses_out.push_back( SENSE_FORWARD );
557  senses_out.push_back( SENSE_REVERSE );
558  break;
559 
560  case 12:
561  surf_ids_out.push_back( 5 );
562  surf_ids_out.push_back( 6 );
563  senses_out.push_back( SENSE_FORWARD );
564  senses_out.push_back( SENSE_REVERSE );
565  break;
566 
567  case 13:
568  surf_ids_out.push_back( 7 );
569  surf_ids_out.push_back( 8 );
570  senses_out.push_back( SENSE_REVERSE );
571  senses_out.push_back( SENSE_FORWARD );
572  break;
573 
574  case 14:
575  surf_ids_out.push_back( 7 );
576  surf_ids_out.push_back( 9 );
577  senses_out.push_back( SENSE_REVERSE );
578  senses_out.push_back( SENSE_FORWARD );
579  break;
580  case 15:
581  surf_ids_out.push_back( 7 );
582  surf_ids_out.push_back( 8 );
583  senses_out.push_back( SENSE_REVERSE );
584  senses_out.push_back( SENSE_FORWARD );
585  break;
586  case 16:
587  surf_ids_out.push_back( 7 );
588  surf_ids_out.push_back( 10 );
589  senses_out.push_back( SENSE_REVERSE );
590  senses_out.push_back( SENSE_FORWARD );
591  break;
592  case 17:
593  surf_ids_out.push_back( 8 );
594  surf_ids_out.push_back( 10 );
595  senses_out.push_back( SENSE_REVERSE );
596  senses_out.push_back( SENSE_FORWARD );
597  break;
598  case 18:
599  surf_ids_out.push_back( 8 );
600  surf_ids_out.push_back( 9 );
601  senses_out.push_back( SENSE_REVERSE );
602  senses_out.push_back( SENSE_FORWARD );
603  break;
604  default:
605  return MB_FAILURE;
606  }
607  return MB_SUCCESS;
608 }
609 
610 // SURFACE SENSE CHECKING
611 // Gets the sense data for each surface from a file
612 // containing a cube and a cylinder. It then checks
613 // that this sense data matches the reference
614 // sense data from prior file reads.
616 {
617  ErrorCode rval;
618  // Open the test file
619  Core moab;
620  Interface* mb = &moab;
621  read_file( mb, input_cylcube.c_str() );
622 
623  // Get geometry tag for gathering surface information from the mesh
624  Tag geom_tag;
627 
628  // Check that the proper number of surfaces exist
629  int dim = 2;
630  void* val[] = { &dim };
631  int number_of_surfs;
632  rval = mb->get_number_entities_by_type_and_tag( 0, MBENTITYSET, &geom_tag, val, 1, number_of_surfs );CHECK_ERR( rval );
633  // Step format adds a surface on barrel of the cylinder.
634  // (Breaks it into two half-pipes)
635 #ifdef HAVE_OCC_STEP
636  CHECK_EQUAL( 10, number_of_surfs );
637 #else
638  CHECK_EQUAL( 9, number_of_surfs );
639 #endif
640  // Get surface handles
641  Range surfs;
642  rval = mb->get_entities_by_type_and_tag( 0, MBENTITYSET, &geom_tag, val, 1, surfs );CHECK_ERR( rval );
643 
644  // Establish GeomTopoTool instance needed to get surf data
645  moab::GeomTopoTool gt( mb, false );
646  std::vector< EntityHandle > vols;
647  std::vector< int > senses;
648  std::vector< int > known_vol_ids;
649  std::vector< int > known_senses;
650 
651  for( unsigned int i = 0; i < surfs.size(); i++ )
652  {
653  // Clean data from previous surface
654  vols.clear();
655  senses.clear();
656  // Get sense information for the current
657  // surface from the mesh
658  rval = gt.get_senses( surfs[i], vols, senses );CHECK_ERR( rval );
659  // Clear previous reverence data
660  known_vol_ids.clear();
661  known_senses.clear();
662  // Load known surface-volume data
663  // for this surface and check that it's correct
664 #ifdef HAVE_OCC_STEP
665  if( CGM_MAJOR_VERSION >= 14 )
666  {
667  rval = load_stp_surf_sense_data( mb, surfs[i], known_vol_ids, known_senses );
668  }
669  else
670  {
671  rval = load_precgm14_stp_surf_sense_data( mb, surfs[i], known_vol_ids, known_senses );
672  }
673  CHECK_ERR( rval );
674 #else
675  rval = load_sat_surf_sense_data( mb, surfs[i], known_vol_ids, known_senses );CHECK_ERR( rval );
676 #endif
677  // Check sense information from the loaded mesh against
678  // reference sense information
679  check_sense_data( mb, vols, senses, known_vol_ids, known_senses );
680  }
681 }
682 
683 // Loads reference surface to volume sense data into the reference vectors
685  EntityHandle surf,
686  std::vector< int >& vol_ids_out,
687  std::vector< int >& senses_out )
688 {
689 
690  int surf_id = geom_id_by_handle( moab, surf );
691  switch( surf_id )
692  {
693  case 1:
694  vol_ids_out.push_back( 1 );
695  senses_out.push_back( SENSE_FORWARD );
696  break;
697 
698  case 2:
699  vol_ids_out.push_back( 1 );
700  senses_out.push_back( SENSE_FORWARD );
701  break;
702 
703  case 3:
704  vol_ids_out.push_back( 1 );
705  senses_out.push_back( SENSE_FORWARD );
706  break;
707 
708  case 4:
709  vol_ids_out.push_back( 1 );
710  senses_out.push_back( SENSE_FORWARD );
711  break;
712 
713  case 5:
714  vol_ids_out.push_back( 1 );
715  senses_out.push_back( SENSE_FORWARD );
716  break;
717 
718  case 6:
719  vol_ids_out.push_back( 1 );
720  senses_out.push_back( SENSE_FORWARD );
721  break;
722 
723  case 7:
724  vol_ids_out.push_back( 2 );
725  senses_out.push_back( SENSE_FORWARD );
726  break;
727 
728  case 8:
729  vol_ids_out.push_back( 2 );
730  senses_out.push_back( SENSE_FORWARD );
731  break;
732 
733  case 9:
734  vol_ids_out.push_back( 2 );
735  senses_out.push_back( SENSE_FORWARD );
736  break;
737  default:
738  return MB_FAILURE;
739  }
740  return MB_SUCCESS;
741 }
742 
743 // Loads reference surface to volume sense data into the reference vectors
745  EntityHandle surf,
746  std::vector< int >& vol_ids_out,
747  std::vector< int >& senses_out )
748 {
749 
750  int surf_id = geom_id_by_handle( moab, surf );
751  switch( surf_id )
752  {
753  case 1:
754  vol_ids_out.push_back( 1 );
755  senses_out.push_back( SENSE_FORWARD );
756  break;
757 
758  case 2:
759  vol_ids_out.push_back( 1 );
760  senses_out.push_back( SENSE_REVERSE );
761  break;
762 
763  case 3:
764  vol_ids_out.push_back( 1 );
765  senses_out.push_back( SENSE_REVERSE );
766  break;
767 
768  case 4:
769  vol_ids_out.push_back( 1 );
770  senses_out.push_back( SENSE_REVERSE );
771  break;
772 
773  case 5:
774  vol_ids_out.push_back( 1 );
775  senses_out.push_back( SENSE_REVERSE );
776  break;
777 
778  case 6:
779  vol_ids_out.push_back( 1 );
780  senses_out.push_back( SENSE_REVERSE );
781  break;
782 
783  case 7:
784  vol_ids_out.push_back( 2 );
785  senses_out.push_back( SENSE_FORWARD );
786  break;
787 
788  case 8:
789  vol_ids_out.push_back( 2 );
790  senses_out.push_back( SENSE_FORWARD );
791  break;
792 
793  case 9:
794  vol_ids_out.push_back( 2 );
795  senses_out.push_back( SENSE_FORWARD );
796  break;
797 
798  case 10:
799  vol_ids_out.push_back( 2 );
800  senses_out.push_back( SENSE_FORWARD );
801  break;
802  default:
803  std::cout << "Failure to find surface sense reference data. Returning failure..." << std::endl;
804  return MB_FAILURE;
805  }
806  return MB_SUCCESS;
807 }
808 
809 // Loads reference surface to volume sense data into the reference vectors
811  EntityHandle surf,
812  std::vector< int >& vol_ids_out,
813  std::vector< int >& senses_out )
814 {
815 
816  int surf_id = geom_id_by_handle( moab, surf );
817  switch( surf_id )
818  {
819  case 1:
820  case 2:
821  case 3:
822  case 4:
823  case 5:
824  case 6:
825  vol_ids_out.push_back( 1 );
826  senses_out.push_back( SENSE_FORWARD );
827  break;
828 
829  case 7:
830  case 8:
831  case 9:
832  case 10:
833  vol_ids_out.push_back( 2 );
834  senses_out.push_back( SENSE_FORWARD );
835  break;
836 
837  default:
838  std::cout << "Failure to find surface sense reference data. Returning failure..." << std::endl;
839  return MB_FAILURE;
840  }
841  return MB_SUCCESS;
842 }