src/h5core/h5t_xyz
- get serial mesh working again
This commit is contained in:
@@ -237,10 +237,12 @@ create_tet_type (
|
||||
H5_PRIV_FUNC_RETURN (H5_SUCCESS);
|
||||
}
|
||||
|
||||
#if defined(WITH_PARALLEL_H5GRID)
|
||||
|
||||
static inline h5_err_t
|
||||
create_chunk_type (
|
||||
void
|
||||
) {
|
||||
void
|
||||
) {
|
||||
H5_PRIV_FUNC_ENTER (h5_err_t, "%s", "void");
|
||||
TRY(
|
||||
h5_dta_types.h5_chunk_t = hdf5_create_type (
|
||||
@@ -339,6 +341,7 @@ create_octree_type (
|
||||
|
||||
H5_PRIV_FUNC_RETURN (H5_SUCCESS);
|
||||
}
|
||||
|
||||
static inline h5_err_t
|
||||
create_userdata_type (
|
||||
void
|
||||
@@ -357,7 +360,7 @@ create_userdata_type (
|
||||
|
||||
H5_PRIV_FUNC_RETURN (H5_SUCCESS);
|
||||
}
|
||||
#if defined(PARALLEL_IO)
|
||||
|
||||
static inline h5_err_t
|
||||
create_mpi_type_glb_tet (
|
||||
void
|
||||
@@ -674,11 +677,12 @@ h5_initialize (
|
||||
TRY (create_triangle_type ());
|
||||
TRY (create_tet_type ());
|
||||
TRY (create_tag_types ());
|
||||
|
||||
#if defined(WITH_PARALLEL_H5GRID)
|
||||
TRY (create_chunk_type ());
|
||||
TRY (create_octree_type ());
|
||||
TRY (create_userdata_type ());
|
||||
|
||||
#if defined(PARALLEL_IO)
|
||||
TRY (create_mpi_type_glb_tri ());
|
||||
TRY (create_mpi_type_glb_tet ());
|
||||
TRY (create_mpi_type_glb_vtx ());
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
License: see file COPYING in top level of source distribution.
|
||||
*/
|
||||
|
||||
#include "h5core/h5.h"
|
||||
#include "h5_types_private.h"
|
||||
#include "h5_hdf5_private.h"
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
#include "h5t_types_private.h"
|
||||
|
||||
struct h5t_access_methods {
|
||||
#if defined(PARALLEL_IO)
|
||||
#if defined(WITH_PARALLEL_H5GRID)
|
||||
MPI_Datatype (*get_mpi_type_of_glb_elem)(
|
||||
h5t_mesh_t* const m);
|
||||
#endif
|
||||
@@ -75,7 +75,7 @@ struct h5t_access_methods {
|
||||
extern struct h5t_access_methods h5tpriv_access_trim_methods;
|
||||
extern struct h5t_access_methods h5tpriv_access_tetm_methods;
|
||||
|
||||
#if defined(PARALLEL_IO)
|
||||
#if defined(WITH_PARALLEL_H5GRID)
|
||||
static inline MPI_Datatype
|
||||
h5tpriv_get_mpi_type_of_glb_elem (
|
||||
h5t_mesh_t* const m
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
*/
|
||||
|
||||
#include "h5core/h5.h"
|
||||
#include "h5_private.h"
|
||||
#include "h5_types_private.h"
|
||||
#include "h5_init_private.h"
|
||||
#include "h5t_types_private.h"
|
||||
@@ -16,7 +17,7 @@
|
||||
|
||||
/*** op's on local elements ***/
|
||||
|
||||
#if defined(PARALLEL_IO)
|
||||
#if defined(WITH_PARALLEL_H5GRID)
|
||||
static MPI_Datatype
|
||||
get_mpi_type_of_glb_elem (
|
||||
h5t_mesh_t* const m
|
||||
@@ -685,7 +686,7 @@ get_loc_entity_children (
|
||||
}
|
||||
|
||||
struct h5t_access_methods h5tpriv_access_tetm_methods = {
|
||||
#if defined(PARALLEL_IO)
|
||||
#if defined(WITH_PARALLEL_H5GRID)
|
||||
get_mpi_type_of_glb_elem,
|
||||
#endif
|
||||
get_loc_elem,
|
||||
|
||||
@@ -8,12 +8,13 @@
|
||||
*/
|
||||
|
||||
#include "h5core/h5.h"
|
||||
#include "h5_private.h"
|
||||
#include "h5_init_private.h"
|
||||
#include "h5t_types_private.h"
|
||||
#include "h5t_model_private.h"
|
||||
#include "h5t_access_private.h"
|
||||
|
||||
#if defined(PARALLEL_IO)
|
||||
#if defined(WITH_PARALLEL_H5GRID)
|
||||
static MPI_Datatype
|
||||
get_mpi_type_of_glb_elem (
|
||||
h5t_mesh_t* const m
|
||||
@@ -385,7 +386,7 @@ get_loc_entity_children (
|
||||
}
|
||||
|
||||
struct h5t_access_methods h5tpriv_access_trim_methods = {
|
||||
#if defined(PARALLEL_IO)
|
||||
#if defined(WITH_PARALLEL_H5GRID)
|
||||
get_mpi_type_of_glb_elem,
|
||||
#endif
|
||||
get_loc_elem,
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*/
|
||||
|
||||
#include "h5core/h5.h"
|
||||
|
||||
#include "h5_private.h"
|
||||
#include "h5t_types_private.h"
|
||||
#include "h5t_adjacencies_private.h"
|
||||
#include "h5t_map_private.h"
|
||||
|
||||
@@ -456,7 +456,7 @@ h5t_get_loc_vertex_indices_of_tet (
|
||||
H5_CORE_API_RETURN (H5_SUCCESS);
|
||||
}
|
||||
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
int
|
||||
compare_glb_idx_oct (const void * p_a,const void* p_b) {
|
||||
return *(h5_glb_idx_t*) p_a - *(h5_glb_idx_t*) p_b;
|
||||
|
||||
+10
-5
@@ -8,6 +8,7 @@
|
||||
*/
|
||||
|
||||
#include "h5core/h5.h"
|
||||
#include "h5_private.h"
|
||||
#include "h5_mpi_private.h"
|
||||
#include "h5_errorhandling_private.h"
|
||||
|
||||
@@ -72,10 +73,12 @@ h5tpriv_init_mesh (
|
||||
m->timing.next_time = 0;
|
||||
m->timing.f = NULL;
|
||||
m->is_chunked = 0;
|
||||
#if defined(WITH_PARALLEL_H5GRID)
|
||||
|
||||
/* initialize pointers */
|
||||
m->octree = NULL;
|
||||
m->chunks = NULL;
|
||||
#endif
|
||||
m->loc_elems = NULL;
|
||||
m->num_interior_elems = NULL;
|
||||
m->num_glb_elems = NULL;
|
||||
@@ -89,6 +92,7 @@ h5tpriv_init_mesh (
|
||||
m->first_b_vtx = NULL;
|
||||
// m->weights = NULL;
|
||||
|
||||
#if defined(WITH_PARALLEL_H5GRID)
|
||||
/* chunks */
|
||||
strcpy (m->dsinfo_chunks.name, "Chunks");
|
||||
m->dsinfo_chunks.rank = 1;
|
||||
@@ -133,7 +137,8 @@ h5tpriv_init_mesh (
|
||||
m->dsinfo_userdata.rank,
|
||||
m->dsinfo_userdata.chunk_dims) );
|
||||
m->dsinfo_userdata.access_prop = H5P_DEFAULT;
|
||||
|
||||
#endif
|
||||
|
||||
/* vertices */
|
||||
strcpy (m->dsinfo_vertices.name, "Vertices");
|
||||
m->dsinfo_vertices.rank = 1;
|
||||
@@ -302,7 +307,7 @@ release_memory (
|
||||
TRY (h5tpriv_release_adjacency_structs (m));
|
||||
TRY (release_elems (m));
|
||||
TRY (release_vertices (m));
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
if (m->is_chunked) {
|
||||
TRY (h5tpriv_free_chunks (m));
|
||||
TRY (H5t_free_octree (m->octree));
|
||||
@@ -374,7 +379,7 @@ h5t_close_mesh (
|
||||
h5t_mesh_t* const m
|
||||
) {
|
||||
H5_CORE_API_ENTER (h5_err_t, "m=%p", m);
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
TRY (h5priv_mpi_barrier (m->f->props->comm));
|
||||
m->timing.measure[m->timing.next_time++] = MPI_Wtime();
|
||||
#endif
|
||||
@@ -389,9 +394,9 @@ h5t_close_mesh (
|
||||
TRY (h5tpriv_write_mesh (m));
|
||||
}
|
||||
TRY (hdf5_close_group (m->mesh_gid));
|
||||
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
TRY (write_timing (m));
|
||||
|
||||
#endif
|
||||
TRY (release_memory (m));
|
||||
H5_CORE_API_RETURN (H5_SUCCESS);
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ h5t_open_tetrahedral_mesh (
|
||||
&h5t_tet_ref_elem,
|
||||
&tet_funcs,
|
||||
0));
|
||||
#ifdef PARALLEL_IO // reason: even if we have a chunked mesh, if h5hut is not parallel
|
||||
#ifdef WITH_PARALLEL_H5GRID // reason: even if we have a chunked mesh, if h5hut is not parallel
|
||||
// it does not support reading chunked meshes
|
||||
TRY (m->is_chunked ? h5tpriv_read_chunked_mesh (m) :h5tpriv_read_mesh (m));
|
||||
#else
|
||||
@@ -199,7 +199,7 @@ h5t_add_chunked_tetrahedral_mesh (
|
||||
) {
|
||||
h5_file_p f = (h5_file_p)fh;
|
||||
H5_CORE_API_ENTER (h5_err_t, "f=%p, name=%s, mesh=%p", f, name, mesh);
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
CHECK_WRITABLE_MODE (f);
|
||||
h5_err_t exists;
|
||||
TRY (exists = h5priv_link_exists (
|
||||
|
||||
@@ -67,7 +67,7 @@ h5t_open_triangle_mesh (
|
||||
h5_err_t,
|
||||
"f=%p, name=%s, mesh=%p",
|
||||
f, name, mesh);
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
MPI_Barrier (f->props->comm);
|
||||
double start = MPI_Wtime();
|
||||
#endif
|
||||
@@ -90,7 +90,7 @@ h5t_open_triangle_mesh (
|
||||
&h5t_tri_ref_elem,
|
||||
&tri_funcs,
|
||||
0));
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
MPI_Barrier (m->f->props->comm);
|
||||
m->timing.measure[m->timing.next_time++] = start;
|
||||
m->timing.measure[m->timing.next_time++] = MPI_Wtime();
|
||||
@@ -114,7 +114,7 @@ h5t_open_triangle_mesh_part (
|
||||
h5_file_p f = (h5_file_p)fh;
|
||||
H5_CORE_API_ENTER (h5_err_t, "f=%p, name=%s, mesh=%p", f, name, mesh);
|
||||
hid_t mesh_hid;
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
MPI_Barrier (f->props->comm);
|
||||
double start = MPI_Wtime();
|
||||
#endif
|
||||
@@ -136,7 +136,7 @@ h5t_open_triangle_mesh_part (
|
||||
&h5t_tri_ref_elem,
|
||||
&tri_funcs,
|
||||
0));
|
||||
#ifdef PARALLEL_IO // reason: even if we have a chunked mesh, if h5hut is not parallel
|
||||
#ifdef WITH_PARALLEL_H5GRID // reason: even if we have a chunked mesh, if h5hut is not parallel
|
||||
MPI_Barrier (m->f->props->comm);
|
||||
m->timing.measure[m->timing.next_time++] = start;
|
||||
m->timing.measure[m->timing.next_time++] = MPI_Wtime();
|
||||
@@ -216,7 +216,7 @@ h5t_add_chunked_triangle_mesh(
|
||||
) {
|
||||
h5_file_p f = (h5_file_p)fh;
|
||||
H5_CORE_API_ENTER (h5_err_t, "f=%p, name=%s, mesh=%p", f, name, mesh);
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
int size = -1;
|
||||
TRY (h5priv_mpi_comm_size (f->props->comm, &size));
|
||||
if (size != 1) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "h5t_octree_private.h"
|
||||
#include "h5t_core_private.h"
|
||||
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
@@ -10,14 +10,10 @@
|
||||
#ifndef __H5T_OCTREE_PRIVATE_H
|
||||
#define __H5T_OCTREE_PRIVATE_H
|
||||
|
||||
|
||||
#include "h5core/h5_types.h"
|
||||
#include "h5core/h5t_octree.h"
|
||||
|
||||
// iterators
|
||||
#if defined(PARALLEL_IO)
|
||||
#include <mpi.h>
|
||||
#endif
|
||||
|
||||
#define OCT_MAX_NEIGHBORS 1000
|
||||
|
||||
struct h5_oct_point {
|
||||
@@ -174,7 +170,5 @@ h5_err_t plot_octant_anc (h5t_octree_t* octree, h5_oct_idx_t oct_idx);
|
||||
|
||||
h5_err_t plot_leaf_octants (h5t_octree_t* octree);
|
||||
void print_array (h5_int32_t* neigh, h5_oct_idx_t nbr_neigh, int rank);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
+25
-25
@@ -7,17 +7,15 @@
|
||||
License: see file COPYING in top level of source distribution.
|
||||
*/
|
||||
|
||||
#include <unistd.h> // for the use of sleep
|
||||
#if defined (PARALLEL_IO)
|
||||
//#define WITH_PARALLEL_H5FED
|
||||
#endif
|
||||
#include "h5core/h5.h"
|
||||
#include "h5_types_private.h"
|
||||
|
||||
//#if defined (WITH_PARALLEL_H5FED) // WARNING just used for eclipse to index all code...
|
||||
#ifdef PARALLEL_IO
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h> // for the use of sleep
|
||||
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
#include <parmetis.h>
|
||||
#endif
|
||||
#include <stdlib.h>
|
||||
//#endif
|
||||
|
||||
#include "h5_attribs_private.h"
|
||||
#include "h5_hdf5_private.h"
|
||||
@@ -153,7 +151,7 @@ write_vertices (
|
||||
1));
|
||||
H5_PRIV_FUNC_RETURN (H5_SUCCESS);
|
||||
}
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
|
||||
h5_err_t
|
||||
add_chunk_to_list (
|
||||
@@ -211,7 +209,7 @@ h5tpriv_get_list_of_chunks_to_write (
|
||||
}
|
||||
H5_PRIV_FUNC_RETURN (H5_SUCCESS);
|
||||
}
|
||||
#endif
|
||||
|
||||
static h5_err_t
|
||||
exchange_g2l_vtx_map (
|
||||
h5t_mesh_t* const m,
|
||||
@@ -220,7 +218,6 @@ exchange_g2l_vtx_map (
|
||||
h5_glb_idx_t** glb_vtx
|
||||
) {
|
||||
H5_PRIV_FUNC_ENTER (h5_err_t, "m=%p map=%p, range=%p, glb_vtx=%p", m, map, range, glb_vtx);
|
||||
#ifdef PARALLEL_IO
|
||||
// alloc/get range
|
||||
TRY (*range = h5_calloc (m->f->nprocs + 1, sizeof (**range)));
|
||||
TRY (h5tpriv_get_ranges (m,*range, map->num_items, 0));
|
||||
@@ -250,9 +247,9 @@ exchange_g2l_vtx_map (
|
||||
recvdisp,
|
||||
MPI_LONG,
|
||||
m->f->props->comm));
|
||||
#endif
|
||||
H5_PRIV_FUNC_RETURN (H5_SUCCESS);
|
||||
}
|
||||
#endif
|
||||
|
||||
int sort_glb_idx(const void *p_a, const void *p_b)
|
||||
{
|
||||
@@ -288,6 +285,8 @@ remove_item_from_idxmap (
|
||||
map->num_items--;
|
||||
H5_PRIV_FUNC_RETURN (H5_SUCCESS);
|
||||
}
|
||||
|
||||
#if defined(WITH_PARALLEL_H5GRID)
|
||||
/*
|
||||
* Check if any proc with lower rank already writes a vtx that this proc has planed to write
|
||||
* if so remove it from the map. Only the proc with the lowest rank writes the vertex
|
||||
@@ -323,6 +322,7 @@ check_multiple_vtx_writes (
|
||||
}
|
||||
H5_PRIV_FUNC_RETURN (H5_SUCCESS);
|
||||
}
|
||||
#endif
|
||||
|
||||
h5_int32_t
|
||||
find_proc_to_write (
|
||||
@@ -330,7 +330,7 @@ find_proc_to_write (
|
||||
h5_loc_idx_t elem_idx
|
||||
) {
|
||||
H5_PRIV_FUNC_ENTER (int, "m=%p ", m);
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
h5_glb_idx_t glb_idx = h5tpriv_get_loc_elem_glb_idx (m, elem_idx);
|
||||
for (int i = 0; i < m->chunks->num_alloc; i++) {
|
||||
if ( glb_idx >= m->chunks->chunks[i].elem &&
|
||||
@@ -341,6 +341,8 @@ find_proc_to_write (
|
||||
#endif
|
||||
H5_PRIV_FUNC_RETURN (H5_SUCCESS);
|
||||
}
|
||||
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
/*
|
||||
* function returns a map with all the vtx that should be written by this proc
|
||||
*
|
||||
@@ -354,7 +356,6 @@ get_map_vertices_write (
|
||||
h5_idxmap_t* map
|
||||
) {
|
||||
H5_PRIV_FUNC_ENTER (h5_err_t, "m=%p, map=%p", m, map);
|
||||
#ifdef PARALLEL_IO
|
||||
h5_chk_idx_t* list_of_chunks;
|
||||
int num_chunks = 0;
|
||||
TRY (h5tpriv_get_list_of_chunks_to_write (m, &list_of_chunks, &num_chunks));
|
||||
@@ -409,7 +410,7 @@ get_map_vertices_write (
|
||||
h5priv_sort_idxmap (map);
|
||||
TRY (h5_free (range));
|
||||
TRY (h5_free (glb_vtx));
|
||||
#endif
|
||||
|
||||
H5_PRIV_FUNC_RETURN (H5_SUCCESS);
|
||||
}
|
||||
|
||||
@@ -420,7 +421,6 @@ write_vertices_chk (
|
||||
) {
|
||||
H5_PRIV_FUNC_ENTER (h5_err_t, "m=%p", m);
|
||||
assert (m->num_leaf_levels > 0);
|
||||
#ifdef PARALLEL_IO
|
||||
hid_t dset_id;
|
||||
TRY (dset_id = hdf5_open_dataset (m->mesh_gid, m->dsinfo_vertices.name));
|
||||
hid_t mspace_id;
|
||||
@@ -518,10 +518,10 @@ write_vertices_chk (
|
||||
TRY (hdf5_close_dataspace (mspace_id));
|
||||
TRY (hdf5_close_dataset (dset_id));
|
||||
m->f->empty = 0;
|
||||
#endif
|
||||
|
||||
H5_PRIV_FUNC_RETURN (H5_SUCCESS);
|
||||
}
|
||||
#if defined(WITH_PARALLEL_H5FED)
|
||||
|
||||
static h5_err_t
|
||||
write_elems (
|
||||
h5t_mesh_t* const m
|
||||
@@ -599,7 +599,7 @@ write_elems (
|
||||
H5_PRIV_FUNC_RETURN (H5_SUCCESS);
|
||||
}
|
||||
#endif
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
//TODO maybe use ifdef to have name without _chk
|
||||
static h5_err_t
|
||||
write_elems_chk (
|
||||
@@ -1042,7 +1042,7 @@ h5tpriv_write_mesh (
|
||||
H5_PRIV_API_ENTER (h5_err_t, "m=%p", m);
|
||||
if (m->mesh_changed) {
|
||||
if (m->is_chunked) {
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
if (m->num_weights > 0) {
|
||||
TRY (write_weights (m));
|
||||
}
|
||||
@@ -2847,7 +2847,7 @@ h5tpriv_read_mesh_part (
|
||||
h5_glb_idx_t num_elems
|
||||
) {
|
||||
H5_PRIV_API_ENTER (h5_err_t, "m=%p", m);
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
TRY (h5priv_mpi_barrier (m->f->props->comm)); // octree
|
||||
m->timing.measure[m->timing.next_time++] = MPI_Wtime();
|
||||
TRY (h5priv_mpi_barrier (m->f->props->comm)); // chunks
|
||||
@@ -2857,11 +2857,11 @@ h5tpriv_read_mesh_part (
|
||||
TRY (h5priv_mpi_barrier (m->f->props->comm)); // distribute chunks
|
||||
m->timing.measure[m->timing.next_time++] = MPI_Wtime();
|
||||
#endif
|
||||
h5_glb_elem_t* glb_elems;
|
||||
h5_glb_elem_t* glb_elems = NULL;
|
||||
TRY (read_elems_part (m, &glb_elems, elem_indices, num_elems));
|
||||
h5_loc_idx_t num_interior_elems = m->num_interior_elems[0];
|
||||
h5_loc_idx_t num_ghost_elems = m->num_ghost_elems[0] = 0;
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
TRY (h5priv_mpi_barrier (m->f->props->comm)); // read elems
|
||||
m->timing.measure[m->timing.next_time++] = MPI_Wtime();
|
||||
#endif
|
||||
@@ -2904,7 +2904,7 @@ h5tpriv_read_mesh_part (
|
||||
TRY (read_vertices (m, map));
|
||||
TRY (h5tpriv_alloc_loc_elems (m, 0, num_interior_elems+num_ghost_elems));
|
||||
m->num_loaded_levels = 1;
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
TRY (h5priv_mpi_barrier (m->f->props->comm)); // read vtx
|
||||
m->timing.measure[m->timing.next_time++] = MPI_Wtime();
|
||||
#endif
|
||||
@@ -2913,7 +2913,7 @@ h5tpriv_read_mesh_part (
|
||||
TRY (h5tpriv_update_internal_structs (m, 0));
|
||||
|
||||
TRY (h5_free (glb_elems));
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
TRY (h5priv_mpi_barrier (m->f->props->comm)); // init update
|
||||
m->timing.measure[m->timing.next_time++] = MPI_Wtime();
|
||||
#endif
|
||||
|
||||
@@ -116,7 +116,7 @@ init_elem_flags (
|
||||
// elem is not ghost so it must be interior (for the time
|
||||
// being we have no overlap
|
||||
elem->flags |= H5_INTERIOR_ENTITY;
|
||||
if (elem->neighbor_indices[i] < -1 ||
|
||||
if (elem->neighbor_indices[i] <= -1 ||
|
||||
(elems[elem->neighbor_indices[i]].flags & H5_GHOST_ENTITY)) {
|
||||
// if neighbor is < -1 we do not have ghost cells and cell
|
||||
// is border cell
|
||||
|
||||
@@ -196,7 +196,7 @@ init_glb_elems_struct_chk (
|
||||
int num_chk
|
||||
) {
|
||||
H5_PRIV_FUNC_ENTER (h5_err_t, "m=%p", m);
|
||||
|
||||
#if defined(WITH_PARALLEL_H5GRID)
|
||||
h5_chk_idx_t chk_idx = -1;
|
||||
h5_chk_size_t num_elems = -1;
|
||||
h5_size_t counter = 0;
|
||||
@@ -224,8 +224,10 @@ init_glb_elems_struct_chk (
|
||||
if (loc_elem->neighbor_indices[i] > -1) {
|
||||
glb_elem->neighbor_indices[i] = ((H5_LOC_ELEM_T*)m->loc_elems)[loc_elem->neighbor_indices[i]].glb_idx;
|
||||
} else {
|
||||
if (loc_elem->neighbor_indices[i] < -1) {// if elem not locally available we store the - (glb_idx + 2)
|
||||
glb_elem->neighbor_indices[i] = -( loc_elem->neighbor_indices[i] + 2); //TODO is there a func or makro that does that?
|
||||
if (loc_elem->neighbor_indices[i] < -1) {
|
||||
// if elem not locally available we store the - (glb_idx + 2)
|
||||
//TODO is there a func or makro that does that?
|
||||
glb_elem->neighbor_indices[i] = -( loc_elem->neighbor_indices[i] + 2);
|
||||
} else {
|
||||
glb_elem->neighbor_indices[i] = loc_elem->neighbor_indices[i]; // geometrical border
|
||||
}
|
||||
@@ -236,7 +238,7 @@ init_glb_elems_struct_chk (
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
H5_PRIV_FUNC_RETURN (H5_SUCCESS);
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,9 @@
|
||||
License: see file COPYING in top level of source distribution.
|
||||
*/
|
||||
|
||||
#include "h5core/h5.h"
|
||||
#include "h5_private.h"
|
||||
|
||||
#include "h5t_types_private.h"
|
||||
#include "h5t_errorhandling_private.h"
|
||||
#include "h5t_map_private.h"
|
||||
@@ -15,7 +18,6 @@
|
||||
#include "h5t_tags_private.h"
|
||||
#include "h5t_retrieve_private.h"
|
||||
|
||||
#include "h5core/h5.h"
|
||||
#include "h5core/h5t_map.h"
|
||||
|
||||
/*
|
||||
|
||||
+41
-34
@@ -31,7 +31,7 @@
|
||||
*/
|
||||
int max_num_elems_p_chunk = 120;
|
||||
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
// that probably doesn't belong here... //TODO put in right place + print variables
|
||||
h5_edge_list_t*
|
||||
h5tpriv_init_edge_list (
|
||||
@@ -294,7 +294,7 @@ assign_global_vertex_indices (
|
||||
H5_PRIV_FUNC_ENTER (h5_err_t, "m=%p", m);
|
||||
h5_loc_idx_t local_idx = (m->leaf_level == 0) ?
|
||||
0 : m->num_loc_vertices[m->leaf_level-1];
|
||||
|
||||
#if defined(WITH_PARALLEL_H5GRID)
|
||||
if (m->is_chunked && m->f->nprocs > 1) {
|
||||
// exchange num vertices and calc range
|
||||
h5_glb_idx_t* range = NULL;
|
||||
@@ -311,7 +311,9 @@ assign_global_vertex_indices (
|
||||
H5_PRIV_FUNC_LEAVE (H5_ERR_INTERNAL);
|
||||
}
|
||||
TRY (h5_free (range));
|
||||
} else {
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
// simple in serial runs: global_id = local_id
|
||||
for (
|
||||
;
|
||||
@@ -322,6 +324,8 @@ assign_global_vertex_indices (
|
||||
}
|
||||
H5_PRIV_FUNC_RETURN (H5_SUCCESS);
|
||||
}
|
||||
|
||||
#if defined(WITH_PARALLEL_H5GRID)
|
||||
/*
|
||||
* there is a different version needed for after the refinement because
|
||||
* not all vertices need to get a glb_idx from this proc
|
||||
@@ -355,25 +359,6 @@ assign_global_vertex_indices_chk (
|
||||
H5_PRIV_FUNC_RETURN (H5_SUCCESS);
|
||||
}
|
||||
|
||||
/*!
|
||||
Assign unique global indices to new elements.
|
||||
*/
|
||||
static h5_err_t
|
||||
assign_glb_elem_indices (
|
||||
h5t_mesh_t* const m
|
||||
) {
|
||||
/*
|
||||
simple in serial runs: global index = local index
|
||||
*/
|
||||
h5_loc_idx_t loc_idx = (m->leaf_level == 0) ? 0 : m->num_interior_elems[m->leaf_level-1];
|
||||
|
||||
for (; loc_idx < m->num_interior_elems[m->leaf_level]; loc_idx++) {
|
||||
h5tpriv_set_loc_elem_glb_idx (m, loc_idx, loc_idx);
|
||||
}
|
||||
|
||||
return H5_SUCCESS;
|
||||
}
|
||||
|
||||
/*!
|
||||
Assign unique global indices to new elements.
|
||||
*/
|
||||
@@ -399,6 +384,27 @@ assign_glb_elem_indices_chk ( //TODO use ifdef instead of new func name
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
/*!
|
||||
Assign unique global indices to new elements.
|
||||
*/
|
||||
static h5_err_t
|
||||
assign_glb_elem_indices (
|
||||
h5t_mesh_t* const m
|
||||
) {
|
||||
/*
|
||||
simple in serial runs: global index = local index
|
||||
*/
|
||||
h5_loc_idx_t loc_idx = (m->leaf_level == 0) ? 0 : m->num_interior_elems[m->leaf_level-1];
|
||||
|
||||
for (; loc_idx < m->num_interior_elems[m->leaf_level]; loc_idx++) {
|
||||
h5tpriv_set_loc_elem_glb_idx (m, loc_idx, loc_idx);
|
||||
}
|
||||
|
||||
return H5_SUCCESS;
|
||||
}
|
||||
|
||||
h5_lvl_idx_t
|
||||
h5tpriv_add_level (
|
||||
h5t_mesh_t* const m
|
||||
@@ -714,6 +720,8 @@ h5t_end_store_elems (
|
||||
|
||||
H5_CORE_API_RETURN (H5_SUCCESS);
|
||||
}
|
||||
|
||||
#if defined(WITH_PARALLEL_H5GRID)
|
||||
/*
|
||||
* linear search trough chunks to find chk_idx which contains element
|
||||
*/
|
||||
@@ -824,7 +832,7 @@ h5tpriv_calc_vtx_revpermutation (
|
||||
H5_PRIV_FUNC_RETURN (H5_SUCCESS);
|
||||
}
|
||||
#endif // CHUNKING_OF_VTX
|
||||
|
||||
#endif // WITH_PARALLEL_H5GRID
|
||||
// used to chunk vtx
|
||||
//static h5_err_t
|
||||
//h5tpriv_store_vtx_range_to_chk (
|
||||
@@ -852,14 +860,13 @@ h5tpriv_calc_vtx_revpermutation (
|
||||
// H5_PRIV_FUNC_RETURN (H5_SUCCESS);
|
||||
//}
|
||||
|
||||
|
||||
h5_err_t
|
||||
h5t_end_store_ckd_elems (
|
||||
h5t_mesh_t* const m
|
||||
) {
|
||||
H5_CORE_API_ENTER (h5_err_t, "m=%p", m);
|
||||
h5_debug ("end storing elements");
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
m->num_interior_elems[m->leaf_level] = m->last_stored_eid+1;
|
||||
m->num_glb_elems[m->leaf_level] = m->last_stored_eid+1;// only works for serial case
|
||||
m->num_glb_leaf_elems[m->leaf_level] = m->num_interior_leaf_elems[m->leaf_level];
|
||||
@@ -1106,7 +1113,7 @@ h5t_end_store_ckd_elems (
|
||||
H5_CORE_API_RETURN (H5_SUCCESS);
|
||||
}
|
||||
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
h5_err_t
|
||||
h5tpriv_find_oct_proc_of_point (
|
||||
h5t_mesh_t* m,
|
||||
@@ -1212,7 +1219,7 @@ h5t_pre_refine (
|
||||
H5_CORE_API_ENTER (h5_err_t, "m=%p", m);
|
||||
H5_CORE_API_RETURN (m->methods->store->pre_refine (m));
|
||||
}
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
//TODO maybe use ifdef to have name without _chk
|
||||
h5_err_t
|
||||
h5t_pre_refine_chk (
|
||||
@@ -1256,7 +1263,7 @@ h5t_refine_marked_elems (
|
||||
H5_CORE_API_RETURN (H5_SUCCESS);
|
||||
}
|
||||
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
/*
|
||||
* Calculate the global entity range
|
||||
* range[i] = first glb entity of proc i
|
||||
@@ -1401,6 +1408,7 @@ get_new_vtx_of_edge(
|
||||
}
|
||||
H5_PRIV_FUNC_RETURN (H5_ERR_INTERNAL); //edge that should be refined in not refined
|
||||
}
|
||||
|
||||
/*
|
||||
* Go through elements and find boundary edges that were refined on this proc.
|
||||
* we try to find edges that are shared with non-local elements (they could have
|
||||
@@ -2241,8 +2249,7 @@ h5t_post_refine (
|
||||
}
|
||||
|
||||
|
||||
#ifdef PARALLEL_IO
|
||||
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
h5_err_t
|
||||
h5t_post_refine_chk (
|
||||
h5t_mesh_t* const m,
|
||||
@@ -2251,7 +2258,8 @@ h5t_post_refine_chk (
|
||||
H5_CORE_API_ENTER (h5_err_t, "m=%p", m);
|
||||
h5_debug("post_refine_chk");
|
||||
// get boundary edges
|
||||
h5_edge_list_t* b_edges = h5tpriv_init_edge_list(h5tpriv_ref_elem_get_num_edges(m) * m->marked_entities->num_items);
|
||||
h5_edge_list_t* b_edges = h5tpriv_init_edge_list (
|
||||
h5tpriv_ref_elem_get_num_edges(m) * m->marked_entities->num_items);
|
||||
TRY (h5tpriv_find_boundary_edges (m, marked_glb_elems, b_edges));
|
||||
|
||||
// exchange boundary edges
|
||||
@@ -2482,7 +2490,7 @@ h5t_end_refine_elems (
|
||||
) {
|
||||
H5_CORE_API_ENTER (h5_err_t, "m=%p", m);
|
||||
if (m->is_chunked) {
|
||||
#ifdef PARALLEL_IO
|
||||
#ifdef WITH_PARALLEL_H5GRID
|
||||
TRY (h5priv_mpi_barrier (m->f->props->comm));
|
||||
m->timing.measure[m->timing.next_time++] = MPI_Wtime();
|
||||
h5_glb_idxlist_t* glb_list = NULL;
|
||||
@@ -2510,7 +2518,7 @@ h5t_end_refine_elems (
|
||||
H5_CORE_API_RETURN (H5_SUCCESS);
|
||||
}
|
||||
|
||||
|
||||
#if defined(WITH_PARALLEL_H5GRID)
|
||||
h5_err_t
|
||||
h5tpriv_init_chunks (
|
||||
h5t_mesh_t* const m
|
||||
@@ -2639,7 +2647,6 @@ h5tpriv_create_chunk (
|
||||
H5_PRIV_FUNC_RETURN (H5_SUCCESS);
|
||||
}
|
||||
|
||||
#ifdef PARALLEL_IO
|
||||
/*
|
||||
* exchange newly created chunks
|
||||
*/
|
||||
|
||||
@@ -57,6 +57,7 @@ h5tpriv_get_num_new_elems (
|
||||
return m->methods->store->get_num_new_elems ();
|
||||
}
|
||||
|
||||
#if defined(WITH_PARALLEL_H5GRID)
|
||||
h5_err_t
|
||||
h5tpriv_init_chunks (h5t_mesh_t* const);
|
||||
|
||||
@@ -86,5 +87,6 @@ h5tpriv_octant_is_full (h5t_octree_t* octree, h5_oct_idx_t oct_idx);
|
||||
|
||||
h5_err_t
|
||||
h5tpriv_get_ranges (h5t_mesh_t* const m, h5_glb_idx_t* range, h5_glb_idx_t mycount, h5_glb_idx_t glb_start);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -259,11 +259,13 @@ struct h5t_mesh {
|
||||
|
||||
/*** chunking ***/
|
||||
h5_lvl_idx_t is_chunked; /* == 1 if mesh is chunked */
|
||||
#if defined(WITH_PARALLEL_H5GRID)
|
||||
h5t_octree_t* octree;
|
||||
h5t_chunks_t* chunks;
|
||||
h5_dsinfo_t dsinfo_chunks;
|
||||
h5_dsinfo_t dsinfo_octree;
|
||||
h5_dsinfo_t dsinfo_userdata;
|
||||
#endif
|
||||
h5t_timing_t timing;
|
||||
|
||||
h5_strlist_t* mtagsets;
|
||||
|
||||
@@ -19,18 +19,18 @@ extern "C" {
|
||||
// it is very unlikely that there are more than 2^32 octants needed. since there is no id
|
||||
// we dont need that...
|
||||
//#if defined(USE_LARGE_INDICES)
|
||||
//typedef int64_t h5_oct_idx_t; // type for a octant
|
||||
//typedef h5_uint64_t h5_oct_userlev_t; // type for user defined levels
|
||||
//typedef int64_t h5_oct_idx_t; // type for a octant
|
||||
//typedef h5_uint64_t h5_oct_userlev_t; // type for user defined levels
|
||||
//#define OCT_USERLEV_LENGTH 64
|
||||
//#else
|
||||
typedef h5_int32_t h5_oct_idx_t; // type for a octant
|
||||
typedef h5_uint32_t h5_oct_userlev_t; // type for user defined levels
|
||||
typedef h5_int32_t h5_oct_idx_t; // type for a octant
|
||||
typedef h5_uint32_t h5_oct_userlev_t; // type for user defined levels
|
||||
#define OCT_USERLEV_LENGTH 32
|
||||
//#endif
|
||||
|
||||
typedef h5_int32_t h5_oct_level_t;
|
||||
typedef int16_t h5_oct_orient_t; // orientation of an octant
|
||||
typedef int16_t h5_oct_dir_t; // direction to look for neighboring octants
|
||||
typedef int16_t h5_oct_orient_t; // orientation of an octant
|
||||
typedef int16_t h5_oct_dir_t; // direction to look for neighboring octants
|
||||
|
||||
|
||||
#define OCT_CHG_INTERNAL 11
|
||||
|
||||
Reference in New Issue
Block a user