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.
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