[netcdfgroup] NetCDF-3 file format changes
Dave Allured
dave.allured at noaa.gov
Tue Feb 26 16:27:16 MST 2008
Mario et al,
If you don't mind me asking, have you worked with large Netcdf-3
files with variables > 4GB, types NC_FLOAT and NC_INT only (i.e. 32
bit types)? Is the current Netcdf 3.6.2 software reliable with
these in your experience?
It has seemed reliable for me, but I must confess my usage of files
greater than 4GB has been very limited so far. Thank you for any
feedback.
Dave Allured
CU/CIRES Climate Diagnostics Center (CDC)
http://cires.colorado.edu/science/centers/cdc/
NOAA/ESRL/PSD, Climate Analysis Branch (CAB)
http://www.cdc.noaa.gov/
Mario Emmenlauer wrote:
> Hi,
>
> Roy Mendelssohn wrote:
>> See http://www.unidata.ucar.edu/software/netcdf/docs/faq.html#Large%20File%20Support0.
>> It has been possible since netcdf3.6
>
> with severe bugs, as posted by me to this mailing list on 09/12/2007
> (i.e. [netcdfgroup] possible bug in 3.6.2 with variables > 4GB).
> For variable types NC_BYTE, NC_CHAR and NC_SHORT it crashes badly.
>
> I have actually never received an answer to my bug report, don't know
> why nobody cared :-/
>
> BTW: below is an attached copy of the old mail
>
> Cheers,
>
> Mario
>
> ----
> I hope this bug hasn't been filed before, I couldn't find it
> on the list via a quick check.
>
> This concerns writing large (>4GB) variables in netcdf with
> large-file-support. In netcdf-3.6.2/libsrc/var.c around line
> 400 it reads:
>
> if( varp->xsz <= X_UINT_MAX / product )
> /* if integer multiply will not overflow */
> {
> varp->len = product * varp->xsz;
> } else {
> /* OK for last var to be "too big", indicated by this special len */
> varp->len = X_UINT_MAX;
> }
> switch(varp->type) {
> case NC_BYTE :
> case NC_CHAR :
> case NC_SHORT :
> if( varp->len%4 != 0 )
> {
> varp->len += 4 - varp->len%4; /* round up */
> /* *dsp += 4 - *dsp%4; */
> }
> break;
> default:
> /* already aligned */
> break;
> }
>
> In the case of NC_BYTE, NC_CHAR and NC_SHORT, varp->len will end
> up being X_UINT_MAX+1 instead of X_UINT_MAX. This in turn causes
> an assertion when calling ncx_put_size_t later:
> ncx.c:1812: ncx_put_size_t: Assertion `*ulp <= 4294967295U' failed.
>
> I could not think about a useful fix despite qualifying the
> rounding with the product-overflow (just moved the else-part
> further down):
>
> if( varp->xsz <= X_UINT_MAX / product )
> /* if integer multiply will not overflow */
> {
> varp->len = product * varp->xsz;
> switch(varp->type) {
> case NC_BYTE :
> case NC_CHAR :
> case NC_SHORT :
> if( varp->len%4 != 0 )
> {
> varp->len += 4 - varp->len%4; /* round up */
> /* *dsp += 4 - *dsp%4; */
> }
> break;
> default:
> /* already aligned */
> break;
> }
> } else {
> /* OK for last var to be "too big", indicated by this special len */
> varp->len = X_UINT_MAX;
> }
>
> I hope this bug report is useful. If you can send me a better
> patch against netcdf-3.6.2 I would highly appreciate it.
>
> Cheers,
>
> Mario Emmenlauer
> ----
>
>
>> On Feb 26, 2008, at 1:11 PM, Joe Sirott wrote:
>>
>>> Hi,
>>>
>>> In the "classic" netCDF file format (netCDF-3), a variable without a
>>> record dimension cannot be larger than 2GB. This limitation has been
>>> giving me a lot of headaches lately. I know that netCDF-4 is supposed to
>>> solve this problem, but there are a number of reasons why netCDF-4 is
>>> not a good option for me (no Java write support, for one).
>>>
>>> I could be missing something, but it seems like a very small change to
>>> the netCDF-3 file format would solve this problem. The only requirement
>>> would be changing the variable size info in the netCDF header from a 32
>>> bit to a 64 bit int (and, of course, updating the version info in the
>>> header).
>>>
>>> I'm guessing that I'm not the only netCDF user who has run into this
>>> problem and who is also reluctant to move to netCDF-4. Any possibility
>>> that Unidata could make these changes?
>>>
>>> Cheers,
>>>
>>> Joe S.
>>>
>>>
>>> _______________________________________________
>>> netcdfgroup mailing list
>>> netcdfgroup at unidata.ucar.edu <mailto:netcdfgroup at unidata.ucar.edu>
>>> For list information or to unsubscribe, visit:
>>> http://www.unidata.ucar.edu/mailing_lists/
>> **********************
>> "The contents of this message do not reflect any position of the U.S.
>> Government or NOAA."
>> **********************
>> Roy Mendelssohn
>> Supervisory Operations Research Analyst
>> NOAA/NMFS
>> Environmental Research Division
>> Southwest Fisheries Science Center
>> 1352 Lighthouse Avenue
>> Pacific Grove, CA 93950-2097
>>
>> e-mail: Roy.Mendelssohn at noaa.gov <mailto:Roy.Mendelssohn at noaa.gov> (Note
>> new e-mail address)
>> voice: (831)-648-9029
>> fax: (831)-648-8440
>> www: http://www.pfeg.noaa.gov/
>>
>> "Old age and treachery will overcome youth and skill."
>>
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> netcdfgroup mailing list
>> netcdfgroup at unidata.ucar.edu
>> For list information or to unsubscribe, visit: http://www.unidata.ucar.edu/mailing_lists/
> _______________________________________________
> netcdfgroup mailing list
> netcdfgroup at unidata.ucar.edu
> For list information or to unsubscribe, visit: http://www.unidata.ucar.edu/mailing_lists/
More information about the netcdfgroup
mailing list