Files
src_old/examples/H5Part/read_setview.c
T

70 lines
2.2 KiB
C

/*
Copyright (c) 2006-2013, The Regents of the University of California,
through Lawrence Berkeley National Laboratory (subject to receipt of any
required approvals from the U.S. Dept. of Energy) and the Paul Scherrer
Institut (Switzerland). All rights reserved.
License: see file COPYING in top level of source distribution.
*/
#include "H5hut.h"
#define DEFAULT_VERBOSITY H5_VERBOSE_DEFAULT
#define FNAME "example_setview.h5"
int
main (
int argc, char* argv[]
){
h5_int64_t verbosity = DEFAULT_VERBOSITY;
// initialize MPI & H5hut
int comm_rank = 0;
int comm_size = 1;
MPI_Init (&argc, &argv);
MPI_Comm comm = MPI_COMM_WORLD;
MPI_Comm_rank (comm, &comm_rank);
MPI_Comm_size (comm, &comm_size);
H5AbortOnError ();
H5SetVerbosityLevel (verbosity);
// open file and go to step#0
h5_file_t file = H5OpenFile (FNAME, H5_O_RDONLY, H5_PROP_DEFAULT);
H5SetStep (file, 0);
// compute a "canonical" view: all cores get almost the same number of
// particles
h5_int64_t total_particles = H5PartGetNumParticles (file);
h5_int64_t nparticles = total_particles / comm_size;
h5_int64_t remainder = total_particles % comm_size;
h5_int64_t start = comm_rank * nparticles;
// adjust number of local particles
if (comm_rank < remainder)
nparticles++;
// adjust start
if (comm_rank < remainder)
start += comm_rank;
else
start += remainder;
// Note: setting end = start - 1 forces the
// selection of zero particles!
h5_int64_t end = start + nparticles - 1;
printf ("[proc %d]: set view to [%lld..%lld]\n", comm_rank, start, end);
H5PartSetView (file, start, end);
h5_int32_t* data = calloc (nparticles, sizeof (*data));
H5PartReadDataInt32 (file, "data", data);
for (int i = 0; i < nparticles; i++) {
printf ("[proc %d]: global index = %lld; local index = %d, value = %d\n",
comm_rank, start+i, i, data[i]);
}
H5CloseFile (file);
return MPI_Finalize ();
}