Beispiel #1
0
void Cio_data::write(vector<Cparticle> &ps, int timestep) {
    H5PartFile *writer = H5PartOpenFile(filename.c_str(),H5PART_WRITE);

    H5PartSetStep(writer,timestep);
    int n = ps.size();
    H5PartSetNumParticles(writer,n);

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

    double zero[n];
    for (int i=0; i<n; i++) {
        zero[i] = 0.0;
        for (int j=0; j<NDIM; j++) {
            r[j][i] = ps[i].r[j];
            v[j][i] = ps[i].v[j];
        }
        mass[i] = ps[i].mass;
        u[i] = ps[i].u;
        tag[i] = ps[i].tag;
    }

    for (int i=0; i<NDIM; i++) {
        H5PartWriteDataFloat64(writer,dimNames[i],r[i]);
        H5PartWriteDataFloat64(writer,vdimNames[i],v[i]);
    }
    for (int i=NDIM; i<3; i++) {
        H5PartWriteDataFloat64(writer,dimNames[i],zero);
        H5PartWriteDataFloat64(writer,vdimNames[i],zero);
    }
    H5PartWriteDataFloat64(writer,"mass",mass);
    H5PartWriteDataFloat64(writer,"u",u);
    H5PartWriteDataInt64(writer,"id",tag);
}
Beispiel #2
0
static void
test_write_data64(H5PartFile *file, int nparticles, int step)
{
	int i,t;
	h5part_int64_t status, val;

	double *x,*y,*z;
	double *px,*py,*pz;
	h5part_int64_t *id;

	x=(double*)malloc(nparticles*sizeof(double));
	y=(double*)malloc(nparticles*sizeof(double));
	z=(double*)malloc(nparticles*sizeof(double));
	px=(double*)malloc(nparticles*sizeof(double));
	py=(double*)malloc(nparticles*sizeof(double));
	pz=(double*)malloc(nparticles*sizeof(double));
	id=(h5part_int64_t*)malloc(nparticles*sizeof(h5part_int64_t));

	/* invalid stride will produce a warning */
	status = H5PartSetNumParticlesStrided(file, nparticles, -1);
	RETURN(status, H5PART_SUCCESS, "H5PartSetNumParticlesStrided");

	/* invalid nparticles will produce an error */
	status = H5PartSetNumParticlesStrided(file, -1, 2);
	RETURN(status, H5PART_ERR_INVAL, "H5PartSetNumParticlesStrided");

#if PARALLEL_IO
	TEST("Setting throttle");
	status = H5PartSetThrottle(file, 2);
	RETURN(status, H5PART_SUCCESS, "H5PartSetThrottle");
#endif

	TEST("Writing 64-bit data");

	for (t=step; t<step+NTIMESTEPS; t++)
	{
		for (i=0; i<nparticles; i++)
		{
			x[i]  = 0.0 + (double)(i+nparticles*t);
			y[i]  = 0.1 + (double)(i+nparticles*t);
			z[i]  = 0.2 + (double)(i+nparticles*t);
			px[i] = 0.3 + (double)(i+nparticles*t);
			py[i] = 0.4 + (double)(i+nparticles*t);
			pz[i] = 0.5 + (double)(i+nparticles*t);
			id[i] = i + nparticles*t;
		}

		val = H5PartHasStep(file, t);

		status = H5PartSetStep(file, t);
		RETURN(status, H5PART_SUCCESS, "H5PartSetStep");

		if (val == 0) test_write_step_attribs(file, t);

		status = H5PartSetNumParticles(file, nparticles);
		RETURN(status, H5PART_SUCCESS, "H5PartSetNumParticles");

		status = H5PartWriteDataFloat64(file, "x", x);
		RETURN(status, H5PART_SUCCESS, "H5PartWriteDataFloat64");

		status = H5PartWriteDataFloat64(file, "y", y);
		RETURN(status, H5PART_SUCCESS, "H5PartWriteDataFloat64");

		status = H5PartWriteDataFloat64(file, "z", z);
		RETURN(status, H5PART_SUCCESS, "H5PartWriteDataFloat64");
		
		status = H5PartWriteDataFloat64(file, "px", px);
		RETURN(status, H5PART_SUCCESS, "H5PartWriteDataFloat64");

		status = H5PartWriteDataFloat64(file, "py", py);
		RETURN(status, H5PART_SUCCESS, "H5PartWriteDataFloat64");

		status = H5PartWriteDataFloat64(file, "pz", pz);
		RETURN(status, H5PART_SUCCESS, "H5PartWriteDataFloat64");
		
		status = H5PartWriteDataInt64(file, "id", id);
		RETURN(status, H5PART_SUCCESS, "H5PartWriteDataInt64");
	}
}