From dc631ce5087c21a1147a1e8c389c57bd015de517 Mon Sep 17 00:00:00 2001 From: Achim Gsell Date: Fri, 13 Mar 2009 15:23:52 +0000 Subject: [PATCH] - changes for revised API - bugfixes - ... --- src/H5.c | 67 ++++++++++++++++++- src/H5.h | 21 ++++++ src/H5Block.c | 140 ++++++++++++++++++--------------------- src/H5Fed_inquiry.c | 12 ++-- src/H5Fed_map.c | 2 +- src/H5Fed_store.c | 41 ++++++------ src/H5Fed_store.h | 16 +++-- src/H5Part.c | 65 +----------------- src/H5Part.h | 58 ++++++---------- src/bindings/Makefile.am | 3 +- 10 files changed, 212 insertions(+), 213 deletions(-) diff --git a/src/H5.c b/src/H5.c index 24e1b7e..03383b9 100644 --- a/src/H5.c +++ b/src/H5.c @@ -62,7 +62,6 @@ H5OpenFile ( const h5_int32_t oflag, /*!< file open flags */ const MPI_Comm comm /*!< MPI communicator */ ) { - return h5_open_file( filename, H5_O_RDWR, comm, __func__ ); } @@ -99,7 +98,7 @@ H5DefineStepNameFormat ( ) { SET_FNAME ( f, __func__ ); - return h5_define_stepname_fmt( f, name, width ); + return h5_set_stepname_fmt( f, name, width ); } /*! @@ -188,3 +187,67 @@ H5TraverseSteps ( return h5_traverse_steps( f ); } + +/*! + \ingroup h5part_c_api + \defgroup h5part_c_api_errhandling Error Handling +*/ + +/*! + \ingroup h5part_c_api_errhandling + + Set verbosity level to \c level. + + \return \c H5_SUCCESS +*/ +h5_err_t +H5SetVerbosityLevel ( + const h5_id_t level + ) { + + return h5_set_debuglevel ( level ); +} + +/*! + \ingroup h5part_c_api_errhandling + + Set error handler to \c handler. + + \return \c H5_SUCCESS +*/ +h5_err_t +H5SetErrorHandler ( + h5_errorhandler_t handler + ) { + + return h5_set_errorhandler( handler ); +} + +/*! + \ingroup h5part_c_api_errhandling + + Get current error handler. + + \return Pointer to error handler. +*/ +h5_errorhandler_t +H5GetErrorHandler ( + void + ) { + return h5_get_errorhandler(); +} + +/*! + \ingroup h5part_c_api_errhandling + + Get last error code. + + \return error code +*/ +h5_err_t +H5GetErrno ( + h5_file_t * const f + ) { + return h5_get_errno( f ); +} +/*! @} */ diff --git a/src/H5.h b/src/H5.h index 51c8433..e33b220 100644 --- a/src/H5.h +++ b/src/H5.h @@ -62,4 +62,25 @@ h5_err_t H5TraverseSteps ( h5_file_t *f ); + +h5_err_t +H5SetVerbosityLevel ( + const h5_id_t level + ); + +h5_err_t +H5SetErrorHandler ( + h5_errorhandler_t handler + ); + +h5_errorhandler_t +H5GetErrorHandler ( + void + ); + +h5_err_t +H5GetErrno ( + h5_file_t * const f + ); + #endif diff --git a/src/H5Block.c b/src/H5Block.c index d4af50c..d8000aa 100644 --- a/src/H5Block.c +++ b/src/H5Block.c @@ -546,23 +546,17 @@ h5_err_t _release_hyperslab ( h5_file_t *f /*!< IN: file handle */ ) { - herr_t herr; + struct h5b_fdata *b = f->b; + + TRY( _h5_close_dataspace( f, b->shape ) ); + f->b->shape = -1; + + TRY( _h5_close_dataspace( f, b->diskshape ) ); + f->b->diskshape = -1; + + TRY( _h5_close_dataspace( f, f->b->memshape ) ); + f->b->memshape = -1; - if ( f->b->shape > 0 ) { - herr = H5Sclose ( f->b->shape ); - if ( herr < 0 ) return H5_ERR_HDF5; - f->b->shape = -1; - } - if ( f->b->diskshape > 0 ) { - herr = H5Sclose ( f->b->diskshape ); - if ( herr < 0 ) return H5_ERR_HDF5; - f->b->diskshape = -1; - } - if ( f->b->memshape > 0 ) { - herr = H5Sclose ( f->b->memshape ); - if ( herr < 0 ) return H5_ERR_HDF5; - f->b->memshape = -1; - } return H5_SUCCESS; } @@ -611,8 +605,7 @@ H5BlockDefine3DFieldLayout( herr = _dissolve_ghostzones ( f ); if ( herr < 0 ) return HANDLE_H5_LAYOUT_ERR ( f ); - herr = _release_hyperslab ( f ); - if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR ( f ); + TRY( _release_hyperslab ( f ) ); b->have_layout = 1; @@ -785,19 +778,17 @@ _open_block_group ( struct h5b_fdata *b = f->b; if ( (f->step_idx != b->step_idx) && (b->blockgroup > 0) ) { - herr_t herr = H5Gclose ( b->blockgroup ); - if ( herr < 0 ) return HANDLE_H5G_CLOSE_ERR ( f ); + TRY( _h5_close_group( f, b->blockgroup ) ); f->b->blockgroup = -1; } if ( b->blockgroup < 0 ) { - hid_t herr = H5Gopen ( f->step_gid, H5BLOCK_GROUPNAME_BLOCK, - H5P_DEFAULT ); - if ( herr < 0 ) return HANDLE_H5G_OPEN_ERR ( - f, - h5_get_objname(f->step_gid), - H5BLOCK_GROUPNAME_BLOCK ); - b->blockgroup = herr; + TRY( + b->blockgroup = _h5_open_group ( + f, + f->step_gid, + H5BLOCK_GROUPNAME_BLOCK ) + ); } b->step_idx = f->step_idx; @@ -841,18 +832,12 @@ _open_field_group ( struct h5b_fdata *b = f->b; - h5_int64_t h5err = _open_block_group ( f ); - if ( h5err < 0 ) return h5err; + TRY( _open_block_group ( f ) ); if ( ! _have_object ( b->blockgroup, name ) ) return HANDLE_H5_NOENT_ERR ( f, name ); - herr_t herr = H5Gopen ( b->blockgroup, name, H5P_DEFAULT ); - if ( herr < 0 ) return HANDLE_H5G_OPEN_ERR ( - f, - h5_get_objname(b->blockgroup), name ); - - b->field_group_id = herr; + TRY( b->field_group_id = _h5_open_group( f, b->blockgroup, name ) ); return H5_SUCCESS; } @@ -914,8 +899,7 @@ _select_hyperslab_for_reading ( p->j_end - p->j_start + 1, p->i_end - p->i_start + 1 }; - h5_int64_t herr = _release_hyperslab ( f ); - if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR ( f ); + TRY( _release_hyperslab ( f ) ); b->diskshape = H5Dget_space ( dataset ); if ( b->diskshape < 0 ) return HANDLE_H5D_GET_SPACE_ERR ( f ); @@ -948,7 +932,7 @@ _select_hyperslab_for_reading ( if ( b->memshape < 0 ) return HANDLE_H5S_CREATE_SIMPLE_3D_ERR ( f, part_dims ); - herr = H5Sselect_hyperslab ( + herr_t herr = H5Sselect_hyperslab ( b->diskshape, H5S_SELECT_SET, start, @@ -992,24 +976,28 @@ _read_data ( ) { struct h5b_fdata *b = f->b; - - hid_t dataset_id = H5Dopen ( b->field_group_id, name, H5P_DEFAULT ); - if ( dataset_id < 0 ) return HANDLE_H5D_OPEN_ERR ( f, name ); - - h5_err_t herr = _select_hyperslab_for_reading ( f, dataset_id ); - if ( herr < 0 ) return herr; - - herr = H5Dread ( - dataset_id, - type, - f->b->memshape, - f->b->diskshape, - H5P_DEFAULT, - data ); - if ( herr < 0 ) return HANDLE_H5D_READ_ERR ( f, name ); - - herr = H5Dclose ( dataset_id ); - if ( herr < 0 ) return HANDLE_H5D_CLOSE_ERR ( f ); + hid_t dataset_id; + TRY( + dataset_id = _h5_open_dataset ( + f, + b->field_group_id, name + ) + ); + TRY( + _select_hyperslab_for_reading ( f, dataset_id ) ); + TRY( + _h5_read_dataset( + f, + dataset_id, + type, + f->b->memshape, + f->b->diskshape, + H5P_DEFAULT, + data ) + ); + TRY( + _h5_close_dataset( f, dataset_id ) + ); return H5_SUCCESS; } @@ -1382,7 +1370,6 @@ _write_field_data ( data, H5T_NATIVE_DOUBLE, b->field_group_id, - b->shape, b->memshape, b->diskshape ); } @@ -1509,18 +1496,24 @@ _get_field_info ( hsize_t dims[16]; h5_id_t i, j; + hid_t group_id; + hid_t dataset_id; - h5_err_t herr = _open_block_group ( f ); - if ( herr < 0 ) return herr; - - hid_t group_id = H5Gopen ( f->b->blockgroup, field_name, - H5P_DEFAULT ); - if ( group_id < 0 ) return HANDLE_H5G_OPEN_ERR ( - f, - hdf5_get_objname(f->b->blockgroup), field_name ); - - hid_t dataset_id = H5Dopen ( group_id, "0", H5P_DEFAULT ); - if ( dataset_id < 0 ) return HANDLE_H5D_OPEN_ERR ( f, "0" ); + TRY( + _open_block_group ( f ) + ); + TRY( + group_id = _h5_open_group( + f, + f->b->blockgroup, + field_name ) + ); + TRY( + dataset_id = _h5_open_dataset ( + f, + group_id, + "0" ) + ); hid_t dataspace_id = H5Dget_space ( dataset_id ); if ( dataspace_id < 0 ) return HANDLE_H5D_GET_SPACE_ERR ( f ); @@ -1537,14 +1530,9 @@ _get_field_info ( H5G_DATASET ); if ( *field_dims < 0 ) return *field_dims; - herr = H5Sclose ( dataspace_id ); - if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR ( f ); - - herr = H5Dclose ( dataset_id ); - if ( herr < 0 ) return HANDLE_H5D_CLOSE_ERR ( f ); - - herr = H5Gclose ( group_id ); - if ( herr < 0 ) return HANDLE_H5G_CLOSE_ERR ( f ); + TRY( _h5_close_dataspace( f, dataspace_id ) ); + TRY( _h5_close_dataset( f, dataset_id ) ); + TRY( _h5_close_group( f, group_id ) ); return H5_SUCCESS; } diff --git a/src/H5Fed_inquiry.c b/src/H5Fed_inquiry.c index 8ae0f81..c014ae9 100644 --- a/src/H5Fed_inquiry.c +++ b/src/H5Fed_inquiry.c @@ -111,7 +111,7 @@ H5FedGetNumTriangles ( ) { SET_FNAME ( f, __func__ ); h5_id_t cur_level = h5t_get_level( f ); - return h5t_get_num_entities ( f, f->myproc, cur_level ); + return h5t_get_num_elems ( f, f->myproc, cur_level ); } /*! @@ -129,7 +129,7 @@ H5FedGetNumTrianglesTotal ( ) { SET_FNAME ( f, __func__ ); h5_id_t cur_level = h5t_get_level( f ); - return h5t_get_num_entities ( f, -1, cur_level ); + return h5t_get_num_elems ( f, -1, cur_level ); } @@ -149,7 +149,7 @@ H5FedGetNumTrianglesCnode ( ) { SET_FNAME ( f, __func__ ); h5_id_t cur_level = h5t_get_level( f ); - return h5t_get_num_entities ( f, cnode, cur_level ); + return h5t_get_num_elems ( f, cnode, cur_level ); } /****** TETRAHEDRON statistics routines **************************************/ @@ -169,7 +169,7 @@ H5FedGetNumTetrahedra ( ) { SET_FNAME ( f, __func__ ); h5_id_t cur_level = h5t_get_level( f ); - return h5t_get_num_entities ( f, f->myproc, cur_level ); + return h5t_get_num_elems ( f, f->myproc, cur_level ); } h5_size_t @@ -178,7 +178,7 @@ H5FedGetNumTetrahedraTotal ( ) { SET_FNAME ( f, __func__ ); h5_id_t cur_level = h5t_get_level( f ); - return h5t_get_num_entities ( f, -1, cur_level ); + return h5t_get_num_elems ( f, -1, cur_level ); } /*! @@ -196,7 +196,7 @@ h5_size_t H5FedGetNumTetrahedraCnode ( ) { SET_FNAME ( f, __func__ ); h5_id_t cur_level = h5t_get_level( f ); - return h5t_get_num_entities ( f, cnode, cur_level ); + return h5t_get_num_elems ( f, cnode, cur_level ); } diff --git a/src/H5Fed_map.c b/src/H5Fed_map.c index 4d8e5fe..d5f4b9a 100644 --- a/src/H5Fed_map.c +++ b/src/H5Fed_map.c @@ -28,7 +28,7 @@ H5FedMapTet2GlobalID ( h5_id_t * const global_vids ) { SET_FNAME ( f, __func__ ); - return h5t_get_global_entity_id ( f, global_vids ); + return h5t_get_global_eid ( f, global_vids ); } diff --git a/src/H5Fed_store.c b/src/H5Fed_store.c index b608ce1..3cf1f68 100644 --- a/src/H5Fed_store.c +++ b/src/H5Fed_store.c @@ -22,24 +22,31 @@ h5_id_t H5FedAddTetMesh ( h5_file_t * const f, + const h5_size_t num_elems ) { SET_FNAME ( f, __func__ ); - return h5t_open_mesh ( f, -1, H5_OID_TETRAHEDRON ); + return h5t_add_mesh ( f, num_elems, H5_OID_TETRAHEDRON ); } h5_id_t H5FedAddTriangleMesh ( - h5_file_t * const f + h5_file_t * const f, + const h5_size_t num_elems ) { SET_FNAME ( f, __func__ ); - return h5t_open_mesh ( f, -1, H5_OID_TRIANGLE ); + return h5t_add_mesh ( f, num_elems, H5_OID_TRIANGLE ); } /*! \ingroup h5fed_c_api - Add a new level. + Add a new level with \c num_elems elements. The number of elements must be the + real number of elements to add the level. If you want to refine \c n tetrahedra + \c n*8 elements must be added. + + \param[in] f file handle + \param[in] num_elems Number of elements to add. \return ID of new level. @@ -53,10 +60,12 @@ H5FedAddTriangleMesh ( */ h5_id_t H5FedAddLevel ( - h5_file_t * const f /*!< file handle */ + h5_file_t * const f, /*!< file handle */ + const h5_size_t num_elems ) { SET_FNAME ( f, __func__ ); - return h5t_add_level ( f ); + h5_id_t num_vertices = (num_elems>>2)*3; /* this is an upper limit */ + return h5t_add_level ( f, num_vertices, num_elems ); } /*! @@ -71,7 +80,7 @@ H5FedAddLevel ( h5_id_t H5FedStoreVertex ( h5_file_t * const f, /*!< file handle */ - const h5_id_t id, /*!< id from mesher or -1 */ + const h5_id_t vertex_id, /*!< id from mesher or -1 */ const h5_float64_t P[3] /*!< coordinates */ ) { @@ -82,17 +91,7 @@ H5FedStoreVertex ( H5_ERR_INVAL, "Vertices can be added to level 0 only!" ); } - return h5t_store_vertex ( f, id, P ); -} - -h5_err_t -H5FedAddNumElements ( - h5_file_t * const f, /*!< file handle */ - const h5_size_t num /*!< number of additional - tets on current level */ - ) { - SET_FNAME ( f, __func__ ); - return h5t_add_num_elements ( f, num ); + return h5t_store_vertex ( f, vertex_id, P ); } /*! @@ -121,14 +120,14 @@ H5FedStoreElement ( H5_ERR_INVAL, "Tetrahedra can be added to level 0 only!" ); } - return h5t_store_element ( f, -1, local_vids ); + return h5t_store_elem ( f, -1, local_vids ); } h5_id_t H5FedRefineElement ( h5_file_t * const f, /*!< file handle */ - const h5_id_t local_cid /*!< local element id */ + const h5_id_t local_eid /*!< local element id */ ) { SET_FNAME ( f, __func__ ); - return h5t_refine_element ( f, local_cid ); + return h5t_refine_elem ( f, local_eid ); } diff --git a/src/H5Fed_store.h b/src/H5Fed_store.h index ebfda85..016168e 100644 --- a/src/H5Fed_store.h +++ b/src/H5Fed_store.h @@ -21,17 +21,20 @@ h5_id_t H5FedAddTetMesh ( - h5_file_t * const f + h5_file_t * const f, + const h5_size_t num_elems ); h5_id_t H5FedAddTriangleMesh ( - h5_file_t * const f + h5_file_t * const f, + const h5_size_t num_elems ); h5_id_t H5FedAddLevel ( - h5_file_t * f + h5_file_t * f, + const h5_size_t num_elems ); h5_err_t @@ -56,8 +59,13 @@ H5FedStoreVertex ( h5_id_t H5FedStoreElement ( h5_file_t * f, - h5_id_t *vertex_ids + const h5_id_t local_vids[] ); +h5_id_t +H5FedRefineElement ( + h5_file_t * const f, + const h5_id_t local_eid + ); #endif diff --git a/src/H5Part.c b/src/H5Part.c index 433d836..1de24a7 100644 --- a/src/H5Part.c +++ b/src/H5Part.c @@ -125,7 +125,7 @@ H5PartDefineStepName ( ) { SET_FNAME ( f, __func__ ); - return h5_define_stepname_fmt( f, name, width ); + return h5_set_stepname_fmt( f, name, width ); } /*! @@ -1027,67 +1027,4 @@ H5PartReadParticleStep ( /****************** error handling ******************/ -/*! - \ingroup h5part_c_api - \defgroup h5part_c_api_errhandling Error Handling -*/ - -/*! - \ingroup h5part_c_api_errhandling - - Set verbosity level to \c level. - - \return \c H5_SUCCESS -*/ -h5_int64_t -H5PartSetVerbosityLevel ( - const h5_int64_t level - ) { - - return h5_set_debuglevel ( level ); -} - -/*! - \ingroup h5part_c_api_errhandling - - Set error handler to \c handler. - - \return \c H5_SUCCESS -*/ -h5_int64_t -H5PartSetErrorHandler ( - h5_errorhandler_t handler - ) { - - return h5_set_errorhandler( handler ); -} - -/*! - \ingroup h5part_c_api_errhandling - - Get current error handler. - - \return Pointer to error handler. -*/ -h5_errorhandler_t -H5PartGetErrorHandler ( - void - ) { - return h5_get_errorhandler(); -} - -/*! - \ingroup h5part_c_api_errhandling - - Get last error code. - - \return error code -*/ -h5_int64_t -H5PartGetErrno ( - h5_file_t * const f - ) { - return h5_get_errno( f ); -} -/*! @} */ diff --git a/src/H5Part.h b/src/H5Part.h index f972fd9..be19f92 100644 --- a/src/H5Part.h +++ b/src/H5Part.h @@ -1,10 +1,26 @@ -#ifndef _H5Part_H_ -#define _H5Part_H_ +/* + Header file for declaring the H5Fed application programming + interface (API) in the C language. + + Copyright 2006-2007 + Paul Scherrer Institut, Villigen, Switzerland; + Benedikt Oswald; + Achim Gsell + All rights reserved. + + Authors + Achim Gsell + + Warning + This code is under development. + + */ +#ifndef __H5Part_H +#define __H5Part_H -#include -#include #include #include "h5_core/h5_core.h" +#include "H5.h" #ifdef PARALLEL_IO #include #endif @@ -272,40 +288,6 @@ H5PartReadFileAttrib ( void *data ); -h5_int64_t -H5PartSetVerbosityLevel ( - const h5_int64_t level - ); - -h5_int64_t -H5PartSetErrorHandler ( - const h5_errorhandler_t handler - ); - -h5_int64_t -H5PartGetErrno ( - h5_file_t *f - ); - -h5_errorhandler_t -H5PartGetErrorHandler ( - void - ); - -h5_int64_t -H5PartReportErrorHandler ( - h5_file_t *f, - const char *fmt, - ... - ); - -h5_int64_t -H5PartAbortErrorHandler ( - h5_file_t *f, - const char *fmt, - ... - ); - #ifdef __cplusplus } #endif diff --git a/src/bindings/Makefile.am b/src/bindings/Makefile.am index fbaf452..5694acd 100644 --- a/src/bindings/Makefile.am +++ b/src/bindings/Makefile.am @@ -1 +1,2 @@ -SUBDIRS = @BINDINGS@ \ No newline at end of file +#SUBDIRS = @BINDINGS@ +SUBDIRS = \ No newline at end of file