Source code for pythermalcomfort.models.pmv_a

from __future__ import annotations

from typing import Literal

import numpy as np

from pythermalcomfort.classes_input import APMVInputs
from pythermalcomfort.classes_return import APMV
from pythermalcomfort.models.pmv_ppd_iso import pmv_ppd_iso
from pythermalcomfort.utilities import Models, Units


[docs] def pmv_a( tdb: float | list[float], tr: float | list[float], vr: float | list[float], rh: float | list[float], met: float | list[float], clo: float | list[float], a_coefficient: float, wme: float | list[float] = 0, units: Literal["SI", "IP"] = Units.SI.value, limit_inputs: bool = True, ) -> APMV: """Return Adaptive Predicted Mean Vote (aPMV) [Yao2009]_. This index was developed by Yao, R. et al. (2009). The model takes into account factors such as culture, climate, social, psychological, and behavioral adaptations, which have an impact on the senses used to detect thermal comfort. This model uses an adaptive coefficient (λ) representing the adaptive factors that affect the sense of thermal comfort. Parameters ---------- tdb : float or list of floats Dry bulb air temperature, default in [°C] or [°F] if `units` = 'IP'. tr : float or list of floats Mean radiant temperature, default in [°C] or [°F] if `units` = 'IP'. vr : float or list of floats Relative air speed, default in [m/s] or [fps] if `units` = 'IP'. .. note:: vr is the sum of the average air speed measured by the sensor and the activity-generated air speed (Vag). Calculate vr using :py:meth:`pythermalcomfort.utilities.v_relative`. rh : float or list of floats Relative humidity, [%]. met : float or list of floats Metabolic rate, [met]. clo : float or list of floats Clothing insulation, [clo]. .. note:: Correct for body movement effects using :py:meth:`pythermalcomfort.utilities.clo_dynamic_iso`. a_coefficient : float Adaptive coefficient. wme : float or list of floats, optional External work, [met], default is 0. units : str, optional Units system, 'SI' or 'IP'. Defaults to 'SI'. limit_inputs : bool, optional If True, returns nan for inputs outside standard limits. Defaults to True. .. note:: ISO 7730 2005 limits: 10 < tdb [°C] < 30, 10 < tr [°C] < 40, 0 < vr [m/s] < 1, 0.8 < met [met] < 4, 0 < clo [clo] < 2, -2 < PMV < 2. Returns ------- APMV A dataclass containing the Predicted Mean Vote (a_pmv). See :py:class:`~pythermalcomfort.classes_return.AdaptivePMV` for more details. To access the `a_pmv` value, use the `a_pmv` attribute of the returned `AdaptivePMV` instance, e.g., `result.a_pmv`. Examples -------- .. code-block:: python :emphasize-lines: 9,12,14 from pythermalcomfort.models import pmv_a from pythermalcomfort.utilities import v_relative, clo_dynamic_iso v = 0.1 met = 1.4 clo = 0.5 # Calculate relative air speed v_r = v_relative(v=v, met=met) # Calculate dynamic clothing clo_d = clo_dynamic_iso(clo=clo, met=met, v=v) results = pmv_a( tdb=28, tr=28, vr=v_r, rh=50, met=met, clo=clo_d, a_coefficient=0.293, ) print(results) # AdaptivePMV(a_pmv=0.74) print(results.a_pmv) # 0.71 """ # Validate inputs using the APMVInputs class APMVInputs( tdb=tdb, tr=tr, vr=vr, rh=rh, met=met, clo=clo, a_coefficient=a_coefficient, wme=wme, units=units, ) _pmv = pmv_ppd_iso( tdb, tr, vr, rh, met, clo, wme, model=Models.iso_7730_2005.value, units=units, limit_inputs=limit_inputs, ).pmv pmv_value = np.around(_pmv / (1 + a_coefficient * _pmv), 2) return APMV(a_pmv=pmv_value)