Source code for ladybug_comfort.hi
# coding=utf-8
"""Utility functions for calculating Heat Index (HI)."""
from __future__ import division
import math
[docs]
def heat_index(ta, rh):
"""Calculate heat index (HI) from air temperature and relative humidity.
Heat index is derived from original work carried out by Robert G. Steadman [1],
which defined heat index through large tables of empirical data.
The formula here approximates the heat index to within +/- 0.7C and is
the result of a multivariate fit [2].
Heat index was adopted by the US's National Weather Service (NWS) in 1979.
Note:
[1] Steadman, R. G. (July 1979). "The Assessment of Sultriness. Part I: A
Temperature-Humidity Index Based on Human Physiology and Clothing Science".
Journal of Applied Meteorology. 18 (7): 861–873.
[2] Lans P. Rothfusz. "The Heat Index 'Equation' (or, More Than You Ever
Wanted to Know About Heat Index)", Scientific Services Division
(NWS Southern Region Headquarters), 1 July 1990.
https://www.weather.gov/media/ffc/ta_htindx.PDF
Args:
ta: Air temperature [C]
rh: Relative humidity [%]
Returns:
hi -- Heat index [C]
"""
tf = ta * 9. / 5. + 32. # convert to fahrenheit
if tf < 80:
hif = 0.5 * (tf + 61.0 + ((tf - 68.0) * 1.2) + (rh * 0.094))
else:
hif = -42.379 + 2.04901523 * tf + \
10.14333127 * rh - \
0.22475541 * tf * rh - \
6.83783e-3 * tf ** 2 - \
5.481717e-2 * rh ** 2 + \
1.22874e-3 * tf ** 2 * rh + \
8.5282e-4 * tf * rh ** 2 - \
1.99e-6 * tf ** 2 * rh ** 2
if tf >= 80 and tf <= 112 and rh < 13:
adjust = ((13. - rh) / 4.) * math.sqrt((17. - abs(tf - 95.)) / 17.)
hif = hif - adjust
elif tf >= 80 and tf <= 87 and rh > 85:
adjust = ((rh - 85) / 10) * ((87 - tf) / 5)
hif = hif + adjust
hi = (hif - 32.) * 5. / 9. # convert to celsius
return hi
[docs]
def heat_index_warning_category(hi):
"""Get the category of warning associated with a given heat index (HI).
Categories are used by the US National Weather Service (NWS) and National
Oceanic and Atmospheric Administration (NOAA) to issue the following warnings:
* 0 = No Warning. Satisfactory temperature. Can continue with activity.
* 1 = Caution: Fatigue is possible with prolonged exposure and activity.
Continuing activity could result in heat cramps.
* 2 = Extreme caution: Heat cramps and heat exhaustion are possible.
Continuing activity could result in heat stroke.
* 3 = Danger: Heat cramps and heat exhaustion are likely.
Heat stroke is probable with continued activity.
* 4 = Extreme danger: Heat stroke is imminent.
Args:
hi: Heat index [C]
Returns:
category -- An integer indicating the level of warning associated with the
heat index. Values are one of the following:
- 0 = No Warning
- 1 = Caution
- 2 = Extreme Caution
- 3 = Danger
- 4 = Extreme Danger
"""
if hi < 26.6:
category = 0
elif hi < 32.2:
category = 1
elif hi < 40.5:
category = 2
elif hi < 54.4:
category = 3
else:
category = 4
return category