openstudio-standards 0.1.3 → 0.1.4
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.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
@@ -1,9 +1,29 @@
|
|
1
1
|
|
2
2
|
# Extend the class to add Medium Office specific stuff
|
3
3
|
class OpenStudio::Model::Model
|
4
|
-
|
4
|
+
|
5
5
|
def define_space_type_map(building_type, building_vintage, climate_zone)
|
6
|
-
space_type_map =
|
6
|
+
space_type_map = nil
|
7
|
+
case building_vintage
|
8
|
+
when 'NECB 2011'
|
9
|
+
space_type_map ={
|
10
|
+
"Electrical/Mechanical" => ["Basement"],
|
11
|
+
"Corr. >= 2.4m wide" => ["Corridor_Flr_1", "Corridor_Flr_2", "Corridor_Flr_5", "Corridor_NW_Flr_3", "Corridor_NW_Flr_4", "Corridor_SE_Flr_3", "Corridor_SE_Flr_4"],
|
12
|
+
"Dining - bar lounge/leisure" => ["Dining_Flr_5"],
|
13
|
+
"Hospital - emergency" => ["ER_Exam1_Mult4_Flr_1", "ER_Exam3_Mult4_Flr_1", "ER_Trauma1_Flr_1", "ER_Trauma2_Flr_1", "ER_Triage_Mult4_Flr_1"],
|
14
|
+
"Hospital - nurses' station" => ["ER_NurseStn_Lobby_Flr_1", "ICU_NurseStn_Lobby_Flr_2", "NurseStn_Lobby_Flr_3", "NurseStn_Lobby_Flr_4", "NurseStn_Lobby_Flr_5", "OR_NurseStn_Lobby_Flr_2"],
|
15
|
+
"Hospital - patient room" => ["IC_PatRoom1_Mult5_Flr_2", "IC_PatRoom2_Flr_2", "IC_PatRoom3_Mult6_Flr_2", "PatRoom1_Mult10_Flr_3", "PatRoom1_Mult10_Flr_4", "PatRoom2_Flr_3", "PatRoom2_Flr_4", "PatRoom3_Mult10_Flr_3", "PatRoom3_Mult10_Flr_4", "PatRoom4_Flr_3", "PatRoom4_Flr_4", "PatRoom5_Mult10_Flr_3", "PatRoom5_Mult10_Flr_4", "PatRoom6_Flr_3", "PatRoom6_Flr_4", "PatRoom7_Mult10_Flr_3", "PatRoom7_Mult10_Flr_4", "PatRoom8_Flr_3", "PatRoom8_Flr_4"],
|
16
|
+
"Hospital - recovery" => ["ICU_Flr_2"],
|
17
|
+
"Food preparation" => ["Kitchen_Flr_5"],
|
18
|
+
"Lab - research" => ["Lab_Flr_3", "Lab_Flr_4"],
|
19
|
+
"Office - enclosed" => ["Lobby_Records_Flr_1", "Office1_Flr_5", "Office1_Mult4_Flr_1", "Office2_Mult5_Flr_5", "Office3_Flr_5", "Office4_Mult6_Flr_5"],
|
20
|
+
"Hospital - operating room" => ["OR1_Flr_2", "OR2_Mult5_Flr_2", "OR3_Flr_2", "OR4_Flr_2"],
|
21
|
+
"Hospital - physical therapy" => ["PhysTherapy_Flr_3"],
|
22
|
+
"Hospital - radiology/imaging" => ["Radiology_Flr_4"]
|
23
|
+
}
|
24
|
+
|
25
|
+
else
|
26
|
+
space_type_map = {
|
7
27
|
# 'Basement', 'ER_Exam1_Mult4_Flr_1', 'ER_Trauma1_Flr_1', 'ER_Exam3_Mult4_Flr_1', 'ER_Trauma2_Flr_1', 'ER_Triage_Mult4_Flr_1', 'Office1_Mult4_Flr_1', 'Lobby_Records_Flr_1', 'Corridor_Flr_1', 'ER_NurseStn_Lobby_Flr_1', 'OR1_Flr_2', 'OR2_Mult5_Flr_2', 'OR3_Flr_2', 'OR4_Flr_2', 'IC_PatRoom1_Mult5_Flr_2', 'IC_PatRoom2_Flr_2', 'IC_PatRoom3_Mult6_Flr_2', 'ICU_Flr_2', 'ICU_NurseStn_Lobby_Flr_2', 'Corridor_Flr_2', 'OR_NurseStn_Lobby_Flr_2', 'PatRoom1_Mult10_Flr_3', 'PatRoom2_Flr_3', 'PatRoom3_Mult10_Flr_3', 'PatRoom4_Flr_3', 'PatRoom5_Mult10_Flr_3', 'PhysTherapy_Flr_3', 'PatRoom6_Flr_3', 'PatRoom7_Mult10_Flr_3', 'PatRoom8_Flr_3', 'NurseStn_Lobby_Flr_3', 'Lab_Flr_3', 'Corridor_SE_Flr_3', 'Corridor_NW_Flr_3', 'PatRoom1_Mult10_Flr_4', 'PatRoom2_Flr_4', 'PatRoom3_Mult10_Flr_4', 'PatRoom4_Flr_4', 'PatRoom5_Mult10_Flr_4', 'Radiology_Flr_4', 'PatRoom6_Flr_4', 'PatRoom7_Mult10_Flr_4', 'PatRoom8_Flr_4', 'NurseStn_Lobby_Flr_4', 'Lab_Flr_4', 'Corridor_SE_Flr_4', 'Corridor_NW_Flr_4', 'Dining_Flr_5', 'NurseStn_Lobby_Flr_5', 'Kitchen_Flr_5', 'Office1_Flr_5', 'Office2_Mult5_Flr_5', 'Office3_Flr_5', 'Office4_Mult6_Flr_5', 'Corridor_Flr_5'
|
8
28
|
'Corridor' => ['Corridor_Flr_1', 'Corridor_Flr_2', 'Corridor_SE_Flr_3', 'Corridor_NW_Flr_3', 'Corridor_SE_Flr_4', 'Corridor_NW_Flr_4', 'Corridor_Flr_5'],
|
9
29
|
'Dining' => ['Dining_Flr_5', ],
|
@@ -19,116 +39,262 @@ class OpenStudio::Model::Model
|
|
19
39
|
'Lobby' => ['Lobby_Records_Flr_1', ],
|
20
40
|
'NurseStn' => ['OR_NurseStn_Lobby_Flr_2', 'NurseStn_Lobby_Flr_3', 'NurseStn_Lobby_Flr_4', 'NurseStn_Lobby_Flr_5', ],
|
21
41
|
'OR' => ['OR1_Flr_2', 'OR2_Mult5_Flr_2', 'OR3_Flr_2', 'OR4_Flr_2', ],
|
22
|
-
'Office' => ['Office1_Mult4_Flr_1', 'Office1_Flr_5', 'Office2_Mult5_Flr_5', 'Office3_Flr_5', 'Office4_Mult6_Flr_5',
|
23
|
-
# 'PatCorridor' => [],
|
24
|
-
'PatRoom' => ['PatRoom1_Mult10_Flr_3', 'PatRoom2_Flr_3', 'PatRoom3_Mult10_Flr_3', 'PatRoom4_Flr_3', 'PatRoom5_Mult10_Flr_3', 'PatRoom6_Flr_3',
|
25
|
-
|
26
|
-
|
42
|
+
'Office' => ['Office1_Mult4_Flr_1', 'Office1_Flr_5', 'Office2_Mult5_Flr_5', 'Office3_Flr_5', 'Office4_Mult6_Flr_5', ],
|
43
|
+
'Basement' => ['Basement',], # 'PatCorridor' => [],
|
44
|
+
'PatRoom' => ['PatRoom1_Mult10_Flr_3', 'PatRoom2_Flr_3', 'PatRoom3_Mult10_Flr_3', 'PatRoom4_Flr_3', 'PatRoom5_Mult10_Flr_3', 'PatRoom6_Flr_3',
|
45
|
+
'PatRoom7_Mult10_Flr_3', 'PatRoom8_Flr_3', 'PatRoom1_Mult10_Flr_4', 'PatRoom2_Flr_4', 'PatRoom3_Mult10_Flr_4', 'PatRoom4_Flr_4', 'PatRoom5_Mult10_Flr_4',
|
46
|
+
'PatRoom6_Flr_4', 'PatRoom7_Mult10_Flr_4', 'PatRoom8_Flr_4', ],
|
27
47
|
'PhysTherapy' => ['PhysTherapy_Flr_3', ],
|
28
|
-
'Radiology' => ['Radiology_Flr_4', ]
|
48
|
+
'Radiology' => ['Radiology_Flr_4', ] # total number of zones: 55 - equals to the IDF
|
29
49
|
}
|
50
|
+
end
|
30
51
|
return space_type_map
|
31
52
|
end
|
32
53
|
|
33
54
|
def define_hvac_system_map(building_type, building_vintage, climate_zone)
|
34
|
-
|
35
|
-
|
55
|
+
|
56
|
+
case building_vintage
|
57
|
+
when '90.1-2010', '90.1-2013'
|
58
|
+
exhaust_flow = 7200
|
59
|
+
when '90.1-2004', '90.1-2007'
|
60
|
+
exhaust_flow = 8000
|
61
|
+
when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
|
62
|
+
exhaust_flow = 3710
|
63
|
+
exhaust_flow_dining = 1589
|
64
|
+
end
|
65
|
+
|
66
|
+
case building_vintage
|
67
|
+
when '90.1-2010', '90.1-2013','90.1-2004', '90.1-2007'
|
68
|
+
system_to_space_map = [
|
69
|
+
{
|
36
70
|
'type' => 'VAV',
|
71
|
+
'name' => 'VAV_1',
|
37
72
|
'space_names' => [
|
38
|
-
'Basement', 'Office1_Mult4_Flr_1', 'Lobby_Records_Flr_1', 'Corridor_Flr_1', 'ER_NurseStn_Lobby_Flr_1',
|
73
|
+
'Basement', 'Office1_Mult4_Flr_1', 'Lobby_Records_Flr_1', 'Corridor_Flr_1', 'ER_NurseStn_Lobby_Flr_1',
|
39
74
|
'ICU_NurseStn_Lobby_Flr_2', 'Corridor_Flr_2', 'OR_NurseStn_Lobby_Flr_2'
|
40
75
|
]
|
41
|
-
|
42
|
-
|
76
|
+
},
|
77
|
+
{
|
43
78
|
'type' => 'VAV',
|
79
|
+
'name' => 'VAV_ER',
|
44
80
|
'space_names' => [
|
45
81
|
'ER_Exam1_Mult4_Flr_1', 'ER_Trauma1_Flr_1', 'ER_Exam3_Mult4_Flr_1', 'ER_Trauma2_Flr_1', 'ER_Triage_Mult4_Flr_1'
|
46
82
|
]
|
47
|
-
|
48
|
-
|
83
|
+
},
|
84
|
+
{
|
49
85
|
'type' => 'VAV',
|
86
|
+
'name' => 'VAV_OR',
|
50
87
|
'space_names' => [
|
51
88
|
'OR1_Flr_2', 'OR2_Mult5_Flr_2', 'OR3_Flr_2', 'OR4_Flr_2'
|
52
89
|
]
|
53
|
-
|
54
|
-
|
90
|
+
},
|
91
|
+
{
|
55
92
|
'type' => 'VAV',
|
93
|
+
'name' => 'VAV_ICU',
|
56
94
|
'space_names' => [
|
57
95
|
'IC_PatRoom1_Mult5_Flr_2', 'IC_PatRoom2_Flr_2', 'IC_PatRoom3_Mult6_Flr_2', 'ICU_Flr_2'
|
58
96
|
]
|
59
|
-
|
60
|
-
|
97
|
+
},
|
98
|
+
{
|
61
99
|
'type' => 'VAV',
|
100
|
+
'name' => 'VAV_PATRMS',
|
62
101
|
'space_names' => [
|
63
|
-
'PatRoom1_Mult10_Flr_3', 'PatRoom2_Flr_3', 'PatRoom3_Mult10_Flr_3', 'PatRoom4_Flr_3', 'PatRoom5_Mult10_Flr_3', 'PatRoom6_Flr_3',
|
64
|
-
'PatRoom7_Mult10_Flr_3', 'PatRoom8_Flr_3', 'PatRoom1_Mult10_Flr_4', 'PatRoom2_Flr_4', 'PatRoom3_Mult10_Flr_4', 'PatRoom4_Flr_4',
|
102
|
+
'PatRoom1_Mult10_Flr_3', 'PatRoom2_Flr_3', 'PatRoom3_Mult10_Flr_3', 'PatRoom4_Flr_3', 'PatRoom5_Mult10_Flr_3', 'PatRoom6_Flr_3',
|
103
|
+
'PatRoom7_Mult10_Flr_3', 'PatRoom8_Flr_3', 'PatRoom1_Mult10_Flr_4', 'PatRoom2_Flr_4', 'PatRoom3_Mult10_Flr_4', 'PatRoom4_Flr_4',
|
65
104
|
'PatRoom5_Mult10_Flr_4', 'PatRoom6_Flr_4', 'PatRoom7_Mult10_Flr_4', 'PatRoom8_Flr_4'
|
66
105
|
]
|
67
|
-
|
68
|
-
|
106
|
+
},
|
107
|
+
{
|
69
108
|
'type' => 'VAV',
|
70
|
-
'
|
71
|
-
'
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
109
|
+
'name' => 'VAV_2',
|
110
|
+
'space_names' => [
|
111
|
+
'PhysTherapy_Flr_3', 'NurseStn_Lobby_Flr_3', 'Corridor_SE_Flr_3', 'Corridor_NW_Flr_3', 'Radiology_Flr_4',
|
112
|
+
'NurseStn_Lobby_Flr_4', 'Corridor_SE_Flr_4', 'Corridor_NW_Flr_4', 'Dining_Flr_5', 'NurseStn_Lobby_Flr_5',
|
113
|
+
'Office1_Flr_5', 'Office2_Mult5_Flr_5', 'Office3_Flr_5', 'Office4_Mult6_Flr_5', 'Corridor_Flr_5'
|
114
|
+
]
|
115
|
+
},
|
116
|
+
{
|
77
117
|
'type' => 'VAV',
|
118
|
+
'name' => 'VAV_LABS',
|
78
119
|
'space_names' => [
|
79
120
|
'Lab_Flr_3', 'Lab_Flr_4'
|
80
121
|
]
|
81
|
-
|
82
|
-
|
122
|
+
},
|
123
|
+
{
|
83
124
|
'type' => 'CAV',
|
125
|
+
'name' => 'CAV_KITCHEN',
|
84
126
|
'space_names' => [
|
85
127
|
'Kitchen_Flr_5'
|
86
128
|
] # 55 spaces assigned.
|
87
|
-
},
|
88
|
-
{
|
89
|
-
'type' => 'Refrigeration',
|
90
|
-
'case_type' => 'Walkin Freezer',
|
91
|
-
'cooling_capacity_per_length' => 734,
|
92
|
-
'length' => 10.98,
|
93
|
-
'evaporator_fan_pwr_per_length' => 69,
|
94
|
-
'lighting_per_length' => 33,
|
95
|
-
'lighting_sch_name' => 'Hospital BLDG_LIGHT_SCH',
|
96
|
-
'defrost_pwr_per_length' => 364,
|
97
|
-
'restocking_sch_name' => 'Hospital Kitchen_Flr_5_Case:1_WALKINFREEZER_WalkInStockingSched',
|
98
|
-
'cop' => 1.5,
|
99
|
-
'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
|
100
|
-
'condenser_fan_pwr' => 1000,
|
101
|
-
'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
|
102
|
-
'space_names' =>
|
103
|
-
[
|
104
|
-
'Kitchen_Flr_5'
|
105
|
-
]
|
106
129
|
},
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
'
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
130
|
+
{
|
131
|
+
'type' => 'Exhaust Fan',
|
132
|
+
'name' => 'Kitchen_Flr_5 Exhaust Fan',
|
133
|
+
'availability_sch_name' => 'Hospital Kitchen_Exhaust_SCH',
|
134
|
+
'flow_rate' => OpenStudio.convert(exhaust_flow,'cfm','m^3/s').get,
|
135
|
+
'balanced_exhaust_fraction_schedule_name' => 'Hospital Kitchen Exhaust Fan Balanced Exhaust Fraction Schedule',
|
136
|
+
'space_names' =>
|
137
|
+
[
|
138
|
+
'Kitchen_Flr_5'
|
139
|
+
]
|
140
|
+
},
|
141
|
+
{
|
142
|
+
'type' => 'Refrigeration',
|
143
|
+
'case_type' => 'Walkin Freezer',
|
144
|
+
'cooling_capacity_per_length' => 734,
|
145
|
+
'length' => 10.98,
|
146
|
+
'evaporator_fan_pwr_per_length' => 69,
|
147
|
+
'lighting_per_length' => 33,
|
148
|
+
'lighting_sch_name' => 'Hospital BLDG_LIGHT_SCH',
|
149
|
+
'defrost_pwr_per_length' => 364,
|
150
|
+
'restocking_sch_name' => 'Hospital Kitchen_Flr_5_Case:1_WALKINFREEZER_WalkInStockingSched',
|
151
|
+
'cop' => 1.5,
|
152
|
+
'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
|
153
|
+
'condenser_fan_pwr' => 1000,
|
154
|
+
'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
|
155
|
+
'space_names' =>
|
156
|
+
[
|
157
|
+
'Kitchen_Flr_5'
|
158
|
+
]
|
159
|
+
},
|
160
|
+
{
|
161
|
+
'type' => 'Refrigeration',
|
162
|
+
'case_type' => 'Display Case',
|
163
|
+
'cooling_capacity_per_length' => 886.5,
|
164
|
+
'length' => 8.93,
|
165
|
+
'evaporator_fan_pwr_per_length' => 67,
|
166
|
+
'lighting_per_length' => 40,
|
167
|
+
'lighting_sch_name' => 'Hospital BLDG_LIGHT_SCH',
|
168
|
+
'defrost_pwr_per_length' => 0.0,
|
169
|
+
'restocking_sch_name' => 'Hospital Kitchen_Flr_5_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
|
170
|
+
'cop' => 3.0,
|
171
|
+
'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
|
172
|
+
'condenser_fan_pwr' => 1000,
|
173
|
+
'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
|
174
|
+
'space_names' =>
|
175
|
+
[
|
176
|
+
'Kitchen_Flr_5'
|
177
|
+
]
|
178
|
+
}
|
179
|
+
]
|
180
|
+
return system_to_space_map
|
181
|
+
when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
|
182
|
+
system_to_space_map = [
|
183
|
+
{
|
184
|
+
'type' => 'VAV',
|
185
|
+
'name' => 'CAV_1',
|
186
|
+
'space_names' => [
|
187
|
+
'ER_Exam1_Mult4_Flr_1', 'ER_Trauma1_Flr_1', 'ER_Exam3_Mult4_Flr_1', 'ER_Trauma2_Flr_1', 'ER_Triage_Mult4_Flr_1','IC_PatRoom1_Mult5_Flr_2',
|
188
|
+
'PatRoom1_Mult10_Flr_3','PatRoom5_Mult10_Flr_3', 'PatRoom7_Mult10_Flr_3', 'PatRoom3_Mult10_Flr_4', 'PatRoom5_Mult10_Flr_4',
|
189
|
+
'PatRoom6_Flr_4', 'PatRoom7_Mult10_Flr_4'
|
190
|
+
]
|
191
|
+
},
|
192
|
+
{
|
193
|
+
'type' => 'VAV',
|
194
|
+
'name' => 'CAV_2',
|
195
|
+
'space_names' => [
|
196
|
+
'OR1_Flr_2','OR2_Mult5_Flr_2','OR3_Flr_2','OR4_Flr_2','IC_PatRoom2_Flr_2','PatRoom2_Flr_3','PatRoom6_Flr_3','PatRoom8_Flr_3','PatRoom4_Flr_4'
|
197
|
+
]
|
198
|
+
},
|
199
|
+
{
|
200
|
+
'type' => 'VAV',
|
201
|
+
'name' => 'VAV_1',
|
202
|
+
'space_names' => [
|
203
|
+
'Office1_Mult4_Flr_1','Lobby_Records_Flr_1','Corridor_Flr_1','ER_NurseStn_Lobby_Flr_1','IC_PatRoom3_Mult6_Flr_2','ICU_NurseStn_Lobby_Flr_2',
|
204
|
+
'Corridor_Flr_2','OR_NurseStn_Lobby_Flr_2','PatRoom3_Mult10_Flr_3','Lab_Flr_3','PatRoom1_Mult10_Flr_4','PatRoom8_Flr_4'
|
205
|
+
]
|
206
|
+
},
|
207
|
+
{
|
208
|
+
'type' => 'VAV',
|
209
|
+
'name' => 'VAV_2',
|
210
|
+
'space_names' => [
|
211
|
+
'ICU_Flr_2',
|
212
|
+
'PatRoom4_Flr_3',
|
213
|
+
'PhysTherapy_Flr_3',
|
214
|
+
'NurseStn_Lobby_Flr_3',
|
215
|
+
'Corridor_SE_Flr_3',
|
216
|
+
'Corridor_NW_Flr_3',
|
217
|
+
'PatRoom2_Flr_4',
|
218
|
+
'Radiology_Flr_4',
|
219
|
+
'NurseStn_Lobby_Flr_4',
|
220
|
+
'Lab_Flr_4',
|
221
|
+
'Corridor_SE_Flr_4',
|
222
|
+
'Corridor_NW_Flr_4',
|
223
|
+
'Dining_Flr_5',
|
224
|
+
'NurseStn_Lobby_Flr_5',
|
225
|
+
'Kitchen_Flr_5',
|
226
|
+
'Office1_Flr_5',
|
227
|
+
'Office2_Mult5_Flr_5',
|
228
|
+
'Office3_Flr_5',
|
229
|
+
'Office4_Mult6_Flr_5',
|
230
|
+
'Corridor_Flr_5'
|
231
|
+
]
|
232
|
+
},
|
233
|
+
{
|
234
|
+
'type' => 'Exhaust Fan',
|
235
|
+
'name' => 'Kitchen_Flr_5 Exhaust Fan',
|
236
|
+
'availability_sch_name' => 'Hospital HVACOperationSchd',
|
237
|
+
'flow_rate' => OpenStudio.convert(exhaust_flow,'cfm','m^3/s').get,
|
238
|
+
'space_names' =>
|
239
|
+
[
|
240
|
+
'Kitchen_Flr_5'
|
241
|
+
]
|
242
|
+
},
|
243
|
+
{
|
244
|
+
'type' => 'Exhaust Fan',
|
245
|
+
'name' => 'Dining_Flr_5 Exhaust Fan',
|
246
|
+
'availability_sch_name' => 'Hospital HVACOperationSchd',
|
247
|
+
'flow_rate' => OpenStudio.convert(exhaust_flow_dining,'cfm','m^3/s').get,
|
248
|
+
'space_names' =>
|
249
|
+
[
|
250
|
+
'Dining_Flr_5'
|
251
|
+
]
|
252
|
+
},
|
253
|
+
{
|
254
|
+
'type' => 'Refrigeration',
|
255
|
+
'case_type' => 'Walkin Freezer',
|
256
|
+
'cooling_capacity_per_length' => 734,
|
257
|
+
'length' => 10.98,
|
258
|
+
'evaporator_fan_pwr_per_length' => 69,
|
259
|
+
'lighting_per_length' => 33,
|
260
|
+
'lighting_sch_name' => 'Hospital BLDG_LIGHT_SCH',
|
261
|
+
'defrost_pwr_per_length' => 364,
|
262
|
+
'restocking_sch_name' => 'Hospital Kitchen_Flr_5_Case:1_WALKINFREEZER_WalkInStockingSched',
|
263
|
+
'cop' => 1.5,
|
264
|
+
'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
|
265
|
+
'condenser_fan_pwr' => 1000,
|
266
|
+
'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
|
267
|
+
'space_names' =>
|
268
|
+
[
|
269
|
+
'Kitchen_Flr_5'
|
270
|
+
]
|
271
|
+
},
|
272
|
+
{
|
273
|
+
'type' => 'Refrigeration',
|
274
|
+
'case_type' => 'Display Case',
|
275
|
+
'cooling_capacity_per_length' => 886.5,
|
276
|
+
'length' => 8.93,
|
277
|
+
'evaporator_fan_pwr_per_length' => 67,
|
278
|
+
'lighting_per_length' => 40,
|
279
|
+
'lighting_sch_name' => 'Hospital BLDG_LIGHT_SCH',
|
280
|
+
'defrost_pwr_per_length' => 0.0,
|
281
|
+
'restocking_sch_name' => 'Hospital Kitchen_Flr_5_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
|
282
|
+
'cop' => 3.0,
|
283
|
+
'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
|
284
|
+
'condenser_fan_pwr' => 1000,
|
285
|
+
'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
|
286
|
+
'space_names' =>
|
287
|
+
[
|
288
|
+
'Kitchen_Flr_5'
|
289
|
+
]
|
125
290
|
}
|
126
|
-
|
127
|
-
|
291
|
+
]
|
292
|
+
return system_to_space_map
|
293
|
+
end
|
128
294
|
end
|
129
|
-
|
295
|
+
|
130
296
|
def define_space_multiplier
|
131
|
-
|
297
|
+
|
132
298
|
space_multiplier_map = {
|
133
299
|
'ER_Exam1_Mult4_Flr_1' => 4,
|
134
300
|
'ER_Exam3_Mult4_Flr_1' => 4,
|
@@ -137,47 +303,183 @@ class OpenStudio::Model::Model
|
|
137
303
|
'OR2_Mult5_Flr_2' => 5,
|
138
304
|
'IC_PatRoom1_Mult5_Flr_2' => 5,
|
139
305
|
'IC_PatRoom3_Mult6_Flr_2' => 6,
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
306
|
+
'PatRoom1_Mult10_Flr_3' => 10,
|
307
|
+
'PatRoom3_Mult10_Flr_3' => 10,
|
308
|
+
'PatRoom5_Mult10_Flr_3' => 10,
|
309
|
+
'PatRoom7_Mult10_Flr_3' => 10,
|
310
|
+
'PatRoom1_Mult10_Flr_4' => 10,
|
311
|
+
'PatRoom3_Mult10_Flr_4' => 10,
|
312
|
+
'PatRoom5_Mult10_Flr_4' => 10,
|
313
|
+
'PatRoom7_Mult10_Flr_4' => 10,
|
314
|
+
'Office2_Mult5_Flr_5' => 5,
|
315
|
+
'Office4_Mult6_Flr_5' => 6
|
150
316
|
}
|
151
317
|
return space_multiplier_map
|
152
318
|
end
|
153
|
-
|
154
|
-
|
155
|
-
|
319
|
+
|
320
|
+
|
156
321
|
def custom_hvac_tweaks(building_type, building_vintage, climate_zone, prototype_input)
|
157
|
-
|
322
|
+
|
323
|
+
OpenStudio::logFree(OpenStudio::Info, 'openstudio.model.Model', 'Started Adding HVAC')
|
324
|
+
|
325
|
+
system_to_space_map = define_hvac_system_map(building_type, building_vintage, climate_zone)
|
326
|
+
|
327
|
+
hot_water_loop = nil
|
328
|
+
self.getPlantLoops.each do |loop|
|
329
|
+
# If it has a boiler:hotwater, it is the correct loop
|
330
|
+
if loop.supplyComponents('OS:Boiler:HotWater'.to_IddObjectType).size > 0
|
331
|
+
hot_water_loop = loop
|
332
|
+
end
|
333
|
+
end
|
334
|
+
if hot_water_loop
|
335
|
+
case building_vintage
|
336
|
+
when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
|
337
|
+
space_names = ['ER_Exam3_Mult4_Flr_1','OR2_Mult5_Flr_2','ICU_Flr_2','PatRoom5_Mult10_Flr_4','Lab_Flr_3']
|
338
|
+
space_names.each do |space_name|
|
339
|
+
self.add_humidifier(space_name, building_vintage, hot_water_loop)
|
340
|
+
end
|
341
|
+
when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
|
342
|
+
space_names = ['ER_Exam3_Mult4_Flr_1','OR2_Mult5_Flr_2']
|
343
|
+
space_names.each do |space_name|
|
344
|
+
self.add_humidifier(space_name, building_vintage, hot_water_loop)
|
345
|
+
end
|
346
|
+
end
|
347
|
+
else
|
348
|
+
OpenStudio::logFree(OpenStudio::Warn, 'openstudio.model.Model', 'Could not find hot water loop to attach humidifier to.')
|
349
|
+
end
|
350
|
+
|
351
|
+
self.reset_kitchen_OA(building_vintage)
|
352
|
+
self.update_exhaust_fan_efficiency(building_vintage)
|
353
|
+
self.reset_or_room_vav_minimum_damper(prototype_input, building_vintage)
|
354
|
+
|
158
355
|
return true
|
159
|
-
|
160
356
|
end
|
161
|
-
|
357
|
+
|
162
358
|
def update_waterheater_loss_coefficient(building_vintage)
|
163
359
|
case building_vintage
|
164
360
|
when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
|
165
361
|
self.getWaterHeaterMixeds.sort.each do |water_heater|
|
166
|
-
water_heater.
|
167
|
-
|
362
|
+
if water_heater.name.to_s.include?("Booster")
|
363
|
+
water_heater.setOffCycleLossCoefficienttoAmbientTemperature(1.053159296)
|
364
|
+
water_heater.setOnCycleLossCoefficienttoAmbientTemperature(1.053159296)
|
365
|
+
else
|
366
|
+
water_heater.setOffCycleLossCoefficienttoAmbientTemperature(15.60100708)
|
367
|
+
water_heater.setOnCycleLossCoefficienttoAmbientTemperature(15.60100708)
|
368
|
+
end
|
168
369
|
end
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
370
|
+
end
|
371
|
+
end
|
372
|
+
|
172
373
|
def custom_swh_tweaks(building_type, building_vintage, climate_zone, prototype_input)
|
173
|
-
|
374
|
+
|
174
375
|
self.update_waterheater_loss_coefficient(building_vintage)
|
175
|
-
|
176
376
|
return true
|
177
|
-
|
377
|
+
|
178
378
|
end
|
179
379
|
|
180
|
-
|
181
|
-
|
380
|
+
def reset_kitchen_OA(building_vintage)
|
381
|
+
space_kitchen = self.getSpaceByName('Kitchen_Flr_5').get
|
382
|
+
ventilation = space_kitchen.designSpecificationOutdoorAir.get
|
383
|
+
ventilation.setOutdoorAirFlowperPerson(0)
|
384
|
+
ventilation.setOutdoorAirFlowperFloorArea(0)
|
385
|
+
case building_vintage
|
386
|
+
when '90.1-2010', '90.1-2013'
|
387
|
+
ventilation.setOutdoorAirFlowRate(3.398)
|
388
|
+
when '90.1-2004', '90.1-2007', 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
|
389
|
+
ventilation.setOutdoorAirFlowRate(3.776)
|
390
|
+
end
|
391
|
+
end
|
392
|
+
|
393
|
+
def update_exhaust_fan_efficiency(building_vintage)
|
394
|
+
case building_vintage
|
395
|
+
when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
|
396
|
+
self.getFanZoneExhausts.sort.each do |exhaust_fan|
|
397
|
+
exhaust_fan.setFanEfficiency(0.16)
|
398
|
+
exhaust_fan.setPressureRise(125)
|
399
|
+
end
|
400
|
+
when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
|
401
|
+
self.getFanZoneExhausts.sort.each do |exhaust_fan|
|
402
|
+
exhaust_fan.setFanEfficiency(0.338)
|
403
|
+
exhaust_fan.setPressureRise(125)
|
404
|
+
end
|
405
|
+
end
|
406
|
+
end
|
407
|
+
|
408
|
+
def add_humidifier(space_name, building_vintage, hot_water_loop)
|
409
|
+
space = self.getSpaceByName(space_name).get
|
410
|
+
zone = space.thermalZone.get
|
411
|
+
humidistat = OpenStudio::Model::ZoneControlHumidistat.new(self)
|
412
|
+
humidistat.setHumidifyingRelativeHumiditySetpointSchedule(self.add_schedule('Hospital MinRelHumSetSch'))
|
413
|
+
humidistat.setDehumidifyingRelativeHumiditySetpointSchedule(self.add_schedule('Hospital MaxRelHumSetSch'))
|
414
|
+
zone.setZoneControlHumidistat(humidistat)
|
415
|
+
|
416
|
+
self.getAirLoopHVACs.each do |air_loop|
|
417
|
+
if air_loop.thermalZones.include? zone
|
418
|
+
humidifier = OpenStudio::Model::HumidifierSteamElectric.new(self)
|
419
|
+
humidifier.setRatedCapacity(3.72E-5)
|
420
|
+
humidifier.setRatedPower(100000)
|
421
|
+
humidifier.setName("#{air_loop.name.get} Electric Steam Humidifier")
|
422
|
+
# get the water heating coil and add humidifier to the outlet of heating coil (right before fan)
|
423
|
+
htg_coil = nil
|
424
|
+
air_loop.supplyComponents.each do |equip|
|
425
|
+
if equip.to_CoilHeatingWater.is_initialized
|
426
|
+
htg_coil = equip.to_CoilHeatingWater.get
|
427
|
+
end
|
428
|
+
end
|
429
|
+
heating_coil_outlet_node = htg_coil.airOutletModelObject().get.to_Node.get
|
430
|
+
supply_outlet_node = air_loop.supplyOutletNode
|
431
|
+
humidifier.addToNode(heating_coil_outlet_node)
|
432
|
+
humidity_spm = OpenStudio::Model::SetpointManagerSingleZoneHumidityMinimum.new(self)
|
433
|
+
case building_vintage
|
434
|
+
when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
|
435
|
+
extra_elec_htg_coil = OpenStudio::Model::CoilHeatingElectric.new(self,self.alwaysOnDiscreteSchedule)
|
436
|
+
extra_elec_htg_coil.setName("#{space_name} Electric Htg Coil")
|
437
|
+
extra_water_htg_coil = OpenStudio::Model::CoilHeatingWater.new(self,self.alwaysOnDiscreteSchedule)
|
438
|
+
extra_water_htg_coil.setName("#{space_name} Water Htg Coil")
|
439
|
+
hot_water_loop.addDemandBranchForComponent(extra_water_htg_coil)
|
440
|
+
extra_elec_htg_coil.addToNode(supply_outlet_node)
|
441
|
+
extra_water_htg_coil.addToNode(supply_outlet_node)
|
442
|
+
end
|
443
|
+
# humidity_spm.addToNode(supply_outlet_node)
|
444
|
+
humidity_spm.addToNode(humidifier.outletModelObject().get.to_Node.get)
|
445
|
+
humidity_spm.setControlZone(zone)
|
446
|
+
end
|
447
|
+
end
|
448
|
+
end
|
449
|
+
|
450
|
+
def hospital_add_daylighting_controls(building_vintage)
|
451
|
+
space_names = ['Office1_Flr_5','Office3_Flr_5','Lobby_Records_Flr_1']
|
452
|
+
space_names.each do |space_name|
|
453
|
+
space = self.getSpaceByName(space_name).get
|
454
|
+
space.addDaylightingControls(building_vintage, false, false)
|
455
|
+
end
|
456
|
+
end
|
182
457
|
|
458
|
+
def reset_or_room_vav_minimum_damper(prototype_input, building_vintage)
|
459
|
+
case building_vintage
|
460
|
+
when '90.1-2004', '90.1-2007'
|
461
|
+
return true
|
462
|
+
when '90.1-2010', '90.1-2013'
|
463
|
+
self.getAirTerminalSingleDuctVAVReheats.sort.each do |airterminal|
|
464
|
+
airterminal_name = airterminal.name.get
|
465
|
+
if airterminal_name.include? "OR1" or airterminal_name.include? "OR2" or airterminal_name.include? "OR3" or airterminal_name.include? "OR4"
|
466
|
+
airterminal.setZoneMinimumAirFlowMethod('Scheduled')
|
467
|
+
airterminal.setMinimumAirFlowFractionSchedule(add_schedule("Hospital OR_MinSA_Sched"))
|
468
|
+
end
|
469
|
+
end
|
470
|
+
end
|
471
|
+
end
|
472
|
+
|
473
|
+
def modify_hospital_OAcontroller(building_vintage)
|
474
|
+
self.getAirLoopHVACs.each do |air_loop|
|
475
|
+
oa_sys = air_loop.airLoopHVACOutdoorAirSystem.get
|
476
|
+
oa_control = oa_sys.getControllerOutdoorAir
|
477
|
+
case air_loop.name.get
|
478
|
+
when 'VAV_ER', 'VAV_ICU', 'VAV_LABS', 'VAV_OR', 'VAV_PATRMS', 'CAV_1', 'CAV_2'
|
479
|
+
oa_control.setEconomizerControlType('NoEconomizer')
|
480
|
+
end
|
481
|
+
end
|
482
|
+
end
|
483
|
+
|
484
|
+
end
|
183
485
|
|