Hi, Jim,
We can add two new functions in pnetcdf library:
int ncmpi_inq_format (int ncid, int *formatp);
int ncmpi_inq_file_format (char *filename, int *formatp);
The return argument "formatp" will be a constant defined in pnetcdf.h.
Currently we have
#define NC_FORMAT_CLASSIC 1
#define NC_FORMAT_64BIT 2
#define NC_FORMAT_64BIT_DATA 5
Since netcdf4 is in HDF5 format, as Russ pointed out, it may not
be as simple to report and return NC_FORMAT_NETCDF4 and
NC_FORMAT_NETCDF4_CLASSIC.
But, we can add
#define NC_FORMAT_UNKNOWN -1
for formats other than the above already-defined three.
Wei-keng
On Feb 2, 2010, at 11:17 AM, Jim Edwards wrote:
Hi Russ,
Maybe I can distill the essence of this function since my goal is to
use it before I call the netcdf open function.
I think that 64-bit-offset is the pnetcdf format that I was
referring to.
Thanks for the hint about hdf5 files.
- Jim
On Tue, Feb 2, 2010 at 9:58 AM, Russ Rew <russ@xxxxxxxxxxxxxxxx>
wrote:
Jim,
> I am in need of a function that can identify a file as netcdf3,
netcdf4, or
> pnetcdf 64-bit.
> Preferably I would like this function to work without having
linked any of
> the mentioned netcdf libraries.
>
> Does anyone have or know of one?
Although it doesn't match your preference for independence from netCDF
libraries, the nc_inq_format() function documented here:
http://www.unidata.ucar.edu/software/netcdf/docs/netcdf-c.html#nc_005finq-Family
distinguishes among the 4 netCDF format variants:
http://www.unidata.ucar.edu/software/netcdf/docs/faq.html#fv1
in the netCDF-4 library or between classic and 64-bit-offset formats
in
a netCDF-3 library. It doesn't recognize the pnetcdf 64-bit variant.
By the way, an HDF5 file can't necessarily be distinguished by its
first
4 bytes, because HDF5 files may begin with a "user-block" of size 512,
1024, 2048, ... bytes, before the 4-byte file-type signature.
--Russ