From 96683751bc51d6c4e1f7616749a2f8cfeb3380d2 Mon Sep 17 00:00:00 2001 From: Achim Gsell Date: Thu, 22 Apr 2010 10:58:05 +0000 Subject: [PATCH] update ignore prop --- src/h5_core/h5_attribs.c | 2 +- src/h5_core/h5_attribs.h | 2 +- src/h5_core/h5_types.h | 6 +- src/h5_core/h5t_hsearch_private.h | 6 +- src/h5_core/h5t_retrieve.c | 106 ++++++++++++++++++++++-------- 5 files changed, 87 insertions(+), 35 deletions(-) diff --git a/src/h5_core/h5_attribs.c b/src/h5_core/h5_attribs.c index 5fde660..b9712d2 100644 --- a/src/h5_core/h5_attribs.c +++ b/src/h5_core/h5_attribs.c @@ -142,7 +142,7 @@ h5_get_attrib_info ( \return number of attributes or error code. */ -h5_size_t +h5_ssize_t h5_get_num_attribs ( h5_file_t * const f, /*!< handle to open file */ const hid_t id diff --git a/src/h5_core/h5_attribs.h b/src/h5_core/h5_attribs.h index 9a9d331..02571af 100644 --- a/src/h5_core/h5_attribs.h +++ b/src/h5_core/h5_attribs.h @@ -30,7 +30,7 @@ h5_get_attrib_info ( h5_int64_t *attrib_nelem ); -h5_int64_t +h5_ssize_t h5_get_num_attribs ( h5_file_t * constf, hid_t id diff --git a/src/h5_core/h5_types.h b/src/h5_core/h5_types.h index c4166b9..77912b5 100644 --- a/src/h5_core/h5_types.h +++ b/src/h5_core/h5_types.h @@ -32,7 +32,7 @@ typedef __int64 int64_t; typedef int64_t h5_int64_t; typedef int32_t h5_int32_t; typedef int64_t h5_id_t; -typedef int64_t h5_size_t; /* size in number of elements */ +typedef uint64_t h5_size_t; /* size in number of elements */ typedef int64_t h5_ssize_t; /* size in number of elements */ typedef int64_t h5_err_t; @@ -60,8 +60,8 @@ typedef unsigned long MPI_Comm; #endif typedef struct h5_idlist { - h5_size_t size; /* allocated space in number of items */ - h5_size_t num_items; /* stored items */ + int32_t size; /* allocated space in number of items */ + int32_t num_items; /* stored items */ h5_id_t *items; } h5_idlist_t; diff --git a/src/h5_core/h5t_hsearch_private.h b/src/h5_core/h5t_hsearch_private.h index 6d80065..606d233 100644 --- a/src/h5_core/h5t_hsearch_private.h +++ b/src/h5_core/h5t_hsearch_private.h @@ -6,17 +6,17 @@ typedef struct h5t_te_entry_key { } h5t_te_entry_key_t; typedef struct h5_te_entry { - h5t_te_entry_key_t key; h5_idlist_t value; + h5t_te_entry_key_t key; } h5t_te_entry_t; typedef struct h5t_td_entry_key { - h5_3id_t vids; + h5_id_t vids[3]; } h5t_td_entry_key_t; typedef struct h5_td_entry { - h5t_td_entry_key_t key; h5_idlist_t value; + h5t_td_entry_key_t key; } h5t_td_entry_t; diff --git a/src/h5_core/h5t_retrieve.c b/src/h5_core/h5t_retrieve.c index e419619..60061b5 100644 --- a/src/h5_core/h5t_retrieve.c +++ b/src/h5_core/h5t_retrieve.c @@ -1,10 +1,5 @@ -#include #include -#include /* va_arg - System dependent ?! */ #include -#include -#include -#include #include "h5_core/h5_core.h" #include "h5_core/h5_core_private.h" @@ -13,7 +8,7 @@ Skip elements which have been refined on a level <= the current one. */ static h5_id_t -_skip_to_next_elem_on_level ( +skip_to_next_elem_on_level ( h5_file_t * f, h5_id_t *eid ) { @@ -59,7 +54,7 @@ h5t_begin_traverse_vertices ( iter->cur_cid = -1; iter->cur_eid = -1; - TRY ( _skip_to_next_elem_on_level ( f, &iter->cur_eid ) ); + TRY ( skip_to_next_elem_on_level ( f, &iter->cur_eid ) ); return H5_SUCCESS; } @@ -78,7 +73,7 @@ h5t_traverse_vertices ( h5_debug ( f, "Traversing done!" ); return H5_NOK; } - TRY ( _skip_to_next_elem_on_level ( + TRY ( skip_to_next_elem_on_level ( f, &iter->cur_eid ) ); iter->cur_cid = 0; } else { @@ -123,7 +118,7 @@ h5t_begin_traverse_edges ( iter->cur_cid = -1; iter->cur_eid = -1; - TRY ( _skip_to_next_elem_on_level ( f, &iter->cur_eid ) ); + TRY ( skip_to_next_elem_on_level ( f, &iter->cur_eid ) ); return H5_SUCCESS; } @@ -142,24 +137,23 @@ h5t_traverse_edges ( h5_debug ( f, "Traversing done!" ); return H5_NOK; } - TRY ( _skip_to_next_elem_on_level ( + TRY ( skip_to_next_elem_on_level ( f, &iter->cur_eid ) ); iter->cur_cid = 0; } else { iter->cur_cid++; } - TRY ( h5tpriv_find_te2 ( - f, iter->cur_cid, iter->cur_eid, &te ) ); + TRY( h5tpriv_find_te2 (f, iter->cur_cid, iter->cur_eid, &te) ); /* skip to first element which is on current level */ i = -1; h5_elem_ldta_t *el_dta; do { i++; - h5_id_t eid = h5tpriv_get_elem_idx ( te->value.items[i] ); + h5_id_t eid = h5tpriv_get_elem_idx (te->value.items[i]); el_dta = &t->elems_ldta[eid]; - } while ( h5tpriv_elem_is_on_cur_level ( f, el_dta ) == H5_NOK ); - } while ( iter->cur_eid != h5tpriv_get_elem_idx(te->value.items[i]) ); - memcpy ( local_vids, te->key.vids, 2*sizeof(h5_id_t) ); + } while (h5tpriv_elem_is_on_cur_level (f, el_dta) == H5_NOK); + } while ( iter->cur_eid != h5tpriv_get_elem_idx (te->value.items[i])); + memcpy (local_vids, te->key.vids, 2*sizeof(h5_id_t)); return te->value.items[0]; } @@ -185,7 +179,7 @@ h5t_begin_traverse_triangles ( iter->cur_cid = -1; iter->cur_eid = -1; - TRY ( _skip_to_next_elem_on_level ( f, &iter->cur_eid ) ); + TRY ( skip_to_next_elem_on_level ( f, &iter->cur_eid ) ); return H5_SUCCESS; } @@ -199,28 +193,86 @@ h5t_traverse_triangles ( h5t_td_entry_t *td; h5_size_t i; do { - if ( iter->cur_cid >= 3 ) { - if ( iter->cur_eid+1 >= t->num_elems[t->cur_level] ) { - h5_debug ( f, "Traversing done!" ); + if (iter->cur_cid >= 3) { + if (iter->cur_eid+1 >= t->num_elems[t->cur_level]) { + h5_debug (f, "Traversing done!"); return H5_NOK; } - TRY ( _skip_to_next_elem_on_level ( - f, &iter->cur_eid ) ); + TRY( skip_to_next_elem_on_level (f, &iter->cur_eid) ); iter->cur_cid = 0; } else { iter->cur_cid++; } - TRY ( h5tpriv_find_td2 ( f, iter->cur_cid, iter->cur_eid, &td ) ); + TRY( h5tpriv_find_td2 (f, iter->cur_cid, iter->cur_eid, &td) ); /* skip to first element which is on current level */ i = -1; h5_elem_ldta_t *el_dta; do { i++; - h5_id_t eid = h5tpriv_get_elem_idx ( td->value.items[i] ); + h5_id_t eid = h5tpriv_get_elem_idx (td->value.items[i]); el_dta = &t->elems_ldta[eid]; - } while ( h5tpriv_elem_is_on_cur_level ( f, el_dta ) == H5_NOK ); - } while ( iter->cur_eid != h5tpriv_get_elem_idx(td->value.items[i]) ); - memcpy ( local_vids, td->key.vids, 3*sizeof(h5_id_t) ); + } while (h5tpriv_elem_is_on_cur_level (f, el_dta) == H5_NOK); + } while (iter->cur_eid != h5tpriv_get_elem_idx(td->value.items[i])); + memcpy (local_vids, td->key.vids, 3*sizeof(h5_id_t)); + + return td->value.items[0]; +} + +/*! + Function for traversing entities with 0 < co-dim < co-dim(vertex). + In a tetrahedral mesh this means edges and triangle, in triangle + mesh only edges. + */ +typedef struct { + h5_id_t cur_elem_id; // local element id + h5_id_t cur_face_id; // face id according reference element + int32_t codim; // co-dimension of faces to traverse + int32_t num_faces; // number of faces + +} h5t_entity_iterator2; + +typedef struct h5t_idlisthash_key { + h5_id_t ids[1]; +} h5t_idlisthash_key_t; + +/* + List of all upward adjacent elements of same coarsness of a specific face. + The face is specified by its local vertex IDs. + */ +typedef struct h5t_idlisthash_entry { + h5_idlist_t value; + h5t_idlisthash_key_t key; +} h5t_idlisthash_entry_t; + +h5_id_t +h5t_traverse_faces ( + h5_file_t * const f, + h5t_entity_iterator2_t *iter; + ) { + h5t_fdata_t *t = f->t; + h5t_idlisthash_entry_t *entry; + h5_size_t i; + do { + if (iter->cur_fid >= iter->num_faces) { + if (iter->cur_eid+1 >= t->num_elems[t->cur_level]) { + h5_debug (f, "Traversing done!"); + return H5_NOK; + } + TRY( skip_to_next_elem_on_level (f, &iter->cur_eid) ); + iter->cur_fid = 0; + } else { + iter->cur_fid++; + } + TRY( h5tpriv_find_td2 (f, iter->cur_fid, iter->cur_eid, &entry) ); + /* skip to first element which is on current level */ + i = -1; + h5_elem_ldta_t *el_dta; + do { + i++; + h5_id_t eid = h5tpriv_get_elem_idx (td->value.items[i]); + el_dta = &t->elems_ldta[eid]; + } while (h5tpriv_elem_is_on_cur_level (f, el_dta) == H5_NOK); + } while (iter->cur_eid != h5tpriv_get_elem_idx(td->value.items[i])); return td->value.items[0]; }