module OpenstudioStandards::Infiltration
The Infiltration
module provides methods create, modify, and get information about model infiltration
Public Class Methods
Convert an infiltration rate at a given pressure to another pressure (typically lower) Method from Gowri, Krishnan, Winiarski, David W, and Jarnagin, Ronald E. Infiltration
modeling guidelines for commercial building energy analysis. United States: N. p., 2009. Web. doi:10.2172/968203.
@param infiltration_rate [Double] initial infiltration rate @param initial_pressure [Double] pressure difference at which initial infiltration rate was determined, typically 75 Pa @param final_pressure [Double] desired pressure difference to adjust infiltration rate, typically 4 Pa @param infiltration_coefficient [Double] infiltration coeffiecient @return [Double] adjusted infiltration rate in the same units as infiltration_rate
# File lib/openstudio-standards/infiltration/infiltration.rb, line 14 def self.adjust_infiltration_to_new_pressure(infiltration_rate, initial_pressure: 75.0, final_pressure: 4.0, infiltration_coefficient: 0.65) adjusted_infiltration_rate = infiltration_rate * (final_pressure / initial_pressure)**infiltration_coefficient return adjusted_infiltration_rate end
Convert the infiltration rate to the pressures and conditions assumed in the PNNL prototype buildings Details described in Gowri, Krishnan, Winiarski, David W, and Jarnagin, Ronald E. Infiltration
modeling guidelines for commercial building energy analysis. United States: N. p., 2009. Web. doi:10.2172/968203.
@param infiltration_rate [Double] initial infiltration rate @param initial_pressure [Double] pressure difference at which initial infiltration rate was determined in Pa, default 75 Pa @return [Double] adjusted infiltration rate in the same units as infiltration_rate
# File lib/openstudio-standards/infiltration/infiltration.rb, line 29 def self.adjust_infiltration_to_prototype_building_conditions(infiltration_rate, initial_pressure: 75.0) alpha = 0.22 # terrain adjustment factor for an urban environment, unitless uh = 4.47 # wind speed, m/s rho = 1.18 # air density, kg/m^3 cs = 0.1617 # positive surface pressure coefficient, unitless n = 0.65 # infiltration coefficient, unitless # Calculate the typical pressure - same for all building types final_pressure_pa = 0.5 * cs * rho * uh**2 adjusted_infiltration_rate = (1.0 + alpha) * infiltration_rate * (final_pressure_pa / initial_pressure)**n return adjusted_infiltration_rate end
Determine the component infiltration rate for a sub surface Details described in Table 5.7 of Thornton, Brian A, Rosenberg, Michael I, Richman, Eric E, Wang, Weimin, Xie, YuLong, Zhang, Jian, Cho, Heejin, Mendon, Vrushali V, Athalye, Rahul A, and Liu, Bing. Achieving the 30% Goal: Energy and Cost Savings Analysis of ASHRAE Standard
90.1-2010. United States: N. p., 2011. Web. doi:10.2172/1015277.
@param sub_surface [OpenStudio::Model::SubSurface] OpenStudio SubSurface object @param type [String] choices are ‘baseline’ and ‘advanced’ @return [Double] component infiltration rate in m^3/s
# File lib/openstudio-standards/infiltration/infiltration.rb, line 124 def self.sub_surface_component_infiltration_rate(sub_surface, type: 'baseline') # Define the envelope component infiltration rates component_infil_rates_cfm_per_ft2 = { 'baseline' => { 'opaque_door' => 0.40, 'loading_dock_door' => 0.40, 'swinging_or_revolving_glass_door' => 1.0, 'vestibule' => 1.0, 'sliding_glass_door' => 0.40, 'window' => 0.40, 'skylight' => 0.40 }, 'advanced' => { 'opaque_door' => 0.20, 'loading_dock_door' => 0.20, 'swinging_or_revolving_glass_door' => 1.0, 'vestibule' => 1.0, 'sliding_glass_door' => 0.20, 'window' => 0.20, 'skylight' => 0.20 } } # Skip non-outdoor surfaces unless sub_surface.outsideBoundaryCondition == 'Outdoors' return 0.0 end # Per area infiltration rate for this sub surface case sub_surface.subSurfaceType when 'Door' infil_rate_cfm_per_ft2 = component_infil_rates_cfm_per_ft2[type]['opaque_door'] when 'OverheadDoor' infil_rate_cfm_per_ft2 = component_infil_rates_cfm_per_ft2[type]['loading_dock_door'] when 'GlassDoor' OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Infiltration', "Assuming swinging_or_revolving_glass_door for #{sub_surface.name} for component infiltration rate.") infil_rate_cfm_per_ft2 = component_infil_rates_cfm_per_ft2[type]['swinging_or_revolving_glass_door'] when 'FixedWindow', 'OperableWindow' infil_rate_cfm_per_ft2 = component_infil_rates_cfm_per_ft2[type]['window'] when 'Skylight', 'TubularDaylightDome', 'TubularDaylightDiffuser' infil_rate_cfm_per_ft2 = component_infil_rates_cfm_per_ft2[type]['skylight'] else OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Infiltration', "Could not determine infiltration sub surface type for #{sub_surface.name}, defaulting to 0 component infiltration rate.") return 0.0 end # Area of the sub surface area_m2 = sub_surface.netArea area_ft2 = OpenStudio.convert(area_m2, 'm^2', 'ft^2').get # Rate for this sub surface comp_infil_rate_cfm = area_ft2 * infil_rate_cfm_per_ft2 comp_infil_rate_m3_per_s = OpenStudio.convert(comp_infil_rate_cfm, 'cfm', 'm^3/s').get return comp_infil_rate_m3_per_s end
Determine the component infiltration rate for a surface Details described in Table 5.7 of Thornton, Brian A, Rosenberg, Michael I, Richman, Eric E, Wang, Weimin, Xie, YuLong, Zhang, Jian, Cho, Heejin, Mendon, Vrushali V, Athalye, Rahul A, and Liu, Bing. Achieving the 30% Goal: Energy and Cost Savings Analysis of ASHRAE Standard
90.1-2010. United States: N. p., 2011. Web. doi:10.2172/1015277.
@param surface [OpenStudio::Model::Surface] OpenStudio Surface object @param type [String] choices are ‘baseline’ and ‘advanced’ @return [Double] component infiltration rate in m^3/s
# File lib/openstudio-standards/infiltration/infiltration.rb, line 53 def self.surface_component_infiltration_rate(surface, type: 'baseline') # Define the envelope component infiltration rates component_infil_rates_cfm_per_ft2 = { 'baseline' => { 'roof' => 0.12, 'exterior_wall' => 0.12, 'below_grade_wall' => 0.12, 'floor_over_unconditioned' => 0.12, 'slab_on_grade' => 0.12 }, 'advanced' => { 'roof' => 0.04, 'exterior_wall' => 0.04, 'below_grade_wall' => 0.04, 'floor_over_unconditioned' => 0.04, 'slab_on_grade' => 0.04 } } # Skip non-outdoor surfaces boundary_condition = surface.outsideBoundaryCondition unless boundary_condition == 'Outdoors' || boundary_condition == 'Ground' return 0.0 end # Per area infiltration rate for this surface surface_type = surface.surfaceType infil_rate_cfm_per_ft2 = nil case boundary_condition when 'Outdoors' case surface_type when 'RoofCeiling' infil_rate_cfm_per_ft2 = component_infil_rates_cfm_per_ft2[type]['roof'] when 'Wall' infil_rate_cfm_per_ft2 = component_infil_rates_cfm_per_ft2[type]['exterior_wall'] when 'Floor' infil_rate_cfm_per_ft2 = component_infil_rates_cfm_per_ft2[type]['floor_over_unconditioned'] end when 'Ground' case surface_type when 'Wall' infil_rate_cfm_per_ft2 = component_infil_rates_cfm_per_ft2[type]['below_grade_wall'] when 'Floor' infil_rate_cfm_per_ft2 = component_infil_rates_cfm_per_ft2[type]['slab_on_grade'] end else OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Infiltration', "Could not determine infiltration surface type for #{surface.name}, defaulting to 0 component infiltration rate.") return 0.0 end # Area of the surface area_m2 = surface.netArea area_ft2 = OpenStudio.convert(area_m2, 'm^2', 'ft^2').get # Rate for this surface comp_infil_rate_cfm = area_ft2 * infil_rate_cfm_per_ft2 comp_infil_rate_m3_per_s = OpenStudio.convert(comp_infil_rate_cfm, 'cfm', 'm^3/s').get return comp_infil_rate_m3_per_s end