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); }
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"); } }