Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

(this material was part of decision to use NetCDF3 for input files)

NetCDF data format

There are 5 variants of the format known as "netCDF":  (See https://www.unidata.ucar.edu/software/netcdf/docs/faq.html#How-many-netCDF-formats-are-there-and-what-are-the-differences-among-them)

...

How much of our inputdata is in each format?  See https://github.com/E3SM-Project/E3SM/issues/1970.   Most of our files are in a NetCDF-3 format.

NetCDF File format

The format of the file is slightly different from the data format

...

Each netCDF filetype imposes size limitations on the underlying data. Trying to exceed these limits leads to an NC_EVARSIZE error. The upshot is that only the CDF5 and netCDF4 formats are adequate for high-resolution coupled E3SM runs, since they (or at least the MPAS-O component) can produce multiples variables each exceeding 4 GB. For more details, read on. The per-file limit of all netCDF formats is not less than 8 EiB on modern computers, so any NC_EVARSIZE error is almost certainly due to violating a per-variable limit. Relevant limits: netCDF3 CDF1 format limits fixed variables to sizes smaller than 2^31 B = 2 GiB ~ 2.1 GB, and record variables to that size per record. A single variable may exceed this limit if and only if it is the last defined variable. netCDF3 CDF2 format limits fixed variables to sizes smaller than 2^32 B = 4 GiB ~ 4.2 GB, and record variables to that size per record. Any number of variables may reach, though not exceed, this size for fixed variables, or this size per record for record variables. The netCDF3 CDF5 and netCDF4 formats have no variable size limitations of real-world import. If any input or output variable in an E3SM simulation exceeds these limits, choose a PIO format capacious enough, either netCDF3 CDF2, PnetCDF/netCDF3 CDF5, or netCDF4.

NetCDF library:

There are 4 ways to build a library that reads netCDF files.  Our PIO library can interface to all of them at the same time if built properly.  The PIO_TYPENAME is set at runtime to indicate which one is to be used for all I/O operations.  The PIO_TYPENAME is in parenthesis below.

...