Module: OpenstudioStandards::Infiltration

Defined in:
lib/openstudio-standards/infiltration/infiltration.rb

Overview

The Infiltration module provides methods create, modify, and get information about model infiltration

Calculations collapse

Surface collapse

SubSurface collapse

Class Method Details

.adjust_infiltration_to_new_pressure(infiltration_rate, initial_pressure: 75.0, final_pressure: 4.0, infiltration_coefficient: 0.65) ⇒ Double

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.

Parameters:

  • infiltration_rate (Double)

    initial infiltration rate

  • initial_pressure (Double) (defaults to: 75.0)

    pressure difference at which initial infiltration rate was determined, typically 75 Pa

  • final_pressure (Double) (defaults to: 4.0)

    desired pressure difference to adjust infiltration rate, typically 4 Pa

  • infiltration_coefficient (Double) (defaults to: 0.65)

    infiltration coeffiecient

Returns:

  • (Double)

    adjusted infiltration rate in the same units as infiltration_rate



14
15
16
17
18
19
20
21
# 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

.adjust_infiltration_to_prototype_building_conditions(infiltration_rate, initial_pressure: 75.0) ⇒ Double

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.

Parameters:

  • infiltration_rate (Double)

    initial infiltration rate

  • initial_pressure (Double) (defaults to: 75.0)

    pressure difference at which initial infiltration rate was determined in Pa, default 75 Pa

Returns:

  • (Double)

    adjusted infiltration rate in the same units as infiltration_rate



29
30
31
32
33
34
35
36
37
38
39
40
41
# 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

.sub_surface_component_infiltration_rate(sub_surface, type: 'baseline') ⇒ Double

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.

Parameters:

  • sub_surface (OpenStudio::Model::SubSurface)

    OpenStudio SubSurface object

  • type (String) (defaults to: 'baseline')

    choices are ‘baseline’ and ‘advanced’

Returns:

  • (Double)

    component infiltration rate in m^3/s



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
# 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

.surface_component_infiltration_rate(surface, type: 'baseline') ⇒ Double

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.

Parameters:

  • surface (OpenStudio::Model::Surface)

    OpenStudio Surface object

  • type (String) (defaults to: 'baseline')

    choices are ‘baseline’ and ‘advanced’

Returns:

  • (Double)

    component infiltration rate in m^3/s



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# 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