#include #include #include #include "vcbutils.h" #include #include int main(int argc, char ** argv) { vcbdatatype datatype; int ndims, orig[3], dsize[3], nattribs; int cutsize[3], lbounds[3], ubounds[3]; int ncuts, k, interval, headlen, i; void * outdata; FILE * fp; /* See if user passed an argument. */ if (argc != 3) { fprintf(stderr, "Usage: %s datafile outrootname\n", argv[0]); exit(1); } MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, &k); MPI_Comm_size(MPI_COMM_WORLD, &ncuts); vcbReadHeaderBinm(argv[1], &datatype, &ndims, orig, dsize, &nattribs); /* set up partition boundaries */ interval = (int)ceil(((double)dsize[0])/ncuts); lbounds[0] = interval * k; ubounds[0] = interval * (k+1); if (ubounds[0] >= dsize[0]) ubounds[0] = dsize[0]-1; cutsize[0] = ubounds[0] - lbounds[0] + 1; /* set up other bounds */ lbounds[1] = 0; ubounds[1] = dsize[1] - 1; lbounds[2] = 0; ubounds[2] = dsize[2] - 1; cutsize[1] = dsize[1]; cutsize[2] = dsize[2]; outdata = malloc(cutsize[0]*cutsize[1]*cutsize[2]*nattribs*vcbSizeOf(datatype)); fp = fopen(argv[1],"rb"); headlen = (3+2*ndims)*sizeof(int)+sizeof(datatype);/*vcbSizeOf(datatype);*/ vcbFileGrablk(fp, headlen, outdata, nattribs, vcbSizeOf(datatype), ndims, dsize, lbounds, ubounds, NULL); for (i = 0; i < ndims; orig[i] += lbounds[i], i++); vcbGenBinm(argv[2], datatype, ndims, orig, cutsize, nattribs, outdata); free(outdata); fclose(fp); MPI_Finalize(); return 0; }