From cb35755cf5054af426e2b1f093f517d595dc769e Mon Sep 17 00:00:00 2001 From: Achim Gsell Date: Thu, 16 Dec 2010 12:25:28 +0000 Subject: [PATCH] - refactored 'num_elems_on_level' to 'num_elems_on_leaf_level' - introduced new refinement level --- src/h5core/h5t_inquiry.c | 2 +- src/h5core/h5t_openclose.c | 26 +++++++++++++------------- src/h5core/h5t_readwrite.c | 12 ++++++------ src/h5core/h5t_readwrite_tetm.c | 19 ++++++++----------- src/h5core/h5t_readwrite_trim.c | 19 +++++++++---------- src/h5core/h5t_retrieve.c | 2 +- src/h5core/h5t_store.c | 12 ++++++------ src/h5core/h5t_store_tetm.c | 2 +- src/h5core/h5t_store_trim.c | 2 +- src/h5core/h5t_types_private.h | 14 +++++++------- 10 files changed, 53 insertions(+), 57 deletions(-) diff --git a/src/h5core/h5t_inquiry.c b/src/h5core/h5t_inquiry.c index f2b8cee..4b35d24 100644 --- a/src/h5core/h5t_inquiry.c +++ b/src/h5core/h5t_inquiry.c @@ -94,7 +94,7 @@ h5t_get_num_elems ( if (t->cur_level < 0) { return h5tpriv_error_undef_level (f); } - return t->num_elems_on_level[t->cur_level]; + return t->num_elems_on_leaf_level[t->cur_level]; } /*! diff --git a/src/h5core/h5t_openclose.c b/src/h5core/h5t_openclose.c index 2c97af5..4256afd 100644 --- a/src/h5core/h5t_openclose.c +++ b/src/h5core/h5t_openclose.c @@ -235,7 +235,7 @@ init_fdata ( t->glb_elems.data = NULL; t->loc_elems.data = NULL; t->num_elems = NULL; - t->num_elems_on_level = NULL; + t->num_elems_on_leaf_level = NULL; t->map_elem_g2l.items = NULL; t->vertices = NULL; t->num_vertices = NULL; @@ -310,21 +310,21 @@ init_fdata ( t->dsinfo_num_elems.access_prop = H5P_DEFAULT; /* NumElemsOnLevel */ - strcpy (t->dsinfo_num_elems_on_level.name, "NumElemsOnLevel"); - t->dsinfo_num_elems_on_level.rank = 1; - t->dsinfo_num_elems_on_level.dims[0] = 0; - t->dsinfo_num_elems_on_level.max_dims[0] = H5S_UNLIMITED; - t->dsinfo_num_elems_on_level.chunk_dims[0] = 4096; - t->dsinfo_num_elems_on_level.type_id = t->dtypes.h5_glb_idx_t; - TRY( t->dsinfo_num_elems_on_level.create_prop = h5priv_create_hdf5_property ( + strcpy (t->dsinfo_num_elems_on_leaf_level.name, "NumElemsOnLeafLevel"); + t->dsinfo_num_elems_on_leaf_level.rank = 1; + t->dsinfo_num_elems_on_leaf_level.dims[0] = 0; + t->dsinfo_num_elems_on_leaf_level.max_dims[0] = H5S_UNLIMITED; + t->dsinfo_num_elems_on_leaf_level.chunk_dims[0] = 4096; + t->dsinfo_num_elems_on_leaf_level.type_id = t->dtypes.h5_glb_idx_t; + TRY( t->dsinfo_num_elems_on_leaf_level.create_prop = h5priv_create_hdf5_property ( f, H5P_DATASET_CREATE) ); TRY( h5priv_set_hdf5_chunk_property ( f, - t->dsinfo_num_elems_on_level.create_prop, - t->dsinfo_num_elems_on_level.rank, - t->dsinfo_num_elems_on_level.chunk_dims) ); - t->dsinfo_num_elems_on_level.access_prop = H5P_DEFAULT; + t->dsinfo_num_elems_on_leaf_level.create_prop, + t->dsinfo_num_elems_on_leaf_level.rank, + t->dsinfo_num_elems_on_leaf_level.chunk_dims) ); + t->dsinfo_num_elems_on_leaf_level.access_prop = H5P_DEFAULT; return H5_SUCCESS; } @@ -499,7 +499,7 @@ release_elems ( TRY( h5_free (f, t->glb_elems.data) ); TRY( h5_free (f, t->loc_elems.data) ); TRY( h5_free (f, t->num_elems) ); - TRY( h5_free (f, t->num_elems_on_level) ); + TRY( h5_free (f, t->num_elems_on_leaf_level) ); TRY( h5_free (f, t->map_elem_g2l.items) ); return H5_SUCCESS; diff --git a/src/h5core/h5t_readwrite.c b/src/h5core/h5t_readwrite.c index 70bdcbc..9d8874b 100644 --- a/src/h5core/h5t_readwrite.c +++ b/src/h5core/h5t_readwrite.c @@ -73,10 +73,10 @@ write_elems ( TRY( h5priv_write_dataset_by_name ( f, t->mesh_gid, - &t->dsinfo_num_elems_on_level, + &t->dsinfo_num_elems_on_leaf_level, open_space_all, open_space_all, - t->num_elems_on_level) ); + t->num_elems_on_leaf_level) ); return H5_SUCCESS; } @@ -192,8 +192,8 @@ read_num_elems ( return h5_error_internal (f, __FILE__, __func__, __LINE__); } size_t size = t->num_levels * sizeof (t->num_elems[0]); - TRY( t->num_elems = h5_alloc (f, NULL, size) ); - TRY( t->num_elems_on_level = h5_alloc (f, NULL, size) ); + TRY( t->num_elems = h5_calloc (f, 1, size) ); + TRY( t->num_elems_on_leaf_level = h5_calloc (f, 1, size) ); TRY( h5priv_read_dataset_by_name ( f, t->mesh_gid, @@ -205,10 +205,10 @@ read_num_elems ( TRY( h5priv_read_dataset_by_name ( f, t->mesh_gid, - &t->dsinfo_num_elems_on_level, + &t->dsinfo_num_elems_on_leaf_level, open_space_all, open_space_all, - t->num_elems_on_level) ); + t->num_elems_on_leaf_level) ); return H5_SUCCESS; } diff --git a/src/h5core/h5t_readwrite_tetm.c b/src/h5core/h5t_readwrite_tetm.c index 9f7817d..7321b3d 100644 --- a/src/h5core/h5t_readwrite_tetm.c +++ b/src/h5core/h5t_readwrite_tetm.c @@ -36,6 +36,14 @@ init_loc_elems_struct ( } loc_elem->level_idx = level_idx; + // refinement level + loc_elem->refinement_level = 0; + h5_loc_tet_t* elem = loc_elem; + while (elem->parent_idx > 0) { + elem = t->loc_elems.tets + elem->parent_idx; + loc_elem->refinement_level++; + } + // vertex indices TRY( h5t_map_global_vertex_indices2local ( f, @@ -49,17 +57,6 @@ init_loc_elems_struct ( glb_elem->neighbor_indices, num_facets, loc_elem->neighbor_indices) ); -#if 0 - // done in function below - // on boundary? - int i; - for (i=0; i < num_facets; i++) { - if (loc_elem->neighbor_indices[i] == -1) { - loc_elem->flags |= H5T_BOUNDARY_ELEM_FLAG; - break; - } - } -#endif } return H5_SUCCESS; } diff --git a/src/h5core/h5t_readwrite_trim.c b/src/h5core/h5t_readwrite_trim.c index 20b6699..16cbe8c 100644 --- a/src/h5core/h5t_readwrite_trim.c +++ b/src/h5core/h5t_readwrite_trim.c @@ -36,6 +36,14 @@ init_loc_elems_struct ( } loc_elem->level_idx = level_idx; + // refinement level + loc_elem->refinement_level = 0; + h5_loc_triangle_t* elem = loc_elem; + while (elem->parent_idx > 0) { + elem = t->loc_elems.tris + elem->parent_idx; + loc_elem->refinement_level++; + } + // vertex indices TRY( h5t_map_global_vertex_indices2local ( f, @@ -49,16 +57,7 @@ init_loc_elems_struct ( glb_elem->neighbor_indices, num_facets, loc_elem->neighbor_indices) ); -#if 0 - // on boundary? - int i; - for (i=0; i < num_facets; i++) { - if (loc_elem->neighbor_indices[i] == -1) { - loc_elem->flags |= H5T_BOUNDARY_ELEM_FLAG; - break; - } - } -#endif + } return H5_SUCCESS; } diff --git a/src/h5core/h5t_retrieve.c b/src/h5core/h5t_retrieve.c index 80e301e..4b6aec9 100644 --- a/src/h5core/h5t_retrieve.c +++ b/src/h5core/h5t_retrieve.c @@ -220,7 +220,7 @@ h5t_init_boundary_face_iterator ( H5_CORE_API_ENTER; h5_err_t h5err = H5_SUCCESS; h5t_leaf_iterator_t* it; - it->face_idx = 999; // just a high enough number + it->face_idx = 999; // something > max number of faces it->elem_idx = -1; it->codim = codim; it->leaf_level = f->t->cur_level; diff --git a/src/h5core/h5t_store.c b/src/h5core/h5t_store.c index 9325a84..06c342c 100644 --- a/src/h5core/h5t_store.c +++ b/src/h5core/h5t_store.c @@ -139,7 +139,7 @@ h5t_add_level ( t->num_loaded_levels = t->num_levels; t->dsinfo_num_vertices.dims[0] = t->num_levels; t->dsinfo_num_elems.dims[0] = t->num_levels; - t->dsinfo_num_elems_on_level.dims[0] = t->num_levels; + t->dsinfo_num_elems_on_leaf_level.dims[0] = t->num_levels; ssize_t num_bytes = t->num_levels*sizeof (h5_size_t); TRY( t->num_vertices = h5_alloc (f, t->num_vertices, num_bytes) ); @@ -147,9 +147,9 @@ h5t_add_level ( TRY( t->num_elems = h5_alloc (f, t->num_elems, num_bytes) ); t->num_elems[t->cur_level] = -1; - TRY( t->num_elems_on_level = h5_alloc ( - f, t->num_elems_on_level, num_bytes) ); - t->num_elems_on_level[t->cur_level] = -1; + TRY( t->num_elems_on_leaf_level = h5_alloc ( + f, t->num_elems_on_leaf_level, num_bytes) ); + t->num_elems_on_leaf_level[t->cur_level] = -1; if (t->cur_level == 0) { /* nothing stored yet */ @@ -238,8 +238,8 @@ h5t_begin_store_elems ( t->num_elems[t->cur_level] = new; t->dsinfo_elems.dims[0] = new; - t->num_elems_on_level[t->cur_level] = t->cur_level > 0 ? - num + t->num_elems_on_level[t->cur_level-1] : num; + t->num_elems_on_leaf_level[t->cur_level] = t->cur_level > 0 ? + num + t->num_elems_on_leaf_level[t->cur_level-1] : num; /* We allocate a hash table for a minimum of 2^21 edges to avoid resizing. diff --git a/src/h5core/h5t_store_tetm.c b/src/h5core/h5t_store_tetm.c index f3db487..ccd08f1 100644 --- a/src/h5core/h5t_store_tetm.c +++ b/src/h5core/h5t_store_tetm.c @@ -217,7 +217,7 @@ refine_tet ( // t->glb_elems.tets[elem_idx].child_idx = elem_idx_of_first_child; t->loc_elems.tets[elem_idx].child_idx = elem_idx_of_first_child; - t->num_elems_on_level[t->cur_level]--; + t->num_elems_on_leaf_level[t->cur_level]--; return elem_idx_of_first_child; } diff --git a/src/h5core/h5t_store_trim.c b/src/h5core/h5t_store_trim.c index 3e3c9b4..7a5d732 100644 --- a/src/h5core/h5t_store_trim.c +++ b/src/h5core/h5t_store_trim.c @@ -181,7 +181,7 @@ refine_triangle ( t->glb_elems.tris[elem_idx].child_idx = elem_idx_of_first_child; t->loc_elems.tris[elem_idx].child_idx = elem_idx_of_first_child; - t->num_elems_on_level[t->cur_level]--; + t->num_elems_on_leaf_level[t->cur_level]--; return elem_idx_of_first_child; } diff --git a/src/h5core/h5t_types_private.h b/src/h5core/h5t_types_private.h index d26edbe..fc5eba2 100644 --- a/src/h5core/h5t_types_private.h +++ b/src/h5core/h5t_types_private.h @@ -20,11 +20,11 @@ typedef struct h5_glb_triangle { } h5_glb_triangle_t; typedef struct h5_loc_triangle { - h5_glb_idx_t glb_idx; - h5_loc_idx_t parent_idx; - h5_loc_idx_t child_idx; - h5t_lvl_idx_t level_idx; - h5t_lvl_idx_t refinement_level; + h5_glb_idx_t glb_idx; // global index of element + h5_loc_idx_t parent_idx; // index of parent element + h5_loc_idx_t child_idx; // index of (first) children + h5t_lvl_idx_t level_idx; // leaf level on which this element has been created + h5t_lvl_idx_t refinement_level; // refinements of father in macro-grid h5t_elem_flags_t flags; h5_loc_idx_t vertex_indices[3]; h5_loc_idx_t neighbor_indices[3]; @@ -158,13 +158,13 @@ typedef struct h5t_fdata { h5_loc_elems_t loc_elems; h5_size_t *num_elems; - h5_size_t *num_elems_on_level; + h5_size_t *num_elems_on_leaf_level; h5_idxmap_t map_elem_g2l; /* map global id to local id */ h5_loc_idx_t last_stored_eid; h5_dsinfo_t dsinfo_elems; h5_dsinfo_t dsinfo_num_elems; - h5_dsinfo_t dsinfo_num_elems_on_level; + h5_dsinfo_t dsinfo_num_elems_on_leaf_level; h5_idlist_t marked_entities;