![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
Defines | |
#define | MHDF_INDEX_TYPE H5T_NATIVE_LONG |
Functions | |
const char * | mhdf_node_type_handle (void) |
Get an mhdf_ElemHandle object for the node data. | |
const char * | mhdf_set_type_handle (void) |
Return a special element group handle used to specify the set group. | |
void | mhdf_getElemName (mhdf_FileHandle file_handle, unsigned int type_index, char *buffer, size_t buffer_size, mhdf_Status *status) |
Given an element type Id, get the name. Fails if buffer is not of sufficient size. | |
int | mhdf_checkOpenHandles (mhdf_FileHandle handle, mhdf_Status *status) |
void | mhdf_closeData (mhdf_FileHandle file, hid_t handle, mhdf_Status *status) |
Common close function for all data handle types. | |
void | mhdf_getNextStartId (mhdf_FileHandle file, mhdf_index_t *start_id_out, mhdf_Status *status) |
Get start ID that will be assigned to next created dataset. | |
void | mhdf_writeHistory (mhdf_FileHandle file, const char **strings, int num_strings, mhdf_Status *status) |
Write the file history as a list of strings. | |
char ** | mhdf_readHistory (mhdf_FileHandle file, int *num_records_out, mhdf_Status *status) |
Read the file history as a list of strings. |
#define MHDF_INDEX_TYPE H5T_NATIVE_LONG |
Definition at line 337 of file mhdf.h.
Referenced by mhdf_createPolyConnectivity(), mhdf_createSetMeta(), mhdf_createVarLenTagData(), moab::WriteHDF5::write_sets(), and moab::WriteHDF5::write_var_len_indices().
int mhdf_checkOpenHandles | ( | mhdf_FileHandle | handle, |
mhdf_Status * | status | ||
) |
Definition at line 409 of file file.c.
References API_BEGIN, API_END_H, struct_FileHandle::hdf_handle, mhdf_check_valid_file(), and mhdf_setFail().
Referenced by mhdf_closeFile().
{
FileHandle* file_ptr;
int result;
API_BEGIN;
file_ptr = (FileHandle*)( handle );
if( !mhdf_check_valid_file( file_ptr, status ) ) return -1;
/* Check for open handles. HDF5 will not actually close the
file until all handles are closed. */
result = H5Fget_obj_count( file_ptr->hdf_handle, H5F_OBJ_ALL );
if( result != 1 )
{
mhdf_setFail( status,
"Cannot close file with open handles: "
"%d file, %d data, %d group, %d type, %d attr\n",
H5Fget_obj_count( file_ptr->hdf_handle, H5F_OBJ_FILE ) - 1,
H5Fget_obj_count( file_ptr->hdf_handle, H5F_OBJ_DATASET ),
H5Fget_obj_count( file_ptr->hdf_handle, H5F_OBJ_GROUP ),
H5Fget_obj_count( file_ptr->hdf_handle, H5F_OBJ_DATATYPE ),
H5Fget_obj_count( file_ptr->hdf_handle, H5F_OBJ_ATTR ) );
return result - 1;
}
API_END_H( 0 );
return 0;
}
void mhdf_closeData | ( | mhdf_FileHandle | file, |
hid_t | handle, | ||
mhdf_Status * | status | ||
) |
Common close function for all data handle types.
Close an hid_t-type handle returned from any of the following functions. Any hid_t passed-back or returned must be closed via this function to avoid resource loss.
file | The file the object pointed to by the passed data handled exists int. |
handle | The data object to close. |
status | Passed back status of API call. |
Definition at line 470 of file file.c.
References mhdf_check_valid_file(), mhdf_setFail(), mhdf_setOkay(), and struct_FileHandle::open_handle_count.
Referenced by check_valid_adjacencies(), check_valid_elem_conn(), check_valid_poly_conn(), check_valid_sets(), check_valid_tag(), check_valid_var_len_tag(), moab::WriteHDF5Parallel::create_adjacency_tables(), moab::WriteHDF5::create_elem_table(), moab::WriteHDF5Parallel::create_node_table(), moab::WriteHDF5::create_set_meta(), moab::WriteHDF5::create_set_tables(), moab::WriteHDF5::create_tag(), moab::ReadHDF5::find_sets_containing(), get_elem_desc(), moab::ReadHDF5::get_tagged_entities(), moab::ReadHDF5::load_file_impl(), moab::ReadHDF5::load_file_partial(), main(), mhdf_getFileSummary(), moab::ReadHDF5::read_all_set_meta(), moab::ReadHDF5::read_node_adj_elems(), moab::ReadHDF5::read_nodes(), moab::ReadHDF5::read_tag(), moab::ReadHDF5::read_tag_values_all(), moab::ReadHDF5::search_tag_values(), moab::WriteHDF5::serial_create_file(), moab::WriteHDF5::write_adjacencies(), moab::WriteHDF5::write_dense_tag(), moab::WriteHDF5::write_elems(), moab::WriteHDF5::write_nodes(), moab::WriteHDF5::write_sets(), moab::WriteHDF5::write_sparse_tag(), and moab::WriteHDF5::write_var_len_tag().
{
FileHandle* file_ptr;
herr_t rval = -1;
file_ptr = (FileHandle*)( file );
if( !mhdf_check_valid_file( file_ptr, status ) ) return;
switch( H5Iget_type( handle ) )
{
case H5I_GROUP:
rval = H5Gclose( handle );
break;
case H5I_DATATYPE:
rval = H5Tclose( handle );
break;
case H5I_DATASPACE:
rval = H5Sclose( handle );
break;
case H5I_DATASET:
rval = H5Dclose( handle );
break;
default:
rval = -1;
}
if( rval < 0 )
{
mhdf_setFail( status, "H5Xclose failed. Invalid handle?\n" );
}
else
{
file_ptr->open_handle_count--;
mhdf_setOkay( status );
}
}
void mhdf_getElemName | ( | mhdf_FileHandle | file_handle, |
unsigned int | type_index, | ||
char * | buffer, | ||
size_t | buffer_size, | ||
mhdf_Status * | status | ||
) |
Given an element type Id, get the name. Fails if buffer is not of sufficient size.
file_handle | The file. |
type_index | The type index. Corresponds to indices into the element type list passed to mhdf_createFile. |
buffer | The buffer into which to copy the name. |
buffer_size | The length of buffer . |
status | Passed back status of API call. |
Definition at line 368 of file file.c.
References API_BEGIN, API_END, get_elem_type_enum(), mhdf_check_valid_file(), mhdf_setFail(), and mhdf_setOkay().
{
FileHandle* file_ptr;
herr_t rval;
hid_t enum_id;
API_BEGIN;
if( type_index > 255 )
{
mhdf_setFail( status, "Type index out of bounds." );
return;
}
file_ptr = (FileHandle*)( file_handle );
if( !mhdf_check_valid_file( file_ptr, status ) ) return;
enum_id = get_elem_type_enum( file_ptr, status );
if( enum_id < 0 ) return;
rval = H5Tconvert( H5T_NATIVE_UINT, H5Tget_super( enum_id ), 1, &type_index, NULL, H5P_DEFAULT );
if( rval < 0 )
{
H5Tclose( enum_id );
mhdf_setFail( status, "Internal error converting to enum type." );
return;
}
rval = H5Tenum_nameof( enum_id, &type_index, buffer, buf_size );
H5Tclose( enum_id );
if( rval < 0 )
mhdf_setFail( status, "H5Tenum_nameof failed. Invalid type index?" );
else
mhdf_setOkay( status );
API_END;
}
void mhdf_getNextStartId | ( | mhdf_FileHandle | file, |
mhdf_index_t * | start_id_out, | ||
mhdf_Status * | status | ||
) |
Get start ID that will be assigned to next created dataset.
Get the first_id parameter that will be returned from the next call to any of mhdf_createNodeCoords, mhdf_createConnectivity, mhdf_createPolyConnectivity, or mhdf_createSetMeta
Definition at line 925 of file file.c.
References API_BEGIN, API_END, struct_FileHandle::max_id, mhdf_check_valid_file(), and mhdf_setOkay().
{
FileHandle* file_ptr = (FileHandle*)file;
API_BEGIN;
mhdf_setOkay( status );
if( mhdf_check_valid_file( file_ptr, status ) ) *start_id_out = file_ptr->max_id + 1;
API_END;
}
const char* mhdf_node_type_handle | ( | void | ) |
Get an mhdf_ElemHandle object for the node data.
Definition at line 736 of file file.c.
Referenced by check_valid_tag(), main(), mhdf_createAdjacency(), mhdf_createDenseTagData(), mhdf_getFileSummary(), mhdf_haveAdjacency(), mhdf_haveDenseTag(), mhdf_openAdjacency(), mhdf_openDenseTagData(), moab::WriteHDF5::ExportSet::name(), moab::ReadHDF5::read_tag(), moab::ReadHDF5::read_tag_values_all(), moab::ReadHDF5::read_tag_values_partial(), moab::ReadHDF5::search_tag_values(), and moab::WriteHDF5::serial_create_file().
{
static const char rval[] = "nodes";
return rval;
}
char** mhdf_readHistory | ( | mhdf_FileHandle | file, |
int * | num_records_out, | ||
mhdf_Status * | status | ||
) |
Read the file history as a list of strings.
Each entry is composed of four strings: application, version, date, and time.
Strings and array are allocated with malloc
. Caller must release them by calling free
file | The file. |
num_records_out | The length of the returned array. |
status | Passed back status of API call. |
Definition at line 823 of file file.c.
References API_BEGIN, API_END, dim, struct_FileHandle::hdf_handle, HISTORY_NAME, HISTORY_PATH, mhdf_check_valid_file(), mhdf_is_in_group(), mhdf_malloc(), mhdf_setFail(), mhdf_setOkay(), and ROOT_GROUP.
Referenced by moab::ReadHDF5::read_qa().
{
FileHandle* file_ptr;
hid_t data_id, type_id, space_id, group_id;
hsize_t dim;
herr_t rval;
char** array;
API_BEGIN;
file_ptr = (FileHandle*)( file_handle );
if( !mhdf_check_valid_file( file_ptr, status ) ) return NULL;
/* check if file contains history data */
#if defined( H5Gopen_vers ) && H5Gopen_vers > 1
group_id = H5Gopen2( file_ptr->hdf_handle, ROOT_GROUP, H5P_DEFAULT );
#else
group_id = H5Gopen( file_ptr->hdf_handle, ROOT_GROUP );
#endif
if( group_id < 0 )
{
mhdf_setFail( status, "Could not open root group. Invalid file." );
return NULL;
}
rval = mhdf_is_in_group( group_id, HISTORY_NAME, status );
if( rval < 1 )
{
H5Gclose( group_id );
*num_strings = 0;
if( 0 == rval ) mhdf_setOkay( status );
return NULL;
}
#if defined( H5Dopen_vers ) && H5Dopen_vers > 1
data_id = H5Dopen2( group_id, HISTORY_NAME, H5P_DEFAULT );
#else
data_id = H5Dopen( group_id, HISTORY_NAME );
#endif
H5Gclose( group_id );
if( data_id < 0 )
{
mhdf_setFail( status, "Failed to open \"%s\".", HISTORY_PATH );
return NULL;
}
space_id = H5Dget_space( data_id );
if( space_id < 0 )
{
H5Dclose( data_id );
mhdf_setFail( status, "Internal error calling H5Dget_space." );
return NULL;
}
if( 1 != H5Sget_simple_extent_ndims( space_id ) || 1 != H5Sget_simple_extent_dims( space_id, &dim, NULL ) )
{
H5Dclose( data_id );
mhdf_setFail( status, "Invalid dimension for \"%s\".", HISTORY_PATH );
return NULL;
}
H5Sclose( space_id );
if( 0 == dim )
{
H5Dclose( data_id );
*num_strings = 0;
mhdf_setOkay( status );
return NULL;
}
array = (char**)mhdf_malloc( dim * sizeof( char* ), status );
if( !array )
{
H5Dclose( data_id );
return NULL;
}
type_id = H5Tcopy( H5T_C_S1 );
if( type_id < 0 || H5Tset_size( type_id, H5T_VARIABLE ) < 0 )
{
H5Dclose( data_id );
if( type_id >= 0 ) H5Tclose( type_id );
mhdf_setFail( status, "Could not create variable length string type." );
free( array );
return NULL;
}
rval = H5Dread( data_id, type_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, array );
H5Tclose( type_id );
H5Dclose( data_id );
if( rval < 0 )
{
free( array );
mhdf_setFail( status, "H5Dread failed." );
return NULL;
}
*num_strings = dim;
mhdf_setOkay( status );
API_END;
return array;
}
const char* mhdf_set_type_handle | ( | void | ) |
Return a special element group handle used to specify the set group.
Definition at line 742 of file file.c.
Referenced by check_valid_tag(), mhdf_createDenseTagData(), mhdf_getFileSummary(), mhdf_haveDenseTag(), mhdf_openDenseTagData(), moab::WriteHDF5::ExportSet::name(), moab::ReadHDF5::read_tag(), moab::ReadHDF5::read_tag_values_all(), moab::ReadHDF5::read_tag_values_partial(), and moab::ReadHDF5::search_tag_values().
{
static const char rval[] = "sets";
return rval;
}
void mhdf_writeHistory | ( | mhdf_FileHandle | file, |
const char ** | strings, | ||
int | num_strings, | ||
mhdf_Status * | status | ||
) |
Write the file history as a list of strings.
Each entry is composed of four strings: application, version, date, and time.
file | The file. |
strings | An array of null-terminated strings. |
num_strings | The length of strings |
status | Passed back status of API call. |
Definition at line 768 of file file.c.
References API_BEGIN, API_END, dim, struct_FileHandle::hdf_handle, HISTORY_PATH, mhdf_check_valid_file(), mhdf_setFail(), and mhdf_setOkay().
Referenced by moab::WriteHDF5::write_qa().
{
FileHandle* file_ptr;
hid_t data_id, type_id, space_id;
hsize_t dim = (hsize_t)num_strings;
herr_t rval;
API_BEGIN;
file_ptr = (FileHandle*)( file_handle );
if( !mhdf_check_valid_file( file_ptr, status ) ) return;
type_id = H5Tcopy( H5T_C_S1 );
if( type_id < 0 || H5Tset_size( type_id, H5T_VARIABLE ) < 0 )
{
if( type_id >= 0 ) H5Tclose( type_id );
mhdf_setFail( status, "Could not create variable length string type." );
return;
}
space_id = H5Screate_simple( 1, &dim, NULL );
if( space_id < 0 )
{
H5Tclose( type_id );
mhdf_setFail( status, "H5Screate_simple failed." );
return;
}
#if defined( H5Dcreate_vers ) && H5Dcreate_vers > 1
data_id =
H5Dcreate2( file_ptr->hdf_handle, HISTORY_PATH, type_id, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT );
#else
data_id = H5Dcreate( file_ptr->hdf_handle, HISTORY_PATH, type_id, space_id, H5P_DEFAULT );
#endif
H5Sclose( space_id );
if( data_id < 0 )
{
H5Tclose( type_id );
mhdf_setFail( status, "Failed to create \"%s\".", HISTORY_PATH );
return;
}
rval = H5Dwrite( data_id, type_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, strings );
H5Dclose( data_id );
H5Tclose( type_id );
if( rval < 0 )
{
H5Gunlink( file_ptr->hdf_handle, HISTORY_PATH );
mhdf_setFail( status, "Failed to write history data." );
return;
}
mhdf_setOkay( status );
API_END;
}