Hi Gabriel,
> I would like to use the netCDF4 library
> (with which I am not familiar yet) to read
> netCDF3 files and to convert them to "classic"
> netCDF4 format (compatible with the
> netCDF3 API).
>
> What C++ API call should I make for reading
> netCDF3 files and what call for writing classic
> netCDF4 formatted files? Do I need to do some
> in-memory processing of the data read from
> netCDF3 files before writing it in netCDF4
> format?
You could use the nccopy utility that's available in the current
netCDF snapshot release from
ftp://ftp.unidata.ucar.edu/pub/netcdf/snapshot/
if you don't mind building from source. nccopy lets you specify the
kind of output file desired with an argument, so to convert a netCDF
classic or 64-bit offset file (commonly called "netCDF3 files") named
"in.nc" to a netCDF-4 classic model file named "foo_4c.nc", you
could use:
nccopy -k 4 in.nc foo_4c.nc
Alternatively, you could accomplish the same thing with the NCO
(netCDF Operators) package, available from http://nco.sourceforge.net/
by using the "ncks" program to convert the format, using:
ncks --fl_fmt=netcdf4_classic in.nc foo_4c.nc
If you want a generic C program to convert netCDF classic files to
netCDF-4 classic model files, you could use the example nccopy3.c
available here:
http://www.unidata.ucar.edu/netcdf/examples/programs/nccopy3.c
and in the nc_create call to create the output file, use:
stat = nc_create(outfile,NC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL,&ogrp);
Then link the program with the netCDF-4 library and it should work.
We don't have a version of nccopy in C++ yet, but we intend to
eventually provide one as an example for using a new C++ API for
netCDF-4, contributed by Lynton Appel of UKAEA Fusion, that will be made
available soon.
--Russ