print all up- and downward adjacencies

This commit is contained in:
2009-07-01 19:18:54 +00:00
parent b6f2894ddb
commit 8f98ff0165
+320 -93
View File
@@ -23,72 +23,300 @@ struct tet {
};
typedef struct tet tet_t;
h5_err_t
print_upadjacent_edges_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_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
print_upadjacent_tets_to_vertex (
h5_file_t * const f,
h5_id_t local_id
) {
h5_idlist_t *list;
h5_id_t i;
H5FedGetTetsUpAdjacentToVertex ( f, local_id, &list );
printf ( " Upward adjacent tetrahedra to vertex 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_upadjacent_triangles_to_edge (
h5_file_t * const f,
h5_id_t local_id
) {
h5_idlist_t *list;
h5_id_t i;
H5FedGetTrianglesUpAdjacentToEdge ( f, local_id, &list );
printf ( " Upward adjacent triangles 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 ( " 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
print_upadjacent_tets_to_edge (
h5_file_t * const f,
h5_id_t local_id
) {
h5_idlist_t *list;
h5_id_t i;
H5FedGetTetsUpAdjacentToEdge ( f, local_id, &list );
printf ( " Upward adjacent tetrahedra 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 ( " 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_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
traverse_vertices (
h5_file_t * f
) {
h5_id_t id, local_id;
h5_float64_t P[3];
h5_size_t real_num = 0;
h5_size_t num = H5FedGetNumVerticesTotal ( f );
printf ( " Number of vertices on level: %lld\n", num );
h5_err_t h5err = H5FedBeginTraverseVertices ( f );
if ( h5err < 0 ) return h5err;
while ( (real_num < num) &&
((local_id = H5FedTraverseVertices ( f, &id, P )) >= 0) ) {
printf ( " Vertex[%lld]: local id: %lld, coords: %f %f %f \n",
id, local_id, P[0], P[1], P[2] );
h5_idlist_t *list;
h5_id_t i;
H5FedGetEdgesUpAdjacentToVertex ( f, local_id, &list );
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 );
H5FedGetTrianglesUpAdjacentToVertex ( f, local_id, &list );
for ( i = 0; i < list->num_items; i++ ) {
h5_id_t local_vids[2];
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 );
H5FedGetTetsUpAdjacentToVertex ( f, local_id, &list );
for ( i = 0; i < list->num_items; i++ ) {
h5_id_t local_vids[2];
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 );
real_num++;
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 );
}
H5FedEndTraverseVertices ( f );
if ( real_num != num ) {
fprintf ( stderr, "!!! Got %lld vertices, but expected %lld.\n",
real_num, num );
return -1;
}
return H5_SUCCESS;
}
h5_err_t
traverse_edges (
h5_file_t * f
@@ -98,42 +326,52 @@ traverse_edges (
h5_err_t h5err = H5FedBeginTraverseEdges ( f );
if ( h5err < 0 ) return h5err;
while ( (local_id = H5FedTraverseEdges ( f, vids )) >= 0 ) {
printf ( " Edge[%lld]: (%lld,%lld)\n",
local_id, vids[0], vids[1] );
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 );
}
h5err = H5FedEndTraverseEdges ( f );
return h5err;
}
h5_err_t
travers_tets (
traverse_triangles (
h5_file_t * f
) {
h5_id_t local_id, vids[4];
h5_err_t h5err = H5FedBeginTraverseTriangles ( f );
if ( h5err < 0 ) return h5err;
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 );
}
h5err = H5FedEndTraverseTriangles ( f );
return h5err;
}
h5_err_t
traverse_tets (
h5_file_t * f
) {
h5_id_t id, local_id, parent_id, vids[4];
h5_size_t real_num = 0;
h5_size_t num = H5FedGetNumElementsTotal ( f );
printf ( " Number of tetrahedra on level: %lld\n", num );
h5_err_t h5err = H5FedBeginTraverseElements ( f );
if ( h5err < 0 ) return h5err;
while ( (real_num < num) &&
((local_id = H5FedTraverseElements (
f, &id, &parent_id, vids )) >= 0) ) {
printf ( " Tet[%lld]: local id: %lld, parent id: %lld,"
" vids: %lld %lld %lld %lld\n",
id, local_id, parent_id,
vids[0], vids[1], vids[2], vids[3] );
real_num++;
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 );
}
H5FedEndTraverseElements ( f );
if ( real_num != num ) {
fprintf ( stderr, "!!! Got %lld tets, but expected %lld.\n",
real_num, num );
return -1;
}
return H5_SUCCESS;
}
@@ -141,23 +379,11 @@ h5_err_t
traverse_level (
h5_file_t * f
) {
h5_err_t h5err = traverse_vertices ( f );
if ( h5err < 0 ) {
fprintf ( stderr, "!!! Oops ...\n" );
return -1;
}
h5err = traverse_edges ( f );
if ( h5err < 0 ) {
fprintf ( stderr, "!!! Oops ...\n" );
return -1;
}
#if 0
h5err = traverse_tets ( f );
if ( h5err < 0 ) {
fprintf ( stderr, "!!! Oops ...\n" );
return -1;
}
#endif
if ( traverse_vertices ( f ) < 0 ) return -1;
if ( traverse_edges ( f ) < 0 ) return -1;
if ( traverse_triangles ( f ) < 0 ) return -1;
if ( traverse_tets ( f ) < 0 ) return -1;
return H5_SUCCESS;
}
@@ -168,8 +394,9 @@ traverse_mesh (
h5_id_t level_id;
h5_size_t num_levels = H5FedGetNumLevels ( f );
num_levels = 2;
printf ( " Number of levels in mesh: %lld\n", num_levels );
for ( level_id = 0; level_id < num_levels; level_id++ ) {
for ( level_id = 1; 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 );
@@ -191,7 +418,7 @@ main (
char *argv[]
) {
H5SetVerbosityLevel ( 4 );
H5SetVerbosityLevel ( 3 );
h5_file_t *f = H5OpenFile ( "simple_tet.h5", H5_O_RDONLY, 0 );
if ( f == NULL ) {