openstudio-standards 0.2.15 → 0.2.16.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data/geometry/ASHRAEHighriseApartment.osm +0 -27
- data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
- data/data/standards/OpenStudio_Standards-ashrae_90_1_28Jan2022.xlsx +0 -0
- data/data/standards/test_performance_expected_dd_results.csv +710 -710
- data/lib/openstudio-standards/btap/btap_result.rb +2 -2
- data/lib/openstudio-standards/btap/reporting.rb +2 -2
- data/lib/openstudio-standards/btap/simmanager.rb +2 -2
- data/lib/openstudio-standards/hvac_sizing/Siz.ControllerOutdoorAir.rb +0 -54
- data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +11 -1
- data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.College.rb +26 -5
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +35 -16
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +23 -10
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +36 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +6 -6
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +0 -3
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +9 -3
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +2 -0
- data/lib/openstudio-standards/standards/Standards.Construction.rb +12 -6
- data/lib/openstudio-standards/standards/Standards.Model.rb +38 -7
- data/lib/openstudio-standards/standards/Standards.Space.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +7 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Model.rb +32 -11
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +22 -742
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_sets.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +19 -559
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_sets.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +19 -559
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_sets.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +7 -7
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +19 -559
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_sets.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +7 -7
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_properties.json +370 -910
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_sets.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.prototype_inputs.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.refrigeration_system.json +0 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +12 -12
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +19 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_properties.json +2380 -1300
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_sets.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.prototype_inputs.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_system.json +0 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +12 -12
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +140 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +1176 -312
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.construction_properties.json +172 -1132
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.construction_sets.json +14 -14
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.prototype_inputs.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +9 -9
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.construction_properties.json +180 -1140
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.construction_sets.json +14 -14
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.prototype_inputs.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +10 -10
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.construction_properties.json +9 -9
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.construction_properties.json +9 -9
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +12 -6
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +12 -6
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +16 -8
- data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +10 -20
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +209 -37
- data/lib/openstudio-standards/standards/necb/ECMS/loads.rb +1 -0
- data/lib/openstudio-standards/standards/necb/ECMS/pv_ground.rb +8 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +16 -9
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/HighriseApartment.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LowriseApartment.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/MidriseApartment.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +9 -5
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +10 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +9 -5
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +14 -8
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +14 -8
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +13 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +12 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +4 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +38 -19
- data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +2 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +15 -4
- data/lib/openstudio-standards/standards/necb/NECB2020/building_envelope.rb +10 -651
- data/lib/openstudio-standards/standards/necb/NECB2020/necb_2020.rb +8 -38
- data/lib/openstudio-standards/standards/necb/NECB2020/service_water_heating.rb +159 -0
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +41 -43
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +7 -4
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards.rb +1 -0
- metadata +4 -2
@@ -32,8 +32,10 @@ class NECB2011
|
|
32
32
|
system_data[:MinimumSystemAirFlowRatio] = 1.0
|
33
33
|
|
34
34
|
# System 2 Zone data
|
35
|
-
system_data[:
|
36
|
-
system_data[:
|
35
|
+
system_data[:ZoneCoolingDesignSupplyAirTemperatureInputMethod] = 'TemperatureDifference'
|
36
|
+
system_data[:ZoneCoolingDesignSupplyAirTemperatureDifference] = 11.0
|
37
|
+
system_data[:ZoneHeatingDesignSupplyAirTemperatureInputMethod] = 'TemperatureDifference'
|
38
|
+
system_data[:ZoneHeatingDesignSupplyAirTemperatureDifference] = 21.0
|
37
39
|
system_data[:ZoneCoolingSizingFactor] = 1.1
|
38
40
|
system_data[:ZoneHeatingSizingFactor] = 1.3
|
39
41
|
|
@@ -117,10 +119,12 @@ class NECB2011
|
|
117
119
|
|
118
120
|
# Set up zonal FC (ZoneHVAC,cooling coil, heating coil, fan) in each zone
|
119
121
|
zones.each do |zone|
|
120
|
-
# Zone sizing temperature
|
122
|
+
# Zone sizing temperature difference
|
121
123
|
sizing_zone = zone.sizingZone
|
122
|
-
sizing_zone.
|
123
|
-
sizing_zone.
|
124
|
+
sizing_zone.setZoneCoolingDesignSupplyAirTemperatureInputMethod(system_data[:ZoneCoolingDesignSupplyAirTemperatureInputMethod])
|
125
|
+
sizing_zone.setZoneCoolingDesignSupplyAirTemperatureDifference(system_data[:ZoneCoolingDesignSupplyAirTemperatureDifference])
|
126
|
+
sizing_zone.setZoneHeatingDesignSupplyAirTemperatureInputMethod(system_data[:ZoneHeatingDesignSupplyAirTemperatureInputMethod])
|
127
|
+
sizing_zone.setZoneHeatingDesignSupplyAirTemperatureDifference(system_data[:ZoneHeatingDesignSupplyAirTemperatureDifference])
|
124
128
|
sizing_zone.setZoneCoolingSizingFactor(system_data[:ZoneCoolingSizingFactor])
|
125
129
|
sizing_zone.setZoneHeatingSizingFactor(system_data[:ZoneHeatingSizingFactor])
|
126
130
|
|
@@ -29,8 +29,10 @@ class NECB2011
|
|
29
29
|
system_data[:CentralHeatingDesignSupplyAirHumidityRatio] = 0.0080
|
30
30
|
|
31
31
|
# System 3 Zone data
|
32
|
-
system_data[:
|
33
|
-
system_data[:
|
32
|
+
system_data[:ZoneCoolingDesignSupplyAirTemperatureInputMethod] = 'TemperatureDifference'
|
33
|
+
system_data[:ZoneCoolingDesignSupplyAirTemperatureDifference] = 11.0
|
34
|
+
system_data[:ZoneHeatingDesignSupplyAirTemperatureInputMethod] = 'TemperatureDifference'
|
35
|
+
system_data[:ZoneHeatingDesignSupplyAirTemperatureDifference] = 21.0
|
34
36
|
system_data[:SetpointManagerSingleZoneReheatSupplyTempMin] = 13.0
|
35
37
|
system_data[:SetpointManagerSingleZoneReheatSupplyTempMax] = 43.0
|
36
38
|
system_data[:ZoneDXCoolingSizingFactor] = 1.0
|
@@ -48,10 +50,12 @@ class NECB2011
|
|
48
50
|
system_data,
|
49
51
|
determine_control_zone(zones))
|
50
52
|
# Add Zone equipment
|
51
|
-
zones.each do |zone| # Zone sizing temperature
|
53
|
+
zones.each do |zone| # Zone sizing temperature difference
|
52
54
|
sizing_zone = zone.sizingZone
|
53
|
-
sizing_zone.
|
54
|
-
sizing_zone.
|
55
|
+
sizing_zone.setZoneCoolingDesignSupplyAirTemperatureInputMethod(system_data[:ZoneCoolingDesignSupplyAirTemperatureInputMethod])
|
56
|
+
sizing_zone.setZoneCoolingDesignSupplyAirTemperatureDifference(system_data[:ZoneCoolingDesignSupplyAirTemperatureDifference])
|
57
|
+
sizing_zone.setZoneHeatingDesignSupplyAirTemperatureInputMethod(system_data[:ZoneHeatingDesignSupplyAirTemperatureInputMethod])
|
58
|
+
sizing_zone.setZoneHeatingDesignSupplyAirTemperatureDifference(system_data[:ZoneHeatingDesignSupplyAirTemperatureDifference])
|
55
59
|
sizing_zone.setZoneCoolingSizingFactor(system_data[:ZoneCoolingSizingFactor])
|
56
60
|
sizing_zone.setZoneHeatingSizingFactor(system_data[:ZoneHeatingSizingFactor])
|
57
61
|
add_sys3_and_8_zone_equip(air_loop,
|
@@ -90,10 +94,12 @@ class NECB2011
|
|
90
94
|
air_loop = common_air_loop(model: model, system_data: system_data)
|
91
95
|
air_loop.setName("#{system_data[:name]} #{control_zone.name}")
|
92
96
|
|
93
|
-
# Zone sizing temperature
|
97
|
+
# Zone sizing temperature difference
|
94
98
|
sizing_zone = control_zone.sizingZone
|
95
|
-
sizing_zone.
|
96
|
-
sizing_zone.
|
99
|
+
sizing_zone.setZoneCoolingDesignSupplyAirTemperatureInputMethod(system_data[:ZoneCoolingDesignSupplyAirTemperatureInputMethod])
|
100
|
+
sizing_zone.setZoneCoolingDesignSupplyAirTemperatureDifference(system_data[:ZoneCoolingDesignSupplyAirTemperatureDifference])
|
101
|
+
sizing_zone.setZoneHeatingDesignSupplyAirTemperatureInputMethod(system_data[:ZoneHeatingDesignSupplyAirTemperatureInputMethod])
|
102
|
+
sizing_zone.setZoneHeatingDesignSupplyAirTemperatureDifference(system_data[:ZoneHeatingDesignSupplyAirTemperatureDifference])
|
97
103
|
sizing_zone.setZoneCoolingSizingFactor(system_data[:ZoneCoolingSizingFactor])
|
98
104
|
sizing_zone.setZoneHeatingSizingFactor(system_data[:ZoneHeatingSizingFactor])
|
99
105
|
|
@@ -54,8 +54,10 @@ class NECB2011
|
|
54
54
|
system_data[:CentralHeatingDesignSupplyAirHumidityRatio] = 0.0080
|
55
55
|
|
56
56
|
# System 3 Zone data
|
57
|
-
system_data[:
|
58
|
-
system_data[:
|
57
|
+
system_data[:ZoneCoolingDesignSupplyAirTemperatureInputMethod] = 'TemperatureDifference'
|
58
|
+
system_data[:ZoneCoolingDesignSupplyAirTemperatureDifference] = 11.0
|
59
|
+
system_data[:ZoneHeatingDesignSupplyAirTemperatureInputMethod] = 'TemperatureDifference'
|
60
|
+
system_data[:ZoneHeatingDesignSupplyAirTemperatureDifference] = 21.0
|
59
61
|
system_data[:SetpointManagerSingleZoneReheatSupplyTempMin] = 13.0
|
60
62
|
system_data[:SetpointManagerSingleZoneReheatSupplyTempMax] = 43.0
|
61
63
|
system_data[:ZoneDXCoolingSizingFactor] = 1.0
|
@@ -73,10 +75,12 @@ class NECB2011
|
|
73
75
|
system_data,
|
74
76
|
determine_control_zone(zones))
|
75
77
|
# Add Zone equipment
|
76
|
-
zones.each do |zone| # Zone sizing temperature
|
78
|
+
zones.each do |zone| # Zone sizing temperature difference
|
77
79
|
sizing_zone = zone.sizingZone
|
78
|
-
sizing_zone.
|
79
|
-
sizing_zone.
|
80
|
+
sizing_zone.setZoneCoolingDesignSupplyAirTemperatureInputMethod(system_data[:ZoneCoolingDesignSupplyAirTemperatureInputMethod])
|
81
|
+
sizing_zone.setZoneCoolingDesignSupplyAirTemperatureDifference(system_data[:ZoneCoolingDesignSupplyAirTemperatureDifference])
|
82
|
+
sizing_zone.setZoneHeatingDesignSupplyAirTemperatureInputMethod(system_data[:ZoneHeatingDesignSupplyAirTemperatureInputMethod])
|
83
|
+
sizing_zone.setZoneHeatingDesignSupplyAirTemperatureDifference(system_data[:ZoneHeatingDesignSupplyAirTemperatureDifference])
|
80
84
|
sizing_zone.setZoneCoolingSizingFactor(system_data[:ZoneCoolingSizingFactor])
|
81
85
|
sizing_zone.setZoneHeatingSizingFactor(system_data[:ZoneHeatingSizingFactor])
|
82
86
|
add_sys3_and_8_zone_equip(air_loop,
|
@@ -126,10 +130,12 @@ class NECB2011
|
|
126
130
|
air_loop = common_air_loop(model: model, system_data: system_data)
|
127
131
|
air_loop.setName("#{system_data[:name]} #{control_zone.name}")
|
128
132
|
|
129
|
-
# Zone sizing temperature
|
133
|
+
# Zone sizing temperature difference
|
130
134
|
sizing_zone = control_zone.sizingZone
|
131
|
-
sizing_zone.
|
132
|
-
sizing_zone.
|
135
|
+
sizing_zone.setZoneCoolingDesignSupplyAirTemperatureInputMethod(system_data[:ZoneCoolingDesignSupplyAirTemperatureInputMethod])
|
136
|
+
sizing_zone.setZoneCoolingDesignSupplyAirTemperatureDifference(system_data[:ZoneCoolingDesignSupplyAirTemperatureDifference])
|
137
|
+
sizing_zone.setZoneHeatingDesignSupplyAirTemperatureInputMethod(system_data[:ZoneHeatingDesignSupplyAirTemperatureInputMethod])
|
138
|
+
sizing_zone.setZoneHeatingDesignSupplyAirTemperatureDifference(system_data[:ZoneHeatingDesignSupplyAirTemperatureDifference])
|
133
139
|
sizing_zone.setZoneCoolingSizingFactor(system_data[:ZoneCoolingSizingFactor])
|
134
140
|
sizing_zone.setZoneHeatingSizingFactor(system_data[:ZoneHeatingSizingFactor])
|
135
141
|
|
@@ -29,7 +29,10 @@ class NECB2011
|
|
29
29
|
# zone
|
30
30
|
system_data[:SetpointManagerSingleZoneReheatSupplyTempMax] = 43.0
|
31
31
|
system_data[:SetpointManagerSingleZoneReheatSupplyTempMin] = 13.0
|
32
|
-
system_data[:
|
32
|
+
system_data[:ZoneCoolingDesignSupplyAirTemperatureInputMethod] = 'TemperatureDifference'
|
33
|
+
system_data[:ZoneCoolingDesignSupplyAirTemperatureDifference] = 11.0
|
34
|
+
system_data[:ZoneHeatingDesignSupplyAirTemperatureInputMethod] = 'TemperatureDifference'
|
35
|
+
system_data[:ZoneHeatingDesignSupplyAirTemperatureDifference] = 21.0
|
33
36
|
system_data[:ZoneHeatingDesignSupplyAirTemperature] = 43.0
|
34
37
|
system_data[:ZoneCoolingSizingFactor] = 1.1
|
35
38
|
system_data[:ZoneHeatingSizingFactor] = 1.3
|
@@ -62,10 +65,12 @@ class NECB2011
|
|
62
65
|
air_loop = common_air_loop(model: model, system_data: system_data)
|
63
66
|
air_loop.setName("#{system_data[:name]}_#{control_zone.name}")
|
64
67
|
|
65
|
-
# Zone sizing temperature
|
68
|
+
# Zone sizing temperature difference
|
66
69
|
sizing_zone = control_zone.sizingZone
|
67
|
-
sizing_zone.
|
68
|
-
sizing_zone.
|
70
|
+
sizing_zone.setZoneCoolingDesignSupplyAirTemperatureInputMethod(system_data[:ZoneCoolingDesignSupplyAirTemperatureInputMethod])
|
71
|
+
sizing_zone.setZoneCoolingDesignSupplyAirTemperatureDifference(system_data[:ZoneCoolingDesignSupplyAirTemperatureDifference])
|
72
|
+
sizing_zone.setZoneHeatingDesignSupplyAirTemperatureInputMethod(system_data[:ZoneHeatingDesignSupplyAirTemperatureInputMethod])
|
73
|
+
sizing_zone.setZoneCoolingDesignSupplyAirTemperatureDifference(system_data[:ZoneHeatingDesignSupplyAirTemperatureDifference])
|
69
74
|
sizing_zone.setZoneCoolingSizingFactor(system_data[:ZoneCoolingSizingFactor])
|
70
75
|
sizing_zone.setZoneHeatingSizingFactor(system_data[:ZoneHeatingSizingFactor])
|
71
76
|
|
@@ -130,8 +135,10 @@ class NECB2011
|
|
130
135
|
# heat_exchanger.addToNode(oa_node.get)
|
131
136
|
zones.each do |zone|
|
132
137
|
sizing_zone = zone.sizingZone
|
133
|
-
sizing_zone.
|
134
|
-
sizing_zone.
|
138
|
+
sizing_zone.setZoneCoolingDesignSupplyAirTemperatureInputMethod(system_data[:ZoneCoolingDesignSupplyAirTemperatureInputMethod])
|
139
|
+
sizing_zone.setZoneCoolingDesignSupplyAirTemperatureDifference(system_data[:ZoneCoolingDesignSupplyAirTemperatureDifference])
|
140
|
+
sizing_zone.setZoneHeatingDesignSupplyAirTemperatureInputMethod(system_data[:ZoneHeatingDesignSupplyAirTemperatureInputMethod])
|
141
|
+
sizing_zone.setZoneHeatingDesignSupplyAirTemperatureDifference(system_data[:ZoneHeatingDesignSupplyAirTemperatureDifference])
|
135
142
|
sizing_zone.setZoneCoolingSizingFactor(system_data[:ZoneCoolingSizingFactor])
|
136
143
|
sizing_zone.setZoneHeatingSizingFactor(system_data[:ZoneHeatingSizingFactor])
|
137
144
|
# Create a diffuser and attach the zone/diffuser pair to the air loop
|
@@ -33,8 +33,10 @@ class NECB2011
|
|
33
33
|
|
34
34
|
# zone data
|
35
35
|
system_data[:system_supply_air_temperature] = 13.0
|
36
|
-
system_data[:
|
37
|
-
system_data[:
|
36
|
+
system_data[:ZoneCoolingDesignSupplyAirTemperatureInputMethod] = 'TemperatureDifference'
|
37
|
+
system_data[:ZoneCoolingDesignSupplyAirTemperatureDifference] = 11.0
|
38
|
+
system_data[:ZoneHeatingDesignSupplyAirTemperatureInputMethod] = 'TemperatureDifference'
|
39
|
+
system_data[:ZoneHeatingDesignSupplyAirTemperatureDifference] = 21.0
|
38
40
|
system_data[:ZoneCoolingSizingFactor] = 1.1
|
39
41
|
system_data[:ZoneHeatingSizingFactor] = 1.3
|
40
42
|
system_data[:ZoneVAVMinFlowFactorPerFloorArea] = 0.002
|
@@ -110,8 +112,10 @@ class NECB2011
|
|
110
112
|
(BTAP::Geometry::BuildingStoreys.get_zones_from_storey(story) & zones).each do |zone|
|
111
113
|
# Zone sizing parameters
|
112
114
|
sizing_zone = zone.sizingZone
|
113
|
-
sizing_zone.
|
114
|
-
sizing_zone.
|
115
|
+
sizing_zone.setZoneCoolingDesignSupplyAirTemperatureInputMethod(system_data[:ZoneCoolingDesignSupplyAirTemperatureInputMethod])
|
116
|
+
sizing_zone.setZoneCoolingDesignSupplyAirTemperatureDifference(system_data[:ZoneCoolingDesignSupplyAirTemperatureDifference])
|
117
|
+
sizing_zone.setZoneHeatingDesignSupplyAirTemperatureInputMethod(system_data[:ZoneHeatingDesignSupplyAirTemperatureInputMethod])
|
118
|
+
sizing_zone.setZoneHeatingDesignSupplyAirTemperatureDifference(system_data[:ZoneHeatingDesignSupplyAirTemperatureDifference])
|
115
119
|
sizing_zone.setZoneCoolingSizingFactor(system_data[:ZoneCoolingSizingFactor])
|
116
120
|
sizing_zone.setZoneHeatingSizingFactor(system_data[:ZoneHeatingSizingFactor])
|
117
121
|
|
@@ -185,8 +189,10 @@ class NECB2011
|
|
185
189
|
system_6_data[:MinimumSystemAirFlowRatio] = 0.03
|
186
190
|
# zone data
|
187
191
|
system_6_data[:system_supply_air_temperature] = 13.0
|
188
|
-
system_6_data[:
|
189
|
-
system_6_data[:
|
192
|
+
system_6_data[:ZoneCoolingDesignSupplyAirTemperatureInputMethod] = 'TemperatureDifference'
|
193
|
+
system_6_data[:ZoneCoolingDesignSupplyAirTemperatureDifference] = 11.0
|
194
|
+
system_6_data[:ZoneHeatingDesignSupplyAirTemperatureInputMethod] = 'TemperatureDifference'
|
195
|
+
system_6_data[:ZoneHeatingDesignSupplyAirTemperatureDifference] = 21.0
|
190
196
|
system_6_data[:ZoneCoolingSizingFactor] = 1.1
|
191
197
|
system_6_data[:ZoneHeatingSizingFactor] = 1.3
|
192
198
|
system_6_data[:ZoneVAVMinFlowFactorPerFloorArea] = 0.002
|
@@ -1643,8 +1643,10 @@ class NECB2011
|
|
1643
1643
|
sizing_plant.setDesignLoopExitTemperature(7.0)
|
1644
1644
|
sizing_plant.setLoopDesignTemperatureDifference(6.0)
|
1645
1645
|
|
1646
|
-
# pump
|
1647
|
-
|
1646
|
+
# Note: pump of 'chilled water loop' has been changed to the variable one as the constant one caused fatal errors for LargeOffice-Yellowknife-NaturalGas for some ECMs and inputs.
|
1647
|
+
# Fatal error was: 'CheckForRunawayPlantTemps: Simulation terminated because of run away plant temperatures, too cold' OR '..., too hot' for the PlantLoop of 'Chilled Water Loop'.
|
1648
|
+
# Note that the variable speed pump has been already used for 'Hot Water Loop'.
|
1649
|
+
chw_pump = OpenStudio::Model::PumpVariableSpeed.new(model)
|
1648
1650
|
|
1649
1651
|
chiller1 = OpenStudio::Model::ChillerElectricEIR.new(model)
|
1650
1652
|
chiller2 = OpenStudio::Model::ChillerElectricEIR.new(model)
|
@@ -171,7 +171,7 @@ class NECB2011 < Standard
|
|
171
171
|
end
|
172
172
|
end
|
173
173
|
|
174
|
-
# This method is a wrapper to create the 16 archetypes easily. #
|
174
|
+
# This method is a wrapper to create the 16 archetypes easily. # 55 args
|
175
175
|
def model_create_prototype_model(template:,
|
176
176
|
building_type:,
|
177
177
|
epw_file:,
|
@@ -183,6 +183,7 @@ class NECB2011 < Standard
|
|
183
183
|
lights_scale: 1.0,
|
184
184
|
daylighting_type: 'NECB_Default',
|
185
185
|
ecm_system_name: 'NECB_Default',
|
186
|
+
ecm_system_zones_map_option: 'NECB_Default',
|
186
187
|
erv_package: 'NECB_Default',
|
187
188
|
boiler_eff: nil,
|
188
189
|
unitary_cop: nil,
|
@@ -223,8 +224,10 @@ class NECB2011 < Standard
|
|
223
224
|
oa_scale: nil,
|
224
225
|
infiltration_scale: nil,
|
225
226
|
output_variables: nil,
|
227
|
+
shw_scale: nil,
|
226
228
|
output_meters: nil,
|
227
|
-
airloop_economizer_type: nil
|
229
|
+
airloop_economizer_type: nil,
|
230
|
+
baseline_system_zones_map_option: nil)
|
228
231
|
|
229
232
|
model = load_building_type_from_library(building_type: building_type)
|
230
233
|
return model_apply_standard(model: model,
|
@@ -236,6 +239,7 @@ class NECB2011 < Standard
|
|
236
239
|
lights_scale: lights_scale,
|
237
240
|
daylighting_type: daylighting_type, # Two options: (1) 'NECB_Default', (2) 'add_daylighting_controls'
|
238
241
|
ecm_system_name: ecm_system_name,
|
242
|
+
ecm_system_zones_map_option: ecm_system_zones_map_option, # (1) 'NECB_Default' (2) 'one_sys_per_floor' (3) 'one_sys_per_bldg'
|
239
243
|
erv_package: erv_package,
|
240
244
|
boiler_eff: boiler_eff,
|
241
245
|
unitary_cop: unitary_cop,
|
@@ -259,9 +263,9 @@ class NECB2011 < Standard
|
|
259
263
|
fdwr_set: fdwr_set,
|
260
264
|
srr_set: srr_set,
|
261
265
|
nv_type: nv_type, # Two options: (1) nil/none/false/'NECB_Default', (2) 'add_nv'
|
262
|
-
nv_opening_fraction: nv_opening_fraction, # options: (1) nil/none/false (2) 'NECB_Default' (i.e. 0.1)
|
263
|
-
nv_temp_out_min: nv_temp_out_min, # options: (1) nil/none/false(2) 'NECB_Default' (i.e. 13.0 based on inputs from Michel Tardif re a real school in QC)
|
264
|
-
nv_delta_temp_in_out: nv_delta_temp_in_out, # options: (1) nil/none/false (2) 'NECB_Default' (i.e. 1.0 based on inputs from Michel Tardif re a real school in QC)
|
266
|
+
nv_opening_fraction: nv_opening_fraction, # options: (1) nil/none/false (2) 'NECB_Default' (i.e. 0.1), (3) opening fraction of windows, which can be a float number between 0.0 and 1.0
|
267
|
+
nv_temp_out_min: nv_temp_out_min, # options: (1) nil/none/false(2) 'NECB_Default' (i.e. 13.0 based on inputs from Michel Tardif re a real school in QC), (3) minimum outdoor air temperature (in Celsius) below which natural ventilation is shut down
|
268
|
+
nv_delta_temp_in_out: nv_delta_temp_in_out, # options: (1) nil/none/false (2) 'NECB_Default' (i.e. 1.0 based on inputs from Michel Tardif re a real school in QC), (3) temperature difference (in Celsius) between the indoor and outdoor air temperatures below which ventilation is shut down
|
265
269
|
scale_x: scale_x,
|
266
270
|
scale_y: scale_y,
|
267
271
|
scale_z: scale_z,
|
@@ -276,8 +280,11 @@ class NECB2011 < Standard
|
|
276
280
|
infiltration_scale: infiltration_scale,
|
277
281
|
chiller_type: chiller_type, # Options: (1) 'NECB_Default'/nil/'none'/false (i.e. do nothing), (2) e.g. 'VSD'
|
278
282
|
output_variables: output_variables,
|
283
|
+
shw_scale: shw_scale, # Options: (1) 'NECB_Default'/nil/'none'/false (i.e. do nothing), (2) a float number larger than 0.0
|
279
284
|
output_meters: output_meters,
|
280
|
-
airloop_economizer_type: airloop_economizer_type
|
285
|
+
airloop_economizer_type: airloop_economizer_type, # (1) 'NECB_Default'/nil/' (2) 'DifferentialEnthalpy' (3) 'DifferentialTemperature'
|
286
|
+
baseline_system_zones_map_option: baseline_system_zones_map_option # Three options: (1) 'NECB_Default'/'none'/nil (i.e. 'one_sys_per_bldg'), (2) 'one_sys_per_dwelling_unit', (3) 'one_sys_per_bldg'
|
287
|
+
)
|
281
288
|
|
282
289
|
end
|
283
290
|
|
@@ -302,6 +309,7 @@ class NECB2011 < Standard
|
|
302
309
|
lights_scale: 'NECB_Default',
|
303
310
|
daylighting_type: 'NECB_Default',
|
304
311
|
ecm_system_name: 'NECB_Default',
|
312
|
+
ecm_system_zones_map_option: 'NECB_Default',
|
305
313
|
erv_package: 'NECB_Default',
|
306
314
|
boiler_eff: nil,
|
307
315
|
furnace_eff: nil,
|
@@ -342,8 +350,10 @@ class NECB2011 < Standard
|
|
342
350
|
oa_scale: nil,
|
343
351
|
infiltration_scale: nil,
|
344
352
|
output_variables: nil,
|
353
|
+
shw_scale: nil,
|
345
354
|
output_meters: nil,
|
346
|
-
airloop_economizer_type: nil
|
355
|
+
airloop_economizer_type: nil,
|
356
|
+
baseline_system_zones_map_option: nil)
|
347
357
|
|
348
358
|
clean_and_scale_model(model: model, rotation_degrees: rotation_degrees, scale_x: scale_x, scale_y: scale_y, scale_z: scale_z)
|
349
359
|
fdwr_set = convert_arg_to_f(variable: fdwr_set, default: -1)
|
@@ -384,6 +394,7 @@ class NECB2011 < Standard
|
|
384
394
|
sizing_run_dir: sizing_run_dir,
|
385
395
|
dcv_type: dcv_type,
|
386
396
|
ecm_system_name: ecm_system_name,
|
397
|
+
ecm_system_zones_map_option: ecm_system_zones_map_option,
|
387
398
|
erv_package: erv_package,
|
388
399
|
boiler_eff: boiler_eff,
|
389
400
|
unitary_cop: unitary_cop,
|
@@ -400,7 +411,9 @@ class NECB2011 < Standard
|
|
400
411
|
pv_ground_azimuth_angle: pv_ground_azimuth_angle,
|
401
412
|
pv_ground_module_description: pv_ground_module_description,
|
402
413
|
chiller_type: chiller_type,
|
403
|
-
|
414
|
+
shw_scale: shw_scale,
|
415
|
+
airloop_economizer_type: airloop_economizer_type,
|
416
|
+
baseline_system_zones_map_option: baseline_system_zones_map_option)
|
404
417
|
self.set_output_variables(model: model, output_variables: output_variables)
|
405
418
|
self.set_output_meters(model: model, output_meters: output_meters)
|
406
419
|
|
@@ -453,6 +466,7 @@ class NECB2011 < Standard
|
|
453
466
|
sizing_run_dir:,
|
454
467
|
dcv_type: 'NECB_Default',
|
455
468
|
ecm_system_name: 'NECB_Default',
|
469
|
+
ecm_system_zones_map_option: 'NECB_Default',
|
456
470
|
erv_package: 'NECB_Default',
|
457
471
|
boiler_eff: nil,
|
458
472
|
furnace_eff: nil,
|
@@ -469,7 +483,9 @@ class NECB2011 < Standard
|
|
469
483
|
pv_ground_azimuth_angle:,
|
470
484
|
pv_ground_module_description:,
|
471
485
|
chiller_type: 'NECB_Default',
|
472
|
-
|
486
|
+
shw_scale:,
|
487
|
+
airloop_economizer_type: nil,
|
488
|
+
baseline_system_zones_map_option:)
|
473
489
|
|
474
490
|
# Create ECM object.
|
475
491
|
ecm = ECMS.new
|
@@ -477,10 +493,12 @@ class NECB2011 < Standard
|
|
477
493
|
# -------- Systems Layout-----------
|
478
494
|
|
479
495
|
# Create Default Systems.
|
480
|
-
apply_systems(model: model, primary_heating_fuel: primary_heating_fuel, sizing_run_dir: sizing_run_dir
|
496
|
+
apply_systems(model: model, primary_heating_fuel: primary_heating_fuel, sizing_run_dir: sizing_run_dir, shw_scale: shw_scale,
|
497
|
+
baseline_system_zones_map_option: baseline_system_zones_map_option)
|
481
498
|
|
482
499
|
# Apply new ECM system. Overwrite standard as required.
|
483
|
-
ecm.apply_system_ecm(model: model, ecm_system_name: ecm_system_name, template_standard: self, primary_heating_fuel: primary_heating_fuel
|
500
|
+
ecm.apply_system_ecm(model: model, ecm_system_name: ecm_system_name, template_standard: self, primary_heating_fuel: primary_heating_fuel,
|
501
|
+
ecm_system_zones_map_option: ecm_system_zones_map_option)
|
484
502
|
|
485
503
|
# Apply ERV equipment as required.
|
486
504
|
ecm.apply_erv_ecm(model: model, erv_package: erv_package)
|
@@ -525,14 +543,15 @@ class NECB2011 < Standard
|
|
525
543
|
|
526
544
|
# -------Ground-mounted PV panels----------------
|
527
545
|
# Apply ground-mounted PV panels as required.
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
546
|
+
if pv_ground_type == 'add_pv_ground'
|
547
|
+
ecm.apply_pv_ground(model: model,
|
548
|
+
pv_ground_type: pv_ground_type,
|
549
|
+
pv_ground_total_area_pv_panels_m2: pv_ground_total_area_pv_panels_m2,
|
550
|
+
pv_ground_tilt_angle: pv_ground_tilt_angle,
|
551
|
+
pv_ground_azimuth_angle: pv_ground_azimuth_angle,
|
552
|
+
pv_ground_module_description: pv_ground_module_description)
|
553
|
+
end
|
554
|
+
|
536
555
|
end
|
537
556
|
|
538
557
|
def apply_loads(model:,
|
@@ -215,8 +215,8 @@ class NECB2011
|
|
215
215
|
" AND ReportForString='Entire Facility' AND TableName='Annual and Peak Values - Electricity' AND RowName='Electricity:Facility'" \
|
216
216
|
" AND ColumnName='Electricity Maximum Value' AND Units='W'")
|
217
217
|
natural_gas_peak = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM tabulardatawithstrings WHERE ReportName='EnergyMeters'" \
|
218
|
-
" AND ReportForString='Entire Facility' AND TableName='Annual and Peak Values - Gas' AND RowName='
|
219
|
-
" AND ColumnName='Gas Maximum Value' AND Units='W'")
|
218
|
+
" AND ReportForString='Entire Facility' AND TableName='Annual and Peak Values - Natural Gas' AND RowName='NaturalGas:Facility'" \
|
219
|
+
" AND ColumnName='Natural Gas Maximum Value' AND Units='W'")
|
220
220
|
|
221
221
|
get_sql_tables_to_json(model)
|
222
222
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
class NECB2011
|
2
|
-
def model_add_swh(model:, swh_fueltype: 'DefaultFuel')
|
2
|
+
def model_add_swh(model:, swh_fueltype: 'DefaultFuel', shw_scale:)
|
3
3
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Started Adding Service Water Heating')
|
4
4
|
# Get default fuel based on epw location province.
|
5
5
|
if swh_fueltype == 'DefaultFuel'
|
@@ -8,7 +8,7 @@ class NECB2011
|
|
8
8
|
end
|
9
9
|
|
10
10
|
# Calculate the tank size and service water pump information
|
11
|
-
shw_sizing = auto_size_shw_capacity(model)
|
11
|
+
shw_sizing = auto_size_shw_capacity(model: model, shw_scale: shw_scale)
|
12
12
|
if shw_sizing['loop_peak_flow_rate_SI'] == 0
|
13
13
|
# Only add a shw_loop if at least one space calls for shw. If no space calls for shw put out a warning but do not
|
14
14
|
# add a shw loop.
|
@@ -228,7 +228,7 @@ class NECB2011
|
|
228
228
|
|
229
229
|
# This calculates the volume and capacity of one mixed tank that is assumed to service all shw in the building
|
230
230
|
# u is the tank insulation in W/(m^2*K), height_to_radius is the ratio of tank radius to tank height and is dimensionless
|
231
|
-
def auto_size_shw_capacity(model
|
231
|
+
def auto_size_shw_capacity(model:, u: 0.45, height_to_radius: 2, shw_scale: 'NECB_Default')
|
232
232
|
peak_flow_rate = 0
|
233
233
|
shw_space_types = []
|
234
234
|
space_peak_flows = []
|
@@ -247,6 +247,17 @@ class NECB2011
|
|
247
247
|
total_peak_flow_rate = 0
|
248
248
|
shw_spaces = []
|
249
249
|
shw_sched_names = []
|
250
|
+
|
251
|
+
##### Modify shw_scale if required
|
252
|
+
if shw_scale.instance_of?(String)
|
253
|
+
shw_scale = shw_scale.strip # remove leading or trailing whitespace in case users add them in shw_scale
|
254
|
+
end
|
255
|
+
if shw_scale == 'NECB_Default' or shw_scale.nil? or shw_scale == 'none' or shw_scale == false
|
256
|
+
shw_scale = 1.0
|
257
|
+
elsif shw_scale.instance_of?(String) # Convert a string to a float
|
258
|
+
shw_scale = shw_scale.to_f
|
259
|
+
end
|
260
|
+
|
250
261
|
# First go through all the spaces in the building and determine and determine their shw requirements
|
251
262
|
space_types_table = @standards_data['space_types']
|
252
263
|
model.getSpaces.sort.each do |space|
|
@@ -278,7 +289,7 @@ class NECB2011
|
|
278
289
|
# when defining water use equipment. When when water use equipment is assigned to spaces then the water use
|
279
290
|
# by the equipment is multiplied by the space multiplier. Note that there is a separate water use equipment
|
280
291
|
# multiplier as well which is different than the space (ultimately thermal zone) multiplier.
|
281
|
-
space_peak_flow_ind = data['service_water_heating_peak_flow_per_area'].to_f * space_area
|
292
|
+
space_peak_flow_ind = data['service_water_heating_peak_flow_per_area'].to_f * space_area * shw_scale
|
282
293
|
space_peak_flow = space_peak_flow_ind * space.multiplier
|
283
294
|
# space_peak_flows << space_peak_flow
|
284
295
|
# Add the peak shw flow rate for the space to the total for the entire building
|