NCL Home > Documentation > Functions > Heat stress


Compute the 'heat index' as calculated by the National Weather Service.

Available in version 6.4.0 and later.


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

	function heat_index_nws (
		t          : numeric,  
		rh         : numeric,  
		iounit [2] : integer,  
		opt        : integer   

	return_val [dimsizes(t)] :  float or double



Scalar or array containing temperature(s) [ units see iounit ].


Scalar or array containing relative humidity (%). If an array, it must have same size and shape as t.


An integer array of length 2 which specifies the units of the input t and returned heat_index:

  • iounit(0)=0 input t (degC)
  • iounit(0)=1 input t (degK)
  • iounit(0)=2 input t (Farenheit)

  • iounit(1)=0 returns units degC
  • iounit(1)=1 returns units degK
  • iounit(1)=2 returns units Farenheit


Option which indicates which formulation should be used. If opt=False, the default is to use the formulation as indicated on the NWS website. This formulation is appropriate for temperatures 80F and above and relative humidities greater than 40%. If opt=True and the attribute "coef" is associated with opt [ie, opt@coef] and and it has the integer value 2 ( ie: opt@coef=2 ), an alternate set of coefficients appropriate for temperatures spanning 70F-115F and humidities between 0 and 80% will be used. The results are within 3F of the default formulation.

Return value

A scalar or an array of the same size and shape as t. The output will be double if t or rh is of type double. The units are specified by iounit(1).


Calculate the heat index as described at:

The 'Heat Index' is a measure of how hot weather "feels" to the body. The combination of temperature an humidity produce an "apparent temperature" or the temperature the body "feels". The returned values are for shady locations only. Exposure to full sunshine can increase heat index values by up to 15°F. Also, strong winds, particularly with very hot, dry air, can be extremely hazardous as the wind adds heat to the body

The computation of the heat index is a refinement of a result obtained by multiple regression analysis carried out by Lans P. Rothfusz and described in a 1990 National Weather Service (NWS) Technical Attachment (SR 90-23). All values less that 40F/4.4C/277.65K are set to the ambient temperature.

In practice, the Steadman formula is computed first and the result averaged with the temperature. If this heat index value is 80 degrees F or higher, the full regression equation along with any adjustment as described above is applied. If the ambient temperature is less the 40F (4.4C/277.65K), the heat index is set to to the ambient temperature.

Effects of the heat index (shade values)

        HEAT INDEX
      degC    degF       Notes
     27-32    80-91    Caution: fatigue & cramps possible with prolonged exposure and activity.
     32-41    90-105   Extreme caution: cramps, heat exhaustion & heat stroke
     41-54   105-130   Danger: cramps, heat exhaustion are likely; heat stroke is probable
       54+     130+    Extreme danger: heat stroke is imminent.

    WWW: Heat Index

    Buzan, J.R. et al (2015): 
           Implementation and comparison of a suite of heat stress metrics
           within the Community Land Model version 4.5
           Geosci. Model Dev., 8, 151–170, 2015

    Lans P. Rothfusz (1990): 
           NWS Technical Attachment (SR 90-23)

    Steadman, R. G. (1979): 
           The assessment of sultriness, Part I: A temperature-humidity
           index based on human physiology and clothing science  
           J. Appl. Meteorol., 18, 861–873, 1979a

See Also

Heat and Stress functions


Heat indicies below (say) 78F/25.5C/298K may not be that useful.

Example 1: Sample with degrees farenheit input [iounit(0)=2] and returned [iounit(1)=2].

   t  = (/ 104, 100, 92, 92, 86, 80, 80, 60, 30 /)    ; degF
   rh = (/  55,  65, 60, 90, 90, 40, 75, 90, 50 /)    ; %
   io = (/2,2/)                                       ; degF input, degF output
   hi = heat_index_nws(t, rh, io, False)
   print("t="+t+"  rh="+rh+"  hi="+hi)

The output is as follows. The first seven entries match the Wikipedia Heat Index table from NOAA. The table does not go below 80F and 40% relative humidity.
        degF     %      degF
(0)     t=104  rh=55  hi=137.361     Match NOAA table
(1)     t=100  rh=65  hi=135.868            "
(2)     t= 92  rh=60  hi=104.684            "
(3)     t= 92  rh=90  hi=131.256            "
(4)     t= 86  rh=90  hi=105.294            "
(5)     t= 80  rh=75  hi=83.5751            "
(6)     t= 80  rh=40  hi=79.79       Match NOAA table
(7)     t= 60  rh=90  hi=59.965
(8)     t= 30  rh=50  hi=30.00

Example 2: From a file

   f  = addfile ("", "r")
   t  = f->TREFHT      ; degK;   (time,lat,lon)
   rh = f->RHREFHT     ; % 

   io = (/1,2/)        ; input degK; return degF

   HI = heat_index_nws(t, rh, io, False)
   printMinMax(HI, 0)
The output returns any available meta data. Here

   Variable: HI_NWS
   Type: float
   Total Size: 221184 bytes
               55296 values
   Number of Dimensions: 3
   Dimensions and sizes:   [time | 1] x [lat | 192] x [lon | 288]
               time: [4623..4623]
               lat: [ -90..  90]
               lon: [   0..358.75]
   Number Of Attributes: 5
     long_name :   heat index: NWS
     units :       degF
     www :
     info :        appropriate for shady locations with no wind
     tag : NCL: heat_index_nws; (Steadman+t)*0.5 and Rothfusz
   (0)     heat index: NWS: min=-96.4815   max=110.047

Example 3: Same as example 2 but:

     io = (/1,0/)        ; input degK; return degC
The output would be in degC:

   (0)	heat index: NWS: min=-71.3779   max=43.359