Source code for pythermalcomfort.models.work_capacity_hothaps
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_hothaps(
wbgt: float | list[float],
work_intensity: str = WorkIntensity.HEAVY.value,
) -> WorkCapacity:
"""Estimate work capacity due to heat based on Kjellstrom et al. [Kjellstrom2018]_.
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. Note that in this version the functions do not reach
0% as it is assumed that it is always possible to work in short bursts for
10% of the time.
Note that for this function "the empirical evidence is from studies in
heavyly distinct locations, including a gold mine (Wyndham, 1969), 124 rice
harvesters in West Bengal in India (Sahu et al., 2013), and six women
observed in a climatic chamber (Nag and Nag, 1992)."
(https://adaptecca.es/sites/default/files/documentos/2018_jrc_pesetaiii_impact_labour_productivity.pdf).
The shape of the function is just an assumption, and the fit of the
sigmoid to the data it is analysing is not especially good.
Heavy intensity work is sometimes labelled as 400 W, moderate 300 W, light 200
W, but this is only nominal.
The correction citation is: Bröde P, Fiala D, Lemke B, Kjellstrom T.
Estimated work ability in warm outdoor environments depends on the chosen
heat stress assessment metric. International Journal of Biometeorology.
2018 Mar;62(3):331 45.
The relevant definitions of the functions can be found most clearly in:
Orlov A, Sillmann J, Aunan K, Kjellstrom T, Aaheim A. Economic costs of
heat-induced reductions in worker productivity due to global warming. Global
Environmental Change [Internet]. 2020 Jul;63. Available from:
https://doi.org/10.1016/j.gloenvcha.2020.102087
For a comparison of different functions see Fig 1 of Day E, Fankhauser S, Kingsmill
N, Costa H, Mavrogianni A. Upholding labour productivity under climate
change: an assessment of adaptation options. Climate Policy. 2019
Mar;19(3):367 85.
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".
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)
params = {
WorkIntensity.HEAVY: {"divisor": 30.94, "exponent": 16.64},
WorkIntensity.MODERATE: {"divisor": 32.93, "exponent": 17.81},
WorkIntensity.LIGHT: {"divisor": 34.64, "exponent": 22.72},
}
divisor = params[work_intensity]["divisor"]
exponent = params[work_intensity]["exponent"]
capacity = np.clip(100 * (0.1 + (0.9 / (1 + (wbgt / divisor) ** exponent))), 0, 100)
return WorkCapacity(capacity=capacity)