openstudio-standards 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/data/standards/OpenStudio_Standards.xlsx +0 -0
- data/data/standards/OpenStudio_Standards_chillers.json +5 -5
- data/data/standards/OpenStudio_Standards_construction_sets.json +2 -2
- data/data/standards/OpenStudio_Standards_curve_cubics.json +12 -0
- data/data/standards/OpenStudio_Standards_heat_pumps.json +2126 -72
- data/data/standards/OpenStudio_Standards_heat_pumps_heating.json +766 -14
- data/data/standards/OpenStudio_Standards_heat_rejection.json +172 -0
- data/data/standards/OpenStudio_Standards_prototype_inputs.json +355 -267
- data/data/standards/OpenStudio_Standards_schedules.json +262 -10
- data/data/standards/OpenStudio_Standards_space_types.json +1466 -794
- data/data/standards/manage_OpenStudio_Standards.rb +19 -21
- data/data/weather/weather_info.csv +96 -0
- data/lib/openstudio-standards/btap/btap.rb +1 -1
- data/lib/openstudio-standards/btap/compliance.rb +135 -40
- data/lib/openstudio-standards/btap/envelope.rb +26 -5
- data/lib/openstudio-standards/btap/geometry.rb +11 -1
- data/lib/openstudio-standards/btap/hvac.rb +489 -56
- data/lib/openstudio-standards/btap/simmanager.rb +1 -1
- data/lib/openstudio-standards/hvac_sizing/HVACSizing.CoilHeatingDXMultiSpeed.rb +120 -0
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXMultiSpeed.rb +151 -7
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingGasMultiStage.rb +48 -7
- data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +14 -12
- data/lib/openstudio-standards/prototypes/Prototype.AirTerminalSingleDuctVAVReheat.rb +33 -7
- data/lib/openstudio-standards/prototypes/Prototype.Model.hvac.rb +123 -91
- data/lib/openstudio-standards/prototypes/Prototype.Model.rb +130 -45
- data/lib/openstudio-standards/prototypes/Prototype.Model.swh.rb +13 -7
- data/lib/openstudio-standards/prototypes/Prototype.full_service_restaurant.rb +332 -324
- data/lib/openstudio-standards/prototypes/Prototype.hospital.rb +401 -99
- data/lib/openstudio-standards/prototypes/Prototype.hvac_systems.rb +309 -222
- data/lib/openstudio-standards/prototypes/Prototype.large_hotel.rb +100 -80
- data/lib/openstudio-standards/prototypes/Prototype.large_office.rb +37 -22
- data/lib/openstudio-standards/prototypes/Prototype.medium_office.rb +68 -53
- data/lib/openstudio-standards/prototypes/Prototype.mid_rise_apartment.rb +109 -88
- data/lib/openstudio-standards/prototypes/Prototype.outpatient.rb +52 -4
- data/lib/openstudio-standards/prototypes/Prototype.primary_school.rb +230 -213
- data/lib/openstudio-standards/prototypes/Prototype.quick_service_restaurant.rb +225 -218
- data/lib/openstudio-standards/prototypes/Prototype.retail_standalone.rb +29 -17
- data/lib/openstudio-standards/prototypes/Prototype.retail_stripmall.rb +42 -32
- data/lib/openstudio-standards/prototypes/Prototype.secondary_school.rb +331 -314
- data/lib/openstudio-standards/prototypes/Prototype.small_hotel.rb +233 -219
- data/lib/openstudio-standards/prototypes/Prototype.small_office.rb +40 -32
- data/lib/openstudio-standards/prototypes/Prototype.warehouse.rb +19 -6
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +576 -555
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +3 -1
- data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +35 -17
- data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +51 -23
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +255 -0
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +192 -0
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +65 -0
- data/lib/openstudio-standards/standards/Standards.Fan.rb +37 -6
- data/lib/openstudio-standards/standards/Standards.Model.rb +28 -3
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +3 -1
- data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +41 -15
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards/weather/Weather.Model.rb +509 -5
- data/lib/openstudio-standards/weather/Weather.stat_file.rb +145 -5
- metadata +8 -3
- data/lib/openstudio-standards/btap/environment.rb +0 -718
@@ -2,7 +2,7 @@
|
|
2
2
|
# open the class to add methods to size all HVAC equipment
|
3
3
|
class OpenStudio::Model::Model
|
4
4
|
|
5
|
-
# Load the helper libraries for
|
5
|
+
# Load the helper libraries for
|
6
6
|
require_relative 'Prototype.FanConstantVolume'
|
7
7
|
require_relative 'Prototype.FanVariableVolume'
|
8
8
|
require_relative 'Prototype.FanOnOff'
|
@@ -11,6 +11,7 @@ class OpenStudio::Model::Model
|
|
11
11
|
require_relative 'Prototype.ControllerWaterCoil'
|
12
12
|
require_relative 'Prototype.Model.hvac'
|
13
13
|
require_relative 'Prototype.Model.swh'
|
14
|
+
require_relative '../standards/Standards.Model'
|
14
15
|
|
15
16
|
# Creates a DOE prototype building model and replaces
|
16
17
|
# the current model with this model.
|
@@ -22,13 +23,17 @@ class OpenStudio::Model::Model
|
|
22
23
|
# @return [Bool] returns true if successful, false if not
|
23
24
|
# @example Create a Small Office, 90.1-2010, in ASHRAE Climate Zone 5A (Chicago)
|
24
25
|
# model.create_prototype_building('SmallOffice', '90.1-2010', 'ASHRAE 169-2006-5A')
|
25
|
-
|
26
|
-
|
27
|
-
|
26
|
+
|
27
|
+
def create_prototype_building(building_type, building_vintage, climate_zone, epw_file, sizing_run_dir = Dir.pwd, debug = false)
|
28
|
+
|
29
|
+
# There are no reference models for HighriseApartment at vintages Pre-1980 and 1980-2004, nor for NECB 2011. This is a quick check.
|
28
30
|
if building_type == "HighriseApartment"
|
29
31
|
if building_vintage == 'DOE Ref Pre-1980' or building_vintage == 'DOE Ref 1980-2004'
|
30
32
|
OpenStudio::logFree(OpenStudio::Error, 'Not available', "DOE Reference models for #{building_type} at vintage #{building_vintage} are not available, the measure is disabled for this specific type.")
|
31
33
|
return false
|
34
|
+
elsif building_vintage == "NECB 2011"
|
35
|
+
OpenStudio::logFree(OpenStudio::Error, 'Not available', "Reference model for #{building_type} at vintage #{building_vintage} is not available, the measure is disabled for this specific type.")
|
36
|
+
return false
|
32
37
|
end
|
33
38
|
end
|
34
39
|
|
@@ -39,33 +44,75 @@ class OpenStudio::Model::Model
|
|
39
44
|
'template' => building_vintage,
|
40
45
|
'building_type' => building_type
|
41
46
|
}
|
42
|
-
|
47
|
+
|
48
|
+
prototype_input = self.find_object($os_standards['prototype_inputs'], search_criteria,nil)
|
49
|
+
|
50
|
+
|
43
51
|
if prototype_input.nil?
|
44
52
|
OpenStudio::logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{search_criteria}, cannot create model.")
|
45
53
|
return false
|
46
54
|
end
|
47
55
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
56
|
+
|
57
|
+
case building_vintage
|
58
|
+
when 'NECB 2011'
|
59
|
+
self.load_building_type_methods(building_type, building_vintage, climate_zone)
|
60
|
+
self.load_geometry(building_type, building_vintage, climate_zone)
|
61
|
+
self.getBuilding.setName("#{building_vintage}-#{building_type}-#{climate_zone}-#{epw_file} created: #{Time.new}")
|
62
|
+
space_type_map = self.define_space_type_map(building_type, building_vintage, climate_zone)
|
63
|
+
self.assign_space_type_stubs("Space Function", building_vintage, space_type_map) # TO DO: add support for defining NECB 2011 archetype by building type (versus space function)
|
64
|
+
self.add_loads(building_vintage, climate_zone)
|
65
|
+
self.modify_infiltration_coefficients(building_type, building_vintage, climate_zone) #does not apply to NECB 2011 but left here for consistency
|
66
|
+
self.modify_surface_convection_algorithm(building_vintage)
|
67
|
+
|
68
|
+
#Should this be the first thing done Maria?
|
69
|
+
self.add_design_days_and_weather_file(building_type, building_vintage, climate_zone, epw_file)
|
70
|
+
puts self.get_full_weather_file_path
|
71
|
+
self.add_constructions(lookup_building_type, building_vintage, climate_zone) #set "dummy construction set
|
72
|
+
#BTAP::Geometry::intersect_surfaces(self)
|
73
|
+
#BTAP::Geometry::match_surfaces(self)
|
74
|
+
BTAP::Compliance::NECB2011::set_necb_fwdr( self, true, runner=nil) # set FWDR
|
75
|
+
BTAP::Compliance::NECB2011::set_all_construction_sets_to_necb!(self, runner=nil)
|
76
|
+
#Getting System Fuel type types from BTAP::Environment.
|
77
|
+
BTAP::Environment::get_canadian_system_defaults_by_weatherfile_name(epw_file)
|
78
|
+
boiler_fueltype, baseboard_type, mau_type, mau_heating_coil_type, mua_cooling_type, chiller_type, heating_coil_types_sys3, heating_coil_types_sys4,heating_coil_types_sys6, fan_type = BTAP::Environment::get_canadian_system_defaults_by_weatherfile_name(epw_file)
|
79
|
+
BTAP::Compliance::NECB2011::necb_autozone_and_autosystem(self, runner=nil, use_ideal_air_loads = false, boiler_fueltype, mau_type, mau_heating_coil_type, baseboard_type, chiller_type, mua_cooling_type, heating_coil_types_sys3, heating_coil_types_sys4, heating_coil_types_sys6, fan_type )
|
80
|
+
|
81
|
+
self.set_sizing_parameters(building_type, building_vintage)
|
82
|
+
self.yearDescription.get.setDayofWeekforStartDay('Sunday')
|
83
|
+
self.add_swh(building_type, building_vintage, climate_zone, prototype_input) # note exhaust fan schedule for * common spaces.
|
84
|
+
# TO DO: routine custom_swh_tweaks sets loss coefficient to ambient for water heater, differs for each archetype
|
85
|
+
# NECB 2011 follows ASHRAE 90.1 for now, does this need to change?
|
86
|
+
self.custom_swh_tweaks(building_type, building_vintage, climate_zone, prototype_input)
|
87
|
+
# self.add_exterior_lights(building_type, building_vintage, climate_zone, prototype_input)
|
88
|
+
# self.add_occupancy_sensors(building_type, building_vintage, climate_zone)
|
89
|
+
|
90
|
+
#
|
91
|
+
|
92
|
+
else
|
93
|
+
|
94
|
+
self.load_building_type_methods(building_type, building_vintage, climate_zone)
|
95
|
+
self.load_geometry(building_type, building_vintage, climate_zone)
|
96
|
+
self.getBuilding.setName("#{building_vintage}-#{building_type}-#{climate_zone} created: #{Time.new}")
|
97
|
+
space_type_map = self.define_space_type_map(building_type, building_vintage, climate_zone)
|
98
|
+
self.assign_space_type_stubs(lookup_building_type, building_vintage, space_type_map)
|
99
|
+
self.add_loads(building_vintage, climate_zone)
|
100
|
+
self.apply_infiltration_standard(building_vintage)
|
101
|
+
self.modify_infiltration_coefficients(building_type, building_vintage, climate_zone)
|
102
|
+
self.modify_surface_convection_algorithm(building_vintage)
|
103
|
+
self.add_constructions(lookup_building_type, building_vintage, climate_zone)
|
104
|
+
self.create_thermal_zones(building_type,building_vintage, climate_zone)
|
105
|
+
self.add_hvac(building_type, building_vintage, climate_zone, prototype_input)
|
106
|
+
self.custom_hvac_tweaks(building_type, building_vintage, climate_zone, prototype_input)
|
107
|
+
self.add_swh(building_type, building_vintage, climate_zone, prototype_input)
|
108
|
+
self.custom_swh_tweaks(building_type, building_vintage, climate_zone, prototype_input)
|
109
|
+
self.add_exterior_lights(building_type, building_vintage, climate_zone, prototype_input)
|
110
|
+
self.add_occupancy_sensors(building_type, building_vintage, climate_zone)
|
111
|
+
self.add_design_days_and_weather_file(building_type, building_vintage, climate_zone, epw_file)
|
112
|
+
self.set_sizing_parameters(building_type, building_vintage)
|
67
113
|
self.yearDescription.get.setDayofWeekforStartDay('Sunday')
|
68
114
|
|
115
|
+
end
|
69
116
|
# set climate zone and building type
|
70
117
|
self.getBuilding.setStandardsBuildingType(building_type)
|
71
118
|
if climate_zone.include? 'ASHRAE 169-2006-'
|
@@ -77,10 +124,14 @@ class OpenStudio::Model::Model
|
|
77
124
|
return false
|
78
125
|
end
|
79
126
|
|
127
|
+
|
80
128
|
# If there are any multizone systems, set damper positions
|
81
129
|
# and perform a second sizing run
|
82
130
|
has_multizone_systems = false
|
131
|
+
|
132
|
+
|
83
133
|
self.getAirLoopHVACs.sort.each do |air_loop|
|
134
|
+
|
84
135
|
if air_loop.is_multizone_vav_system
|
85
136
|
self.apply_multizone_vav_outdoor_air_sizing(building_vintage)
|
86
137
|
if self.runSizingRun("#{sizing_run_dir}/SizingRun2") == false
|
@@ -94,28 +145,42 @@ class OpenStudio::Model::Model
|
|
94
145
|
# which include sizing the fan pressure rises based
|
95
146
|
# on the flow rate of the system.
|
96
147
|
self.applyPrototypeHVACAssumptions(building_type, building_vintage, climate_zone)
|
97
|
-
|
148
|
+
|
149
|
+
# for 90.1-2010 Outpatient, AHU2 set minimum outdoor air flow rate as 0
|
150
|
+
# AHU1 doesn't have economizer
|
151
|
+
if building_type == "Outpatient"
|
152
|
+
self.modify_OAcontroller(building_vintage)
|
153
|
+
# For operating room 1&2 in 2010 and 2013, VAV minimum air flow is set by schedule
|
154
|
+
self.reset_or_room_vav_minimum_damper(prototype_input, building_vintage)
|
155
|
+
end
|
156
|
+
|
157
|
+
if building_type == "Hospital"
|
158
|
+
self.modify_hospital_OAcontroller(building_vintage)
|
159
|
+
end
|
160
|
+
|
98
161
|
# Apply the HVAC efficiency standard
|
99
162
|
self.applyHVACEfficiencyStandard(building_vintage, climate_zone)
|
100
163
|
|
101
164
|
# Add daylighting controls per standard
|
102
165
|
# only four zones in large hotel have daylighting controls
|
103
166
|
# todo: YXC to merge to the main function
|
104
|
-
if building_type
|
105
|
-
self.addDaylightingControls(building_vintage)
|
106
|
-
else
|
167
|
+
if building_type == "LargeHotel"
|
107
168
|
self.add_daylighting_controls(building_vintage)
|
169
|
+
elsif building_type == "Hospital"
|
170
|
+
self.hospital_add_daylighting_controls(building_vintage)
|
171
|
+
else
|
172
|
+
self.addDaylightingControls(building_vintage)
|
108
173
|
end
|
109
174
|
|
110
175
|
if building_type == "QuickServiceRestaurant" || building_type == "FullServiceRestaurant" || building_type == "Outpatient"
|
111
176
|
self.update_exhaust_fan_efficiency(building_vintage)
|
112
177
|
end
|
113
|
-
|
178
|
+
|
114
179
|
if building_type == "HighriseApartment"
|
115
180
|
self.update_fan_efficiency
|
116
181
|
end
|
117
182
|
|
118
|
-
#
|
183
|
+
# Add output variables for debugging
|
119
184
|
# AHU1 doesn't have economizer
|
120
185
|
if building_type == "Outpatient"
|
121
186
|
# remove the controller:mechanical ventilation for AHU1 OA
|
@@ -158,6 +223,8 @@ class OpenStudio::Model::Model
|
|
158
223
|
lookup_name = 'Retail'
|
159
224
|
when 'RetailStripmall'
|
160
225
|
lookup_name = 'StripMall'
|
226
|
+
when 'Office'
|
227
|
+
lookup_name = 'Office'
|
161
228
|
end
|
162
229
|
|
163
230
|
return lookup_name
|
@@ -232,6 +299,8 @@ class OpenStudio::Model::Model
|
|
232
299
|
|
233
300
|
# Determine which geometry file to use
|
234
301
|
# based on building_type and template
|
302
|
+
# NECB 2011 geometry is not explicitly defined; for NECB 2011 vintage, latest ASHRAE 90.1 geometry file is assigned (implicitly)
|
303
|
+
|
235
304
|
case building_type
|
236
305
|
when 'SecondarySchool'
|
237
306
|
if building_vintage == 'DOE Ref Pre-1980' || building_vintage == 'DOE Ref 1980-2004'
|
@@ -273,7 +342,7 @@ class OpenStudio::Model::Model
|
|
273
342
|
geometry_file = 'Geometry.small_hotel_pnnl2007.osm'
|
274
343
|
when '90.1-2010'
|
275
344
|
geometry_file = 'Geometry.small_hotel_pnnl2010.osm'
|
276
|
-
|
345
|
+
else #'90.1-2013'
|
277
346
|
geometry_file = 'Geometry.small_hotel_pnnl2013.osm'
|
278
347
|
end
|
279
348
|
when 'LargeHotel'
|
@@ -311,14 +380,14 @@ class OpenStudio::Model::Model
|
|
311
380
|
case building_vintage
|
312
381
|
when 'DOE Ref Pre-1980'
|
313
382
|
geometry_file = 'Geometry.quick_service_restaurant_pre1980.osm'
|
314
|
-
|
383
|
+
else #'DOE Ref 1980-2004','90.1-2010','90.1-2007','90.1-2004','90.1-2013'
|
315
384
|
geometry_file = 'Geometry.quick_service_restaurant_allothers.osm'
|
316
385
|
end
|
317
386
|
when 'FullServiceRestaurant'
|
318
387
|
case building_vintage
|
319
388
|
when 'DOE Ref Pre-1980'
|
320
389
|
geometry_file = 'Geometry.full_service_restaurant_pre1980.osm'
|
321
|
-
|
390
|
+
else # 'DOE Ref 1980-2004','90.1-2010','90.1-2007','90.1-2004','90.1-2013'
|
322
391
|
geometry_file = 'Geometry.full_service_restaurant_allothers.osm'
|
323
392
|
end
|
324
393
|
when 'Hospital'
|
@@ -327,6 +396,9 @@ class OpenStudio::Model::Model
|
|
327
396
|
geometry_file = 'Geometry.outpatient.osm'
|
328
397
|
when 'MidriseApartment'
|
329
398
|
geometry_file = 'Geometry.mid_rise_apartment.osm'
|
399
|
+
when 'Office' # For NECB 2011 prototypes (old)
|
400
|
+
geometry_file = 'Geometry.large_office_2010.osm'
|
401
|
+
alt_search_name = 'Office'
|
330
402
|
when 'HighriseApartment'
|
331
403
|
geometry_file = 'Geometry.high_rise_apartment.osm'
|
332
404
|
else
|
@@ -393,12 +465,14 @@ class OpenStudio::Model::Model
|
|
393
465
|
stub_space_type.set_rendering_color(building_vintage)
|
394
466
|
|
395
467
|
space_names.each do |space_name|
|
468
|
+
|
396
469
|
space = self.getSpaceByName(space_name)
|
470
|
+
|
397
471
|
next if space.empty?
|
398
472
|
space = space.get
|
399
473
|
space.setSpaceType(stub_space_type)
|
400
474
|
|
401
|
-
|
475
|
+
OpenStudio::logFree(OpenStudio::Info, 'openstudio.model.Model', "Setting #{space.name} to #{building_type}.#{space_type_name}")
|
402
476
|
end
|
403
477
|
end
|
404
478
|
|
@@ -442,13 +516,14 @@ class OpenStudio::Model::Model
|
|
442
516
|
|
443
517
|
# Rendering color
|
444
518
|
space_type.set_rendering_color(building_vintage)
|
445
|
-
|
519
|
+
|
446
520
|
# Loads
|
447
521
|
space_type.set_internal_loads(building_vintage, true, true, true, true, true, true)
|
448
|
-
|
522
|
+
|
449
523
|
# Schedules
|
450
524
|
space_type.set_internal_load_schedules(building_vintage, true, true, true, true, true, true, true)
|
451
|
-
|
525
|
+
|
526
|
+
|
452
527
|
end
|
453
528
|
|
454
529
|
OpenStudio::logFree(OpenStudio::Info, 'openstudio.model.Model', 'Finished applying space types (loads)')
|
@@ -675,11 +750,18 @@ class OpenStudio::Model::Model
|
|
675
750
|
end
|
676
751
|
|
677
752
|
# get all the space types that are conditioned
|
678
|
-
|
753
|
+
|
754
|
+
# not required for NECB 2011
|
755
|
+
unless (building_vintage == 'NECB 2011')
|
756
|
+
conditioned_space_names = find_conditioned_space_names(building_type, building_vintage, climate_zone)
|
757
|
+
end
|
758
|
+
|
679
759
|
|
680
760
|
# add internal mass
|
681
|
-
|
682
|
-
|
761
|
+
# not required for NECB 2011
|
762
|
+
unless ((building_vintage == 'NECB 2011') or
|
763
|
+
((building_type == 'SmallHotel') &&
|
764
|
+
(building_vintage == '90.1-2004' or building_vintage == '90.1-2007' or building_vintage == '90.1-2010' or building_vintage == '90.1-2013')))
|
683
765
|
internal_mass_def = OpenStudio::Model::InternalMassDefinition.new(self)
|
684
766
|
internal_mass_def.setSurfaceAreaperSpaceFloorArea(2.0)
|
685
767
|
internal_mass_def.setConstruction(construction)
|
@@ -986,10 +1068,10 @@ class OpenStudio::Model::Model
|
|
986
1068
|
end
|
987
1069
|
# Set the terrain type
|
988
1070
|
self.getSite.setTerrain(terrain)
|
989
|
-
|
1071
|
+
|
990
1072
|
# modify the infiltration coefficients for 90.1-2004, 90.1-2007, 90.1-2010, 90.1-2013
|
991
|
-
return true unless building_vintage == '90.1-2004' or building_vintage == '90.1-2007' or building_vintage == '90.1-2010' or building_vintage == '90.1-2013'
|
992
|
-
|
1073
|
+
return true unless building_vintage == '90.1-2004' or building_vintage == '90.1-2007' or building_vintage == '90.1-2010' or building_vintage == '90.1-2013' or building_vintage == 'NECB 2011'
|
1074
|
+
|
993
1075
|
# The pre-1980 and 1980-2004 buildings have this:
|
994
1076
|
# 1.0000, !- Constant Term Coefficient
|
995
1077
|
# 0.0000, !- Temperature Term Coefficient
|
@@ -1022,7 +1104,7 @@ class OpenStudio::Model::Model
|
|
1022
1104
|
when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
|
1023
1105
|
inside.setAlgorithm('TARP')
|
1024
1106
|
outside.setAlgorithm('DOE-2')
|
1025
|
-
when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
|
1107
|
+
when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013', 'NECB 2011'
|
1026
1108
|
inside.setAlgorithm('TARP')
|
1027
1109
|
outside.setAlgorithm('TARP')
|
1028
1110
|
end
|
@@ -1057,6 +1139,9 @@ class OpenStudio::Model::Model
|
|
1057
1139
|
clg = 1.0
|
1058
1140
|
htg = 1.0
|
1059
1141
|
end
|
1142
|
+
when 'NECB 2011'
|
1143
|
+
clg = 1.3
|
1144
|
+
htg = 1.3
|
1060
1145
|
end
|
1061
1146
|
|
1062
1147
|
sizing_params = self.getSizingParameters
|
@@ -1243,7 +1328,7 @@ class OpenStudio::Model::Model
|
|
1243
1328
|
return false
|
1244
1329
|
end
|
1245
1330
|
else
|
1246
|
-
OpenStudio::logFree(OpenStudio::Error, "openstudio.prototype.Model", "Model has not been assigned a weather file.")
|
1331
|
+
OpenStudio::logFree(OpenStudio::Error, "openstudio.prototype.Model", "Model has not been assigned a weather file.3")
|
1247
1332
|
return false
|
1248
1333
|
end
|
1249
1334
|
|
@@ -5,7 +5,7 @@ class OpenStudio::Model::Model
|
|
5
5
|
def add_swh(building_type, building_vintage, climate_zone, prototype_input)
|
6
6
|
|
7
7
|
OpenStudio::logFree(OpenStudio::Info, 'openstudio.model.Model', 'Started Adding Service Water Heating')
|
8
|
-
|
8
|
+
|
9
9
|
# Add the main service water heating loop, if specified
|
10
10
|
unless prototype_input['main_water_heater_volume'].nil?
|
11
11
|
|
@@ -20,13 +20,13 @@ class OpenStudio::Model::Model
|
|
20
20
|
OpenStudio.convert(prototype_input['main_water_heater_volume'],'gal','m^3').get,
|
21
21
|
prototype_input['main_water_heater_fuel'],
|
22
22
|
OpenStudio.convert(prototype_input['main_service_water_parasitic_fuel_consumption_rate'],'Btu/hr','W').get,
|
23
|
-
building_type) unless building_type == 'RetailStripmall'
|
23
|
+
building_type) unless building_type == 'RetailStripmall' and building_vintage != 'NECB 2011'
|
24
24
|
|
25
25
|
# Attach the end uses if specified in prototype inputs
|
26
26
|
# TODO remove special logic for large office SWH end uses
|
27
27
|
# TODO remove special logic for stripmall SWH end uses and service water loops
|
28
28
|
# TODO remove special logic for large hotel SWH end uses
|
29
|
-
if building_type == 'LargeOffice'
|
29
|
+
if building_type == 'LargeOffice' and building_vintage != 'NECB 2011'
|
30
30
|
|
31
31
|
# Only the core spaces have service water
|
32
32
|
['Core_bottom', 'Core_mid', 'Core_top'].each do |space_name|
|
@@ -40,7 +40,7 @@ class OpenStudio::Model::Model
|
|
40
40
|
building_type)
|
41
41
|
end
|
42
42
|
|
43
|
-
elsif building_type == 'RetailStripmall'
|
43
|
+
elsif building_type == 'RetailStripmall' and building_vintage != 'NECB 2011'
|
44
44
|
|
45
45
|
return true if building_vintage == "DOE Ref Pre-1980" || building_vintage == "DOE Ref 1980-2004"
|
46
46
|
|
@@ -187,7 +187,12 @@ class OpenStudio::Model::Model
|
|
187
187
|
|
188
188
|
else
|
189
189
|
|
190
|
-
# Attaches the end uses if specified by space type
|
190
|
+
# Attaches the end uses if specified by space type
|
191
|
+
|
192
|
+
if building_vintage == 'NECB 2011'
|
193
|
+
building_type = 'Space Function'
|
194
|
+
end
|
195
|
+
|
191
196
|
space_type_map = self.define_space_type_map(building_type, building_vintage, climate_zone)
|
192
197
|
space_type_map.each do |space_type_name, space_names|
|
193
198
|
search_criteria = {
|
@@ -200,11 +205,12 @@ class OpenStudio::Model::Model
|
|
200
205
|
# Skip space types with no data
|
201
206
|
next if data.nil?
|
202
207
|
|
203
|
-
# Skip space types with no water use
|
204
|
-
next if data['service_water_heating_peak_flow_rate'].nil?
|
208
|
+
# Skip space types with no water use, unless it is a NECB archetype (these do not have peak flow rates defined)
|
209
|
+
next if data['service_water_heating_peak_flow_rate'].nil? unless building_vintage == 'NECB 2011'
|
205
210
|
|
206
211
|
# Add a service water use for each space
|
207
212
|
space_names.each do |space_name|
|
213
|
+
|
208
214
|
space = self.getSpaceByName(space_name).get
|
209
215
|
space_multiplier = space.multiplier
|
210
216
|
self.add_swh_end_uses_by_space(get_lookup_name(building_type),
|
@@ -16,7 +16,15 @@ class OpenStudio::Model::Model
|
|
16
16
|
'Kitchen' => ['Kitchen'],
|
17
17
|
'Attic' => ['attic']
|
18
18
|
}
|
19
|
+
|
20
|
+
when 'NECB 2011'
|
21
|
+
space_type_map ={
|
22
|
+
"- undefined -" => ["attic"],
|
23
|
+
"Dining - family space" => ["Dining"],
|
24
|
+
"Food preparation" => ["Kitchen"]
|
25
|
+
}
|
19
26
|
end
|
27
|
+
|
20
28
|
return space_type_map
|
21
29
|
end
|
22
30
|
|
@@ -26,415 +34,415 @@ class OpenStudio::Model::Model
|
|
26
34
|
when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
|
27
35
|
system_to_space_map = [
|
28
36
|
{
|
29
|
-
|
30
|
-
|
37
|
+
'type' => 'PSZ-AC',
|
38
|
+
'space_names' => ['Dining', 'Kitchen']
|
31
39
|
},
|
32
40
|
{
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
41
|
+
'type' => 'Exhaust Fan',
|
42
|
+
'name' => 'Dining Exhaust Fan',
|
43
|
+
'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
|
44
|
+
'flow_rate' => 1.828,
|
45
|
+
'flow_fraction_schedule_name' => nil,
|
46
|
+
'balanced_exhaust_fraction_schedule_name' => nil,
|
47
|
+
'space_names' =>
|
40
48
|
[
|
41
|
-
|
42
|
-
|
49
|
+
'Dining'
|
50
|
+
]
|
43
51
|
},
|
44
52
|
{
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
53
|
+
'type' => 'Exhaust Fan',
|
54
|
+
'name' => 'Kitchen Exhaust Fan',
|
55
|
+
'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
|
56
|
+
'flow_rate' => 0.06,
|
57
|
+
'flow_fraction_schedule_name' => nil,
|
58
|
+
'balanced_exhaust_fraction_schedule_name' => nil,
|
59
|
+
'space_names' =>
|
52
60
|
[
|
53
|
-
|
54
|
-
|
61
|
+
'Kitchen'
|
62
|
+
]
|
55
63
|
},
|
56
64
|
{
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
65
|
+
'type' => 'Refrigeration',
|
66
|
+
'case_type' => 'Walkin Freezer',
|
67
|
+
'cooling_capacity_per_length' => 688,
|
68
|
+
'length' => 2.44,
|
69
|
+
'evaporator_fan_pwr_per_length' => 74,
|
70
|
+
'lighting_per_length' => 33,
|
71
|
+
'lighting_sch_name' => 'FullServiceRestaurant Bldg Light',
|
72
|
+
'defrost_pwr_per_length' => 820,
|
73
|
+
'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:1_WALKINFREEZER_WalkInStockingSched',
|
74
|
+
'cop' => 1.5,
|
75
|
+
'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
|
76
|
+
'condenser_fan_pwr' => 330,
|
77
|
+
'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
|
78
|
+
'space_names' =>
|
71
79
|
[
|
72
|
-
|
73
|
-
|
80
|
+
'Kitchen'
|
81
|
+
]
|
74
82
|
},
|
75
83
|
{
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
84
|
+
'type' => 'Refrigeration',
|
85
|
+
'case_type' => 'Display Case',
|
86
|
+
'cooling_capacity_per_length' => 734.0,
|
87
|
+
'length' => 3.05,
|
88
|
+
'evaporator_fan_pwr_per_length' => 66,
|
89
|
+
'lighting_per_length' => 33.0,
|
90
|
+
'lighting_sch_name' => 'FullServiceRestaurant Bldg Light',
|
91
|
+
'defrost_pwr_per_length' => 0.0,
|
92
|
+
'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
|
93
|
+
'cop' => 3.0,
|
94
|
+
'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
|
95
|
+
'condenser_fan_pwr' => 330,
|
96
|
+
'condenser_fan_pwr_curve_name' => nil,
|
97
|
+
'space_names' =>
|
90
98
|
[
|
91
|
-
|
92
|
-
|
99
|
+
'Kitchen'
|
100
|
+
]
|
93
101
|
}
|
94
102
|
]
|
95
103
|
when '90.1-2004'
|
96
104
|
system_to_space_map = [
|
97
105
|
{
|
98
|
-
|
99
|
-
|
106
|
+
'type' => 'PSZ-AC',
|
107
|
+
'space_names' => ['Dining', 'Kitchen']
|
100
108
|
},
|
101
109
|
{
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
110
|
+
'type' => 'Exhaust Fan',
|
111
|
+
'name' => 'Dining Exhaust Fan',
|
112
|
+
'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
|
113
|
+
'flow_rate' => 2.644,
|
114
|
+
'flow_fraction_schedule_name' => nil,
|
115
|
+
'balanced_exhaust_fraction_schedule_name' => nil,
|
116
|
+
'space_names' =>
|
109
117
|
[
|
110
|
-
|
111
|
-
|
118
|
+
'Dining'
|
119
|
+
]
|
112
120
|
},
|
113
121
|
{
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
122
|
+
'type' => 'Exhaust Fan',
|
123
|
+
'name' => 'Kitchen Exhaust Fan',
|
124
|
+
'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
|
125
|
+
'flow_rate' => 2.83169,
|
126
|
+
'flow_fraction_schedule_name' => nil,
|
127
|
+
'balanced_exhaust_fraction_schedule_name' => nil,
|
128
|
+
'space_names' =>
|
121
129
|
[
|
122
|
-
|
123
|
-
|
130
|
+
'Kitchen'
|
131
|
+
]
|
124
132
|
},
|
125
133
|
{
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
134
|
+
'type' => 'Refrigeration',
|
135
|
+
'case_type' => 'Walkin Freezer',
|
136
|
+
'cooling_capacity_per_length' => 688,
|
137
|
+
'length' => 2.44,
|
138
|
+
'evaporator_fan_pwr_per_length' => 74,
|
139
|
+
'lighting_per_length' => 33,
|
140
|
+
'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
|
141
|
+
'defrost_pwr_per_length' => 820,
|
142
|
+
'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:1_WALKINFREEZER_WalkInStockingSched',
|
143
|
+
'cop' => 1.5,
|
144
|
+
'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
|
145
|
+
'condenser_fan_pwr' => 330,
|
146
|
+
'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
|
147
|
+
'space_names' =>
|
140
148
|
[
|
141
|
-
|
142
|
-
|
149
|
+
'Kitchen'
|
150
|
+
]
|
143
151
|
},
|
144
152
|
{
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
153
|
+
'type' => 'Refrigeration',
|
154
|
+
'case_type' => 'Display Case',
|
155
|
+
'cooling_capacity_per_length' => 734.0,
|
156
|
+
'length' => 3.05,
|
157
|
+
'evaporator_fan_pwr_per_length' => 66,
|
158
|
+
'lighting_per_length' => 33.0,
|
159
|
+
'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
|
160
|
+
'defrost_pwr_per_length' => 0.0,
|
161
|
+
'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
|
162
|
+
'cop' => 3.0,
|
163
|
+
'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
|
164
|
+
'condenser_fan_pwr' => 330,
|
165
|
+
'condenser_fan_pwr_curve_name' => nil,
|
166
|
+
'space_names' =>
|
159
167
|
[
|
160
|
-
|
161
|
-
|
168
|
+
'Kitchen'
|
169
|
+
]
|
162
170
|
}
|
163
171
|
]
|
164
172
|
when '90.1-2007'
|
165
173
|
system_to_space_map = [
|
166
174
|
{
|
167
|
-
|
168
|
-
|
175
|
+
'type' => 'PSZ-AC',
|
176
|
+
'space_names' => ['Dining', 'Kitchen']
|
169
177
|
},
|
170
178
|
{
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
179
|
+
'type' => 'Exhaust Fan',
|
180
|
+
'name' => 'Dining Exhaust Fan',
|
181
|
+
'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
|
182
|
+
'flow_rate' => 1.331432,
|
183
|
+
'flow_fraction_schedule_name' => nil,
|
184
|
+
'balanced_exhaust_fraction_schedule_name' => nil,
|
185
|
+
'space_names' =>
|
178
186
|
[
|
179
|
-
|
180
|
-
|
187
|
+
'Dining'
|
188
|
+
]
|
181
189
|
},
|
182
190
|
{
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
191
|
+
'type' => 'Exhaust Fan',
|
192
|
+
'name' => 'Kitchen Exhaust Fan',
|
193
|
+
'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
|
194
|
+
'flow_rate' => 2.83169,
|
195
|
+
'flow_fraction_schedule_name' => nil,
|
196
|
+
'balanced_exhaust_fraction_schedule_name' => nil,
|
197
|
+
'space_names' =>
|
190
198
|
[
|
191
|
-
|
192
|
-
|
199
|
+
'Kitchen'
|
200
|
+
]
|
193
201
|
},
|
194
202
|
{
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
203
|
+
'type' => 'Refrigeration',
|
204
|
+
'case_type' => 'Walkin Freezer',
|
205
|
+
'cooling_capacity_per_length' => 688,
|
206
|
+
'length' => 2.44,
|
207
|
+
'evaporator_fan_pwr_per_length' => 74,
|
208
|
+
'lighting_per_length' => 33,
|
209
|
+
'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
|
210
|
+
'defrost_pwr_per_length' => 820,
|
211
|
+
'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:1_WALKINFREEZER_WalkInStockingSched',
|
212
|
+
'cop' => 1.5,
|
213
|
+
'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
|
214
|
+
'condenser_fan_pwr' => 330,
|
215
|
+
'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
|
216
|
+
'space_names' =>
|
209
217
|
[
|
210
|
-
|
211
|
-
|
218
|
+
'Kitchen'
|
219
|
+
]
|
212
220
|
},
|
213
221
|
{
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
222
|
+
'type' => 'Refrigeration',
|
223
|
+
'case_type' => 'Display Case',
|
224
|
+
'cooling_capacity_per_length' => 734.0,
|
225
|
+
'length' => 3.05,
|
226
|
+
'evaporator_fan_pwr_per_length' => 66,
|
227
|
+
'lighting_per_length' => 33.0,
|
228
|
+
'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
|
229
|
+
'defrost_pwr_per_length' => 0.0,
|
230
|
+
'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
|
231
|
+
'cop' => 3.0,
|
232
|
+
'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
|
233
|
+
'condenser_fan_pwr' => 330,
|
234
|
+
'condenser_fan_pwr_curve_name' => nil,
|
235
|
+
'space_names' =>
|
228
236
|
[
|
229
|
-
|
230
|
-
|
237
|
+
'Kitchen'
|
238
|
+
]
|
231
239
|
}
|
232
240
|
]
|
233
241
|
when '90.1-2007'
|
234
242
|
system_to_space_map = [
|
235
243
|
{
|
236
|
-
|
237
|
-
|
244
|
+
'type' => 'PSZ-AC',
|
245
|
+
'space_names' => ['Dining', 'Kitchen']
|
238
246
|
},
|
239
247
|
{
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
248
|
+
'type' => 'Exhaust Fan',
|
249
|
+
'name' => 'Dining Exhaust Fan',
|
250
|
+
'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
|
251
|
+
'flow_rate' => 1.331432,
|
252
|
+
'flow_fraction_schedule_name' => nil,
|
253
|
+
'balanced_exhaust_fraction_schedule_name' => nil,
|
254
|
+
'space_names' =>
|
247
255
|
[
|
248
|
-
|
249
|
-
|
256
|
+
'Dining'
|
257
|
+
]
|
250
258
|
},
|
251
259
|
{
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
260
|
+
'type' => 'Exhaust Fan',
|
261
|
+
'name' => 'Kitchen Exhaust Fan',
|
262
|
+
'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
|
263
|
+
'flow_rate' => 2.83169,
|
264
|
+
'flow_fraction_schedule_name' => nil,
|
265
|
+
'balanced_exhaust_fraction_schedule_name' => nil,
|
266
|
+
'space_names' =>
|
259
267
|
[
|
260
|
-
|
261
|
-
|
268
|
+
'Kitchen'
|
269
|
+
]
|
262
270
|
},
|
263
271
|
{
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
272
|
+
'type' => 'Refrigeration',
|
273
|
+
'case_type' => 'Walkin Freezer',
|
274
|
+
'cooling_capacity_per_length' => 688,
|
275
|
+
'length' => 2.44,
|
276
|
+
'evaporator_fan_pwr_per_length' => 74,
|
277
|
+
'lighting_per_length' => 33,
|
278
|
+
'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
|
279
|
+
'defrost_pwr_per_length' => 820,
|
280
|
+
'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:1_WALKINFREEZER_WalkInStockingSched',
|
281
|
+
'cop' => 1.5,
|
282
|
+
'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
|
283
|
+
'condenser_fan_pwr' => 330,
|
284
|
+
'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
|
285
|
+
'space_names' =>
|
278
286
|
[
|
279
|
-
|
280
|
-
|
287
|
+
'Kitchen'
|
288
|
+
]
|
281
289
|
},
|
282
290
|
{
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
291
|
+
'type' => 'Refrigeration',
|
292
|
+
'case_type' => 'Display Case',
|
293
|
+
'cooling_capacity_per_length' => 734.0,
|
294
|
+
'length' => 3.05,
|
295
|
+
'evaporator_fan_pwr_per_length' => 66,
|
296
|
+
'lighting_per_length' => 33.0,
|
297
|
+
'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
|
298
|
+
'defrost_pwr_per_length' => 0.0,
|
299
|
+
'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
|
300
|
+
'cop' => 3.0,
|
301
|
+
'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
|
302
|
+
'condenser_fan_pwr' => 330,
|
303
|
+
'condenser_fan_pwr_curve_name' => nil,
|
304
|
+
'space_names' =>
|
297
305
|
[
|
298
|
-
|
299
|
-
|
306
|
+
'Kitchen'
|
307
|
+
]
|
300
308
|
}
|
301
309
|
]
|
302
310
|
when '90.1-2010'
|
303
311
|
system_to_space_map = [
|
304
312
|
{
|
305
|
-
|
306
|
-
|
313
|
+
'type' => 'PSZ-AC',
|
314
|
+
'space_names' => ['Dining', 'Kitchen']
|
307
315
|
},
|
308
316
|
{
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
317
|
+
'type' => 'Exhaust Fan',
|
318
|
+
'name' => 'Dining Exhaust Fan',
|
319
|
+
'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
|
320
|
+
'flow_rate' => 1.331432,
|
321
|
+
'flow_fraction_schedule_name' => nil,
|
322
|
+
'balanced_exhaust_fraction_schedule_name' => nil,
|
323
|
+
'space_names' =>
|
316
324
|
[
|
317
|
-
|
318
|
-
|
325
|
+
'Dining'
|
326
|
+
]
|
319
327
|
},
|
320
328
|
{
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
329
|
+
'type' => 'Exhaust Fan',
|
330
|
+
'name' => 'Kitchen Exhaust Fan',
|
331
|
+
'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
|
332
|
+
'flow_rate' => 2.548516,
|
333
|
+
'flow_fraction_schedule_name' => nil,
|
334
|
+
'balanced_exhaust_fraction_schedule_name' => nil,
|
335
|
+
'space_names' =>
|
328
336
|
[
|
329
|
-
|
330
|
-
|
337
|
+
'Kitchen'
|
338
|
+
]
|
331
339
|
},
|
332
340
|
{
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
341
|
+
'type' => 'Refrigeration',
|
342
|
+
'case_type' => 'Walkin Freezer',
|
343
|
+
'cooling_capacity_per_length' => 688,
|
344
|
+
'length' => 2.44,
|
345
|
+
'evaporator_fan_pwr_per_length' => 74,
|
346
|
+
'lighting_per_length' => 33,
|
347
|
+
'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
|
348
|
+
'defrost_pwr_per_length' => 820,
|
349
|
+
'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:1_WALKINFREEZER_WalkInStockingSched',
|
350
|
+
'cop' => 1.5,
|
351
|
+
'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
|
352
|
+
'condenser_fan_pwr' => 330,
|
353
|
+
'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
|
354
|
+
'space_names' =>
|
347
355
|
[
|
348
|
-
|
349
|
-
|
356
|
+
'Kitchen'
|
357
|
+
]
|
350
358
|
},
|
351
359
|
{
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
360
|
+
'type' => 'Refrigeration',
|
361
|
+
'case_type' => 'Display Case',
|
362
|
+
'cooling_capacity_per_length' => 734.0,
|
363
|
+
'length' => 3.05,
|
364
|
+
'evaporator_fan_pwr_per_length' => 66,
|
365
|
+
'lighting_per_length' => 33.0,
|
366
|
+
'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
|
367
|
+
'defrost_pwr_per_length' => 0.0,
|
368
|
+
'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
|
369
|
+
'cop' => 3.0,
|
370
|
+
'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
|
371
|
+
'condenser_fan_pwr' => 330,
|
372
|
+
'condenser_fan_pwr_curve_name' => nil,
|
373
|
+
'space_names' =>
|
366
374
|
[
|
367
|
-
|
368
|
-
|
375
|
+
'Kitchen'
|
376
|
+
]
|
369
377
|
}
|
370
378
|
]
|
371
379
|
when '90.1-2013'
|
372
380
|
system_to_space_map = [
|
373
381
|
{
|
374
|
-
|
375
|
-
|
382
|
+
'type' => 'PSZ-AC',
|
383
|
+
'space_names' => ['Dining', 'Kitchen']
|
376
384
|
},
|
377
385
|
{
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
386
|
+
'type' => 'Exhaust Fan',
|
387
|
+
'name' => 'Dining Exhaust Fan',
|
388
|
+
'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
|
389
|
+
'flow_rate' => 1.331432,
|
390
|
+
'flow_fraction_schedule_name' => nil,
|
391
|
+
'balanced_exhaust_fraction_schedule_name' => nil,
|
392
|
+
'space_names' =>
|
385
393
|
[
|
386
|
-
|
387
|
-
|
394
|
+
'Dining'
|
395
|
+
]
|
388
396
|
},
|
389
397
|
{
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
398
|
+
'type' => 'Exhaust Fan',
|
399
|
+
'name' => 'Kitchen Exhaust Fan',
|
400
|
+
'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
|
401
|
+
'flow_rate' => 2.548516,
|
402
|
+
'flow_fraction_schedule_name' => nil,
|
403
|
+
'balanced_exhaust_fraction_schedule_name' => nil,
|
404
|
+
'space_names' =>
|
397
405
|
[
|
398
|
-
|
399
|
-
|
406
|
+
'Kitchen'
|
407
|
+
]
|
400
408
|
},
|
401
409
|
{
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
410
|
+
'type' => 'Refrigeration',
|
411
|
+
'case_type' => 'Walkin Freezer',
|
412
|
+
'cooling_capacity_per_length' => 688,
|
413
|
+
'length' => 2.44,
|
414
|
+
'evaporator_fan_pwr_per_length' => 21.14286,
|
415
|
+
'lighting_per_length' => 33,
|
416
|
+
'lighting_sch_name' => 'RestaurantSitDown walkin_occ_lght_SCH',
|
417
|
+
'defrost_pwr_per_length' => 820,
|
418
|
+
'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:1_WALKINFREEZER_WalkInStockingSched',
|
419
|
+
'cop' => 1.5,
|
420
|
+
'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
|
421
|
+
'condenser_fan_pwr' => 330,
|
422
|
+
'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
|
423
|
+
'space_names' =>
|
416
424
|
[
|
417
|
-
|
418
|
-
|
425
|
+
'Kitchen'
|
426
|
+
]
|
419
427
|
},
|
420
428
|
{
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
429
|
+
'type' => 'Refrigeration',
|
430
|
+
'case_type' => 'Display Case',
|
431
|
+
'cooling_capacity_per_length' => 734.0,
|
432
|
+
'length' => 3.05,
|
433
|
+
'evaporator_fan_pwr_per_length' => 18.85714,
|
434
|
+
'lighting_per_length' => 33.0,
|
435
|
+
'lighting_sch_name' => 'RestaurantSitDown walkin_occ_lght_SCH',
|
436
|
+
'defrost_pwr_per_length' => 0.0,
|
437
|
+
'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
|
438
|
+
'cop' => 3.0,
|
439
|
+
'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
|
440
|
+
'condenser_fan_pwr' => 330,
|
441
|
+
'condenser_fan_pwr_curve_name' => nil,
|
442
|
+
'space_names' =>
|
435
443
|
[
|
436
|
-
|
437
|
-
|
444
|
+
'Kitchen'
|
445
|
+
]
|
438
446
|
}
|
439
447
|
]
|
440
448
|
|
@@ -468,7 +476,7 @@ class OpenStudio::Model::Model
|
|
468
476
|
|
469
477
|
def add_door_infiltration(building_vintage,climate_zone)
|
470
478
|
# add extra infiltration for dining room door and attic (there is no attic in 'DOE Ref Pre-1980')
|
471
|
-
unless building_vintage == 'DOE Ref 1980-2004' or building_vintage == 'DOE Ref Pre-1980'
|
479
|
+
unless building_vintage == 'DOE Ref 1980-2004' or building_vintage == 'DOE Ref Pre-1980' or building_vintage == 'NECB 2011'
|
472
480
|
dining_space = self.getSpaceByName('Dining').get
|
473
481
|
attic_space = self.getSpaceByName('Attic').get
|
474
482
|
infiltration_diningdoor = OpenStudio::Model::SpaceInfiltrationDesignFlowRate.new(self)
|
@@ -482,14 +490,14 @@ class OpenStudio::Model::Model
|
|
482
490
|
elsif building_vintage == '90.1-2007'
|
483
491
|
case climate_zone
|
484
492
|
when 'ASHRAE 169-2006-1A', 'ASHRAE 169-2006-2A', 'ASHRAE 169-2006-2B', 'ASHRAE 169-2006-3A', 'ASHRAE 169-2006-3B',
|
485
|
-
|
493
|
+
'ASHRAE 169-2006-3C', 'ASHRAE 169-2006-4A', 'ASHRAE 169-2006-4B', 'ASHRAE 169-2006-4C'
|
486
494
|
infiltration_per_zone_diningdoor = 0.614474994
|
487
495
|
infiltration_diningdoor.setSchedule(add_schedule('RestaurantSitDown DOOR_INFIL_SCH'))
|
488
496
|
else
|
489
497
|
infiltration_per_zone_diningdoor = 0.389828222
|
490
498
|
infiltration_diningdoor.setSchedule(add_schedule('RestaurantSitDown VESTIBULE_DOOR_INFIL_SCH'))
|
491
499
|
end
|
492
|
-
elsif building_vintage == '90.1-2010' or '90.1-2013'
|
500
|
+
elsif building_vintage == '90.1-2010' or '90.1-2013'
|
493
501
|
case climate_zone
|
494
502
|
when 'ASHRAE 169-2006-1A', 'ASHRAE 169-2006-2A', 'ASHRAE 169-2006-2B', 'ASHRAE 169-2006-3A', 'ASHRAE 169-2006-3B', 'ASHRAE 169-2006-3C'
|
495
503
|
infiltration_per_zone_diningdoor = 0.614474994
|
@@ -617,14 +625,14 @@ class OpenStudio::Model::Model
|
|
617
625
|
thermostat = self.getThermostatSetpointDualSetpointByName(thermostat_name).get
|
618
626
|
case building_vintage
|
619
627
|
when '90.1-2004', '90.1-2007', '90.1-2010'
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
+
if climate_zone == 'ASHRAE 169-2006-2B' || climate_zone == 'ASHRAE 169-2006-1B' || climate_zone == 'ASHRAE 169-2006-3B'
|
629
|
+
case space_name
|
630
|
+
when 'Dining'
|
631
|
+
thermostat.setCoolingSetpointTemperatureSchedule(add_schedule("RestaurantSitDown CLGSETP_SCH_NO_OPTIMUM"))
|
632
|
+
when 'Kitchen'
|
633
|
+
thermostat.setCoolingSetpointTemperatureSchedule(add_schedule("RestaurantSitDown CLGSETP_KITCHEN_SCH_NO_OPTIMUM"))
|
634
|
+
end
|
635
|
+
end
|
628
636
|
end
|
629
637
|
end
|
630
638
|
end
|
@@ -649,7 +657,7 @@ class OpenStudio::Model::Model
|
|
649
657
|
|
650
658
|
def update_waterheater_loss_coefficient(building_vintage)
|
651
659
|
case building_vintage
|
652
|
-
when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
|
660
|
+
when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013', 'NECB 2011'
|
653
661
|
self.getWaterHeaterMixeds.sort.each do |water_heater|
|
654
662
|
if water_heater.name.to_s.include?("Booster")
|
655
663
|
water_heater.setOffCycleLossCoefficienttoAmbientTemperature(1.053159296)
|