# [ncl-talk] reading in ERA-20C grib file with data on model/hybrid levels

Dennis Shea shea at ucar.edu
Wed Mar 13 14:04:48 MDT 2019

```[1] I *speculate* that the hybrid coefficients are *identical *for the
original model grid and 1x1 interpolated grid. Is this not true?

[2]  You state that the CDO correctly extracts hybrid coefficients on the
1x1 interpolated grids.
The netCDF Operator (NCO) 'ncks' can be used to extract the CDO created
hybrid coefficients

%> *ncks* *-v hyai,hybi,hyam,hybm  e20c_temp_199410.nc
<http://e20c_temp_199410.nc>*   *e20c_HybridCoef.nc*

This file is attached. You can use this in companion with the grib2 file.

hyam = fhy->hyam
hybm = fhy->hybm

---
Note that hybrid {a,b} coefficients take two different forms

NCAR's CESM atmospheric model calculates pressure at the hybrid levels use
the formula *p = a(k)*p0 + b(k)*psfc*

ECWMF uses *p = ap(k)+ b(k)*ps**fc :  where **ap(k) =a(k)*p0*

*All*, NCL's built-in functions that use hybrid coefficients *[
<http://www.ncl.ucar.edu/Document/Functions/Built-in/pres_hybrid_ccm.shtml>*
eg:
<http://www.ncl.ucar.edu/Document/Functions/Built-in/pres_hybrid_ccm.shtml>*pres_hybrid_ccm
<http://www.ncl.ucar.edu/Document/Functions/Built-in/pres_hybrid_ccm.shtml>*]
expect the CESM formulation.

So,

p0 = 100000.0

hyam = hyam/p0      ; convert *ap(k) =a(k)*p0 *to NCL expected values

===

[3] "moving target":

The WMO prescribes parameter IDs 0-127 to be fixed.

Parameter IDs 128 onward can be defined by each operational center.

NCL uses internal built-in tables to look-up the correct long_name and
units associated with each parameter ID.

These tables must be updated with each NCL release.

.Good Luck

D

On Wed, Mar 13, 2019 at 9:48 AM De Vries Andries <
andries.devries at env.ethz.ch> wrote:

> Hi Dennis,
>
> Thanks again for your comments and explanation. Do I understand correctly
> that NCL doesnt recognize the hybrid coefficients in the ERA-20C data?
>
> I'm little surprise since NCL (also version 6.3.0) seems to recognize
> hybrid coefficients in the ERA-Interim data grib files of ECMWF, see again
> the print statements below. Any idea what is different between the ERA-20C
> and ERA-Interim data that leads to this problem with reading in hybrid
> coefficients? Could it be a difference of grib2 (is ERA-20C wgrib2?) and
> grib1 (ERA-Interim) format?
>
> I hope to find a way to read in grib files of ERA-20C data with NCL,
> including the hybrid level coefficients, without needing additional tricks
> or conversion of data.
>
> What do you mean by "The issue with GRIB is that it is a moving target."?
>
> Kind regards,
> Andries
>
>
>
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> print statement of NCL 6.3.0 of ERA-Interim data, grib file, regular grid
> 1x1, temperature
>
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>  University Corporation for Atmospheric Research
>  NCAR Command Language Version 6.3.0
>  The use of this software is governed by a License Agreement.
>  See http://www.ncl.ucar.edu/ for more details.
> print(a)
> ncl 1> print(a)
>
> Variable: a
> Type: file
> filename:       (null)
> path:   ei_an_temp_r1x1_ml_199410.grib
>    file global attributes:
>    dimensions:
>       initial_time0_hours = 124
>       lv_HYBL1 = 60
>       lv_HYBL_i2 = 61
>       ncl_scalar = 1
>       g0_lat_4 = 181
>       g0_lon_5 = 360
>    variables:
>       float T_GDS0_HYBL ( initial_time0_hours, lv_HYBL1, g0_lat_4,
> g0_lon_5 )
>          center :       European Center for Medium-Range Weather Forecasts
> (RSMC)
>          long_name :    Temperature
>          units :        K
>          _FillValue :   1e+20
>          level_indicator :      109
>          gds_grid_type :        0
>          parameter_table_version :      128
>          parameter_number :     130
>          forecast_time :        0
>          forecast_time_units :  hours
>
>       double initial_time0_hours ( initial_time0_hours )
>          long_name :    initial time
>          units :        hours since 1800-01-01 00:00
>
>       double initial_time0_encoded ( initial_time0_hours )
>          long_name :    initial time encoded as double
>          units :        yyyymmddhh.hh_frac
>
>       float g0_lat_4 ( g0_lat_4 )
>          long_name :    latitude
>          GridType :     Cylindrical Equidistant Projection Grid
>          units :        degrees_north
>          Dj :    1
>          Di :    1
>          Lo2 :  359
>          La2 :  -90
>          Lo1 :   0
>          La1 :  90
>
>       float g0_lon_5 ( g0_lon_5 )
>          long_name :    longitude
>          GridType :     Cylindrical Equidistant Projection Grid
>          units :        degrees_east
>          Dj :    1
>          Di :    1
>          Lo2 :  359
>          La2 :  -90
>          Lo1 :   0
>          La1 :  90
>
>       float P0 ( ncl_scalar )
>          units :        Pa
>          long_name :    reference pressure
>
>       float lv_HYBL_i2_b ( lv_HYBL_i2 )
>          note : layer interfaces associated with hybrid levels lv_HYBL1
>          long_name :    hybrid B coefficient at layer interfaces
>
>       float lv_HYBL_i2_a ( lv_HYBL_i2 )
>          note : layer interfaces associated with hybrid levels lv_HYBL1
>          long_name :    hybrid A coefficient at layer interfaces
>
>       float lv_HYBL1_b ( lv_HYBL1 )
>          note : derived from lv_HYBL_i2_b as average of layer interfaces
> above and below midpoints
>          long_name :    hybrid B coefficient at layer midpoints
>
>       float lv_HYBL1_a ( lv_HYBL1 )
>          note : derived from lv_HYBL_i2_a as average of layer interfaces
> above and below midpoints
>          long_name :    hybrid A coefficient at layer midpoints
>
>       integer lv_HYBL1 ( lv_HYBL1 )
>          formula_terms :        a: lv_HYBL1_a b: lv_HYBL1_b ps: unknown
> p0: P0
>          standard_name :        atmosphere hybrid sigma pressure coordinate
>          long_name :    hybrid level
>          units :        number
>
>       string initial_time0 ( initial_time0_hours )
>          long_name :    Initial time of first record
>          units :        mm/dd/yyyy (hh:mm)
>
> ________________________________________
> From: Dennis Shea [shea at ucar.edu]
> Sent: 12 March 2019 20:53
> To: De Vries  Andries
> Cc: ncl-talk at ucar.edu
> Subject: Re: [ncl-talk] reading in ERA-20C grib file with data on
> model/hybrid levels
>
> Yes. NCL does not recognize the hybrid coefficients. IMHO: It is a bug.
>
> wgrib2 does 'see' the 92 interface coefficients.
>
> %> wgrib2 -hybrid e20c_an_temp_r360x180_ml_199410.grib | less
>
> The following are the (hyai, hybi) values:
>
> 1:0:Hybrid levels=92 1=( 0.000000, 2.000040) 2=( 3.980832, 7.387186)
> 3=(12.908319,21.413612) 4=(33.952858,51.746601) 5=(76.167656,108.715561)
> 6=(150.986023,204.637451) 7=(271.356506,352.824493)
> 8=(450.685791,566.519226) 9=(701.813354,857.945801)
> 10=(1036.166504,1237.585449) 11=(1463.163940,1713.709595)
> 12=(1989.874390,2292.155518) 13=(2620.898438,2976.302246)
> 14=(3358.425781,3767.196045) 15=(4202.416504,4663.776367)
> 16=(5150.859863,5663.156250) 17=(6199.839355,6759.727051)
> 18=(7341.469727,7942.926270) 19=(8564.624023,9208.305664)
> 20=(9873.560547,10558.881836) 21=(11262.484375,11982.662109)
> 22=(12713.897461,13453.225586) 23=(14192.009766,14922.685547)
> 24=(15638.053711,16329.560547) 25=(16990.623047,17613.281250)
> 26=(18191.029297,18716.968750) 27=(19184.544922,19587.513672)
> 28=(19919.796875,20175.394531) 29=(20348.916016,20434.158203)
> 30=(20426.218750,20319.011719) 31=(20107.031250,19785.357422)
> 32=(19348.775391,18798.822266) 33=(18141.296875,17385.595703)
> 34=(16544.585938,15633.566406) 35=(14665.645508,13653.219727)
> 36=(12608.383789,11543.166992) 37=(10471.310547,9405.222656)
> 38=(8356.252930,7335.164551) 39=(6353.920898,5422.802734)
> 40=(4550.215820,3743.464355) 41=(3010.146973,2356.202637)
> 42=(1784.854614,1297.656128) 43=(895.193542,576.314148)
> 44=(336.772369,162.043427) 45=(54.208336, 6.575628) 46=( 0.003160,
> 0.000000) 47=( 0.000000, 0.000000) 48=( 0.000000, 0.000000) 49=( 0.000000,
> 0.000000) 50=( 0.000000, 0.000000) 51=( 0.000000, 0.000000) 52=( 0.000000,
> 0.000000) 53=( 0.000000, 0.000000) 54=( 0.000000, 0.000000) 55=( 0.000000,
> 0.000000) 56=( 0.000000, 0.000000) 57=( 0.000000, 0.000000) 58=( 0.000000,
> 0.000000) 59=( 0.000000, 0.000000) 60=( 0.000000, 0.000000) 61=( 0.000000,
> 0.000000) 62=( 0.000000, 0.000000) 63=( 0.000000, 0.000000) 64=( 0.000000,
> 0.000014) 65=( 0.000055, 0.000131) 66=( 0.000279, 0.000548) 67=( 0.001000,
> 0.001701) 68=( 0.002765, 0.004267) 69=( 0.006322, 0.009035) 70=( 0.012508,
> 0.016860) 71=( 0.022189, 0.028610) 72=( 0.036227, 0.045146) 73=( 0.055474,
> 0.067316) 74=( 0.080777, 0.095964) 75=( 0.112979, 0.131935) 76=( 0.152934,
> 0.176091) 77=( 0.201520, 0.229315) 78=( 0.259554, 0.291993) 79=( 0.326329,
> 0.362203) 80=( 0.399205, 0.436906) 81=( 0.475016, 0.513280) 82=( 0.551458,
> 0.589317) 83=( 0.626559, 0.662934) 84=( 0.698224, 0.732224) 85=( 0.764679,
> 0.795385) 86=( 0.824185, 0.850950) 87=( 0.875518, 0.897767) 88=( 0.917651,
> 0.935157) 89=( 0.950274, 0.963007) 90=( 0.973466, 0.982238) 91=( 0.989153,
> 0.994204) 92=( 0.997630, 1.000000)
>
> The mid-layer coefficients (91) are calculated as the mid-points and are
> calculated.
> ====
> Still, something seems odd. My local CDO version
>
> %> cdo -V
> Climate Data Operators version 1.7.2 (http://mpimet.mpg.de/cdo)
>
> %>cdo -f nc copy e20c_an_temp_r360x180_ml_199410.grib
> e20c_temp_199410.nc<http://e20c_temp_199410.nc>
>
> cdo copy: Open failed on >e20c_an_temp_r360x180_ml_199410.grib<
> Unsupported file type
> ====
> CDO Versions 1.9.3 and 1.9.4 do recognize the hybrid coefficients.
>
> ====
> The issue with GRIB is that it is a moving target.
>
> D
>
>
> On Tue, Mar 12, 2019 at 7:29 AM De Vries Andries <
> andries.devries at env.ethz.ch<mailto:andries.devries at env.ethz.ch>> wrote:
> Hi Dennis,
>
> Thank you very much. The newer version of NCL helps indeed, hadn't thought
> of that simple solution. However, still I miss a few coordinate variables
> that I can read in the netcdf file, but not in the original grib file; the
> hyam and hybm variabels. Please, see the print statement of the netcdf file
> below. Any idea why and what can help?
>
> Cheers,
> Andries
>
> Variable: b2
> Type: file
> filename:       e20c_an_temp_r360x180_ml_199410
> path:   ../ERA20C-MOD/NC/e20c_an_temp_r360x180_ml_199410.nc<
> http://e20c_an_temp_r360x180_ml_199410.nc>
>    file global attributes:
>       CDI : Climate Data Interface version 1.9.5 (http://mpimet.mpg.de/cdi
> )
>       Conventions : CF-1.6
>       history : Thu Feb 14 11:02:46 2019: cdo -f nc copy
> /atmosdyn/devriesa/DATA/ERA20C/e20c_an_temp_r360x180_ml_199410.grib
> /atmosdyn/devriesa/DATA/ERA20C-MOD/NC/e20c_an_temp_r360x180_ml_199410.nc<
> http://e20c_an_temp_r360x180_ml_199410.nc>
>       institution : European Centre for Medium-Range Weather Forecasts
>       CDO : Climate Data Operators version 1.9.5 (http://mpimet.mpg.de/cdo
> )
>    dimensions:
>       time = 124  // unlimited
>       lon = 360
>       lat = 181
>       lev = 91
>       nhyi = 92
>       nhym = 91
>    variables:
>       double time ( time )
>          standard_name :        time
>          units :        hours since 1994-10-1 00:00:00
>          calendar :     proleptic_gregorian
>          axis : T
>
>       double lon ( lon )
>          standard_name :        longitude
>          long_name :    longitude
>          units :        degrees_east
>          axis : X
>
>       double lat ( lat )
>          standard_name :        latitude
>          long_name :    latitude
>          units :        degrees_north
>          axis : Y
>
>       double lev ( lev )
>          standard_name :        hybrid_sigma_pressure
>          long_name :    hybrid level at layer midpoints
>          formula :      hyam hybm (mlev=hyam+hybm*aps)
>          formula_terms :        ap: hyam b: hybm ps: aps
>          units :        level
>          positive :     down
>
>       double hyai ( nhyi )
>          long_name :    hybrid A coefficient at layer interfaces
>          units :        Pa
>
>       double hybi ( nhyi )
>          long_name :    hybrid B coefficient at layer interfaces
>          units :        1
>
>       double hyam ( nhym )
>          long_name :    hybrid A coefficient at layer midpoints
>          units :        Pa
>
>       double hybm ( nhym )
>          long_name :    hybrid B coefficient at layer midpoints
>          units :        1
>
>       float t ( time, lev, lat, lon )
>          standard_name :        air_temperature
>          long_name :    Temperature
>          units :        K
>          param :        0.0.0
>
> ________________________________________
> From: Dennis Shea [shea at ucar.edu<mailto:shea at ucar.edu>]
> Sent: 12 March 2019 13:09
> To: De Vries  Andries
> Cc: ncl-talk at ucar.edu<mailto:ncl-talk at ucar.edu>
> Subject: Re: [ncl-talk] reading in ERA-20C grib file with data on
> model/hybrid levels
>
> I am using NCL 6.5.0. I have no problem reading the grib file.
>
> %> ncl
>
>  NCAR Command Language Version 6.5.0
>
> ncl 0> f = addfile("e20c_an_temp_r360x180_ml_199410.grib","r")
> ncl 1> print(f)
> ncl 2> t = f->TMP_P0_L105_GLL0
> printVarSummary(t)
> ncl 3> printVarSummary(t)
>
> Variable: t
> Type: float
> Total Size: 2941061760 bytes
>             735265440 values
> Number of Dimensions: 4
> Dimensions and sizes:    [initial_time0_hours | 124] x [lv_HYBL0 | 91] x
> [lat_0 | 181] x [lon_0 | 360]
> Coordinates:
>             initial_time0_hours: [1707120..1707858]
>             lv_HYBL0: [ 1..91]
>             lat_0: [90..-90]
>             lon_0: [ 0..359]
> Number Of Attributes: 11
>   center :    European Center for Medium-Range Weather Forecasts
>   production_status :    Operational products
>   long_name :    Temperature
>   units :    K
>   _FillValue :    1e+20
>   grid_type :    Latitude/longitude
>   parameter_discipline_and_category :    Meteorological products,
> Temperature
>   parameter_template_discipline_category_number :    ( 0, 0, 0, 0 )
>   level_type :    Hybrid level
>   forecast_time :    0
>   forecast_time_units :    hours
>
> ncl 4> printMinMax(t,0)
> (0)     Temperature (K) : min=170.211   max=313.993
>
> On Tue, Mar 12, 2019 at 5:30 AM De Vries Andries <
> andries.devries at env.ethz.ch<mailto:andries.devries at env.ethz.ch><mailto:
> andries.devries at env.ethz.ch<mailto:andries.devries at env.ethz.ch>>> wrote:
> Dear NCL Team & Users,
>
> I have an issue with reading in ERA-20C grib files from ECMWF that contain
> data on model levels. No matter if it is data on a regular (1x1 degree
> grid) or a gaussian grid (N80), I can not read the variables within the
> file, see for example the first print statements below.
>
> When I convert the grib file to netcdf format, using the tool cdo {cdo -f
> nc copy {infile} {outfile}}, there is no problem; I can read in the netcdf
> file and variables without any problem, see the second print statement
> below. Ideally, however, I would like to use NCL to read in the grib files
> without converting them first to netcdf format. Any idea how to achieve
> this?
>
> Two side comments (1) I can read in ERA-20C grib files with data on
> pressure levels, surface, or isentropic levels without any problem problem;
> there is no need to convert them to netcdf format, and (2) Also, I can read
> in ERA-Interim grib files with data on model levels without any problems
> that are downloaded in the same manner & format as the ERA-20C data.
>
> @NCL TEAM; I copied an example ERA-20C file in grib and netcdf format with
> temperature on model levels for the year 199410 to ftp.cgd.ucar.edu<
> http://ftp.cgd.ucar.edu><http://ftp.cgd.ucar.edu>
>
> Kind regards,
> Andries
>
>
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------
> READING IN ERA-20C GRIB FILE WITH DATA ON MODEL LEVELS; CANNOT READ
> VARIABLES
>
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>  University Corporation for Atmospheric Research
>  NCAR Command Language Version 6.3.0
>  The use of this software is governed by a License Agreement.
>  See http://www.ncl.ucar.edu/ for more details.
>
> ncl 1> print(a)
>
> print(a)
>
> Variable: a
> Type: file
> filename:       (null)
> path:   e20c_an_temp_r360x180_ml_199410.grib
>    file global attributes:
>    dimensions:
>    variables:
>
>
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------
> READING IN ERA-20C NETCDF FILE WITH DATA ON MODEL LEVELS; READS VARIABLES
>
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>  University Corporation for Atmospheric Research
>  NCAR Command Language Version 6.3.0
>  The use of this software is governed by a License Agreement.
>  See http://www.ncl.ucar.edu/ for more details.
>
> http://e20c_an_temp_r360x180_ml_199410.nc><
> http://e20c_an_temp_r360x180_ml_199410.nc>","r")
>
> ncl 1> print(a)
>
> Variable: a
> Type: file
> filename:       e20c_an_temp_r360x180_ml_199410
> path:   e20c_an_temp_r360x180_ml_199410.nc<
> http://e20c_an_temp_r360x180_ml_199410.nc><
> http://e20c_an_temp_r360x180_ml_199410.nc>
>    file global attributes:
>       CDI : Climate Data Interface version 1.9.5 (http://mpimet.mpg.de/cdi
> )
>       Conventions : CF-1.6
>       history : Thu Feb 14 11:02:46 2019: cdo -f nc copy
> /atmosdyn/devriesa/DATA/ERA20C/e20c_an_temp_r360x180_ml_199410.grib
> /atmosdyn/devriesa/DATA/ERA20C-MOD/NC/e20c_an_temp_r360x180_ml_199410.nc<
> http://e20c_an_temp_r360x180_ml_199410.nc><
> http://e20c_an_temp_r360x180_ml_199410.nc>
>       institution : European Centre for Medium-Range Weather Forecasts
>       CDO : Climate Data Operators version 1.9.5 (http://mpimet.mpg.de/cdo
> )
>    dimensions:
>       time = 124  // unlimited
>       lon = 360
>       lat = 181
>       lev = 91
>       nhyi = 92
>       nhym = 91
>    variables:
>       double time ( time )
>          standard_name :        time
>          units :        hours since 1994-10-1 00:00:00
>          calendar :     proleptic_gregorian
>          axis : T
>
>       double lon ( lon )
>          standard_name :        longitude
>          long_name :    longitude
>          units :        degrees_east
>          axis : X
>
>       double lat ( lat )
>          standard_name :        latitude
>          long_name :    latitude
>          units :        degrees_north
>          axis : Y
>
>       double lev ( lev )
>          standard_name :        hybrid_sigma_pressure
>          long_name :    hybrid level at layer midpoints
>          formula :      hyam hybm (mlev=hyam+hybm*aps)
>          formula_terms :        ap: hyam b: hybm ps: aps
>          units :        level
>          positive :     down
>
>       double hyai ( nhyi )
>          long_name :    hybrid A coefficient at layer interfaces
>          units :        Pa
>
>       double hybi ( nhyi )
>          long_name :    hybrid B coefficient at layer interfaces
>          units :        1
>
>       double hyam ( nhym )
>          long_name :    hybrid A coefficient at layer midpoints
>          units :        Pa
>
>       double hybm ( nhym )
>          long_name :    hybrid B coefficient at layer midpoints
>          units :        1
>
>       float t ( time, lev, lat, lon )
>          standard_name :        air_temperature
>          long_name :    Temperature
>          units :        K
>          param :        0.0.0
> _______________________________________________
> ncl-talk mailing list
> ncl-talk at ucar.edu<mailto:ncl-talk at ucar.edu><mailto:ncl-talk at ucar.edu
> <mailto:ncl-talk at ucar.edu>>
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20190313/5e246789/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: e20c_HybridCoef.nc
Type: application/octet-stream
Size: 4044 bytes
Desc: not available
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20190313/5e246789/attachment.obj>
```