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.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/data/geometry/ASHRAEHighriseApartment.osm +0 -27
  3. data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
  4. data/data/standards/OpenStudio_Standards-ashrae_90_1_28Jan2022.xlsx +0 -0
  5. data/data/standards/test_performance_expected_dd_results.csv +710 -710
  6. data/lib/openstudio-standards/btap/btap_result.rb +2 -2
  7. data/lib/openstudio-standards/btap/reporting.rb +2 -2
  8. data/lib/openstudio-standards/btap/simmanager.rb +2 -2
  9. data/lib/openstudio-standards/hvac_sizing/Siz.ControllerOutdoorAir.rb +0 -54
  10. data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +11 -1
  11. data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +1 -1
  12. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.College.rb +26 -5
  13. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +35 -16
  14. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +23 -10
  15. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +36 -0
  16. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +6 -6
  17. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +0 -3
  18. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +2 -2
  19. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +9 -3
  20. data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +2 -0
  21. data/lib/openstudio-standards/standards/Standards.Construction.rb +12 -6
  22. data/lib/openstudio-standards/standards/Standards.Model.rb +38 -7
  23. data/lib/openstudio-standards/standards/Standards.Space.rb +1 -1
  24. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +7 -0
  25. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Model.rb +32 -11
  26. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +22 -742
  27. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_sets.json +2 -2
  28. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +3 -3
  29. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +6 -6
  30. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +19 -559
  31. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_sets.json +2 -2
  32. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +3 -3
  33. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +6 -6
  34. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +19 -559
  35. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_sets.json +2 -2
  36. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +5 -5
  37. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +7 -7
  38. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +19 -559
  39. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_sets.json +2 -2
  40. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +5 -5
  41. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +7 -7
  42. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_properties.json +370 -910
  43. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_sets.json +2 -2
  44. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.prototype_inputs.json +6 -6
  45. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.refrigeration_system.json +0 -8
  46. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +12 -12
  47. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +19 -6
  48. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_properties.json +2380 -1300
  49. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_sets.json +2 -2
  50. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.prototype_inputs.json +6 -6
  51. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_system.json +0 -8
  52. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +12 -12
  53. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +140 -0
  54. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +1176 -312
  55. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.construction_properties.json +172 -1132
  56. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.construction_sets.json +14 -14
  57. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.prototype_inputs.json +2 -2
  58. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +9 -9
  59. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.construction_properties.json +180 -1140
  60. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.construction_sets.json +14 -14
  61. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.prototype_inputs.json +2 -2
  62. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +10 -10
  63. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.construction_properties.json +9 -9
  64. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.construction_properties.json +9 -9
  65. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +12 -6
  66. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +12 -6
  67. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +16 -8
  68. data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +10 -20
  69. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +209 -37
  70. data/lib/openstudio-standards/standards/necb/ECMS/loads.rb +1 -0
  71. data/lib/openstudio-standards/standards/necb/ECMS/pv_ground.rb +8 -6
  72. data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +16 -9
  73. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/HighriseApartment.osm +1 -1
  74. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LowriseApartment.osm +1 -1
  75. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/MidriseApartment.osm +1 -1
  76. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +9 -5
  77. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +10 -6
  78. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +9 -5
  79. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +14 -8
  80. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +14 -8
  81. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +13 -6
  82. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +12 -6
  83. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +4 -2
  84. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +38 -19
  85. data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +2 -2
  86. data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +15 -4
  87. data/lib/openstudio-standards/standards/necb/NECB2020/building_envelope.rb +10 -651
  88. data/lib/openstudio-standards/standards/necb/NECB2020/necb_2020.rb +8 -38
  89. data/lib/openstudio-standards/standards/necb/NECB2020/service_water_heating.rb +159 -0
  90. data/lib/openstudio-standards/standards/necb/common/btap_data.rb +41 -43
  91. data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +7 -4
  92. data/lib/openstudio-standards/version.rb +1 -1
  93. data/lib/openstudio-standards.rb +1 -0
  94. 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[:ZoneCoolingDesignSupplyAirTemperature] = 13.0
36
- system_data[:ZoneHeatingDesignSupplyAirTemperature] = 43.0
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.setZoneCoolingDesignSupplyAirTemperature(system_data[:ZoneCoolingDesignSupplyAirTemperature])
123
- sizing_zone.setZoneHeatingDesignSupplyAirTemperature(system_data[:ZoneHeatingDesignSupplyAirTemperature])
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[:ZoneCoolingDesignSupplyAirTemperature] = 13.0
33
- system_data[:ZoneHeatingDesignSupplyAirTemperature] = 43.0
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.setZoneCoolingDesignSupplyAirTemperature(system_data[:ZoneCoolingDesignSupplyAirTemperature])
54
- sizing_zone.setZoneHeatingDesignSupplyAirTemperature(system_data[:ZoneHeatingDesignSupplyAirTemperature])
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.setZoneCoolingDesignSupplyAirTemperature(system_data[:ZoneCoolingDesignSupplyAirTemperature])
96
- sizing_zone.setZoneHeatingDesignSupplyAirTemperature(system_data[:ZoneHeatingDesignSupplyAirTemperature])
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[:ZoneCoolingDesignSupplyAirTemperature] = 13.0
58
- system_data[:ZoneHeatingDesignSupplyAirTemperature] = 43.0
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.setZoneCoolingDesignSupplyAirTemperature(system_data[:ZoneCoolingDesignSupplyAirTemperature])
79
- sizing_zone.setZoneHeatingDesignSupplyAirTemperature(system_data[:ZoneHeatingDesignSupplyAirTemperature])
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.setZoneCoolingDesignSupplyAirTemperature(system_data[:ZoneCoolingDesignSupplyAirTemperature])
132
- sizing_zone.setZoneHeatingDesignSupplyAirTemperature(system_data[:ZoneHeatingDesignSupplyAirTemperature])
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[:ZoneCoolingDesignSupplyAirTemperature] = 13.0
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.setZoneCoolingDesignSupplyAirTemperature(system_data[:ZoneCoolingDesignSupplyAirTemperature])
68
- sizing_zone.setZoneHeatingDesignSupplyAirTemperature(system_data[:ZoneHeatingDesignSupplyAirTemperature])
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.setZoneCoolingDesignSupplyAirTemperature(system_data[:ZoneCoolingDesignSupplyAirTemperature])
134
- sizing_zone.setZoneHeatingDesignSupplyAirTemperature(system_data[:ZoneHeatingDesignSupplyAirTemperature])
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[:ZoneCoolingDesignSupplyAirTemperature] = 13.0
37
- system_data[:ZoneHeatingDesignSupplyAirTemperature] = 43.0
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.setZoneCoolingDesignSupplyAirTemperature(system_data[:ZoneCoolingDesignSupplyAirTemperature])
114
- sizing_zone.setZoneHeatingDesignSupplyAirTemperature(system_data[:ZoneHeatingDesignSupplyAirTemperature])
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[:ZoneCoolingDesignSupplyAirTemperature] = 13.0
189
- system_6_data[:ZoneHeatingDesignSupplyAirTemperature] = 43.0
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 = OpenStudio::Model::PumpConstantSpeed.new(model)
1647
- chw_pump = OpenStudio::Model::PumpConstantSpeed.new(model)
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. # 37 args
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) # (1) 'NECB_Default'/nil/' (2) 'DifferentialEnthalpy' (3) 'DifferentialTemperature'
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
- airloop_economizer_type: airloop_economizer_type)
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
- airloop_economizer_type: nil)
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
- return unless pv_ground_type == 'add_pv_ground'
529
-
530
- ecm.apply_pv_ground(model: model,
531
- pv_ground_type: pv_ground_type,
532
- pv_ground_total_area_pv_panels_m2: pv_ground_total_area_pv_panels_m2,
533
- pv_ground_tilt_angle: pv_ground_tilt_angle,
534
- pv_ground_azimuth_angle: pv_ground_azimuth_angle,
535
- pv_ground_module_description: pv_ground_module_description)
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='Gas:Facility'" \
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, u: 0.45, height_to_radius: 2)
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