...
If you find the CDO commands below do not work, you can either build CDO yourself, making sure a recent version of grib_api or ecCodes is used, or you can use a the workaround below.
Interpolate from reduced to regular grid
...
This will ensure the following commands steps work correctly.
Code Block | ||
---|---|---|
| ||
cdo splitzaxis ICMSHg4a4+000000.grb ICMSHg4a4+000000_split ls ICMSH*split* ICMSHg4a4+000000_split01.grb ICMSHg4a4+000000_split02.grb ICMSHg4a4+000000_split03.grb ICMSHg4a4+000000_split04.grb |
...
Code Block | ||
---|---|---|
| ||
cdo ml2pl,92500,85000,50000,20000 <input file> <output file> |
Viewing contents of GRIB files
There are various commands for inspecting the contents of a GRIB file. The GRIB_API installation as part of OpenIFS has useful commands like grib_ls
and grib_dump
.
...
Code Block | ||
---|---|---|
| ||
$ cdo sinfo ICMSHfrq2+000000.grb File format: GRIB -1 : Institut Source Param Time Typ Grid Size Num Levels Num 1 : ECMWF unknown 11.3 var P16 65792 1 60 1 2 : ECMWF unknown 39.3 var P16 65792 1 60 1 3 : ECMWF unknown 43.3 var P16 65792 1 60 1 4 : ECMWF unknown 44.3 var P16 65792 1 60 1 5 : ECMWF unknown 152.128 var P16 65792 1 1 2 6 : ECMWF unknown 6.3 var P16 65792 1 1 2 Horizontal grids : 1 : spectral > size : dim = 65792 truncation = 255 spc = 32896 complexPacking = 1 Vertical grids : 1 : hybrid level : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 2 : hybrid level : 1 Time axis : 1 step RefTime = 1999-12-24 12:00:00 Units = hours Calendar = PROLEPTIC YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss 1999-12-24 12:00:00 cdo sinfo: Processed 6 variables over 1 timestep. ( 0.04s ) |
Examples
Example 1 - Converting a single file
In this example a single GRIB file with model level data, on a regular Gaussian grid is converted to netCDF with vorticity & divergence replaced by u & v and model level data interpolated to pressure levels.
Code Block |
---|
cdo -f nc copy file.grb file.nc cdo dv2uvl file.nc file_uv.nc cdo sp2gpl file_uv.nc file_uv_gg.nc cdo ml2pl,92500,85000,50000,20000 file_uv_gg.nc file_uv_gg_pl.nc |
Example 2 - Converting series of files
The following script shows how to loop over several output files using the steps above to convert to netCDF. Note the spectral parameter files are also converted but the extra command using the sp2gpl operator is first used to convert the variables from spectral to gridpoint.
In this example, we use the pipelining feature of CDO to do both the 'copy' and 'sp2gpl' steps in one command, keeping the entire operations in memory.
Code Block | ||
---|---|---|
| ||
for i in 000 024 048 072 do cdo -R copy ICMGGfpp4+000${i}.grb ICMGGfpp4+000${i}_R.grb cdo splitzaxis ICMGGfpp4+000${i}_R.grb ICMGGfpp4+000${i} cdo -f nc copy ICMGGfpp4+000${i}01.grb ICMGGfpp4+000${i}_PLGG.nc cdo -f nc copy ICMGGfpp4+000${i}02.grb ICMGGfpp4+000${i}_MLGG.nc cdo splitzaxis ICMSHfpp4+000${i}.grb ICMSHfpp4+000${i} cdo -f nc copy -sp2gpl ICMSHfpp4+000${i}01.grb ICMSHfpp4+000${i}01_GP_PL.grb cdo -f nc copy -sp2gpl ICMSHfpp4+000${i}03.grb ICMSHfpp4+000${i}03_GP.grb cdo sp2gpl ICMSHfpp4+000${i}04.grb ICMSHfpp4+000${i}04_GP_ML.grb cdo -f nc copy ICMSHfpp4+000${i}03_GP.grb ICMSHfpp4+000${i}_ML.nc cdo -f nc copy -sp2gpl ICMSHfpp4+000${i}01_GP04.grb ICMSHfpp4+000${i}_PL.nc cdo -f nc copy ICMSHfpp4+000${i}04_GP.grb ICMSHfpp4+000${i}_surf.ncgrb done |
Possible problems and solutions
...