Commit 8030a724 authored by gsell's avatar gsell

H5Fed C-API inlined

parent 81f7f771
......@@ -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
......
/*
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));
}
/*
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));
}
/****** 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));
}
/*
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));
}
/*
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));