From f4ea22a7022c220353202ddd2da0669cc5655b81 Mon Sep 17 00:00:00 2001 From: Achim Gsell Date: Sat, 11 Jul 2009 08:05:24 +0000 Subject: [PATCH] write TWiki-friendly output --- test/H5Fed/tetmesh_adjacencies.c | 510 ++++++++++++++----------------- 1 file changed, 227 insertions(+), 283 deletions(-) diff --git a/test/H5Fed/tetmesh_adjacencies.c b/test/H5Fed/tetmesh_adjacencies.c index 92a4761..090c6a4 100644 --- a/test/H5Fed/tetmesh_adjacencies.c +++ b/test/H5Fed/tetmesh_adjacencies.c @@ -10,6 +10,9 @@ #endif #endif +#define PRINT_UPADJACENCIES 1 +#define PRINT_DOWNADJACENCIES 0 + struct vertex { h5_float64_t P[3]; }; @@ -24,358 +27,299 @@ struct tet { typedef struct tet tet_t; h5_err_t -print_upadjacent_edges_to_vertex ( +print_adjacencies_to_vertex ( h5_file_t * const f, h5_id_t local_id ) { - h5_idlist_t *list; - h5_id_t i; - - H5FedGetEdgesUpAdjacentToVertex ( f, local_id, &list ); - printf ( " Upward adjacent edges to vertex ID: %llx\n", local_id ); - for ( i = 0; i < list->num_items; i++ ) { - h5_id_t local_vids[2]; - H5FedMapEntity2LocalVids ( f, list->items[i], local_vids ); - printf ( " Edge ID: %llx = (%lld,%lld)\n", - list->items[i], - local_vids[0], - local_vids[1] ); - } - H5FedReleaseListOfAdjacencies ( f, &list ); - - return H5_SUCCESS; -} - -h5_err_t -print_upadjacent_triangles_to_vertex ( - h5_file_t * const f, - h5_id_t local_id - ) { - h5_idlist_t *list; - h5_id_t i; - - H5FedGetTrianglesUpAdjacentToVertex ( f, local_id, &list ); - printf ( " Upward adjacent triangles to vertex ID: %llx\n", - local_id ); - for ( i = 0; i < list->num_items; i++ ) { + h5_idlist_t *uadj_edges; + h5_idlist_t *uadj_triangles; + h5_idlist_t *uadj_tets; + H5FedGetEdgesUpAdjacentToVertex ( f, local_id, &uadj_edges ); + H5FedGetTrianglesUpAdjacentToVertex ( f, local_id, &uadj_triangles ); + H5FedGetTetsUpAdjacentToVertex ( f, local_id, &uadj_tets ); + int n = uadj_tets->num_items; + if ( uadj_triangles->num_items > n ) n = uadj_triangles->num_items; + if ( uadj_edges->num_items > n ) n = uadj_edges->num_items; + int i; + for ( i = 0; i < n; i++ ) { + char v[256]; + char k[256]; + char d[256]; + char t[256]; h5_id_t local_vids[4]; - H5FedMapEntity2LocalVids ( f, list->items[i], local_vids ); - printf ( " Triangle ID: %llx = (%lld,%lld,%lld)\n", - list->items[i], - local_vids[0], - local_vids[1], - local_vids[2] ); + if ( i == 0 ) { + snprintf ( v, sizeof(v), "=%llx=", local_id ); + } else { + *v = '\0'; + } + if ( i < uadj_edges->num_items ) { + H5FedMapEntity2LocalVids ( + f, uadj_edges->items[i], local_vids ); + snprintf ( k, sizeof(k), "=[%lld,%lld]=", + local_vids[0], local_vids[1] ); + } else { + *k = '\0'; + } + if ( i < uadj_triangles->num_items ) { + H5FedMapEntity2LocalVids ( + f, uadj_triangles->items[i], local_vids ); + snprintf ( d, sizeof(d), "=[%lld,%lld,%lld]=", + local_vids[0], local_vids[1], local_vids[2] ); + } else { + *d = '\0'; + } + if ( i < uadj_tets->num_items ) { + H5FedMapEntity2LocalVids ( + f, uadj_tets->items[i], local_vids ); + snprintf ( t, sizeof(t), "=[%lld,%lld,%lld,%lld]=", + local_vids[0], local_vids[1], + local_vids[2], local_vids[3] ); + } else { + *t = '\0'; + } + printf ( "| %-18s | %-18s | %-18s | %-18s |\n", v, k, d, t ); } - H5FedReleaseListOfAdjacencies ( f, &list ); + H5FedReleaseListOfAdjacencies ( f, &uadj_edges ); + H5FedReleaseListOfAdjacencies ( f, &uadj_triangles ); + H5FedReleaseListOfAdjacencies ( f, &uadj_tets ); return H5_SUCCESS; } -h5_err_t -print_upadjacent_tets_to_vertex ( +static h5_err_t +print_adjacencies_to_edge ( h5_file_t * const f, h5_id_t local_id ) { - h5_idlist_t *list; - h5_id_t i; + h5_idlist_t *dadj_vertices; + h5_idlist_t *uadj_triangles; + h5_idlist_t *uadj_tets; + H5FedGetVerticesDownAdjacentToEdge ( f, local_id, &dadj_vertices ); + H5FedGetTrianglesUpAdjacentToEdge ( f, local_id, &uadj_triangles ); + H5FedGetTetsUpAdjacentToEdge ( f, local_id, &uadj_tets ); + int n = dadj_vertices->num_items; + if ( uadj_triangles->num_items > n ) n = uadj_triangles->num_items; + if ( uadj_tets->num_items > n ) n = uadj_tets->num_items; - H5FedGetTetsUpAdjacentToVertex ( f, local_id, &list ); - printf ( " Upward adjacent tetrahedra to vertex ID: %llx\n", local_id ); - for ( i = 0; i < list->num_items; i++ ) { + int i; + for ( i = 0; i < n; i++ ) { + char v[256]; + char k[256]; + char d[256]; + char t[256]; h5_id_t local_vids[4]; - H5FedMapEntity2LocalVids ( f, list->items[i], local_vids ); - printf ( " Tet ID: %llx = (%lld,%lld,%lld,%lld)\n", - list->items[i], - local_vids[0], - local_vids[1], - local_vids[2], - local_vids[3] ); + if ( i < dadj_vertices->num_items ) { + H5FedMapEntity2LocalVids ( + f, dadj_vertices->items[i], local_vids ); + snprintf ( v, sizeof(v), "=[%lld]=", + local_vids[0] ); + } else { + *v = '\0'; + } + if ( i == 0 ) { + snprintf ( k, sizeof(k), "=%llx=", local_id ); + } else { + *k = '\0'; + } + if ( i < uadj_triangles->num_items ) { + H5FedMapEntity2LocalVids ( + f, uadj_triangles->items[i], local_vids ); + snprintf ( d, sizeof(d), "=[%lld,%lld,%lld]=", + local_vids[0], local_vids[1], local_vids[2] ); + } else { + *d = '\0'; + } + if ( i < uadj_tets->num_items ) { + H5FedMapEntity2LocalVids ( + f, uadj_tets->items[i], local_vids ); + snprintf ( t, sizeof(t), "=[%lld,%lld,%lld,%lld]=", + local_vids[0], local_vids[1], + local_vids[2], local_vids[3] ); + } else { + *t = '\0'; + } + printf ( "| %-18s | %-18s | %-18s | %-18s |\n", v, k, d, t ); } - H5FedReleaseListOfAdjacencies ( f, &list ); + H5FedReleaseListOfAdjacencies ( f, &dadj_vertices ); + H5FedReleaseListOfAdjacencies ( f, &uadj_triangles ); + H5FedReleaseListOfAdjacencies ( f, &uadj_tets ); return H5_SUCCESS; } -h5_err_t -print_upadjacent_triangles_to_edge ( +static h5_err_t +print_adjacencies_to_triangle ( h5_file_t * const f, h5_id_t local_id ) { - h5_idlist_t *list; - h5_id_t i; + h5_idlist_t *dadj_vertices; + h5_idlist_t *dadj_edges; + h5_idlist_t *uadj_tets; + H5FedGetVerticesDownAdjacentToTriangle ( f, local_id, &dadj_vertices ); + H5FedGetEdgesDownAdjacentToTriangle ( f, local_id, &dadj_edges ); + H5FedGetTetsUpAdjacentToTriangle ( f, local_id, &uadj_tets ); - H5FedGetTrianglesUpAdjacentToEdge ( f, local_id, &list ); - printf ( " Upward adjacent triangles to edge ID: %llx\n", - local_id ); - for ( i = 0; i < list->num_items; i++ ) { + int n = dadj_vertices->num_items; + if ( dadj_edges->num_items > n ) n = dadj_edges->num_items; + if ( uadj_tets->num_items > n ) n = uadj_tets->num_items; + int i; + for ( i = 0; i < n; i++ ) { + char v[256]; + char k[256]; + char d[256]; + char t[256]; h5_id_t local_vids[4]; - H5FedMapEntity2LocalVids ( f, list->items[i], local_vids ); - printf ( " Triangle ID: %llx = (%lld,%lld,%lld)\n", - list->items[i], - local_vids[0], - local_vids[1], - local_vids[2] ); + if ( i < dadj_vertices->num_items ) { + H5FedMapEntity2LocalVids ( + f, dadj_vertices->items[i], local_vids ); + snprintf ( v, sizeof(v), "=[%lld]=", + local_vids[0] ); + } else { + *v = '\0'; + } + if ( i < dadj_edges->num_items ) { + H5FedMapEntity2LocalVids ( + f, dadj_edges->items[i], local_vids ); + snprintf ( k, sizeof(k), "=[%lld,%lld]=", + local_vids[0], local_vids[1] ); + } else { + *k = '\0'; + } + if ( i == 0 ) { + snprintf ( d, sizeof(d), "=%llx=", local_id ); + } else { + *d = '\0'; + } + if ( i < uadj_tets->num_items ) { + H5FedMapEntity2LocalVids ( + f, uadj_tets->items[i], local_vids ); + snprintf ( t, sizeof(t), "=[%lld,%lld,%lld,%lld]=", + local_vids[0], local_vids[1], + local_vids[2], local_vids[3] ); + } else { + *t = '\0'; + } + printf ( "| %-18s | %-18s | %-18s | %-18s |\n", v, k, d, t ); } - H5FedReleaseListOfAdjacencies ( f, &list ); + H5FedReleaseListOfAdjacencies ( f, &dadj_vertices ); + H5FedReleaseListOfAdjacencies ( f, &dadj_edges ); + H5FedReleaseListOfAdjacencies ( f, &uadj_tets ); return H5_SUCCESS; } -h5_err_t -print_upadjacent_tets_to_edge ( +static h5_err_t +print_adjacencies_to_tet ( h5_file_t * const f, h5_id_t local_id ) { - h5_idlist_t *list; - h5_id_t i; + h5_idlist_t *dadj_vertices; + h5_idlist_t *dadj_edges; + h5_idlist_t *dadj_triangles; + H5FedGetVerticesDownAdjacentToTet ( f, local_id, &dadj_vertices ); + H5FedGetEdgesDownAdjacentToTet ( f, local_id, &dadj_edges ); + H5FedGetTrianglesDownAdjacentToTet ( f, local_id, &dadj_triangles ); - H5FedGetTetsUpAdjacentToEdge ( f, local_id, &list ); - printf ( " Upward adjacent tetrahedra to edge ID: %llx\n", local_id ); - for ( i = 0; i < list->num_items; i++ ) { + int n = dadj_vertices->num_items; + if ( dadj_edges->num_items > n ) n = dadj_edges->num_items; + if ( dadj_triangles->num_items > n ) n = dadj_triangles->num_items; + int i; + for ( i = 0; i < n; i++ ) { + char v[256]; + char k[256]; + char d[256]; + char t[256]; h5_id_t local_vids[4]; - H5FedMapEntity2LocalVids ( f, list->items[i], local_vids ); - printf ( " Tet ID: %llx = (%lld,%lld,%lld,%lld)\n", - list->items[i], - local_vids[0], - local_vids[1], - local_vids[2], - local_vids[3] ); + if ( i < dadj_vertices->num_items ) { + snprintf ( v, sizeof(v), "=[%lld]=", + dadj_vertices->items[i] ); + } else { + *v = '\0'; + } + if ( i < dadj_edges->num_items ) { + H5FedMapEntity2LocalVids ( + f, dadj_edges->items[i], local_vids ); + snprintf ( k, sizeof(k), "=[%lld,%lld]=", + local_vids[0], local_vids[1] ); + } else { + *k = '\0'; + } + if ( i < dadj_triangles->num_items ) { + H5FedMapEntity2LocalVids ( + f, dadj_triangles->items[i], local_vids ); + snprintf ( d, sizeof(d), "=[%lld,%lld,%lld]=", + local_vids[0], local_vids[1], local_vids[2] ); + } else { + *d = '\0'; + } + if ( i == 0 ) { + snprintf ( t, sizeof(t), "=%llx=", local_id ); + } else { + *t = '\0'; + } + printf ( "| %-18s | %-18s | %-18s | %-18s |\n", v, k, d, t ); } - H5FedReleaseListOfAdjacencies ( f, &list ); + H5FedReleaseListOfAdjacencies ( f, &dadj_vertices ); + H5FedReleaseListOfAdjacencies ( f, &dadj_edges ); + H5FedReleaseListOfAdjacencies ( f, &dadj_triangles ); return H5_SUCCESS; } -h5_err_t -print_upadjacent_tets_to_triangle ( - h5_file_t * const f, - h5_id_t local_id - ) { - h5_idlist_t *list; - h5_id_t i; - - H5FedGetTetsUpAdjacentToTriangle ( f, local_id, &list ); - printf ( " Upward adjacent tetrahedra to triangle ID: %llx\n", - local_id ); - for ( i = 0; i < list->num_items; i++ ) { - h5_id_t local_vids[4]; - H5FedMapEntity2LocalVids ( f, list->items[i], local_vids ); - printf ( " Tet ID: %llx = (%lld,%lld,%lld,%lld)\n", - list->items[i], - local_vids[0], - local_vids[1], - local_vids[2], - local_vids[3] ); - } - H5FedReleaseListOfAdjacencies ( f, &list ); - return H5_SUCCESS; -} - -h5_err_t -print_downadjacent_vertices_to_edge ( - h5_file_t * const f, - h5_id_t local_id - ) { - h5_idlist_t *list; - h5_id_t i; - - H5FedGetVerticesDownAdjacentToEdge ( f, local_id, &list ); - printf ( " Downward adjacent vertices to edge ID: %llx\n", local_id ); - for ( i = 0; i < list->num_items; i++ ) { - h5_id_t local_vids[4]; - H5FedMapEntity2LocalVids ( f, list->items[i], local_vids ); - printf ( " Vertex ID: %llx\n", - list->items[i] ); - } - H5FedReleaseListOfAdjacencies ( f, &list ); - return H5_SUCCESS; -} - -h5_err_t -print_downadjacent_vertices_to_triangle ( - h5_file_t * const f, - h5_id_t local_id - ) { - h5_idlist_t *list; - h5_id_t i; - - H5FedGetVerticesDownAdjacentToTriangle ( f, local_id, &list ); - printf ( " Downward adjacent vertices to triangle ID: %llx\n", - local_id ); - for ( i = 0; i < list->num_items; i++ ) { - h5_id_t local_vids[4]; - H5FedMapEntity2LocalVids ( f, list->items[i], local_vids ); - printf ( " Vertex ID: %llx\n", - list->items[i] ); - } - H5FedReleaseListOfAdjacencies ( f, &list ); - return H5_SUCCESS; -} - -h5_err_t -print_downadjacent_vertices_to_tet ( - h5_file_t * const f, - h5_id_t local_id - ) { - h5_idlist_t *list; - h5_id_t i; - - H5FedGetVerticesDownAdjacentToTet ( f, local_id, &list ); - printf ( " Downward adjacent vertices to tetrahedron ID: %llx\n", local_id ); - for ( i = 0; i < list->num_items; i++ ) { - h5_id_t local_vids[4]; - H5FedMapEntity2LocalVids ( f, list->items[i], local_vids ); - printf ( " Vertex ID: %llx\n", - list->items[i] ); - } - H5FedReleaseListOfAdjacencies ( f, &list ); - return H5_SUCCESS; -} - -h5_err_t -print_downadjacent_edges_to_triangle ( - h5_file_t * const f, - h5_id_t local_id - ) { - h5_idlist_t *list; - h5_id_t i; - - H5FedGetEdgesDownAdjacentToTriangle ( f, local_id, &list ); - printf ( " Downward adjacent edges to triangle ID: %llx\n", - local_id ); - for ( i = 0; i < list->num_items; i++ ) { - h5_id_t local_vids[4]; - H5FedMapEntity2LocalVids ( f, list->items[i], local_vids ); - printf ( " Edge ID: %llx = (%lld,%lld)\n", - list->items[i], - local_vids[0], - local_vids[1] ); - } - H5FedReleaseListOfAdjacencies ( f, &list ); - return H5_SUCCESS; -} - -h5_err_t -print_downadjacent_edges_to_tet ( - h5_file_t * const f, - h5_id_t local_id - ) { - h5_idlist_t *list; - h5_id_t i; - - H5FedGetEdgesDownAdjacentToTet ( f, local_id, &list ); - printf ( " Downward adjacent edges to tetrahedron ID: %llx\n", local_id ); - for ( i = 0; i < list->num_items; i++ ) { - h5_id_t local_vids[4]; - H5FedMapEntity2LocalVids ( f, list->items[i], local_vids ); - printf ( " Edge ID: %llx = (%lld,%lld)\n", - list->items[i], - local_vids[0], - local_vids[1] ); - } - H5FedReleaseListOfAdjacencies ( f, &list ); - return H5_SUCCESS; -} - -h5_err_t -print_downadjacent_triangles_to_tet ( - h5_file_t * const f, - h5_id_t local_id - ) { - h5_idlist_t *list; - h5_id_t i; - - H5FedGetTrianglesDownAdjacentToTet ( f, local_id, &list ); - printf ( " Downward adjacent triangles to tetrahedron ID: %llx\n", - local_id ); - for ( i = 0; i < list->num_items; i++ ) { - h5_id_t local_vids[4]; - H5FedMapEntity2LocalVids ( f, list->items[i], local_vids ); - printf ( " Triangle ID: %llx = (%lld,%lld,%lld)\n", - list->items[i], - local_vids[0], - local_vids[1], - local_vids[2] ); - } - H5FedReleaseListOfAdjacencies ( f, &list ); - return H5_SUCCESS; -} - -h5_err_t +static h5_err_t traverse_vertices ( h5_file_t * f ) { h5_id_t id, local_id; h5_float64_t P[3]; - h5_err_t h5err = H5FedBeginTraverseVertices ( f ); - if ( h5err < 0 ) return h5err; + printf ( "\nAdjacencies to vertices\n" ); + H5FedBeginTraverseVertices ( f ); while ( (local_id = H5FedTraverseVertices ( f, &id, P )) >= 0 ) { - printf (" Level: %lld, Vertex[%llx]: coords: (%f, %f, %f)\n", - H5FedGetLevel(f), local_id, P[0], P[1], P[2] ); - print_upadjacent_edges_to_vertex ( f, local_id ); - print_upadjacent_triangles_to_vertex ( f, local_id ); - print_upadjacent_tets_to_vertex ( f, local_id ); + print_adjacencies_to_vertex ( f, local_id ); } - H5FedEndTraverseVertices ( f ); - return H5_SUCCESS; + return H5FedEndTraverseVertices ( f ); } -h5_err_t +static h5_err_t traverse_edges ( h5_file_t * f ) { h5_id_t local_id, vids[4]; - h5_err_t h5err = H5FedBeginTraverseEdges ( f ); - if ( h5err < 0 ) return h5err; + printf ( "\nAdjacencies to edges\n" ); + H5FedBeginTraverseEdges ( f ); while ( (local_id = H5FedTraverseEdges ( f, vids )) >= 0 ) { - printf (" Level: %lld, Edge[%llx]: (%lld, %lld)\n", - H5FedGetLevel(f), local_id, vids[0], vids[1] ); - print_upadjacent_triangles_to_edge ( f, local_id ); - print_upadjacent_tets_to_edge ( f, local_id ); - print_downadjacent_vertices_to_edge ( f, local_id ); + print_adjacencies_to_edge ( f, local_id ); } - h5err = H5FedEndTraverseEdges ( f ); - return h5err; + return H5FedEndTraverseEdges ( f ); } -h5_err_t +static h5_err_t traverse_triangles ( h5_file_t * f ) { h5_id_t local_id, vids[4]; - h5_err_t h5err = H5FedBeginTraverseTriangles ( f ); - if ( h5err < 0 ) return h5err; + printf ( "\nAdjacencies to triangle\n" ); + H5FedBeginTraverseTriangles ( f ); while ( (local_id = H5FedTraverseTriangles ( f, vids )) >= 0 ) { - printf (" Level: %lld, Triangle[%llx]: (%lld,%lld,%lld)\n", - H5FedGetLevel(f), local_id, vids[0], vids[1], vids[2] ); - print_upadjacent_tets_to_triangle ( f, local_id ); - print_downadjacent_vertices_to_triangle ( f, local_id ); - print_downadjacent_edges_to_triangle ( f, local_id ); + print_adjacencies_to_triangle ( f, local_id ); } - h5err = H5FedEndTraverseTriangles ( f ); - return h5err; + return H5FedEndTraverseTriangles ( f ); } -h5_err_t +static h5_err_t traverse_tets ( h5_file_t * f ) { h5_id_t id, local_id, parent_id, vids[4]; - h5_err_t h5err = H5FedBeginTraverseElements ( f ); - if ( h5err < 0 ) return h5err; + printf ( "\nAdjacencies to tetrahedra\n" ); + H5FedBeginTraverseElements ( f ); while ( (local_id = H5FedTraverseElements (f, &id, &parent_id, vids )) >= 0 ) { - printf (" Level: %lld, Tet[%lld]: (%lld, %lld, %lld, %lld)\n", - H5FedGetLevel(f), local_id, - vids[0], vids[1], vids[2], vids[3] ); - print_downadjacent_vertices_to_tet ( f, local_id ); - print_downadjacent_edges_to_tet ( f, local_id ); - print_downadjacent_triangles_to_tet ( f, local_id ); + print_adjacencies_to_tet ( f, local_id ); } - H5FedEndTraverseElements ( f ); - return H5_SUCCESS; + return H5FedEndTraverseElements ( f ); } -h5_err_t +static h5_err_t traverse_level ( h5_file_t * f ) { @@ -387,16 +331,16 @@ traverse_level ( return H5_SUCCESS; } -h5_err_t +static h5_err_t traverse_mesh ( h5_file_t * f ) { h5_id_t level_id; h5_size_t num_levels = H5FedGetNumLevels ( f ); - num_levels = 2; + num_levels = 3; printf ( " Number of levels in mesh: %lld\n", num_levels ); - for ( level_id = 1; level_id < num_levels; level_id++ ) { + for ( level_id = 2; level_id < num_levels; level_id++ ) { h5_err_t h5err = H5FedSetLevel ( f, level_id ); if ( h5err < 0 ) { fprintf ( stderr, "!!! Can't set level %lld.\n", level_id );