Versions Compared

Key

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

...

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
titleExample: Separate multiple z axes into individual files
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
titleInterpolate model levels to pressure levels
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
titleExample cdo command for inspecting GRIB file
$ 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
titleSample script to convert OpenIFS GRIB output to netCDF
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

...