From c45c1e9bb93cc6e85b3defa8f8bb9ccee1172be0 Mon Sep 17 00:00:00 2001 From: Achim Gsell Date: Thu, 27 Oct 2011 11:46:07 +0000 Subject: [PATCH] trimesh_2gnuplot added to test/H5Fed --- .gitattributes | 1 + test/H5Fed/Makefile.am | 4 +- test/H5Fed/trimesh_2gnuplot.c | 101 ++++++++++++++++++++++++++++++++++ 3 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 test/H5Fed/trimesh_2gnuplot.c diff --git a/.gitattributes b/.gitattributes index ce5ddf7..ea43885 100644 --- a/.gitattributes +++ b/.gitattributes @@ -520,6 +520,7 @@ test/H5Fed/tetmesh_write.c -text test/H5Fed/tetmesh_write1.c -text test/H5Fed/tetmesh_write2.c -text test/H5Fed/tetmesh_write_tags.c -text +test/H5Fed/trimesh_2gnuplot.c -text test/H5Fed/trimesh_adjacencies.c -text test/H5Fed/trimesh_read.c -text test/H5Fed/trimesh_write.c -text diff --git a/test/H5Fed/Makefile.am b/test/H5Fed/Makefile.am index 6f40374..814c839 100644 --- a/test/H5Fed/Makefile.am +++ b/test/H5Fed/Makefile.am @@ -16,6 +16,7 @@ noinst_PROGRAMS = \ tetmesh_read_tags \ trimesh_read \ trimesh_write \ + trimesh_2gnuplot \ trimesh_adjacencies \ trimesh_write_dunetest @@ -28,12 +29,13 @@ EXTRA_DIST = \ tetmesh_read.c \ tetmesh_read_tags.c \ tetmesh_write.c \ - tetmesh_write1.c \ + tetmesh_write1.c \ tetmesh_write2.c \ tetmesh_write_tags.c \ trimesh_adjacencies.c \ trimesh_read.c \ trimesh_write.c \ + trimesh_2gnuplot.c \ trimesh_write_dunetest.c # map_tet2globalid.c \ diff --git a/test/H5Fed/trimesh_2gnuplot.c b/test/H5Fed/trimesh_2gnuplot.c new file mode 100644 index 0000000..5df6622 --- /dev/null +++ b/test/H5Fed/trimesh_2gnuplot.c @@ -0,0 +1,101 @@ +#include +#include + +#include "H5hut.h" +#if defined (PARALLEL_IO) +#include +#endif + +#define H5FedGetNumLeafElementsTotal H5FedGetNumElementsTotal +/* + Traverse elements and output coordinates + */ +static h5_err_t +traverse_elems ( + h5t_mesh_t* const m + ) { + /* get number of elements we have to expect */ + h5_size_t num_elems_expect = H5FedGetNumLeafElementsTotal (m); + + /* get iterator for co-dim 0 */ + h5t_iterator_t* iter = H5FedBeginTraverseEntities (m, 0); + + /* iterate over all co-dim 0 entities, i.e. elements */ + h5_loc_id_t local_id; + h5_size_t num_elems = 0; + while ((local_id = H5FedTraverseEntities (iter)) >= 0) { + h5_loc_id_t local_vids[4]; + H5FedGetVertexIndicesOfEntity (m, local_id, local_vids); + + printf ("# cell %llx\n", (long long unsigned)local_id ); + h5_float64_t P[3]; + for (int i = 0; i < 3; i++) { + H5FedGetVertexCoordsByIndex (m, local_vids[i], P); + printf (" %8.6f %8.6f\n", P[0], P[1]); + } + H5FedGetVertexCoordsByIndex (m, local_vids[0], P); + printf (" %8.6f %8.6f\n", P[0], P[1]); + printf ("\n"); + num_elems++; + } + + /* done */ + H5FedEndTraverseEntities (iter); + + /* report error if we got a different number then expected */ + if (num_elems != num_elems_expect) { + fprintf (stderr, "!!! Got %lld elements, but expected %lld.\n", + (long long)num_elems, (long long)num_elems_expect); + exit(1); + } + return H5_SUCCESS; +} + +int +main ( + int argc, + char* argv[] + ) { + +#if defined (PARALLEL_IO) + MPI_Comm comm = MPI_COMM_WORLD; + MPI_Init (&argc, &argv); +#else + MPI_Comm comm = 0; +#endif + if (argc < 2 || argc > 3) { + fprintf (stderr, "Usage: %s FILE [LEVEL]\n", argv[0]); + exit (42); + } + + /* abort program on error, so we don't have to handle them */ + H5SetErrorHandler (H5AbortErrorhandler); + H5SetVerbosityLevel (0); + + /* open file and get number of meshes */ + h5_file_t* f = H5OpenFile (argv[1], H5_O_RDONLY, comm); + h5t_mesh_t* m; + H5FedOpenTriangleMeshByIndex (f, 0, &m); + int num_levels = H5FedGetNumLevels (m); + int level = num_levels-1; + if (argc >= 3) { + level = atoi (argv[2]); + } + if (level >= num_levels || level < 0) { + fprintf (stderr, "level %d out of range\n", level); + goto done; + } + H5FedSetLevel (m, level); + traverse_elems (m); + + +done: + H5FedCloseMesh (m); + H5CloseFile (f); + +#if defined (PARALLEL_IO) + MPI_Finalize (); +#endif + + return 0; +}