コード例 #1
0
ファイル: io_data.cpp プロジェクト: xyuan/SPH-DEM
vector<Cparticle> *Cio_data::read(int timestep) {
    H5PartFile *reader = H5PartOpenFile(filename.c_str(),H5PART_READ);
    if (H5PartGetNumSteps(reader) < timestep) {
        cerr << "There is not "<<timestep<<"timesteps in the file"<<endl;
        H5PartCloseFile(reader);
        exit(-1);
    }
    H5PartSetStep(reader,timestep);
    int n = H5PartGetNumParticles(reader);

    vector<Cparticle> *output = new vector<Cparticle>(n);

    double r[NDIM][n],v[NDIM][n],mass[n],u[n];

    for (int i=0; i<NDIM; i++) {
        if (!H5PartReadDataFloat64(reader,dimNames[i],r[i])) {
            cerr << "Error reading particle position data" << endl;
            exit(-1);
        }
    }
    for (int i=0; i<NDIM; i++) {
        if (!H5PartReadDataFloat64(reader,vdimNames[i],v[i])) {
            cerr << "Error reading particle velocity data" << endl;
            exit(-1);
        }
    }
    if (!(H5PartReadDataFloat64(reader,"mass",mass))&&
            (H5PartReadDataFloat64(reader,"u",u))) {
        cerr << "Error reading particle data in file" << endl;
        exit(-1);
    }
    for (int i=0; i<n; i++) {
        for (int j=0; j<NDIM; i++) {
            (*output)[i].r[j] = r[j][i];
            (*output)[i].v[j] = r[j][i];
        }
        (*output)[i].mass = mass[i];
        (*output)[i].u = u[i];
    }
    H5PartCloseFile(reader);
    return output;
}
コード例 #2
0
ファイル: read.c プロジェクト: tfogal/h5part
void test_read2(void)
{
	H5PartFile *file1;
	H5PartFile *file2;

	h5part_int64_t status;

	TEST(	"Opening file twice, read-only");
	file1 = OPEN(FILENAME,H5PART_READ);
	test_is_valid(file1);
	file2 = OPEN(FILENAME,H5PART_READ);
	test_is_valid(file2);

	test_read_strided_data32(file1, NPARTICLES, NTIMESTEPS+1);
	test_read_file_attribs(file2, 1);

	status = H5PartCloseFile(file1);
	RETURN(status, H5PART_SUCCESS, "H5PartCloseFile");
	status = H5PartCloseFile(file2);
	RETURN(status, H5PART_SUCCESS, "H5PartCloseFile");
}
コード例 #3
0
ファイル: read.c プロジェクト: tfogal/h5part
void test_read4(void)
{
	H5PartFile *file1;
	H5PartFile *file2;

	h5part_int64_t status;

	TEST(	"Opening file twice, read-only, lustre filesystem "
		"MPI-IO Independent VFD, 64K alignment");
	file1 = OPENALIGN(FILENAME,
		H5PART_READ | H5PART_VFD_MPIIO_IND | H5PART_FS_LUSTRE,
		65536);
	test_is_valid(file1);
	file2 = OPENALIGN(FILENAME,
		H5PART_READ | H5PART_VFD_MPIIO_IND | H5PART_FS_LUSTRE,
		65536);
	test_is_valid(file2);

	TEST("Redefining step name");
	status = H5PartDefineStepName(file1, LONGNAME, 16);
	RETURN(status, H5PART_SUCCESS, "H5PartDefineStepName");

	status = H5PartDefineStepName(file2, LONGNAME, 16);
	RETURN(status, H5PART_SUCCESS, "H5PartDefineStepName");

	test_read_file_attribs(file1, 1);

	status = H5PartSetStep(file2, NTIMESTEPS);
	RETURN(status, H5PART_SUCCESS, "H5PartSetStep");

	test_read_data64(file2, NPARTICLES, NTIMESTEPS-2);

	status = H5PartCloseFile(file1);
	RETURN(status, H5PART_SUCCESS, "H5PartCloseFile");
	status = H5PartCloseFile(file2);
	RETURN(status, H5PART_SUCCESS, "H5PartCloseFile");
}
コード例 #4
0
ファイル: write.c プロジェクト: quinoacomputing/H5Part
void test_write4(void)
{
	H5PartFile *file1;
	H5PartFile *file2;

	h5part_int64_t status;

	TEST(	"Opening file twice, write-append + read-only, "
		"lustre filesystem, MPI-IO Independent VFD, 1K alignment");
	file1 = OPENALIGN(FILENAME,
		H5PART_APPEND | H5PART_VFD_MPIIO_IND | H5PART_FS_LUSTRE,
		1024);
	test_is_valid(file1);
	file2 = OPENALIGN(FILENAME,
		H5PART_READ | H5PART_VFD_MPIIO_IND | H5PART_FS_LUSTRE,
		1024);
	test_is_valid(file2);

	TEST("Redefining step name");
	status = H5PartDefineStepName(file1, LONGNAME, 16);
	RETURN(status, H5PART_SUCCESS, "H5PartDefineStepName");

	status = H5PartDefineStepName(file2, LONGNAME, 16);
	RETURN(status, H5PART_SUCCESS, "H5PartDefineStepName");

	status = H5PartSetChunkSize(file1, NPARTICLES);
	RETURN(status, H5PART_SUCCESS, "H5PartSetChunkSize");

	test_write_data64(file1, NPARTICLES, NTIMESTEPS-2);
	test_write_file_attribs(file1, 1);

	status = H5PartCloseFile(file1);
	RETURN(status, H5PART_SUCCESS, "H5PartCloseFile");
	status = H5PartCloseFile(file2);
	RETURN(status, H5PART_SUCCESS, "H5PartCloseFile");
}
コード例 #5
0
ファイル: read.c プロジェクト: tfogal/h5part
void test_read1(void)
{
	H5PartFile *file1;

	h5part_int64_t status;

	TEST("Opening file once, read-only");
	file1 = OPEN(FILENAME,H5PART_READ);
	test_is_valid(file1);

	test_read_file_attribs(file1, 0);
	test_read_data32(file1, NPARTICLES, 1);

	status = H5PartCloseFile(file1);
	RETURN(status, H5PART_SUCCESS, "H5PartCloseFile");
}
コード例 #6
0
ファイル: write.c プロジェクト: quinoacomputing/H5Part
void test_write1(void)
{
	H5PartFile *file1;

	h5part_int64_t status;

	TEST("Opening file once, write-truncate");
	file1 = OPEN(FILENAME,H5PART_WRITE);
	test_is_valid(file1);

	test_write_data32(file1, NPARTICLES, 1);
	test_write_file_attribs(file1, 0);

	status = H5PartCloseFile(file1);
	RETURN(status, H5PART_SUCCESS, "H5PartCloseFile");
}
コード例 #7
0
ファイル: read.c プロジェクト: tfogal/h5part
void test_read3(void)
{
	H5PartFile *file1;

	h5part_int64_t status;

	TEST(	"Opening file once, read-only, lustre filesystem, "
		"MPI-POSIX VFD, 64KB alignment");
	file1 = OPENALIGN(FILENAME,
		H5PART_READ | H5PART_VFD_MPIPOSIX | H5PART_FS_LUSTRE,
		65536);
	test_is_valid(file1);

	TEST("Redefining step name");
	status = H5PartDefineStepName(file1, LONGNAME, 16);
	RETURN(status, H5PART_SUCCESS, "H5PartDefineStepName");

	test_read_strided_data64(file1, NPARTICLES, 0);
	test_read_file_attribs(file1, 0);

	status = H5PartCloseFile(file1);
	RETURN(status, H5PART_SUCCESS, "H5PartCloseFile");
}
コード例 #8
0
ファイル: write.c プロジェクト: quinoacomputing/H5Part
void test_write3(void)
{
	H5PartFile *file1;

	h5part_int64_t status;

	TEST(	"Opening file once, write-truncate, lustre filesyste, "
		"MPI-POSIX VFD, 1KB alignment");
	file1 = OPENALIGN(FILENAME,
		H5PART_WRITE | H5PART_VFD_MPIPOSIX | H5PART_FS_LUSTRE,
		1024);
	test_is_valid(file1);

	TEST("Redefining step name");
	status = H5PartDefineStepName(file1, LONGNAME, 16);
	RETURN(status, H5PART_SUCCESS, "H5PartDefineStepName");

	test_write_strided_data64(file1, NPARTICLES, 0);
	test_write_file_attribs(file1, 0);

	status = H5PartCloseFile(file1);
	RETURN(status, H5PART_SUCCESS, "H5PartCloseFile");
}
コード例 #9
0
double write_data (float* data, int iter, Params* p)
{
    int             i,j;
    double          start_time;
    double          open_time;
    double          write_time;
    double          close_time;
    double          total_time;
    double          sum_time;
    double          open_mean;
    double          write_mean;
    double          close_mean;
    double          bandwidth;
    float*          segment;
    char            var_name[64];
    char*           filename;
    H5PartFile*     file;
    h5part_int64_t  status;
    
    if (p->verbosity >= VERBOSITY_HIGH) {
        printf ("rank %d: writing data\n", p->rank);
    }

    start_time = MPI_Wtime();
    
    filename = (char*) malloc (strlen (p->filename) + 64);
    sprintf (filename, "%s/%d.h5", p->filename, iter);

    file = H5PartOpenFileParallelAlign (filename,
            p->flags, MPI_COMM_WORLD, p->alignment);
    if (!file) {
        fprintf (stderr,
                "rank %d: could not open H5Part file!\n", p->rank);
        MPI_Barrier (MPI_COMM_WORLD);
        exit (EXIT_FAILURE);
    }

    H5PartSetNumParticles (file, p->particles);
    if (p->verbosity >= VERBOSITY_HIGH) {
        printf ("rank %d: %ld particles\n", p->rank, p->particles);
    }

    open_time = MPI_Wtime() - start_time;

    segment = data;

    for (i=1; i<=p->segments; i++) {
        status = H5PartSetStep (file, i);
        if (status != H5PART_SUCCESS) {
            fprintf (stderr, "rank %d: H5PartSetStep error!", p->rank);
        }
        for (j=0; j<p->blocks; j++) {
            sprintf (var_name, "test%d", j);
            status = H5PartWriteDataFloat32 (file, var_name, segment);
            if (status != H5PART_SUCCESS) {
                fprintf (stderr,
                        "rank %d: H5PartWriteDataFloat32 error!", p->rank);
            }
            segment += p->particles;
        }
    }

    write_time = (MPI_Wtime() - start_time) - open_time;
    
    H5PartCloseFile (file);
    
    close_time = (MPI_Wtime() - start_time) - write_time - open_time;

    total_time = open_time + write_time + close_time;

    if (p->verbosity >= VERBOSITY_HIGH) {
        printf ("rank %d: write\t%.3f\t%.3f\t%.3f\t%.3f\n", p->rank,
                open_time, write_time, close_time, total_time);
    }

    MPI_Barrier (MPI_COMM_WORLD);
    MPI_Reduce (&open_time, &sum_time, 1, MPI_DOUBLE,
            MPI_SUM, 0, MPI_COMM_WORLD);
    open_mean = sum_time / p->procs;
    MPI_Reduce (&write_time, &sum_time, 1, MPI_DOUBLE,
            MPI_SUM, 0, MPI_COMM_WORLD);
    write_mean = sum_time / p->procs;
    MPI_Reduce (&close_time, &sum_time, 1, MPI_DOUBLE,
            MPI_SUM, 0, MPI_COMM_WORLD);
    close_mean = sum_time / p->procs;
    bandwidth = p->aggregate_size / total_time;

    if (p->verbosity >= VERBOSITY_MEDIUM && p->rank == 0) {
        printf ("write\t%.1f\t%.3f\t%.3f\t%.3f\t%.3f\n", bandwidth,
                open_mean, write_mean, close_mean, total_time);
    }

    free (filename);

    return bandwidth;
}