Source code for pythermalcomfort.models.net

from __future__ import annotations

import numpy as np

from pythermalcomfort.classes_input import NETInputs
from pythermalcomfort.classes_return import NET


[docs] def net( tdb: float | list[float], rh: float | list[float], v: float | list[float], round_output: bool = True, ) -> NET: """Calculate the Normal Effective Temperature (NET). Missenard (1933) devised a formula for calculating effective temperature. The index establishes a link between the same condition of the organism's thermoregulatory capability (warm and cold perception) and the surrounding environment's temperature and humidity. The index is calculated as a function of three meteorological factors: air temperature, relative humidity of air, and wind speed. This index allows to calculate the effective temperature felt by a person. Missenard original equation was then used to calculate the Normal Effective Temperature (NET), by considering normal atmospheric pressure and a normal human body temperature (37°C). The NET is still in use in Germany, where medical check-ups for subjects working in the heat are decided on by prevailing levels of ET, depending on metabolic rates. The NET is also constantly monitored by the Hong Kong Observatory [Blazejczyk2012]_. In central Europe the following thresholds are in use: <1°C = very cold; 1-9 = cold; 9-17 = cool; 17-21 = fresh; 21-23 = comfortable; 23-27 = warm; >27°C = hot [Blazejczyk2012]_. Parameters ---------- tdb : float or list of floats Dry bulb air temperature, [°C]. rh : float or list of floats Relative humidity, [%]. v : float or list of floats Wind speed [m/s] at 1.2 m above the ground. round_output : bool, optional If True, rounds output value. If False, it does not round it. Defaults to True. Returns ------- NET A dataclass containing the Normal Effective Temperature. See :py:class:`~pythermalcomfort.classes_return.Net` for more details. To access the `net` value, use the `net` attribute of the returned `Net` instance, e.g., `result.net`. Examples -------- .. code-block:: python from pythermalcomfort.models import net result = net(tdb=37, rh=100, v=0.1) print(result.net) # 37.0 result = net(tdb=[37, 30], rh=[100, 60], v=[0.1, 0.5], round_output=False) print(result.net) # [37.0, 26.38977535] """ # Validate inputs using the NetInputs class NETInputs( tdb=tdb, rh=rh, v=v, round_output=round_output, ) tdb = np.asarray(tdb) rh = np.asarray(rh) v = np.asarray(v) frac = 1.0 / (1.76 + 1.4 * v**0.75) et = 37 - (37 - tdb) / (0.68 - 0.0014 * rh + frac) - 0.29 * tdb * (1 - 0.01 * rh) if round_output: et = np.around(et, 1) return NET(net=et)