Clothing#

Introduction#

There are several key variables related to the thermal insulation and water vapour resistance of clothing ensembles. The standard, BS EN ISO 9920:2009, defines them. These variables are crucial for assessing thermal stress and comfort in different environments.

Thermal Insulation (I)

This represents the resistance to dry heat loss between two surfaces and is expressed in square metres Kelvin per watt (m²⋅K⋅W⁻¹). It’s the temperature gradient divided by the heat loss per unit of body surface area. Thermal insulation is often expressed in ‘clo’ units, where 1 clo = 0.155 m²⋅K⋅W⁻¹.

  • Total Insulation (IT): This is the thermal insulation from the body surface to the environment, encompassing all clothing layers, enclosed air layers, and the boundary air layer, under static reference conditions.

  • Basic Insulation (Icl): Also known as intrinsic insulation, this is the thermal insulation from the skin surface to the outer clothing surface, including enclosed air layers, under static reference conditions. This is the value used as input for example in the PMV model.

  • Air Insulation (Ia): This is the thermal insulation of the boundary air layer around the outer clothing or, when nude, around the skin surface. This can be influenced by air and body movement, and also can be expressed as a combination of convective and radiative heat transfer coefficients. It can be calculated using pythermalcomfort.utilities.clo_insulation_air_layer()

  • Resultant Total Insulation (IT,r): This is the actual thermal insulation from the body surface to the environment, considering all clothing, enclosed air layers, and boundary air layers under given environmental conditions and activities. It accounts for the effects of movements and wind.

  • Effective Thermal Insulation (Iclu): This term is used for individual garments. It’s determined on a manikin wearing only a single garment.

Water Vapour Resistance (Re)

This represents the resistance to water vapour transfer between two surfaces and is expressed in square metres kilopascal per watt (m²⋅kPa⋅W⁻¹). It’s the vapour pressure gradient divided by the evaporative heat loss per unit of body surface area.

  • Basic Water Vapour Resistance (Re,cl): This is the water vapour resistance from the skin surface to the outer clothing surface under reference conditions. The standard also defines resultant or dynamic basic water vapour resistance to account for the impact of body and air movement on this variable.

  • Total Water Vapour Resistance (Re,T): The water vapour resistance of a clothing ensemble.

Clothing Area Factor (fcl)

This factor accounts for the increase in surface area due to clothing. It is used in calculations of the heat transfer between the body and the environment and is related to the thermal insulation of the clothing. It can be calculated by using pythermalcomfort.utilities.clo_area_factor()

Permeability Index (im)

This index is related to the permeability of fabric layers and is used in estimating water vapour resistance. It is not directly related to insulation, but to the fabric’s ability to allow vapour to pass through. For an air layer, im is around 0.5. For many types of permeable clothing, it may be set to 0.38.

These variables are essential for estimating the thermal characteristics of clothing ensembles and for evaluating thermal stress using standardized methods.

Determining Estimated Clothing Insulation#

The EN ISO 9920:2009 standard provides several methods for estimating clothing insulation when direct measurement isn’t feasible. These methods include using pre-measured tables, summing individual garment values, or applying empirical equations. It’s important to note that these are estimates, and measurements from manikins and human subjects are more accurate.

Methods for Estimating Clothing Insulation#

Using Tables of Complete Ensembles:#

  • The standard provides tables (Annex A) with insulation values (IT and Icl) for various clothing ensembles.

  • These values are measured using a standing thermal manikin in low air movement (< 0.2 m/s) conditions.

  • The tables also list the clothing area factor (fcl) for each ensemble.

  • To use this method, match your ensemble to the closest one in the table for the most accurate estimate.

  • Interpolation between table values can provide estimates for ensembles not exactly listed.

  • Small corrections can be made by adding or subtracting insulation values for individual garments to the values for a closely matching ensemble.

  • Remember to correct these values for movement and air velocity when applying to real-world situations.

Summation of Individual Garment Insulations:#

  • When a complete ensemble isn’t available, you can estimate the ensemble insulation (Icl) by summing the effective thermal insulation (Iclu) of each garment by using pythermalcomfort.utilities.clo_intrinsic_insulation_ensemble()

  • This method assumes uniform insulation distribution and may be inaccurate for unevenly layered clothing. Using full ensembles from the tables is preferable.

The standard also provides other methods which are not listed here.

Influence of Body and Air Movement on Thermal Insulation and Vapour Resistance#

Body movement and air movement significantly reduce both the thermal insulation and water vapour resistance of clothing ensembles. This reduction is primarily due to a “pumping effect” where air is exchanged with the environment via openings, and also by compression of clothing and air penetration through fabrics.

Correction of clothing insulation for body movement#

To correct static clothing insulation values for the effects of air and body movement, the ISO 9920 provides correction equations based on the total static insulation value, (IT), to obtain the resultant total clothing insulation, (IT,r). These equations take into account air velocity relative to the person (vr, from 0.15 to 3.5 m/s) and walking speed (vw, from 0 to 1.2 m/s).

The correction equations are comprised within this function pythermalcomfort.utilities.clo_total_insulation()

Other Factors Influencing Clothing Insulation#

Posture#

  • Changes in posture, like sitting, impact the body’s heat exchange surface.

  • Sitting generally increases air layer insulation (Ia) due to air pockets forming around the knees and hips.

  • However, sitting reduces clothing insulation (Icl) because clothing on the back, thighs, and buttocks is compressed.

  • Typically, Icl decreases by 6% to 18% when a person sits, while Ia increases by 10% to 25%.

  • The overall effect depends on the balance between clothing and air insulation. For example: for a nude person, the total insulation typically increases by about 10% when sitting. For a person wearing thick clothing, the total insulation typically decreases by about 10% when sitting.

  • These effects don’t account for the influence of the seat itself.

Effect of Seats#

  • The type of seat can either add to or reduce a person’s insulation.

  • A standard car seat can increase insulation by approximately 0.25 clo; however, ventilation within the car seat can decrease insulation.

  • Office chairs can increase insulation by 0.04 clo to 0.17 clo, depending on the backrest and seat thickness.

  • A sofa adds around 0.21 clo.

  • Net chairs and wooden stools can decrease insulation by about 0.03 clo.

Effect of Pressure#

  • Changes in air pressure, such as a decrease when at altitude, affect both dry and evaporative heat transfer.

  • Lower air pressure reduces convective heat transfer, leading to an increase in dry insulation.

  • Low pressure enhances evaporative heat transfer, which causes greater heat loss.

  • The net effect depends on the balance between these processes and the level of sweating.

Wetting#

  • When clothing gets wet, it loses part of its insulation.

  • Moisture increases the material’s conductivity, thus decreasing insulation.

  • Moisture in clothing also results in additional evaporation and increased heat loss.

Washing#

  • Washing can alter the thermal insulation properties of clothing.

  • The extent of the effect varies with the textile type but is usually within the limits of measurement accuracy. Insulation may increase due to fibre contraction in woven or knitted garments. However, insulation mostly decreases because of reduced thickness.

  • Cold protective clothing with polyester batting tends to decrease in thickness and insulation after washing.

Functions#

Air insulation layer (Ia)#

pythermalcomfort.utilities.clo_insulation_air_layer(vr, v_walk, i_a_static)[source]#

Calculate the insulation of the boundary air layer (Ia,r).

The static boundary air value is 0.7 clo (0.109 m2K/W) for air velocities around 0.1 m/s to 0.15 m/s. Thus, for static conditions, the standard recommends using the value of 0.7 clo (0.109 m2K/W) for the boundary air layer insulation. For walking conditions, the boundary air layer insulation is calculated based on the walking speed (v_walk) and the relative air speed (vr). This equation is extracted from the ISO 9920:2009 standard [ISO9920] Section 6.

Parameters:
  • vr (float or list of floats) – relative air speed, [m/s]

  • v_walk (float or list of floats) – walking speed, [m/s]

  • i_a_static (float or list of floats) – static boundary air layer insulation, [clo]

Returns:

i_a_r (float or list of floats) – boundary air layer insulation, [clo]

Correction factor for (IT)#

pythermalcomfort.utilities.clo_correction_factor_environment(vr, v_walk, i_cl)[source]#

Return the correction factor for the total insulation of the clothing ensemble (IT) or the basic/intrinsic insulation (Icl).

This correction factor takes into account of the fact that the values of (IT) and (Icl) are estimated in static conditions. In real environments the person may be walking, activity may pump air through the clothing, etc.

Parameters:
  • vr (float or list of floats) – relative air speed, [m/s]

  • v_walk (float or list of floats) – walking speed, [m/s]

  • i_cl (float or list of floats) – intrinsic insulation of the clothing ensemble, this is the thermal insulation from the skin surface to the outer clothing surface [clo]

Returns:

correction_factor (float or list of floats) – correction factor for the total insulation of the clothing ensemble (IT,r / (IT)) or the basic/intrinsic insulation (Icl,r / (Icl))

Clothing area factor (fcl)#

pythermalcomfort.utilities.clo_area_factor(i_cl)[source]#

Calculate the clothing area factor (f_cl) of the clothing ensemble as a function of the intrinsic insulation of the clothing ensemble. This equation is in accordance with the ISO 9920:2009 standard [ISO9920] Section 5. The standard warns that the correlation between f_cl and i_cl is low especially for non-western clothing ensembles. The application of this equation is limited to clothing ensembles with clo values between 0.2 and 1.7 clo.

Parameters:

i_cl (float or list of floats) – intrinsic insulation of the clothing ensemble, [clo]

Returns:

f_cl (float or list of floats) – area factor of the clothing ensemble, [m2]

Dynamic clothing#

Below are the two functions to calculate the dynamic clothing in accordance with ISO and ASHRAE.

pythermalcomfort.utilities.clo_dynamic_iso(clo, met, v, i_a=0.7, model='9920-2007')[source]#

Estimates the dynamic intrinsic clothing insulation (I cl,r).

The activity as well as the air speed modify the insulation characteristics of the clothing. Consequently, the ISO standard states that (I cl,) shall be corrected [7730ISO2005]. However, the ISO 7730:2005 contains insufficient information to calculate (I cl,r). Therefore, we implemented the equations provided in the ISO 9920:2007 standard [ISO9920].

Parameters:
  • clo (float or list of floats) – clothing insulation, [clo]

  • met (float or list of floats) – metabolic rate, [met]

  • v (float or list of floats) – air speed, [m/s]

  • i_a (float or list of floats) – thermal insulation of the boundary (surface) air layer around the outer clothing or, when nude, around the skin surface, [clo]

  • model (str, optional) – Select the version of the ISO standard to use. Currently, the only option available is “9920-2007”.

Returns:

clo (float or list of floats) – dynamic clothing insulation, [clo]

pythermalcomfort.utilities.clo_dynamic_ashrae(clo, met, model='55-2023')[source]#

Estimates the dynamic intrinsic clothing insulation (I cl,r).

The ASHRAE 55:2023 refers to it as (I cl,active). The activity as well as the air speed modify the insulation characteristics of the clothing. Consequently, the ASHRAE 55 standard provides a correction factor for the clothing insulation (I cl) based on the metabolic rate.

Parameters:
  • clo (float or list of floats) – clothing insulation, [clo]

    Note

    this is the basic insulation (I cl) also known as the intrinsic clothing insulation value under reference conditions

  • met (float or list of floats) – metabolic rate, [met]

  • model (str, optional) – Select the version of the ASHRAE 55 Standard to use. Currently, the only option available is “55-2023”.

Returns:

clo (float or list of floats) – dynamic clothing insulation (I cl,r), [clo]

Intrinsic clothing insulation ensemble (Icl)#

pythermalcomfort.utilities.clo_intrinsic_insulation_ensemble(clo_garments)[source]#

Calculate the intrinsic insulation of a clothing ensemble based on individual garments.

This equation is in accordance with the ISO 9920:2009 standard [ISO9920] Section 4.3. It should be noted that this equation is only valid for clothing ensembles with rather uniform insulation values across the body.

Parameters:

clo_garments (floats or list of floats) – list of floats containing the clothing insulation for each individual garment

Returns:

i_cl (float) – intrinsic insulation of the clothing ensemble, [clo]

Total insulation of the clothing ensemble (IT)#

pythermalcomfort.utilities.clo_total_insulation(i_t, vr, v_walk, i_a_static, i_cl)[source]#

Calculate the total insulation of the clothing ensemble (IT,r).

The clothing ensemble (IT,r) which is the actual thermal insulation from the body surface to the environment, considering all clothing, enclosed air layers, and boundary air layers under given environmental conditions and activities. It accounts for the effects of movements and wind. The ISO 7790 standard [ISO9920] provides different equations to calculate it as a function of the total thermal insulation of clothing (IT), the insulation of the boundary air layer (Ia), the walking speed (vwalk), and the relative air speed (vr). These different equations are used if the person is clothed in normal clothing (0.6 clo < (Icl) < 1.4 clo or 1.2 clo < (IT) < 2.0 clo), nude (Icl = 0 clo), and if the person is clothed in very light clothing (Icl < 0.6 clo). Here we have not implemented the equation for high clothing (IT > 2.0 clo). Hence the applicability of this function is limited to 0 clo < (IT) < 2.0 clo). You can find all the inputs required in this function in the ISO 9920:2009 standard [ISO9920] Annex A.

Parameters:
  • i_t (float or list of floats) – total thermal insulation of clothing under static reference conditions [clo]

  • vr (float or list of floats) – relative air speed, [m/s]

  • v_walk (float or list of floats) – walking speed, [m/s]

  • i_a_static (float or list of floats) – static boundary air layer insulation, [clo]

  • i_cl (float or list of floats) – intrinsic insulation of the clothing ensemble, this is the thermal insulation from the skin surface to the outer clothing surface [clo]

Returns:

i_t_r (float or list of floats) – total insulation of the clothing ensemble, [clo]

Clothing insulation of typical ensembles, [clo]#

pythermalcomfort.utilities.clo_typical_ensembles = {'Jacket, Trousers, long-sleeve shirt': 0.96, 'Knee-length skirt, long-sleeve shirt, full slip': 0.67, 'Knee-length skirt, short-sleeve shirt, sandals, underwear': 0.54, 'Sweat pants, long-sleeve sweatshirt': 0.74, 'Trousers, long-sleeve shirt': 0.61, 'Trousers, short-sleeve shirt, socks, shoes, underwear': 0.57, 'Typical summer indoor clothing': 0.5, 'Typical winter indoor clothing': 1.0, 'Walking shorts, short-sleeve shirt': 0.36}#

Total clothing insulation of typical ensembles.

Example

from pythermalcomfort.utilities import clo_typical_ensembles

print(clo_typical_ensembles["Typical summer indoor clothing"])
# Output: 0.5

Insulation of individual garments, [clo]#

pythermalcomfort.utilities.clo_individual_garments = {'Ankle socks': 0.02, 'Boots': 0.1, 'Bra': 0.01, 'Calf length socks': 0.03, 'Coveralls': 0.49, 'Double-breasted coat (thick)': 0.48, 'Double-breasted coat (thin)': 0.42, 'Executive chair': 0.15, 'Full slip': 0.16, 'Half slip': 0.14, 'Knee socks (thick)': 0.06, 'Long sleeve shirt (thick)': 0.36, 'Long sleeve shirt (thin)': 0.25, 'Long underwear bottoms': 0.15, 'Long underwear top': 0.2, 'Long-sleeve dress shirt': 0.25, 'Long-sleeve flannel shirt': 0.34, 'Long-sleeve long gown': 0.46, 'Long-sleeve long wrap robe (thick)': 0.69, 'Long-sleeve pajamas (thick)': 0.57, 'Long-sleeve shirt dress (thick)': 0.47, 'Long-sleeve shirt dress (thin)': 0.33, 'Long-sleeve short wrap robe (thick)': 0.48, 'Long-sleeve sweat shirt': 0.34, "Men's underwear": 0.04, 'Metal chair': 0.0, 'Overalls': 0.3, 'Panty hose': 0.02, 'Shoes or sandals': 0.02, 'Short shorts': 0.06, 'Short-sleeve dress shirt': 0.19, 'Short-sleeve hospital gown': 0.31, 'Short-sleeve knit shirt': 0.17, 'Short-sleeve pajamas': 0.42, 'Short-sleeve shirt dress': 0.29, 'Short-sleeve short robe (thin)': 0.34, 'Single-breasted coat (thick)': 0.44, 'Single-breasted coat (thin)': 0.36, 'Sleeveless long gown (thin)': 0.2, 'Sleeveless scoop-neck blouse': 0.12, 'Sleeveless short gown (thin)': 0.18, 'Sleeveless vest (thick)': 0.17, 'Sleeveless vest (thin)': 0.1, 'Sleeveless, scoop-neck shirt (thick)': 0.27, 'Sleeveless, scoop-neck shirt (thin)': 0.23, 'Slippers': 0.03, 'Standard office chair': 0.1, 'Sweatpants': 0.28, 'T-shirt': 0.08, 'Thick skirt': 0.23, 'Thick trousers': 0.24, 'Thin skirt': 0.14, 'Thin trousers': 0.15, 'Walking shorts': 0.08, "Women's underwear": 0.03, 'Wooden stool': 0.01}#

Clo values of individual clothing elements. To calculate the total clothing insulation you need to add these values together.

Example

from pythermalcomfort.utilities import clo_individual_garments

print(clo_individual_garments["T-shirt"])
# 0.08

# calculate total clothing insulation
i_cl = (
    clo_individual_garments["T-shirt"]
    + clo_individual_garments["Men's underwear"]
    + clo_individual_garments["Thin trousers"]
    + clo_individual_garments["Shoes or sandals"]
)
print(i_cl)
# 0.29