Source code for ladybug_comfort.clo

# coding=utf-8
"""Utility for estimating clothing level from temperature."""
from __future__ import division


[docs] def schiavon_clo(adapt_temp, max_clo=1, max_clo_temp=-5, min_clo=0.46, min_clo_temp=26): """Estimate levels of clothing using a temperature to which a human subject adapts. By default, this function derives clothing levels using a model developed by Schiavon, Stefano based on outdoor air temperature, which is implemented in the CBE comfort tool (https://comfort.cbe.berkeley.edu/). The version of the model implemented here allows changing of the maximum and minimum clothing levels, which the Schiavon model sets at 1 and 0.46 respectively, and the temperatures at which these clothing levels occur, which the Schiavon model sets at -5 C and 26 C respectively. Args: adapt_temp: A number representing the temperature to which the human subject adapts their clothing. This is typically the outdoor air temperature. max_clo: A number for the maximum clo value that the human subject wears on the coldest days. (Default: 1 clo, per the original Schiavon clothing function). max_clo_temp: A number for the temperature below which the _max_clo_ value is applied (in Celsius). (Default: -5 C, per the original Schiavon clothing function with outdoor temperature). min_clo: A number for the minimum clo value that the human subject wears wears on the hotest days. (Default: 0.46 clo, per the original Schiavon clothing function). min_clo_temp: A number for the temperature above which the _min_clo_ value is applied (in Celsius). (Default: 26 C, per the original Schiavon clothing function). Returns: A number for the clothing level of the human subject in clo. """ assert min_clo_temp - max_clo_temp >= 10, \ 'The difference between min_clo_temp and max_clo_temp must be at least 10 C. ' \ 'Got {}.'.format(min_clo_temp - max_clo_temp) if adapt_temp <= max_clo_temp: return max_clo elif adapt_temp < max_clo_temp + 10: f1_slope = ((max_clo - (max_clo - min_clo) * 0.75) - max_clo) / 10 f1_y_int = max_clo - (f1_slope * max_clo_temp) return adapt_temp * f1_slope + f1_y_int elif adapt_temp < min_clo_temp: f2_slope = (min_clo - (max_clo - (max_clo - min_clo) * 0.75)) / \ (min_clo_temp - (max_clo_temp + 10)) f2_y_int = min_clo - (f2_slope * min_clo_temp) return adapt_temp * f2_slope + f2_y_int else: return min_clo