- neighbor information management added to elements

- prefix 'global' removed form global element struct
- global and local element data now have the same struct
- and several other changes
This commit is contained in:
2010-08-20 15:54:01 +00:00
parent 21ba443bcd
commit c47c0cfc6e
54 changed files with 1077 additions and 909 deletions
+1
View File
@@ -448,6 +448,7 @@ 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_ref_elements_private.h -text
src/h5core/h5t_retrieve.c -text
src/h5core/h5t_retrieve_private.h -text
src/h5core/h5t_retrieve_tetm.c -text
+7
View File
@@ -49,9 +49,11 @@ EXTRA_HEADERS = \
h5t_core_private.h \
h5t_errorhandling_private.h \
h5t_hsearch_private.h \
h5t_inquiry_private.h \
h5t_map_private.h \
h5t_openclose_private.h \
h5t_readwrite_private.h \
h5t_ref_elements_private.h \
h5t_retrieve_private.h \
h5t_store_private.h \
h5t_store_trim_private.h \
@@ -115,6 +117,11 @@ libH5hut_a_SOURCES = \
libH5hut_a_DEPENDENCIES = $(EXTRA_HEADERS)
all: all-am install-libs-local
install-libs-local:
-cp ${lib_LIBRARIES} ../lib
install-exec-local:
@$(INSTALL) -d $(DESTDIR)$(includedir)/h5core
@$(INSTALL) -m644 ../include/h5core/*.h $(DESTDIR)$(includedir)/h5core/
+6 -4
View File
@@ -157,6 +157,7 @@ h5_abort_errorhandler (
#else
exit (-(int)f->__errno);
#endif
return -(int)f->__errno; // never executed, just to supress a warning
}
static void
@@ -167,10 +168,11 @@ _vprintf (
const char* fmt,
va_list ap
) {
char *fmt2 = (char*)malloc(
strlen (prefix) +
strlen (fmt) +
strlen (__funcname) + 16);
size_t size = strlen (prefix); // to avoid remark #981 with Intel CC
size += strlen (fmt);
size += strlen (__funcname) + 16;
char *fmt2 = (char*)malloc (size);
if (fmt2 == NULL) return;
sprintf (fmt2, "%s: %s: %s\n", prefix, __funcname, fmt);
vfprintf (f, fmt2, ap);
+1
View File
@@ -3,6 +3,7 @@
#include <math.h>
#include "h5core/h5_core.h"
#include "h5_core_private.h"
/*!
Compare two floating point numbers using integers. See
+6 -4
View File
@@ -602,6 +602,7 @@ h5priv_get_base_type_name (
if (base_type_id == H5_FLOAT64_T) return "H5_FLOAT64_T";
if (base_type_id == H5_STRING_T) return "H5_STRING_T";
h5_warn (f, "Unknown base type id %lu", (unsigned long)base_type_id);
return "[unknown]";
}
@@ -610,6 +611,7 @@ get_class_type_name (
h5_file_t* const f,
hid_t base_type_id
) {
#pragma unused f
if (base_type_id == H5_COMPOUND_T) return "H5_COMPOUND_T";
return "[unknown]";
@@ -1227,7 +1229,7 @@ _iter_op_get_obj_type (
herr = H5Lget_val(g_id, name, buf,
info->u.val_size, H5P_DEFAULT);
if ( herr < 0 )
return h5_error(f,
return (H5O_type_t)h5_error (f,
H5_ERR_HDF5,
"Can't get external link for object '%s'!",
name);
@@ -1237,7 +1239,7 @@ _iter_op_get_obj_type (
herr = H5Lunpack_elink_val(buf, info->u.val_size, 0,
&filename, &objname);
if ( herr < 0 )
return h5_error(f,
return (H5O_type_t)h5_error(f,
H5_ERR_HDF5,
"Can't unpack external link for object '%s'!",
name);
@@ -1250,7 +1252,7 @@ _iter_op_get_obj_type (
hid_t obj_id = H5Oopen(g_id, name, H5P_DEFAULT);
if ( obj_id < 0 )
return h5_error(f,
return (H5O_type_t)h5_error(f,
H5_ERR_HDF5,
"Can't open external link for object '%s'!",
name);
@@ -1261,7 +1263,7 @@ _iter_op_get_obj_type (
}
if ( herr < 0 )
return h5_error(f,
return (H5O_type_t)h5_error(f,
H5_ERR_HDF5,
"Can't query object with name '%s'!", name);
+3 -3
View File
@@ -69,7 +69,7 @@ h5priv_hcreate (
) {
/* Test for correct arguments. */
if (htab == NULL || htab->table != NULL) {
h5_error_internal (f, __FILE__, __func__, __LINE__);
return h5_error_internal (f, __FILE__, __func__, __LINE__);
}
/* Change nel to the first prime number not smaller as nel. */
nel |= 1; /* make odd */
@@ -99,7 +99,7 @@ h5priv_hresize (
h5_hashtable_t* htab // hash table to resize
) {
if (htab == NULL || htab->table == NULL) {
h5_error_internal (f, __FILE__, __func__, __LINE__);
return h5_error_internal (f, __FILE__, __func__, __LINE__);
}
// create new hash table
h5_hashtable_t __htab;
@@ -138,7 +138,7 @@ h5priv_hdestroy (
) {
/* Test for correct arguments. */
if (htab == NULL) {
h5_error_internal (f, __FILE__, __func__, __LINE__);
return h5_error_internal (f, __FILE__, __func__, __LINE__);
}
/* Free used memory. */
+6 -3
View File
@@ -23,6 +23,7 @@ h5priv_free_idlist_items (
h5_file_t* const f,
h5_idlist_t* list
) {
#pragma unused f
if (list->items != NULL) free (list->items);
list->items = NULL;
list->size = 0;
@@ -106,6 +107,7 @@ h5priv_sort_idlist_by_eid (
h5_file_t* const f,
h5_idlist_t* list
) {
#pragma unused f
qsort (
list->items,
list->num_items,
@@ -124,6 +126,7 @@ h5priv_find_idlist (
h5_idlist_t* list,
h5_id_t item
) {
#pragma unused f
register h5_id_t low = 0;
register h5_id_t high = list->num_items - 1;
while (low <= high) {
@@ -256,8 +259,8 @@ h5priv_search_idmap (
return -(low+1); // not found
}
int
_cmp_idmap_items (
static int
cmp_idmap_items (
const void* _item1,
const void* _item2
) {
@@ -275,6 +278,6 @@ h5priv_sort_idmap (
h5_idmap_t* map
) {
qsort ( map->items, map->num_items, sizeof (map->items[0]),
_cmp_idmap_items);
cmp_idmap_items);
return H5_SUCCESS;
}
+22 -5
View File
@@ -45,6 +45,7 @@ h5priv_error_handler (
hid_t estack_id,
void* __f
) {
#pragma unused __f
if (h5_get_debuglevel() >= 5) {
H5Eprint (estack_id, stderr);
}
@@ -58,6 +59,8 @@ h5priv_error_handler (
Initialize unstructured data internal data structure.
TODO: Move to file "h5u_openclose.c"
\return H5_SUCCESS or error code
*/
static h5_err_t
@@ -86,6 +89,8 @@ h5upriv_open_file (
Initialize H5Block internal structure.
TODO: Move to file "h5b_openclose.c"
\return H5_SUCCESS or error code
*/
static h5_err_t
@@ -101,10 +106,11 @@ h5bpriv_open_file (
b = f->b;
memset (b, 0, sizeof (*b));
#if defined(PARALLEL_IO)
size_t n = sizeof (struct h5b_partition) / sizeof (h5_int64_t);
TRY( h5priv_mpi_type_contiguous(f,
n, MPI_LONG_LONG, &b->partition_mpi_t) );
#endif
memset (b->user_layout, 0, sizeof(*b->user_layout));
memset (b->write_layout, 0, sizeof(*b->write_layout));
@@ -130,13 +136,18 @@ h5bpriv_open_file (
\return NULL on error.
*/
h5_err_t
h5priv_open_file (
static h5_err_t
open_file (
h5_file_t* const f,
const char* filename, /*!< The name of the data file to open. */
char flags, /*!< The access mode for the file. */
h5_int32_t flags, /*!< The access mode for the file. */
MPI_Comm comm /*!< MPI communicator */
) {
#if !defined(PARALLEL_IO)
#pragma unused comm
#endif
h5_info (f, "Opening file %s.", filename);
TRY( h5priv_set_hdf5_errorhandler (f, H5E_DEFAULT, h5priv_error_handler, NULL) );
@@ -255,7 +266,7 @@ h5_open_file (
}
memset (f, 0, sizeof (h5_file_t));
f->__funcname = funcname;
if (h5priv_open_file (f, filename, flags, comm) < 0) {
if (open_file (f, filename, flags, comm) < 0) {
if (f != NULL) {
/* Oops, cannot open file. We release the memory allocated for
f only, there is most likely more allocated memory we do
@@ -318,7 +329,9 @@ h5bpriv_close_file (
TRY( h5priv_close_hdf5_dataspace (f, b->diskshape) );
TRY( h5priv_close_hdf5_dataspace (f, b->memshape) );
TRY( h5priv_close_hdf5_property (f, b->dcreate_prop) );
#if defined(PARALLEL_IO)
TRY( h5priv_mpi_type_free (f, &b->partition_mpi_t) );
#endif
free (f->b);
f->b = NULL;
@@ -401,6 +414,10 @@ h5_get_stepname_fmt (
int l_name, /*!< length of buffer name */
int* width /*!< OUT: Width of the number */
) {
#pragma unused f
#pragma unused name
#pragma unused l_name
#pragma unused width
return h5_error_not_implemented (f, __FILE__, __func__, __LINE__);
}
+6 -7
View File
@@ -38,6 +38,8 @@ static char sccsid[] = "@(#)qsort.c 8.1 (Berkeley) 6/4/93";
#include <stdlib.h>
#include "h5_qsort_private.h"
#ifdef I_AM_QSORT_R
typedef int cmp_t(void *, const void *, const void *);
#else
@@ -53,10 +55,10 @@ static inline void swapfunc(char *, char *, int, int);
*/
#define swapcode(TYPE, parmi, parmj, n) { \
long i = (n) / sizeof (TYPE); \
TYPE *pi = (TYPE *) (parmi); \
TYPE *pj = (TYPE *) (parmj); \
TYPE *pi = (TYPE *) (parmi); \
TYPE *pj = (TYPE *) (parmj); \
do { \
TYPE t = *pi; \
TYPE t = *pi; \
*pi++ = *pj; \
*pj++ = t; \
} while (--i > 0); \
@@ -66,10 +68,7 @@ static inline void swapfunc(char *, char *, int, int);
es % sizeof(long) ? 2 : es == sizeof(long)? 0 : 1;
static inline void
swapfunc(a, b, n, swaptype)
char *a, *b;
int n, swaptype;
{
swapfunc(char* a, char* b, int n, int swaptype) {
if(swaptype <= 1)
swapcode(long, a, b, n)
else
-29
View File
@@ -3,35 +3,6 @@
#include "h5core/h5_core.h"
#include "h5_core_private.h"
/*
Obsolete function - still in old H5Part code !
*/
h5_err_t
h5_write_data (
h5_file_t* const f, /*!< IN: Handle to open file */
const char* name, /*!< IN: Name to associate array with */
const void* array, /*!< IN: Array to commit to disk */
const hid_t type_id, /*!< IN: Type of data */
const hid_t group_id,
const hid_t memspace_id,
const hid_t diskspace_id
) {
hid_t dset_id;
h5_info (f, "Writing dataset %s/%s.", h5_get_objname(group_id), name);
TRY( dset_id = h5priv_create_hdf5_dataset (
f,
group_id,
name,
type_id,
diskspace_id,
H5P_DEFAULT) );
f->empty = 0;
return H5_SUCCESS;
}
/*!
Write data to dataset.
+2
View File
@@ -39,6 +39,7 @@ h5priv_free (
h5_file_t* const f,
void* ptr
) {
#pragma unused f
if (ptr) free (ptr);
return H5_SUCCESS;
}
@@ -65,6 +66,7 @@ h5priv_tfind (
void* const* rootp,
int (*compar) (const void* key1, const void* key2)
) {
#pragma unused f
void* ptr = tfind (key, rootp, compar);
if (ptr == NULL) {
return (void*)(H5_ERR);
+48 -44
View File
@@ -45,6 +45,7 @@ _normalize_partition (
}
}
#if defined(PARALLEL)
/* MLH: this could be improved with an MPI_Reduce and MAX operator...
* but the user_layout array-of-structs would need to be a struct-of-arrays */
static void
@@ -72,6 +73,7 @@ _get_max_dimensions (
|| (p->k_end < q->k_start) )
/*!
\ingroup h5block_private
@@ -81,8 +83,8 @@ _get_max_dimensions (
\return value != \c 0 if yes otherwise \c 0
*/
static int
_have_ghostzone (
static inline int
have_ghostzone (
const h5b_partition_t *const p, /*!< IN: partition \c p */
const h5b_partition_t *const q /*!< IN: partition \c q */
) {
@@ -98,8 +100,8 @@ _have_ghostzone (
\return volume
*/
static h5_int64_t
_volume_of_partition (
static inline h5_int64_t
volume_of_partition (
const h5b_partition_t *const p /*!< IN: partition */
) {
return (p->i_end - p->i_start)
@@ -117,8 +119,8 @@ _volume_of_partition (
\return volume
*/
static h5_int64_t
_volume_of_ghostzone (
static inline h5_int64_t
volume_of_ghostzone (
const h5b_partition_t *const p, /*!< IN: ptr to first partition */
const h5b_partition_t *const q /*!< IN: ptr to second partition */
) {
@@ -248,8 +250,8 @@ _dissolve_ghostzone (
p_ = *p;
q_ = *q;
if ( _dissolve_X_ghostzone ( &p_, &q_ ) == 0 ) {
vol = _volume_of_partition ( &p_ )
+ _volume_of_partition ( &q_ );
vol = volume_of_partition ( &p_ )
+ volume_of_partition ( &q_ );
if ( vol > max_vol ) {
max_vol = vol;
p_best = p_;
@@ -260,8 +262,8 @@ _dissolve_ghostzone (
p_ = *p;
q_ = *q;
if ( _dissolve_Y_ghostzone ( &p_, &q_ ) == 0 ) {
vol = _volume_of_partition ( &p_ )
+ _volume_of_partition ( &q_ );
vol = volume_of_partition ( &p_ )
+ volume_of_partition ( &q_ );
if ( vol > max_vol ) {
max_vol = vol;
p_best = p_;
@@ -272,8 +274,8 @@ _dissolve_ghostzone (
q_ = *q;
if ( _dissolve_Z_ghostzone ( &p_, &q_ ) == 0 ) {
vol = _volume_of_partition ( &p_ )
+ _volume_of_partition ( &q_ );
vol = volume_of_partition ( &p_ )
+ volume_of_partition ( &q_ );
if ( vol > max_vol ) {
max_vol = vol;
p_best = p_;
@@ -313,7 +315,7 @@ _dissolve_ghostzone (
\return H5_SUCCESS or error code.
*/
static h5_err_t
static inline h5_err_t
_dissolve_ghostzones (
h5_file_t *const f,
const h5b_partition_t *const user_layout,
@@ -346,12 +348,12 @@ _dissolve_ghostzones (
proc_q < f->nprocs;
proc_q++, q++ ) {
if ( _have_ghostzone ( p, q ) ) {
if ( have_ghostzone ( p, q ) ) {
TRY( p_el = (struct list*)h5priv_alloc(f, NULL, sizeof(*p_el)) );
p_el->p = p;
p_el->q = q;
p_el->vol = _volume_of_ghostzone ( p, q );
p_el->vol = volume_of_ghostzone ( p, q );
p_el->prev = p_end;
p_el->next = NULL;
@@ -373,8 +375,8 @@ _dissolve_ghostzones (
p_el = p_max = p_begin->next;
while ( p_el ) {
if ( _have_ghostzone ( p_el->p, p_el->q ) ) {
p_el->vol = _volume_of_ghostzone ( p_el->p, p_el->q );
if ( have_ghostzone ( p_el->p, p_el->q ) ) {
p_el->vol = volume_of_ghostzone ( p_el->p, p_el->q );
if ( p_el->vol > p_max->vol )
p_max = p_el;
p_el = p_el->next;
@@ -393,6 +395,7 @@ _dissolve_ghostzones (
return H5_SUCCESS;
}
#endif
h5_err_t
h5bpriv_release_hyperslab (
@@ -523,12 +526,12 @@ h5b_3d_has_view (
h5_err_t
h5b_3d_set_view (
h5_file_t *const f, /*!< IN: File handle */
const h5_int64_t i_start, /*!< IN: start index of \c i */
const h5_int64_t i_end, /*!< IN: end index of \c i */
const h5_int64_t j_start, /*!< IN: start index of \c j */
const h5_int64_t j_end, /*!< IN: end index of \c j */
const h5_int64_t k_start, /*!< IN: start index of \c k */
const h5_int64_t k_end /*!< IN: end index of \c k */
const h5_size_t i_start, /*!< IN: start index of \c i */
const h5_size_t i_end, /*!< IN: end index of \c i */
const h5_size_t j_start, /*!< IN: start index of \c j */
const h5_size_t j_end, /*!< IN: end index of \c j */
const h5_size_t k_start, /*!< IN: start index of \c k */
const h5_size_t k_end /*!< IN: end index of \c k */
) {
h5b_partition_t *p = f->b->user_layout;
@@ -589,13 +592,13 @@ h5b_3d_set_view (
h5_err_t
h5b_3d_get_view (
h5_file_t *const f, /*!< IN: File handle */
h5_int64_t *i_start, /*!< OUT: start index of \c i */
h5_int64_t *i_end, /*!< OUT: end index of \c i */
h5_int64_t *j_start, /*!< OUT: start index of \c j */
h5_int64_t *j_end, /*!< OUT: end index of \c j */
h5_int64_t *k_start, /*!< OUT: start index of \c k */
h5_int64_t *k_end /*!< OUT: end index of \c k */
h5_file_t *const f, /*!< IN: File handle */
h5_size_t *const i_start, /*!< OUT: start index of \c i */
h5_size_t *const i_end, /*!< OUT: end index of \c i */
h5_size_t *const j_start, /*!< OUT: start index of \c j */
h5_size_t *const j_end, /*!< OUT: end index of \c j */
h5_size_t *const k_start, /*!< OUT: start index of \c k */
h5_size_t *const k_end /*!< OUT: end index of \c k */
) {
h5b_partition_t *p = f->b->user_layout;
@@ -612,13 +615,13 @@ h5b_3d_get_view (
h5_err_t
h5b_3d_get_reduced_view (
h5_file_t *const f, /*!< IN: File handle */
h5_int64_t *i_start, /*!< OUT: start index of \c i */
h5_int64_t *i_end, /*!< OUT: end index of \c i */
h5_int64_t *j_start, /*!< OUT: start index of \c j */
h5_int64_t *j_end, /*!< OUT: end index of \c j */
h5_int64_t *k_start, /*!< OUT: start index of \c k */
h5_int64_t *k_end /*!< OUT: end index of \c k */
h5_file_t *const f, /*!< IN: File handle */
h5_size_t *const i_start, /*!< OUT: start index of \c i */
h5_size_t *const i_end, /*!< OUT: end index of \c i */
h5_size_t *const j_start, /*!< OUT: start index of \c j */
h5_size_t *const j_end, /*!< OUT: end index of \c j */
h5_size_t *const k_start, /*!< OUT: start index of \c k */
h5_size_t *const k_end /*!< OUT: end index of \c k */
) {
h5b_partition_t *p = f->b->write_layout;
@@ -636,9 +639,9 @@ h5b_3d_get_reduced_view (
h5_err_t
h5b_3d_set_chunk (
h5_file_t *const f, /*!< IN: File handle */
const h5_int64_t i, /*!< IN: size of \c i */
const h5_int64_t j, /*!< IN: size of \c j */
const h5_int64_t k /*!< IN: size of \c k */
const h5_size_t i, /*!< IN: size of \c i */
const h5_size_t j, /*!< IN: size of \c j */
const h5_size_t k /*!< IN: size of \c k */
) {
if ( i == 0 || j == 0 || k == 0 )
@@ -662,9 +665,9 @@ h5_err_t
h5b_3d_get_chunk (
h5_file_t *const f, /*!< IN: File handle */
const char *field_name, /*!< IN: name of dataset */
h5_int64_t *i, /*!< OUT: size of \c i */
h5_int64_t *j, /*!< OUT: size of \c j */
h5_int64_t *k /*!< OUT: size of \c k */
h5_size_t *const i, /*!< OUT: size of \c i */
h5_size_t *const j, /*!< OUT: size of \c j */
h5_size_t *const k /*!< OUT: size of \c k */
) {
CHECK_TIMEGROUP ( f );
@@ -696,6 +699,7 @@ h5b_3d_get_chunk (
return H5_SUCCESS;
}
#if defined(PARALLEL_IO)
h5_err_t
h5b_3d_set_grid (
h5_file_t *const f, /*!< IN: File handle */
@@ -778,7 +782,6 @@ h5b_3d_set_dims (
(long long)dims[0], (long long)dims[1], (long long)dims[2],
(long long)check_dims[0], (long long)check_dims[1], (long long)check_dims[2]);
}
h5_int64_t coords[3];
TRY( h5b_3d_get_grid_coords(f,
f->myproc, coords+0, coords+1, coords+2) );
@@ -802,6 +805,7 @@ h5b_3d_set_dims (
return H5_SUCCESS;
}
#endif
h5_err_t
h5b_3d_set_halo (
+7 -8
View File
@@ -267,10 +267,9 @@ _select_hyperslab_for_reading (
}
static h5_err_t
_read_data (
read_data (
h5_file_t *const f, /*!< IN: file handle */
const char *field_name, /*!< IN: name of field */
const char *data_name, /*!< IN: name of dataset */
const char *dataset_name, /*!< IN: name of dataset */
void *data, /*!< OUT: ptr to read buffer */
const hid_t type /*!< IN: data type */
) {
@@ -278,7 +277,7 @@ _read_data (
hid_t dataset;
h5b_fdata_t *b = f->b;
TRY( dataset = h5priv_open_hdf5_dataset(f, b->field_gid, data_name) );
TRY( dataset = h5priv_open_hdf5_dataset(f, b->field_gid, dataset_name) );
TRY( _select_hyperslab_for_reading(f, dataset) );
TRY( h5priv_read_hdf5_dataset(f,
dataset,
@@ -302,7 +301,7 @@ h5b_read_scalar_data (
CHECK_TIMEGROUP( f );
CHECK_LAYOUT( f );
TRY( h5bpriv_open_field_group(f, field_name) );
TRY( _read_data(f, field_name, H5_BLOCKNAME_X, data, type) );
TRY( read_data(f, H5_BLOCKNAME_X, data, type) );
return H5_SUCCESS;
}
@@ -318,9 +317,9 @@ h5b_read_vector3d_data (
CHECK_TIMEGROUP( f );
CHECK_LAYOUT( f );
TRY( h5bpriv_open_field_group(f, field_name) );
TRY( _read_data(f, field_name, H5_BLOCKNAME_X, xdata, type) );
TRY( _read_data(f, field_name, H5_BLOCKNAME_Y, ydata, type) );
TRY( _read_data(f, field_name, H5_BLOCKNAME_Z, zdata, type) );
TRY( read_data(f, H5_BLOCKNAME_X, xdata, type) );
TRY( read_data(f, H5_BLOCKNAME_Y, ydata, type) );
TRY( read_data(f, H5_BLOCKNAME_Z, zdata, type) );
return H5_SUCCESS;
}
+4 -114
View File
@@ -17,123 +17,13 @@
#include "h5_core_private.h"
h5_err_t
h5t_get_edges_upadjacent_to_vertex (
h5t_get_adjacencies (
h5_file_t* const f,
const h5_id_t local_vid,
const h5_id_t entity_id,
const h5_int32_t dim,
h5_idlist_t** list
) {
return (*f->t->methods.adjacency->get_edges_upadjacent_to_vertex)(
f, local_vid, list);
}
h5_err_t
h5t_get_triangles_upadjacent_to_vertex (
h5_file_t* const f,
const h5_id_t local_id,
h5_idlist_t** list
) {
return (*f->t->methods.adjacency->get_triangles_upadjacent_to_vertex)(
f, local_id, list);
}
h5_err_t
h5t_get_tets_upadjacent_to_vertex (
h5_file_t* const f,
const h5_id_t local_id,
h5_idlist_t** list
) {
return (*f->t->methods.adjacency->get_tets_upadjacent_to_vertex)(
f, local_id, list);
}
h5_err_t
h5t_get_triangles_upadjacent_to_edge (
h5_file_t* const f,
const h5_id_t local_id,
h5_idlist_t** list
) {
return (*f->t->methods.adjacency->get_triangles_upadjacent_to_edge)(
f, local_id, list);
}
h5_err_t
h5t_get_tets_upadjacent_to_edge (
h5_file_t* const f,
const h5_id_t local_id,
h5_idlist_t** list
) {
return (*f->t->methods.adjacency->get_tets_upadjacent_to_edge)(
f, local_id, list);
}
h5_err_t
h5t_get_tets_upadjacent_to_triangle (
h5_file_t* const f,
const h5_id_t local_id,
h5_idlist_t** list
) {
return (*f->t->methods.adjacency->get_tets_upadjacent_to_triangle)(
f, local_id, list);
}
h5_err_t
h5t_get_vertices_downadjacent_to_edge (
h5_file_t* const f,
const h5_id_t local_id,
h5_idlist_t** list
) {
return (*f->t->methods.adjacency->get_vertices_downadjacent_to_edge)(
f, local_id, list);
}
h5_err_t
h5t_get_vertices_downadjacent_to_triangle (
h5_file_t* const f,
const h5_id_t local_id,
h5_idlist_t** list
) {
return (*f->t->methods.adjacency->get_vertices_downadjacent_to_triangle)(
f, local_id, list);
}
h5_err_t
h5t_get_vertices_downadjacent_to_tet (
h5_file_t* const f,
const h5_id_t local_id,
h5_idlist_t** list
) {
return (*f->t->methods.adjacency->get_vertices_downadjacent_to_tet)(
f, local_id, list);
}
h5_err_t
h5t_get_edges_downadjacent_to_triangle (
h5_file_t* const f,
const h5_id_t local_id,
h5_idlist_t** list
) {
return (*f->t->methods.adjacency->get_edges_downadjacent_to_triangle)(
f, local_id, list);
}
h5_err_t
h5t_get_edges_downadjacent_to_tet (
h5_file_t* const f,
const h5_id_t local_id,
h5_idlist_t** list
) {
return (*f->t->methods.adjacency->get_edges_downadjacent_to_tet)(
f, local_id, list);
}
h5_err_t
h5t_get_triangles_downadjacent_to_tet (
h5_file_t* const f,
const h5_id_t local_id,
h5_idlist_t** list
) {
return (*f->t->methods.adjacency->get_triangles_downadjacent_to_tet)(
f, local_id, list);
return h5tpriv_get_adjacencies (f, entity_id, dim, list);
}
h5_err_t
+31
View File
@@ -4,4 +4,35 @@
extern struct h5t_adjacency_methods h5tpriv_trim_adjacency_methods;
extern struct h5t_adjacency_methods h5tpriv_tetm_adjacency_methods;
static inline h5_err_t
h5tpriv_get_adjacencies (
h5_file_t* const f,
const h5_id_t entity_id,
const h5_int32_t dim,
h5_idlist_t** list
) {
if (f->t->methods.adjacency == NULL) {
h5_error_internal (f, __FILE__, __func__, __LINE__);
}
return (*f->t->methods.adjacency->get_adjacencies)(f, entity_id, dim, list);
}
static inline h5_err_t
h5tpriv_release_adjacency_structs (
h5_file_t* const f
) {
if (f->t->methods.adjacency == NULL) {
return 0;
}
return (*f->t->methods.adjacency->release_internal_structs)(f);
}
static inline h5_err_t
h5tpriv_update_adjacency_structs (
h5_file_t* const f,
const h5_id_t level_id
) {
return (*f->t->methods.adjacency->update_internal_structs)(f, level_id);
}
#endif
+166 -66
View File
@@ -19,18 +19,18 @@
/*
compute T(V) from current level up to highest levels.
*/
static h5_err_t
static inline h5_err_t
compute_elems_of_vertices (
h5_file_t* const f,
const h5_id_t from_lvl
const h5_id_t level_idx
) {
h5t_fdata_t* t = f->t;
h5_id_t idx = (from_lvl <= 0) ? 0 : t->num_elems[from_lvl-1];
h5_id_t idx = (level_idx <= 0) ? 0 : t->num_elems[level_idx-1];
h5_tet_t *el = &t->loc_elems.tets[idx];
h5_id_t num_elems = t->num_elems[t->num_levels-1];
for (;idx < num_elems; idx++, el++) {
int face_idx;
int num_faces = t->ref_elem->num_faces[0];
int num_faces = h5tpriv_ref_elem_get_num_vertices(t);
for (face_idx = 0; face_idx < num_faces; face_idx++) {
h5_id_t vidx = el->vertex_indices[face_idx];
TRY( h5priv_append_to_idlist (
@@ -45,7 +45,7 @@ compute_elems_of_vertices (
/*
Compute T(E) from current level up to highest levels.
*/
static h5_err_t
static inline h5_err_t
compute_elems_of_edges (
h5_file_t* const f,
const h5_id_t from_lvl
@@ -57,7 +57,7 @@ compute_elems_of_edges (
TRY( h5tpriv_resize_te_htab (f, 4*(num_elems-elem_idx)) );
for (;elem_idx < num_elems; elem_idx++) {
int face_idx;
int num_faces = t->ref_elem->num_faces[1];
int num_faces = h5tpriv_ref_elem_get_num_edges(t);
for (face_idx = 0; face_idx < num_faces; face_idx++) {
TRY( h5tpriv_search_te2 (
f, face_idx, elem_idx, &retval) );
@@ -66,7 +66,7 @@ compute_elems_of_edges (
return H5_SUCCESS;
}
static h5_err_t
static inline h5_err_t
compute_elems_of_triangles (
h5_file_t* const f,
const h5_id_t from_lvl
@@ -75,10 +75,10 @@ compute_elems_of_triangles (
h5_id_t elem_idx = (from_lvl <= 0) ? 0 : t->num_elems[from_lvl-1];
h5_id_t num_elems = t->num_elems[t->num_levels-1];
h5_idlist_t *retval = NULL;
TRY( h5tpriv_resize_te_htab (f, 4*(num_elems-elem_idx)) );
TRY( h5tpriv_resize_td_htab (f, 4*(num_elems-elem_idx)) );
for (;elem_idx < num_elems; elem_idx++) {
int face_idx;
int num_faces = t->ref_elem->num_faces[1];
int num_faces = h5tpriv_ref_elem_get_num_edges (t);
for (face_idx = 0; face_idx < num_faces; face_idx++) {
TRY( h5tpriv_search_td2 (
f, face_idx, elem_idx, &retval) );
@@ -87,7 +87,7 @@ compute_elems_of_triangles (
return H5_SUCCESS;
}
static h5_err_t
static inline h5_err_t
compute_children_of_edge (
h5_file_t* const f,
h5_id_t kid,
@@ -112,7 +112,7 @@ compute_children_of_edge (
TRY( h5priv_append_to_idlist (f, children, *edge) );
} else {
h5_id_t kids[2];
TRY( t->methods.store->get_direct_children_of_edge (
TRY( h5tpriv_get_direct_children_of_edge (
f,
face_idx,
tet->child_idx,
@@ -127,7 +127,7 @@ compute_children_of_edge (
/*
Compute all sections of an edge.
*/
static h5_err_t
static inline h5_err_t
compute_sections_of_edge (
h5_file_t* const f,
h5_id_t kid,
@@ -151,7 +151,7 @@ compute_sections_of_edge (
if (! h5tpriv_elem_is_on_cur_level (f, tet) == H5_OK) {
refined = 1;
h5_id_t kids[2];
TRY( t->methods.store->get_direct_children_of_edge (
TRY( h5tpriv_get_direct_children_of_edge (
f,
face_id,
tet->child_idx,
@@ -197,7 +197,7 @@ compute_sections_of_edge (
[4,5,7]: 0, 5 [4,6,8]: 2, 4 [5,6,9]: 1, 7 [7,8,9]: 3, 6
*/
static h5_err_t
static inline h5_err_t
compute_direct_children_of_triangle (
h5_file_t* const f,
h5_id_t face_idx,
@@ -210,7 +210,7 @@ compute_direct_children_of_triangle (
{{2,0},{2,2},{2,3},{1,7}},
{{3,1},{3,2},{3,3},{3,6}}
};
int num_faces = f->t->ref_elem->num_faces[2];
int num_faces = h5tpriv_ref_elem_get_num_triangles (f->t);
if ((face_idx < 0) || (face_idx >= num_faces)) {
return h5_error_internal (f, __FILE__, __func__, __LINE__);
}
@@ -225,7 +225,7 @@ compute_direct_children_of_triangle (
return H5_SUCCESS;
}
static h5_err_t
static inline h5_err_t
compute_children_of_triangle (
h5_file_t* const f,
h5_id_t did,
@@ -264,7 +264,7 @@ compute_children_of_triangle (
return H5_SUCCESS;
}
static h5_err_t
static inline h5_err_t
compute_sections_of_triangle (
h5_file_t* const f,
h5_id_t did,
@@ -307,8 +307,8 @@ compute_sections_of_triangle (
map edge ID to unique ID
if unique ID not in list: add
*/
static h5_err_t
_add_edge (
static inline h5_err_t
add_edge (
h5_file_t* const f,
h5_idlist_t* list,
h5_id_t face_idx,
@@ -321,8 +321,8 @@ _add_edge (
}
static h5_err_t
get_edges_upadjacent_to_vertex (
static inline h5_err_t
get_edges_uadj_to_vertex (
h5_file_t* const f,
const h5_id_t vid,
h5_idlist_t** list
@@ -343,15 +343,15 @@ get_edges_upadjacent_to_vertex (
continue;
}
int map[4][3] = { {0,2,3}, {0,1,4}, {2,1,5}, {3,4,5} };
TRY( _add_edge (f, *list, map[face][0], eid) );
TRY( _add_edge (f, *list, map[face][1], eid) );
TRY( _add_edge (f, *list, map[face][2], eid) );
TRY( add_edge (f, *list, map[face][0], eid) );
TRY( add_edge (f, *list, map[face][1], eid) );
TRY( add_edge (f, *list, map[face][2], eid) );
}
return H5_SUCCESS;
}
static h5_err_t
_add_triangle (
static inline h5_err_t
add_triangle (
h5_file_t* const f,
h5_idlist_t* list,
h5_id_t face,
@@ -364,8 +364,8 @@ _add_triangle (
return H5_SUCCESS;
}
static h5_err_t
get_triangles_upadjacent_to_vertex (
static inline h5_err_t
get_triangles_uadj_to_vertex (
h5_file_t * const f,
const h5_id_t vid,
h5_idlist_t **list
@@ -385,15 +385,15 @@ get_triangles_upadjacent_to_vertex (
continue;
}
int map[4][3] = { {1,2,3}, {0,2,3}, {0,1,3}, {0,1,2} };
TRY( _add_triangle (f, *list, map[face][0], eid) );
TRY( _add_triangle (f, *list, map[face][1], eid) );
TRY( _add_triangle (f, *list, map[face][2], eid) );
TRY( add_triangle (f, *list, map[face][0], eid) );
TRY( add_triangle (f, *list, map[face][1], eid) );
TRY( add_triangle (f, *list, map[face][2], eid) );
}
return H5_SUCCESS;
}
static h5_err_t
get_tets_upadjacent_to_vertex (
static inline h5_err_t
get_tets_uadj_to_vertex (
h5_file_t* const f,
const h5_id_t vid,
h5_idlist_t** list
@@ -416,8 +416,8 @@ get_tets_upadjacent_to_vertex (
return H5_SUCCESS;
}
static h5_err_t
get_triangles_upadjacent_to_edge (
static inline h5_err_t
get_triangles_uadj_to_edge (
h5_file_t* const f,
const h5_id_t kid,
h5_idlist_t** list
@@ -432,16 +432,16 @@ get_triangles_upadjacent_to_edge (
for (; edge < end; edge++) {
h5_id_t eid = h5tpriv_get_elem_idx (*edge);
h5_id_t face_idx = h5tpriv_get_face_idx (*edge);
TRY( _add_triangle (f, *list, map[face_idx][0], eid) );
TRY( _add_triangle (f, *list, map[face_idx][1], eid) );
TRY( add_triangle (f, *list, map[face_idx][0], eid) );
TRY( add_triangle (f, *list, map[face_idx][1], eid) );
}
TRY( h5priv_free_idlist ( f, &children) );
return H5_SUCCESS;
}
static h5_err_t
get_tets_upadjacent_to_edge (
static inline h5_err_t
get_tets_uadj_to_edge (
h5_file_t* const f,
const h5_id_t kid,
h5_idlist_t** list
@@ -460,8 +460,8 @@ get_tets_upadjacent_to_edge (
return H5_SUCCESS;
}
static h5_err_t
get_tets_upadjacent_to_triangle (
static inline h5_err_t
get_tets_uadj_to_triangle (
h5_file_t* const f,
const h5_id_t did,
h5_idlist_t** list
@@ -480,8 +480,8 @@ get_tets_upadjacent_to_triangle (
return H5_SUCCESS;
}
static h5_err_t
get_vertices_downadjacent_to_edge (
static inline h5_err_t
get_vertices_dadj_to_edge (
h5_file_t* const f,
const h5_id_t kid,
h5_idlist_t** list
@@ -505,8 +505,8 @@ get_vertices_downadjacent_to_edge (
/*
Compute downward adjacent vertices of all edges of triangle.
*/
static h5_err_t
get_vertices_downadjacent_to_triangle (
static inline h5_err_t
get_vertices_dadj_to_triangle (
h5_file_t* const f,
const h5_id_t did,
h5_idlist_t** list
@@ -540,8 +540,8 @@ get_vertices_downadjacent_to_triangle (
/*
Compute downward adjacent vertices of all edges of tetrahedron.
*/
static h5_err_t
get_vertices_downadjacent_to_tet (
static inline h5_err_t
get_vertices_dadj_to_tet (
h5_file_t* const f,
const h5_id_t eid,
h5_idlist_t** list
@@ -568,8 +568,8 @@ get_vertices_downadjacent_to_tet (
return H5_SUCCESS;
}
static h5_err_t
get_edges_downadjacent_to_triangle (
static inline h5_err_t
get_edges_dadj_to_triangle (
h5_file_t* const f,
const h5_id_t did,
h5_idlist_t** list
@@ -597,8 +597,8 @@ get_edges_downadjacent_to_triangle (
return H5_SUCCESS;
}
static h5_err_t
get_edges_downadjacent_to_tet (
static inline h5_err_t
get_edges_dadj_to_tet (
h5_file_t* const f,
const h5_id_t eid,
h5_idlist_t** list
@@ -622,8 +622,8 @@ get_edges_downadjacent_to_tet (
return H5_SUCCESS;
}
static h5_err_t
get_triangles_downadjacent_to_tet (
static inline h5_err_t
get_triangles_dadj_to_tet (
h5_file_t* const f,
const h5_id_t eid,
h5_idlist_t** list
@@ -647,6 +647,117 @@ get_triangles_downadjacent_to_tet (
return H5_SUCCESS;
}
static inline h5_err_t
dim_error(
h5_file_t* const f,
const h5_int32_t dim
) {
return h5_error (
f,
H5_ERR_INVAL,
"Illegal dimension %ld", (long)dim);
}
static inline h5_err_t
get_adjacencies_to_vertex (
h5_file_t* const f,
const h5_id_t entity_id,
const h5_int32_t dim,
h5_idlist_t** list
) {
switch (dim) {
case 1:
return get_edges_uadj_to_vertex(f, entity_id, list);
case 2:
return get_triangles_uadj_to_vertex(f, entity_id, list);
case 3:
return get_tets_uadj_to_vertex(f, entity_id, list);
default:
return dim_error (f, dim);
}
}
static inline h5_err_t
get_adjacencies_to_edge (
h5_file_t* const f,
const h5_id_t entity_id,
const h5_int32_t dim,
h5_idlist_t** list
) {
switch (dim) {
case 0:
return get_vertices_dadj_to_edge(f, entity_id, list);
case 2:
return get_triangles_uadj_to_edge(f, entity_id, list);
case 3:
return get_tets_uadj_to_edge(f, entity_id, list);
default:
return dim_error (f, dim);
}
}
static inline h5_err_t
get_adjacencies_to_triangle (
h5_file_t* const f,
const h5_id_t entity_id,
const h5_int32_t dim,
h5_idlist_t** list
) {
switch (dim) {
case 0:
return get_vertices_dadj_to_triangle(f, entity_id, list);
case 1:
return get_edges_dadj_to_triangle(f, entity_id, list);
case 3:
return get_tets_uadj_to_triangle(f, entity_id, list);
default:
return dim_error (f, dim);
}
}
static inline h5_err_t
get_adjacencies_to_tet (
h5_file_t* const f,
const h5_id_t entity_id,
const h5_int32_t dim,
h5_idlist_t** list
) {
switch (dim) {
case 0:
return get_vertices_dadj_to_tet(f, entity_id, list);
case 1:
return get_edges_dadj_to_tet(f, entity_id, list);
case 2:
return get_triangles_dadj_to_tet(f, entity_id, list);
default:
return dim_error (f, dim);
}
}
static h5_err_t
get_adjacencies (
h5_file_t* const f,
const h5_id_t entity_id,
const h5_int32_t dim,
h5_idlist_t** list
) {
h5_id_t entity_type = h5tpriv_get_entity_type (entity_id);
switch (entity_type) {
case H5T_ETYPE_VERTEX:
return get_adjacencies_to_vertex (f, entity_id, dim, list);
case H5T_ETYPE_EDGE:
return get_adjacencies_to_edge (f, entity_id, dim, list);
case H5T_ETYPE_TRIANGLE:
return get_adjacencies_to_triangle (f, entity_id, dim, list);
case H5T_ETYPE_TET:
return get_adjacencies_to_tet (f, entity_id, dim, list);
default:
break;
}
return h5_error_internal (f, __FILE__, __func__, __LINE__);
}
static h5_err_t
update_internal_structs (
h5_file_t* const f,
@@ -671,11 +782,11 @@ update_internal_structs (
return H5_SUCCESS;
}
static h5_err_t
release_internal_structs (
h5_file_t * const f
) {
#pragma unused f
/* TO BE WRITTEN @@@ */
return H5_SUCCESS;
}
@@ -683,17 +794,6 @@ release_internal_structs (
struct h5t_adjacency_methods h5tpriv_tetm_adjacency_methods = {
update_internal_structs,
release_internal_structs,
get_edges_upadjacent_to_vertex,
get_triangles_upadjacent_to_vertex,
get_tets_upadjacent_to_vertex,
get_triangles_upadjacent_to_edge,
get_tets_upadjacent_to_edge,
get_tets_upadjacent_to_triangle,
get_vertices_downadjacent_to_edge,
get_vertices_downadjacent_to_triangle,
get_vertices_downadjacent_to_tet,
get_edges_downadjacent_to_triangle,
get_edges_downadjacent_to_tet,
get_triangles_downadjacent_to_tet
get_adjacencies,
};
+109 -36
View File
@@ -19,7 +19,7 @@
/*
compute T(V) from current level up to highest levels.
*/
static h5_err_t
static inline h5_err_t
compute_elems_of_vertices (
h5_file_t* const f,
const h5_id_t from_lvl
@@ -30,7 +30,7 @@ compute_elems_of_vertices (
h5_id_t num_elems = t->num_elems[t->num_levels-1];
for (;elem_idx < num_elems; elem_idx++, el++) {
int face_idx;
int num_faces = t->ref_elem->num_faces[0];
int num_faces = h5tpriv_ref_elem_get_num_vertices (t);
for (face_idx = 0; face_idx < num_faces; face_idx++) {
h5_id_t vidx = el->vertex_indices[face_idx];
TRY( h5priv_append_to_idlist (
@@ -46,7 +46,7 @@ compute_elems_of_vertices (
/*
Compute T(E) from current level up to highest levels.
*/
static h5_err_t
static inline h5_err_t
compute_elems_of_edges (
h5_file_t* const f,
const h5_id_t from_lvl
@@ -58,7 +58,7 @@ compute_elems_of_edges (
TRY( h5tpriv_resize_te_htab (f, 4*(num_elems-elem_idx)) );
for (;elem_idx < num_elems; elem_idx++) {
int face_idx;
int num_faces = t->ref_elem->num_faces[1];
int num_faces = h5tpriv_ref_elem_get_num_edges (t);
for (face_idx = 0; face_idx < num_faces; face_idx++) {
TRY ( h5tpriv_search_te2 (
f, face_idx, elem_idx, &retval ) );
@@ -67,7 +67,7 @@ compute_elems_of_edges (
return H5_SUCCESS;
}
static h5_err_t
static inline h5_err_t
compute_children_of_edge (
h5_file_t * const f,
h5_id_t kid,
@@ -94,7 +94,7 @@ compute_children_of_edge (
);
} else {
h5_id_t kids[2];
TRY ( t->methods.store->get_direct_children_of_edge (
TRY ( h5tpriv_get_direct_children_of_edge (
f,
face_idx,
el->child_idx,
@@ -111,7 +111,7 @@ compute_children_of_edge (
/*
Compute all sections of an edge.
*/
static h5_err_t
static inline h5_err_t
compute_sections_of_edge (
h5_file_t * const f,
h5_id_t kid,
@@ -136,7 +136,7 @@ compute_sections_of_edge (
if ( ! h5tpriv_elem_is_on_cur_level ( f, el ) == H5_OK ) {
refined = 1;
h5_id_t kids[2];
TRY ( t->methods.store->get_direct_children_of_edge (
TRY ( h5tpriv_get_direct_children_of_edge (
f,
face_id,
el->child_idx,
@@ -158,7 +158,7 @@ compute_sections_of_edge (
map edge ID to unique ID
if unique ID not in list: add
*/
static h5_err_t
static inline h5_err_t
add_edge (
h5_file_t * const f,
h5_idlist_t *list,
@@ -172,8 +172,8 @@ add_edge (
}
static h5_err_t
get_edges_upadjacent_to_vertex (
static inline h5_err_t
get_edges_uadj_to_vertex (
h5_file_t * const f,
const h5_id_t entity_id,
h5_idlist_t **list
@@ -206,8 +206,8 @@ get_edges_upadjacent_to_vertex (
return H5_SUCCESS;
}
static h5_err_t
get_triangles_upadjacent_to_vertex (
static inline h5_err_t
get_triangles_uadj_to_vertex (
h5_file_t * const f,
const h5_id_t entity_id,
h5_idlist_t **list
@@ -230,8 +230,8 @@ get_triangles_upadjacent_to_vertex (
return H5_SUCCESS;
}
static h5_err_t
get_triangles_upadjacent_to_edge (
static inline h5_err_t
get_triangles_uadj_to_edge (
h5_file_t * const f,
const h5_id_t entity_id,
h5_idlist_t **list
@@ -251,8 +251,8 @@ get_triangles_upadjacent_to_edge (
return H5_SUCCESS;
}
static h5_err_t
get_vertices_downadjacent_to_edge (
static inline h5_err_t
get_vertices_dadj_to_edge (
h5_file_t * const f,
const h5_id_t entity_id,
h5_idlist_t **list
@@ -276,8 +276,8 @@ get_vertices_downadjacent_to_edge (
/*
Compute downward adjacent vertices of all edges of triangle.
*/
static h5_err_t
get_vertices_downadjacent_to_triangle (
static inline h5_err_t
get_vertices_dadj_to_triangle (
h5_file_t* const f,
const h5_id_t entity_id,
h5_idlist_t** list
@@ -288,7 +288,7 @@ get_vertices_downadjacent_to_triangle (
h5_id_t elem_idx = h5tpriv_get_elem_idx ( entity_id );
// loop over all edges of triangle
h5_id_t face_idx;
h5_id_t num_faces = f->t->ref_elem->num_faces[1];
h5_id_t num_faces = h5tpriv_ref_elem_get_num_edges (f->t);
for (face_idx = 0; face_idx < num_faces; face_idx++) {
TRY( compute_sections_of_edge (
f,
@@ -308,8 +308,8 @@ get_vertices_downadjacent_to_triangle (
return H5_SUCCESS;
}
static h5_err_t
get_edges_downadjacent_to_triangle (
static inline h5_err_t
get_edges_dadj_to_triangle (
h5_file_t* const f,
const h5_id_t entity_id,
h5_idlist_t** list
@@ -320,7 +320,7 @@ get_edges_downadjacent_to_triangle (
h5_id_t elem_idx = h5tpriv_get_elem_idx (entity_id);
// loop over all edges of triangle
h5_id_t face_idx;
h5_id_t num_faces = f->t->ref_elem->num_faces[1];
h5_id_t num_faces = h5tpriv_ref_elem_get_num_edges (f->t);
for ( face_idx = 0; face_idx < num_faces; face_idx++ ) {
TRY( compute_sections_of_edge (
f,
@@ -337,7 +337,90 @@ get_edges_downadjacent_to_triangle (
return H5_SUCCESS;
}
static inline h5_err_t
dim_error(
h5_file_t* const f,
const h5_int32_t dim
) {
return h5_error (
f,
H5_ERR_INVAL,
"Illegal dimension %ld", (long)dim);
}
static inline h5_err_t
get_adjacencies_to_vertex (
h5_file_t* const f,
const h5_id_t entity_id,
const h5_int32_t dim,
h5_idlist_t** list
) {
switch (dim) {
case 1:
return get_edges_uadj_to_vertex(f, entity_id, list);
case 2:
return get_triangles_uadj_to_vertex(f, entity_id, list);
default:
return dim_error (f, dim);
}
}
static inline h5_err_t
get_adjacencies_to_edge (
h5_file_t* const f,
const h5_id_t entity_id,
const h5_int32_t dim,
h5_idlist_t** list
) {
switch (dim) {
case 0:
return get_vertices_dadj_to_edge(f, entity_id, list);
case 2:
return get_triangles_uadj_to_edge(f, entity_id, list);
default:
return dim_error (f, dim);
}
}
static inline h5_err_t
get_adjacencies_to_triangle (
h5_file_t* const f,
const h5_id_t entity_id,
const h5_int32_t dim,
h5_idlist_t** list
) {
switch (dim) {
case 0:
return get_vertices_dadj_to_triangle(f, entity_id, list);
case 1:
return get_edges_dadj_to_triangle(f, entity_id, list);
default:
return dim_error (f, dim);
}
}
static h5_err_t
get_adjacencies (
h5_file_t* const f,
const h5_id_t entity_id,
const h5_int32_t dim,
h5_idlist_t** list
) {
h5_id_t entity_type = h5tpriv_get_entity_type (entity_id);
switch (entity_type) {
case H5T_ETYPE_VERTEX:
return get_adjacencies_to_vertex (f, entity_id, dim, list);
case H5T_ETYPE_EDGE:
return get_adjacencies_to_edge (f, entity_id, dim, list);
case H5T_ETYPE_TRIANGLE:
return get_adjacencies_to_triangle (f, entity_id, dim, list);
default:
break;
}
return h5_error_internal (f, __FILE__, __func__, __LINE__);
}
static inline h5_err_t
update_internal_structs (
h5_file_t* const f,
const h5_id_t from_lvl
@@ -356,10 +439,11 @@ update_internal_structs (
return H5_SUCCESS;
}
static h5_err_t
static inline h5_err_t
release_internal_structs (
h5_file_t* const f
) {
#pragma unused f
/* TO BE WRITTEN @@@ */
return H5_SUCCESS;
}
@@ -367,17 +451,6 @@ release_internal_structs (
struct h5t_adjacency_methods h5tpriv_trim_adjacency_methods = {
update_internal_structs,
release_internal_structs,
get_edges_upadjacent_to_vertex,
get_triangles_upadjacent_to_vertex,
NULL,
get_triangles_upadjacent_to_edge,
NULL,
NULL,
get_vertices_downadjacent_to_edge,
get_vertices_downadjacent_to_triangle,
NULL,
get_edges_downadjacent_to_triangle,
NULL,
NULL
get_adjacencies
};
+10 -9
View File
@@ -3,20 +3,21 @@
#define H5T_CONTAINER_GRPNAME "Topo"
#include "h5t_openclose_private.h"
#include "h5t_adjacencies_private.h"
#include "h5t_consts_private.h"
#include "h5t_errorhandling_private.h"
#include "h5t_hsearch_private.h"
#include "h5t_map_private.h"
#include "h5t_readwrite_private.h"
#include "h5t_store_private.h"
#include "h5t_tags_private.h"
#include "h5t_types_private.h"
#include "h5t_access_private.h"
#include "h5t_adjacencies_private.h"
#include "h5t_consts_private.h"
#include "h5t_inquiry_private.h"
#include "h5t_errorhandling_private.h"
#include "h5t_hsearch_private.h"
#include "h5t_map_private.h"
#include "h5t_openclose_private.h"
#include "h5t_ref_elements_private.h"
#include "h5t_readwrite_private.h"
#include "h5t_retrieve_private.h"
#include "h5t_store_private.h"
#endif
+1 -1
View File
@@ -18,7 +18,7 @@ h5tpriv_error_local_elem_nexist (
int num_chars_printed = snprintf (s, sizeof(s), "%lld,",
(long long)local_vertex_indices[0]);
int i;
int num_vertices = t->ref_elem->num_faces[0];
int num_vertices = h5tpriv_ref_elem_get_num_vertices (t);
for (i = 1; i < num_vertices; i++) {
num_chars_printed += snprintf (
s + num_chars_printed, sizeof (s) - num_chars_printed,
+8 -4
View File
@@ -244,21 +244,25 @@ h5tpriv_search_td2 (
3*(num_elems-elem_idx),
&a->td_hash));
}
/* search in directory, add if entry doen't already exists */
TRY( h5priv_hsearch (
f,
entry,
H5_ENTER,
&__retval,
&a->td_hash) );
h5t_td_entry_t *te_entry = (h5t_td_entry_t *)__retval;
/* search ID in list of IDs for given triangle */
h5t_td_entry_t *td_entry = (h5t_td_entry_t *)__retval;
TRY( h5priv_search_idlist (
f,
&te_entry->value,
&td_entry->value,
h5tpriv_build_triangle_id (face_idx, elem_idx)) );
if (te_entry->value.num_items > 1) {
if (td_entry->value.num_items > 1) {
TRY( h5priv_free (f, entry) );
}
*retval = &td_entry->value;
return H5_SUCCESS;
}
+10 -11
View File
@@ -12,23 +12,20 @@
h5_size_t
h5t_get_num_meshes (
h5_file_t* const f,
const enum h5_oid type_id
const h5_oid_t type_id
) {
h5t_fdata_t* t = f->t;
hid_t topo_gid;
hid_t meshes_gid;
if (t->num_meshes >= 0) {
return t->num_meshes;
}
if (t->topo_gid < 0) {
TRY( h5tpriv_open_topo_group (f) );
}
TRY( t->num_meshes = h5_get_num_hdf5_groups (f, t->meshes_gid) );
TRY( topo_gid = h5priv_open_group (f, f->root_gid, H5T_CONTAINER_GRPNAME) );
TRY( meshes_gid = h5priv_open_group (
f, topo_gid, h5tpriv_meshes_grpnames[type_id]) );
return t->num_meshes;
return h5_get_num_hdf5_groups (f, meshes_gid);
}
/*!
Get the number of hierarchical mesh levels.
Get the number of hierarchical mesh levels for the current mesh.
\param[in] f File handle
@@ -78,6 +75,7 @@ h5t_get_num_elems (
h5_file_t* const f,
const h5_id_t cnode
) {
#pragma unused cnode
h5t_fdata_t* t = f->t;
if (t->cur_mesh < 0) {
@@ -107,6 +105,7 @@ h5t_get_num_vertices (
h5_file_t* const f,
h5_id_t cnode
) {
#pragma unused cnode
h5t_fdata_t* t = f->t;
if (t->cur_mesh < 0) {
+23 -17
View File
@@ -112,7 +112,7 @@ cmp_elems (
const h5_id_t elem_idx2
) {
h5t_fdata_t* t = f->t;
int num_vertices = t->ref_elem->num_faces[0];
int num_vertices = h5tpriv_ref_elem_get_num_vertices (t);
h5_id_t* indices1 = h5tpriv_get_loc_elem_vertex_indices (f, elem_idx1);
h5_id_t* indices2 = h5tpriv_get_loc_elem_vertex_indices (f, elem_idx2);
@@ -136,7 +136,7 @@ cmp_elems1 (
h5_id_t elem_idx2
) {
h5t_fdata_t *t = f->t;
int num_vertices = t->ref_elem->num_faces[0];
int num_vertices = h5tpriv_ref_elem_get_num_vertices (t);
h5_id_t* indices1 = h5tpriv_get_loc_elem_vertex_indices (f, elem_idx1);
h5_id_t* indices2 = h5tpriv_get_loc_elem_vertex_indices (f, elem_idx2);
@@ -184,7 +184,7 @@ qsort_cmp_elems1 (
binary search.
*/
h5_err_t
h5tpriv_sort_elems (
h5tpriv_sort_loc_elems (
h5_file_t* const f
) {
h5t_fdata_t* t = f->t;
@@ -281,9 +281,9 @@ h5t_map_global_vertex_indices2local (
Get local element idx of element given by its global idx.
\param[in] f File handle
\param[in] global_idx Global element id
\param[in] glb_idx Global element index
\return Local element id or error code.
\return Local element index or error code.
*/
h5_id_t
h5t_map_global_elem_idx2local (
@@ -316,18 +316,24 @@ h5t_map_global_elem_indices2local (
return H5_SUCCESS;
}
/*
*/
h5_err_t
h5tpriv_rebuild_global_2_local_map_of_vertices (
h5_file_t* const f
) {
h5t_fdata_t* t = f->t;
if (t->num_levels <= 0) return H5_SUCCESS;
h5_id_t local_vid = t->cur_level > 0 ?
t->num_vertices[t->cur_level-1] : 0;
for (; local_vid < t->num_vertices[t->num_levels-1]; local_vid++) {
t->map_vertex_g2l.items[local_vid].global_id =
t->vertices[local_vid].global_idx;
t->map_vertex_g2l.items[local_vid].local_id = local_vid;
h5_loc_idx_t loc_idx = t->cur_level > 0 ? t->num_vertices[t->cur_level-1] : 0;
h5_loc_idx_t num_loc_vertices = t->num_vertices[t->num_levels-1];
h5_idmap_el_t *item = &t->map_vertex_g2l.items[loc_idx];
for (; loc_idx < num_loc_vertices; loc_idx++, item++) {
item->global_id = t->vertices[loc_idx].idx;
item->local_id = loc_idx;
t->map_vertex_g2l.num_items++;
}
h5priv_sort_idmap (&t->map_vertex_g2l);
@@ -342,13 +348,13 @@ h5tpriv_rebuild_global_2_local_map_of_elems (
h5t_fdata_t* t = f->t;
if (t->num_levels <= 0) return H5_SUCCESS;
h5_id_t idx = t->cur_level > 0 ? t->num_elems[t->cur_level-1] : 0;
h5_id_t num_elems = t->num_elems[t->num_levels-1];
h5_idmap_el_t *item = &t->map_elem_g2l.items[idx];
h5_id_t loc_idx = t->cur_level > 0 ? t->num_elems[t->cur_level-1] : 0;
h5_id_t num_loc_elems = t->num_elems[t->num_levels-1];
h5_idmap_el_t *item = &t->map_elem_g2l.items[loc_idx];
for (; idx < num_elems; idx++, item++) {
item->global_id = h5tpriv_get_glb_elem_idx (f, idx);
item->local_id = idx;
for (; loc_idx < num_loc_elems; loc_idx++, item++) {
item->global_id = h5tpriv_get_glb_elem_idx (f, loc_idx);
item->local_id = loc_idx;
t->map_elem_g2l.num_items++;
}
h5priv_sort_idmap (&t->map_elem_g2l);
+1 -1
View File
@@ -14,7 +14,7 @@ h5tpriv_sort_vertices (
);
h5_err_t
h5tpriv_sort_elems (
h5tpriv_sort_loc_elems (
h5_file_t * const f
);
+27 -22
View File
@@ -71,8 +71,8 @@ create_vertex_type (
h5priv_insert_hdf5_type (
f,
dtypes->h5_vertex_t,
"global_idx",
HOFFSET (struct h5_vertex, global_idx),
"idx",
HOFFSET (struct h5_vertex, idx),
H5_ID_T) );
TRY(
h5priv_insert_hdf5_type (
@@ -206,9 +206,9 @@ create_tet_type (
TRY(
h5priv_insert_hdf5_type (
f,
dtypes->h5_triangle_t,
dtypes->h5_tet_t,
"neighbor_indices",
HOFFSET(struct h5_triangle, neighbor_indices),
HOFFSET (struct h5_tetrahedron, neighbor_indices),
dtypes->h5_4id_t) );
return H5_SUCCESS;
@@ -384,6 +384,7 @@ h5_err_t
h5tpriv_init_step (
h5_file_t* const f
) {
#pragma unused f
return H5_SUCCESS;
}
@@ -396,7 +397,7 @@ h5_err_t
h5tpriv_close_step (
h5_file_t* const f
) {
#pragma unused f
return H5_SUCCESS;
}
@@ -413,7 +414,8 @@ h5tpriv_open_topo_group (
h5_err_t
h5tpriv_open_meshes_group (
h5_file_t* const f
h5_file_t* const f,
const h5_oid_t type_id
) {
h5t_fdata_t* t = f->t;
@@ -423,24 +425,34 @@ h5tpriv_open_meshes_group (
TRY( (t->meshes_gid = h5priv_open_group (
f,
t->topo_gid,
h5tpriv_meshes_grpnames[t->mesh_type])) );
h5tpriv_meshes_grpnames[type_id])) );
t->mesh_type = type_id;
return H5_SUCCESS;
}
/*
Open HDF5 group with specific mesh
*/
h5_err_t
h5tpriv_open_mesh_group (
h5_file_t* const f
h5_file_t* const f,
const h5_oid_t type_id,
const h5_id_t id
) {
h5t_fdata_t* t = f->t;
if (t->meshes_gid < 0) {
TRY( h5tpriv_open_meshes_group (f) );
TRY( h5tpriv_open_meshes_group (f, type_id) );
}
snprintf (t->mesh_name, sizeof (t->mesh_name), "%lld", (long long)id);
TRY( (t->mesh_gid = h5priv_open_group (
f,
t->meshes_gid,
t->mesh_name)) );
t->cur_mesh = id;
return H5_SUCCESS;
}
@@ -451,14 +463,14 @@ h5_err_t
h5t_open_mesh (
h5_file_t* const f,
h5_id_t id,
const h5_oid_t type
const h5_oid_t type_id
) {
h5t_fdata_t* t = f->t;
TRY( h5t_close_mesh (f) );
if (t->num_meshes < 0) {
h5_size_t result = h5t_get_num_meshes (f, type);
h5_size_t result = h5t_get_num_meshes (f, type_id);
t->num_meshes = (result > 0 ? result : 0);
}
if ((id < -1) || (id >= t->num_meshes)) {
@@ -467,10 +479,7 @@ h5t_open_mesh (
if (id == -1) { /* append new mesh */
id = t->num_meshes;
}
t->mesh_type = type;
snprintf (t->mesh_name, sizeof (t->mesh_name), "%lld", (long long)id);
switch (type) {
switch (type_id) {
case H5_OID_TETRAHEDRON:
t->dsinfo_elems.type_id = t->dtypes.h5_tet_t;
t->methods = tet_funcs;
@@ -485,9 +494,7 @@ h5t_open_mesh (
return h5_error_internal (f, __FILE__, __func__, __LINE__);
}
TRY( h5tpriv_open_mesh_group (f) );
t->cur_mesh = id;
TRY( h5tpriv_open_mesh_group (f, type_id, id) );
if (id != t->num_meshes) { /* open existing */
TRY( h5tpriv_read_mesh (f) );
@@ -533,9 +540,7 @@ release_memory (
h5_file_t* const f
) {
TRY( h5tpriv_release_tags (f) );
if (f->t->methods.adjacency != NULL) {
TRY( (*f->t->methods.adjacency->release_internal_structs) (f) );
}
TRY( h5tpriv_release_adjacency_structs (f) );
TRY( release_elems (f) );
TRY( release_vertices (f) );
@@ -569,7 +574,7 @@ h5t_set_level (
t->cur_level = level_id;
if (level_id >= t->num_loaded_levels) {
TRY( (t->methods.adjacency->update_internal_structs)(f, prev_level+1) );
TRY( (h5tpriv_update_adjacency_structs)(f, prev_level+1) );
}
return H5_SUCCESS;
}
+2 -2
View File
@@ -4,8 +4,8 @@
h5_err_t h5tpriv_open_file ( h5_file_t * const f );
h5_err_t h5tpriv_close_file ( h5_file_t * const f );
h5_err_t h5tpriv_open_topo_group ( h5_file_t * const f );
h5_err_t h5tpriv_open_meshes_group ( h5_file_t * const f );
h5_err_t h5tpriv_open_mesh_group ( h5_file_t * const f );
h5_err_t h5tpriv_open_meshes_group ( h5_file_t * const f, const h5_oid_t );
h5_err_t h5tpriv_open_mesh_group ( h5_file_t * const f, const h5_oid_t, const h5_id_t );
h5_err_t h5tpriv_close_step ( h5_file_t * const f );
h5_err_t h5tpriv_init_fdata ( h5_file_t * const f );
+18 -16
View File
@@ -6,6 +6,8 @@ open_space_all (
h5_file_t* const f,
const hid_t dataset_id
) {
#pragma unused f
#pragma unused dataset_id
return H5S_ALL;
}
@@ -25,9 +27,6 @@ write_vertices (
if (t->num_vertices <= 0) return H5_SUCCESS; /* ???? */
if (t->mesh_gid < 0) {
TRY( h5tpriv_open_mesh_group (f) );
}
t->dsinfo_vertices.dims[0] = t->num_vertices[t->cur_level];
TRY( h5priv_write_dataset_by_name (
f,
@@ -55,10 +54,6 @@ write_elems (
if (t->num_elems <= 0) return H5_SUCCESS;
if (t->mesh_gid < 0) {
TRY( h5tpriv_open_mesh_group (f) );
}
TRY( h5priv_write_dataset_by_name (
f,
t->mesh_gid,
@@ -129,6 +124,8 @@ open_mem_space_vertices (
h5_file_t* const f,
hid_t dataset_id
) {
#pragma unused f
#pragma unused dataset_id
return H5S_ALL;
}
@@ -137,6 +134,8 @@ open_file_space_vertices (
h5_file_t* const f,
hid_t dataset_id
) {
#pragma unused f
#pragma unused dataset_id
return H5S_ALL;
}
@@ -147,7 +146,7 @@ read_num_vertices (
h5t_fdata_t* t = f->t;
if (t->mesh_gid < 0) {
TRY( h5tpriv_open_mesh_group (f) );
return h5_error_internal (f, __FILE__, __func__, __LINE__);
}
ssize_t num_bytes = t->num_levels*sizeof (t->num_vertices[0]);
TRY( t->num_vertices = h5priv_alloc (f, t->num_vertices, num_bytes) );
@@ -191,7 +190,7 @@ read_num_elems (
h5t_fdata_t* t = f->t;
if (t->mesh_gid < 0) {
TRY( h5tpriv_open_mesh_group (f) );
return h5_error_internal (f, __FILE__, __func__, __LINE__);
}
size_t size = t->num_levels * sizeof (t->num_elems[0]);
TRY( t->num_elems = h5priv_alloc (f, NULL, size) );
@@ -220,6 +219,8 @@ open_mem_space_elems (
h5_file_t* const f,
hid_t dataset_id
) {
#pragma unused f
#pragma unused dataset_id
return H5S_ALL;
}
@@ -228,6 +229,8 @@ open_file_space_elems (
h5_file_t* const f,
hid_t dataset_id
) {
#pragma unused f
#pragma unused dataset_id
return H5S_ALL;
}
@@ -239,8 +242,7 @@ read_elems (
) {
h5t_fdata_t* t = f->t;
TRY( (*t->methods.store->alloc_elems)(
f, 0, t->num_elems[t->num_levels-1]) );
TRY( h5tpriv_alloc_elems(f, 0, t->num_elems[t->num_levels-1]) );
TRY( h5priv_read_dataset_by_name (
f,
t->mesh_gid,
@@ -249,9 +251,9 @@ read_elems (
open_file_space_elems,
t->glb_elems.data) );
TRY( h5tpriv_sort_elems (f) );
TRY( h5tpriv_sort_loc_elems (f) );
TRY( h5tpriv_rebuild_global_2_local_map_of_elems (f) );
TRY( (*f->t->methods.read->init_loc_elems_struct) (f) );
TRY( h5tpriv_init_loc_elems_struct (f) );
return H5_SUCCESS;
}
@@ -270,15 +272,15 @@ h5tpriv_read_mesh (
h5_file_t* const f
) {
h5t_fdata_t* t = f->t;
if (f->t->mesh_gid < 0) {
TRY( h5tpriv_open_mesh_group (f) );
if (t->mesh_gid < 0) {
return h5_error_internal (f, __FILE__, __func__, __LINE__);
}
TRY( read_num_levels (f) );
TRY( read_num_vertices (f) );
TRY( read_num_elems (f) );
TRY( read_vertices (f) );
TRY( read_elems (f) );
TRY( (t->methods.adjacency->update_internal_structs)(f, 0) );
TRY( h5tpriv_update_adjacency_structs (f, 0) );
TRY( read_mtags (f) );
t->num_loaded_levels = t->num_levels;
return H5_SUCCESS;
+7
View File
@@ -25,4 +25,11 @@ h5tpriv_write_mesh (
extern struct h5t_read_methods h5tpriv_read_trim_methods;
extern struct h5t_read_methods h5tpriv_read_tetm_methods;
static inline h5_err_t
h5tpriv_init_loc_elems_struct (
h5_file_t* const f
) {
return (*f->t->methods.read->init_loc_elems_struct) (f);
}
#endif
+2 -2
View File
@@ -12,8 +12,8 @@ init_loc_elems_struct (
h5_id_t idx = 0;
const h5_id_t num_elems = t->num_elems[t->num_levels-1];
h5_id_t level_idx = 0;
int num_vertices = t->ref_elem->num_faces[0];
int num_edges = t->ref_elem->num_faces[1];
int num_vertices = h5tpriv_ref_elem_get_num_vertices (t);
int num_edges = h5tpriv_ref_elem_get_num_edges (t);
h5_tet_t* loc_elem = t->loc_elems.tets;
h5_tet_t* glb_elem = t->glb_elems.tets;
+2 -2
View File
@@ -12,8 +12,8 @@ init_loc_elems_struct (
h5_id_t idx = 0;
const h5_id_t num_elems = t->num_elems[t->num_levels-1];
h5_id_t level_idx = 0;
int num_vertices = t->ref_elem->num_faces[0];
int num_edges = t->ref_elem->num_faces[1];
int num_vertices = h5tpriv_ref_elem_get_num_vertices (t);
int num_edges = h5tpriv_ref_elem_get_num_edges (t);
h5_triangle_t* loc_elem = t->loc_elems.tris;
h5_triangle_t* glb_elem = t->glb_elems.tris;
+11
View File
@@ -0,0 +1,11 @@
#ifndef __H5T_REF_ELEMENTS_PRIVATE_H
#define __H5T_REF_ELEMENTS_PRIVATE_H
#define h5tpriv_ref_elem_get_num_vertices(this) (this->ref_elem->num_faces[0])
#define h5tpriv_ref_elem_get_num_edges(this) (this->ref_elem->num_faces[1])
#define h5tpriv_ref_elem_get_num_triangles(this) (this->ref_elem->num_faces[2])
#define h5tpriv_ref_elem_get_num_faces(this, dim) (this->ref_elem->num_faces[dim])
#define h5tpriv_ref_elem_get_dim(this) (this->ref_elem->dim)
#endif
+4 -3
View File
@@ -68,7 +68,7 @@ h5t_begin_iterate_entities (
h5t_entity_iterator_t* iter,
const int codim
) {
return (*f->t->methods.retrieve->init_iterator)(f, iter, codim);
return h5tpriv_init_iterator (f, iter, codim);
}
/*!
@@ -81,8 +81,8 @@ iterate_faces (
) {
h5_idlist_t* entry;
h5_size_t i;
int dim = iter->ref_elem->dim - iter->codim;
int num_faces = iter->ref_elem->num_faces[dim] - 1;
int dim = h5tpriv_ref_elem_get_dim (iter) - iter->codim;
int num_faces = h5tpriv_ref_elem_get_num_faces (iter, dim) - 1;
do {
if (iter->face_idx >= num_faces) {
if (h5tpriv_skip_to_next_elem_on_level (f, iter) == H5_NOK) {
@@ -143,6 +143,7 @@ h5t_end_iterate_entities (
h5_file_t* const f,
h5t_entity_iterator_t* iter
) {
#pragma unused f
iter->face_idx = -1;
iter->elem_idx = -1;
iter->codim = -1;
+9
View File
@@ -16,4 +16,13 @@ h5tpriv_elem_is_on_cur_level (
extern struct h5t_retrieve_methods h5tpriv_trim_retrieve_methods;
extern struct h5t_retrieve_methods h5tpriv_tetm_retrieve_methods;
static inline h5_err_t
h5tpriv_init_iterator (
h5_file_t* f,
h5t_entity_iterator_t* const iter,
const int codim
) {
return (*f->t->methods.retrieve->init_iterator) (f, iter, codim);
}
#endif
+1 -1
View File
@@ -13,7 +13,7 @@ begin_iterate_entities (
iter->elem_idx = -1;
iter->codim = codim;
iter->ref_elem = f->t->ref_elem;
switch (iter->ref_elem->dim - codim) {
switch (h5tpriv_ref_elem_get_dim (iter) - codim) {
case 0: // iterate vertices
iter->find = h5tpriv_find_tv2;
return h5tpriv_skip_to_next_elem_on_level (f, iter);
+58 -40
View File
@@ -42,7 +42,7 @@ assign_global_vertex_indices (
for (local_idx = 0;
local_idx < t->num_vertices[t->num_levels-1];
local_idx++) {
t->vertices[local_idx].global_idx = local_idx;
t->vertices[local_idx].idx = local_idx;
}
return H5_SUCCESS;
@@ -52,7 +52,7 @@ assign_global_vertex_indices (
Assign unique global indices to new elements.
*/
static h5_err_t
assign_global_elem_indices (
assign_glb_elem_indices (
h5_file_t* const f
) {
h5t_fdata_t* const t = f->t;
@@ -62,32 +62,55 @@ assign_global_elem_indices (
/*
simple in serial runs: global index = local index
*/
h5_id_t local_idx = (t->cur_level == 0) ? 0 : t->num_elems[t->cur_level-1];
int num_vertices = t->ref_elem->num_faces[0];
h5_loc_idx_t loc_idx = (t->cur_level == 0) ? 0 : t->num_elems[t->cur_level-1];
for (; local_idx < t->num_elems[t->cur_level]; local_idx++) {
h5_generic_elem_t *loc_elem = h5tpriv_get_loc_elem (f, local_idx);
h5_generic_elem_t *glb_elem = h5tpriv_get_glb_elem (f, local_idx);
for (; loc_idx < t->num_elems[t->cur_level]; loc_idx++) {
h5_generic_elem_t *glb_elem = h5tpriv_get_glb_elem (f, loc_idx);
glb_elem->idx = loc_idx;
}
return H5_SUCCESS;
}
static h5_err_t
assign_glb_elem_data (
h5_file_t* const f
) {
h5t_fdata_t* const t = f->t;
if (t->cur_level < 0) return H5_SUCCESS; /* no level defined */
/*
simple in serial runs: global index = local index
*/
h5_loc_idx_t loc_idx = (t->cur_level == 0) ? 0 : t->num_elems[t->cur_level-1];
int num_vertices = h5tpriv_ref_elem_get_num_vertices (t);
int dim = h5tpriv_ref_elem_get_dim (t) - 1;
int num_faces = h5tpriv_ref_elem_get_num_faces(t, dim);
for (; loc_idx < t->num_elems[t->cur_level]; loc_idx++) {
h5_generic_elem_t *loc_elem = h5tpriv_get_loc_elem (f, loc_idx);
h5_generic_elem_t *glb_elem = h5tpriv_get_glb_elem (f, loc_idx);
glb_elem->idx = local_idx;
glb_elem->parent_idx = loc_elem->parent_idx;
glb_elem->child_idx = loc_elem->child_idx;
h5_id_t* glb_indices = h5tpriv_get_glb_elem_vertex_indices (f, local_idx);
h5_id_t* loc_indices = h5tpriv_get_loc_elem_vertex_indices (f, local_idx);
h5_id_t* glb_indices = h5tpriv_get_glb_elem_vertex_indices (f, loc_idx);
h5_id_t* loc_indices = h5tpriv_get_loc_elem_vertex_indices (f, loc_idx);
memcpy (glb_indices, loc_indices, num_vertices*sizeof(*glb_indices));
glb_indices = h5tpriv_get_glb_elem_neighbor_indices (f, local_idx);
loc_indices = h5tpriv_get_loc_elem_neighbor_indices (f, local_idx);
glb_indices = h5tpriv_get_glb_elem_neighbor_indices (f, loc_idx);
loc_indices = h5tpriv_get_loc_elem_neighbor_indices (f, loc_idx);
memcpy (glb_indices, loc_indices, num_vertices*sizeof(*glb_indices));
memcpy (glb_indices, loc_indices, num_faces*sizeof(*glb_indices));
}
return H5_SUCCESS;
}
h5_id_t
h5t_add_level (
h5_file_t* const f
@@ -150,7 +173,7 @@ h5t_begin_store_vertices (
h5_id_t
h5t_store_vertex (
h5_file_t* const f, /*!< file handle */
const h5_id_t global_idx, /*!< global vertex id or -1 */
const h5_id_t glb_idx, /*!< global vertex id or -1 */
const h5_float64_t P[3] /*!< coordinates */
) {
h5t_fdata_t* const t = f->t;
@@ -170,7 +193,7 @@ h5t_store_vertex (
h5_id_t local_idx = ++t->last_stored_vid;
h5_vertex_t *vertex = &t->vertices[local_idx];
vertex->global_idx = global_idx; /* ID from mesher, replaced later!*/
vertex->idx = glb_idx; /* ID from mesher, replaced later!*/
memcpy (&vertex->P, P, sizeof (vertex->P));
return local_idx;
}
@@ -214,7 +237,7 @@ h5t_begin_store_elems (
*/
size_t nel = 2097152 > 5*new ? 2097152 : 5*new;
TRY( h5tpriv_resize_te_htab (f, nel) );
return (*t->methods.store->alloc_elems) (f, cur, new);
return h5tpriv_alloc_elems (f, cur, new);
}
@@ -261,14 +284,14 @@ h5t_store_elem (
h5tpriv_set_loc_elem_child_idx (f, elem_idx, -1);
h5tpriv_set_loc_elem_level_idx (f, elem_idx, t->cur_level);
h5_id_t* loc_elem_vertex_indices = h5tpriv_get_loc_elem_vertex_indices (f, elem_idx);
int num_vertices = t->ref_elem->num_faces[0];
memcpy (loc_elem_vertex_indices, vertex_indices, sizeof (*vertex_indices) * num_vertices);
h5tpriv_sort_local_vertex_indices (f, loc_elem_vertex_indices, num_vertices);
h5_id_t* loc_vertex_indices = h5tpriv_get_loc_elem_vertex_indices (f, elem_idx);
int num_vertices = h5tpriv_ref_elem_get_num_vertices (t);
memcpy (loc_vertex_indices, vertex_indices, sizeof (*vertex_indices)*num_vertices);
h5tpriv_sort_local_vertex_indices (f, loc_vertex_indices, num_vertices);
/* add edges to directory which maps edges to elements */
/* add edges to map edges -> elements */
h5_id_t face_idx;
int num_faces = t->ref_elem->num_faces[1];
int num_faces = h5tpriv_ref_elem_get_num_edges (t);
h5_idlist_t* retval;
for (face_idx = 0; face_idx < num_faces; face_idx++) {
// add edges to neighbour struct
@@ -288,13 +311,21 @@ h5t_end_store_elems (
h5t_fdata_t* const t = f->t;
t->num_elems[t->cur_level] = t->last_stored_eid+1;
TRY( assign_global_elem_indices (f) );
TRY( h5tpriv_sort_elems (f) );
TRY( h5tpriv_sort_loc_elems (f) );
/* assign global indices to new indices */
TRY( assign_glb_elem_indices (f) );
/* rebuild map: global index -> local_index */
TRY( h5tpriv_rebuild_global_2_local_map_of_elems (f) );
/* mesh specific finalize */
TRY( (t->methods.store->end_store_elems)(f) );
/* setup global element data */
TRY( assign_glb_elem_data (f) );
return H5_SUCCESS;
}
@@ -362,13 +393,13 @@ h5t_pre_refine (
Refine previously marked elements.
*/
h5_err_t
h5t_refine (
h5t_refine_marked_elems (
h5_file_t* const f
) {
h5t_fdata_t* const t = f->t;
int i;
for (i = 0; i < t->marked_entities.num_items; i++) {
TRY( h5t_refine_elem (f, t->marked_entities.items[i]) );
TRY( h5tpriv_refine_elem (f, t->marked_entities.items[i]) );
}
return H5_SUCCESS;
}
@@ -399,25 +430,12 @@ h5t_begin_refine_elems (
}
/*!
Refine element \c elem_id. Actually we set a mark only ...
\return local id of first new element or \c -1
*/
h5_id_t
h5t_refine_elem (
h5_file_t* const f,
const h5_id_t elem_id
) {
return h5t_mark_entity (f, elem_id);
}
h5_err_t
h5t_end_refine_elems (
h5_file_t* const f
) {
TRY( h5t_pre_refine (f) );
TRY( h5t_refine (f) );
TRY( h5t_refine_marked_elems (f) );
TRY( h5t_post_refine (f) );
return H5_SUCCESS;
+28
View File
@@ -4,4 +4,32 @@
extern struct h5t_store_methods h5tpriv_trim_store_methods;
extern struct h5t_store_methods h5tpriv_tetm_store_methods;
static inline h5_err_t
h5tpriv_get_direct_children_of_edge (
h5_file_t* const f,
h5_loc_idx_t face_idx,
h5_loc_idx_t elem_idx,
h5_loc_id_t children[2]
) {
return (*f->t->methods.store->get_direct_children_of_edge) (
f, face_idx, elem_idx, children);
}
static inline h5_err_t
h5tpriv_alloc_elems (
h5_file_t* const f,
const size_t cur,
const size_t new
) {
return (*f->t->methods.store->alloc_elems) (f, cur, new);
}
static inline h5_id_t
h5tpriv_refine_elem (
h5_file_t * const f,
const h5_id_t local_eid
) {
return (*f->t->methods.store->refine_elem)(f, local_eid);
}
#endif
+104 -28
View File
@@ -41,9 +41,9 @@ alloc_tets (
static h5_err_t
get_direct_children_of_edge (
h5_file_t* const f,
h5_id_t face_idx,
h5_id_t elem_idx,
h5_id_t children[2]
h5_loc_idx_t face_idx,
h5_loc_idx_t elem_idx,
h5_loc_id_t children[2]
) {
/*
Please read the note about the offsets in the corresponding file
@@ -56,8 +56,8 @@ get_direct_children_of_edge (
{1,3}, // edge 4
{2,3} // edge 5
};
int num_faces = f->t->ref_elem->num_faces[1];
if ((face_idx < 0) || ( face_idx >= num_faces)) {
h5_loc_idx_t num_faces = h5tpriv_ref_elem_get_num_edges (f->t);
if ((face_idx < 0) || (face_idx >= num_faces)) {
return h5_error_internal (f, __FILE__, __func__, __LINE__);
}
children[0] = h5tpriv_build_edge_id (face_idx, elem_idx+offs[face_idx][0]);
@@ -75,8 +75,8 @@ get_direct_children_of_edge (
static h5_id_t
bisect_edge (
h5_file_t* const f,
const h5_id_t face_idx,
const h5_id_t elem_idx
const h5_loc_idx_t face_idx,
const h5_loc_idx_t elem_idx
) {
h5t_fdata_t* t = f->t;
h5_idlist_t* retval;
@@ -88,17 +88,18 @@ bisect_edge (
check wether one of the found elements has been refined
*/
size_t i;
for ( i = 0; i < retval->num_items; i++ ) {
h5_id_t idx = h5tpriv_get_elem_idx ( retval->items[i] );
for (i = 0; i < retval->num_items; i++) {
h5_id_t idx = h5tpriv_get_elem_idx (retval->items[i]);
h5_id_t child_idx = h5tpriv_get_loc_elem_child_idx (f, idx);
if ( child_idx >= 0 ) {
if (child_idx >= 0) {
/*
this element has been refined!
return bisecting point
*/
h5_id_t face_id = h5tpriv_get_face_idx (
retval->items[i] );
h5_id_t kids[2], edge0[2], edge1[2];
h5_loc_idx_t face_id = h5tpriv_get_face_idx (
retval->items[i]);
h5_loc_id_t kids[2];
h5_loc_idx_t edge0[2], edge1[2];
TRY( get_direct_children_of_edge (
f,
face_id,
@@ -115,17 +116,17 @@ bisect_edge (
/*
None of the elements has been refined -> add new vertex.
*/
h5_id_t indices[2];
h5_loc_idx_t indices[2];
TRY( h5t_get_vertex_indices_of_edge2 (f, face_idx, elem_idx, indices) );
h5_float64_t *P0 = t->vertices[indices[0]].P;
h5_float64_t *P1 = t->vertices[indices[1]].P;
h5_float64_t* P0 = t->vertices[indices[0]].P;
h5_float64_t* P1 = t->vertices[indices[1]].P;
h5_float64_t P[3];
P[0] = ( P0[0] + P1[0] ) / 2.0;
P[1] = ( P0[1] + P1[1] ) / 2.0;
P[2] = ( P0[2] + P1[2] ) / 2.0;
P[0] = (P0[0] + P1[0]) / 2.0;
P[1] = (P0[1] + P1[1]) / 2.0;
P[2] = (P0[2] + P1[2]) / 2.0;
return h5t_store_vertex ( f, -1, P );
return h5t_store_vertex (f, -1, P);
}
/*!
@@ -136,11 +137,11 @@ bisect_edge (
static h5_id_t
refine_tet (
h5_file_t* const f,
const h5_id_t elem_idx
const h5_loc_idx_t elem_idx
) {
h5t_fdata_t* t = f->t;
h5_id_t vertices[10];
h5_id_t elem_idx_of_first_child;
h5_loc_idx_t vertices[10];
h5_loc_idx_t elem_idx_of_first_child;
h5_tet_t* el = &t->loc_elems.tets[elem_idx];
if ( el->child_idx >= 0 )
@@ -164,7 +165,7 @@ refine_tet (
/*
add new tets
*/
h5_id_t new_elem[4];
h5_loc_idx_t new_elem[4];
new_elem[0] = vertices[0]; // child 0
new_elem[1] = vertices[4];
@@ -214,17 +215,92 @@ refine_tet (
new_elem[3] = vertices[9];
TRY( h5t_store_elem (f, elem_idx, new_elem) );
t->glb_elems.tets[elem_idx].child_idx = elem_idx_of_first_child;
// 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]--;
return elem_idx_of_first_child;
}
h5_err_t
end_store_elems (
h5_file_t* f
static inline h5_loc_idx_t
compute_neighbor_of_face (
h5_file_t* const f,
h5_loc_idx_t elem_idx,
const h5_loc_idx_t face_idx
) {
h5t_fdata_t * const t = f->t;
h5_idlist_t* td;
h5_loc_idx_t neighbor_idx = -2;
do {
TRY( h5tpriv_find_td2 (
f,
face_idx,
elem_idx,
&td) );
if (td == NULL) {
return h5_error_internal (
f, __FILE__, __func__, __LINE__);
}
if (td->num_items == 1) {
// neighbor is coarser or face is on the border
elem_idx = t->loc_elems.tets[elem_idx].parent_idx;
if (elem_idx == -1) {
// we are on the level of the macro grid
neighbor_idx = -1;
}
} else if (td->num_items == 2) {
// neighbor has same level of coarsness
if (h5tpriv_get_elem_idx(td->items[0]) == elem_idx) {
neighbor_idx = h5tpriv_get_elem_idx (td->items[1]);
} else {
neighbor_idx = h5tpriv_get_elem_idx (td->items[0]);
}
} else {
return h5_error_internal (
f, __FILE__, __func__, __LINE__);
}
} while (neighbor_idx < -1);
return neighbor_idx;
}
/*
New level has been added, compute neighbores for new elements.
*/
static inline h5_err_t
compute_neighbors_of_new_elems (
h5_file_t* const f
) {
h5t_fdata_t * const t = f->t;
if (t->cur_level < 0) {
// or should we consider this as an error?
return H5_SUCCESS;
}
h5_loc_idx_t elem_idx = t->cur_level == 0 ? 0 : t->num_elems[t->cur_level-1];
const h5_loc_idx_t last_idx = t->num_elems[t->cur_level] - 1;
h5_tet_t *el = &t->loc_elems.tets[elem_idx];
while (elem_idx <= last_idx) {
h5_loc_idx_t face_idx = 0;
for (; face_idx < 4; face_idx++) {
el->neighbor_indices[face_idx] =
compute_neighbor_of_face (f, elem_idx, face_idx);
}
elem_idx++;
el++;
}
return H5_SUCCESS;
}
static h5_err_t
end_store_elems (
h5_file_t* const f
) {
h5t_fdata_t* const t = f->t;
TRY( h5tpriv_update_adjacency_structs (f, t->cur_level) );
TRY( compute_neighbors_of_new_elems (f) );
return H5_SUCCESS;
}
+111 -88
View File
@@ -40,11 +40,10 @@ alloc_triangles (
static h5_err_t
get_direct_children_of_edge (
h5_file_t * const f,
const h5_id_t face_idx,
const h5_id_t elem_idx, // index of the first child!
h5_id_t children[2]
const h5_loc_idx_t face_idx,
const h5_loc_idx_t elem_idx,
h5_loc_id_t children[2]
) {
int num_faces = f->t->ref_elem->num_faces[1];
/*
Please note: The face index of the children and the father is
always the same. The only think we have to know, is the offset
@@ -60,22 +59,25 @@ get_direct_children_of_edge (
{0,2}, // edge 1
{1,2} // edge 2
};
if ( ( face_idx < 0 ) || ( face_idx >= num_faces ) ) {
return h5_error_internal ( f, __FILE__, __func__, __LINE__ );
h5_loc_idx_t num_faces = h5tpriv_ref_elem_get_num_edges (f->t);
if ((face_idx < 0) || (face_idx >= num_faces)) {
return h5_error_internal (f, __FILE__, __func__, __LINE__);
}
children[0] = h5tpriv_build_edge_id ( face_idx, elem_idx+off[face_idx][0] );
children[1] = h5tpriv_build_edge_id ( face_idx, elem_idx+off[face_idx][1] );
children[0] = h5tpriv_build_edge_id (face_idx, elem_idx+off[face_idx][0]);
children[1] = h5tpriv_build_edge_id (face_idx, elem_idx+off[face_idx][1]);
return H5_SUCCESS;
}
static h5_id_t
/*
Bisect edge and return local vertex index of the bisecting point.
*/
static h5_loc_idx_t
bisect_edge (
h5_file_t* const f,
const h5_id_t face_idx,
const h5_id_t elem_idx
const h5_loc_idx_t face_idx,
const h5_loc_idx_t elem_idx
) {
h5t_fdata_t* t = f->t;
h5t_fdata_t* const t = f->t;
h5_idlist_t* retval;
/*
get all elements sharing the given edge
@@ -85,25 +87,25 @@ bisect_edge (
check wether one of the found elements has been refined
*/
size_t i;
for ( i = 0; i < retval->num_items; i++ ) {
h5_id_t idx = h5tpriv_get_elem_idx ( retval->items[i] );
h5_id_t child_idx = h5tpriv_get_loc_elem_child_idx (f, idx);
if ( child_idx >= 0 ) {
for (i = 0; i < retval->num_items; i++) {
h5_loc_idx_t idx = h5tpriv_get_elem_idx (retval->items[i]);
h5_loc_idx_t child_idx = h5tpriv_get_loc_elem_child_idx (f, idx);
if (child_idx >= 0) {
/*
this element has been refined!
return bisecting point
*/
h5_id_t face_id = h5tpriv_get_face_idx (
retval->items[i] );
h5_id_t kids[2], edge0[2], edge1[2];
TRY ( get_direct_children_of_edge (
h5_loc_id_t kids[2];
TRY( get_direct_children_of_edge (
f,
face_id,
h5tpriv_get_face_idx (retval->items[i]),
child_idx,
kids ) );
TRY ( h5t_get_vertex_indices_of_edge ( f, kids[0], edge0 ) );
TRY ( h5t_get_vertex_indices_of_edge ( f, kids[1], edge1 ) );
if ( (edge0[0] == edge1[0]) || (edge0[0] == edge1[1]) )
h5_loc_idx_t edge0[2], edge1[2];
TRY( h5t_get_vertex_indices_of_edge ( f, kids[0], edge0 ) );
TRY( h5t_get_vertex_indices_of_edge ( f, kids[1], edge1 ) );
if ((edge0[0] == edge1[0]) || (edge0[0] == edge1[1]))
return edge0[0];
else
return edge0[1];
@@ -112,50 +114,50 @@ bisect_edge (
/*
None of the elements has been refined -> add new vertex.
*/
h5_id_t indices[2];
h5_loc_idx_t indices[2];
TRY( h5t_get_vertex_indices_of_edge2 (f, face_idx, elem_idx, indices) );
h5_float64_t *P0 = t->vertices[indices[0]].P;
h5_float64_t *P1 = t->vertices[indices[1]].P;
h5_float64_t* P0 = t->vertices[indices[0]].P;
h5_float64_t* P1 = t->vertices[indices[1]].P;
h5_float64_t P[3];
P[0] = ( P0[0] + P1[0] ) / 2.0;
P[1] = ( P0[1] + P1[1] ) / 2.0;
P[2] = ( P0[2] + P1[2] ) / 2.0;
P[0] = (P0[0] + P1[0]) / 2.0;
P[1] = (P0[1] + P1[1]) / 2.0;
P[2] = (P0[2] + P1[2]) / 2.0;
return h5t_store_vertex ( f, -1, P );
return h5t_store_vertex (f, -1, P);
}
/*!
Refine triangle \c local_eid
\return Local id of first new triangle or \c -1
\return Local index of first new triangle or \c H5_ERR
*/
static h5_id_t
static h5_loc_idx_t
refine_triangle (
h5_file_t* const f,
const h5_id_t elem_idx
const h5_loc_idx_t elem_idx
) {
h5t_fdata_t *t = f->t;
h5_id_t vertices[6]; // local vertex indices
h5_id_t elem_idx_of_first_child;
h5_triangle_t *el = &t->loc_elems.tris[elem_idx];
h5t_fdata_t* const t = f->t;
h5_loc_idx_t vertices[6]; // local vertex indices
h5_loc_idx_t elem_idx_of_first_child;
h5_triangle_t* el = &t->loc_elems.tris[elem_idx];
if ( el->child_idx >= 0 )
if (el->child_idx >= 0)
return h5_error (
f,
H5_ERR_INVAL,
"Element %lld already refined.",
(long long)elem_idx );
(long long)elem_idx);
vertices[0] = el->vertex_indices[0];
vertices[1] = el->vertex_indices[1];
vertices[2] = el->vertex_indices[2];
vertices[3] = bisect_edge( f, 0, elem_idx );
vertices[4] = bisect_edge( f, 1, elem_idx );
vertices[5] = bisect_edge( f, 2, elem_idx );
vertices[3] = bisect_edge (f, 0, elem_idx);
vertices[4] = bisect_edge (f, 1, elem_idx);
vertices[5] = bisect_edge (f, 2, elem_idx);
h5_id_t new_elem[3];
h5_loc_idx_t new_elem[3];
new_elem[0] = vertices[0]; // V[0] < V[3] , V[4]
new_elem[1] = vertices[3];
@@ -184,54 +186,75 @@ refine_triangle (
return elem_idx_of_first_child;
}
/*
Compute the neighbors in the macro-grid.
*/
static h5_err_t
compute_neighbors_in_macrogrid (
h5_file_t* const f
static inline h5_loc_idx_t
compute_neighbor_of_face (
h5_file_t* const f,
h5_loc_idx_t elem_idx,
const h5_loc_idx_t face_idx
) {
h5t_fdata_t *t = f->t;
h5_id_t elem_idx = 0;
h5_triangle_t *el = &t->loc_elems.tris[0];
h5_id_t num_elems = t->num_elems[0];
for (;elem_idx < num_elems; elem_idx++, el++) {
int face_idx = 0;
for (; face_idx < 3; face_idx++) {
h5_idlist_t* te;
TRY( h5tpriv_find_te2 (
f,
face_idx,
elem_idx,
&te) );
if (te == NULL) {
} else {
}
h5t_fdata_t * const t = f->t;
h5_idlist_t* te;
h5_loc_idx_t neighbor_idx = -2;
do {
TRY( h5tpriv_find_te2 (
f,
face_idx,
elem_idx,
&te) );
if (te == NULL) {
return h5_error_internal (
f, __FILE__, __func__, __LINE__);
}
}
return H5_SUCCESS;
if (te->num_items == 1) {
// neighbor is coarser or face is on the border
elem_idx = t->loc_elems.tris[elem_idx].parent_idx;
if (elem_idx == -1) {
// we are on the level of the macro grid
neighbor_idx = -1;
}
} else if (te->num_items == 2) {
// neighbor has same level of coarsness
if (h5tpriv_get_elem_idx(te->items[0]) == elem_idx) {
neighbor_idx = h5tpriv_get_elem_idx (te->items[1]);
} else {
neighbor_idx = h5tpriv_get_elem_idx (te->items[0]);
}
} else {
return h5_error_internal (
f, __FILE__, __func__, __LINE__);
}
} while (neighbor_idx < -1);
return neighbor_idx;
}
static h5_err_t
compute_neighbors_for_refined_elems (
/*
New level has been added, compute neighbores for new elements.
*/
static inline h5_err_t
compute_neighbors_of_new_elems (
h5_file_t* const f
) {
h5t_fdata_t *t = f->t;
return H5_SUCCESS;
}
static h5_err_t
compute_neighbors (
h5_file_t* const f
) {
h5t_fdata_t *t = f->t;
if (t->cur_level == 0) {
TRY( compute_neighbors_in_macrogrid (f) );
} else {
TRY( compute_neighbors_for_refined_elems (f) );
h5t_fdata_t * const t = f->t;
if (t->cur_level < 0) {
// or should we consider this as an error?
return H5_SUCCESS;
}
h5_loc_idx_t elem_idx = t->cur_level == 0 ? 0 : t->num_elems[t->cur_level-1];
const h5_loc_idx_t last_idx = t->num_elems[t->cur_level] - 1;
h5_triangle_t *el = &t->loc_elems.tris[elem_idx];
while (elem_idx <= last_idx) {
h5_loc_idx_t face_idx = 0;
for (; face_idx < 3; face_idx++) {
el->neighbor_indices[face_idx] =
compute_neighbor_of_face (f, elem_idx, face_idx);
}
elem_idx++;
el++;
}
return H5_SUCCESS;
}
@@ -239,10 +262,10 @@ static h5_err_t
end_store_elems (
h5_file_t* const f
) {
h5t_fdata_t *t = f->t;
h5t_fdata_t* t = f->t;
TRY( (t->methods.adjacency->update_internal_structs)(f, t->cur_level) );
TRY( compute_neighbors (f) );
TRY( h5tpriv_update_adjacency_structs (f, t->cur_level) );
TRY( compute_neighbors_of_new_elems (f) );
return H5_SUCCESS;
}
+32 -30
View File
@@ -25,8 +25,8 @@ init_container (
/*
Initialize tag container for current mesh and level.
*/
h5_err_t
h5tpriv_init_mtagsets (
static h5_err_t
init_mtagsets (
h5_file_t * const f,
size_t ntags
) {
@@ -106,8 +106,8 @@ h5tpriv_release_tags (
\return H5_SUCCESS or error code
*/
h5_err_t
h5tpriv_add_mtagset (
static h5_err_t
add_mtagset (
h5_file_t * const f,
char * name,
h5_id_t type,
@@ -119,7 +119,7 @@ h5tpriv_add_mtagset (
Initialize data structure for m-tagsets, if not already done.
*/
if ( t->mtags.names == NULL ) {
TRY ( h5tpriv_init_mtagsets ( f, 521 ) );
TRY( init_mtagsets (f, 521) );
}
/*
ToDo: Resize!
@@ -171,7 +171,7 @@ h5t_add_mtagset (
char * name,
h5_id_t type
) {
return h5tpriv_add_mtagset ( f, name, type, 0 );
return add_mtagset ( f, name, type, 0 );
}
@@ -347,8 +347,8 @@ h5t_get_mtagset_info (
\return H5_SUCCESS or error code
*/
h5_err_t
h5tpriv_set_mtag (
static h5_err_t
set_mtag (
h5_file_t *const f,
H5T_Tagset *tagset,
const h5_id_t id,
@@ -433,16 +433,17 @@ h5t_set_mtag_by_name (
) {
H5T_Tagset *tagset;
TRY ( h5t_open_mtagset ( f, name, &tagset ) );
return h5tpriv_set_mtag ( f, tagset, id, size, val );
return set_mtag ( f, tagset, id, size, val );
}
static h5_err_t
_get_tag_valp (
h5_file_t *const f,
const H5T_Tagset *tagset,
get_tag_valp (
h5_file_t* const f,
const H5T_Tagset* tagset,
const h5_id_t entity_id,
h5t_tagval_t **valp
h5t_tagval_t** const valp
) {
#pragma unused f
h5_id_t el_idx = h5tpriv_get_elem_idx ( entity_id );
h5_id_t subentity_id = h5tpriv_get_face_idx ( entity_id );
h5_id_t type_id = h5tpriv_get_entity_type ( entity_id );
@@ -458,7 +459,7 @@ _get_tag_valp (
return H5_NOK; /* no value set for this subentity */
}
size_t k = tagselem->idx[i];
valp = &tagselem->valp[k];
*valp = tagselem->valp[k];
return H5_SUCCESS;
}
@@ -479,11 +480,11 @@ h5t_get_tag (
h5_file_t *const f,
const H5T_Tagset *tagset,
const h5_id_t entity_id,
size_t *dim,
void *vals
size_t* const dim,
void* const vals
) {
h5t_tagval_t *tagval;
TRY ( _get_tag_valp ( f, tagset, entity_id, &tagval ) );
TRY ( get_tag_valp ( f, tagset, entity_id, &tagval ) );
if ( (*dim > tagval->size) || (vals == NULL) ) {
*dim = tagval->size;
@@ -527,8 +528,8 @@ h5t_get_mtag_by_name (
*/
h5_err_t
h5t_remove_mtag (
h5_file_t *const f,
H5T_Tagset *tagset,
h5_file_t* const f,
H5T_Tagset* tagset,
const h5_id_t id
) {
h5_id_t el_idx = h5tpriv_get_elem_idx ( id );
@@ -586,8 +587,10 @@ h5t_remove_mtag_by_name (
static hid_t
open_space_all (
h5_file_t * const f,
hid_t dataset_id
const hid_t dataset_id
) {
#pragma unused f
#pragma unused dataset_id
return H5S_ALL;
}
@@ -860,11 +863,11 @@ read_tagset (
add tagset and set values
*/
H5T_Tagset* tagset;
TRY( h5tpriv_add_mtagset (f, name, type, &tagset) );
TRY( add_mtagset (f, name, type, &tagset) );
for (ent_idx = 0; ent_idx < num_entities; ent_idx++) {
h5t_tag_idx_t *entity = &entities[ent_idx];
size_t dim = (entity+1)->idx - entity->idx;
TRY( h5tpriv_set_mtag (
TRY( set_mtag (
f,
tagset,
entity->eid,
@@ -909,8 +912,8 @@ h5tpriv_read_tag_container (
\return number of tagsets
*/
h5_ssize_t
h5tpriv_get_tagset_names_of_entity (
static h5_ssize_t
get_tagset_names_of_entity (
h5_file_t * const f,
h5t_tagcontainer_t *ctn,
h5_id_t entity_id,
@@ -928,7 +931,7 @@ h5tpriv_get_tagset_names_of_entity (
&ctn->sets));
H5T_Tagset *tset = (H5T_Tagset*)__retval;
h5t_tagval_t *tval;
if (_get_tag_valp (f, tset, entity_id, &tval) != H5_SUCCESS) {
if (get_tag_valp (f, tset, entity_id, &tval) != H5_SUCCESS) {
continue;
}
if ( (names != NULL) && (_dim <= dim) ) {
@@ -941,11 +944,10 @@ h5tpriv_get_tagset_names_of_entity (
h5_ssize_t
h5t_get_mtagset_names_of_entity (
h5_file_t * const f,
h5_id_t entity_id,
h5_file_t* const f,
const h5_id_t entity_id,
char *names[],
h5_size_t dim
const h5_size_t dim
) {
return h5tpriv_get_tagset_names_of_entity (
f, &f->t->mtags, entity_id, names, dim);
return get_tagset_names_of_entity (f, &f->t->mtags, entity_id, names, dim);
}
+3 -27
View File
@@ -2,7 +2,7 @@
#define __H5T_TYPES_PRIVATE_H
typedef struct h5_vertex {
h5_id_t global_idx;
h5_id_t idx;
h5_coord3d_t P;
} h5_vertex_t;
@@ -71,7 +71,6 @@ struct h5t_retrieve_methods {
h5_err_t (*init_iterator)(h5_file_t* const, h5t_entity_iterator_t*, const int);
};
struct h5t_access_methods {
h5_generic_elem_t* (*get_loc_elem)(
h5_file_t* const, const h5_id_t);
@@ -126,7 +125,6 @@ struct h5t_access_methods {
h5_file_t* const, const h5_id_t, const h5_id_t);
h5_id_t (*set_glb_elem_neighbor_idx)(
h5_file_t* const, const h5_id_t, const h5_id_t, const h5_id_t);
};
struct h5t_read_methods {
@@ -136,30 +134,8 @@ struct h5t_read_methods {
struct h5t_adjacency_methods {
h5_err_t (*update_internal_structs)(h5_file_t* const, h5_id_t);
h5_err_t (*release_internal_structs)(h5_file_t* const);
h5_err_t (*get_edges_upadjacent_to_vertex)(
h5_file_t * const, const h5_id_t, h5_idlist_t**);
h5_err_t (*get_triangles_upadjacent_to_vertex)(
h5_file_t * const, const h5_id_t, h5_idlist_t**);
h5_err_t (*get_tets_upadjacent_to_vertex)(
h5_file_t * const, const h5_id_t, h5_idlist_t**);
h5_err_t (*get_triangles_upadjacent_to_edge)(
h5_file_t * const, const h5_id_t, h5_idlist_t**);
h5_err_t (*get_tets_upadjacent_to_edge)(
h5_file_t * const, const h5_id_t, h5_idlist_t**);
h5_err_t (*get_tets_upadjacent_to_triangle)(
h5_file_t * const, const h5_id_t, h5_idlist_t**);
h5_err_t (*get_vertices_downadjacent_to_edge)(
h5_file_t * const, const h5_id_t, h5_idlist_t**);
h5_err_t (*get_vertices_downadjacent_to_triangle)(
h5_file_t * const, const h5_id_t, h5_idlist_t**);
h5_err_t (*get_vertices_downadjacent_to_tet)(
h5_file_t * const, const h5_id_t, h5_idlist_t**);
h5_err_t (*get_edges_downadjacent_to_triangle)(
h5_file_t * const, const h5_id_t, h5_idlist_t**);
h5_err_t (*get_edges_downadjacent_to_tet)(
h5_file_t * const, const h5_id_t, h5_idlist_t**);
h5_err_t (*get_triangles_downadjacent_to_tet)(
h5_file_t * const, const h5_id_t, h5_idlist_t**);
h5_err_t (*get_adjacencies)(
h5_file_t * const, const h5_id_t, const h5_int32_t, h5_idlist_t**);
};
typedef struct h5t_methods {
+5 -2
View File
@@ -115,6 +115,7 @@ h5u_set_num_particles (
}
#ifndef PARALLEL_IO
#pragma unused total
count = u->nparticles;
TRY( u->shape = h5priv_create_hdf5_dataspace(f, 1, &count, NULL) );
u->viewstart = 0;
@@ -436,11 +437,13 @@ h5u_get_dataset_info (
dataset_name, len_dataset_name) );
if ( nelem ) {
TRY( *nelem = h5priv_get_npoints_of_hdf5_dataset_by_name (
h5_ssize_t nelem_;
TRY( nelem_ = h5priv_get_npoints_of_hdf5_dataset_by_name (
f,
f->step_gid,
dataset_name) );
if ( *nelem < 0 ) return *nelem;
if ( nelem_ < 0 ) return nelem_;
*nelem = nelem_;
}
if ( type ) {
+9 -12
View File
@@ -28,20 +28,19 @@ h5u_read_data (
/* default spaces, if not using a view selection */
memspace_id = H5S_ALL;
TRY ( space_id = h5priv_get_hdf5_dataset_space(f, dataset_id) );
TRY( space_id = h5priv_get_hdf5_dataset_space(f, dataset_id) );
/* get the number of elements on disk for the datset */
TRY ( ndisk = h5priv_get_npoints_of_hdf5_dataspace(f, space_id) );
if ( u->diskshape != H5S_ALL )
{
TRY ( nread = h5priv_get_npoints_of_hdf5_dataspace(f, u->diskshape) );
if (u->diskshape != H5S_ALL) {
TRY( nread = h5priv_get_npoints_of_hdf5_dataspace(f, u->diskshape) );
/* make sure the disk space selected by the view doesn't
* exceed the size of the dataset */
if ( nread <= ndisk ) {
if (nread <= ndisk) {
/* we no longer need the dataset space... */
TRY ( h5priv_close_hdf5_dataspace(f, space_id) );
TRY( h5priv_close_hdf5_dataspace(f, space_id) );
/* ...because it's safe to use the view selection */
space_id = f->u->diskshape;
} else {
@@ -55,20 +54,18 @@ h5u_read_data (
name2, (long long)ndisk, (long long)nread );
nread = ndisk;
}
}
else {
} else {
/* since the view selection is H5S_ALL, we will
* read all available elements in the dataset space */
nread = ndisk;
}
if ( u->memshape != H5S_ALL )
{
TRY ( nread = h5priv_get_npoints_of_hdf5_dataspace(f, u->memshape) );
if (u->memshape != H5S_ALL) {
TRY( nmem = h5priv_get_npoints_of_hdf5_dataspace(f, u->memshape) );
/* make sure the memory space selected by the view has
* enough capacity for the read */
if ( nmem >= nread ) {
if (nmem >= nread) {
memspace_id = f->u->memshape;
} else {
/* the view selection is too small?
+2 -2
View File
@@ -107,14 +107,14 @@ H5GetErrorHandler (
h5_err_t
H5ReportErrorhandler (
h5_file_t * const f,
const h5_file_t * const f,
const char *fmt,
va_list ap
);
h5_err_t
H5AbortErrorhandler (
h5_file_t * const f,
const h5_file_t * const f,
const char *fmt,
va_list ap
);
+51 -47
View File
@@ -19,41 +19,44 @@ H5Block3dSetView (
h5_err_t
H5Block3dGetView (
h5_file_t *const f, /*!< IN: File handle */
h5_size_t *i_start, /*!< OUT: start index of \c i */
h5_size_t *i_end, /*!< OUT: end index of \c i */
h5_size_t *j_start, /*!< OUT: start index of \c j */
h5_size_t *j_end, /*!< OUT: end index of \c j */
h5_size_t *k_start, /*!< OUT: start index of \c k */
h5_size_t *k_end /*!< OUT: end index of \c k */
h5_file_t *const f, /*!< IN: File handle */
h5_size_t *const i_start, /*!< OUT: start index of \c i */
h5_size_t *const i_end, /*!< OUT: end index of \c i */
h5_size_t *const j_start, /*!< OUT: start index of \c j */
h5_size_t *const j_end, /*!< OUT: end index of \c j */
h5_size_t *const k_start, /*!< OUT: start index of \c k */
h5_size_t *const k_end /*!< OUT: end index of \c k */
);
h5_err_t
H5Block3dGetReducedView (
h5_file_t *const f, /*!< IN: File handle */
h5_size_t *i_start, /*!< OUT: start index of \c i */
h5_size_t *i_end, /*!< OUT: end index of \c i */
h5_size_t *j_start, /*!< OUT: start index of \c j */
h5_size_t *j_end, /*!< OUT: end index of \c j */
h5_size_t *k_start, /*!< OUT: start index of \c j */
h5_size_t *k_end /*!< OUT: end index of \c j */
h5_file_t *const f, /*!< IN: File handle */
h5_size_t *const i_start, /*!< OUT: start index of \c i */
h5_size_t *const i_end, /*!< OUT: end index of \c i */
h5_size_t *const j_start, /*!< OUT: start index of \c j */
h5_size_t *const j_end, /*!< OUT: end index of \c j */
h5_size_t *const k_start, /*!< OUT: start index of \c j */
h5_size_t *const k_end /*!< OUT: end index of \c j */
);
h5_err_t
H5Block3dSetChunk (
h5_file_t *const f, /*!< IN: File handle */
const h5_int64_t i, /*!< IN: size of \c i */
const h5_int64_t j, /*!< IN: size of \c j */
const h5_int64_t k /*!< IN: size of \c k */
const h5_size_t i, /*!< IN: size of \c i */
const h5_size_t j, /*!< IN: size of \c j */
const h5_size_t k /*!< IN: size of \c k */
);
h5_err_t
H5Block3dGetChunk (
h5_file_t *const f, /*!< IN: File handle */
const char *field_name, /*!< IN: name of dataset */
h5_size_t *dims /*!< OUT: array containing the chunk dimensions */
h5_size_t *const i, /*!< OUT: size of i */
h5_size_t *const j, /*!< OUT: size of j */
h5_size_t *const k /*!< OUT: size of k */
);
#if defined(PARALLEL_IO)
h5_err_t
H5Block3dSetGrid (
h5_file_t *const f, /*!< IN: File handle */
@@ -66,9 +69,9 @@ h5_err_t
H5Block3dGetGridCoords (
h5_file_t *const f, /*!< IN: File handle */
const int proc, /*!< IN: MPI processor */
h5_int64_t *i, /*!< OUT: index in \c i */
h5_int64_t *j, /*!< OUT: index in \c j */
h5_int64_t *k /*!< OUT: index in \c k */
h5_size_t *const i, /*!< OUT: index in \c i */
h5_size_t *const j, /*!< OUT: index in \c j */
h5_size_t *const k /*!< OUT: index in \c k */
);
h5_err_t
@@ -78,6 +81,7 @@ H5Block3dSetDims (
const h5_size_t j, /*!< IN: dimension in \c j */
const h5_size_t k /*!< IN: dimension in \c k */
);
#endif
h5_err_t
H5Block3dSetHalo (
@@ -94,59 +98,59 @@ H5BlockGetNumFields (
h5_err_t
H5BlockGetFieldInfo (
h5_file_t *const f, /*!< IN: file handle */
const h5_size_t idx, /*!< IN: index of field */
char *name, /*!< OUT: field name */
const h5_size_t len_name, /*!< IN: buffer size */
h5_size_t *field_rank, /*!< OUT: field rank */
h5_size_t *field_dims, /*!< OUT: field dimensions */
h5_size_t *elem_rank, /*!< OUT: element rank */
h5_int64_t *type /*!< OUT: datatype */
h5_file_t *const f, /*!< IN: file handle */
const h5_size_t idx, /*!< IN: index of field */
char *name, /*!< OUT: field name */
const h5_size_t len_name, /*!< IN: buffer size */
h5_size_t *const field_rank, /*!< OUT: field rank */
h5_size_t *const field_dims, /*!< OUT: field dimensions */
h5_size_t *const elem_rank, /*!< OUT: element rank */
h5_int64_t *const type /*!< OUT: datatype */
);
h5_err_t
H5BlockGetFieldInfoByName (
h5_file_t *const f, /*!< IN: file handle */
const char *name, /*!< IN: field name */
h5_size_t *field_rank, /*!< OUT: field rank */
h5_size_t *field_dims, /*!< OUT: field dimensions */
h5_size_t *elem_rank, /*!< OUT: element rank */
h5_int64_t *type /*!< OUT: datatype */
h5_size_t *const field_rank, /*!< OUT: field rank */
h5_size_t *const field_dims, /*!< OUT: field dimensions */
h5_size_t *const elem_rank, /*!< OUT: element rank */
h5_int64_t *const type /*!< OUT: datatype */
);
h5_err_t
H5BlockWriteFieldAttribString (
h5_file_t *const f, /*!< IN: file handle */
const char *field_name, /*!< IN: field name */
const char *attrib_name, /*!< IN: attribute name */
const char *value /*!< IN: attribute value */
h5_file_t *const f, /*!< IN: file handle */
const char *const field_name, /*!< IN: field name */
const char *const attrib_name, /*!< IN: attribute name */
const char *const value /*!< IN: attribute value */
);
h5_err_t
H5BlockReadFieldAttribString (
h5_file_t *const f, /*!< IN: file handle */
const char *field_name, /*!< IN: field name */
const char *attrib_name, /*!< IN: attribute name */
char *buffer /*!< OUT: attribute value */
h5_file_t *const f, /*!< IN: file handle */
const char *const field_name, /*!< IN: field name */
const char *const attrib_name, /*!< IN: attribute name */
char *const buffer /*!< OUT: attribute value */
);
h5_ssize_t
H5BlockGetNumFieldAttribs (
h5_file_t *const f, /*<! IN: file handle */
const char *field_name /*<! IN: field name */
h5_file_t *const f, /*<! IN: file handle */
const char *const field_name /*<! IN: field name */
);
h5_int64_t
H5BlockGetFieldAttribInfo (
h5_file_t *const f, /*<! IN: Handle to open file */
const char *field_name, /*<! IN: field name */
const char *const field_name, /*<! IN: field name */
const h5_size_t attrib_idx, /*<! IN: Index of attribute to
get infos about */
char *attrib_name, /*<! OUT: Name of attribute */
char *const attrib_name, /*<! OUT: Name of attribute */
const h5_size_t len_of_attrib_name,
/*<! IN: length of buffer \c name */
h5_int64_t *attrib_type, /*<! OUT: Type of value. */
h5_size_t *attrib_nelem /*<! OUT: Number of elements */
h5_int64_t *const attrib_type, /*<! OUT: Type of value. */
h5_size_t *const attrib_nelem /*<! OUT: Number of elements */
);
+5 -81
View File
@@ -2,87 +2,11 @@
#define __H5FED_ADJACENCY_H
h5_err_t
H5FedGetEdgesUpAdjacentToVertex (
h5_file_t * const f,
const h5_id_t local_vid,
h5_idlist_t **list
);
h5_err_t
H5FedGetTrianglesUpAdjacentToVertex (
h5_file_t * const f,
const h5_id_t local_vid,
h5_idlist_t **list
);
h5_err_t
H5FedGetTetsUpAdjacentToVertex (
h5_file_t * const f,
const h5_id_t local_vid,
h5_idlist_t **list
);
h5_err_t
H5FedGetTrianglesUpAdjacentToEdge (
h5_file_t * const f,
const h5_id_t local_kid,
h5_idlist_t **list
);
h5_err_t
H5FedGetTetsUpAdjacentToEdge (
h5_file_t * const f,
const h5_id_t local_kid,
h5_idlist_t **list
);
h5_err_t
H5FedGetTetsUpAdjacentToTriangle (
h5_file_t * const f,
const h5_id_t local_did,
h5_idlist_t **list
);
h5_err_t
H5FedGetVerticesDownAdjacentToEdge (
h5_file_t * const f,
const h5_id_t local_kid,
h5_idlist_t **list
);
h5_err_t
H5FedGetVerticesDownAdjacentToTriangle (
h5_file_t * const f,
const h5_id_t local_did,
h5_idlist_t **list
);
h5_err_t
H5FedGetVerticesDownAdjacentToTet (
h5_file_t * const f,
const h5_id_t local_tid,
h5_idlist_t **list
);
h5_err_t
H5FedGetEdgesDownAdjacentToTriangle (
h5_file_t * const f,
const h5_id_t local_did,
h5_idlist_t **list
);
h5_err_t
H5FedGetEdgesDownAdjacentToTet (
h5_file_t * const f,
const h5_id_t local_tid,
h5_idlist_t **list
);
h5_err_t
H5FedGetTrianglesDownAdjacentToTet (
h5_file_t * const f,
const h5_id_t local_tid,
h5_idlist_t **list
H5FedGetAdjacencies (
h5_file_t* const f,
const h5_id_t entity_id,
const h5_int32_t dim,
h5_idlist_t** list
);
h5_err_t
+2 -2
View File
@@ -31,13 +31,13 @@ H5FedEndTraverseEntities (
h5t_entity_iterator_t* iter
);
h5_err_t
H5FedGetVertexCoordByIndex (
H5FedGetVertexCoordsByIndex (
h5_file_t* const f,
h5_id_t vertex_index,
h5_float64_t P[3]
);
h5_err_t
H5FedGetVertexCoordByID (
H5FedGetVertexCoordsByID (
h5_file_t* const f,
h5_id_t vertex_id,
h5_float64_t P[3]
-11
View File
@@ -1,17 +1,6 @@
#ifndef __H5_READWRITE_H
#define __H5_READWRITE_H
h5_int64_t
h5_write_data (
h5_file_t *f,
const char *name,
const void *array,
const hid_t type_id,
const hid_t group_id,
const hid_t memspace_id,
const hid_t diskspace_id
) ;
h5_int64_t
h5_set_step (
h5_file_t * const f,
+6 -1
View File
@@ -39,6 +39,10 @@ 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_glb_idx_t; // type for a global index
typedef int64_t h5_loc_idx_t; // type for a local index
typedef int64_t h5_glb_id_t; // type for a global ID
typedef int64_t h5_loc_id_t; // type for a local ID
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,12 +64,13 @@ struct h5_file;
typedef struct h5_file h5_file_t;
typedef h5_err_t (*h5_errorhandler_t)(
const struct h5_file * const,
const h5_file_t * const,
const char*,
va_list ap );
#ifndef PARALLEL_IO
typedef unsigned long MPI_Comm;
typedef unsigned long MPI_Datatype;
#endif
typedef struct h5_idlist {
+39 -37
View File
@@ -37,53 +37,54 @@ h5b_3d_has_view (
h5_err_t
h5b_3d_set_view (
h5_file_t *const f, /*!< IN: File handle */
const h5_int64_t i_start, /*!< IN: start index of \c i */
const h5_int64_t i_end, /*!< IN: end index of \c i */
const h5_int64_t j_start, /*!< IN: start index of \c j */
const h5_int64_t j_end, /*!< IN: end index of \c j */
const h5_int64_t k_start, /*!< IN: start index of \c k */
const h5_int64_t k_end /*!< IN: end index of \c k */
const h5_size_t i_start, /*!< IN: start index of \c i */
const h5_size_t i_end, /*!< IN: end index of \c i */
const h5_size_t j_start, /*!< IN: start index of \c j */
const h5_size_t j_end, /*!< IN: end index of \c j */
const h5_size_t k_start, /*!< IN: start index of \c k */
const h5_size_t k_end /*!< IN: end index of \c k */
);
h5_err_t
h5b_3d_get_view (
h5_file_t *const f, /*!< IN: File handle */
h5_int64_t *i_start, /*!< OUT: start index of \c i */
h5_int64_t *i_end, /*!< OUT: end index of \c i */
h5_int64_t *j_start, /*!< OUT: start index of \c j */
h5_int64_t *j_end, /*!< OUT: end index of \c j */
h5_int64_t *k_start, /*!< OUT: start index of \c k */
h5_int64_t *k_end /*!< OUT: end index of \c k */
h5_file_t *const f, /*!< IN: File handle */
h5_size_t *const i_start, /*!< OUT: start index of \c i */
h5_size_t *const i_end, /*!< OUT: end index of \c i */
h5_size_t *const j_start, /*!< OUT: start index of \c j */
h5_size_t *const j_end, /*!< OUT: end index of \c j */
h5_size_t *const k_start, /*!< OUT: start index of \c k */
h5_size_t *const k_end /*!< OUT: end index of \c k */
);
h5_err_t
h5b_3d_get_reduced_view (
h5_file_t *const f, /*!< IN: File handle */
h5_int64_t *i_start, /*!< OUT: start index of \c i */
h5_int64_t *i_end, /*!< OUT: end index of \c i */
h5_int64_t *j_start, /*!< OUT: start index of \c j */
h5_int64_t *j_end, /*!< OUT: end index of \c j */
h5_int64_t *k_start, /*!< OUT: start index of \c k */
h5_int64_t *k_end /*!< OUT: end index of \c k */
h5_file_t *const f, /*!< IN: File handle */
h5_size_t *const i_start, /*!< OUT: start index of \c i */
h5_size_t *const i_end, /*!< OUT: end index of \c i */
h5_size_t *const j_start, /*!< OUT: start index of \c j */
h5_size_t *const j_end, /*!< OUT: end index of \c j */
h5_size_t *const k_start, /*!< OUT: start index of \c k */
h5_size_t *const k_end /*!< OUT: end index of \c k */
);
h5_err_t
h5b_3d_set_chunk (
h5_file_t *const f, /*!< IN: File handle */
const h5_int64_t i, /*!< IN: size of \c i */
const h5_int64_t j, /*!< IN: size of \c j */
const h5_int64_t k /*!< IN: size of \c k */
const h5_size_t i, /*!< IN: size of \c i */
const h5_size_t j, /*!< IN: size of \c j */
const h5_size_t k /*!< IN: size of \c k */
);
h5_err_t
h5b_3d_get_chunk (
h5_file_t *const f, /*!< IN: File handle */
const char *field_name, /*!< IN: name of dataset */
h5_int64_t *i, /*!< OUT: size of \c i */
h5_int64_t *j, /*!< OUT: size of \c j */
h5_int64_t *k /*!< OUT: size of \c k */
h5_size_t *const i, /*!< OUT: size of \c i */
h5_size_t *const j, /*!< OUT: size of \c j */
h5_size_t *const k /*!< OUT: size of \c k */
);
#if defined(PARALLEL_IO)
h5_err_t
h5b_3d_set_grid (
h5_file_t *const f, /*!< IN: File handle */
@@ -96,9 +97,9 @@ h5_err_t
h5b_3d_get_grid_coords (
h5_file_t *const f, /*!< IN: File handle */
const int proc, /*!< IN: MPI processor */
h5_int64_t *i, /*!< OUT: index in \c i */
h5_int64_t *j, /*!< OUT: index in \c j */
h5_int64_t *k /*!< OUT: index in \c k */
h5_size_t *const i, /*!< OUT: index in \c i */
h5_size_t *const j, /*!< OUT: index in \c j */
h5_size_t *const k /*!< OUT: index in \c k */
);
h5_err_t
@@ -108,6 +109,7 @@ h5b_3d_set_dims (
const h5_size_t j, /*!< IN: dimension in \c j */
const h5_size_t k /*!< IN: dimension in \c k */
);
#endif
h5_err_t
h5b_3d_set_halo (
@@ -126,10 +128,10 @@ h5_err_t
h5b_get_field_info_by_name (
h5_file_t *const f, /*!< IN: file handle */
const char *name, /*!< OUT: field name */
h5_size_t *field_rank, /*!< OUT: field rank */
h5_size_t *field_dims, /*!< OUT: field dimensions */
h5_size_t *elem_rank, /*!< OUT: element rank */
h5_int64_t *type /*!< OUT: datatype */
h5_size_t *const field_rank, /*!< OUT: field rank */
h5_size_t *const field_dims, /*!< OUT: field dimensions */
h5_size_t *const elem_rank, /*!< OUT: element rank */
h5_int64_t *const type /*!< OUT: datatype */
);
h5_err_t
@@ -138,10 +140,10 @@ h5b_get_field_info (
const h5_size_t idx, /*!< IN: index of field */
char *name, /*!< OUT: field name */
const h5_size_t len_name, /*!< IN: buffer size */
h5_size_t *field_rank, /*!< OUT: field rank */
h5_size_t *field_dims, /*!< OUT: field dimensions */
h5_size_t *elem_rank, /*!< OUT: element rank */
h5_int64_t *type /*!< OUT: datatype */
h5_size_t *const field_rank, /*!< OUT: field rank */
h5_size_t *const field_dims, /*!< OUT: field dimensions */
h5_size_t *const elem_rank, /*!< OUT: element rank */
h5_int64_t *const type /*!< OUT: datatype */
);
+3 -79
View File
@@ -2,86 +2,10 @@
#define __H5T_ADJACENCIES_H
h5_err_t
h5t_get_edges_upadjacent_to_vertex (
h5t_get_adjacencies (
h5_file_t * const f,
const h5_id_t local_vid,
h5_idlist_t **list
);
h5_err_t
h5t_get_triangles_upadjacent_to_vertex (
h5_file_t * const f,
const h5_id_t local_vid,
h5_idlist_t **list
);
h5_err_t
h5t_get_tets_upadjacent_to_vertex (
h5_file_t * const f,
const h5_id_t local_vid,
h5_idlist_t **list
);
h5_err_t
h5t_get_triangles_upadjacent_to_edge (
h5_file_t * const f,
const h5_id_t local_kid,
h5_idlist_t **list
);
h5_err_t
h5t_get_tets_upadjacent_to_edge (
h5_file_t * const f,
const h5_id_t local_kid,
h5_idlist_t **list
);
h5_err_t
h5t_get_tets_upadjacent_to_triangle (
h5_file_t * const f,
const h5_id_t local_did,
h5_idlist_t **list
);
h5_err_t
h5t_get_vertices_downadjacent_to_edge (
h5_file_t * const f,
const h5_id_t local_kid,
h5_idlist_t **list
);
h5_err_t
h5t_get_vertices_downadjacent_to_triangle (
h5_file_t * const f,
const h5_id_t local_did,
h5_idlist_t **list
);
h5_err_t
h5t_get_vertices_downadjacent_to_tet (
h5_file_t * const f,
const h5_id_t local_tid,
h5_idlist_t **list
);
h5_err_t
h5t_get_edges_downadjacent_to_triangle (
h5_file_t * const f,
const h5_id_t local_did,
h5_idlist_t **list
);
h5_err_t
h5t_get_edges_downadjacent_to_tet (
h5_file_t * const f,
const h5_id_t local_tid,
h5_idlist_t **list
);
h5_err_t
h5t_get_triangles_downadjacent_to_tet (
h5_file_t * const f,
const h5_id_t local_tid,
const h5_id_t entity_id,
const h5_int32_t dim,
h5_idlist_t **list
);
+1 -1
View File
@@ -2,7 +2,7 @@
#define __H5T_MAP_H
h5_id_t
h5t_map_global_vertex_index2local (
h5t_map_global_vertex_idx2local (
h5_file_t * const f,
h5_id_t global_idx
);
+2
View File
@@ -7,6 +7,7 @@ h5_err_t h5t_open_mesh ( h5_file_t * const f, const h5_id_t id,
h5_err_t h5t_set_level ( h5_file_t * const f, const h5_id_t id );
h5_err_t h5t_close_mesh ( h5_file_t * const f );
#if 0
h5_err_t h5tpriv_open_file ( h5_file_t * const f );
h5_err_t h5tpriv_close_file ( h5_file_t * const f );
h5_err_t h5tpriv_open_topo_group ( h5_file_t * const f );
@@ -25,3 +26,4 @@ h5_err_t h5tpriv_alloc_tets ( h5_file_t * const f, const size_t cur,
const size_t new_size );
#endif
#endif
+1 -1
View File
@@ -53,7 +53,7 @@ h5t_get_vertex_coords_by_index (
);
h5_err_t
h5t_get_vertrex_coords_by_id (
h5t_get_vertex_coords_by_id (
h5_file_t* const f,
h5_id_t vertex_id,
h5_float64_t P[3]
+23 -3
View File
@@ -54,13 +54,33 @@ h5t_begin_refine_elems (
);
h5_id_t
h5t_refine_elem (
h5_file_t * const f,
const h5_id_t local_eid
h5t_refine_marked_elems (
h5_file_t * const f
);
h5_err_t
h5t_end_refine_elems (
h5_file_t * const f
);
h5_err_t
h5t_mark_entity (
h5_file_t* const f,
const h5_id_t entity_id
);
h5_err_t
h5t_pre_refine (
h5_file_t* const f
);
h5_err_t
h5t_refine (
h5_file_t* const f
);
h5_err_t
h5t_post_refine (
h5_file_t* const f
);
#endif
+31 -3
View File
@@ -1,4 +1,4 @@
#ifndef __H5T_TAGS_H
#ifndef __H5T_TAGS_H
#define __H5T_TAGS_H
typedef struct h5t_tagset H5T_Tagset;
@@ -19,7 +19,35 @@ h5_err_t h5t_set_mtag_by_name ( h5_file_t* const f, char name[], const h5_id_t i
h5_err_t h5t_get_mtag_by_name ( h5_file_t* const f, const char name[],
const h5_id_t id, size_t* dim, void* vals );
h5_err_t h5t_remove_mtag_by_name ( h5_file_t* const f, const char name[],
const h5_id_t id );
h5_err_t
h5t_remove_mtag_by_name (
h5_file_t* const f,
const char name[],
const h5_id_t id
);
h5_ssize_t
h5t_get_tag (
h5_file_t *const f,
const H5T_Tagset *tagset,
const h5_id_t entity_id,
size_t* const dim,
void* const vals
);
h5_err_t
h5t_remove_mtag (
h5_file_t* const f,
H5T_Tagset* tagset,
const h5_id_t id
);
h5_ssize_t
h5t_get_mtagset_names_of_entity (
h5_file_t* const f,
const h5_id_t entity_id,
char *names[],
const h5_size_t dim
);
#endif