CDI NEWS
--------

Version 2.5.1 (05 Mar 2025):

   Changes:
     * NetCDF4: improved calculation of output chunk size
     * NetCDF4: improved calculation of input chunk cache size for numStep>1 and zSize>1

Version 2.5.0 (28 Nov 2024):

   Changes:
     * NetCDF: improved HealPIX support
     * reset chunktype if z and t are chunked
     * lock access to NCZARR in CDI_Threadsafe mode

Version 2.4.4 (19 Sep 2024):

   Fixed bugs:
     * absolute timeaxis failed with timeunits seconds [Bug #11916]

Version 2.4.2 (21 Jun 2024):

   Changes:
     * NetCDF4: improved calculation of input chunk cache size
     * NetCDF4: switched off output chunk cache
   Fixed bugs:
     * cdiInqContents: missing lock of non thread-safe netCDF4/HDF5 calls (bug fix)

Version 2.4.1 (21 May 2024):

   Changes:
     * Removed  interface function vlistCopy(), use vlistDuplicate()
     * calc_chunk_cache_size: improved for 4D chunked data
   Fixed bugs:
     * gribapi_get_timeunits: check unitsOfTime (bug fix) [report: Chris Barnard]

Version 2.4.0 (22 February 2024):

   New features:
     * Add experimental interface to FDB5
     * Add global option CDI_Threadsafe to lock non thread-safe netCDF4/HDF5 calls
   Fixed bugs:
     * improve support for time units second [Bug #11740]
     * calc_chunk_cache_size: wrong result for 3D data (bug fix)
     * netCDF: write of y-coordinates failed for Gaussian reduced grids (bug fix)

Version 2.3.0 (18 October 2023):

   New features:
     * Add GRIB2 HEALPix support (available with eccodes-2.32.0)
     * Add support for NetCDF attribute type NC_INT64
     * Add interface function streamInqNumSteps() to inquire number of time steps
     * gribapi decode: add support for single precision float interface (available since ecCodes-2.30.0)
     * grib2: add read only support for alternativeRowScanning
     * grib2: add support for earth radius specified by data producer
   Fixed bugs:
     * HIRLAM_EXTENSIONS: set default CDI_KEY_SCANNINGMODE to 64 [Bug #11367]
     * gribapiDefGridLCC: store DxInMetres/DyInMetres as double
     * NetCDF4: use chunkSize only if it is less than gridsize
     * cdfDefineAttributes: check filetype for unsigned int attributes
     * time information missing if the stream contains fields constant in time only

Version 2.2.0 (23 February 2023):

   New features:
     * Improve read performance of temporal chunked NetCDF4 data
     * Support for NetCDF4/HDF5 filter
     * async_worker: remove syncronization at end of timesteps
   New interface function
     * streamOpenReadQuery()
   Fixed bugs:
     * cdf_def_mapping: add support for datatype NC_STRING
     * grid module: remove initialization of CDI_KEY_SCANNINGMODE
     * cdf_read_xcoord: skip char coordinates only if ndims=1
     * NetCDF: reading of lower time bounds is wrong since 2.0.6

Version 2.1.0 (6 October 2022):

   New features:
     * Added support for NCZarr
     * Set number of significant bits used for NetCDF 4.9.0 bit-roundung: vlistDefVarNSB()/vlistInqVarNSB()
     * Added support for milli seconds
     * Changed DateType back to int
     * Made CDI compatible to revision 1.8.3 used in ICON
   Fixed bugs:
     * recalculate optimal chunk_size if gridsize is > chunk_size_lim
     * ecCodes encode: fix problem with startStep for step type MIN/MAX
     * GRIB read: recalculate start date/time for every record and timestep
     * changed chunk_size_lim from 1073741823 to 16777216
     * compareXYvals failed for unstructured grids (segmentation fault) [Bug #10632]
     * cdf_read_coordinates: check that grid cell bounds have only 2 dimensions [Bug #10575]

Version 2.0.0 (11 October 2021):

   New features:
     * Changed to 3-clause BSD license
     * Changed type of gridsize for size_t to SizeType
     * Changed type of date from int64_t to DateType
     * Added FDB5 support (experimental)
     * Added environment variables CDI_GRIB1_TEMPLATE and CDI_GRIB2_TEMPLATE
   Changes:
     * gridDefParamsLCC()/gridInqParamsLCC(): changed interface
     * gridDefParamsSTERE()/gridInqParamsSTERE(): changed interface
     * Replaced zaxisDefDatatype()/zaxisInqDatatype() by cdiDefKeyInt()/cdiInqKeyInt() with CDI_KEY_DATATYPE
     * Replaced gridDefDatatype()/gridInqDatatype() by cdiDefKeyInt()/cdiInqKeyInt() with CDI_KEY_DATATYPE
   Fixed bugs:
     * Allow UUID starting with zero
     * cgribexDefGridLambert(): recalculate xinc/yinc in meter

Version 1.9.6 (07 February 2019):

   New features:
     * Added support for polar stereographic projection
     * grib2: Added support for variables with different perturbationNumber
     * Added check for unsupported NetCDF4/HDF5 library combination (NetCDF  <= 4.4.0 with libhdf5 >= 1.10.0)
     * NetCDF: added support for single scalar variable
   Fixed bugs:
     * ecCodes: deleteLocalDefinition for GRIB1.tmpl
     * taxisCopyTimestep: don't copy rdate/rtime (bug fix)
     * scanning of attribute associate* failed (bug fix)
     * grib1/ecCodes: set maxStep to 65000 (bug fix)
     * cdf_read: removed limitation of nmiss_ to INT_MAX [Bug #8691]
     * cgribex: make section2 length dynamic (bug fix for large Gaussian reduced grids)
     * GRIB2: correct longitudeOfFirstGridPoint if necessary (bug fix)
     * CDI_reduce_dim: wrong result when reduce time dimension (bug fix)

Version 1.8.0 (14 February 2017):

   New features:
     * Refactor horizontal and vertical grid module
     * netCDF4: added support for attribute type NC_BYTE, NC_UBYTE, NC_USHORT and NC_UINT
   Fixed bugs:
     * iegWriteVarSliceDP: does not work (bug fix)
     * streamOpenAppend: call to gribContainersNew() missing (bug fix) [Bug #6944]
        
Version 1.7.0 (27 October 2015):

   New features:
     * added support for netCDF Scalar Coordinate Variables
     * added support for hybrid sigma pressure coordinates following the CF convention
     * merge changes from branches/cdi-tiles [from Florian Prill]
   Fixed bugs:
     * GRIB rotated grids: invert angle of rotation (north to south pole) (bug fix)
     * bug fix for scanning the WRF time axis
     * cdiStreamSetupVlist: added call to vlist_unlock(vlistID) (bug fix)

Version 1.6.8 (26 March 2015):

   Fixed bugs:
     * cdfCopyRecord: incorrect checksum for freed object [Bug #5461]
     * scan netcdf time units attribute
     * fixed rounding error for negativ timevalue
     * time unit second rounding error

Version 1.6.7 (5 December 2014):

   Fixed bugs:
     * GRIB2 output does not work

Version 1.6.6 (27 November 2014):

   New features:
     * IEG: added support for coordinate scale factor
   Fixed bugs:
     * table::decodeForm1: missing longname results in Abort trap
     * transpose2dArrayXX: wrong result
     * cgribexScanTimestep1: set flag to 0 in call to cgribexVarCompare()
     * netCDF: call set_validrangeDP() in cdfReadVar()
     * netCDF: call cdfDoInputDataTransformation() if have missvals

Version 1.6.5 (23 October 2014):

   New features:
     * NetCDF: single precision input
     * netCDF4: added support for xtype NC_STRING
     * added CDI function gribapiLibraryVersion(major_version, minor_version, revision_version) [Feature #5043]
     * gribapiEncode: update additional keys defined with vlistDefVarXXXKey() [Feature #4720]
     * added vlistDefVarProductDefinitionTemplate() to define GRIB2 Product Definition Template Number [Feature #4694]
     * streamWriteVarF, streamWriteVarSliceF: added support for GRIB1 (cgribex)
     * grib2: activate jpeg support in combination with masks (missing values)
   Fixed bugs:
     * listDestroy(): set resHListSize=0 [Bug #5058]
     * NetCDF: Reading uuidOfVGrid [Bug #5046]


Version 1.6.4 (26 June 2014):

   New features:
     * Added support for SPECS forecast time axis
     * Added support for GRIB_API key cfName
   Fixed bugs:
     * netCDF4 classic: existing files are converted to netCDF4 - classic flag is lost
     * netCDF: added support for opendap files by https:
     * gribapiDefDateTimeRel: set vdate to rdate for time invariant fields [Bug #4641]
     * Loss of coordinates attribute when merging files [Bug #4880]

Version 1.6.3 (14 February 2014):

   New features:
     * streamInqGinfo: added support for GRIB files > 2GB
   Fixed bugs:
     * streamOpenA, streamOpen: parameter recordBufIsToBeCreated missing in call to cdiStreamOpenDefaultDelegate()
     * streamOpenA: removed line "streamptr->record = record"; record is allocated in cdiStreamOpenDefaultDelegate()


Version 1.6.2 (12 November 2013):

   New features:
     * Added support for netCDF CF time attribute: climatology [Feature #4092]
     * Added CDI function zaxisDefNlevRef() and zaxisInqNlevRef() [Feature #4117]
     * Made gridtype GRID_REFERENCE part of GRID_UNSTRUCTED
     * GRIB2: added support for level type Lake Bottom (grib level type 162)
     * GRIB2: added support for level type Bottom Of Sediment Layer (grib level type 163)
     * GRIB2: added support for level type Bottom Of Thermally Active Sediment Layer (grib level type 164)
     * GRIB2: added support for level type Bottom Of Sediment Layer Penetrated By Thermal Wave (grib level type 165)
     * GRIB2: added support for level type Mixing Layer (grib level type 166)
   Fixed bugs:
     * netCDF: wrong result if type of data and type of attribute valid_range differ [Bug #3727]

Version 1.6.1 (18 June 2013):

   New features:
     * GRIB2: added support for snow level (level type 114)
     * GRIB2: added support for layers with zaxis type ZAXIS_PRESSURE
   New functions:
     * cdiHaveFiletype(): Check whether a filetype is available
   Fixed bugs:
     * stream_gribapi: replaced function getLevelFactor() [Bug #3446]
     * gridXXXUUID: use cdi fortran datatype CBUF (char *) for the last argument (bug fix) [Bug #3424]
     * institutInq: check contents of name and longname (bug fix) [Bug #3419]
     * netCDF: missing_value attribute removed [Bug #3592]

Version 1.6.0 (14 March 2013):

   New features:
     * Added support for level type CLOUD_BASE, CLOUD_TOP and ISOTHERM_ZERO [Feature #3247]
     * Read arbitrary GRIB keys [Feature #3267]
   New functions:
     * vlistDefVarIntKey(): Set an arbitrary keyword/integer value pair for GRIB API
     * vlistDefVarDblKey(): Set an arbitrary keyword/double value pair for GRIB API
   Fixed bugs:
     * GRIB: added support for time step unit: seconds [Bug #3352]
     * stream_gribapi: added support for local table shortName.def [Bug #3343]
     * stream_gribapi: changed units for level type GRIB2_LTYPE_LANDDEPTH to m (internally mm) [Bug #3287]
     * netCDF: ignore the attribute valid_range, if the data type is inconsistent
     * global netCDF attribute "source" missing
     * cgribexGetTsteptype: changed default to TSTEP_INSTANT [Bug #3211]

Version 1.5.9 (17 December 2012):

   New features:
     * file.c::file_initialize: added support for env GRIB_API_IO_BUFFER_SIZE
   New functions:
     * vlistDefVarChunktype(): set chunktype to CHUNK_AUTO, CHUNK_GRID, CHUNK_LINES
     * vlistInqVarChunktype(): returns the chunktype
   Fixed bugs:
     * vlistCopyFlag: added support for level bounds
     * netCDF: added support for time axis name and long_name
     * cgribexGetGrid: bug fix for xinc/yinc recomputation
     * stream_cdf::define_all_vars: added txt attributes to vlistDefAttTxt() without trailing 0 [Bug #3004]

Version 1.5.8 (30 October 2012):

   New features:
     * grib2: added stepType support for absolute time axis
     * netCDF: set 1D arrays to coordinate variables if axis attribute is available
   Fixed bugs:
     * grib2: changed packingType from grid_jpeg to grid_simple if nmiss > 0

Version 1.5.7 (27 August 2012):

   New features:
     * Merge of branch cdo-pio into trunk cdi

Version 1.5.6 (27 July 2012):

   New features:
     * netCDF: added support for environment variable NC_CHUNKSIZEHINT
     * GRIB2: added support for level type HYBRID_HALF
     * GRIB2: added support for grib_api key stepType with TSTEP_<type> in vlistDefVar()
   Fixed bugs:
     * wrong netCDF output for unscaled uint8, int8, int16, int32 variables (bug introduced in 1.5.5)

Version 1.5.5 (15 May 2012):

   New features:
     * Added single precision support: streamWriteVarF, streamWriteVarSliceF
     * Added support for ZAXIS_DEPTH_BELOW_LAND units "mm",  "cm", "dm" and "m"

Version 1.5.4 (30 January 2012):

   New features:
     * Added support for GRIB2 packing type grid_ieee
     * Added support for GRIB2 level type 150

Version 1.5.3 (17 October 2011):

   New features:
     * Added support for level type ZAXIS_TOA, ZAXIS_SEA_BOTTOM, ZAXIS_ATMOSPHERE
   Fixed bugs:
     * deflate compression with netCDF4 doesn't work

Version 1.5.2 (22 August 2011):

   New features:
     * Added flexible XYZ dimension ordering for netCDF
     * Added support for grid type GRID_FOURIER (fourier coefficients)
     * Added interface function zaxisInqVct to read the VCT

Version 1.5.1 (12 July 2011):

   New features:
     * Added support for FILETYPE_NC4C (netcdf4 classic)

Version 1.5.0 (15 March 2011):

   New features: 
     * GRIB2 support via ECMWF GRIB_API
     * Added support for netCDF level bounds

Version 1.4.7 (3 January 2011):

   New features:
     * improved support for netCDF output from WRF model

Version 1.4.6 (17 September 2010):

   New features:
     * GRIB1: use packing only for non constant fields
     * Added support for attribute type int16 and float32
     * use libtool 2.2.10 for compiling + linking

Version 1.4.5.1 (5 July 2010):

   New features:
      * Added support for grid mask
      * GRIB1 decode: Correct ZeroShiftError of simple packed spherical harmonics

Version 1.4.5 (6 June 2010):

   Fixed bugs:
      * stream_history: added NC4 support
      * gridGenYvals: bug fix for nlat > 4096

Version 1.4.4 (29 April 2010):

   New features:
      * MAX_STREAMS: changed fixed size of 4096 to dynamic range of 1024 - 65536
      * added support for GRIB1 time units 3hours and 6hours
      * added support for non integer time units MONTH
      * vlistMerge: added support to merge levels

   Fixed bugs:
      * gauaw: bug fix for allocation of zfnlat for odd number of nlat
      * cgribexDefTime: bug fix for GRIB1 time range 3 and 10
