NCL Home > Documentation > Functions > Meteorology


Compute the maximum Eady growth rate.

Available in version 6.4.0 and later.


load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"  ; This library is automatically loaded
                                                             ; from NCL V6.2.0 onward.
                                                             ; No need for user to explicitly load.

	function eady_growth_rate (
		th      : numeric,  ; float, double, integer only
		u       : numeric,  
		z       : numeric,  
		lat     : numeric,  
		opt [1] : integer,  
		dim [1] : integer   

	return_val [dimsizes(z)] :  float or double



Potential temperature (K).


Zonal wind (m/s). Same dimensionality as th.


Geometric height (m). Same dimensionality as th or one-dimensional: say z(lev). See the description of dim.


Latitudes (degrees). Same dimensionality as th. NOTE: This may require the user to use conform or conform_dims prior to using the function.


  • opt=0, Return the Eady growth rate
  • opt=1, Return the Eady growth rate and the vertical gradient of the zonal wind (du/dz)
  • opt=2, Return the Eady growth rate and the vertical gradient of the zonal wind (du/dz) and the Brunt-Vaisala frequency


If the dimensionality of variable z conforms to the dimensionality of th, this argument is ignored. However, if z is one-dimensional: z(lev), this is the dimension number of th to which z matches.

       th(lev)        ..... dim=0
       th(lev,:)      ..... dim=0
       th(lev,:,:)    ..... dim=0
       th(:,lev,:,:)  ..... dim=1

Return value

A multi-dimensional array of the same size and shape as th. The output will be double if th is of type double.


The maximum Eady growth rate (EGR) is a measure of baroclinic instability.

  eady_growth_rate = 0.3098*g*abs(f)*abs(du/dz)/brunt_vaisala_atm   
where f is the Coriolis parameter (1/s) and g is gravity (m/s).

The Eady Model is based on many assumptions. The scale analysis that allowed the simplification of the equations was based on a mid-latitude assumption. Hence, calculated values "near" the equator may/may-not be useful. As they say: Beauty, is in the eyes of the beholder. [See the discussion below.]

Typically, this function is applied to (say) 00Z, 03Z, ... or daily mean variables. EGR is a non-linear quantity. Hence, eady_growth_rate should not be directly applied to (say) monthly means variables. If a monthly climatology of EGR is desired, the EGR values at the high frequency temporal time steps should be calculated; then, use calculate_monthly_values. Other, time averages could also be calculated: eg: daily means or (say) pentad averages could be calculated via: calculate_daily_values or calculate_segment_values.

   E. Eady (1949):
   Long waves and cyclone waves
   Tellus, 1, 33-52

   R. S. Lindzen and Brian Farrell, 1980: 
   A Simple Approximate Result for the Maximum Growth Rate of Baroclinic Instabilities. 
   J. Atmos. Sci., 37, 1648-1654.<1648:ASARFT>2.0.CO;2

   Simmonds, I., and E.-P. Lim (2009): 
   Biases in the calculation of Southern Hemisphere mean baroclinic eady growth rate 
   Geophys. Res. Lett., 36, L01707

An application to the ocean:

   Sloyan, B. M., and T. J. O'Kane, 2015
   Drivers of decadal variability in the Tasman Sea 
   J. Geophys. Res. Oceans, 120, 3193-3210


Several posts to (Feb 2018) were made about the subject of Eady growth rate. The following posts have been slightly edited:

  1. Initial post (University student): I want to compare the baroclinity of two tropical cyclone environments. What is the best way to do this using NCL?

  2. Second post (NOAA person): Okay this is tangential to the topic but VERY INTERESTING in its own right. (a) How well do the observed growth rates or (presumably large scale because small length scale damps) compare with the theoretical Eady growth rates and (something I should know but don't) (b) do Eady growth rates incorporate the effect of moisture on stratification?

A response:

[1] I don't think the Eady model is intended to tell you something about tropical cyclone environments. It's really intended to describe the growth of mid-latitude eddies. Since it's formulated on an f-plane, I don't think it's really appropriate for use in tropical environments. That being said, the eady growth rate really is just a measure of baroclinicity so it might be fine to determine what the baroclinicity is in their tropical cyclone environments.

For [2b] "No" I think you'd have to include a diabatic heating term in the thermodynamic equation that's being solved to account for the release of heat associated with the convergence of moisture and precipitation that accompanies the growing wave. With my expert googling skils, I came across this...

For [2a] I don't really know the answer. But I'm also not sure how you would measure the real world growth rates. The eady model is intended to describe the growth of the normal modes and I think you could compare the predictions with a normal mode calculation using the real world basic state but I'm not sure how you would actually measure the growth rates of the real world. I also think it might give you a dimensionless growth rate which tells you what scales dominate by growing fastest, but I'm not sure to what extent it is something that can be compared with the real world. In short, I don't really know.

Slightly edited followups by the original posters to the above response:

  1. NOAA person: Where the concept is relevant (with an enormous number of caveats, yes) is to answer the fundamental question, will TC interaction with baroclinicity, induce transition to a growing or stable baroclinic system (often observed) or will the TC perturbation just damp out (also often observed) with a theoretically expected but hard to actually point out, increase in baroclinic available potential energy for some future perturbation to extract. I think it is a tractable forecast and theoretical modeling problem, again with the caveats mentioned.

    Casually plugging this into a program without understanding the concepts is worrisome, also agreed. Thanks everyone for the response!

  2. University student: Thank you. As mentioned, casually using the function without completely understanding what it was intended for and whether it is applicable, would mislead interpretations. That is exactly what I wanted to avoid. The above emails have certainly pointed me in a direction where I can learn more about the topic and its applicability to the problem I am trying to address.

Additional references:

The very last part of the following discusses the "shortcomings" of simple baroclinic models.

NOTE: About 5 years prior to the release of this function, Carl Schreck [ North Carolina Institute for Climate Studies ] developed an NCL script that calculates the Eady growth rate. It is here

See Also

coriolis_param, brunt_vaisala_atm, pot_temp, rigrad_bruntv_atm, static_stability


Example 1: Read data from a WRF file and calculate assorted quantities.

;                     WRF DATA

   a  = addfile("wrfout_d01_2013-05-17_12","r") ;[Time|1]x[bottom_top|40]x[south_north|324]x[west_east|414]
                                               ;     0            1              2              3

   th = wrf_user_getvar(a,"theta",-1)      ; potential temperature (degK)
   z  = wrf_user_getvar(a,"z",-1)          ; model height
   ua = wrf_user_getvar(a,"ua"   ,-1)      ; u at mass grid points

;--- Read latitudes 
;    The 'eady_growth_rate' function requires that 'lat' and 'th' agree
;    Use 'conform' the propogate the lat values

   xlat = a->XLAT                          ; [Time|1]x[south_north|324]x[west_east|414] 

   XLAT = conform(th, xlat, (/0,2,3/))     ; (1,40,324,414)

   egr = eady_growth_rate(th, ua, z, XLAT, 0,  1)
   printMinMax(egr, 0)

; print all vertical values at an arbitrarily chosen grid point

   nt =  0        ; print 1st time step
   ix = 20        ; arbitrary
   jy = 21

   pr = wrf_user_getvar(a,"pressure"   ,-1)      ; for printing 

   print( sprint("%7.1f" ,   pr(nt,:,jy,ix)) \
        + sprintf("%7.1f" ,    z(nt,:,jy,ix)) \
        + sprintf("%15.5e",  egr(nt,:,jy,ix)) \
        + sprintf("%7.2f",  egr(nt,:,jy,ix)*86400) )

The (edited) output is:

   Variable: egr
   Type: float
   Total Size: 20925216 bytes
               5231304 values
   Number of Dimensions: 4
   Dimensions and sizes:   [Time | 1] x [bottom_top | 39] x [south_north | 324] x [west_east | 414]
   Number Of Attributes: 3
     _FillValue :  1e+20
     long_name :   maximum eady growth rate
     units :       
   (0)     maximum eady growth rate: min=6.5775e-13   max=0.00406928

            P       Z       EGR (1/s)    EGR (1/day)
    (0)	 1009.1    29.2   -6.51605e-06  -0.56
    (1)	 1001.0    99.1   -4.83609e-06  -0.42
    (2)	  990.3   192.9   -2.27035e-06  -0.20
    (3)	  976.8   313.0   -9.32204e-07  -0.08
    (4)	  960.0   463.0    3.49967e-06   0.30
    (5)	  939.6   647.4    1.24992e-05   1.08
    (6)	  915.3   872.0    1.05712e-05   0.91
    (7)	  886.7  1142.9    2.63051e-06   0.23
    (8)	  853.8  1463.4    3.39886e-06   0.29
    (9)	  817.2  1835.1    4.34887e-06   0.38
    (10)  777.3  2258.8    2.34866e-06   0.20
    (11)  734.6  2733.7    5.76828e-07   0.05
    (12)  689.6  3259.3    3.18521e-06   0.28
    (13)  642.9  3835.0    4.51157e-06   0.39
    (14)  596.3  4442.5    2.02051e-06   0.17
    (15)  552.0  5057.9    9.44995e-07   0.08
    (16)  510.4  5674.7    1.08149e-06   0.09
    (17)  471.4  6292.0    5.79138e-06   0.50
    (18)  434.8  6907.9    1.05950e-05   0.92
    (19)  400.5  7523.3    5.64395e-06   0.49
    (20)  368.4  8139.1    3.27011e-07   0.03
    (21)  338.4  8755.4    8.26907e-07   0.07
    (22)  310.3  9372.1    3.56708e-06   0.31
    (23)  284.1  9988.7    7.66039e-06   0.66
    (24)  259.7 10606.4    1.39343e-05   1.20
    (25)  236.9 11225.7    1.61388e-05   1.39
    (26)  215.7 11845.9    1.17152e-05   1.01
    (27)  195.9 12465.8    4.51332e-06   0.39
    (28)  177.6 13085.9    5.23316e-06   0.45
    (29)  160.6 13707.9    1.15163e-05   1.00
    (30)  144.8 14335.0    7.09510e-06   0.61
    (31)  130.2 14971.9    5.89672e-06   0.51
    (32)  116.7 15621.2    6.78411e-06   0.59
    (33)  104.3 16288.0    4.65560e-06   0.40
    (34)   92.8 16976.2    4.16494e-06   0.36
    (35)   82.2 17686.4    4.20652e-06   0.36
    (36)   72.6 18420.1    2.95023e-06   0.25
    (37)   63.7 19185.4    2.68033e-06   0.23
    (38)   54.7 20094.5    3.04996e-06   0.26