Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <H5Fpublic.h>
#include <H5Ppublic.h>
#include <H5Gpublic.h>
#include <H5Spublic.h>
#include <H5Tpublic.h>
#include <H5Apublic.h>
#include "mhdf.h"
#include "status.h"
#include "names-and-paths.h"
#include "util.h"
#include "file-handle.h"
Go to the source code of this file.
Functions | |
static int | make_hdf_group (const char *path, hid_t file, size_t size, mhdf_Status *status) |
mhdf_FileHandle | mhdf_createFile (const char *filename, int overwrite, const char **elem_type_list, size_t elem_list_len, hid_t id_type, mhdf_Status *status) |
Create a new file. | |
mhdf_FileHandle | mhdf_openFile (const char *filename, int writeable, unsigned long *max_id_out, hid_t id_type, mhdf_Status *status) |
Open an existing file. | |
int | mhdf_countOpenHandles (mhdf_FileHandle file_handle) |
Get number of open HDF5 objects from file. | |
static herr_t | get_max_id (hid_t group_id, const char *subgroup, const char *datatable, unsigned long *data) |
static herr_t | max_id_iter (hid_t group_id, const char *name, void *data) |
static int | scan_for_max_id (FileHandle *file_ptr, mhdf_Status *status) |
mhdf_FileHandle | mhdf_openFileWithOpt (const char *filename, int writable, unsigned long *max_id_out, hid_t id_type, hid_t access_prop, mhdf_Status *status) |
Open an existing file with options. | |
void | mhdf_getElemName (mhdf_FileHandle file_handle, unsigned int type_index, char *buffer, size_t buf_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_closeFile (mhdf_FileHandle handle, mhdf_Status *status) |
Close the file. | |
void | mhdf_closeData (mhdf_FileHandle file, hid_t handle, mhdf_Status *status) |
Common close function for all data handle types. | |
void | mhdf_addElement (mhdf_FileHandle file_handle, const char *name, unsigned int elem_type, mhdf_Status *status) |
Add a new table of element data to the file. | |
char ** | mhdf_getElemHandles (mhdf_FileHandle file_handle, unsigned int *count_out, mhdf_Status *status) |
Get the list of element groups in the file. | |
void | mhdf_getElemTypeName (mhdf_FileHandle file_handle, const char *elem_handle, char *buffer, size_t buf_len, mhdf_Status *status) |
Get the element type name for a given element group handle. | |
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. | |
int | mhdf_isPolyElement (mhdf_FileHandle file_handle, const char *elem_handle, mhdf_Status *status) |
Check if an element group contains polygon or polyhedron. | |
void | mhdf_writeHistory (mhdf_FileHandle file_handle, const char **strings, int num_strings, mhdf_Status *status) |
Write the file history as a list of strings. | |
char ** | mhdf_readHistory (mhdf_FileHandle file_handle, int *num_strings, mhdf_Status *status) |
Read the file history as a list of strings. | |
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. |
static herr_t get_max_id | ( | hid_t | group_id, |
const char * | subgroup, | ||
const char * | datatable, | ||
unsigned long * | data | ||
) | [static] |
Definition at line 155 of file file.c.
References START_ID_ATTRIB.
Referenced by max_id_iter(), and scan_for_max_id().
{ unsigned long id; hid_t elem_id, conn_id, attr_id, space_id; herr_t rval; int rank; hsize_t dims[2]; #if defined( H5Gopen_vers ) && H5Gopen_vers > 1 elem_id = H5Gopen2( group_id, subgroup, H5P_DEFAULT ); #else elem_id = H5Gopen( group_id, subgroup ); #endif if( elem_id < 0 ) return (herr_t)-1; #if defined( H5Dopen_vers ) && H5Dopen_vers > 1 conn_id = H5Dopen2( elem_id, datatable, H5P_DEFAULT ); #else conn_id = H5Dopen( elem_id, datatable ); #endif H5Gclose( elem_id ); if( conn_id < 0 ) return (herr_t)-1; space_id = H5Dget_space( conn_id ); if( space_id < 0 ) { H5Dclose( conn_id ); return -1; } rank = H5Sget_simple_extent_ndims( space_id ); if( rank <= 0 || rank > 2 ) { H5Dclose( conn_id ); H5Sclose( space_id ); return -1; } rval = H5Sget_simple_extent_dims( space_id, dims, NULL ); H5Sclose( space_id ); if( rval < 0 ) { H5Dclose( conn_id ); return -1; } attr_id = H5Aopen_name( conn_id, START_ID_ATTRIB ); H5Dclose( conn_id ); if( attr_id < 0 ) return (herr_t)-1; rval = H5Aread( attr_id, H5T_NATIVE_ULONG, &id ); H5Aclose( attr_id ); if( rval < 0 ) return rval; id += dims[0]; if( id > *data ) *data = id; return 0; }
static int make_hdf_group | ( | const char * | path, |
hid_t | file, | ||
size_t | size, | ||
mhdf_Status * | status | ||
) | [static] |
MOAB, a Mesh-Oriented datABase, is a software component for creating, storing and accessing finite element mesh data.
Copyright 2004 Sandia Corporation. Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains certain rights in this software.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
Definition at line 713 of file file.c.
References mhdf_setFail().
Referenced by mhdf_createFile().
{ #if defined( H5Gcreate_vers ) && H5Gcreate_vers > 1 hid_t handle = H5Gcreate2( file, path, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT ); /* empty statement to avoid compiler warning */ if( sz ) { } #else hid_t handle = H5Gcreate( file, path, sz ); #endif if( handle < 0 ) { mhdf_setFail( status, "Failed to create \"%s\" group.", path ); return 0; } else { H5Gclose( handle ); return 1; } }
static herr_t max_id_iter | ( | hid_t | group_id, |
const char * | name, | ||
void * | data | ||
) | [static] |
Definition at line 214 of file file.c.
References CONNECTIVITY_NAME, and get_max_id().
Referenced by scan_for_max_id().
{ return get_max_id( group_id, name, CONNECTIVITY_NAME, (unsigned long*)data ); }
static int scan_for_max_id | ( | FileHandle * | file_ptr, |
mhdf_Status * | status | ||
) | [static] |
Definition at line 219 of file file.c.
References ELEMENT_GROUP_NAME, get_max_id(), struct_FileHandle::hdf_handle, struct_FileHandle::max_id, MAX_ID_ATTRIB, max_id_iter(), mhdf_is_in_group(), mhdf_read_scalar_attrib(), mhdf_setFail(), NODE_GROUP_NAME, ROOT_GROUP, SET_GROUP_NAME, and SET_META_NAME.
Referenced by mhdf_openFileWithOpt().
{ hid_t group_id; herr_t rval; /* Check for new format, with max_id as attrib of root group */ #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, "Internal error - invalid file." ); return 0; } if( mhdf_read_scalar_attrib( group_id, MAX_ID_ATTRIB, H5T_NATIVE_ULONG, &file_ptr->max_id, status ) ) { H5Gclose( group_id ); return 1; } /* Didn't find it, scan the elements group */ rval = H5Giterate( group_id, ELEMENT_GROUP_NAME, 0, &max_id_iter, &file_ptr->max_id ); if( rval ) { H5Gclose( group_id ); mhdf_setFail( status, "Internal error -- invalid file." ); return 0; } /* Check node table too */ rval = get_max_id( group_id, NODE_GROUP_NAME, "coordinates", (unsigned long*)( &file_ptr->max_id ) ); if( rval ) { H5Gclose( group_id ); mhdf_setFail( status, "Internal error -- invalid file." ); return 0; } /* Check set table, if it exists */ rval = mhdf_is_in_group( group_id, SET_GROUP_NAME, status ); if( rval < 1 ) { H5Gclose( group_id ); return !rval; } rval = get_max_id( group_id, SET_GROUP_NAME, SET_META_NAME, (unsigned long*)( &file_ptr->max_id ) ); H5Gclose( group_id ); if( rval ) { mhdf_setFail( status, "Internal error -- invalid file." ); return 0; } return 1; }