get/put_vara usage?

Smith, Brian E. smithbe at ornl.gov
Tue Nov 27 13:12:45 CST 2012


I am new to (p)netCDF and am having trouble trying to make use of get/put_vara to extract "slices" of a 4D variable from some data I've been given. I've read the docs and looked at the examples but things still aren't working for me.

The variable looks like: var[time][elev][lat][lon] with time being an "unlimited" variable

My code is essentially:

   open_files(&fh, &ofh); // open the input file for read, open the output file for write.
   setup_global_dims_attrs(fh, ofh); // inq_var then def_var lat/lon/elev/time then copies their atributes

   /* Define my output variable dimensions */
   ncmpi_inq_dimid(ofh, "lon", &dims[0]);
   ncmpi_inq_dimid(ofh, "lat", &dims[1]);
   ncmpi_def_dim(ofh, "plev", elev2-elev1, &dims[2]);
   ncmpi_def_dim(ofh, "time", time2-time1, &dims[3]);
   ncmpi_def_var(ofh, outname, type, ndims, dims, &outid);

   ncmpi_enddef(ofh);

   copy_global_dims(fh, ofh); //inq var on input, inq var on output, get_var on input, put_var on output for lat/lon/elev/time variables

MPI_Offset start[4], count[4], outstart[4];
start = {time1, elev1, 0, 0};
count  = (time2-time1, elev2-elev1, lat, lon};
outstart = {0,0,0,0};
total = count[0] * count[1] * count[2] * count[3];
float data = malloc(sizeof(float) * total);
ncmpi_get_vara_float_all(fh, varid, start, count, data);
ncmpi_put_vara_float_all(ofh, varid, outstart, count, data);
cllose_files(fh, ofh)


However, this just results in junk in the output file. There is no practical way to verify the read worked correctly unfortunately, so I can't tell if the read or the write call is incorrect. 

I would certainly appreciate any help.

Thanks.



More information about the parallel-netcdf mailing list