diff --git a/src/C/Makefile.am b/src/C/Makefile.am index 3f9660d..af6a2ee 100644 --- a/src/C/Makefile.am +++ b/src/C/Makefile.am @@ -1,5 +1,5 @@ -# src/C level Makefile.am +if ENABLE_C # Header files that I wish to install in $(prefix)/include include_HEADERS = \ ../include/H5.h \ @@ -22,6 +22,7 @@ include_HEADERS = \ # Listing of all possible headers that I may include EXTRA_HEADERS = +endif clean-local: $(RM) *~ diff --git a/src/Fortran/Makefile.am b/src/Fortran/Makefile.am index a18059d..2547af3 100644 --- a/src/Fortran/Makefile.am +++ b/src/Fortran/Makefile.am @@ -1,33 +1,28 @@ -# src/Fortran level Makefile.am -OBJEXT=o +if ENABLE_FORTRAN +AM_CPPFLAGS += -I$(top_srcdir)/src/include -AM_CPPFLAGS = -I../include @AM_CPPFLAGS@ - -F90_FILES = H5F.f90 \ - H5_constF.f90 \ - H5_attribsF.f90 \ - H5PartF.f90 \ - H5Part_ioF.f90 \ - H5BlockF.f90 \ - H5Block_attribsF.f90 \ - H5Block_ioF.f90 +F90_FILES = \ + H5F.f90 \ + H5_constF.f90 \ + H5_attribsF.f90 \ + H5PartF.f90 \ + H5Part_ioF.f90 \ + H5BlockF.f90 \ + H5Block_attribsF.f90 \ + H5Block_ioF.f90 EXTRA_HEADERS = -# Extra files that I wish to include in the dist tar ball. -EXTRA_DIST = TestUnderscoreC.c \ - TestUnderscore.f \ - $(F90_FILES) +EXTRA_DIST = \ + TestUnderscoreC.c \ + TestUnderscore.f \ + $(F90_FILES) -# Files that I don't want to include in the dist tar ball -nodist_include_HEADERS = ../include/H5hutF.h +nodist_include_HEADERS = \ + $(top_srcdir)/src/include/H5hutF.h -# What to build... Will be determined by configure script. -lib_LTLIBRARIES = @LIB_FORTRAN@ - -# Listing of all possible targets that I may build. -EXTRA_LTLIBRARIES = libH5hutF.la +lib_LTLIBRARIES = libH5hutF.la include_HEADERS = \ ../include/H5hutF.h @@ -41,17 +36,19 @@ libH5hutF_la_SOURCES = \ H5Block_attribs.c \ H5Block_io.c -libH5hutF_la_DEPENDENCIES = +libH5hutF_la_DEPENDENCIES = \ + $(top_srcdir)/src/include/H5hutF.h libH5hutF_la_LDFLAGS = -version-info 2:0:0 -rpath '$(libdir)' -../include/H5hutF.h: $(F90_FILES) +$(top_srcdir)/src/include/H5hutF.h: $(F90_FILES) awk '/INTEGER\*8 :: /{print "\t" $$0}' $^ >$@ awk '/PARAMETER /{print "\t" $$0}' $^ >> $@ awk '/INTEGER\*8 FUNCTION/{print "\t" $$1 " " $$3}' $^ >>$@ all-local: ../include/H5hutF.h $(INSTALL) -m644 .libs/libH5hutF.a ../lib +endif clean: clean-am diff --git a/src/Makefile.am b/src/Makefile.am index 043e75d..5fbe8cb 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,4 +1,2 @@ -# test level Makefile.am - -SUBDIRS = h5core @BINDINGS@ +SUBDIRS = h5core C Fortran include diff --git a/src/h5core/Makefile.am b/src/h5core/Makefile.am index cf1bd34..65678e4 100644 --- a/src/h5core/Makefile.am +++ b/src/h5core/Makefile.am @@ -1,6 +1,3 @@ -# src level Makefile.am - -OBJEXT=o AM_CPPFLAGS = -I$(top_srcdir)/src/include @AM_CPPFLAGS@ @@ -103,13 +100,13 @@ libH5hut_la_DEPENDENCIES = $(EXTRA_HEADERS) libH5hut_la_LDFLAGS = -version-info 2:0:0 all-local: - $(INSTALL) -m755 -d ../lib - $(INSTALL) -m644 .libs/libH5hut.a ../lib + $(INSTALL) -m0755 -d $(top_builddir)/src/lib + $(INSTALL) -m644 .libs/libH5hut.a $(top_builddir)/src/lib install-exec-local: @$(INSTALL) -d $(DESTDIR)$(includedir)/h5core - @$(INSTALL) -m644 ../include/h5core/*.h $(DESTDIR)$(includedir)/h5core/ + @$(INSTALL) -m644 $(top_srcdir)/src/include/h5core/*.h $(DESTDIR)$(includedir)/h5core/ clean-local: - $(RM) -f ../lib/libH5hut.* + $(RM) -f $(top_srcdir)/src/lib/libH5hut.* $(RM) -f *~ diff --git a/src/h5core/h5t_access_tetm.c b/src/h5core/h5t_access_tetm.c index 771470b..3cf41f7 100644 --- a/src/h5core/h5t_access_tetm.c +++ b/src/h5core/h5t_access_tetm.c @@ -205,7 +205,8 @@ copy_glb_elems ( return (h5_glb_elem_t*)dst; } -int compare_glb_elems(const void *p_a, const void *p_b) { +static int +compare_glb_elems(const void *p_a, const void *p_b) { return ((h5_glb_tet_t*) p_a)->idx - ((h5_glb_tet_t*) p_b)->idx; } diff --git a/src/h5core/h5t_access_trim.c b/src/h5core/h5t_access_trim.c index b452969..78638b9 100644 --- a/src/h5core/h5t_access_trim.c +++ b/src/h5core/h5t_access_trim.c @@ -203,7 +203,8 @@ copy_glb_elems ( return (h5_glb_elem_t*)dst; } -int compare_glb_elems(const void *p_a, const void *p_b) { +static int +compare_glb_elems(const void *p_a, const void *p_b) { return ((h5_glb_tri_t*) p_a)->idx - ((h5_glb_tri_t*) p_b)->idx; } diff --git a/src/h5core/h5t_adjacencies_tetm.c b/src/h5core/h5t_adjacencies_tetm.c index 3675cef..d1f23ee 100644 --- a/src/h5core/h5t_adjacencies_tetm.c +++ b/src/h5core/h5t_adjacencies_tetm.c @@ -292,7 +292,7 @@ get_edges_uadj_to_vertex ( "m=%p, entity_id=%llu, list=%p", m, (long long unsigned)entity_id, list); h5_loc_idx_t vertex_idx; - TRY( h5tpriv_get_vertex_index_of_vertex (m, entity_id, &vertex_idx) ); + TRY( h5tpriv_get_loc_vtx_idx_of_vtx (m, entity_id, &vertex_idx) ); h5_loc_idlist_t* tv = m->adjacencies.tv.v[vertex_idx]; TRY( h5priv_alloc_loc_idlist (list, 8) ); @@ -335,7 +335,7 @@ get_triangles_uadj_to_vertex ( Note: this list may include tetrahedra which are not in the (current) leaf grid */ h5_loc_idx_t vertex_idx; - TRY( h5tpriv_get_vertex_index_of_vertex (m, entity_id, &vertex_idx) ); + TRY( h5tpriv_get_loc_vtx_idx_of_vtx (m, entity_id, &vertex_idx) ); h5_loc_idlist_t* tv = m->adjacencies.tv.v[vertex_idx]; // build list of upward adjacent triangles @@ -375,7 +375,7 @@ get_tets_uadj_to_vertex ( "m=%p, entity_id=%llu, list=%p", m, (long long unsigned)entity_id, list); h5_loc_idx_t vertex_idx; - TRY( h5tpriv_get_vertex_index_of_vertex (m, entity_id, &vertex_idx) ); + TRY( h5tpriv_get_loc_vtx_idx_of_vtx (m, entity_id, &vertex_idx) ); h5_loc_idlist_t* tv = m->adjacencies.tv.v[vertex_idx]; TRY( h5priv_alloc_loc_idlist (list, 8) ); diff --git a/src/h5core/h5t_adjacencies_trim.c b/src/h5core/h5t_adjacencies_trim.c index 8c3df0a..a4e4e52 100644 --- a/src/h5core/h5t_adjacencies_trim.c +++ b/src/h5core/h5t_adjacencies_trim.c @@ -168,7 +168,7 @@ get_edges_uadj_to_vertex ( "m=%p, entity_id=%llu, list=%p", m, (long long unsigned)entity_id, list); h5_loc_idx_t vertex_idx; - TRY( h5tpriv_get_vertex_index_of_vertex (m, entity_id, &vertex_idx) ); + TRY( h5tpriv_get_loc_vtx_idx_of_vtx (m, entity_id, &vertex_idx) ); h5_loc_idlist_t* tv = m->adjacencies.tv.v[vertex_idx]; TRY( h5priv_alloc_loc_idlist (list, 8) ); @@ -204,7 +204,7 @@ get_triangles_uadj_to_vertex ( "m=%p, entity_id=%llu, list=%p", m, (long long unsigned)entity_id, list); h5_loc_idx_t vertex_idx; - TRY( h5tpriv_get_vertex_index_of_vertex (m, entity_id, &vertex_idx) ); + TRY( h5tpriv_get_loc_vtx_idx_of_vtx (m, entity_id, &vertex_idx) ); h5_loc_idlist_t* tv = m->adjacencies.tv.v[vertex_idx]; TRY ( h5priv_alloc_loc_idlist (list, 8) ); diff --git a/src/h5core/h5t_core.c b/src/h5core/h5t_core.c index afe6e36..661bc02 100644 --- a/src/h5core/h5t_core.c +++ b/src/h5core/h5t_core.c @@ -32,7 +32,7 @@ h5tpriv_enter_tv2 ( m, (long long)face_idx, (long long)elem_idx, idlist); h5_loc_idx_t vertex_idx; - TRY (h5t_get_loc_vertex_index_of_vertex2 ( + TRY (h5tpriv_get_loc_vtx_idx_of_vtx2 ( m, face_idx, elem_idx, &vertex_idx)); diff --git a/src/h5core/h5t_map.c b/src/h5core/h5t_map.c index 14f41c3..d19baae 100644 --- a/src/h5core/h5t_map.c +++ b/src/h5core/h5t_map.c @@ -303,7 +303,7 @@ h5t_get_glb_vertex_indices_of_entity ( } h5_err_t -h5tpriv_get_vertex_index_of_vertex ( +h5tpriv_get_loc_vtx_idx_of_vtx ( h5t_mesh_t* const m, const h5_loc_id_t entity_id, h5_loc_idx_t* vertex_index @@ -315,12 +315,12 @@ h5tpriv_get_vertex_index_of_vertex ( (long long unsigned)*vertex_index); h5_loc_idx_t face_idx = h5tpriv_get_face_idx (entity_id); h5_loc_idx_t elem_idx = h5tpriv_get_elem_idx (entity_id); - H5_CORE_API_RETURN (h5tpriv_get_vertex_index_of_vertex2 ( + H5_CORE_API_RETURN (h5tpriv_get_loc_vtx_idx_of_vtx2 ( m, face_idx, elem_idx, vertex_index)); } h5_err_t -h5tpriv_get_vertex_index_of_vertex2 ( +h5tpriv_get_loc_vtx_idx_of_vtx2 ( h5t_mesh_t* const m, const h5_loc_idx_t face_idx, // vertex index according ref. element const h5_loc_idx_t elem_idx, // local element index diff --git a/src/h5core/h5t_map_private.h b/src/h5core/h5t_map_private.h index c937e4b..dcd40b3 100644 --- a/src/h5core/h5t_map_private.h +++ b/src/h5core/h5t_map_private.h @@ -69,14 +69,14 @@ h5priv_find_in_idlist (glb_id) h5priv_search_in_xlist (glb_id) h5_err_t -h5tpriv_get_vertex_index_of_vertex ( +h5tpriv_get_loc_vtx_idx_of_vtx ( h5t_mesh_t* const m, const h5_loc_id_t entity_id, h5_loc_idx_t* vertex_index ); h5_err_t -h5tpriv_get_vertex_index_of_vertex2 ( +h5tpriv_get_loc_vtx_idx_of_vtx2 ( h5t_mesh_t* const m, const h5_loc_idx_t face_idx, const h5_loc_idx_t elem_idx, diff --git a/src/h5core/h5t_model.c b/src/h5core/h5t_model.c index c0cb97a..1ea85c2 100644 --- a/src/h5core/h5t_model.c +++ b/src/h5core/h5t_model.c @@ -191,7 +191,8 @@ h5tpriv_init_mesh ( "__num_leaf_levels__", H5T_NATIVE_INT16, &m->num_leaf_levels)); - m->leaf_level = m->num_leaf_levels-1; //seems not to be set otherwise but for reading vtx it should be... + //seems not to be set otherwise but for reading vtx it should be... + m->leaf_level = m->num_leaf_levels-1; TRY (m->num_glb_elems = h5_calloc (m->num_leaf_levels, sizeof(*m->num_glb_elems))); TRY (m->num_glb_leaf_elems = h5_calloc (m->num_leaf_levels, sizeof(*m->num_glb_leaf_elems))); TRY (m->num_glb_vertices = h5_calloc (m->num_leaf_levels, sizeof (*m->num_glb_vertices))); diff --git a/src/h5core/h5t_model_tetm.c b/src/h5core/h5t_model_tetm.c index 2bf4f2c..fbb735b 100644 --- a/src/h5core/h5t_model_tetm.c +++ b/src/h5core/h5t_model_tetm.c @@ -137,6 +137,7 @@ h5_err_t h5t_add_tetrahedral_mesh ( const h5_file_t fh, const char* name, + const h5_weight_t num_weights, h5t_mesh_t** mesh ) { h5_file_p f = (h5_file_p)fh; @@ -177,11 +178,13 @@ h5t_add_tetrahedral_mesh ( m->leaf_level = 0; m->num_leaf_levels = 0; + m->num_weights = num_weights; TRY (h5tpriv_add_level (m)); m->mesh_changed = 1; H5_CORE_API_RETURN (H5_SUCCESS); } + /*! Add new mesh @@ -191,6 +194,7 @@ h5_err_t h5t_add_chunked_tetrahedral_mesh ( const h5_file_t fh, const char* name, + const h5_weight_t num_weights, h5t_mesh_t** mesh ) { h5_file_p f = (h5_file_p)fh; diff --git a/src/h5core/h5t_model_trim.c b/src/h5core/h5t_model_trim.c index 2de40ad..c9295aa 100644 --- a/src/h5core/h5t_model_trim.c +++ b/src/h5core/h5t_model_trim.c @@ -153,6 +153,7 @@ h5_err_t h5t_add_triangle_mesh ( const h5_file_t fh, const char* name, + const h5_weight_t num_weights, h5t_mesh_t** mesh ) { h5_file_p f = (h5_file_p)fh; @@ -207,6 +208,7 @@ h5_err_t h5t_add_chunked_triangle_mesh( const h5_file_t fh, const char* name, + const h5_weight_t num_weights, h5t_mesh_t** mesh ) { h5_file_p f = (h5_file_p)fh; diff --git a/src/h5core/h5t_retrieve.c b/src/h5core/h5t_retrieve.c index c525c17..13e3f4d 100644 --- a/src/h5core/h5t_retrieve.c +++ b/src/h5core/h5t_retrieve.c @@ -319,7 +319,7 @@ h5t_get_vertex_coords_by_id ( (long long unsigned)vertex_id, P); h5_loc_idx_t vertex_index; - TRY (h5tpriv_get_vertex_index_of_vertex (m, vertex_id, &vertex_index)); + TRY (h5tpriv_get_loc_vtx_idx_of_vtx (m, vertex_id, &vertex_index)); TRY (h5t_get_vertex_coords_by_index (m, vertex_index, P)); H5_CORE_API_RETURN (H5_SUCCESS); } @@ -336,7 +336,7 @@ h5t_get_vertex_by_id ( m, (long long)vertex_id, glb_idx, P); // get loc index of vertex h5_loc_idx_t idx; - TRY (h5t_get_loc_vertex_index_of_vertex (m, vertex_id, &idx)); + TRY (h5tpriv_get_loc_vtx_idx_of_vtx (m, vertex_id, &idx)); *glb_idx = m->vertices[idx].idx; *P = m->vertices[idx].P; H5_CORE_API_RETURN (H5_SUCCESS); diff --git a/src/h5core/h5t_store.c b/src/h5core/h5t_store.c index aeeb983..90c9c2a 100644 --- a/src/h5core/h5t_store.c +++ b/src/h5core/h5t_store.c @@ -497,12 +497,11 @@ h5t_end_store_vertices ( h5_err_t h5t_begin_store_elems ( h5t_mesh_t* const m, - const h5_size_t num, - const h5_weight_t num_weights + const h5_size_t num ) { H5_CORE_API_ENTER (h5_err_t, - "m=%p, num=%llu, num_weights=%d", - m, (long long unsigned)num, num_weights); + "m=%p, num=%llu", + m, (long long unsigned)num); h5_debug ("begin storing %llu elements", (long long)num); size_t cur = m->leaf_level > 0 ? m->num_interior_elems[m->leaf_level-1] : 0; @@ -515,9 +514,8 @@ h5t_begin_store_elems ( m->num_interior_leaf_elems[m->leaf_level] = m->leaf_level > 0 ? num + m->num_interior_leaf_elems[m->leaf_level-1] : num; - m->num_weights = num_weights; if (m->leaf_level == 0) { - TRY (m->weights = h5_calloc(num_weights * num, sizeof (* m->weights) )); + TRY (m->weights = h5_calloc(m->num_weights * num, sizeof (* m->weights) )); if (m->num_weights < 1) { m->weights = NULL; } @@ -541,13 +539,13 @@ h5t_begin_store_elems ( tetrahedron. */ h5_loc_idx_t -h5t_store_elem ( +h5tpriv_add_cell ( h5t_mesh_t* const m, const h5_loc_idx_t parent_idx, const h5_loc_idx_t* vertex_indices, const h5_weight_t* weights ) { - H5_CORE_API_ENTER (h5_loc_idx_t, + H5_PRIV_FUNC_ENTER (h5_loc_idx_t, "m=%p, parent_idx=%lld, vertex_indices=%p, weights=%p", m, (long long)parent_idx, @@ -602,20 +600,19 @@ h5t_store_elem ( } H5_CORE_API_RETURN (elem_idx); } + h5_loc_idx_t -h5t_store_elem2 ( +h5t_add_lvl0_cell ( h5t_mesh_t* const m, - const h5_loc_idx_t parent_idx, const h5_loc_idx_t* vertex_indices, const h5_weight_t* weights ) { H5_CORE_API_ENTER (h5_loc_idx_t, - "m=%p, parent_idx=%lld, vertex_indices=%p, weights=%p", + "m=%p, vertex_indices=%p, weights=%p", m, - (long long)parent_idx, vertex_indices, weights); - h5t_store_elem (m, parent_idx, vertex_indices, weights); + h5tpriv_add_cell (m, -1, vertex_indices, weights); h5_loc_idx_t* loc_vertex_indices = h5tpriv_get_loc_elem_vertex_indices ( m, m->last_stored_eid); int num_vertices = h5tpriv_ref_elem_get_num_vertices (m); @@ -682,7 +679,11 @@ h5t_end_store_elems ( h5t_mesh_t* const m ) { H5_CORE_API_ENTER (h5_err_t, "m=%p", m); - h5_debug ("end storing elements"); + + if (m->leaf_level == 0) { + m->num_glb_leaf_elems[0] = m->num_glb_elems[0]; + } + m->num_interior_elems[m->leaf_level] = m->last_stored_eid+1; m->num_glb_elems[m->leaf_level] = m->last_stored_eid+1; m->num_glb_leaf_elems[m->leaf_level] = m->num_interior_leaf_elems[m->leaf_level]; @@ -1787,7 +1788,8 @@ h5t_refine_marked_elems_chk ( // refine elements for (int i = 0; i < num_midpoints; i++) { - TRY (h5tpriv_refine_elem (m, h5t_map_glb_elem_idx2loc(m,midpoints[i].elem))); // needs to be ordered acc to octants + // needs to be ordered acc to octants + TRY (h5tpriv_refine_elem (m, h5t_map_glb_elem_idx2loc(m,midpoints[i].elem))); } TRY (h5_free (oct_c_list.items)); TRY (h5_free (elem_range)); @@ -2147,7 +2149,9 @@ store_exchanged_elems ( // create list of new glb_vtx - h5_glb_vertex_t* new_vtx = h5_calloc(new_elems_c * 4, sizeof (*new_vtx));// TODO should be by far enough -> could be optimzed + + // TODO should be by far enough -> could be optimzed + h5_glb_vertex_t* new_vtx = h5_calloc(new_elems_c * 4, sizeof (*new_vtx)); int new_vtx_c = 0; diff --git a/src/h5core/h5t_store_private.h b/src/h5core/h5t_store_private.h index 9f17596..fa3aea6 100644 --- a/src/h5core/h5t_store_private.h +++ b/src/h5core/h5t_store_private.h @@ -37,6 +37,11 @@ h5tpriv_alloc_loc_elems ( return m->methods->store->alloc_loc_elems (m, cur, new); } +h5_loc_idx_t +h5tpriv_add_cell ( + h5t_mesh_t* const, const h5_loc_idx_t, const h5_loc_idx_t*, const h5_weight_t*); + + static inline h5_loc_idx_t h5tpriv_refine_elem ( h5t_mesh_t * const m, diff --git a/src/h5core/h5t_store_tetm.c b/src/h5core/h5t_store_tetm.c index 14f269d..acd247a 100644 --- a/src/h5core/h5t_store_tetm.c +++ b/src/h5core/h5t_store_tetm.c @@ -126,7 +126,7 @@ pre_refine_tet ( H5_PRIV_FUNC_ENTER (h5_err_t, "m=%p", m); unsigned int num_interior_elems_to_refine = m->marked_entities->num_items; TRY (h5t_begin_store_vertices (m, num_interior_elems_to_refine*3 + 192)); - TRY (h5t_begin_store_elems (m, num_interior_elems_to_refine*8, m->num_weights)); + TRY (h5t_begin_store_elems (m, num_interior_elems_to_refine*8)); H5_PRIV_FUNC_RETURN (H5_SUCCESS); } @@ -170,61 +170,87 @@ refine_tet ( // add new tets h5_loc_idx_t new_elem[4]; + /* + Add refined cells with pre-sorted vertices! + This is actually importend: sorting refined cells may produce wrong + orientated cells. This can easily be shown with triangle: + + 0 + * + + *4 + 2* + *2 + * + * 5 + 1 + + The parent triangle is (0,1,2) with a counter-clockwise orientation. + Since we must use an epsilon comparision, we run into a problem, if + the comparision returns X(0) < X(1), but X(0) == X(2). This happens, + if + X(0) - X(1) < 2*epsilon + The refined triangle (0,2,4) would be stored as (2,0,4), if we try + to sort the vertices. The orientation of (2,0,4) is clockwise! But + we assume that (0,2,4), (2,1,5) and (4,5,2) have the same orientation + as the parent and (2,4,5) the opposite orientation. + */ + // child 0 new_elem[0] = vertices[0]; // vertex 0 new_elem[1] = vertices[4]; // split point (0,1) new_elem[2] = vertices[5]; // split point (0,2) new_elem[3] = vertices[7]; // split point (0,3) - TRY( elem_idx_of_first_child = h5t_store_elem (m, elem_idx, new_elem, NULL) ); //TODO check use of h5t_store_elem2 + TRY (elem_idx_of_first_child = h5tpriv_add_cell (m, elem_idx, new_elem, NULL)); // child 1 new_elem[0] = vertices[4]; // split point (0,1) new_elem[1] = vertices[1]; // vertex 1 new_elem[2] = vertices[6]; // split point (1,2) new_elem[3] = vertices[8]; // split point (1,3) - TRY( h5t_store_elem (m, elem_idx, new_elem, NULL) ); //TODO check use of h5t_store_elem2 + TRY (h5tpriv_add_cell (m, elem_idx, new_elem, NULL)); // child 2 new_elem[0] = vertices[5]; // split point (0,2) new_elem[1] = vertices[6]; // split point (1,2) new_elem[2] = vertices[2]; // vertex 2 new_elem[3] = vertices[9]; // split point (2,3) - TRY( h5t_store_elem (m, elem_idx, new_elem, NULL) ); //TODO check use of h5t_store_elem2 + TRY (h5tpriv_add_cell (m, elem_idx, new_elem, NULL)); // child 3 new_elem[0] = vertices[7]; // split point (0,3) new_elem[1] = vertices[8]; // split point (1,3) new_elem[2] = vertices[9]; // split point (2,3) new_elem[3] = vertices[3]; // vertex 3 - TRY( h5t_store_elem (m, elem_idx, new_elem, NULL) );//TODO check use of h5t_store_elem2 + TRY (h5tpriv_add_cell (m, elem_idx, new_elem, NULL)); // child 4 new_elem[0] = vertices[4]; // split point (0,1) new_elem[1] = vertices[5]; // split point (0,2) new_elem[2] = vertices[6]; // split point (1,2) new_elem[3] = vertices[8]; // split point (1,3) - TRY( h5t_store_elem (m, elem_idx, new_elem, NULL) );//TODO check use of h5t_store_elem2 + TRY (h5tpriv_add_cell (m, elem_idx, new_elem, NULL)); // child 5 new_elem[0] = vertices[4]; // split point (0,1) new_elem[1] = vertices[5]; // split point (0,2) new_elem[2] = vertices[7]; // split point (0,3) new_elem[3] = vertices[8]; // split point (1,3) - TRY( h5t_store_elem (m, elem_idx, new_elem, NULL) );//TODO check use of h5t_store_elem2 + TRY (h5tpriv_add_cell (m, elem_idx, new_elem, NULL)); // child 6 new_elem[0] = vertices[5]; // split point (0,2) new_elem[1] = vertices[6]; // split point (1,2) new_elem[2] = vertices[8]; // split point (1,3) new_elem[3] = vertices[9]; // split point (2,3) - TRY( h5t_store_elem (m, elem_idx, new_elem, NULL) );//TODO check use of h5t_store_elem2 + TRY (h5tpriv_add_cell (m, elem_idx, new_elem, NULL)); // child 7 new_elem[0] = vertices[5]; // split point (0,2) new_elem[1] = vertices[7]; // split point (0,3) new_elem[2] = vertices[8]; // split point (1,3) new_elem[3] = vertices[9]; // split point (2,3) - TRY( h5t_store_elem (m, elem_idx, new_elem, NULL) );//TODO check use of h5t_store_elem2 + TRY (h5tpriv_add_cell (m, elem_idx, new_elem, NULL)); ((h5_loc_tet_t*)m->loc_elems)[elem_idx].child_idx = elem_idx_of_first_child; m->num_interior_leaf_elems[m->leaf_level]--; diff --git a/src/h5core/h5t_store_trim.c b/src/h5core/h5t_store_trim.c index ba0b4d4..dad879f 100644 --- a/src/h5core/h5t_store_trim.c +++ b/src/h5core/h5t_store_trim.c @@ -108,7 +108,7 @@ pre_refine_triangle ( H5_PRIV_FUNC_ENTER (h5_err_t, "m=%p", m); unsigned int num_interior_elems_to_refine = m->marked_entities->num_items; TRY (h5t_begin_store_vertices (m, num_interior_elems_to_refine*3 + 64)); - TRY (h5t_begin_store_elems (m, num_interior_elems_to_refine*4, m->num_weights)); + TRY (h5t_begin_store_elems (m, num_interior_elems_to_refine*4)); H5_PRIV_FUNC_RETURN (H5_SUCCESS); } @@ -149,22 +149,22 @@ refine_triangle ( new_elem[0] = vertices[0]; // V[0] < V[3] , V[4] new_elem[1] = vertices[3]; new_elem[2] = vertices[4]; - TRY( elem_idx_of_first_child = h5t_store_elem (m, elem_idx, new_elem, NULL) ); + TRY (elem_idx_of_first_child = h5tpriv_add_cell (m, elem_idx, new_elem, NULL)); new_elem[0] = vertices[3]; // V[3] < V[1] , V[5] new_elem[1] = vertices[1]; new_elem[2] = vertices[5]; - TRY( h5t_store_elem (m, elem_idx, new_elem, NULL) ); + TRY (h5tpriv_add_cell (m, elem_idx, new_elem, NULL)); new_elem[0] = vertices[4]; // V[4] < V[5] , V[2] new_elem[1] = vertices[5]; new_elem[2] = vertices[2]; - TRY( h5t_store_elem (m, elem_idx, new_elem, NULL) ); + TRY (h5tpriv_add_cell (m, elem_idx, new_elem, NULL)); new_elem[0] = vertices[3]; // V[3] < V[4] , V[5] new_elem[1] = vertices[5]; new_elem[2] = vertices[4]; // TODO check if that ordering is correct! - TRY( h5t_store_elem (m, elem_idx, new_elem, NULL) ); + TRY (h5tpriv_add_cell (m, elem_idx, new_elem, NULL)); ((h5_loc_tri_t*)m->loc_elems)[elem_idx].child_idx = elem_idx_of_first_child; m->num_interior_leaf_elems[m->leaf_level]--; diff --git a/src/h5core/h5t_tags.c b/src/h5core/h5t_tags.c index 5a50501..20d83f5 100644 --- a/src/h5core/h5t_tags.c +++ b/src/h5core/h5t_tags.c @@ -29,7 +29,7 @@ static h5_err_t read_dataset ( - h5t_mesh_t* const m, + h5t_mesh_t* const m, const h5_file_p f, hid_t dset_id, h5_dsinfo_t* dsinfo, @@ -421,11 +421,13 @@ read_tagset ( TRY (dset_id = hdf5_open_dataset (loc_id, "elems")); TRY (num_interior_elems = hdf5_get_npoints_of_dataset (dset_id)); TRY (elems = h5_calloc (num_interior_elems, sizeof(*elems))); + h5_dsinfo_t dsinfo; memset (&dsinfo, 0, sizeof (dsinfo)); dsinfo.type_id = h5_dta_types.h5t_glb_tag_idx_t; - TRY (h5priv_read_dataset ( - tagset->m->f, + TRY (read_dataset ( + tagset->m, + tagset->m->f, dset_id, &dsinfo, open_space_all, @@ -442,7 +444,7 @@ read_tagset ( TRY (num_entities = hdf5_get_npoints_of_dataset (dset_id)); TRY (entities = h5_calloc (num_entities, sizeof(*entities))); TRY (read_dataset ( - tagset->m, + tagset->m, tagset->m->f, dset_id, &dsinfo, diff --git a/src/include/H5.h b/src/include/H5.h index a5f68c9..4125bdf 100644 --- a/src/include/H5.h +++ b/src/include/H5.h @@ -215,10 +215,6 @@ static inline H5SetThrottle ( H5_API_RETURN (h5_set_throttle(f, factor)); } #endif // PARALLEL_IO -#ifdef __cplusplus -} -#endif - /*! \ingroup h5hut_file diff --git a/src/include/H5Fed.h b/src/include/H5Fed.h index 90ac1b7..d1a9b51 100644 --- a/src/include/H5Fed.h +++ b/src/include/H5Fed.h @@ -109,15 +109,6 @@ H5FedSetMeshChanged ( H5_API_RETURN (h5t_set_mesh_changed (m)); } -static inline h5_err_t -H5FedLinkMeshToStep ( - h5_file_t* const m, - const h5_id_t mesh_id - ) { - H5_API_ENTER (h5_err_t, "m=%p, mesh_id=%lld", m, (long long)mesh_id); - H5_API_RETURN (h5_error_not_implemented ()); -} - #ifdef __cplusplus } #endif diff --git a/src/include/H5Fed_store.h b/src/include/H5Fed_store.h index 534161e..6d7b2ef 100644 --- a/src/include/H5Fed_store.h +++ b/src/include/H5Fed_store.h @@ -28,7 +28,7 @@ H5FedAddTetrahedralMesh ( H5_API_ENTER (h5_err_t, "f=%p, name=%s, mesh=%p", (h5_file_p)f, name, mesh); - H5_API_RETURN (h5t_add_tetrahedral_mesh (f, name, mesh)); + H5_API_RETURN (h5t_add_tetrahedral_mesh (f, name, 0, mesh)); } static inline h5_err_t @@ -40,7 +40,7 @@ H5FedAddChunkedTetrahedralMesh ( H5_API_ENTER (h5_err_t, "f=%p, name=%s, mesh=%p", (h5_file_p)f, name, mesh); - H5_API_RETURN (h5t_add_chunked_tetrahedral_mesh (f, name, mesh)); + H5_API_RETURN (h5t_add_chunked_tetrahedral_mesh (f, name, 0, mesh)); } @@ -53,7 +53,7 @@ H5FedAddTriangleMesh ( H5_API_ENTER (h5_err_t, "f=%p, name=%s, mesh=%p", (h5_file_p)f, name, mesh); - H5_API_RETURN (h5t_add_triangle_mesh (f, name, mesh)); + H5_API_RETURN (h5t_add_triangle_mesh (f, name, 0, mesh)); } static inline h5_err_t @@ -65,8 +65,9 @@ H5FedAddChunkedTriangleMesh ( H5_API_ENTER(h5_err_t, "f=%p, name=%s, mesh=%p", (h5_file_p)f, name, mesh); - H5_API_RETURN (h5t_add_chunked_triangle_mesh (f, name, mesh)); + H5_API_RETURN (h5t_add_chunked_triangle_mesh (f, name, 0, mesh)); } + /*! \ingroup h5fed_c_api @@ -136,13 +137,12 @@ H5FedEndStoreVertices ( static inline h5_err_t H5FedBeginStoreElements ( h5t_mesh_t* const m, - const h5_size_t num, - const h5_weight_t num_weights + const h5_size_t num ) { H5_API_ENTER (h5_err_t, - "m=%p, num=%llu, num_weights=%d", - m, (long long unsigned)num, num_weights); - H5_API_RETURN (h5t_begin_store_elems (m, num, num_weights)); + "m=%p, num=%llu", + m, (long long unsigned)num); + H5_API_RETURN (h5t_begin_store_elems (m, num)); } /*! @@ -161,6 +161,21 @@ H5FedBeginStoreElements ( */ static inline h5_loc_idx_t H5FedStoreElement ( + h5t_mesh_t* const m, /*!< file handle */ + const h5_loc_idx_t local_vids[] /*!< tuple with vertex id's */ + ) { + H5_API_ENTER (h5_loc_idx_t, "m=%p, local_vids=%p", m, local_vids); + if (h5t_get_level (m) != 0) { + H5_API_LEAVE ( + h5_error ( + H5_ERR_INVAL, + "Elements can be added to level 0 only!")); + } + H5_API_RETURN (h5t_add_lvl0_cell (m, local_vids, NULL)); +} + +static inline h5_loc_idx_t +H5FedStoreWeightedElement ( h5t_mesh_t* const m, /*!< file handle */ const h5_loc_idx_t local_vids[], /*!< tuple with vertex id's */ const h5_weight_t weights[] // tuple with weights @@ -172,7 +187,7 @@ H5FedStoreElement ( H5_ERR_INVAL, "Elements can be added to level 0 only!")); } - H5_API_RETURN (h5t_store_elem2 (m, -1, local_vids, weights)); + H5_API_RETURN (h5t_add_lvl0_cell (m, local_vids, weights)); } static inline h5_err_t diff --git a/src/include/Makefile.am b/src/include/Makefile.am index bbeca23..1a9e87f 100644 --- a/src/include/Makefile.am +++ b/src/include/Makefile.am @@ -1,29 +1,5 @@ -# src/C level Makefile.am -# Header files that I wish to install in $(prefix)/include -include_HEADERS = \ - ../include/h5core/h5.h \ - ../include/h5core/h5_attribs.h \ - ../include/h5core/h5_debug.h \ - ../include/h5core/h5_errorhandling.h \ - ../include/h5core/h5_model.h \ - ../include/h5core/h5_syscall.h \ - ../include/h5core/h5_types.h \ - ../include/h5core/h5b_attribs.h \ - ../include/h5core/h5b_model.h \ - ../include/h5core/h5b_io.h \ - ../include/h5core/h5t_adjacencies.h \ - ../include/h5core/h5t_map.h \ - ../include/h5core/h5t_model.h \ - ../include/h5core/h5t_retrieve.h \ - ../include/h5core/h5t_store.h \ - ../include/h5core/h5t_tags.h \ - ../include/h5core/h5u_model.h \ - ../include/h5core/h5u_io.h - -# Listing of all possible headers that I may include -EXTRA_HEADERS = +SUBDIRS = h5core clean-local: $(RM) *~ - $(RM) h5core/*~ diff --git a/src/include/h5core/h5.h b/src/include/h5core/h5.h index 27f7fff..88036c3 100644 --- a/src/include/h5core/h5.h +++ b/src/include/h5core/h5.h @@ -69,7 +69,6 @@ h5_err_t h5_close_hdf5 ( void); - h5_err_t h5_flush_step ( const h5_file_t); diff --git a/src/include/h5core/h5_types.h b/src/include/h5core/h5_types.h index 4afc977..306d0f8 100644 --- a/src/include/h5core/h5_types.h +++ b/src/include/h5core/h5_types.h @@ -25,21 +25,21 @@ extern "C" { H5_O_APPEND: allows to append a new datasets to an existing file H5_O_RDWR: dataset may exist */ - -#define H5_O_RDWR 0x001 -#define H5_O_RDONLY 0x002 -#define H5_O_WRONLY 0x004 -#define H5_O_APPEND 0x008 +#define H5_O_RDWR 0x00000001 +#define H5_O_RDONLY 0x00000002 +#define H5_O_WRONLY 0x00000004 +#define H5_O_APPEND 0x00000008 #define H5_VFD_MPIPOSIX 0x00000010 #define H5_VFD_MPIIO_IND 0x00000020 +#define H5_VFD_INDEPENDENT H5_VFD_MPIIO_IND // obsolete(?) #define H5_VFD_CORE 0x00000040 -#define H5_FLUSH_FILE 0x040 -#define H5_FLUSH_STEP 0x080 -#define H5_FLUSH_DATASET 0x100 +#define H5_FLUSH_FILE 0x00001000 +#define H5_FLUSH_STEP 0x00002000 +#define H5_FLUSH_DATASET 0x00004000 -#define H5_FS_LUSTRE 0x200 +#define H5_FS_LUSTRE 0x00010000 #define H5_ID_T H5T_NATIVE_INT64 #define H5_FLOAT64_T H5T_NATIVE_DOUBLE diff --git a/src/include/h5core/h5t_map.h b/src/include/h5core/h5t_map.h index ddb3e8d..85c3e8e 100644 --- a/src/include/h5core/h5t_map.h +++ b/src/include/h5core/h5t_map.h @@ -44,21 +44,6 @@ h5t_map_glb_elem_indices2loc ( h5_loc_idx_t* loc_indices ); -h5_err_t -h5t_get_loc_vertex_index_of_vertex ( - h5t_mesh_t* const m, - const h5_loc_id_t entity_id, - h5_loc_idx_t* vertex_index - ); - -h5_err_t -h5t_get_loc_vertex_index_of_vertex2 ( - h5t_mesh_t* const m, - const h5_loc_idx_t face_idx, - const h5_loc_idx_t elem_idx, - h5_loc_idx_t* vertex_indices - ); - h5_err_t h5t_get_loc_vertex_indices_of_edge ( h5t_mesh_t* const m, diff --git a/src/include/h5core/h5t_model.h b/src/include/h5core/h5t_model.h index 9ba4a44..5254372 100644 --- a/src/include/h5core/h5t_model.h +++ b/src/include/h5core/h5t_model.h @@ -42,48 +42,76 @@ h5t_open_triangle_mesh_by_idx ( h5_err_t h5t_open_triangle_mesh_part ( - const h5_file_t, const char*, h5t_mesh_t** mesh, + const h5_file_t, const char*, h5t_mesh_t**, h5_glb_idx_t*, h5_glb_idx_t); -h5_lvl_idx_t h5t_is_chunked (h5t_mesh_t* const); +h5_lvl_idx_t +h5t_is_chunked ( + h5t_mesh_t* const); -h5_ssize_t h5t_get_num_trimeshes (const h5_file_t f); +h5_ssize_t +h5t_get_num_trimeshes ( + const h5_file_t f); -h5_ssize_t h5t_get_num_leaf_levels (h5t_mesh_t* const); +h5_ssize_t +h5t_get_num_leaf_levels ( + h5t_mesh_t* const); -h5_ssize_t h5t_get_num_vertices (h5t_mesh_t* const, const h5_id_t); +h5_ssize_t +h5t_get_num_vertices ( + h5t_mesh_t* const, const h5_id_t); -h5_ssize_t h5t_get_num_leaf_elems (h5t_mesh_t* const, const h5_id_t); +h5_ssize_t +h5t_get_num_leaf_elems ( + h5t_mesh_t* const, const h5_id_t); -h5_id_t h5t_add_chunked_tetrahedral_mesh (const h5_file_t, const char* name, h5t_mesh_t**); +h5_id_t +h5t_add_chunked_tetrahedral_mesh ( + const h5_file_t, const char*, const h5_weight_t, h5t_mesh_t**); -h5_id_t h5t_add_triangle_mesh (const h5_file_t, const char*, h5t_mesh_t**); +h5_id_t +h5t_add_chunked_triangle_mesh ( + const h5_file_t, const char*, const h5_weight_t, h5t_mesh_t**); -h5_id_t h5t_add_chunked_triangle_mesh (const h5_file_t, const char*, h5t_mesh_t**); +h5_lvl_idx_t +h5t_get_level ( + h5t_mesh_t* const); -h5_lvl_idx_t h5t_get_level (h5t_mesh_t* const); +h5_err_t +h5t_open_tetrahedral_mesh ( + const h5_file_t, const char*, h5t_mesh_t**); -h5_err_t h5t_open_tetrahedral_mesh (const h5_file_t , - const char*, h5t_mesh_t**); -h5_err_t h5t_open_tetrahedral_mesh_by_idx (const h5_file_t , - const h5_id_t, h5t_mesh_t**); +h5_err_t +h5t_open_tetrahedral_mesh_by_idx ( + const h5_file_t, const h5_id_t, h5t_mesh_t**); -h5_err_t h5t_open_triangle_mesh (const h5_file_t, - const char*, h5t_mesh_t**); -h5_err_t h5t_open_triangle_mesh_by_idx (const h5_file_t, - const h5_id_t, h5t_mesh_t**); -h5_id_t h5t_add_tetrahedral_mesh (const h5_file_t, - const char* name, h5t_mesh_t**); -h5_id_t h5t_add_triangle_mesh (const h5_file_t, - const char*, h5t_mesh_t**); +h5_err_t +h5t_open_triangle_mesh ( + const h5_file_t, const char*, h5t_mesh_t**); -h5_err_t h5t_set_level (h5t_mesh_t* const, const h5_lvl_idx_t); +h5_err_t +h5t_open_triangle_mesh_by_idx ( + const h5_file_t, const h5_id_t, h5t_mesh_t**); -h5_err_t h5t_set_mesh_changed (h5t_mesh_t* const m); +h5_id_t +h5t_add_tetrahedral_mesh ( + const h5_file_t, const char*, const h5_weight_t, h5t_mesh_t**); -h5_err_t h5t_close_mesh (h5t_mesh_t* const); +h5_id_t +h5t_add_triangle_mesh ( + const h5_file_t, const char*, const h5_weight_t, h5t_mesh_t**); +h5_err_t +h5t_set_level ( + h5t_mesh_t* const, const h5_lvl_idx_t); +h5_err_t +h5t_set_mesh_changed ( + h5t_mesh_t* const m); + +h5_err_t +h5t_close_mesh ( + h5t_mesh_t* const); #ifdef __cplusplus } diff --git a/src/include/h5core/h5t_store.h b/src/include/h5core/h5t_store.h index e3c09da..990cfde 100644 --- a/src/include/h5core/h5t_store.h +++ b/src/include/h5core/h5t_store.h @@ -30,15 +30,11 @@ h5t_end_store_vertices ( h5_err_t h5t_begin_store_elems ( - h5t_mesh_t* const, const h5_size_t, const h5_weight_t); + h5t_mesh_t* const, const h5_size_t); h5_loc_idx_t -h5t_store_elem ( - h5t_mesh_t* const, const h5_loc_idx_t, const h5_loc_idx_t*, const h5_weight_t*); - -h5_loc_idx_t -h5t_store_elem2 ( - h5t_mesh_t* const, const h5_loc_idx_t, const h5_loc_idx_t*, const h5_weight_t*); +h5t_add_lvl0_cell ( + h5t_mesh_t* const, const h5_loc_idx_t*, const h5_weight_t*); h5_err_t h5t_end_store_elems ( diff --git a/src/include/h5core/h5u_model.h b/src/include/h5core/h5u_model.h index 64719ac..cdd8ea8 100644 --- a/src/include/h5core/h5u_model.h +++ b/src/include/h5core/h5u_model.h @@ -41,7 +41,7 @@ h5u_set_num_particles ( h5_err_t h5u_has_view ( - const const h5_file_t); + const h5_file_t); h5_err_t h5u_reset_view (