Source code for pythermalcomfort.models.work_capacity_dunne
from __future__ import annotations
import numpy as np
from pythermalcomfort.classes_input import WorkCapacityHothapsInputs, WorkIntensity
from pythermalcomfort.classes_return import WorkCapacity
[docs]
def work_capacity_dunne(
wbgt: float | list[float],
work_intensity: str = WorkIntensity.HEAVY.value,
) -> WorkCapacity:
"""Estimate work capacity due to heat based on Dunne et al [Dunne2013]_.
Estimates the amount of work that will be done at a given WBGT and
intensity of work as a percent. 100% means work is unaffected by heat. 0%
means no work is done.
This is based upon NIOSH safety standards. See:
Dunne JP, Stouffer RJ, John JG. Reductions in labour capacity from heat
stress under climate warming. Nature Climate Change. 2013 Jun;3(6):563 6.
Heavy intensity work is sometimes labelled as 400 W, but this is only
nominal. Moderate work is assumed to be half as much as heavy intensity, and
light half as much as moderate.
Parameters
----------
wbgt : float or list of floats
Wet bulb globe temperature, [°C].
work_intensity : str
Which work intensity to use for the calculation, choice of "heavy",
"moderate" or "light". Default is "heavy".
.. note::
Dunne et al [Dunne2013]_ suggests that heavy intensity work is 350-500 kcal/h, moderate
is 200-350 kcal/h, and light is less than 100-200 kcal/h.
Returns
-------
WorkCapacity
A dataclass containing the work capacity. See
:py:class:`~pythermalcomfort.classes_return.WorkCapacity` for more details. To access the
`capacity` value, use the `capacity` attribute of the returned `WorkCapacity` instance, e.g.,
`result.capacity`.
"""
# validate inputs
WorkCapacityHothapsInputs(wbgt=wbgt, work_intensity=work_intensity)
# convert str to enum
work_intensity = WorkIntensity(work_intensity.lower())
wbgt = np.asarray(wbgt)
capacity = np.clip((100 - (25 * (np.maximum(0, wbgt - 25)) ** (2 / 3))), 0, 100)
factor_map = {
WorkIntensity.HEAVY: 1,
WorkIntensity.MODERATE: 2,
WorkIntensity.LIGHT: 4,
}
capacity = np.clip(capacity * factor_map[work_intensity], 0, 100)
return WorkCapacity(capacity=capacity)