MOAB: Mesh Oriented datABase  (version 5.5.0)
read_nc.cpp
Go to the documentation of this file.
1 #include "TestUtil.hpp"
2 #include "moab/Core.hpp"
3 
4 using namespace moab;
5 
6 std::string example_eul = TestDir + "unittest/io/eul3x48x96.t.3.nc";
7 std::string example_fv = TestDir + "unittest/io/fv3x46x72.t.3.nc";
8 std::string example_domain = TestDir + "unittest/io/domain.ocn.ne4np4_oQU240.160614.nc";
9 std::string example_scrip = TestDir + "unittest/io/ocean.QU.240km.scrip.151209.nc";
10 
11 #ifdef MOAB_HAVE_MPI
12 #include "moab_mpi.h"
13 #include "moab/ParallelComm.hpp"
14 #endif
15 
16 // CAM-EUL
17 void test_read_eul_all();
22 
23 // CAM-FV
24 void test_read_fv_all();
25 void test_read_fv_onevar();
27 void test_read_fv_nomesh();
28 void test_read_fv_novars();
29 #ifdef MOAB_HAVE_MPI
30 void test_read_fv_ghosting();
31 #endif
32 
33 // Domain file
34 void test_read_domain();
35 // scrip file
36 void test_read_scrip();
37 
38 ErrorCode get_options( std::string& opts );
39 
40 const int levels = 3;
41 
42 int main( int argc, char* argv[] )
43 {
44  int result = 0;
45 
46 #ifdef MOAB_HAVE_MPI
47  int fail = MPI_Init( &argc, &argv );
48  if( fail ) return 1;
49 #else
50  argv[0] = argv[argc - argc]; // To remove the warnings in serial mode about unused variables
51 #endif
52 
53  result += RUN_TEST( test_read_eul_all );
54  result += RUN_TEST( test_read_eul_onevar );
56  result += RUN_TEST( test_read_eul_nomesh );
57  result += RUN_TEST( test_read_eul_novars );
58  result += RUN_TEST( test_read_domain );
59  result += RUN_TEST( test_read_scrip );
60  // Exclude test_read_fv_all() since reading edge data is not implemented in MOAB yet
61  // result += RUN_TEST(test_read_fv_all);
62  result += RUN_TEST( test_read_fv_onevar );
64  result += RUN_TEST( test_read_fv_nomesh );
65  result += RUN_TEST( test_read_fv_novars );
66 
67 #ifdef MOAB_HAVE_MPI
68  // Before ghosting issues with ownership were fixed, this test failed on 4 processors
69  result += RUN_TEST( test_read_fv_ghosting );
70 #endif
71 
72 #ifdef MOAB_HAVE_MPI
73  fail = MPI_Finalize();
74  if( fail ) return 1;
75 #endif
76 
77  return result;
78 }
79 
81 {
82  Core moab;
83  Interface& mb = moab;
84 
85  std::string opts;
86  ErrorCode rval = get_options( opts );CHECK_ERR( rval );
87 
88  rval = mb.load_file( example_eul.c_str(), NULL, opts.c_str() );CHECK_ERR( rval );
89 
90  // Check for proper tags
91  Tag Ttag0, Ttag1, coordTag;
92  rval = mb.tag_get_handle( "T0", levels, MB_TYPE_DOUBLE, Ttag0 );CHECK_ERR( rval );
93 
94  rval = mb.tag_get_handle( "T1", levels, MB_TYPE_DOUBLE, Ttag1 );CHECK_ERR( rval );
95 
96  rval = mb.tag_get_handle( "COORDS", 3, MB_TYPE_DOUBLE, coordTag );CHECK_ERR( rval );
97 
98  // Check for some tags with double underscore in the tag name
99  Tag tempTag;
100  rval = mb.tag_get_handle( "__lon_LOC_MINMAX", 2, MB_TYPE_INTEGER, tempTag );CHECK_ERR( rval );
101 
102  rval = mb.tag_get_handle( "__lon_LOC_VALS", 0, MB_TYPE_DOUBLE, tempTag, MB_TAG_VARLEN );CHECK_ERR( rval );
103 
104  rval = mb.tag_get_handle( "__lon_GLOBAL_MINMAX", 2, MB_TYPE_INTEGER, tempTag );CHECK_ERR( rval );
105 }
106 
108 {
109  Core moab;
110  Interface& mb = moab;
111  std::string opts;
112  ErrorCode rval = get_options( opts );CHECK_ERR( rval );
113 
114  opts += std::string( ";VARIABLE=T" );
115  rval = mb.load_file( example_eul.c_str(), NULL, opts.c_str() );CHECK_ERR( rval );
116 
117  // Check for proper tags
118  Tag Ttag0, Ttag1;
119  rval = mb.tag_get_handle( "T0", levels, MB_TYPE_DOUBLE, Ttag0 );CHECK_ERR( rval );
120 
121  rval = mb.tag_get_handle( "T1", levels, MB_TYPE_DOUBLE, Ttag1 );CHECK_ERR( rval );
122 
123  // Check values of tag T0 (first level) at some strategically chosen places below
124 #ifdef MOAB_HAVE_MPI
125  ParallelComm* pcomm = ParallelComm::get_pcomm( &mb, 0 );
126  int rank = pcomm->proc_config().proc_rank();
127  int procs = pcomm->proc_config().proc_size();
128 #else
129  int rank = 0;
130  int procs = 1;
131 #endif
132 
133  const double eps = 0.0001;
134  double val[8 * levels];
135 
136  if( 1 == procs )
137  {
138  Range global_quads;
139  rval = mb.get_entities_by_type( 0, MBQUAD, global_quads );CHECK_ERR( rval );
140  CHECK_EQUAL( (size_t)4608, global_quads.size() );
141 
142  EntityHandle gloabl_quad_ents[] = { global_quads[0], global_quads[2255], global_quads[2304],
143  global_quads[4559], global_quads[48], global_quads[2303],
144  global_quads[2352], global_quads[4607] };
145  rval = mb.tag_get_data( Ttag0, &gloabl_quad_ents[0], 8, val );
146 
147  CHECK_REAL_EQUAL( 252.8529, val[0 * levels], eps ); // First global quad
148  CHECK_REAL_EQUAL( 234.8390, val[1 * levels], eps ); // 2256th global quad
149  CHECK_REAL_EQUAL( 232.6458, val[2 * levels], eps ); // 2305th global quad
150  CHECK_REAL_EQUAL( 205.3905, val[3 * levels], eps ); // 4560th global quad
151  CHECK_REAL_EQUAL( 252.7116, val[4 * levels], eps ); // 49th global quad
152  CHECK_REAL_EQUAL( 232.6670, val[5 * levels], eps ); // 2304th global quad
153  CHECK_REAL_EQUAL( 234.6922, val[6 * levels], eps ); // 2353th global quad
154  CHECK_REAL_EQUAL( 200.6828, val[7 * levels], eps ); // Last global quad
155  }
156  else if( 2 == procs )
157  {
158  Range local_quads;
159  rval = mb.get_entities_by_type( 0, MBQUAD, local_quads );CHECK_ERR( rval );
160  CHECK_EQUAL( (size_t)2304, local_quads.size() );
161 
162  EntityHandle local_quad_ents[] = { local_quads[0], local_quads[1151], local_quads[1152], local_quads[2303] };
163  rval = mb.tag_get_data( Ttag0, &local_quad_ents[0], 4, val );
164 
165  if( 0 == rank )
166  {
167  CHECK_REAL_EQUAL( 252.8529, val[0 * levels],
168  eps ); // First local quad, first global quad
169  CHECK_REAL_EQUAL( 234.8390, val[1 * levels],
170  eps ); // Median local quad, 2256th global quad
171  CHECK_REAL_EQUAL( 232.6458, val[2 * levels],
172  eps ); // Median local quad, 2305th global quad
173  CHECK_REAL_EQUAL( 205.3905, val[3 * levels],
174  eps ); // Last local quad, 4560th global quad
175  }
176  else if( 1 == rank )
177  {
178  CHECK_REAL_EQUAL( 252.7116, val[0 * levels],
179  eps ); // First local quad, 49th global quad
180  CHECK_REAL_EQUAL( 232.6670, val[1 * levels],
181  eps ); // Median local quad, 2304th global quad
182  CHECK_REAL_EQUAL( 234.6922, val[2 * levels],
183  eps ); // Median local quad, 2353th global quad
184  CHECK_REAL_EQUAL( 200.6828, val[3 * levels],
185  eps ); // Last local quad, last global quad
186  }
187  }
188 }
189 
191 {
192  Core moab;
193  Interface& mb = moab;
194  std::string opts;
195  ErrorCode rval = get_options( opts );CHECK_ERR( rval );
196 
197  opts += std::string( ";VARIABLE=T;TIMESTEP=1" );
198  rval = mb.load_file( example_eul.c_str(), NULL, opts.c_str() );CHECK_ERR( rval );
199 
200  // Check for proper tags
201  Tag Ttag0, Ttag1;
202  rval = mb.tag_get_handle( "T0", levels, MB_TYPE_DOUBLE, Ttag0 );
203  CHECK_EQUAL( rval, MB_TAG_NOT_FOUND );
204 
205  rval = mb.tag_get_handle( "T1", levels, MB_TYPE_DOUBLE, Ttag1 );CHECK_ERR( rval );
206 }
207 
209 {
210  Core moab;
211  Interface& mb = moab;
212 
213  // Need a set for nomesh to work right
214  EntityHandle set;
215  ErrorCode rval = mb.create_meshset( MESHSET_SET, set );CHECK_ERR( rval );
216 
217  std::string orig, opts;
218  rval = get_options( orig );CHECK_ERR( rval );
219 
220  opts = orig + std::string( ";VARIABLE=T;TIMESTEP=0" );
221  rval = mb.load_file( example_eul.c_str(), &set, opts.c_str() );CHECK_ERR( rval );
222 
223  // Check for proper tag
224  Tag Ttag0, Ttag1;
225  rval = mb.tag_get_handle( "T0", levels, MB_TYPE_DOUBLE, Ttag0 );CHECK_ERR( rval );
226 
227  rval = mb.tag_get_handle( "T1", levels, MB_TYPE_DOUBLE, Ttag1 );
228  CHECK_EQUAL( rval, MB_TAG_NOT_FOUND );
229 
230  // Now read 2nd timestep with nomesh option
231  opts = orig + std::string( ";VARIABLE=T;TIMESTEP=1;NOMESH" );
232  rval = mb.load_file( example_eul.c_str(), &set, opts.c_str() );CHECK_ERR( rval );
233 
234  // Check for proper tag
235  rval = mb.tag_get_handle( "T1", levels, MB_TYPE_DOUBLE, Ttag1 );CHECK_ERR( rval );
236 }
237 
239 {
240  Core moab;
241  Interface& mb = moab;
242 
243  // Need a set for nomesh to work right
244  EntityHandle set;
245  ErrorCode rval = mb.create_meshset( MESHSET_SET, set );CHECK_ERR( rval );
246 
247  std::string orig, opts;
248  rval = get_options( orig );CHECK_ERR( rval );
249 
250  opts = orig + std::string( ";NOMESH;VARIABLE=" );
251  rval = mb.load_file( example_eul.c_str(), &set, opts.c_str() );CHECK_ERR( rval );
252 
253  opts = orig + std::string( ";VARIABLE=;TIMESTEP=0" );
254  rval = mb.load_file( example_eul.c_str(), &set, opts.c_str() );CHECK_ERR( rval );
255 
256  // Check for proper tag
257  Tag Ttag0, Ttag1;
258  rval = mb.tag_get_handle( "T0", levels, MB_TYPE_DOUBLE, Ttag0 );
259  CHECK_EQUAL( rval, MB_TAG_NOT_FOUND );
260 
261  opts = orig + std::string( ";VARIABLE=T;TIMESTEP=0;NOMESH" );
262  rval = mb.load_file( example_eul.c_str(), &set, opts.c_str() );CHECK_ERR( rval );
263 
264  rval = mb.tag_get_handle( "T0", levels, MB_TYPE_DOUBLE, Ttag0 );CHECK_ERR( rval );
265 
266  rval = mb.tag_get_handle( "T1", levels, MB_TYPE_DOUBLE, Ttag1 );
267  CHECK_EQUAL( rval, MB_TAG_NOT_FOUND );
268 
269  // Now read 2nd timestep with nomesh option
270  opts = orig + std::string( ";VARIABLE=T;TIMESTEP=1;NOMESH" );
271  rval = mb.load_file( example_eul.c_str(), &set, opts.c_str() );CHECK_ERR( rval );
272 
273  // Check for proper tag
274  rval = mb.tag_get_handle( "T1", levels, MB_TYPE_DOUBLE, Ttag1 );CHECK_ERR( rval );
275 }
276 
278 {
279  Core moab;
280  Interface& mb = moab;
281 
282  std::string opts;
283  ErrorCode rval = get_options( opts );CHECK_ERR( rval );
284 
285  rval = mb.load_file( example_fv.c_str(), NULL, opts.c_str() );CHECK_ERR( rval );
286 
287  // Check for proper tags
288  Tag Ttag0, Ttag1, coordTag;
289  rval = mb.tag_get_handle( "T0", levels, MB_TYPE_DOUBLE, Ttag0 );CHECK_ERR( rval );
290 
291  rval = mb.tag_get_handle( "T1", levels, MB_TYPE_DOUBLE, Ttag1 );CHECK_ERR( rval );
292 
293  rval = mb.tag_get_handle( "COORDS", 3, MB_TYPE_DOUBLE, coordTag );CHECK_ERR( rval );
294 }
295 
297 {
298  Core moab;
299  Interface& mb = moab;
300  std::string opts;
301  ErrorCode rval = get_options( opts );CHECK_ERR( rval );
302 
303  opts += std::string( ";VARIABLE=T" );
304  rval = mb.load_file( example_fv.c_str(), NULL, opts.c_str() );CHECK_ERR( rval );
305 
306  // Check for proper tags
307  Tag Ttag0, Ttag1;
308  rval = mb.tag_get_handle( "T0", levels, MB_TYPE_DOUBLE, Ttag0 );CHECK_ERR( rval );
309 
310  rval = mb.tag_get_handle( "T1", levels, MB_TYPE_DOUBLE, Ttag1 );CHECK_ERR( rval );
311 
312  // Check values of tag T0 (first level) at some strategically chosen places below
313 #ifdef MOAB_HAVE_MPI
314  ParallelComm* pcomm = ParallelComm::get_pcomm( &mb, 0 );
315  int rank = pcomm->proc_config().proc_rank();
316  int procs = pcomm->proc_config().proc_size();
317 #else
318  int rank = 0;
319  int procs = 1;
320 #endif
321 
322  const double eps = 0.0001;
323  double val[8 * levels];
324 
325  if( 1 == procs )
326  {
327  Range global_quads;
328  rval = mb.get_entities_by_type( 0, MBQUAD, global_quads );CHECK_ERR( rval );
329  CHECK_EQUAL( (size_t)3312, global_quads.size() );
330 
331  EntityHandle gloabl_quad_ents[] = { global_quads[0], global_quads[1619], global_quads[1656],
332  global_quads[3275], global_quads[36], global_quads[1655],
333  global_quads[1692], global_quads[3311] };
334  rval = mb.tag_get_data( Ttag0, &gloabl_quad_ents[0], 8, val );
335 
336  CHECK_REAL_EQUAL( 253.6048, val[0 * levels], eps ); // First global quad
337  CHECK_REAL_EQUAL( 232.2170, val[1 * levels], eps ); // 1620th global quad
338  CHECK_REAL_EQUAL( 232.7454, val[2 * levels], eps ); // 1657th global quad
339  CHECK_REAL_EQUAL( 210.2581, val[3 * levels], eps ); // 3276th global quad
340  CHECK_REAL_EQUAL( 253.6048, val[4 * levels], eps ); // 37th global quad
341  CHECK_REAL_EQUAL( 232.9553, val[5 * levels], eps ); // 1656th global quad
342  CHECK_REAL_EQUAL( 232.1704, val[6 * levels], eps ); // 1693th global quad
343  CHECK_REAL_EQUAL( 210.2581, val[7 * levels], eps ); // Last global quad
344  }
345  else if( 2 == procs )
346  {
347  Range local_quads;
348  rval = mb.get_entities_by_type( 0, MBQUAD, local_quads );CHECK_ERR( rval );
349  CHECK_EQUAL( (size_t)1656, local_quads.size() );
350 
351  EntityHandle local_quad_ents[] = { local_quads[0], local_quads[827], local_quads[828], local_quads[1655] };
352  rval = mb.tag_get_data( Ttag0, &local_quad_ents[0], 4, val );
353 
354  if( 0 == rank )
355  {
356  CHECK_REAL_EQUAL( 253.6048, val[0 * levels],
357  eps ); // First local quad, first global quad
358  CHECK_REAL_EQUAL( 232.2170, val[1 * levels],
359  eps ); // Median local quad, 1620th global quad
360  CHECK_REAL_EQUAL( 232.7454, val[2 * levels],
361  eps ); // Median local quad, 1657th global quad
362  CHECK_REAL_EQUAL( 210.2581, val[3 * levels],
363  eps ); // Last local quad, 3276th global quad
364  }
365  else if( 1 == rank )
366  {
367  CHECK_REAL_EQUAL( 253.6048, val[0 * levels],
368  eps ); // First local quad, 37th global quad
369  CHECK_REAL_EQUAL( 232.9553, val[1 * levels],
370  eps ); // Median local quad, 1656th global quad
371  CHECK_REAL_EQUAL( 232.1704, val[2 * levels],
372  eps ); // Median local quad, 1693th global quad
373  CHECK_REAL_EQUAL( 210.2581, val[3 * levels],
374  eps ); // Last local quad, last global quad
375  }
376  }
377 }
378 
380 {
381  Core moab;
382  Interface& mb = moab;
383  std::string opts;
384  ErrorCode rval = get_options( opts );CHECK_ERR( rval );
385 
386  opts += std::string( ";VARIABLE=T;TIMESTEP=1" );
387  rval = mb.load_file( example_fv.c_str(), NULL, opts.c_str() );CHECK_ERR( rval );
388 
389  // Check for proper tags
390  Tag Ttag0, Ttag1;
391  rval = mb.tag_get_handle( "T0", levels, MB_TYPE_DOUBLE, Ttag0 );
392  CHECK_EQUAL( rval, MB_TAG_NOT_FOUND );
393 
394  rval = mb.tag_get_handle( "T1", levels, MB_TYPE_DOUBLE, Ttag1 );CHECK_ERR( rval );
395 
396  // Check for some tags with double underscore in the tag name
397  Tag tempTag;
398  rval = mb.tag_get_handle( "__lon_LOC_MINMAX", 2, MB_TYPE_INTEGER, tempTag );CHECK_ERR( rval );
399 
400  rval = mb.tag_get_handle( "__lon_LOC_VALS", 0, MB_TYPE_DOUBLE, tempTag, MB_TAG_VARLEN );CHECK_ERR( rval );
401 
402  rval = mb.tag_get_handle( "__lon_GLOBAL_MINMAX", 2, MB_TYPE_INTEGER, tempTag );CHECK_ERR( rval );
403 }
404 
406 {
407  Core moab;
408  Interface& mb = moab;
409 
410  // Need a set for nomesh to work right
411  EntityHandle set;
412  ErrorCode rval = mb.create_meshset( MESHSET_SET, set );CHECK_ERR( rval );
413 
414  std::string orig, opts;
415  rval = get_options( orig );CHECK_ERR( rval );
416 
417  opts = orig + std::string( ";VARIABLE=T;TIMESTEP=0" );
418  rval = mb.load_file( example_fv.c_str(), &set, opts.c_str() );CHECK_ERR( rval );
419 
420  // Check for proper tag
421  Tag Ttag0, Ttag1;
422  rval = mb.tag_get_handle( "T0", levels, MB_TYPE_DOUBLE, Ttag0 );CHECK_ERR( rval );
423 
424  rval = mb.tag_get_handle( "T1", levels, MB_TYPE_DOUBLE, Ttag1 );
425  CHECK_EQUAL( rval, MB_TAG_NOT_FOUND );
426 
427  // Now read 2nd timestep with nomesh option
428  opts = orig + std::string( ";VARIABLE=T;TIMESTEP=1;NOMESH" );
429  rval = mb.load_file( example_fv.c_str(), &set, opts.c_str() );CHECK_ERR( rval );
430 
431  // Check for proper tag
432  rval = mb.tag_get_handle( "T1", levels, MB_TYPE_DOUBLE, Ttag1 );CHECK_ERR( rval );
433 }
434 
436 {
437  Core moab;
438  Interface& mb = moab;
439 
440  // Need a set for nomesh to work right
441  EntityHandle set;
442  ErrorCode rval = mb.create_meshset( MESHSET_SET, set );CHECK_ERR( rval );
443 
444  std::string orig, opts;
445  rval = get_options( orig );CHECK_ERR( rval );
446 
447  opts = orig + std::string( ";NOMESH;VARIABLE=" );
448  rval = mb.load_file( example_fv.c_str(), &set, opts.c_str() );CHECK_ERR( rval );
449 
450  opts = orig + std::string( ";VARIABLE=;TIMESTEP=0" );
451  rval = mb.load_file( example_fv.c_str(), &set, opts.c_str() );CHECK_ERR( rval );
452 
453  // Check for proper tag
454  Tag Ttag0, Ttag1;
455  rval = mb.tag_get_handle( "T0", levels, MB_TYPE_DOUBLE, Ttag0 );
456  CHECK_EQUAL( rval, MB_TAG_NOT_FOUND );
457 
458  opts = orig + std::string( ";VARIABLE=T;TIMESTEP=0;NOMESH" );
459  rval = mb.load_file( example_fv.c_str(), &set, opts.c_str() );CHECK_ERR( rval );
460 
461  rval = mb.tag_get_handle( "T0", levels, MB_TYPE_DOUBLE, Ttag0 );CHECK_ERR( rval );
462 
463  rval = mb.tag_get_handle( "T1", levels, MB_TYPE_DOUBLE, Ttag1 );
464  CHECK_EQUAL( rval, MB_TAG_NOT_FOUND );
465 
466  // Now read 2nd timestep with nomesh option
467  opts = orig + std::string( ";VARIABLE=T;TIMESTEP=1;NOMESH" );
468  rval = mb.load_file( example_fv.c_str(), &set, opts.c_str() );CHECK_ERR( rval );
469 
470  // Check for proper tag
471  rval = mb.tag_get_handle( "T1", levels, MB_TYPE_DOUBLE, Ttag1 );CHECK_ERR( rval );
472 }
473 
474 #ifdef MOAB_HAVE_MPI
475 void test_read_fv_ghosting()
476 {
477  Core moab;
478  Interface& mb = moab;
479 
480  // Need a set for nomesh to work right
481  EntityHandle set;
482  ErrorCode rval = mb.create_meshset( MESHSET_SET, set );CHECK_ERR( rval );
483 
484  std::string orig, opts;
485  rval = get_options( orig );CHECK_ERR( rval );
486 
487  opts = std::string( "PARALLEL=READ_PART;PARTITION;PARALLEL_GHOSTS=2.0.1;NOMESH;VARIABLE=;"
488  "PARTITION_METHOD=SQIJ" );
489  rval = mb.load_file( example_fv.c_str(), &set, opts.c_str() );CHECK_ERR( rval );
490 
491  opts = std::string( "PARALLEL=READ_PART;PARTITION;PARALLEL_RESOLVE_SHARED_ENTS;PARALLEL_GHOSTS="
492  "2.0.1;PARTITION_METHOD=SQIJ;VARIABLE=" );
493  rval = mb.load_file( example_fv.c_str(), &set, opts.c_str() );CHECK_ERR( rval );
494 
495  opts = std::string( "PARALLEL=READ_PART;PARTITION;PARTITION_METHOD=SQIJ;VARIABLE=TOT_CLD_"
496  "VISTAU;NOMESH;TIMESTEP=0;" );
497  rval = mb.load_file( example_fv.c_str(), &set, opts.c_str() );CHECK_ERR( rval );
498 }
499 #endif
500 
502 {
503  Core moab;
504  Interface& mb = moab;
505 
506  // Need a set for nomesh to work right
507  EntityHandle set;
508  ErrorCode rval = mb.create_meshset( MESHSET_SET, set );CHECK_ERR( rval );
509 
510  std::string orig, opts;
511  rval = get_options( orig );CHECK_ERR( rval );
512 
513  opts = orig + std::string( ";VARIABLE=" );
514  rval = mb.load_file( example_domain.c_str(), &set, opts.c_str() );CHECK_ERR( rval );
515 }
516 
518 {
519  Core moab;
520  Interface& mb = moab;
521 
522  // Need a set for nomesh to work right
523  EntityHandle set;
524  ErrorCode rval = mb.create_meshset( MESHSET_SET, set );CHECK_ERR( rval );
525 
526  std::string orig, opts;
527  rval = get_options( orig );CHECK_ERR( rval );
528 
529  opts = orig + std::string( ";VARIABLE=" );
530  rval = mb.load_file( example_scrip.c_str(), &set, opts.c_str() );CHECK_ERR( rval );
531 }
532 
533 ErrorCode get_options( std::string& opts )
534 {
535 #ifdef MOAB_HAVE_MPI
536  // Use parallel options
537  opts = std::string( ";;PARALLEL=READ_PART;PARTITION_METHOD=SQIJ;DEBUG_IO=2;" );
538  return MB_SUCCESS;
539 #else
540  opts = std::string( ";;" );
541  return MB_SUCCESS;
542 #endif
543 }