openstudio-standards 0.2.15 → 0.2.16.rc1
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/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
|