Ошибка при преобразовании файла grib в netcdf
Я пытаюсь преобразовать файл grib, полученный от кого-то другого, в netcdf с помощью cdo. Файл представляет собой глобальные данные в формате сетки Гаусса:
File format : GRIB szip
-1 : Institut Source T Steptype Levels Num Points Num Dtype : Parameter ID
1 : MPIMET unknown v instant 1 1 294912 1 P24s : 182.128
Grid coordinates :
1 : gaussian : points=294912 (768x384) F192
lon : 0 to 359.5312 by 0.46875 degrees_east circular
lat : 89.64165 to -89.64165 degrees_north
Vertical coordinates :
1 : surface : levels=1
Time coordinate : unlimited steps
При запуске cdo выдает ошибку, что у меня нет нужного инструмента для распаковки (szip), но у меня есть более новый пакет ECCODES:
[user]$ cdo -f nc copy input.grb output.nc
Warning (gribUnzip): Decompression disabled, szlib not available!
Error (grbUnzipRecord): Decompression problem!
Я также пытался использовать cfgrib и eccodes, но это тоже не сработало, на этот раз из-за другой ошибки. Код:
import xarray as xr
import cfgrib
import eccodes
ds = cfgrib.open_datasets('input.nc',backend_kwargs={'filter_by_keys': {'typeOfLevel':'surface','level':0,'shortName': 'e'}})
Ошибка:
ValueError: conflicting sizes for dimension 'latitude': length 384 on 'e' and length 285 on {'time': 'time', 'step': 'step', 'surface': 'surface', 'latitude': 'latitude', 'longitude': 'longitude'}
Я также пробовал gdal, но также получил другую ошибку. Код:
[user]$ gdalwarp -overwrite -to SRC_METHOD=NO_GEOTRANSFORM -t_srs EPSG:4326 input.grb -of netCDF output.nc
Ошибка:
numPts * (numBits in a Group) + # of unused bits 7077888 != # of available bits 5244760
Creating output file that is 768P x 384L.
Processing /scistor/ivm/hmt250/raed_paper/swift.dkrz.de/clisap_echam_182/CLI_MPI-ESM-XR_t255l95_echam_265-276.cdo_processed.grb [1/1] : 0numPts * (numBits in a Group) + # of unused bits 7077896 != # of available bits 5225512
numPts * (numBits in a Group) + # of unused bits 7077888 != # of available bits 5265624
numPts * (numBits in a Group) + # of unused bits 7077888 != # of available bits 5258632
numPts * (numBits in a Group) + # of unused bits 7077896 != # of available bits 5275464
numPts * (numBits in a Group) + # of unused bits 7077888 != # of available bits 5352712
Наконец, я попробовал напрямую ECCODES, и это также привело к ошибке:
[user]$ grib_to_netcdf -o output2.nc input.grb
grib_to_netcdf: Version 2.21.0
grib_to_netcdf: Processing input file 'input.grb'.
grib_to_netcdf: Found 8760 GRIB fields in 1 file.
grib_to_netcdf: Ignoring key(s): method, type, stream, refdate, hdate
grib_to_netcdf: Creating netCDF file 'output2.nc'
grib_to_netcdf: NetCDF library version: 4.7.4 of Oct 29 2020 15:05:42 $
grib_to_netcdf: Creating large (64 bit) file format.
grib_to_netcdf: Defining variable 'e'.
grib_to_netcdf ERROR: line 2863, nc_put_vara_type: NetCDF: Start+count exceeds dimension bound
Буду признателен за любую помощь в преобразовании этого файла в netcdf.