Commit b1aa655b authored by Marc Howison's avatar Marc Howison

1.6.3 release

parent efb1e392
#### H5PART 1.6.3 ############################################################
New build system uses libtool and can build shared libraries.
Fixed a bug that incorrectly identifies the number of selected points in a view
when using H5PartSetViewIndices.
Fixed bug in Fortran test reported by several people, as well as several
incorrect views set in the C test that were causing segfaults.
Fixed name mismatches in the Fortran interface, and an off-by-one indexing
problem.
#### H5PART 1.6.2 ############################################################ #### H5PART 1.6.2 ############################################################
Removed H5PartSetViewEmpty Removed H5PartSetViewEmpty
......
...@@ -2585,7 +2585,30 @@ _H5Part_get_num_particles ( ...@@ -2585,7 +2585,30 @@ _H5Part_get_num_particles (
0, 0,
dataset_name, H5PART_DATANAME_LEN ); dataset_name, H5PART_DATANAME_LEN );
if ( herr < 0 ) return herr; if ( herr < 0 ) return herr;
/* returns 0 if there are no datasets on disk */
/* if a view exists, use its size as the number of particles */
if ( _H5Part_has_view ( f ) )
{
nparticles = H5Sget_select_npoints ( f->diskshape );
if ( nparticles < 0 ) return HANDLE_H5S_GET_SELECT_NPOINTS_ERR;
_H5Part_print_debug (
"Found %lld points with H5Sget_select_npoints",
(long long)nparticles );
#if 0 // this does not work for indices
/* double check that the size of the diskshape agrees with
* the size of the view */
if ( nparticles != f->viewend - f->viewstart + 1 ) {
_H5Part_print_warn (
"Number of particles (%lld) does not agree "
"with view range.", (long long)nparticles );
return HANDLE_H5PART_BAD_VIEW_ERR (
f->viewstart, f->viewend);
}
#endif
}
/* herr is 0 if there are no datasets on disk */
else if ( herr == 0 ) else if ( herr == 0 )
{ {
/* try to recover number of particles from a previous /* try to recover number of particles from a previous
...@@ -2614,29 +2637,6 @@ _H5Part_get_num_particles ( ...@@ -2614,29 +2637,6 @@ _H5Part_get_num_particles (
return 0; return 0;
} }
} }
/* if a view exists, use its size as the number of particles */
if ( _H5Part_has_view ( f ) )
{
nparticles = H5Sget_select_npoints ( f->diskshape );
if ( nparticles < 0 ) return HANDLE_H5S_GET_SELECT_NPOINTS_ERR;
_H5Part_print_debug (
"Found %lld points with H5Sget_select_npoints",
(long long)nparticles );
#if 0 // this does not work for indices
/* double check that the size of the diskshape agrees with
* the size of the view */
if ( nparticles != f->viewend - f->viewstart + 1 ) {
_H5Part_print_warn (
"Number of particles (%lld) does not agree "
"with view range.", (long long)nparticles );
return HANDLE_H5PART_BAD_VIEW_ERR (
f->viewstart, f->viewend);
}
#endif
}
/* otherwise, report all particles on disk in the first dataset /* otherwise, report all particles on disk in the first dataset
* for this timestep */ * for this timestep */
else else
...@@ -2855,9 +2855,9 @@ _set_view_indices ( ...@@ -2855,9 +2855,9 @@ _set_view_indices (
herr = _reset_view ( f ); herr = _reset_view ( f );
if ( herr < 0 ) return herr; if ( herr < 0 ) return herr;
if ( indices == NULL ) { if ( indices == NULL || nelems <= 0 ) {
_H5Part_print_warn ( _H5Part_print_warn (
"View indices array is null: reseting view." ); "View indices array is null or size is <= 0: reseting view." );
return H5PART_SUCCESS; return H5PART_SUCCESS;
} }
...@@ -2880,15 +2880,7 @@ _set_view_indices ( ...@@ -2880,15 +2880,7 @@ _set_view_indices (
if ( total == 0 ) return H5PART_SUCCESS; if ( total == 0 ) return H5PART_SUCCESS;
/* check length of list */ f->nparticles = (hsize_t) nelems;
if ( nelems < 0 ) {
_H5Part_print_warn (
"Array of view indices has length < 0: "
"resetting view.");
f->nparticles = 0;
} else {
f->nparticles = (hsize_t) nelems;
}
/* declare overall data size but then will select a subset */ /* declare overall data size but then will select a subset */
f->diskshape = H5Screate_simple ( 1, &total, NULL ); f->diskshape = H5Screate_simple ( 1, &total, NULL );
...@@ -3203,7 +3195,7 @@ _read_data ( ...@@ -3203,7 +3195,7 @@ _read_data (
if ( f->memshape != H5S_ALL ) if ( f->memshape != H5S_ALL )
{ {
nmem = H5Sget_select_npoints ( f->memshape ); nmem = H5Sget_simple_extent_npoints ( f->memshape );
if ( nmem < 0 ) return HANDLE_H5S_GET_SELECT_NPOINTS_ERR; if ( nmem < 0 ) return HANDLE_H5S_GET_SELECT_NPOINTS_ERR;
/* make sure the memory space selected by the view has /* make sure the memory space selected by the view has
......
...@@ -175,10 +175,6 @@ test_read_data64(H5PartFile *file, int nparticles, int step) ...@@ -175,10 +175,6 @@ test_read_data64(H5PartFile *file, int nparticles, int step)
status = H5PartSetView(file, start, end); status = H5PartSetView(file, start, end);
RETURN(status, H5PART_SUCCESS, "H5PartSetView"); RETURN(status, H5PART_SUCCESS, "H5PartSetView");
status = H5PartReadDataFloat64(file, "x", x);
RETURN(status, H5PART_SUCCESS, "H5PartReadDataFloat64");
FVALUE(x[rank], (double)(start+rank+nparticles*t), "x data");
val = H5PartGetView(file, &start, &end); val = H5PartGetView(file, &start, &end);
IVALUE(val, nprocs*nparticles-start, "particle count"); IVALUE(val, nprocs*nparticles-start, "particle count");
IVALUE(start, rank, "view start"); IVALUE(start, rank, "view start");
...@@ -187,51 +183,60 @@ test_read_data64(H5PartFile *file, int nparticles, int step) ...@@ -187,51 +183,60 @@ test_read_data64(H5PartFile *file, int nparticles, int step)
status = H5PartSetView(file, -1, -1); status = H5PartSetView(file, -1, -1);
RETURN(status, H5PART_SUCCESS, "H5PartSetView"); RETURN(status, H5PART_SUCCESS, "H5PartSetView");
status = H5PartSetView(file, 0, nparticles-1);
RETURN(status, H5PART_SUCCESS, "H5PartSetView");
val = H5PartGetNumParticles(file);
IVALUE(val, nparticles, "particle count");
status = H5PartReadDataFloat64(file, "x", x); status = H5PartReadDataFloat64(file, "x", x);
RETURN(status, H5PART_SUCCESS, "H5PartReadDataFloat64"); RETURN(status, H5PART_SUCCESS, "H5PartReadDataFloat64");
IVALUE(x[rank], (double)(rank+nparticles*t), "x data"); IVALUE(x[rank], (double)(rank+nparticles*t), "x data");
status = H5PartResetView(file);
RETURN(status, H5PART_SUCCESS, "H5PartResetView");
val = H5PartGetNumParticles(file);
IVALUE(val, nprocs*nparticles, "particle count");
indices[0] = rank*2 + 0; indices[0] = rank*2 + 0;
indices[1] = rank*2 + 3; indices[1] = rank*2 + 3;
indices[2] = rank*2 + 9; indices[2] = rank*2 + 9;
indices[3] = rank*2 + 7; indices[3] = rank*2 + 7;
status = H5PartSetViewIndices(file, indices, -1);
RETURN(status, H5PART_SUCCESS, "H5PartSetViewIndices");
status = H5PartReadDataFloat64(file, "x", x);
RETURN(status, H5PART_SUCCESS, "H5PartReadDataFloat64");
FVALUE(x[2*rank], (double)(2*rank+nparticles*t), "x data");
status = H5PartResetView(file);
RETURN(status, H5PART_SUCCESS, "H5PartResetView");
status = H5PartSetViewIndices(file, indices, 4); status = H5PartSetViewIndices(file, indices, 4);
RETURN(status, H5PART_SUCCESS, "H5PartSetViewIndices"); RETURN(status, H5PART_SUCCESS, "H5PartSetViewIndices");
val = H5PartGetNumParticles(file); val = H5PartGetNumParticles(file);
IVALUE(val, 4, "particle count"); IVALUE(val, 4, "particle count");
status = H5PartReadDataFloat64(file, "x", x); double x2[4];
status = H5PartReadDataFloat64(file, "x", x2);
RETURN(status, H5PART_SUCCESS, "H5PartReadDataFloat64"); RETURN(status, H5PART_SUCCESS, "H5PartReadDataFloat64");
FVALUE(x[2], (double)(rank*2+9+nparticles*t), "x data"); FVALUE(x2[0], (double)(2*rank+0+nparticles*t), "x data");
FVALUE(x2[1], (double)(2*rank+3+nparticles*t), "x data");
FVALUE(x2[2], (double)(2*rank+9+nparticles*t), "x data");
FVALUE(x2[3], (double)(2*rank+7+nparticles*t), "x data");
val = H5PartGetNumParticles(file); status = H5PartSetViewIndices(file, indices, -1);
IVALUE(val, 4, "particle count");
status = H5PartSetViewIndices(file, NULL, 4);
RETURN(status, H5PART_SUCCESS, "H5PartSetViewIndices"); RETURN(status, H5PART_SUCCESS, "H5PartSetViewIndices");
status = H5PartReadDataFloat64(file, "x", x); val = H5PartGetNumParticles(file);
RETURN(status, H5PART_SUCCESS, "H5PartReadDataFloat64"); IVALUE(val, nprocs*nparticles, "particle count");
status = H5PartSetCanonicalView(file); status = H5PartSetCanonicalView(file);
RETURN(status, H5PART_SUCCESS, "H5PartSetCanonicalView"); RETURN(status, H5PART_SUCCESS, "H5PartSetCanonicalView");
val = H5PartGetNumParticles(file);
IVALUE(val, nparticles, "particle count");
status = H5PartReadParticleStep ( status = H5PartReadParticleStep (
file, t, x, y, z, px, py, pz, id); file, t, x, y, z, px, py, pz, id);
RETURN(status, H5PART_SUCCESS, "H5PartReadParticleStep"); RETURN(status, H5PART_SUCCESS, "H5PartReadParticleStep");
status = H5PartSetViewIndices(file, NULL, 4);
RETURN(status, H5PART_SUCCESS, "H5PartSetViewIndices");
for (i=0; i<nparticles; i++) for (i=0; i<nparticles; i++)
{ {
FVALUE(x[i] , 0.0 + (double)(i+nparticles*t), " x data"); FVALUE(x[i] , 0.0 + (double)(i+nparticles*t), " x data");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment