diff --git a/.gitattributes b/.gitattributes index 2daf28c..34dd871 100644 --- a/.gitattributes +++ b/.gitattributes @@ -445,6 +445,7 @@ src/h5core/h5t_openclose.c -text src/h5core/h5t_openclose_private.h -text src/h5core/h5t_readwrite.c -text src/h5core/h5t_readwrite_private.h -text +src/h5core/h5t_readwrite_tetm.c -text src/h5core/h5t_readwrite_trim.c -text src/h5core/h5t_ref_elements.c -text src/h5core/h5t_retrieve.c -text diff --git a/src/h5core/Makefile.am b/src/h5core/Makefile.am index 54d8a2e..f8b65de 100644 --- a/src/h5core/Makefile.am +++ b/src/h5core/Makefile.am @@ -99,6 +99,8 @@ libH5hut_a_SOURCES = \ h5t_map.c \ h5t_openclose.c \ h5t_readwrite.c \ + h5t_readwrite_trim.c \ + h5t_readwrite_tetm.c \ h5t_ref_elements.c \ h5t_retrieve.c \ h5t_retrieve_tetm.c \ diff --git a/src/h5core/h5t_access_tetm.c b/src/h5core/h5t_access_tetm.c index 4c4b33b..0546182 100644 --- a/src/h5core/h5t_access_tetm.c +++ b/src/h5core/h5t_access_tetm.c @@ -69,7 +69,7 @@ get_loc_elem_level_idx ( h5_file_t* const f, const h5_id_t elem_idx ) { - return f->t->loc_elems.tets[elem_idx].level_idx; + return f->t->loc_elems.tets[elem_idx].idx; } static h5_id_t @@ -78,7 +78,7 @@ set_loc_elem_level_idx ( const h5_id_t elem_idx, const h5_id_t level_idx ) { - f->t->loc_elems.tets[elem_idx].level_idx = level_idx; + f->t->loc_elems.tets[elem_idx].idx = level_idx; return level_idx; } @@ -207,7 +207,7 @@ get_glb_elem_level_idx ( h5_file_t* const f, const h5_id_t elem_idx ) { - return f->t->glb_elems.tets[elem_idx].level_idx; + return f->t->loc_elems.tets[elem_idx].idx; } static h5_id_t @@ -216,7 +216,7 @@ set_glb_elem_level_idx ( const h5_id_t elem_idx, const h5_id_t level_idx ) { - f->t->glb_elems.tets[elem_idx].level_idx = level_idx; + f->t->loc_elems.tets[elem_idx].idx = level_idx; return level_idx; } diff --git a/src/h5core/h5t_access_trim.c b/src/h5core/h5t_access_trim.c index 4fcb5e5..cee013f 100644 --- a/src/h5core/h5t_access_trim.c +++ b/src/h5core/h5t_access_trim.c @@ -69,7 +69,7 @@ get_loc_elem_level_idx ( h5_file_t* const f, const h5_id_t elem_idx ) { - return f->t->loc_elems.tris[elem_idx].level_idx; + return f->t->loc_elems.tris[elem_idx].idx; } static h5_id_t @@ -78,7 +78,7 @@ set_loc_elem_level_idx ( const h5_id_t elem_idx, const h5_id_t level_idx ) { - f->t->loc_elems.tris[elem_idx].level_idx = level_idx; + f->t->loc_elems.tris[elem_idx].idx = level_idx; return level_idx; } @@ -207,7 +207,7 @@ get_glb_elem_level_idx ( h5_file_t* const f, const h5_id_t elem_idx ) { - return f->t->glb_elems.tris[elem_idx].level_idx; + return f->t->loc_elems.tris[elem_idx].idx; } static h5_id_t @@ -216,7 +216,7 @@ set_glb_elem_level_idx ( const h5_id_t elem_idx, const h5_id_t level_idx ) { - f->t->glb_elems.tris[elem_idx].level_idx = level_idx; + f->t->loc_elems.tris[elem_idx].idx = level_idx; return level_idx; } diff --git a/src/h5core/h5t_readwrite_tetm.c b/src/h5core/h5t_readwrite_tetm.c new file mode 100644 index 0000000..4e06e10 --- /dev/null +++ b/src/h5core/h5t_readwrite_tetm.c @@ -0,0 +1,75 @@ +#include "h5core/h5_core.h" +#include "h5_core_private.h" + +/* + setup structure "elems_ldta" with local indices for each element: + - translate the global vertex id's of each element to their + local id's + - translate the global parent id of each element to the + corresponding local id. +*/ +static h5_err_t +init_loc_elems_struct ( + h5_file_t* const f + ) { + h5t_fdata_t* const t = f->t; + h5_id_t idx = 0; + const h5_id_t num_elems = t->num_elems[t->num_levels-1]; + h5_id_t level_id = 0; + int num_vertices = t->ref_elem->num_faces[0]; + h5_triangle_t* loc_elems = t->loc_elems.tris; + h5_triangle_t* glb_elems = t->glb_elems.tris; + + for (idx = 0; idx < num_elems; idx++) { + + // local idx + // local parent index + // level idx + + // vertex indices + // neighbor indices + } + return H5_SUCCESS; +} + +#if 0 +static h5_err_t +init_struct_elems_ldta ( + h5_file_t* const f + ) { + h5t_fdata_t* t = f->t; + h5_id_t idx = 0; + h5_id_t num_elems = t->num_elems[t->num_levels-1]; + h5_id_t level_id = 0; + + for (local_eid=0; + local_eid < num_elems; + local_eid++, elp+=h5tpriv_sizeof_elem[t->mesh_type], el_ldta++) { + el = (h5_elem_t*)elp; + TRY( h5t_map_global_vertex_indices2local ( + f, + el->global_vertex_indices, + num_vertices, + el_ldta->local_vertex_indices) ); + if (el->global_parent_idx >= 0) + TRY( el_ldta->local_parent_idx = + h5t_map_global_elem_idx2local ( + f, el->global_parent_idx) ); + + if (el->global_child_idx >= 0) + TRY( el_ldta->local_child_idx = + h5t_map_global_elem_idx2local ( + f, el->global_child_idx) ); + + if (local_eid >= t->num_elems[level_id]) { + level_id++; + } + el_ldta->level_id = level_id; + } + return H5_SUCCESS; +} +#endif + +struct h5t_read_methods h5tpriv_read_tetm_methods = { + init_loc_elems_struct +}; diff --git a/src/h5core/h5t_readwrite_trim.c b/src/h5core/h5t_readwrite_trim.c index aeab75c..455bb23 100644 --- a/src/h5core/h5t_readwrite_trim.c +++ b/src/h5core/h5t_readwrite_trim.c @@ -32,6 +32,7 @@ init_loc_elems_struct ( return H5_SUCCESS; } +#if 0 static h5_err_t init_struct_elems_ldta ( h5_file_t* const f @@ -67,8 +68,8 @@ init_struct_elems_ldta ( } return H5_SUCCESS; } +#endif - -struct h5t_read_methods { - init_loc_elems_struct; -} h5t_read_trim_methods; +struct h5t_read_methods h5tpriv_read_trim_methods = { + init_loc_elems_struct +}; diff --git a/src/h5core/h5t_retrieve.c b/src/h5core/h5t_retrieve.c index 9efc176..3a89712 100644 --- a/src/h5core/h5t_retrieve.c +++ b/src/h5core/h5t_retrieve.c @@ -33,10 +33,10 @@ h5tpriv_skip_to_next_elem_on_level ( h5_err_t h5tpriv_elem_is_on_cur_level ( h5_file_t* const f, - h5_generic_elem_t *el + h5_generic_elem_t *el // ptr to local element ) { h5t_fdata_t* t = f->t; - if ( (el->level_idx > t->cur_level) || + if ( (el->idx > t->cur_level) || (el->child_idx >= 0 && el->child_idx < num_elems_on_cur_level) ) { return H5_NOK; } diff --git a/src/h5core/h5t_retrieve_tetm.c b/src/h5core/h5t_retrieve_tetm.c index e8f0df0..86356d2 100644 --- a/src/h5core/h5t_retrieve_tetm.c +++ b/src/h5core/h5t_retrieve_tetm.c @@ -31,7 +31,7 @@ begin_iterate_entities ( } } -struct h5t_retrieve_methods h5tpriv_trim_retrieve_methods = { +struct h5t_retrieve_methods h5tpriv_tetm_retrieve_methods = { begin_iterate_entities, }; diff --git a/src/h5core/h5t_types_private.h b/src/h5core/h5t_types_private.h index 57e1e94..13cbf21 100644 --- a/src/h5core/h5t_types_private.h +++ b/src/h5core/h5t_types_private.h @@ -14,7 +14,6 @@ typedef struct h5_triangle { h5_id_t idx; h5_id_t parent_idx; h5_id_t child_idx; - h5_id_t level_idx; h5_3id_t vertex_indices; h5_3id_t neighbor_indices; } h5_triangle_t; @@ -23,7 +22,6 @@ typedef struct h5_tetrahedron { h5_id_t idx; h5_id_t parent_idx; h5_id_t child_idx; - h5_id_t level_idx; h5_4id_t vertex_indices; h5_4id_t neighbor_indices; } h5_tetrahedron_t; @@ -33,7 +31,6 @@ typedef struct h5_generic_elem { h5_id_t idx; h5_id_t parent_idx; h5_id_t child_idx; - h5_id_t level_idx; h5_id_t indices[1]; } h5_generic_elem_t;