Source code for pythermalcomfort.models.athb

import numpy as np

from pythermalcomfort.models.pmv_ppd import _pmv_ppd_optimized


[docs]def athb(tdb, tr, vr, rh, met, t_running_mean): """Return the PMV value calculated with the Adaptive Thermal Heat Balance Framework [27]_. The adaptive thermal heat balance (ATHB) framework introduced a method to account for the three adaptive principals, namely physiological, behavioral, and psychological adaptation, individually within existing heat balance models. The objective is a predictive model of thermal sensation applicable during the design stage or in international standards without knowing characteristics of future occupants. Parameters ---------- tdb : float, int, or array-like dry bulb air temperature, in [°C] tr : float, int, or array-like mean radiant temperature, in [°C] vr : float, int, or array-like relative air speed, in [m/s] Note: vr is the relative air speed caused by body movement and not the air speed measured by the air speed sensor. The relative air speed is the sum of the average air speed measured by the sensor plus the activity-generated air speed (Vag). Where Vag is the activity-generated air speed caused by motion of individual body parts. vr can be calculated using the function :py:meth:`pythermalcomfort.utilities.v_relative`. rh : float, int, or array-like relative humidity, [%] met : float, int, or array-like metabolic rate, [met] t_running_mean: float or array-like running mean temperature, in [°C] The running mean temperature can be calculated using the function :py:meth:`pythermalcomfort.utilities.running_mean_outdoor_temperature`. Returns ------- athb_pmv : float or array-like Predicted Mean Vote calculated with the Adaptive Thermal Heat Balance framework Examples -------- .. code-block:: python >>> from pythermalcomfort.models import athb >>> print(athb( tdb=[25, 27], tr=25, vr=0.1, rh=50, met=1.1, t_running_mean=20)) [0.2, 0.209] """ tdb = np.array(tdb) tr = np.array(tr) vr = np.array(vr) met = np.array(met) rh = np.array(rh) t_running_mean = np.array(t_running_mean) met_adapted = met - (0.234 * t_running_mean) / 58.2 # adapted clothing insulation level through behavioural adaptation clo_adapted = np.power( 10, ( -0.17168 - 0.000485 * t_running_mean + 0.08176 * met_adapted - 0.00527 * t_running_mean * met_adapted ), ) pmv_res = _pmv_ppd_optimized(tdb, tr, vr, rh, met_adapted, clo_adapted, 0) ts = 0.303 * np.exp(-0.036 * met_adapted * 58.15) + 0.028 l_adapted = pmv_res / ts # predicted thermal sensation vote return np.around( 1.484 + 0.0276 * l_adapted - 0.9602 * met_adapted - 0.0342 * t_running_mean + 0.0002264 * l_adapted * t_running_mean + 0.018696 * met_adapted * t_running_mean - 0.0002909 * l_adapted * met_adapted * t_running_mean, 3, )