lib/openstudio-standards/standards/Standards.SubSurface.rb in openstudio-standards-0.1.15 vs lib/openstudio-standards/standards/Standards.SubSurface.rb in openstudio-standards-0.2.0.rc1
- old
+ new
@@ -1,14 +1,14 @@
+class Standard
+ # @!group SubSurface
-# open the class to add methods to apply HVAC efficiency standards
-class OpenStudio::Model::SubSurface
# Determine the component infiltration rate for this surface
#
# @param type [String] choices are 'baseline' and 'advanced'
# @return [Double] infiltration rate
# @units cubic meters per second (m^3/s)
- def component_infiltration_rate(type)
+ def sub_surface_component_infiltration_rate(sub_surface, type)
comp_infil_rate_m3_per_s = 0.0
# Define the envelope component infiltration rates
component_infil_rates_cfm_per_ft2 = {
'baseline' => {
@@ -29,40 +29,40 @@
'window' => 0.20,
'skylight' => 0.20
}
}
- boundary_condition = outsideBoundaryCondition
+ boundary_condition = sub_surface.outsideBoundaryCondition
# Skip non-outdoor surfaces
- return comp_infil_rate_m3_per_s unless outsideBoundaryCondition == 'Outdoors' || outsideBoundaryCondition == 'Ground'
+ return comp_infil_rate_m3_per_s unless outsideBoundaryCondition == 'Outdoors' || sub_surface.outsideBoundaryCondition == 'Ground'
# Per area infiltration rate for this surface
- surface_type = subSurfaceType
+ surface_type = sub_surface.subSurfaceType
infil_rate_cfm_per_ft2 = nil
case boundary_condition
when 'Outdoors'
case surface_type
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.Model', "For #{name}, assuming swinging_or_revolving_glass_door for infiltration calculation.")
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.Standards.Model', "For #{sub_surface.name}, assuming swinging_or_revolving_glass_door for infiltration calculation.")
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']
end
end
if infil_rate_cfm_per_ft2.nil?
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.Standards.Model', "For #{name}, could not determine surface type for infiltration, will not be included in calculation.")
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.Standards.Model', "For #{sub_surface.name}, could not determine surface type for infiltration, will not be included in calculation.")
return comp_infil_rate_m3_per_s
end
# Area of the surface
- area_m2 = netArea
+ area_m2 = sub_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
@@ -77,22 +77,22 @@
# toward the centroid.
# @author Julien Marrec
#
# @param percent_reduction [Double] the fractional amount
# to reduce the area.
- def reduce_area_by_percent_by_shrinking_toward_centroid(percent_reduction)
+ def sub_surface_reduce_area_by_percent_by_shrinking_toward_centroid(sub_surface, percent_reduction)
mult = 1 - percent_reduction
scale_factor = mult**0.5
# Get the centroid (Point3d)
- g = centroid
+ g = sub_surface.centroid
# Create an array to collect the new vertices
new_vertices = []
# Loop on vertices (Point3ds)
- vertices.each do |vertex|
+ sub_surface.vertices.each do |vertex|
# Point3d - Point3d = Vector3d
# Vector from centroid to vertex (GA, GB, GC, etc)
centroid_vector = vertex - g
# Resize the vector (done in place) according to scale_factor
@@ -103,29 +103,28 @@
new_vertices << vertex
end
# Assign the new vertices to the self
- setVertices(new_vertices)
+ sub_surface.setVertices(new_vertices)
end
# Reduce the area of the subsurface by raising the
# sill height.
#
# @param percent_reduction [Double] the fractional amount
# to reduce the area.
- def reduce_area_by_percent_by_raising_sill(percent_reduction)
-
+ def sub_surface_reduce_area_by_percent_by_raising_sill(sub_surface, percent_reduction)
mult = 1 - percent_reduction
# Calculate the original area
- area_original = netArea
+ area_original = sub_surface.netArea
# Find the min and max z values
- min_z_val = 99999
- max_z_val = -99999
- vertices.each do |vertex|
+ min_z_val = 99_999
+ max_z_val = -99_999
+ sub_surface.vertices.each do |vertex|
# Min z value
if vertex.z < min_z_val
min_z_val = vertex.z
end
# Max z value
@@ -136,35 +135,35 @@
# Calculate the window height
height = max_z_val - min_z_val
# Calculate the new sill height
- new_sill_z = max_z_val - (height * mult)
+ new_sill_z = max_z_val - (height * mult)
# Reset the z value of the lowest points
new_vertices = []
- vertices.each do |vertex|
+ sub_surface.vertices.each do |vertex|
new_x = vertex.x
new_y = vertex.y
new_z = vertex.z
if new_z == min_z_val
new_z = new_sill_z
end
new_vertices << OpenStudio::Point3d.new(new_x, new_y, new_z)
end
# Reset the vertices
- setVertices(new_vertices)
+ sub_surface.setVertices(new_vertices)
return true
end
# Determine if the sub surface is a vertical rectangle,
# meaning a rectangle where the bottom is parallel to the ground.
- def vertical_rectangle?
+ def sub_surface_vertical_rectangle?(sub_surface)
# Get the vertices once
- verts = vertices
+ verts = sub_surface.vertices
# Check for 4 vertices
return false unless verts.size == 4
# Check if the 2 lowest z-values
@@ -172,10 +171,10 @@
z_vals = []
verts.each do |vertex|
z_vals << vertex.z
end
z_vals = z_vals.sort
- return false unless z_vals[0] = z_vals[1]
+ return false unless z_vals[0] == z_vals[1]
# Check if the diagonals are equal length
diag_a = verts[0] - verts[2]
diag_b = verts[1] - verts[3]
return false unless diag_a.length == diag_b.length