H5Fed C-API inlined

This commit is contained in:
2011-06-17 15:03:14 +00:00
parent 81f7f7716f
commit 8030a7246b
13 changed files with 521 additions and 827 deletions
-5
View File
@@ -368,11 +368,6 @@ src/C++/Makefile.am -text
src/C/H5.c -text
src/C/H5Block.c -text
src/C/H5Block_readwrite.c -text
src/C/H5Fed_adjacency.c -text
src/C/H5Fed_inquiry.c -text
src/C/H5Fed_retrieve.c -text
src/C/H5Fed_store.c -text
src/C/H5Fed_tags.c -text
src/C/H5Part.c -text
src/C/H5_attachments.c -text
src/C/H5_attribs.c -text
-46
View File
@@ -1,46 +0,0 @@
/*
Copyright 2006-2010
Paul Scherrer Institut, Villigen, Switzerland;
Benedikt Oswald;
Achim Gsell
All rights reserved.
Authors
Achim Gsell
Warning
This code is under development.
*/
#include "h5core/h5_core.h"
#include "H5Fed.h"
/****** UPWARD ADJACENCY routines *********************************************/
/*!
\return number of upward adjacent edges
*/
h5_err_t
H5FedGetAdjacencies (
h5_file_t* const f,
const h5_loc_id_t entity_id,
const h5_int32_t dim,
h5_loc_idlist_t** list
) {
H5_API_ENTER4 (h5_err_t,
"f=0x%p, entity_id=%lld, dim=%d, list=0x%p",
f, (long long)entity_id, dim, list);
H5_API_RETURN (h5t_get_adjacencies (f, entity_id, dim, list));
}
h5_err_t
H5FedReleaseListOfAdjacencies (
h5_file_t* const f,
h5_loc_idlist_t** list
) {
H5_API_ENTER2 (h5_err_t,
"f=0x%p, list=0x%p",
f, list);
H5_API_RETURN (h5t_release_list_of_adjacencies (f, list));
}
-154
View File
@@ -1,154 +0,0 @@
/*
Copyright 2007-2008
Paul Scherrer Institut, Villigen, Switzerland;
Benedikt Oswald;
Achim Gsell
All rights reserved.
Authors
Achim Gsell
Warning
This code is under development.
*/
/*!
\ingroup h5fed_c_api
\defgroup h5fed_mesh_inquiry
*/
#include "h5core/h5_core.h"
#include "H5Fed.h"
/*!
Get the number of hierarchical mesh levels.
\param[in] f File handle
\return Number of hierarchical mesh levels or error code.
*/
h5_ssize_t
H5FedGetNumLevels (
h5_file_t* const f
) {
H5_API_ENTER1 (h5_ssize_t, "f=0x%p", f);
H5_API_RETURN (h5t_get_num_leaf_levels (f));
}
/*!
Get current mesh levels.
\param[in] f File handle
\return ID of current mesh levels or error code.
*/
h5t_lvl_idx_t
H5FedGetLevel (
h5_file_t* const f
) {
H5_API_ENTER1 (h5t_lvl_idx_t, "f=0x%p", f);
H5_API_RETURN (h5t_get_level (f));
}
/*!
Returns the number of vertices used for defining the (sub-)mesh
at current level on this compute node.
\param[in] f file handle
\return Number of vertices or error code.
*/
h5_ssize_t
H5FedGetNumVertices (
h5_file_t* const f /*!< file handle */
) {
H5_API_ENTER1 (h5_ssize_t, "f=0x%p", f);
H5_API_RETURN (h5t_get_num_vertices (f, -1));
}
/*!
Returns the number of vertices used for defining the (sub-)mesh
at current level on compute node \c cnode.
\param[in] f file handle
\param[in] cnode compute node
\return Number of vertices or error code.
*/
h5_ssize_t
H5FedGetNumVerticesCnode (
h5_file_t* const f,
const int cnode
) {
H5_API_ENTER2 (h5_ssize_t, "f=0x%p, cnode=%d", f, cnode);
H5_API_RETURN (h5t_get_num_vertices (f, cnode));
}
/*!
Returns the number of vertices used for defining the (sub-)mesh
at current level overl all compute nodes.
\param[in] f file handle
\return Total number of vertices or error code.
*/
h5_ssize_t
H5FedGetNumVerticesTotal (
h5_file_t* const f
) {
H5_API_ENTER1 (h5_ssize_t, "f=0x%p", f);
H5_API_RETURN (h5t_get_num_vertices (f, -1));
}
/*!
Returns the number of elements present in the (sub-)mesh
at current level on this compute node.
\param[in] f file handle
\return Number of elements or error code.
*/
h5_ssize_t
H5FedGetNumElements (
h5_file_t* const f
) {
H5_API_ENTER1 (h5_ssize_t, "f=0x%p", f);
// MLH: can't use field from opaque h5_file_t!
//h5_ssize_t num = h5t_get_num_elems (f, f->myproc);
H5_API_RETURN (h5t_get_num_elems (f, -1));
}
/*!
Returns the number of elements present in the (sub-)mesh
at current level on compute node \c cnode.
\param[in] f file handle
\param[in] cnode Compute node
\return Number of elements or error code.
*/
h5_ssize_t
H5FedGetNumElementsCnode (
h5_file_t* const f,
const int cnode
) {
H5_API_ENTER2 (h5_ssize_t, "f=0x%p, cnode=%d", f, cnode);
H5_API_RETURN (h5t_get_num_elems (f, cnode));
}
/*!
Returns the number of elements present in the mesh
at current level over all compute nodes.
\param[in] f File handle.
\return Number of elements or error code.
*/
h5_ssize_t
H5FedGetNumElementsTotal (
h5_file_t* const f
) {
H5_API_ENTER1 (h5_ssize_t, "f=0x%p", f);
H5_API_RETURN (h5t_get_num_elems (f, -1));
}
-176
View File
@@ -1,176 +0,0 @@
/****** RETRIEVAL routines **************************************************/
/*
Copyright 2007-2008
Paul Scherrer Institut, Villigen, Switzerland;
Benedikt Oswald;
Achim Gsell
All rights reserved.
Authors
Achim Gsell
Warning
This code is under development.
*/
#include "h5core/h5_core.h"
#include "H5Fed.h"
/*!
Begin traverse over all entities on this compute node.
Initialize internal data structures.
\remark
Entities might be on processor boundaries! Therefore the same entity might be
processed on several compute nodes.
\param[in] f file handle
\param[in] codim co-dimension of entity to traverse
\return H5_SUCCESS or error code
*/
h5t_iterator_p
H5FedBeginTraverseEntities (
h5_file_t* const f,
const int codim
) {
H5_API_ENTER2 (h5t_iterator_p, "f=0x%p, codim=%d", f, codim);
h5t_iterator_p iter;
TRY2 (iter = h5_calloc (1, sizeof (*iter)));
TRY2 (h5t_init_leaf_iterator (f, iter, codim));
H5_API_RETURN (iter);
}
h5t_iterator_p
H5FedBeginTraverseBoundaryFaces (
h5_file_t* const f,
const int codim
) {
H5_API_ENTER2 (h5t_iterator_p, "f=0x%p, codim=%d", f, codim);
h5t_iterator_p iter;
TRY2 (iter = h5_calloc (1, sizeof (*iter)));
TRY2 (h5t_init_boundary_face_iterator (f, iter, codim));
H5_API_RETURN (iter);
}
/*!
Get next local entity ID.
\param[in] f file handle
\param[in/out] iter iterator
\return Local entity ID
\return -1, if done
\return error code on error
*/
h5_loc_id_t
H5FedTraverseEntities (
h5_file_t* const f,
h5t_iterator_t* iter
) {
H5_API_ENTER2 (h5_loc_id_t, "f=0x%p, iter=0x%p", f, iter);
H5_API_RETURN (h5t_iterate_entities (f, iter));
}
/*!
End of traversing. Release internal data structures.
\param[in] f File handle
\return H5_SUCCESS or error code
*/
h5_err_t
H5FedEndTraverseEntities (
h5_file_t* const f,
h5t_iterator_t* iter
) {
H5_API_ENTER2 (h5_err_t, "f=0x%p, iter=0x%p", f, iter);
H5_API_RETURN (h5t_release_entity_iterator (f, iter));
}
/*!
Get coordinates of vertex given by local index
\param[in] f file handle
\param[in] vertex_idx local index of vertex
\param[out] P 3-dimensional coordinates
\return H5_SUCCESS or error code
*/
h5_err_t
H5FedGetVertexCoordsByIndex (
h5_file_t* const f,
h5_loc_idx_t vertex_index,
h5_float64_t P[3]
) {
H5_API_ENTER3 (h5_err_t,
"f=0x%p, vertex_index=%lld, P=0x%p",
f, (long long)vertex_index, P);
H5_API_RETURN (h5t_get_vertex_coords_by_index (f, vertex_index, P));
}
h5_err_t
H5FedGetVertexCoordsByID (
h5_file_t* const f,
h5_loc_id_t vertex_id,
h5_float64_t P[3]
) {
H5_API_ENTER3 (h5_err_t,
"f=0x%p, vertex_id=%lld, P=0x%p",
f, (long long)vertex_id, P);
H5_API_RETURN (h5t_get_vertex_coords_by_id (f, vertex_id, P));
}
h5_err_t
H5FedGetVertexIndicesOfEdge (
h5_file_t* const f,
h5_loc_id_t entity_id,
h5_loc_idx_t* vertex_indices
) {
H5_API_ENTER3 (h5_err_t,
"f=0x%p, entity_id=%lld, vertex_indices=0x%p",
f, (long long)entity_id, vertex_indices);
H5_API_RETURN (h5t_get_vertex_indices_of_edge (f, entity_id, vertex_indices));
}
h5_err_t
H5FedGetVertexIndicesOfTriangle (
h5_file_t* const f,
h5_loc_id_t entity_id,
h5_loc_idx_t* vertex_indices
) {
H5_API_ENTER3 (h5_err_t,
"f=0x%p, entity_id=%lld, vertex_indices=0x%p",
f, (long long)entity_id, vertex_indices);
H5_API_RETURN (h5t_get_vertex_indices_of_triangle (f, entity_id, vertex_indices));
}
h5_err_t
H5FedGetVertexIndicesOfTet (
h5_file_t* const f,
h5_loc_id_t entity_id,
h5_loc_idx_t* vertex_indices
) {
H5_API_ENTER3 (h5_err_t,
"f=0x%p, entity_id=%lld, vertex_indices=0x%p",
f, (long long)entity_id, vertex_indices);
H5_API_RETURN (h5t_get_vertex_indices_of_tet (f, entity_id, vertex_indices));
}
h5_err_t
H5FedGetVertexIndicesOfEntity (
h5_file_t* const f,
h5_loc_id_t entity_id,
h5_loc_idx_t* vertex_indices
) {
H5_API_ENTER3 (h5_err_t,
"f=0x%p, entity_id=%lld, vertex_indices=0x%p",
f, (long long)entity_id, vertex_indices);
H5_API_RETURN (h5t_get_vertex_indices_of_entity (f, entity_id, vertex_indices));
}
-168
View File
@@ -1,168 +0,0 @@
/*
Copyright 2007-2008
Paul Scherrer Institut, Villigen, Switzerland;
Benedikt Oswald;
Achim Gsell
All rights reserved.
Authors
Achim Gsell
Warning
This code is under development.
*/
#include "h5core/h5_core.h"
#include "H5Fed.h"
/*!
\ingroup h5fed_c_api
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_to_refine Number of elements which will be refined.
\return ID of new level.
\note
values for f->t.num_levels:
\c -1 unknown: after opening the file. This is equivalent to
"topological data has not been initialized".
\c 0 no levels: HDF5 group for meshes may already exist but must not!
\c > 0 number of mesh levels
*/
h5t_lvl_idx_t
H5FedAddLevel (
h5_file_t* const f
) {
H5_API_ENTER1 (h5t_lvl_idx_t, "f=0x%p", f);
H5_API_RETURN (h5t_add_level (f));
}
h5_err_t
H5FedBeginStoreVertices (
h5_file_t* const f,
const h5_size_t num
) {
H5_API_ENTER2 (h5_err_t,
"f=0x%p, num=%llu",
f, (long long unsigned)num);
H5_API_RETURN (h5t_begin_store_vertices (f, num));
}
/*!
\ingroup h5fed_c_api
Stores the the coordinates of a specific vertex at level \c level
with id \c vertex_id of the tetrahedral mesh.
\return local vertex id on success
\return errno on error
*/
h5_loc_idx_t
H5FedStoreVertex (
h5_file_t* const f, /*!< file handle */
const h5_glb_id_t vertex_id, /*!< id from mesher or -1 */
const h5_float64_t P[3] /*!< coordinates */
) {
H5_API_ENTER3 (h5_loc_idx_t,
"f=0x%p, vertex_id=%lld, P=0x%p",
f, (long long)vertex_id, P);
if (h5t_get_level (f) != 0) {
H5_API_LEAVE (
h5_error (
H5_ERR_INVAL,
"Vertices can be added to level 0 only!"));
}
H5_API_RETURN (h5t_store_vertex (f, vertex_id, P));
}
h5_err_t
H5FedEndStoreVertices (
h5_file_t* const f
) {
H5_API_ENTER1 (h5_err_t, "f=0x%p", f);
H5_API_RETURN (h5t_end_store_vertices (f));
}
h5_err_t
H5FedBeginStoreElements (
h5_file_t* const f,
const h5_size_t num
) {
H5_API_ENTER2 (h5_err_t,
"f=0x%p, num=%llu",
f, (long long unsigned)num);
H5_API_RETURN (h5t_begin_store_elems (f, num));
}
/*!
\ingroup h5fed_c_api
Stores the 4-tuple, that contains the specific indices describing
a tetrahedron with id \c tet_id at level \c level of the tetrahedral
mesh.
Errors:
* current level not yet defined
* to many tets stored on level
\return local tetrahedron id
\return \c errno on error
*/
h5_loc_idx_t
H5FedStoreElement (
h5_file_t* const f, /*!< file handle */
const h5_loc_idx_t local_vids[] /*!< tuple with vertex id's */
) {
H5_API_ENTER2 (h5_loc_idx_t, "f=0x%p, local_vids=0x%p", f, local_vids);
if (h5t_get_level (f) != 0) {
H5_API_LEAVE (
h5_error (
H5_ERR_INVAL,
"Elements can be added to level 0 only!"));
}
H5_API_RETURN (h5t_store_elem (f, -1, local_vids));
}
h5_err_t
H5FedEndStoreElements (
h5_file_t* const f
) {
H5_API_ENTER1 (h5_err_t, "f=0x%p", f);
H5_API_RETURN (h5t_end_store_elems (f));
}
h5_err_t
H5FedBeginRefineElements (
h5_file_t* const f
) {
H5_API_ENTER1 (h5_err_t, "f=0x%p", f);
H5_API_RETURN (h5t_begin_refine_elems (f));
}
h5_loc_idx_t
H5FedRefineElement (
h5_file_t* const f, /*!< file handle */
const h5_loc_id_t local_eid /*!< local element id */
) {
H5_API_ENTER2 (h5_loc_idx_t,
"f=0x%p, local_eid=%lld",
f, (long long)local_eid);
H5_API_RETURN (h5t_mark_entity (f, local_eid));
}
h5_err_t
H5FedEndRefineElements (
h5_file_t* const f
) {
H5_API_ENTER1 (h5_err_t, "f=0x%p", f);
H5_API_RETURN (h5t_end_refine_elems (f));
}
-154
View File
@@ -1,154 +0,0 @@
/*
Copyright 2007-2011
Paul Scherrer Institut, Villigen, Switzerland;
Achim Gsell
All rights reserved.
Authors
Achim Gsell
Warning
This code is under development.
*/
#include "h5core/h5_core.h"
#include "H5Fed.h"
/*!
Add a tagset to the current mesh.
\param[in] f file handle
\param[in] name name of tagset
\param[in] type data type of tagset
\return H5_SUCCESS or error code
*/
h5_err_t
H5FedAddMTagset (
h5_file_t* const f,
char* name,
h5_id_t type
) {
H5_API_ENTER3 (h5_err_t, "f=0x%p, name=\"%s\", type=%lld",
f, name, (long long)type);
H5_API_RETURN (h5t_add_mtagset (f, name, type));
}
/*!
Remove a tagset from the current mesh.
\param[in] f file handle
\param[in] name name of tagset to remove
\return H5_SUCCESS or error code
*/
h5_err_t
H5FedRemoveMTagset (
h5_file_t* const f,
char name[]
) {
H5_API_ENTER2 (h5_err_t, "f=0x%p, name=\"%s\"", f, name);
H5_API_RETURN (h5t_remove_mtagset (f, name));
}
/*!
Get available tagsets in current mesh.
\param[in] f file handle
\param[out] names names of available tagsets
\return Number of tagsets or error code
*/
h5_ssize_t
H5FedGetMTagsets (
h5_file_t* const f,
char** names[]
) {
H5_API_ENTER2 (h5_ssize_t, "f=0x%p, names=0x%p", f, names);
H5_API_RETURN (h5t_get_mtagsets (f, names));
}
/*!
Get type of tagset in current mesh.
\param[in] f file handle
\param[in] name name of tagset
\return H5_SUCCESS or error code
*/
h5_id_t
H5FedGetTypeOfMTagset (
h5_file_t* const f,
char name[]
) {
H5_API_ENTER2 (h5_err_t, "f=0x%p, name=\"%s\"", f, name);
H5_API_RETURN (h5t_get_mtagset_type_by_name (f, name));
}
/*!
Set tag for entity in current mesh.
\param[in] f file handle
\param[in] name names of tagset
\param[in] id id of entity
\param[in] dim dimension of value
\param[in] val tag value
\return H5_SUCCESS or error code
*/
h5_err_t
H5FedSetMTag (
h5_file_t* const f,
char name[],
h5_loc_id_t id,
const size_t dim,
void* buffer
) {
H5_API_ENTER5 (h5_err_t,
"f=0x%p, name=\"%s\", id=%lld, dim=%lld, val=0x%p",
f, name, (long long)id, (long long)dim, buffer);
H5_API_RETURN (h5t_set_mtag_by_name (f, name, id, dim, buffer));
}
/*!
Set tag for entity in current mesh.
\param[in] f file handle
\param[in] name names of tagset
\param[in] id id of entity
\param[out] dim dimension of value
\param[out] val tag value
\return H5_SUCCESS or error code
*/
h5_err_t
H5FedGetMTag (
h5_file_t* const f,
const char name[],
const h5_loc_id_t id,
size_t* dim,
void* buffer
) {
H5_API_ENTER5 (h5_err_t,
"f=0x%p, name=\"%s\", id=%lld, dim=0x%p, val=0x%p",
f, name, (long long)id, dim, buffer);
H5_API_RETURN (h5t_get_mtag_by_name (f, name, id, dim, buffer));
}
/*!
Remove tag for entity in current mesh.
\param[in] f file handle
\param[in] name names of tagset
\param[in] id id of entity
*/
h5_err_t
H5FedRemoveMTag (
h5_file_t* const f,
const char name[],
const h5_loc_id_t id
) {
H5_API_ENTER3 (h5_err_t, "f=0x%p, name=\"%s\", id=%lld",
f, name, (long long)id);
H5_API_RETURN (h5t_remove_mtag_by_name (f, name, id));
}
+1 -6
View File
@@ -37,12 +37,7 @@ ___lib_libH5hutC_a_SOURCES = \
H5_attachments.c \
H5Part.c \
H5Block.c \
H5Block_readwrite.c \
H5Fed_adjacency.c \
H5Fed_inquiry.c \
H5Fed_retrieve.c \
H5Fed_store.c \
H5Fed_tags.c
H5Block_readwrite.c
all: all-am
+16 -6
View File
@@ -5,19 +5,29 @@
extern "C" {
#endif
h5_err_t
static inline h5_err_t
H5FedGetAdjacencies (
h5_file_t* const f,
const h5_loc_id_t entity_id,
const h5_int32_t dim,
h5_loc_idlist_t** list
);
) {
H5_API_ENTER4 (h5_err_t,
"f=0x%p, entity_id=%lld, dim=%d, list=0x%p",
f, (long long)entity_id, dim, list);
H5_API_RETURN (h5t_get_adjacencies (f, entity_id, dim, list));
}
h5_err_t
static inline h5_err_t
H5FedReleaseListOfAdjacencies (
h5_file_t * const f,
h5_loc_idlist_t **list
);
h5_file_t* const f,
h5_loc_idlist_t** list
) {
H5_API_ENTER2 (h5_err_t,
"f=0x%p, list=0x%p",
f, list);
H5_API_RETURN (h5t_release_list_of_adjacencies (f, list));
}
#ifdef __cplusplus
}
+131 -8
View File
@@ -46,14 +46,137 @@ H5FedGetNumTriangleMeshes (
H5_API_RETURN (h5t_get_num_trimeshes (f));
}
h5_ssize_t H5FedGetNumLevels ( h5_file_t * const f );
h5t_lvl_idx_t H5FedGetLevel ( h5_file_t * const f );
h5_ssize_t H5FedGetNumVertices ( h5_file_t * const f );
h5_ssize_t H5FedGetNumVerticesCnode ( h5_file_t * const f, const int cnode );
h5_ssize_t H5FedGetNumVerticesTotal ( h5_file_t * const f );
h5_ssize_t H5FedGetNumElements ( h5_file_t * const f );
h5_ssize_t H5FedGetNumElementsCnode ( h5_file_t * const f, const int cnode );
h5_ssize_t H5FedGetNumElementsTotal ( h5_file_t * const f );
/*!
Get the number of hierarchical mesh levels.
\param[in] f File handle
\return Number of hierarchical mesh levels or error code.
*/
static inline h5_ssize_t
H5FedGetNumLevels (
h5_file_t* const f
) {
H5_API_ENTER1 (h5_ssize_t, "f=0x%p", f);
H5_API_RETURN (h5t_get_num_leaf_levels (f));
}
/*!
Get current mesh levels.
\param[in] f File handle
\return ID of current mesh levels or error code.
*/
static inline h5t_lvl_idx_t
H5FedGetLevel (
h5_file_t* const f
) {
H5_API_ENTER1 (h5t_lvl_idx_t, "f=0x%p", f);
H5_API_RETURN (h5t_get_level (f));
}
/*!
Returns the number of vertices used for defining the (sub-)mesh
at current level on this compute node.
\param[in] f file handle
\return Number of vertices or error code.
*/
static inline h5_ssize_t
H5FedGetNumVertices (
h5_file_t* const f /*!< file handle */
) {
H5_API_ENTER1 (h5_ssize_t, "f=0x%p", f);
H5_API_RETURN (h5t_get_num_vertices (f, -1));
}
/*!
Returns the number of vertices used for defining the (sub-)mesh
at current level on compute node \c cnode.
\param[in] f file handle
\param[in] cnode compute node
\return Number of vertices or error code.
*/
static inline h5_ssize_t
H5FedGetNumVerticesCnode (
h5_file_t* const f,
const int cnode
) {
H5_API_ENTER2 (h5_ssize_t, "f=0x%p, cnode=%d", f, cnode);
H5_API_RETURN (h5t_get_num_vertices (f, cnode));
}
/*!
Returns the number of vertices used for defining the (sub-)mesh
at current level overl all compute nodes.
\param[in] f file handle
\return Total number of vertices or error code.
*/
static inline h5_ssize_t
H5FedGetNumVerticesTotal (
h5_file_t* const f
) {
H5_API_ENTER1 (h5_ssize_t, "f=0x%p", f);
H5_API_RETURN (h5t_get_num_vertices (f, -1));
}
/*!
Returns the number of elements present in the (sub-)mesh
at current level on this compute node.
\param[in] f file handle
\return Number of elements or error code.
*/
static inline h5_ssize_t
H5FedGetNumElements (
h5_file_t* const f
) {
H5_API_ENTER1 (h5_ssize_t, "f=0x%p", f);
// MLH: can't use field from opaque h5_file_t!
//h5_ssize_t num = h5t_get_num_elems (f, f->myproc);
H5_API_RETURN (h5t_get_num_elems (f, -1));
}
/*!
Returns the number of elements present in the (sub-)mesh
at current level on compute node \c cnode.
\param[in] f file handle
\param[in] cnode Compute node
\return Number of elements or error code.
*/
static inline h5_ssize_t
H5FedGetNumElementsCnode (
h5_file_t* const f,
const int cnode
) {
H5_API_ENTER2 (h5_ssize_t, "f=0x%p, cnode=%d", f, cnode);
H5_API_RETURN (h5t_get_num_elems (f, cnode));
}
/*!
Returns the number of elements present in the mesh
at current level over all compute nodes.
\param[in] f File handle.
\return Number of elements or error code.
*/
static inline h5_ssize_t
H5FedGetNumElementsTotal (
h5_file_t* const f
) {
H5_API_ENTER1 (h5_ssize_t, "f=0x%p", f);
H5_API_RETURN (h5t_get_num_elems (f, -1));
}
#ifdef __cplusplus
}
+122 -33
View File
@@ -19,73 +19,162 @@
extern "C" {
#endif
h5t_iterator_t*
/*!
Begin traverse over all entities on this compute node.
Initialize internal data structures.
\remark
Entities might be on processor boundaries! Therefore the same entity might be
processed on several compute nodes.
\param[in] f file handle
\param[in] codim co-dimension of entity to traverse
\return H5_SUCCESS or error code
*/
static inline h5t_iterator_p
H5FedBeginTraverseEntities (
h5_file_t* const f,
int codim
);
h5t_iterator_t*
const int codim
) {
H5_API_ENTER2 (h5t_iterator_p, "f=0x%p, codim=%d", f, codim);
h5t_iterator_p iter;
TRY2 (iter = h5_calloc (1, sizeof (*iter)));
TRY2 (h5t_init_leaf_iterator (f, iter, codim));
H5_API_RETURN (iter);
}
static inline h5t_iterator_p
H5FedBeginTraverseBoundaryFaces (
h5_file_t* const f,
int codim
);
h5_loc_id_t
const int codim
) {
H5_API_ENTER2 (h5t_iterator_p, "f=0x%p, codim=%d", f, codim);
h5t_iterator_p iter;
TRY2 (iter = h5_calloc (1, sizeof (*iter)));
TRY2 (h5t_init_boundary_face_iterator (f, iter, codim));
H5_API_RETURN (iter);
}
/*!
Get next local entity ID.
\param[in] f file handle
\param[in/out] iter iterator
\return Local entity ID
\return -1, if done
\return error code on error
*/
static inline h5_loc_id_t
H5FedTraverseEntities (
h5_file_t* const f,
h5t_iterator_t* iter
);
h5_err_t
) {
H5_API_ENTER2 (h5_loc_id_t, "f=0x%p, iter=0x%p", f, iter);
H5_API_RETURN (h5t_iterate_entities (f, iter));
}
/*!
End of traversing. Release internal data structures.
\param[in] f File handle
\return H5_SUCCESS or error code
*/
static inline h5_err_t
H5FedEndTraverseEntities (
h5_file_t* const f,
h5t_iterator_t* iter
);
h5_err_t
) {
H5_API_ENTER2 (h5_err_t, "f=0x%p, iter=0x%p", f, iter);
H5_API_RETURN (h5t_release_entity_iterator (f, iter));
}
/*!
Get coordinates of vertex given by local index
\param[in] f file handle
\param[in] vertex_idx local index of vertex
\param[out] P 3-dimensional coordinates
\return H5_SUCCESS or error code
*/
static inline h5_err_t
H5FedGetVertexCoordsByIndex (
h5_file_t* const f,
h5_loc_idx_t vertex_index,
h5_float64_t P[3]
);
h5_err_t
) {
H5_API_ENTER3 (h5_err_t,
"f=0x%p, vertex_index=%lld, P=0x%p",
f, (long long)vertex_index, P);
H5_API_RETURN (h5t_get_vertex_coords_by_index (f, vertex_index, P));
}
static inline h5_err_t
H5FedGetVertexCoordsByID (
h5_file_t* const f,
h5_loc_id_t vertex_id,
h5_float64_t P[3]
);
) {
H5_API_ENTER3 (h5_err_t,
"f=0x%p, vertex_id=%lld, P=0x%p",
f, (long long)vertex_id, P);
H5_API_RETURN (h5t_get_vertex_coords_by_id (f, vertex_id, P));
}
h5_err_t
static inline h5_err_t
H5FedGetVertexIndicesOfEdge (
h5_file_t* const f,
h5_loc_id_t entity_id,
h5_loc_idx_t* const vertex_indices
);
h5_loc_idx_t* vertex_indices
) {
H5_API_ENTER3 (h5_err_t,
"f=0x%p, entity_id=%lld, vertex_indices=0x%p",
f, (long long)entity_id, vertex_indices);
H5_API_RETURN (h5t_get_vertex_indices_of_edge (f, entity_id, vertex_indices));
}
h5_err_t
static inline h5_err_t
H5FedGetVertexIndicesOfTriangle (
h5_file_t* const f,
h5_loc_id_t entity_id,
h5_loc_idx_t* const vertex_indices
);
h5_loc_idx_t* vertex_indices
) {
H5_API_ENTER3 (h5_err_t,
"f=0x%p, entity_id=%lld, vertex_indices=0x%p",
f, (long long)entity_id, vertex_indices);
H5_API_RETURN (h5t_get_vertex_indices_of_triangle (f, entity_id, vertex_indices));
}
h5_err_t
H5FedGetVertexIndicesOfTriangleCClockwise (
h5_file_t* const f,
h5_loc_id_t entity_id,
h5_loc_idx_t* const vertex_indices
);
h5_err_t
static inline h5_err_t
H5FedGetVertexIndicesOfTet (
h5_file_t* const f,
h5_loc_id_t entity_id,
h5_loc_idx_t* const vertex_indices
);
h5_loc_idx_t* vertex_indices
) {
H5_API_ENTER3 (h5_err_t,
"f=0x%p, entity_id=%lld, vertex_indices=0x%p",
f, (long long)entity_id, vertex_indices);
H5_API_RETURN (h5t_get_vertex_indices_of_tet (f, entity_id, vertex_indices));
}
h5_err_t
static inline h5_err_t
H5FedGetVertexIndicesOfEntity (
h5_file_t* const f,
h5_loc_id_t entity_id,
h5_loc_idx_t* const vertex_indices
);
h5_loc_idx_t* vertex_indices
) {
H5_API_ENTER3 (h5_err_t,
"f=0x%p, entity_id=%lld, vertex_indices=0x%p",
f, (long long)entity_id, vertex_indices);
H5_API_RETURN (h5t_get_vertex_indices_of_entity (f, entity_id, vertex_indices));
}
#ifdef __cplusplus
}
+136 -44
View File
@@ -39,62 +39,154 @@ H5FedAddTriangleMesh (
H5_API_RETURN (h5t_add_triangle_mesh (f));
}
h5t_lvl_idx_t
/*!
\ingroup h5fed_c_api
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_to_refine Number of elements which will be refined.
\return ID of new level.
\note
values for f->t.num_levels:
\c -1 unknown: after opening the file. This is equivalent to
"topological data has not been initialized".
\c 0 no levels: HDF5 group for meshes may already exist but must not!
\c > 0 number of mesh levels
*/
static inline h5t_lvl_idx_t
H5FedAddLevel (
h5_file_t * const f
);
h5_file_t* const f
) {
H5_API_ENTER1 (h5t_lvl_idx_t, "f=0x%p", f);
H5_API_RETURN (h5t_add_level (f));
}
h5_err_t
static inline h5_err_t
H5FedBeginStoreVertices (
h5_file_t * const f,
const h5_size_t num
);
h5_loc_idx_t
H5FedStoreVertex (
h5_file_t * const f,
const h5_glb_idx_t id,
const h5_float64_t P[3]
);
h5_err_t
H5FedEndStoreVertices (
h5_file_t * const f
);
h5_err_t
H5FedBeginStoreElements (
h5_file_t * const f,
const h5_size_t num
);
h5_loc_idx_t
H5FedStoreElement (
h5_file_t* const f,
const h5_loc_idx_t local_vids[]
);
const h5_size_t num
) {
H5_API_ENTER2 (h5_err_t,
"f=0x%p, num=%llu",
f, (long long unsigned)num);
H5_API_RETURN (h5t_begin_store_vertices (f, num));
}
h5_err_t
/*!
\ingroup h5fed_c_api
Stores the the coordinates of a specific vertex at level \c level
with id \c vertex_id of the tetrahedral mesh.
\return local vertex id on success
\return errno on error
*/
static inline h5_loc_idx_t
H5FedStoreVertex (
h5_file_t* const f, /*!< file handle */
const h5_glb_id_t vertex_id, /*!< id from mesher or -1 */
const h5_float64_t P[3] /*!< coordinates */
) {
H5_API_ENTER3 (h5_loc_idx_t,
"f=0x%p, vertex_id=%lld, P=0x%p",
f, (long long)vertex_id, P);
if (h5t_get_level (f) != 0) {
H5_API_LEAVE (
h5_error (
H5_ERR_INVAL,
"Vertices can be added to level 0 only!"));
}
H5_API_RETURN (h5t_store_vertex (f, vertex_id, P));
}
static inline h5_err_t
H5FedEndStoreVertices (
h5_file_t* const f
) {
H5_API_ENTER1 (h5_err_t, "f=0x%p", f);
H5_API_RETURN (h5t_end_store_vertices (f));
}
static inline h5_err_t
H5FedBeginStoreElements (
h5_file_t* const f,
const h5_size_t num
) {
H5_API_ENTER2 (h5_err_t,
"f=0x%p, num=%llu",
f, (long long unsigned)num);
H5_API_RETURN (h5t_begin_store_elems (f, num));
}
/*!
\ingroup h5fed_c_api
Stores the 4-tuple, that contains the specific indices describing
a tetrahedron with id \c tet_id at level \c level of the tetrahedral
mesh.
Errors:
* current level not yet defined
* to many tets stored on level
\return local tetrahedron id
\return \c errno on error
*/
static inline h5_loc_idx_t
H5FedStoreElement (
h5_file_t* const f, /*!< file handle */
const h5_loc_idx_t local_vids[] /*!< tuple with vertex id's */
) {
H5_API_ENTER2 (h5_loc_idx_t, "f=0x%p, local_vids=0x%p", f, local_vids);
if (h5t_get_level (f) != 0) {
H5_API_LEAVE (
h5_error (
H5_ERR_INVAL,
"Elements can be added to level 0 only!"));
}
H5_API_RETURN (h5t_store_elem (f, -1, local_vids));
}
static inline h5_err_t
H5FedEndStoreElements (
h5_file_t * const f
);
h5_file_t* const f
) {
H5_API_ENTER1 (h5_err_t, "f=0x%p", f);
H5_API_RETURN (h5t_end_store_elems (f));
}
h5_err_t
static inline h5_err_t
H5FedBeginRefineElements (
h5_file_t * const f
);
h5_file_t* const f
) {
H5_API_ENTER1 (h5_err_t, "f=0x%p", f);
H5_API_RETURN (h5t_begin_refine_elems (f));
}
h5_loc_idx_t
static inline h5_loc_idx_t
H5FedRefineElement (
h5_file_t * const f,
const h5_loc_idx_t elem_idx
);
h5_file_t* const f, /*!< file handle */
const h5_loc_id_t local_eid /*!< local element id */
) {
H5_API_ENTER2 (h5_loc_idx_t,
"f=0x%p, local_eid=%lld",
f, (long long)local_eid);
H5_API_RETURN (h5t_mark_entity (f, local_eid));
}
h5_err_t
static inline h5_err_t
H5FedEndRefineElements (
h5_file_t * const f
);
h5_file_t* const f
) {
H5_API_ENTER1 (h5_err_t, "f=0x%p", f);
H5_API_RETURN (h5t_end_refine_elems (f));
}
#ifdef __cplusplus
}
+115 -20
View File
@@ -5,49 +5,144 @@
extern "C" {
#endif
h5_err_t
/*!
Add a tagset to the current mesh.
\param[in] f file handle
\param[in] name name of tagset
\param[in] type data type of tagset
\return H5_SUCCESS or error code
*/
static inline h5_err_t
H5FedAddMTagset (
h5_file_t* const f,
char* name,
h5_id_t type
);
h5_err_t
) {
H5_API_ENTER3 (h5_err_t, "f=0x%p, name=\"%s\", type=%lld",
f, name, (long long)type);
H5_API_RETURN (h5t_add_mtagset (f, name, type));
}
/*!
Remove a tagset from the current mesh.
\param[in] f file handle
\param[in] name name of tagset to remove
\return H5_SUCCESS or error code
*/
static inline h5_err_t
H5FedRemoveMTagset (
h5_file_t* const f,
char name[]
);
h5_ssize_t
) {
H5_API_ENTER2 (h5_err_t, "f=0x%p, name=\"%s\"", f, name);
H5_API_RETURN (h5t_remove_mtagset (f, name));
}
/*!
Get available tagsets in current mesh.
\param[in] f file handle
\param[out] names names of available tagsets
\return Number of tagsets or error code
*/
static inline h5_ssize_t
H5FedGetMTagsets (
h5_file_t* const f,
char** names[]
);
h5_id_t
) {
H5_API_ENTER2 (h5_ssize_t, "f=0x%p, names=0x%p", f, names);
H5_API_RETURN (h5t_get_mtagsets (f, names));
}
/*!
Get type of tagset in current mesh.
\param[in] f file handle
\param[in] name name of tagset
\return H5_SUCCESS or error code
*/
static inline h5_id_t
H5FedGetTypeOfMTagset (
h5_file_t* const f,
char name[]
);
h5_err_t
) {
H5_API_ENTER2 (h5_err_t, "f=0x%p, name=\"%s\"", f, name);
H5_API_RETURN (h5t_get_mtagset_type_by_name (f, name));
}
/*!
Set tag for entity in current mesh.
\param[in] f file handle
\param[in] name names of tagset
\param[in] id id of entity
\param[in] dim dimension of value
\param[in] val tag value
\return H5_SUCCESS or error code
*/
static inline h5_err_t
H5FedSetMTag (
h5_file_t* const f,
char name[],
h5_loc_id_t entity_id,
const size_t dims,
void* val
);
h5_err_t
h5_loc_id_t id,
const size_t dim,
void* buffer
) {
H5_API_ENTER5 (h5_err_t,
"f=0x%p, name=\"%s\", id=%lld, dim=%lld, val=0x%p",
f, name, (long long)id, (long long)dim, buffer);
H5_API_RETURN (h5t_set_mtag_by_name (f, name, id, dim, buffer));
}
/*!
Set tag for entity in current mesh.
\param[in] f file handle
\param[in] name names of tagset
\param[in] id id of entity
\param[out] dim dimension of value
\param[out] val tag value
\return H5_SUCCESS or error code
*/
static inline h5_err_t
H5FedGetMTag (
h5_file_t* const f,
const char name[],
const h5_loc_id_t id,
size_t* dims,
void* val
);
h5_err_t
const h5_loc_id_t id,
size_t* dim,
void* buffer
) {
H5_API_ENTER5 (h5_err_t,
"f=0x%p, name=\"%s\", id=%lld, dim=0x%p, val=0x%p",
f, name, (long long)id, dim, buffer);
H5_API_RETURN (h5t_get_mtag_by_name (f, name, id, dim, buffer));
}
/*!
Remove tag for entity in current mesh.
\param[in] f file handle
\param[in] name names of tagset
\param[in] id id of entity
*/
static inline h5_err_t
H5FedRemoveMTag (
h5_file_t* const f,
const char name[],
const h5_loc_id_t id
);
) {
H5_API_ENTER3 (h5_err_t, "f=0x%p, name=\"%s\", id=%lld",
f, name, (long long)id);
H5_API_RETURN (h5t_remove_mtag_by_name (f, name, id));
}
#ifdef __cplusplus
}
-7
View File
@@ -180,13 +180,6 @@ done: \
goto done; \
}
#define TRY3( expr, ret_val ) \
if ((int64_t)(ptrdiff_t)(expr) <= (int64_t)H5_ERR) { \
ret_value = ret_val; \
goto done; \
}
#define ON_ERROR
#ifdef __cplusplus
}
#endif