Source code for pythermalcomfort.models.esi

from __future__ import annotations

import numpy as np

from pythermalcomfort.classes_input import ESIInputs
from pythermalcomfort.classes_return import ESI


[docs] def esi( tdb: float | list[float], rh: float | list[float], sol_radiation_global: float | list[float], round_output: bool = True, ) -> ESI: """Calculate the Environmental Stress Index (ESI) [Moran2001]_. Parameters ---------- tdb : float or list of floats Dry bulb air temperature, [°C]. rh: float or list of floats Relative humidity, [%]. sol_radiation_global: float or list of floats Global solar radiation, [W/m2]. round_output : bool, optional If True, rounds output value. If False, it does not round it. Defaults to True. Returns ------- ESI A dataclass containing the Environmental Stress Index. See :py:class:`~pythermalcomfort.classes_return.ESI` for more details. To access the `esi` value, use the `esi` attribute of the returned `ESI` instance, e.g., `result.esi`. Examples -------- .. code-block:: python from pythermalcomfort.models import esi result = esi(tdb=30.2, rh=42.2, sol_radiation_global=766) print(result.esi) # 26.2 result = esi(tdb=[30.2, 27.0], rh=[42.2, 68.8], sol_radiation_global=[766, 289]) print(result.esi) # [26.2, 25.6] """ ESIInputs( tdb=tdb, rh=rh, sol_radiation_global=sol_radiation_global, round_output=round_output, ) tdb = np.asarray(tdb) rh = np.asarray(rh) sol_radiation_global = np.asarray(sol_radiation_global) _esi = ( 0.63 * tdb - 0.03 * rh + 0.002 * sol_radiation_global + 0.0054 * (tdb * rh) - 0.073 * (0.1 + sol_radiation_global) ** (-1) ) if round_output: _esi = np.round(_esi, 1) return ESI(esi=_esi)