![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 /** @example TestErrorHandling.cpp \n
00002 * Description: This example tests MOAB's trace back error handler in serial. \n
00003 *
00004 * To run: ./TestErrorHandling \n
00005 */
00006
00007 #include "moab/Core.hpp"
00008 #ifdef MOAB_HAVE_MPI
00009 #include "moab_mpi.h"
00010 #endif
00011
00012 #include
00013
00014 using namespace moab;
00015 using namespace std;
00016
00017 // In this test case, an error MB_NOT_IMPLEMENTED is returned by MOAB
00018 ErrorCode TestErrorHandling_1()
00019 {
00020 Core moab;
00021 Interface& mb = moab;
00022
00023 // Load a CAM-FV file and read a variable on edges (not supported yet)
00024 string test_file = string( MESH_DIR ) + string( "/io/fv3x46x72.t.3.nc" );
00025 ErrorCode rval = mb.load_file( test_file.c_str(), NULL, "VARIABLE=US" );MB_CHK_ERR( rval );
00026
00027 return MB_SUCCESS;
00028 }
00029
00030 // In this test case, an error MB_TYPE_OUT_OF_RANGE is returned by MOAB
00031 ErrorCode TestErrorHandling_2()
00032 {
00033 Core moab;
00034 Interface& mb = moab;
00035
00036 // Load a HOMME file with an invalid GATHER_SET option
00037 string test_file = string( MESH_DIR ) + string( "/io/homme3x3458.t.3.nc" );
00038 ErrorCode rval = mb.load_file( test_file.c_str(), NULL, "VARIABLE=T;GATHER_SET=0.1" );MB_CHK_ERR( rval );
00039
00040 return MB_SUCCESS;
00041 }
00042
00043 // In this test case, an error MB_FAILURE is returned by MOAB
00044 ErrorCode TestErrorHandling_3()
00045 {
00046 Core moab;
00047 Interface& mb = moab;
00048
00049 // Load a CAM-FV file with NOMESH option and a NULL file set
00050 string test_file = string( MESH_DIR ) + string( "/io/fv3x46x72.t.3.nc" );
00051 ErrorCode rval = mb.load_file( test_file.c_str(), NULL, "NOMESH;VARIABLE=" );MB_CHK_ERR( rval );
00052
00053 return MB_SUCCESS;
00054 }
00055
00056 // In this test case, an error MB_VARIABLE_DATA_LENGTH is returned by MOAB
00057 ErrorCode TestErrorHandling_4()
00058 {
00059 Core moab;
00060 Interface& mb = moab;
00061
00062 // Create 100 vertices
00063 const int NUM_VTX = 100;
00064 vector< double > coords( 3 * NUM_VTX );
00065 Range verts;
00066 ErrorCode rval = mb.create_vertices( &coords[0], NUM_VTX, verts );MB_CHK_SET_ERR( rval, "Failed to create vertices" );
00067
00068 // Create a variable-length dense tag
00069 Tag tag;
00070 rval = mb.tag_get_handle( "var_len_den", 1, MB_TYPE_INTEGER, tag, MB_TAG_VARLEN | MB_TAG_DENSE | MB_TAG_CREAT );MB_CHK_SET_ERR( rval, "Failed to create a tag" );
00071
00072 // Attempt to iterate over a variable-length tag, which will never be possible
00073 void* ptr = NULL;
00074 int count = 0;
00075 rval = mb.tag_iterate( tag, verts.begin(), verts.end(), count, ptr );MB_CHK_SET_ERR( rval, "Failed to iterate over tag on " << NUM_VTX << " vertices" );
00076
00077 return MB_SUCCESS;
00078 }
00079
00080 int main( int argc, char** argv )
00081 {
00082 if( argc < 2 )
00083 {
00084 cout << "Usage: " << argv[0] << " " << endl;
00085 return 0;
00086 }
00087
00088 #ifdef MOAB_HAVE_MPI
00089 MPI_Init( &argc, &argv );
00090 #endif
00091
00092 // Initialize error handler, optional for this example (using moab instances)
00093 MBErrorHandler_Init();
00094
00095 ErrorCode rval = MB_SUCCESS;
00096
00097 int test_case_num = atoi( argv[1] );
00098 switch( test_case_num )
00099 {
00100 case 1:
00101 rval = TestErrorHandling_1();MB_CHK_ERR( rval );
00102 break;
00103 case 2:
00104 rval = TestErrorHandling_2();MB_CHK_ERR( rval );
00105 break;
00106 case 3:
00107 rval = TestErrorHandling_3();MB_CHK_ERR( rval );
00108 break;
00109 case 4:
00110 rval = TestErrorHandling_4();MB_CHK_ERR( rval );
00111 break;
00112 default:
00113 break;
00114 }
00115
00116 // Finalize error handler, optional for this example (using moab instances)
00117 MBErrorHandler_Finalize();
00118
00119 #ifdef MOAB_HAVE_MPI
00120 MPI_Finalize();
00121 #endif
00122
00123 return 0;
00124 }