openstudio-standards 0.6.3 → 0.7.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
- data/data/standards/manage_OpenStudio_Standards.rb +2 -49
- data/data/standards/openstudio_standards_duplicates_log.csv +1 -7962
- data/data/standards/test_performance_expected_dd_results.csv +2005 -97
- data/lib/openstudio-standards/create_typical/space_type_ratios.rb +47 -57
- data/lib/openstudio-standards/geometry/create.rb +1 -1
- data/lib/openstudio-standards/geometry/create_bar.rb +6 -3
- data/lib/openstudio-standards/geometry/create_shape.rb +1 -1
- data/lib/openstudio-standards/geometry/group.rb +1 -1
- data/lib/openstudio-standards/geometry/information.rb +1 -1
- data/lib/openstudio-standards/geometry/modify.rb +53 -1
- data/lib/openstudio-standards/infiltration/nist_infiltration.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +11 -11
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +11 -11
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.hvac_systems.rb +2 -2
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperTallBuilding.rb +44 -47
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.TallBuilding.rb +43 -48
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +44 -24
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +24 -24
- data/lib/openstudio-standards/schedules/parametric.rb +1 -1
- data/lib/openstudio-standards/service_water_heating/create_piping_losses.rb +152 -0
- data/lib/openstudio-standards/service_water_heating/create_water_heater.rb +544 -0
- data/lib/openstudio-standards/service_water_heating/create_water_heating_loop.rb +303 -0
- data/lib/openstudio-standards/service_water_heating/create_water_use.rb +95 -0
- data/lib/openstudio-standards/space/space.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +65 -70
- data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +12 -14
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +16 -5
- data/lib/openstudio-standards/standards/Standards.Model.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +10 -2
- data/lib/openstudio-standards/{prototypes/common/objects/Prototype.Model.swh.rb → standards/Standards.ServiceWaterHeating.rb} +209 -139
- data/lib/openstudio-standards/standards/Standards.Surface.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +4 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Model.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +22251 -12963
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_sets.json +91 -91
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +8981 -5228
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +8935 -5182
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +7281 -5391
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_sets.json +91 -91
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_properties.json +9005 -15215
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_sets.json +136 -136
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_properties.json +8717 -17168
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_sets.json +136 -136
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +1941 -651
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.construction_properties.json +135 -135
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.construction_properties.json +135 -135
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.construction_properties.json +36 -36
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.construction_properties.json +36 -36
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +377 -99
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.construction_properties.json +6889 -4044
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_constructions.json +108 -108
- data/lib/openstudio-standards/standards/cbes/cbes_pre_1978/data/cbes_pre_1978.construction_properties.json +16 -16
- data/lib/openstudio-standards/standards/cbes/cbes_t24_1978/data/cbes_t24_1978.construction_properties.json +16 -16
- data/lib/openstudio-standards/standards/cbes/cbes_t24_1992/data/cbes_t24_1992.construction_properties.json +16 -16
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2001/data/cbes_t24_2001.construction_properties.json +16 -16
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2005/data/cbes_t24_2005.construction_properties.json +16 -16
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2008/data/cbes_t24_2008.construction_properties.json +16 -16
- data/lib/openstudio-standards/standards/cbes/data/cbes.constructions.json +142 -142
- data/lib/openstudio-standards/standards/deer/data/deer.constructions.json +5 -1551
- data/lib/openstudio-standards/standards/deer/data/deer.materials.json +40 -0
- data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.motors.json +88 -8
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +17 -0
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_systems.rb +2 -1
- data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +4 -4
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +61 -88
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +3 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/data/boiler_fuel_type_sets.json +54 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPMidriseApartment.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPMultiTower.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPPointTower.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPTownHouse.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/NorthernEducation.osm +4 -4
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/NorthernHealthCare.osm +4 -4
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +32 -24
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +89 -15
- data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +5 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +22 -65
- data/lib/openstudio-standards/standards/necb/NECB2011/system_fuels.rb +19 -0
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +56 -2
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +3 -1
- data/lib/openstudio-standards/standards/necb/common/construction_defaults.osm +2 -2
- data/lib/openstudio-standards/standards/necb/docs/air_system_names_method.md +127 -0
- data/lib/openstudio-standards/thermal_zone/thermal_zone.rb +1 -1
- data/lib/openstudio-standards/utilities/template_measure/resources/BTAPMeasureHelper.rb +1 -1
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards/weather/information.rb +61 -5
- data/lib/openstudio-standards/weather/modify.rb +1 -1
- data/lib/openstudio-standards.rb +5 -3
- metadata +12 -63
- data/data/standards/OpenStudio_Standards-deer.xlsx +0 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +0 -1100
- data/lib/openstudio-standards/service_water_heating/component.rb +0 -189
@@ -81,37 +81,31 @@ module OpenstudioStandards
|
|
81
81
|
if whole_building
|
82
82
|
hash['WholeBuilding - Sm Office'] = { ratio: 1.0, space_type_gen: true, default: true }
|
83
83
|
else
|
84
|
-
hash['SmallOffice -
|
85
|
-
hash['SmallOffice -
|
86
|
-
hash['SmallOffice -
|
87
|
-
hash['SmallOffice -
|
88
|
-
hash['SmallOffice -
|
89
|
-
hash['SmallOffice -
|
90
|
-
hash['SmallOffice -
|
91
|
-
hash['SmallOffice -
|
92
|
-
hash['SmallOffice -
|
93
|
-
hash['SmallOffice - Storage'] = { ratio: 0.99, space_type_gen: true, default: false }
|
94
|
-
hash['SmallOffice - Classroom'] = { ratio: 0.99, space_type_gen: true, default: false }
|
95
|
-
hash['SmallOffice - Dining'] = { ratio: 0.99, space_type_gen: true, default: false }
|
96
|
-
hash['WholeBuilding - Sm Office'] = { ratio: 0.0, space_type_gen: true, default: false }
|
84
|
+
hash['SmallOffice - ClosedOffice'] = { ratio: 0.3325, space_type_gen: true, default: false }
|
85
|
+
hash['SmallOffice - Conference'] = { ratio: 0.0818, space_type_gen: true, default: false }
|
86
|
+
hash['SmallOffice - Corridor'] = { ratio: 0.1213, space_type_gen: true, default: false, circ: true }
|
87
|
+
hash['SmallOffice - Elec/MechRoom'] = { ratio: 0.0201, space_type_gen: true, default: false }
|
88
|
+
hash['SmallOffice - Lobby'] = { ratio: 0.0818, space_type_gen: true, default: false }
|
89
|
+
hash['SmallOffice - OpenOffice'] = { ratio: 0.1659, space_type_gen: true, default: true }
|
90
|
+
hash['SmallOffice - Restroom'] = { ratio: 0.0402, space_type_gen: true, default: false }
|
91
|
+
hash['SmallOffice - Stair'] = { ratio: 0.0201, space_type_gen: true, default: false }
|
92
|
+
hash['SmallOffice - Storage'] = { ratio: 0.1363, space_type_gen: true, default: false }
|
97
93
|
end
|
98
94
|
when 'MediumOffice'
|
99
95
|
if whole_building
|
100
96
|
hash['WholeBuilding - Md Office'] = { ratio: 1.0, space_type_gen: true, default: true }
|
101
97
|
else
|
102
|
-
hash['MediumOffice -
|
103
|
-
hash['MediumOffice - ClosedOffice'] = { ratio: 0.
|
104
|
-
hash['MediumOffice - Conference'] = { ratio: 0.
|
105
|
-
hash['MediumOffice - Corridor'] = { ratio: 0.
|
106
|
-
hash['MediumOffice -
|
107
|
-
hash['MediumOffice -
|
108
|
-
hash['MediumOffice -
|
109
|
-
hash['MediumOffice -
|
110
|
-
hash['MediumOffice -
|
111
|
-
hash['MediumOffice -
|
112
|
-
hash['MediumOffice -
|
113
|
-
hash['MediumOffice - Dining'] = { ratio: 0.99, space_type_gen: true, default: false }
|
114
|
-
hash['WholeBuilding - Md Office'] = { ratio: 0.0, space_type_gen: true, default: false }
|
98
|
+
hash['MediumOffice - Classroom'] = { ratio: 0.0060, space_type_gen: true, default: false }
|
99
|
+
hash['MediumOffice - ClosedOffice'] = { ratio: 0.1866, space_type_gen: true, default: false }
|
100
|
+
hash['MediumOffice - Conference'] = { ratio: 0.0519, space_type_gen: true, default: false }
|
101
|
+
hash['MediumOffice - Corridor'] = { ratio: 0.0896, space_type_gen: true, default: false, circ: true }
|
102
|
+
hash['MediumOffice - Dining'] = { ratio: 0.0138, space_type_gen: true, default: false }
|
103
|
+
hash['MediumOffice - Elec/MechRoom'] = { ratio: 0.0300, space_type_gen: true, default: false }
|
104
|
+
hash['MediumOffice - Lobby'] = { ratio: 0.0550, space_type_gen: true, default: false }
|
105
|
+
hash['MediumOffice - OpenOffice'] = { ratio: 0.4255, space_type_gen: true, default: true }
|
106
|
+
hash['MediumOffice - Restroom'] = { ratio: 0.0360, space_type_gen: true, default: false }
|
107
|
+
hash['MediumOffice - Stair'] = { ratio: 0.0370, space_type_gen: true, default: false }
|
108
|
+
hash['MediumOffice - Storage'] = { ratio: 0.0686, space_type_gen: true, default: false }
|
115
109
|
end
|
116
110
|
when 'LargeOffice'
|
117
111
|
case building_subtype
|
@@ -123,25 +117,23 @@ module OpenstudioStandards
|
|
123
117
|
hash['OfficeLarge Data Center'] = { ratio: 1.0, space_type_gen: true, default: false }
|
124
118
|
when 'largeoffice_nodatacenter'
|
125
119
|
hash['WholeBuilding - Lg Office'] = { ratio: 1.0, space_type_gen: true, default: true }
|
126
|
-
|
120
|
+
else # 'largeoffice_default'
|
127
121
|
if ['DOE Ref Pre-1980', 'DOE Ref 1980-2004', 'ComStock DOE Ref Pre-1980', 'ComStock DOE Ref 1980-2004'].include?(template)
|
128
122
|
if whole_building
|
129
123
|
hash['WholeBuilding - Lg Office'] = { ratio: 1.0, space_type_gen: true, default: true }
|
130
124
|
else
|
131
|
-
hash['BreakRoom'] = { ratio: 0.
|
132
|
-
hash['
|
133
|
-
hash['
|
134
|
-
hash['
|
135
|
-
hash['
|
136
|
-
hash['
|
137
|
-
hash['
|
138
|
-
hash['
|
139
|
-
hash['
|
140
|
-
hash['Restroom'] = { ratio: 0.
|
141
|
-
hash['Stair'] = { ratio: 0.
|
142
|
-
hash['Storage'] = { ratio: 0.
|
143
|
-
hash['Vending'] = { ratio: 0.99, space_type_gen: true, default: false }
|
144
|
-
hash['WholeBuilding - Lg Office'] = { ratio: 0.0, space_type_gen: true, default: false }
|
125
|
+
hash['BreakRoom'] = { ratio: 0.0178, space_type_gen: true, default: false }
|
126
|
+
hash['Classroom'] = { ratio: 0.0040, space_type_gen: true, default: false }
|
127
|
+
hash['ClosedOffice'] = { ratio: 0.16, space_type_gen: true, default: false }
|
128
|
+
hash['Conference'] = { ratio: 0.0153, space_type_gen: true, default: false }
|
129
|
+
hash['Corridor'] = { ratio: 0.0460, space_type_gen: true, default: false, circ: true }
|
130
|
+
hash['Dining'] = { ratio: 0.0161, space_type_gen: true, default: false }
|
131
|
+
hash['Elec/MechRoom'] = { ratio: 0.0944, space_type_gen: true, default: false }
|
132
|
+
hash['Lobby'] = { ratio: 0.0554, space_type_gen: true, default: false }
|
133
|
+
hash['OpenOffice'] = { ratio: 0.5230, space_type_gen: true, default: true }
|
134
|
+
hash['Restroom'] = { ratio: 0.0310, space_type_gen: true, default: false }
|
135
|
+
hash['Stair'] = { ratio: 0.0180, space_type_gen: true, default: false }
|
136
|
+
hash['Storage'] = { ratio: 0.0190, space_type_gen: true, default: false }
|
145
137
|
end
|
146
138
|
else
|
147
139
|
if whole_building
|
@@ -149,22 +141,20 @@ module OpenstudioStandards
|
|
149
141
|
hash['OfficeLarge Data Center'] = { ratio: 0.0094, space_type_gen: true, default: false }
|
150
142
|
hash['OfficeLarge Main Data Center'] = { ratio: 0.0169, space_type_gen: true, default: false }
|
151
143
|
else
|
152
|
-
hash['BreakRoom'] = { ratio: 0.
|
153
|
-
hash['
|
154
|
-
hash['
|
155
|
-
hash['
|
156
|
-
hash['
|
157
|
-
hash['
|
158
|
-
hash['
|
159
|
-
hash['
|
160
|
-
hash['
|
161
|
-
hash['
|
162
|
-
hash['
|
163
|
-
hash['
|
164
|
-
hash['
|
165
|
-
hash['
|
166
|
-
hash['OfficeLarge Data Center'] = { ratio: 0.0, space_type_gen: true, default: false }
|
167
|
-
hash['OfficeLarge Main Data Center'] = { ratio: 0.0, space_type_gen: true, default: false }
|
144
|
+
hash['BreakRoom'] = { ratio: 0.0167, space_type_gen: true, default: false }
|
145
|
+
hash['Classroom'] = { ratio: 0.0038, space_type_gen: true, default: false }
|
146
|
+
hash['ClosedOffice'] = { ratio: 0.1500, space_type_gen: true, default: false }
|
147
|
+
hash['Conference'] = { ratio: 0.0144, space_type_gen: true, default: false }
|
148
|
+
hash['Corridor'] = { ratio: 0.0431, space_type_gen: true, default: false, circ: true }
|
149
|
+
hash['Dining'] = { ratio: 0.0151, space_type_gen: true, default: false }
|
150
|
+
hash['Elec/MechRoom'] = { ratio: 0.0885, space_type_gen: true, default: false }
|
151
|
+
hash['Lobby'] = { ratio: 0.0520, space_type_gen: true, default: false }
|
152
|
+
hash['OfficeLarge Data Center'] = { ratio: 0.0077, space_type_gen: true, default: false }
|
153
|
+
hash['OfficeLarge Main Data Center'] = { ratio: 0.0550, space_type_gen: true, default: false }
|
154
|
+
hash['OpenOffice'] = { ratio: 0.4900, space_type_gen: true, default: true }
|
155
|
+
hash['Restroom'] = { ratio: 0.0290, space_type_gen: true, default: false }
|
156
|
+
hash['Stair'] = { ratio: 0.0169, space_type_gen: true, default: false }
|
157
|
+
hash['Storage'] = { ratio: 0.0178, space_type_gen: true, default: false }
|
168
158
|
end
|
169
159
|
end
|
170
160
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module OpenstudioStandards
|
2
|
-
#
|
2
|
+
# The Geometry module provides methods to create, modify, and get information about model geometry
|
3
3
|
module Geometry
|
4
4
|
# @!group Create
|
5
5
|
# Methods to create geometry
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module OpenstudioStandards
|
2
|
-
#
|
2
|
+
# The Geometry module provides methods to create, modify, and get information about model geometry
|
3
3
|
module Geometry
|
4
4
|
# @!group CreateBar
|
5
5
|
# Methods to create bar geometry
|
@@ -1044,7 +1044,7 @@ module OpenstudioStandards
|
|
1044
1044
|
facade_area = typical_width_facade_area
|
1045
1045
|
until (width_area + facade_area >= target_party_wall_area) || (width_counter == (args[:num_stories_above_grade].ceil * 2))
|
1046
1046
|
# update facade area for top story
|
1047
|
-
if width_counter == args[:num_stories_above_grade].ceil - 1 || (
|
1047
|
+
if (width_counter == (args[:num_stories_above_grade].ceil - 1)) || (width_counter == ((args[:num_stories_above_grade].ceil * 2) - 1))
|
1048
1048
|
facade_area = top_story_width_facade_area
|
1049
1049
|
else
|
1050
1050
|
facade_area = typical_width_facade_area
|
@@ -1061,7 +1061,7 @@ module OpenstudioStandards
|
|
1061
1061
|
facade_area = typical_length_facade_area
|
1062
1062
|
until (length_area + facade_area >= target_party_wall_area) || (length_counter == args[:num_stories_above_grade].ceil * 2)
|
1063
1063
|
# update facade area for top story
|
1064
|
-
if length_counter == args[:num_stories_above_grade].ceil - 1 || (
|
1064
|
+
if (length_counter == (args[:num_stories_above_grade].ceil - 1)) || (length_counter == ((args[:num_stories_above_grade].ceil * 2) - 1))
|
1065
1065
|
facade_area = top_story_length_facade_area
|
1066
1066
|
else
|
1067
1067
|
facade_area = typical_length_facade_area
|
@@ -2129,6 +2129,9 @@ module OpenstudioStandards
|
|
2129
2129
|
args[:primary_building_type] = bldg_type_a
|
2130
2130
|
OpenstudioStandards::Geometry.create_bar_from_args_and_building_type_hash(model, args, building_type_hash)
|
2131
2131
|
|
2132
|
+
# rename all surfaces and subsurfaces
|
2133
|
+
OpenstudioStandards::Geometry.model_rename_surfaces_and_subsurfaces(model)
|
2134
|
+
|
2132
2135
|
return true
|
2133
2136
|
end
|
2134
2137
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module OpenstudioStandards
|
2
|
-
#
|
2
|
+
# The Geometry module provides methods to create, modify, and get information about model geometry
|
3
3
|
module Geometry
|
4
4
|
# Methods to create basic shapes
|
5
5
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module OpenstudioStandards
|
2
|
-
#
|
2
|
+
# The Geometry module provides methods to create, modify, and get information about model geometry
|
3
3
|
module Geometry
|
4
4
|
# Methods to group thermal zones
|
5
5
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module OpenstudioStandards
|
2
|
-
#
|
2
|
+
# The Geometry module provides methods to create, modify, and get information about model geometry
|
3
3
|
module Geometry
|
4
4
|
# Methods to get information about model geometry
|
5
5
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module OpenstudioStandards
|
2
|
-
#
|
2
|
+
# The Geometry module provides methods to create, modify, and get information about model geometry
|
3
3
|
module Geometry
|
4
4
|
# Methods to modify geometry
|
5
5
|
|
@@ -87,6 +87,47 @@ module OpenstudioStandards
|
|
87
87
|
|
88
88
|
# @!endgroup Modify:SubSurface
|
89
89
|
|
90
|
+
# @!group Modify:Space
|
91
|
+
|
92
|
+
# Rename space surfaces using the convention 'SpaceName SurfaceType #'.
|
93
|
+
# Rename sub surfaces using the convention 'SurfaceName SubSurfaceType #'.
|
94
|
+
#
|
95
|
+
# @param space [OpenStudio::Model::Space] OpenStudio space object
|
96
|
+
# @return [Boolean] returns true if successful, false if not
|
97
|
+
def self.space_rename_surfaces_and_subsurfaces(space)
|
98
|
+
# reset names
|
99
|
+
surf_i = 1
|
100
|
+
space.surfaces.each do |surface|
|
101
|
+
surface.setName("temp surf #{surf_i}")
|
102
|
+
sub_i = 1
|
103
|
+
surface.subSurfaces.each do |sub_surface|
|
104
|
+
sub_surface.setName("#{surface.name} sub #{sub_i}")
|
105
|
+
sub_i += 1
|
106
|
+
end
|
107
|
+
surf_i += 1
|
108
|
+
end
|
109
|
+
|
110
|
+
# rename surfaces based on space name and surface type
|
111
|
+
surface_type_counter = Hash.new(0)
|
112
|
+
space.surfaces.sort.each do |surface|
|
113
|
+
surface_type = surface.surfaceType
|
114
|
+
surface_type_counter[surface_type] += 1
|
115
|
+
surface.setName("#{space.name} #{surface_type} #{surface_type_counter[surface_type]}")
|
116
|
+
|
117
|
+
# rename sub surfaces based on surface name and subsurface type
|
118
|
+
sub_surface_type_counter = Hash.new(0)
|
119
|
+
surface.subSurfaces.sort.each do |sub_surface|
|
120
|
+
sub_surface_type = sub_surface.subSurfaceType
|
121
|
+
sub_surface_type_counter[sub_surface_type] += 1
|
122
|
+
sub_surface.setName("#{surface.name} #{sub_surface_type} #{sub_surface_type_counter[sub_surface_type]}")
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
return true
|
127
|
+
end
|
128
|
+
|
129
|
+
# @!endgroup Modify:Space
|
130
|
+
|
90
131
|
# @!group Modify:Model
|
91
132
|
|
92
133
|
# Assign each space in the model to a building story based on common z (height) values.
|
@@ -137,6 +178,17 @@ module OpenstudioStandards
|
|
137
178
|
return true
|
138
179
|
end
|
139
180
|
|
181
|
+
# Rename all model surfaces using the convention 'SpaceName SurfaceType #'.
|
182
|
+
# Rename all model sub surfaces using the convention 'SurfaceName SubSurfaceType #'.
|
183
|
+
#
|
184
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
185
|
+
# @return [Boolean] returns true if successful, false if not
|
186
|
+
def self.model_rename_surfaces_and_subsurfaces(model)
|
187
|
+
model.getSpaces.each { |space| OpenstudioStandards::Geometry.space_rename_surfaces_and_subsurfaces(space) }
|
188
|
+
|
189
|
+
return true
|
190
|
+
end
|
191
|
+
|
140
192
|
# Set the model's north axis (degrees from true North)
|
141
193
|
#
|
142
194
|
# @param model [OpenStudio::Model::Model] OpenStudio Model object
|
@@ -231,7 +231,7 @@ module OpenstudioStandards
|
|
231
231
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Infiltration', "Unable to find file: #{nist_infiltration_correlations_csv}")
|
232
232
|
return false
|
233
233
|
end
|
234
|
-
coefficients_tbl = CSV.table(nist_infiltration_correlations_csv)
|
234
|
+
coefficients_tbl = CSV.table(nist_infiltration_correlations_csv, encoding: "ISO8859-1:utf-8" )
|
235
235
|
coefficients_hsh = coefficients_tbl.map(&:to_hash)
|
236
236
|
|
237
237
|
# select down to building type and climate zone
|
data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb
CHANGED
@@ -300,8 +300,8 @@ class ASHRAE9012016 < ASHRAE901
|
|
300
300
|
key_name = space.name.to_s
|
301
301
|
end
|
302
302
|
light_sensor.setKeyName(key_name)
|
303
|
-
|
304
|
-
|
303
|
+
light_sensor_name_ems = "#{ems_friendly_name(key_name)}_LSr"
|
304
|
+
light_sensor.setName(light_sensor_name_ems)
|
305
305
|
|
306
306
|
# get the space floor area for calculations
|
307
307
|
space_floor_area = space.floorArea
|
@@ -328,28 +328,28 @@ class ASHRAE9012016 < ASHRAE901
|
|
328
328
|
else
|
329
329
|
light_x_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(light_x, 'Lights', 'Electricity Rate')
|
330
330
|
end
|
331
|
-
|
332
|
-
|
333
|
-
add_lights_prog_null += "\n SET #{
|
331
|
+
light_x_actuator_name_ems = "#{ems_friendly_name(key_name)}_Light#{light_id}_Actuator"
|
332
|
+
light_x_actuator.setName(light_x_actuator_name_ems)
|
333
|
+
add_lights_prog_null += "\n SET #{light_x_actuator_name_ems} = NULL,"
|
334
334
|
if light_x == big_light
|
335
|
-
add_lights_prog_0 += "\n SET #{
|
335
|
+
add_lights_prog_0 += "\n SET #{light_x_actuator_name_ems} = 0.02*#{space_floor_area}/0.09290304,"
|
336
336
|
next
|
337
337
|
end
|
338
|
-
add_lights_prog_0 += "\n SET #{
|
338
|
+
add_lights_prog_0 += "\n SET #{light_x_actuator_name_ems} = 0,"
|
339
339
|
end
|
340
340
|
|
341
341
|
light_ems_prog = OpenStudio::Model::EnergyManagementSystemProgram.new(model)
|
342
|
-
light_ems_prog.setName("SET_#{key_name}_Light_EMS_Program"
|
342
|
+
light_ems_prog.setName("SET_#{ems_friendly_name(key_name)}_Light_EMS_Program")
|
343
343
|
light_ems_prog_body = <<-EMS
|
344
|
-
SET #{
|
345
|
-
IF (#{business_sensor_name} <= 0) && (#{
|
344
|
+
SET #{light_sensor_name_ems}_IP=0.093*#{light_sensor_name_ems}/#{space_floor_area},
|
345
|
+
IF (#{business_sensor_name} <= 0) && (#{light_sensor_name_ems}_IP >= 0.02),#{add_lights_prog_0}
|
346
346
|
ELSE,#{add_lights_prog_null}
|
347
347
|
ENDIF
|
348
348
|
EMS
|
349
349
|
light_ems_prog.setBody(light_ems_prog_body)
|
350
350
|
|
351
351
|
light_ems_prog_manager = OpenStudio::Model::EnergyManagementSystemProgramCallingManager.new(model)
|
352
|
-
light_ems_prog_manager.setName("SET_#{key_name}_Light_EMS_Program_Manager")
|
352
|
+
light_ems_prog_manager.setName("SET_#{ems_friendly_name(key_name)}_Light_EMS_Program_Manager")
|
353
353
|
light_ems_prog_manager.setCallingPoint('AfterPredictorAfterHVACManagers')
|
354
354
|
light_ems_prog_manager.addProgram(light_ems_prog)
|
355
355
|
end
|
data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb
CHANGED
@@ -300,8 +300,8 @@ class ASHRAE9012019 < ASHRAE901
|
|
300
300
|
key_name = space.name.to_s
|
301
301
|
end
|
302
302
|
light_sensor.setKeyName(key_name)
|
303
|
-
|
304
|
-
|
303
|
+
light_sensor_name_ems = "#{ems_friendly_name(key_name)}_LSr"
|
304
|
+
light_sensor.setName(light_sensor_name_ems)
|
305
305
|
|
306
306
|
# get the space floor area for calculations
|
307
307
|
space_floor_area = space.floorArea
|
@@ -328,28 +328,28 @@ class ASHRAE9012019 < ASHRAE901
|
|
328
328
|
else
|
329
329
|
light_x_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(light_x, 'Lights', 'Electricity Rate')
|
330
330
|
end
|
331
|
-
|
332
|
-
|
333
|
-
add_lights_prog_null += "\n SET #{
|
331
|
+
light_x_actuator_name_ems = "#{ems_friendly_name(key_name)}_Light#{light_id}_Actuator"
|
332
|
+
light_x_actuator.setName(light_x_actuator_name_ems)
|
333
|
+
add_lights_prog_null += "\n SET #{light_x_actuator_name_ems} = NULL,"
|
334
334
|
if light_x == big_light
|
335
|
-
add_lights_prog_0 += "\n SET #{
|
335
|
+
add_lights_prog_0 += "\n SET #{light_x_actuator_name_ems} = 0.02*#{space_floor_area}/0.09290304,"
|
336
336
|
next
|
337
337
|
end
|
338
|
-
add_lights_prog_0 += "\n SET #{
|
338
|
+
add_lights_prog_0 += "\n SET #{light_x_actuator_name_ems} = 0,"
|
339
339
|
end
|
340
340
|
|
341
341
|
light_ems_prog = OpenStudio::Model::EnergyManagementSystemProgram.new(model)
|
342
|
-
light_ems_prog.setName("SET_#{key_name}_Light_EMS_Program"
|
342
|
+
light_ems_prog.setName("SET_#{ems_friendly_name(key_name)}_Light_EMS_Program")
|
343
343
|
light_ems_prog_body = <<-EMS
|
344
|
-
SET #{
|
345
|
-
IF (#{business_sensor_name} <= 0) && (#{
|
344
|
+
SET #{light_sensor_name_ems}_IP=0.093*#{light_sensor_name_ems}/#{space_floor_area},
|
345
|
+
IF (#{business_sensor_name} <= 0) && (#{light_sensor_name_ems}_IP >= 0.02),#{add_lights_prog_0}
|
346
346
|
ELSE,#{add_lights_prog_null}
|
347
347
|
ENDIF
|
348
348
|
EMS
|
349
349
|
light_ems_prog.setBody(light_ems_prog_body)
|
350
350
|
|
351
351
|
light_ems_prog_manager = OpenStudio::Model::EnergyManagementSystemProgramCallingManager.new(model)
|
352
|
-
light_ems_prog_manager.setName("SET_#{key_name}_Light_EMS_Program_Manager")
|
352
|
+
light_ems_prog_manager.setName("SET_#{ems_friendly_name(key_name)}_Light_EMS_Program_Manager")
|
353
353
|
light_ems_prog_manager.setCallingPoint('AfterPredictorAfterHVACManagers')
|
354
354
|
light_ems_prog_manager.addProgram(light_ems_prog)
|
355
355
|
end
|
@@ -20,10 +20,10 @@ class ASHRAE9012019 < ASHRAE901
|
|
20
20
|
#
|
21
21
|
# @return [OpenStudio::Model::ScheduleRuleset] Generated maximum outdoor air fraction schedule for later use
|
22
22
|
def set_maximum_fraction_outdoor_air_schedule(air_loop_hvac, oa_control, snc)
|
23
|
-
max_oa_sch_name = "#{snc}
|
23
|
+
max_oa_sch_name = "#{snc}_maxOASch"
|
24
24
|
max_oa_sch = OpenStudio::Model::ScheduleRuleset.new(air_loop_hvac.model)
|
25
25
|
max_oa_sch.setName(max_oa_sch_name)
|
26
|
-
max_oa_sch.defaultDaySchedule.setName("#{max_oa_sch_name}
|
26
|
+
max_oa_sch.defaultDaySchedule.setName("#{max_oa_sch_name}_Default")
|
27
27
|
max_oa_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0.75)
|
28
28
|
oa_control.setMaximumFractionofOutdoorAirSchedule(max_oa_sch)
|
29
29
|
max_oa_sch
|
@@ -185,16 +185,16 @@ module SuperTallBuilding
|
|
185
185
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', 'No story info in the SWH loop.')
|
186
186
|
return false
|
187
187
|
end
|
188
|
-
main_swh_loop =
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
188
|
+
main_swh_loop = OpenstudioStandards::ServiceWaterHeating.create_service_water_heating_loop(model,
|
189
|
+
system_name: swh_loop_name,
|
190
|
+
service_water_temperature: OpenStudio.convert(prototype_input['main_service_water_temperature'], 'F', 'C').get,
|
191
|
+
service_water_pump_head: prototype_input['main_service_water_pump_head'].to_f,
|
192
|
+
service_water_pump_motor_efficiency: prototype_input['main_service_water_pump_motor_efficiency'],
|
193
|
+
water_heater_capacity: OpenStudio.convert(prototype_input['main_water_heater_capacity'], 'Btu/hr', 'W').get,
|
194
|
+
water_heater_volume: OpenStudio.convert(prototype_input['main_water_heater_volume'], 'gal', 'm^3').get,
|
195
|
+
water_heater_fuel: swh_fueltype,
|
196
|
+
on_cycle_parasitic_fuel_consumption_rate: OpenStudio.convert(prototype_input['main_service_water_parasitic_fuel_consumption_rate'], 'Btu/hr', 'W').get,
|
197
|
+
off_cycle_parasitic_fuel_consumption_rate: OpenStudio.convert(prototype_input['main_service_water_parasitic_fuel_consumption_rate'], 'Btu/hr', 'W').get)
|
198
198
|
|
199
199
|
# Attach the end uses based on floor function type
|
200
200
|
# Office and retail: add to mechanical room only
|
@@ -225,11 +225,9 @@ module SuperTallBuilding
|
|
225
225
|
next if data['service_water_heating_peak_flow_rate'].to_f < 0.00001 && data['service_water_heating_peak_flow_per_area'].to_f < 0.00001
|
226
226
|
|
227
227
|
# Add a service water use for each space
|
228
|
-
space_multiplier = space.multiplier
|
229
228
|
water_fixture = model_add_swh_end_uses_by_space(model,
|
230
229
|
main_swh_loop,
|
231
|
-
space
|
232
|
-
space_multiplier)
|
230
|
+
space)
|
233
231
|
unless water_fixture.nil?
|
234
232
|
water_fixtures << water_fixture
|
235
233
|
end
|
@@ -246,47 +244,46 @@ module SuperTallBuilding
|
|
246
244
|
|
247
245
|
# Add the booster water loop if there is any hotel floor
|
248
246
|
if additional_params[:num_of_floor_hotel].to_i > 0
|
249
|
-
swh_booster_loop =
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
OpenStudio.convert(prototype_input['booster_water_use_temperature'], 'F', 'C').get)
|
247
|
+
swh_booster_loop = OpenstudioStandards::ServiceWaterHeating.create_booster_water_heating_loop(model,
|
248
|
+
water_heater_capacity: OpenStudio.convert(prototype_input['booster_water_heater_capacity'], 'Btu/hr', 'W').get,
|
249
|
+
water_heater_volume: OpenStudio.convert(prototype_input['booster_water_heater_volume'], 'gal', 'm^3').get,
|
250
|
+
water_heater_fuel: prototype_input['booster_water_heater_fuel'],
|
251
|
+
service_water_temperature: OpenStudio.convert(prototype_input['booster_water_temperature'], 'F', 'C').get,
|
252
|
+
service_water_loop: hotel_swh_loop)
|
253
|
+
|
254
|
+
# add booster water use
|
255
|
+
OpenstudioStandards::ServiceWaterHeating.create_water_use(model,
|
256
|
+
name: 'Booster',
|
257
|
+
flow_rate: OpenStudio.convert(prototype_input['booster_service_water_peak_flowrate'], 'gal/min', 'm^3/s').get,
|
258
|
+
flow_rate_fraction_schedule: model_add_schedule(model, prototype_input['booster_service_water_flowrate_schedule']),
|
259
|
+
water_use_temperature: OpenStudio.convert(prototype_input['booster_water_use_temperature'], 'F', 'C').get,
|
260
|
+
service_water_loop: swh_booster_loop)
|
264
261
|
end
|
265
262
|
|
266
263
|
# for tall and super tall buildings, there is laundry only if hotel has more than 1 floors
|
267
264
|
# hotel_bot has laundry, if only one floor, doesn't have hotel_bot
|
268
265
|
if additional_params[:num_of_floor_hotel].to_i > 1
|
269
266
|
# Add the laundry service water heating loop
|
270
|
-
laundry_swh_loop =
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
#
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
nil)
|
267
|
+
laundry_swh_loop = OpenstudioStandards::ServiceWaterHeating.create_service_water_heating_loop(model,
|
268
|
+
system_name: 'Laundry Service Water Loop',
|
269
|
+
service_water_temperature: OpenStudio.convert(prototype_input['laundry_service_water_temperature'], 'F', 'C').get,
|
270
|
+
service_water_pump_head: prototype_input['laundry_service_water_pump_head'].to_f,
|
271
|
+
service_water_pump_motor_efficiency: prototype_input['laundry_service_water_pump_motor_efficiency'],
|
272
|
+
water_heater_capacity: OpenStudio.convert(prototype_input['laundry_water_heater_capacity'], 'Btu/hr', 'W').get,
|
273
|
+
water_heater_volume: OpenStudio.convert(prototype_input['laundry_water_heater_volume'], 'gal', 'm^3').get,
|
274
|
+
water_heater_fuel: prototype_input['laundry_water_heater_fuel'],
|
275
|
+
on_cycle_parasitic_fuel_consumption_rate: OpenStudio.convert(prototype_input['laundry_service_water_parasitic_fuel_consumption_rate'], 'Btu/hr', 'W').get,
|
276
|
+
off_cycle_parasitic_fuel_consumption_rate: OpenStudio.convert(prototype_input['laundry_service_water_parasitic_fuel_consumption_rate'], 'Btu/hr', 'W').get)
|
277
|
+
|
278
|
+
# add water use
|
279
|
+
OpenstudioStandards::ServiceWaterHeating.create_water_use(model,
|
280
|
+
name: 'Laundry',
|
281
|
+
flow_rate: OpenStudio.convert(prototype_input['laundry_service_water_peak_flowrate'], 'gal/min', 'm^3/s').get,
|
282
|
+
flow_rate_fraction_schedule: model_add_schedule(model, prototype_input['laundry_service_water_flowrate_schedule']),
|
283
|
+
water_use_temperature: OpenStudio.convert(prototype_input['laundry_water_use_temperature'], 'F', 'C').get,
|
284
|
+
service_water_loop: laundry_swh_loop)
|
289
285
|
end
|
286
|
+
|
290
287
|
return true
|
291
288
|
end
|
292
289
|
|