Source code for honeybee_ph_utils.aisi_s250_21

# -*- coding: utf-8 -*-
# -*- Python Version: 2.7 -*-

"""
AISI S250-21 | “North American Standard for Thermal Transmittance of Building Envelopes With Cold-Formed Steel Framing, 2021 Edition”

https://www.steel.org/2021/09/aisi-publishes-aisi-s250-21-north-american-standard-for-thermal-transmittance-of-building-envelopes-with-cold-formed-steel-framing-2021-edition/

Thermal transmittance (U-factors) of above-grade wall assemblies constructed with standard Cshape studs and track,
where the framing spacing is 6, 12, 16 or 24 inches on-center, shall be determined in accordance with Equation
B3.1.8-1 using Sections B3.1.1 through B3.1.8 or shall be determined in accordance with Appendix 1. Where a
non-standard designation thickness for the cold-formed steel framing member is applicable, values for the OTZ coefficients
from Table B3.1.11 and thermal conductivity from Table B3.1.3-1 shall be based on linear interpolation for the
intermediate value of designation thickness or shall be based on the next larger standard designation thickness.
Extrapolation is not permitted.

NOTE: AISI does not provide an 'SI' version of the coefficients in Table B3.1.11. therefor
ALL values in this module are in imperial units. This includes R-Values, U-Values, and dimensions.
"""

from honeybee_ph_utils.enumerables import CustomEnum


[docs] class StudSpacingInches(CustomEnum): allowed = [ "6", "12", "16", "24", ] def __init__(self, _value=1): # type: (str | int) -> None super(StudSpacingInches, self).__init__(_value)
[docs] class StudThicknessMil(CustomEnum): allowed = [ "33", "43", "54", "68", ] def __init__(self, _value=1): # type: (str | int) -> None super(StudThicknessMil, self).__init__(_value)
# [AISI S250-21w/S1-22] Table B3.1.1-1 | OTZ Coefficients OTZ_COEFFICIENTS = { StudSpacingInches("6"): { StudThicknessMil("33"): [1.8583, 0.07478, 0.1488, -0.001859, -0.005103, 0.002013], StudThicknessMil("43"): [1.9826, 0.0736, 0.1501, -0.001816, -0.005314, 0.002149], StudThicknessMil("54"): [2.0814, 0.07131, 0.1522, -0.001713, -0.005295, 0.00205], StudThicknessMil("68"): [2.211, 0.06816, 0.1508, -0.001652, -0.005576, 0.0023], }, StudSpacingInches("12"): { StudThicknessMil("33"): [2.1584, 0.05118, 0.2079, -0.001384, -0.005367, 0.002253], StudThicknessMil("43"): [2.2077, 0.06381, 0.1992, -0.001713, -0.006235, 0.003499], StudThicknessMil("54"): [2.2974, 0.06439, 0.2043, -0.001686, -0.006908, 0.003943], StudThicknessMil("68"): [2.4136, 0.05185, 0.2166, -0.001216, -0.00684, 0.003748], }, StudSpacingInches("16"): { StudThicknessMil("33"): [2.2771, 0.03843, 0.1964, -0.001141, -0.005237, 0.003197], StudThicknessMil("43"): [2.3769, 0.04037, 0.2011, -0.001195, -0.005677, 0.003714], StudThicknessMil("54"): [2.4945, 0.04089, 0.1996, -0.001161, -0.005719, 0.003927], StudThicknessMil("68"): [2.5917, 0.04614, 0.1922, -0.001391, -0.005884, 0.004606], }, StudSpacingInches("24"): { StudThicknessMil("33"): [3.182, -0.02946, 0.2432, 0, -0.00752, 0.003572], StudThicknessMil("43"): [2.751, 0.0128, 0.1965, -0.00074, -0.006709, 0.005169], StudThicknessMil("54"): [2.572, 0.00426, 0.2285, 0, -0.0061, 0.003509], StudThicknessMil("68"): [2.936, -0.00324, 0.2256, 0, -0.00643, 0.00419], }, } # type: dict[StudSpacingInches, dict[StudThicknessMil, list[float]]] # [AISI S250-21w/S1-22] Table B3.1.3-1 | Cold-Formed Steel Thermal Conductivity (Btu/hr-ft2-F) STEEL_CONDUCTIVITY = { StudThicknessMil("33"): 381.0, StudThicknessMil("43"): 495.0, StudThicknessMil("54"): 622.0, StudThicknessMil("68"): 783.0, }
[docs] def overall_thermal_zone( c_0, c_1, c_2, c_3, c_4, c_5, r_cavity, r_ext_insulation, ): # type: (float, float, float, float, float, float, float, float) -> float """ [AISI S250-21w/S1-22] B3.1.1 Overall Thermal Zone. The overall thermal zone (OTZ) shall be determined in accordance with Equation B3.1.1-1. The appropriate coefficients for use in Equation B3.1.1-1 shall be obtained from Table B3.1.11 with the given on-center spacing of framing members and C-shape designation thickness. Eq. B3.1.1-1: OTZ = C_0 + C_1 * R_cav + C_2 * R_she + C_3 * R_cav^2 + C_4 * R_she^2 + C_5 * R_cav * R_she r_cavity (r_cav) = R_air + R_ins * R_ins: Thermal resistance (R-value) of cavity insulation (h-ft2-F/Btu) * = 0 where wall cavity contains no insulation * R_air: Thermal resistance (R-value) of the cavity air space (h-ft2-F/Btu) * = 0.91 where wall cavity contains an air space * = 0 where wall cavity contains no air space Args: C_0: Coefficient from Table B3.1.1-1 C_1: Coefficient from Table B3.1.1-1 C_2: Coefficient from Table B3.1.1-1 C_3: Coefficient from Table B3.1.1-1 C_4: Coefficient from Table B3.1.1-1 C-5: Coefficient from Table B3.1.1-1 r_cavity (R_cav): Total thermal resistance (R-value) of the wall cavity (h-ft2-F/Btu) r_ext_insulation (R_she): Thermal resistance (R-value) of exterior continuous insulation (hr-ft2-F/Btu). R_she does not include wood or gypsum panels. Returns: OTZ: Overall thermal zone (inch) """ return ( c_0 + c_1 * r_cavity + c_2 * r_ext_insulation + c_3 * r_cavity**2 + c_4 * r_ext_insulation**2 + c_5 * r_cavity * r_ext_insulation )
[docs] def framing_factor(stud_flange_width_inch, stud_thickness_mils): # type: (float, float) -> float """ [AISI S250-21w/S1-22] B3.1.2 C-Shape Framing Factor. The C-shape framing factor (FFcs) for the cold-formed steel framing shall be determined in accordance with Equation B3.1.2-1: Eq. B3.1.2-1: FF_cs = (CFS_t / 1000) / CFS_flange Args: stud_thickness_mils (CFS_t): Designation thickness of cold-formed steel framing member (mils) stud_flange_width_inch (CFS_flange): Flange width of cold-formed steel framing member (inches) Returns: float: (FF_cs) C-shape framing factor (unitless) """ return ((stud_thickness_mils) / 1000) / stud_flange_width_inch
[docs] def stud_web_r_value(stud_depth_inch, conductivity): # type: (float, float) -> float """ [AISI S250-21w/S1-22] B3.1.3.1 Thermal Resistance of C-Shape Web. The thermal resistance (R-value) of the web of the cold-formed steel framing member (Rs- wall ) shall be determined in accordance with Equation B3.1.3-1: * R_s-wall = CFS_depth / k Args: stud_depth (CFS_depth): Web depth of cold-formed steel framing member that is in contact with cavity insulation (inches) as illustrated by Figure B3.1.3-1 without cavity air space and Figure B3.1.3-2 with cavity air space conductivity (k): Thermal conductivity of cold-formed steel as selected from Table B3.1.3-1 (Btu/h-ft2-F) Returns: float: (R_s-wall) Thermal resistance (R-value) of the web of the cold-formed steel framing member (h-ft2-F/Btu) """ return stud_depth_inch / conductivity
[docs] def u_value_at_stud(framing_factor, r_value_cavity_insulation, r_value_stud_web): # type: (float, float, float) -> float """ [AISI S250-21w/S1-22] B3.1.3.2 Thermal Transmittance of Cavity with Insulation. The parallel path thermal transmittance (U-factor) of the assembly where insulation(s) are in contact with cold-formed steel framing member (U1 ) shall be determined in accordance with Equation B3.1.3-2. Where there is no insulation in the wall cavity, Equation B3.1.3-2 shall not be used and the resultant value of R 1 in Equation B3.1.3-3 shall be “zero” (0). * U_1 = (1 - FFcs) / R_ins + FFcs / Rs-wall Args: framing_factor (FF_cs): C-shape framing factor determined from Equation B3.1.2-1 r_value_cavity_insulation (R_ins): Thermal resistance (R-value) of cavity insulation (h-ft2-F/Btu) r_value_stud_web (R_s-wall): Thermal resistance (R-value) of the wall assembly at the web of the cold-formed steel framing member determined from Equation B3.1.3-1 (h-ft2-F/Btu) Returns: float: (U_1) Parallel path thermal transmittance (U-factor) of the assembly where insulation(s) are in contact with cold-formed steel framing member (Btu/hr-ft2-F) """ return (1 - framing_factor) / r_value_cavity_insulation + framing_factor / r_value_stud_web
[docs] def r_value_series_stud_path( r_ext_cladding, r_ext_insulation, r_ext_sheathing, r_3, r_int_sheathing, r_se=0.17, r_si=0.68, ): # type: (float, float, float, float, float, float, float) -> float """ [AISI S250-21w/S1-22] B3.1.6.1 Thermal Resistance (R-value) of Series Paths | C-Shape Path. The effective thermal resistance (R-value) of all materials in the design assembly in series for the path containing cold-formed steel (R_sps), illustrated as the C-shape path in Figure B3.1.3-1 or Figure B3.1.3-2, shall be determined using Equation B3.1.6-1: * R_sps = R_o + Side_ext + R_she + Sheath_ext + R_3 + Sheath_int + R_i Args: r_ext_cladding (Side_ext): Thermal resistance (R-value) of exterior siding (h-ft2-F/Btu) r_ext_insulation (R_she): Thermal resistance (R-value) of exterior continuous insulation (h-ft2-F/Btu) r_ext_sheathing (Sheath_ext): Thermal resistance (R-value) of all exterior sheathing(s) (h-ft2-F/Btu) R_3: Thermal resistance (R-value) determined from Equation B3.1.5-1 (h-ft2-F/Btu) r_int_sheathing (Sheath_int): Thermal resistance (R-value) of all interior sheathing(s) (h-ft2-F/Btu) r_se (R_o): [Default=0.17] Thermal resistance (R-value) of outside air film (h-ft2-F/Btu) r_si (R_i): [Default=0.68] Thermal resistance (R-value) of inside air film (h-ft2-F/Btu) Returns: float: (R_sps) Effective thermal resistance (R-value) of all materials in the design assembly in series for the path containing cold-formed steel (h-ft2-F/Btu) """ return r_se + r_ext_cladding + r_ext_insulation + r_ext_sheathing + r_3 + r_int_sheathing + r_si
[docs] def r_value_series_cavity_path( r_ext_cladding, r_ext_insulation, r_ext_sheathing, r_cavity_insulation, r_int_sheathing, r_se=0.17, r_si=0.68, ): # type: (float, float, float, float, float, float, float) -> float """ [AISI S250-21w/S1-22] B3.1.6.1 Thermal Resistance (R-value) of Series Paths | Cavity Path. B3.1.6.2 Cavity Path The thermal resistance (R-value) of all materials in the design assembly in series for the path containing only cavity insulation (R_spc), illustrated as the cavity path in Figure B3.1.31 or Figure B3.1.3-2, shall be determined using Equation B3.1.6-2: * R_spc = R_o + Side_ext + R_she + Sheath_ext + R_ins + R_air + Sheath_int + R_i Args: R_o: Thermal resistance (R-value) of outside air film (h-ft2F/Btu) r_ext_cladding (Side_ext): Thermal resistance (R-value) of exterior siding (h-ft2F/Btu) r_ext_insulation (R_she): Thermal resistance (R-value) of exterior continuous insulation (h-ft2F/Btu) r_ext_sheathing (Sheath_ext): Thermal resistance (R-value) of all exterior sheathing(s) (h-ft2F/Btu) r_cavity_insulation (R_ins): Thermal resistance (R-value) of cavity insulation (h-ft2F/Btu) R_air: Thermal resistance (R-value) of the cavity air space (h-ft2F/Btu) : 0.91 where wall cavity contains an air space : 0.00 where wall cavity contains no air space r_int_sheathing (Sheath_int): Thermal resistance (R-value) of all interior sheathing(s) (h-ft2F/Btu) R_i: Thermal resistance (R-value) of inside air film (h-ft2F/Btu) Returns: float: (R_spc) Effective thermal resistance (R-value) of all materials in the design assembly in series for the path containing only cavity insulation (h-ft2-F/Btu) """ return r_se + r_ext_cladding + r_ext_insulation + r_ext_sheathing + r_cavity_insulation + r_int_sheathing + r_si
[docs] def overall_thermal_zone_framing_factor(_overall_thermal_zone, _stud_spacing_inch): # type: (float, float) -> float """ [AISI S250-21w/S1-22] B3.1.7 OTZ Framing Factor. The OTZ Framing Factor (FF_otz) shall be determined using Equation B3.1.7-1: * FF_otz = OTZ / FS Args: _overall_thermal_zone (OTZ): Overall thermal zone (inch) _stud_spacing_inch (fs): Spacing of cold-formed steel framing members (inches) Returns: float: (FF_otz) OTZ Framing Factor (unitless) """ return _overall_thermal_zone / _stud_spacing_inch
[docs] def u_value_total(_overall_thermal_zone_framing_factor, _r_value_series_cavity_path, _r_value_series_stud_path): # type: (float, float, float) -> float """ [AISI S250-21w/S1-22] B3.1.8 Overall Thermal Transmittance (U-Factor). The overall thermal transmittance (U-factor) of the above-grade wall assembly (U_o) shall be determined using Equation B3.1.8-1: * U_o = (1 - FF_otz) / R_spc + FF_otz / R_sps Args: _overall_thermal_zone_framing_factor (FF_otz) : OTZ Framing Factor determined from Equation B3.1.7-1 (dimensionless) _r_value_series_cavity_path (R_spc) : Thermal resistance (R-value) of all materials in the design assembly in series for the cavity path determined from Equation B3.1.6-2 (h-ft2-F/Btu) _r_value_series_stud_path (R_sps) : Thermal resistance (R-value) of all materials in the design assembly in series for the C-shape path determined from Equation B3.1.6-1 (h-ft2-F/Btu) Returns: float: (U_o) Overall thermal transmittance (U-factor) of the above-grade wall assembly (Btu/hr-ft2-F) """ return ( 1 - _overall_thermal_zone_framing_factor ) / _r_value_series_cavity_path + _overall_thermal_zone_framing_factor / _r_value_series_stud_path
[docs] def calculate_stud_cavity_effective_u_value( _r_ext_cladding, _r_ext_insulation, _r_ext_sheathing, _r_cavity_insulation, _stud_spacing_inch, _stud_thickness_mil, _stud_flange_width_inch, _stud_depth_inch, _steel_conductivity, _r_int_sheathing, _r_se=0.17, _r_si=0.68, ): # type: (float, float, float, float, StudSpacingInches, StudThicknessMil, float, float, float, float, float, float) -> float try: C0, C1, C2, C3, C4, C5 = OTZ_COEFFICIENTS[_stud_spacing_inch][_stud_thickness_mil] except KeyError as e: msg = "The given stud spacing: '{}' and stud-thickness '{}' is not supported. ".format( _stud_spacing_inch.value, _stud_thickness_mil.value ) msg += "Please use one of the following combinations:\n" msg += "\tStud Spacing: {}\n".format(", ".join(StudSpacingInches.allowed)) msg += "\tStud Thickness: {}\n".format(", ".join(StudThicknessMil.allowed)) msg += "Error: {}".format(e) raise KeyError(msg) otz = overall_thermal_zone(C0, C1, C2, C3, C4, C5, _r_cavity_insulation, _r_ext_insulation) ff = framing_factor(_stud_flange_width_inch, float(_stud_thickness_mil.value)) web_r_value = stud_web_r_value(_stud_depth_inch, _steel_conductivity) stud_u_value = u_value_at_stud(ff, _r_cavity_insulation, web_r_value) r_1 = 1 / stud_u_value r_2 = 0 # <----- TODO: Calculate this properly calc U_2 r_3 = r_1 + r_2 r_stud_path = r_value_series_stud_path( _r_ext_cladding, _r_ext_insulation, _r_ext_sheathing, r_3, _r_int_sheathing, _r_se, _r_si ) r_cavity_path = r_value_series_cavity_path( _r_ext_cladding, _r_ext_insulation, _r_ext_sheathing, _r_cavity_insulation, _r_int_sheathing, _r_se, _r_si ) otz_ff = overall_thermal_zone_framing_factor(otz, float(_stud_spacing_inch.value)) u_overall = u_value_total(otz_ff, r_cavity_path, r_stud_path) r_overall = 1 / u_overall # Get the stud cavity U-Value by itself r_stud_cavity = ( r_overall - _r_ext_cladding - _r_ext_insulation - _r_ext_sheathing - _r_int_sheathing - _r_se - _r_si ) u_stud_cavity = 1 / r_stud_cavity return u_stud_cavity