From e4ed2a1ae624380c71f58be2bb44113f5defdc15 Mon Sep 17 00:00:00 2001 From: Achim Gsell Date: Fri, 21 Dec 2007 19:06:25 +0000 Subject: [PATCH] src/H5Fed_adjacency.c src/H5Fed_dof.c src/H5Fed_retrieve.c src/H5Fed_statistics.c src/H5Fed_store.c src/H5Fed.c - added --- .gitattributes | 5 + src/H5Fed.c | 139 ++++++++++++ src/H5Fed_adjacency.c | 264 ++++++++++++++++++++++ src/H5Fed_dof.c | 487 +++++++++++++++++++++++++++++++++++++++++ src/H5Fed_retrieve.c | 133 +++++++++++ src/H5Fed_statistics.c | 304 +++++++++++++++++++++++++ src/H5Fed_store.c | 137 ++++++++++++ 7 files changed, 1469 insertions(+) create mode 100644 src/H5Fed_adjacency.c create mode 100644 src/H5Fed_dof.c create mode 100644 src/H5Fed_retrieve.c create mode 100644 src/H5Fed_statistics.c create mode 100644 src/H5Fed_store.c diff --git a/.gitattributes b/.gitattributes index 92eca90..2fd175a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -28,6 +28,11 @@ src/H5BlockPrivate.h -text src/H5BlockTypes.h -text src/H5Fed.c -text src/H5Fed.h -text +src/H5Fed_adjacency.c -text +src/H5Fed_dof.c -text +src/H5Fed_retrieve.c -text +src/H5Fed_statistics.c -text +src/H5Fed_store.c -text src/H5Part.c -text src/H5Part.h -text src/H5PartErrors.h -text diff --git a/src/H5Fed.c b/src/H5Fed.c index e69de29..2c31e55 100644 --- a/src/H5Fed.c +++ b/src/H5Fed.c @@ -0,0 +1,139 @@ +/* + Copyright 2006-2007 + Paul Scherrer Institut, Villigen, Switzerland; + Benedikt Oswald; + Achim Gsell + All rights reserved. + + Authors + Achim Gsell + + Warning + This code is under development. + + */ + +/*! + Some conventions: + Functions: + Name: + ThisIsAFunction() + Return values: + -1 or NULL signals an error + + \note + In function names we use the words \b get and \b store insteed of + \b read and \b write, because no I/O is actually done in these + functions. +*/ + + +/*! + \defgroup h5fed_c_api H5Fed C API +*/ + +#include +#include "h5/h5_types.h" +#include "H5Fed.h" + + +/****** General routines *****************************************************/ + +/*! + \ingroup h5fed_c_api + + Open file with name \c filename. This function is available in the paralell + and serial version. In the serial case \c comm may have any value. + + \return File handle. + \return NULL on error. + + \note + File is always opened in read/writer mode! + + \note + Implement as wrapper of \c H5_open_file()! +*/ +h5_file * H5FedOpenFile ( + const char * filename, /*!< file name */ + const MPI_Comm comm /*!< MPI communicator */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Close file. + + \return value \c >=0 on success + \return -1 on error +*/ +h5_int_t H5FedCloseFile ( + h5_file * fh /*!< file handle */ + ) { + return -1; +} + +/****** INQUIRY routines *****************************************************/ + +/*! + \ingroup h5_c_api + + Get the number of compute nodes. + + \return Number of compute notes. + \return \c -1 on error. + */ +h5_int_t H5GetNumNodes ( + h5_file * fh /*!< file handle */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Get the number of hierarchical mesh levels available in current step. + + \return Number of hierarchical mesh levels + \return \c -1 on error + */ +h5_int_t H5FedGetNumMeshLevels ( + h5_file * fh /*!< file handle */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Check whether a tetrahedral mesh hierarchy exists on level \c level + + \return \c 1 tetrahedral mesh hierarchy exists on given level. + \return \c 0 tetrahedral mesh exists, but not on given level. + \return \c -1 tetrahedral mesh doesn't exist + */ +h5_int_t H5FedHasTetrahedralMesh ( + h5_file * fh, /*!< file handle */ + const h5_id_t level /*!< mesh level to check */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Check whether a boundary mesh hierarchy exists on level \c level + + \return \c 1 boundary mesh hierarchy exists on given level. + \return \c 0 boundary mesh hierarchy exists, but not on given level. + \return \c -1 boundary mesh doesn't exist. +*/ +h5_int_t H5FedHasBoundaryMesh( + h5_file * fh, /*!< file handle */ + const h5_id_t level /*!< mesh level to check */ + ) { + return -1; +} + diff --git a/src/H5Fed_adjacency.c b/src/H5Fed_adjacency.c new file mode 100644 index 0000000..b3ad948 --- /dev/null +++ b/src/H5Fed_adjacency.c @@ -0,0 +1,264 @@ +/* + Copyright 2006-2007 + Paul Scherrer Institut, Villigen, Switzerland; + Benedikt Oswald; + Achim Gsell + All rights reserved. + + Authors + Achim Gsell + + Warning + This code is under development. + + */ + +#include +#include "h5/h5_types.h" +#include "H5Fed.h" + +/****** UPWARD ADJACENCY routines *********************************************/ + +/*! + \ingroup h5fed_c_api + + Returns a vector, that contains the id's of all the edges that are + adjacent to the vertex with id \c vertex_id and in \c num_adj_edges + the number of edges to which this vertex is adjacent, i.e. the size + of the returned vector. + + \return n-tuple of upward adjacent edges + \return NULL-pointer on error. +*/ +h5_id_t * H5FedGetEdgesUAdjacentToVertex ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level to query */ + const h5_id_t vertex_id, /*!< global vertex id */ + h5_size_t * const num_adj_edges /*!< OUT: size of returned vector */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Returns a vector, that contains the id's of all the triangles that are + adjacent to the vertex with id \c vertexid and \c num_adj_triangles + the number of triangle to which this vertex is adjacent, i.e. the size + of the returned vector. + + \return n-tuple of upward adjacent triangles. + \return NULL-pointer on error. +*/ +h5_id_t * H5FedGetTrianglesUAdjacentToVertex ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level to query */ + const h5_id_t vertex_id, /*!< global vertex id */ + h5_size_t * const num_adj_triangles + /*!< OUT: size of returned vector */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Returns a vector, that contains the id's of all the tetrahedra that are + adjacent to the vertex with id \c vertex_id and in + \c num_adj_tetrahedra the number of tetrahera to which this vertex is + adjacent, i.e. the size of the returned vector. + + \return n-tuple of upward adjacent tetrahedra. + \return NULL-pointer on error. +*/ +h5_id_t * H5FedGetTetrahedrasUAdjacentToVertex ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level to query */ + const h5_id_t vertex_id, /*!< global vertex id */ + h5_size_t * const num_adj_tetrahedra + /*!< OUT: size of returned vector */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Returns a vector, that contains the id's of all the triangles that are + adjacent to the edge with id \c vertex_id and in + \c num_adj_triangles the number of triangles adjacent to the edge, i.e. + the size of the return vector. + + \return n-tuple of upward adjacent triangles. + \return NULL-pointer on error. +*/ +h5_id_t * H5FedGetTrianglesUAdjacentToEdge ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level to query */ + const h5_id_t edge_id, /*!< global edge id */ + h5_size_t * const num_adj_triangles + /*!< OUT: size of returned vector */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Returns a vector, that contains the id's of all the tetrahedra that + are adjacent to the edge with id \c edge_id and in + \c num_adj_tetrahedra the number of tetrahedra that are adjacent to + the edge, i.e. the size of the returned vector. + + \return n-tuple of upward adjacent tetrahedra. + \return NULL-pointer on error. +*/ +h5_id_t * H5FedGetTetrahedraUAdjacentToEdge ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level to query */ + const h5_id_t edge_id, /*!< global edge id */ + h5_size_t * const num_adj_tets /*!< OUT: size of returned vector */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Returns a vector, that contains the id's of all the tetrahedra that + are adjacent to the triangle with id \c triangle_id and in + \c num_adj_tetrahedra the number of tetrahedra that are adjacent to + this triangle. + + There are only two different cases: either the triangle is an internal, + including interprocessor boundaries, triangle or an external triangle, + i.e. a part of the mesh boundary; in the first case, there are \c 2 + adjacent tetrahedra, in the second case the triangle has exactly one + sinle adjacent tetrahedron. + + \return n-tuple of upward adjacent tetrahedra. + \return NULL-pointer on error. +*/ +h5_id_t * H5FedGetTetrahedraUAdjacentToTriangle ( + h5_file * fh, /*!< file handle */ + const h5_int_t level, /*!< mesh level to query */ + const h5_int_t triangle_id, /*!< global triangle id */ + h5_size_t * const num_adj_tets /*!< OUT: size of returned vector */ + ) { + return NULL; +} + +/****** DOWNWARD ADJACENCY routines *********************************************/ + +/*! + \ingroup h5fed_c_api + + Returns a vector, that contains the id's of all the vertices that are + adjacent to the edge with id \c vertex_id. + + \return n-tuple of downward adjacent vertices. + \return NULL-pointer on error. +*/ +h5_id_t * H5FedGetVerticesDAdjacentToEdge ( + h5_file * fh, /*!< file handle */ + const h5_int_t level, /*!< mesh level to query */ + const h5_int_t edge_id, /*!< global edge id */ + h5_size_t * const num_adj_vertices + /*!< OUT: size of returned vector */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Returns a vector, that contains the id's of all the edges that are + adjacent to the triangle with id \c triangle_id. + + \return n-tuple of downward adjacent edges. + \return NULL-pointer on error. +*/ +h5_id_t * H5FedGetEdjesDAdjacentToTriangle ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level to query */ + const h5_id_t triangle_id, /*!< global triangle id */ + h5_size_t * const num_adj_triangles + /*!< OUT: size of returned vector */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Returns a vector, that contains the id's of all the vertices that are + adjacent to the triangle with id \c triangle_id. + + \return n-tuple of downward adjacent vertices. + \return NULL-pointer on error. +*/ +h5_id_t * H5FedGetVerticesDAdjacentToTriangle ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level to query */ + const h5_id_t triangle_id, /*!< global triangle id */ + h5_size_t * const num_adj_vertices + /*!< OUT: size of returned vector */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Returns a vector, that contains the id's of all the triangles that are + adjacent to the tetrahedron with id \c tet_id + + \return n-tuple of downward adjacent triangles. + \return NULL-pointer on error. +*/ +h5_id_t * H5FedGetTrianglesDAdjacentToTetrahedron ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level to query */ + const h5_id_t tet_id, /*!< global tetrahedron id */ + h5_size_t * const num_adj_triangles + /*!< OUT: size of returned vector */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Returns a vector, that contains the id's of all the edges that are + adjacent to the tetrahedron with id \c tet_id. + + \return n-tuple of downward adjacent edges. + \return NULL-pointer on error. +*/ +h5_id_t * H5FedGetEdjesDAdjacentToTetrahedron ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level to query */ + const h5_id_t tet_id, /*!< global tetrahedron id */ + h5_size_t * const num_adj_edges /*!< OUT: size of returned vector */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Returns a vector, that contains the id's of all the vertices that are + adjacent to the tetrahedron with id \c tet_id. + + \return n-tuple of downward adjacent vertices. + \return NULL-pointer on error. +*/ +h5_id_t * H5FedGetVerticesDAdjacentToTetrahedron ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level to query */ + const h5_id_t tet_id, /*!< global tetrahedron id */ + h5_size_t * const num_adj_vertices + /*!< OUT: size of returned vector */ + ) { + return NULL; +} diff --git a/src/H5Fed_dof.c b/src/H5Fed_dof.c new file mode 100644 index 0000000..0788a41 --- /dev/null +++ b/src/H5Fed_dof.c @@ -0,0 +1,487 @@ +/****** routines for accessing degrees of freedom *************************/ +/* + Copyright 2006-2007 + Paul Scherrer Institut, Villigen, Switzerland; + Benedikt Oswald; + Achim Gsell + All rights reserved. + + Authors + Achim Gsell + + Warning + This code is under development. + + */ + +#include +#include "h5/h5_types.h" +#include "H5Fed.h" + +/* DoF acces for vertices */ + +/*! + \ingroup h5fed_c_api + + Stores DoF of type \c h5_float for the vertex \c vertex_id in current + step. The DoF are passed to the function as n-tuple with an arbitrary + number of elements. + + \return value \c >=0 on success + \return \c -1 on error +*/ +h5_int_t H5FedStoreDoFVertexFloat ( + h5_file * fh, /*!< file handle */ + const h5_id_t vertex_id, /*!< global vertex id */ + const h5_float_t * const dof, /*!< DoF n-tuple */ + const h5_size_t dof_size /*!< number of \c h5_float + value in \c dof */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Stores DoF of type \c h5_complex for the vertex \c vertex_id in current + step. The DoF are passed to the function as n-tuple with an arbitrary + number of elements. + + \return value \c >=0 on success + \return \c -1 on error +*/ +h5_int_t H5FedStoreDoFVertexComplex ( + h5_file * fh, /*!< file handle */ + const h5_id_t vertex_id, /*!< global vertex id */ + const h5_complex * const dof, /*!< DoF n-tuple */ + const h5_size_t dof_size /*!< number of \c h5_complex + values in \c dof */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Get DoF of type \c h5_float for vertex \c vertex_id in current time + step. The DoF are returned as n-tuple. The size of this tuple is + returned in the parameter \c dof_size. + + \return Pointer to n-tuple of type \c h5_float. + \return NULL-pointer on error. +*/ +h5_float_t * H5FedGetDoFVertexFloat ( + h5_file * fh, /*!< file handle */ + const h5_id_t vertex_id, /*!< global vertex id */ + h5_size_t * const dof_size /*!< OUT: number of \c h5_float + values in returned n-tuple */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Get DoF of type \c h5_complex for vertex \c vertex_id in current time + step. The DoF are returned as n-tuple. The size of this tuple is + returned in the parameter \c dof_size. + + \return Pointer to n-tuple of type \c h5_float. + \return NULL-pointer on error. +*/ +h5_complex * H5FedGetDoFVertexComplex ( + h5_file * fh, /*!< file handle */ + const h5_id_t vertex_id, /*!< global vertex id */ + h5_size_t * const dof_size /*!< OUT: number of \c h5_float + values in returned n-tuple */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Retrieves the number of scalar components of type \c h5_float, + of the DoF that is stored for vertex \c vertex_id. + + \return Number of stored degrees of freedom. + \return \c -1 if vertex doesn't exist. + + \note + Do we need this function???? +*/ +h5_size_t H5FedGetNumDoFVertexFloat ( + h5_file * fh, /*!< file handle */ + const h5_id_t vertex_id /*!< global vertex id */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Retrieves the number of scalar components, of type \c h5_complex, + of the DoF that is stored for vertex \c vertex_id. + + \return Number of stored degrees of freedom. + \return \c -1 if vertex doesn't exist. + + \note + Do we need this function???? +*/ +h5_size_t H5FedGetNumDoFVertexComplex ( + h5_file * fh, /*!< file handle */ + const h5_size_t vertex_id /*!< global vertex id */ + ) { + return -1; +} + +/* DoF access for edges */ + +/*! + \ingroup h5fed_c_api + + Stores DoF of type \c h5_float for the edge \c edge_id in current + step. The DoF are passed to the function as n-tuple with an arbitrary + number of elements. + + \return something \c >=0 on success + \return \c -1 on error +*/ +h5_int_t H5FedStoreDoFEdgeFloat ( + h5_file * fh, /*!< file handle */ + const h5_id_t edge_id, /*!< global edge id */ + const h5_float_t * const dof, /*!< DoF n-tuple */ + const h5_size_t dof_size /*!< number of \c h5_float + value in \c dof */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Stores DoF of type \c h5_complex for the edge \c edge_id in current + step. The DoF are passed to the function as n-tuple with an arbitrary + number of elements. + + \return something \c >=0 on success + \return \c -1 on error +*/ +h5_int_t H5FedStoreDoFEdgeComplex ( + h5_file * fh, /*!< file handle */ + const h5_id_t edge_id, /*!< global edge id */ + const h5_complex * const dof, /*!< DoF n-tuple */ + const h5_size_t dof_size /*!< number of \c h5_complex + value in \c dof */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Get DoF of type \c h5_float for vertex \c vertex_id in current time + step. The DoF are returned as n-tuple. The size of this tuple is + returned in the parameter \c dof_size. + + \return Pointer to n-tuple of type \c h5_float. + \return NULL-pointer on error. +*/ +h5_float_t * H5FedGetDoFEdgeFloat ( + h5_file * fh, /*!< file handle */ + const h5_id_t edge_id, /*!< global edge id */ + h5_size_t * const dof_size /*!< OUT: number of \c h5_float + values in returned n-tuple */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Get DoF of type \c h5_complex for vertex \c vertex_id in current time + step. The DoF are returned as n-tuple. The size of this tuple is + returned in the parameter \c dof_size. + + \return Pointer to n-tuple of type \c h5_float. + \return NULL-pointer on error. +*/ +h5_complex* H5FedGetDoFEdgeComplex ( + h5_file * fh, /*!< file handle */ + const h5_id_t edge_id, /*!< global edge id */ + h5_size_t * const dof_size /*!< OUT: number of \c h5_float + values in returned n-tuple */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Retrieves the number of scalar components, of type \c h5_float, + of the DoF that is stored for edge \c edge_id. + + \return Number of stored degrees of freedom. + \return \c -1 if edge doesn't exist. + + \note + Do we need this function???? +*/ +h5_size_t H5FedGetNumDoFEdgeFloat ( + h5_file * fh, /*!< file handle */ + const h5_id_t edge_id /*!< global edge id */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Retrieves the number of scalar components, of type \c h5_complex, + of the DoF that is stored for edge \c edge_id. + + \return Number of stored degrees of freedom. + \return \c -1 if edge doesn't exist. +*/ +h5_size_t H5FedGetNumDoFEdgeComplex ( + h5_file * fh, /*!< file handle */ + const h5_id_t edge_id /*!< global edge id */ + ) { + return -1; +} + + +/* DoF access for triangles */ + +/*! + \ingroup h5fed_c_api + + Stores DoF of type \c h5_float for the triangle \c triangle_id in current + step. The DoF are passed to the function as n-tuple with an arbitrary + number of elements. + + \return value \c >=0 on success + \return \c -1 on error +*/ +h5_int_t H5FedStoreDoFTriangleFloat ( + h5_file * fh, /*!< file handle */ + const h5_id_t triangle_id, /*!< global triangle id */ + const h5_float_t * const dof, /*!< DoF vector */ + const h5_size_t dof_size /*!< number of \c h5_float_t + values in \c dof */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Stores DoF of type \c h5_complex for the triangle \c triangle_id in current + step. The DoF are passed to the function as n-tuple with an arbitrary + number of elements. + + \return value \c >=0 on success + \return \c -1 on error +*/ +h5_int_t H5FedStoreDoFTriangleComplex ( + h5_file * fh, /*!< file handle */ + const h5_id_t triangle_id, /*!< global triangle id */ + const h5_complex * const dof, /*!< DoF vector */ + const h5_size_t dof_size /*!< number of \c h5_complex + values in \c dof */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Get DoF of type \c h5_float for triangle \c triangle_id in current time + step. The DoF are returned as n-tuple. The size of this tuple is + returned in the parameter \c dof_size. + + \return Pointer to n-tuple of type \c h5_float. + \return NULL-pointer on error. +*/ +h5_float_t * H5FedGetDoFTriangleFloat ( + h5_file* fh, /*!< file handle */ + const h5_id_t triangle_id, /*!< global triangle id */ + h5_size_t * const dof_size /*!< OUT: number of \c h5_float + values in returned n-tuple */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Get DoF of type \c h5_complex for triangle \c triangle_id in current time + step. The DoF are returned as n-tuple. The size of this tuple is + returned in the parameter \c dof_size. + + \return Pointer to n-tuple of type \c h5_float. + \return NULL-pointer on error. +*/ +h5_complex * H5FedGetDoFTriangleComplex ( + h5_file * fh, /*!< file handle */ + const h5_id_t triangle_id, /*!< global triangle id */ + h5_size_t * const dof_size /*!< OUT: number of \c h5_float + values in returned n-tuple */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Retrieves the number of scalar components of type \c h5_float, + of the DoF that is stored for triangle \c triangle_id. + + \return Number of stored degrees of freedom. + \retuen \c -1 if triangle doesn't exist. + + \note + Do we need this function???? +*/ +h5_size_t H5FedGetNumDoFTriangleFloat ( + h5_file * fh, /*!< file handle */ + const h5_id_t triangle_id /*!< global triangle id */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Retrieves the number of scalar components of type \c h5_float, + of the DoF that is stored for triangle \c triangle_id. + + \return Number of stored degrees of freedom. + \retuen \c -1 if triangle doesn't exist. + + \note + Do we need this function???? +*/ +h5_size_t H5FedGetNumDoFTriangleComplex ( + h5_file * fh, /*!< file handle */ + const h5_id_t triangle_id /*!< global triangle id */ + ) { + return -1; +} + + +/* DoF access for tetrahedra */ + +/*! + \ingroup h5fed_c_api + + Stores DoF of type \c h5_float for the tetrahedron \c tet_id in current + step. The DoF are passed to the function as n-tuple with an arbitrary + number of elements. + + \return value \c >=0 on success + \return \c -1 on error +*/ +h5_int_t H5FedStoreDoFTetrahedronFloat ( + h5_file * fh, /*!< file handle */ + const h5_id_t tet_id, /*!< global tetrahedron id */ + const h5_float_t * const dof, /*!< DoF vector */ + const h5_size_t dof_size /*!< number of \c h5_float + value in \c dof */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Stores DoF of type \c h5_complex for the tetrahedron \c tet_id in current + step. The DoF are passed to the function as n-tuple with an arbitrary + number of elements. + + \return value \c >=0 on success + \return \c -1 on error +*/ +h5_int_t H5FedStoreDoFTetrahedronComplex ( + h5_file * fh, /*!< file handle */ + const h5_id_t tet_id, /*!< global tetrahedron id */ + const h5_complex * const dof, /*!< DoF vector */ + const h5_size_t dof_size /*!< number of \c h5_complex + value in \c dof */ + ) { + return -1; +}; + +/*! + \ingroup h5fed_c_api + + Get DoF of type \c h5_float for tetrahedron \c tet_id in current time + step. The DoF are returned as n-tuple. The size of this tuple is + returned in the parameter \c dof_size. + + \return Pointer to n-tuple of type \c h5_float. + \return NULL-pointer on error. +*/ +h5_float_t * H5FedGetDoFTetrahedronFloat ( + h5_file * fh, /*!< file handle */ + const h5_id_t tet_id, /*!< global tetrahedron id */ + h5_size_t * const dof_size /*!< OUT: number of \c h5_float + values in returned n-tuple */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Get DoF of type \c h5_complex for tetrahedron \c tet_id in current time + step. The DoF are returned as n-tuple. The size of this tuple is + returned in the parameter \c dof_size. + + \return Pointer to n-tuple of type \c h5_complex + \return NULL-pointer on error. +*/ +h5_complex * H5FedGetDoFTetrahedronComplex ( + h5_file * fh, /*!< file handle */ + const h5_id_t tet_id, /*!< global tetrahedron id */ + h5_size_t * const dof_size /*!< OUT: number of \c h5_complex + values in returned n-tuple */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Retrieves the number of scalar components of type \c h5_float, + of the DoF that is stored for tetrahedron \c tet_id. + + \return Number of stored degrees of freedom. + \return \c -1 if vertex doesn't exist. + + \note + Do we need this function???? +*/ +h5_size_t H5FedGetNumDoFTetrahedronFloat ( + h5_file * fh, /*!< file handle */ + const h5_id_t tet_id /*!< global tetrahedron id */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Retrieves the number of scalar components of type \c h5_complex, + of the DoF that is stored for tetrahedron \c tet_id. + + \return Number of stored degrees of freedom. + \retuen \c -1 if tetrahedron doesn't exist. +*/ +h5_size_t H5FedGetNumDoFTetrahedronComplex ( + h5_file * fh, /*!< file handle */ + const h5_id_t tet_id /*!< global tetrahedron id */ + ) { + return -1; +} diff --git a/src/H5Fed_retrieve.c b/src/H5Fed_retrieve.c new file mode 100644 index 0000000..69d87e6 --- /dev/null +++ b/src/H5Fed_retrieve.c @@ -0,0 +1,133 @@ +/****** RETRIEVAL routines **************************************************/ +/* + Copyright 2006-2007 + Paul Scherrer Institut, Villigen, Switzerland; + Benedikt Oswald; + Achim Gsell + All rights reserved. + + Authors + Achim Gsell + + Warning + This code is under development. + + */ + +#include +#include "h5/h5_types.h" +#include "H5Fed.h" + +/*! + \ingroup h5fed_c_api + + Get coordinates of the vertex \c vertex_id. + + \return pointer to 3-dimensional coordinates. + \return NULL-pointer on error. + + \note + Not all vertices are needed on all compute nodes, i.e. in order to + guarantee optimum memory usage, the implementor of the API must make sure + that the access to a desired vertex is carried out efficiently. + + Effectively, this means that the application programmer on a particular + compute node loops over the tetrahedra that have been assigned to this + particular compute node, using the API routine \c H5FedGetTetrahedron. + + Then, a specific tetrahedron is defined by indices into the set of vertex + coordinates. + + Therefore, the application programmer wants to access these coordinates, + and he calls the API routine \c H5FedGetVertexCoordinate. + + To achieve this behavior, it is required that the mesh be partitioned + before any access to vertex coordinates or topological entities are + carried out. + */ +h5_vertex * H5FedGetVertexCoordinate ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level */ + const h5_id_t vertex_id /*!< vertex id */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Get the definition of a specific edge \edge_id, i.e. a 2-tuple + containing the specific indices of the 3-dimensional vertex + coordinates. + + \return pointer to 2-tuple of vertex id's defining the edge. + \return NULL-pointer on error. +*/ +h5_edge * H5FedGetEdge ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level */ + const h5_id_t edge_id, /*!< global edge id */ + h5_id_t * const parent_id /*!< OUT: parent id if level + \c >0 else \c -1 */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Get the definition of a specific triangle \triangle_id, i.e. + a 3-tuple containing the specific indices of the 3-dimensional vertex + coordinates. + + \return pointer to 3-tuple of vertex id's defining the triangle. + \return NULL-pointer on error. +*/ +h5_triangle * H5FedGetTriangle ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level */ + const h5_id_t triangle_id, /*!< global triangle id */ + h5_id_t * parent_id /*!< OUT: parent id if level + \c >0 else \c -1 */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Get the definition of a specific tetrahedron \c tetra_id, i.e. + a 4-tuple containing the specific indices of the 3-dimensional vertex + coordinates. + + \return pointer to 4-tuple of vertex id's defining the tetrahedron. + \return NULL-pointer on error. +*/ +h5_tetrahedron * H5FedGetTetrahedron ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level to query */ + const h5_id_t tet_id, /*!< global tetrahedron id */ + h5_id_t * parent_id /*!< OUT: parent id if level + \c >0 else \c -1 */ + ) { + return NULL; +} + +/*! + \ingroup h5fed_c_api + + Get the definition of the boundary triangle \c triangle_id at level + \c level, i.e. the indices of the 3-dimensional vertex coordinates. + + \return pointer to 3-tuple of vertex id's defining the boundary triangle. + \return NULL-pointer on error. +*/ +h5_triangle * H5FedGetBoundaryTriangle ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level to query */ + const h5_id_t triangle_id, /*!< global btriangle_id */ + h5_id_t * parent_id /*!< OUT: parent id if level + \c >0 else \c -1 */ + ) { + return NULL; +} diff --git a/src/H5Fed_statistics.c b/src/H5Fed_statistics.c new file mode 100644 index 0000000..d94dcf5 --- /dev/null +++ b/src/H5Fed_statistics.c @@ -0,0 +1,304 @@ +/****** VERTEX statistics routines *******************************************/ +/* + Copyright 2006-2007 + Paul Scherrer Institut, Villigen, Switzerland; + Benedikt Oswald; + Achim Gsell + All rights reserved. + + Authors + Achim Gsell + + Warning + This code is under development. + + */ + +#include +#include "h5/h5_types.h" +#include "H5Fed.h" + +/*! + \ingroup h5fed_c_api + + Get the number of vertices used for defining a submesh + at level \c level for this compute node in current step. + + \return number of vertices + \return \c -1 on error. +*/ +h5_size_t H5FedGetNumVertices ( + h5_file * fh, /*!< file handle */ + const h5_id_t level /*!< mesh level to query */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Get the total number of vertices used for defining a submesh + at level \c level in current step, summed up over all compute nodes. + + \return number of vertices + \return \c -1 on error. +*/ +h5_size_t H5FedGetNumVerticesTotal( + h5_file * fh, /*!< file handle */ + const h5_id_t level /*!< mesh level to query */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Returns the number of vertices used for defining a submesh + at level \c level for compute node \c cnode. + + \return number of vertices + \return \c -1 on error. +*/ +h5_size_t H5FedGetNumVerticesCnode ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level to query */ + const h5_id_t cnode /*!< compute node */ + ) { + return -1; +} + +/****** EDGE statistics routines ********************************************/ + +/*! + \ingroup h5fed_c_api + + Returns the number of edges present in the mesh at level \c level in + current time step on this compute node. + + \return number of edges + \return \c -1 on error. + + \note + It is left to the API implementor how to make this information + available; in general he can compute it from the definition of + the tetrahedral mesh. + + \note + After counting the number for the local cnode we call MPI_Gather() + to collect the number from the other cnodes and store them into an + array. The inquired number will be provided from this array. +*/ +h5_size_t H5FedGetNumEdgesInTetrahedralMesh ( + h5_file * fh, /*!< file handle */ + const h5_id_t level /*!< mesh level to query */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Returns the number of edges present in the mesh at level \c level, + in current step, summed up over all compute nodes + + \return number of edges + \return \c -1 on error. +*/ +h5_size_t H5FedGetNumEdgesInTetrahedralMeshTotal ( + h5_file * fh, /*!< file handle */ + const h5_id_t level /*!< mesh level to query */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Returns the number of edges present in the mesh at level \c level + on compute node \c cnode + + \return number of edges + \return \c -1 on error. +*/ +h5_size_t H5FedGetNumEdgeInTetrahedralMeshCnode ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level to query */ + const h5_id_t cnode /*!< compute node */ + ) { + return -1; +} + +/****** TRIANGLE statistics routines *****************************************/ + +/*! + \ingroup h5fed_c_api + + Get the number of triangles present in the mesh at level \c level in + current time step on this compute note. + + \return Number of triangles + \return \c -1 on error. + + \note + After counting the number for the local cnode we call MPI_Gather() + to collect the number from the other cnodes and store them into an + array. The inquired number will be provided from this array. +*/ +h5_size_t H5FedGetNumTrianglesInTetrahedralMesh ( + h5_file * fh, /*!< file handle */ + const h5_id_t level /*!< mesh level to query */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Get the number of triangles present in the mesh at level \c level in + current time step summed up over all compute notes. + + \return Number of triangles + \return \c -1 on error. +*/ +h5_size_t H5FedGetNumTrianglesInTetrahedralMeshTotal ( + h5_file * fh, /*!< file handle */ + const h5_id_t level /*!< mesh level to query */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Get the number of triangles present in the mesh at level \c level in + current time step on compute node \c cnode. + + \return Number of triangles + \return \c -1 on error. +*/ +h5_size_t H5FedGetNumTrianglesInTetrahedralMeshCnode ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level to query */ + const h5_id_t cnode /*!< compute node */ + ) { + return -1; +} + +/****** TETRAHEDRON statistics routines **************************************/ + +/*! + \ingroup h5fed_c_api + + Returns the number of tetrahedral elements present in the mesh at + level \c level in current step on this compute node. + + \return number of tetrahedra + \return \c -1 on error. + + \note + After counting the number for the local cnode we call MPI_Gather() + to collect the number from the other cnodes and store them into an + array. The inquired number will be provided from this array. +*/ +h5_size_t H5FedGetNumTetrahedra ( + h5_file * fh, /*!< file handle */ + const h5_id_t level /*!< mesh level to query */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Returns the number of tetrahedral elements present in the mesh at + level \c level in current step summed up over all compute nodes. + + \return number of tetrahedra + \return \c -1 on error. +*/ +h5_size_t H5FedGetNumTetrahedraTotal( + h5_file * fh, /*!< file handle */ + const h5_id_t level /*!< mesh level to query */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Returns the number of tetrahedral elements present in the mesh at + level \c level in current step on compute nodes \c computenode. + + \return number of tetrahedra + \return \c -1 on error. +*/ +h5_size_t H5FedGetNumTetrahedraCnode ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level to query */ + const h5_id_t cnode /*!< compute node */ + ) { + return -1; +} + +/****** BOUNDARY statistics routines ****************************************/ + +/*! + \ingroup h5fed_c_api + + Get the number of boundary triangles present in the mesh at + level \c level in current step on this compute node. + + \return number of tetrahedras + \return \c -1 on error. + + \note + It is left to the API implementor how to make this information + available. In general he can compute it from the definition + of the tetrahedral mesh, using the adjacency relations, i.e. + the fact that a boundary triangle has only one single adjacent + tetrahedron. + + \note + After counting the number for the local cnode we call MPI_Gather() + to collect the number from the other cnodes and store them into an + array. The inquired number will be provided from this array. +*/ +h5_size_t H5FedGetNumBoundaryTriangles ( + h5_file * fh, /*!< file handle */ + const h5_id_t level /*!< mesh level to query */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Get the number of boundary triangles present in the mesh at + level \c level in current step summed up over all compute nodes. + + \return number of tetrahedras + \return \c -1 on error. +*/ +h5_size_t H5FedGetNumBoundaryTrianglesTotal ( + h5_file * fh, /*!< file handle */ + const h5_id_t level /*!< mesh level to query */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Get the number of boundary triangles present in the mesh at + level \c level in current step on compute node \c cnode. + + \return number of tetrahedras + \return \c -1 on error. +*/ +h5_size_t H5FedGetNumBoundaryTrianglesCnode ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level to query */ + const h5_id_t cnode /*!< compute node */ + ) { + return -1; +} diff --git a/src/H5Fed_store.c b/src/H5Fed_store.c new file mode 100644 index 0000000..8a4e126 --- /dev/null +++ b/src/H5Fed_store.c @@ -0,0 +1,137 @@ +/****** STORE routines*****************************************************/ +/* + Copyright 2006-2007 + Paul Scherrer Institut, Villigen, Switzerland; + Benedikt Oswald; + Achim Gsell + All rights reserved. + + Authors + Achim Gsell + + Warning + This code is under development. + + */ + +#include +#include "h5/h5_types.h" +#include "H5Fed.h" + +h5_int_t H5FedSetNumVertices ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level */ + const h5_size_t num_vertices /*!< number of verices at level + \c level */ + ) { + return -1; +} + +h5_int_t H5FedSetNumTetrahedra ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level */ + const h5_size_t num_tet /*!< number of tetrahedra at + level \c level */ + ) { + return -1; +} + +/*! + \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 value \c >=0 on success + \return \c -1 on error +*/ +h5_int_t H5FedStoreVertexCoordinate ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level */ + const h5_id_t vertex_id, /*!< global vertex id */ + const h5_vertex * const vertex /*!< 3-tuple of coordinates */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Stores the 2-tuple, that contains the specific indices describing + an edge with id \c edge_id at level \c level of the tetrahedral mesh. + + \return value \c >=0 on success + \return \c -1 on error +*/ +h5_int_t H5FedStoreEdge ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level */ + const h5_id_t edge_id, /*!< global edge id */ + const h5_id_t parent_id, /*!< parent id if level \c >0 + else \x -1 */ + const h5_edge * const edge /*!< 2-tuple with vertex id's */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Stores the 3-tuple, that contains the specific indices describing a + triangle with id \c triangle_id at level \c level of the tetrahedral mesh. + + \return value \c >=0 on success + \return \c -1 on error +*/ +h5_int_t H5FedStoreTriangle ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level */ + const h5_id_t triangle_id, /*!< global triangle id */ + const h5_id_t parent_id, /*!< parent id if level \c >0 + else \x -1 */ + const h5_triangle * const triangle/*!< 3-tuple with vertex id's */ + ) { + return -1; +} + +/*! + \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. + + \return value \c >=0 on success + \return \c -1 on error +*/ +h5_int_t H5FedStoreTetrahedron ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level */ + const h5_id_t tet_id, /*!< global tetrahedron id */ + const h5_id_t parent_id, /*!< parent id if level \c >0 + else \x -1 */ + const h5_tetrahedron * const tet/*!< 4-tuple with vertex id's */ + ) { + return -1; +} + +/*! + \ingroup h5fed_c_api + + Writes the vector, that contains the specific indices that describe + a boundary triangle \c btriangle with id \c btriangle_id at level + \c level of the tetrahedral mesh. + + \return value \c >=0 on success + \return \c -1 on error +*/ +h5_int_t H5FedStoreBoundaryTriangle ( + h5_file * fh, /*!< file handle */ + const h5_id_t level, /*!< mesh level */ + const h5_id_t btriangle_id, /*!< global boundary triangle id*/ + const h5_id_t parent_id, /*!< parent id if level \c >0 + else \c -1 */ + const h5_triangle * const btriangle/*!< 3-tuple with vertex id's*/ + ) { + return -1; +}