openstudio-standards 0.8.3 → 0.8.4
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/lib/openstudio-standards/btap/costing/README.md +502 -0
- data/lib/openstudio-standards/btap/costing/btap_costing.rb +473 -0
- data/lib/openstudio-standards/btap/costing/btap_measure_helper.rb +359 -0
- data/lib/openstudio-standards/btap/costing/btap_workflow.rb +117 -0
- data/lib/openstudio-standards/btap/costing/common_paths.rb +78 -0
- data/lib/openstudio-standards/btap/costing/common_resources/ConstructionProperties.csv +52 -0
- data/lib/openstudio-standards/btap/costing/common_resources/Constructions.csv +37 -0
- data/lib/openstudio-standards/btap/costing/common_resources/construction_sets.csv +1270 -0
- data/lib/openstudio-standards/btap/costing/common_resources/constructions_glazing.csv +61 -0
- data/lib/openstudio-standards/btap/costing/common_resources/constructions_opaque.csv +2256 -0
- data/lib/openstudio-standards/btap/costing/common_resources/costs.csv +1904 -0
- data/lib/openstudio-standards/btap/costing/common_resources/costs_local_factors.csv +2315 -0
- data/lib/openstudio-standards/btap/costing/common_resources/hvac_vent_ahu.csv +925 -0
- data/lib/openstudio-standards/btap/costing/common_resources/lighting.csv +364 -0
- data/lib/openstudio-standards/btap/costing/common_resources/lighting_sets.csv +2667 -0
- data/lib/openstudio-standards/btap/costing/common_resources/locations.csv +75 -0
- data/lib/openstudio-standards/btap/costing/common_resources/materials_glazing.csv +35 -0
- data/lib/openstudio-standards/btap/costing/common_resources/materials_hvac.csv +1699 -0
- data/lib/openstudio-standards/btap/costing/common_resources/materials_lighting.csv +267 -0
- data/lib/openstudio-standards/btap/costing/common_resources/materials_opaque.csv +164 -0
- data/lib/openstudio-standards/btap/costing/copy_test_results_files_to_expected_results.rb +11 -0
- data/lib/openstudio-standards/btap/costing/cost_building_from_file.rb +136 -0
- data/lib/openstudio-standards/btap/costing/costing_database_wrapper.rb +177 -0
- data/lib/openstudio-standards/btap/costing/daylighting_sensor_control_costing.rb +353 -0
- data/lib/openstudio-standards/btap/costing/dcv_costing.rb +314 -0
- data/lib/openstudio-standards/btap/costing/dummy.epw +8768 -0
- data/lib/openstudio-standards/btap/costing/dummy.osm +5320 -0
- data/lib/openstudio-standards/btap/costing/envelope_costing.rb +284 -0
- data/lib/openstudio-standards/btap/costing/heating_cooling_costing.rb +2584 -0
- data/lib/openstudio-standards/btap/costing/led_lighting_costing.rb +155 -0
- data/lib/openstudio-standards/btap/costing/lighting_costing.rb +209 -0
- data/lib/openstudio-standards/btap/costing/mech_sizing.json +502 -0
- data/lib/openstudio-standards/btap/costing/neb_end_use_prices.csv +42 -0
- data/lib/openstudio-standards/btap/costing/necb_2011_spacetype_info.csv +225 -0
- data/lib/openstudio-standards/btap/costing/necb_reference_runs.csv +28705 -0
- data/lib/openstudio-standards/btap/costing/nv_costing.rb +547 -0
- data/lib/openstudio-standards/btap/costing/parallel_tests.rb +92 -0
- data/lib/openstudio-standards/btap/costing/pv_ground_costing.rb +687 -0
- data/lib/openstudio-standards/btap/costing/shw_costing.rb +705 -0
- data/lib/openstudio-standards/btap/costing/test_list.txt +17 -0
- data/lib/openstudio-standards/btap/costing/test_run_all_test_locally.rb +26 -0
- data/lib/openstudio-standards/btap/costing/test_run_costing_tests.rb +80 -0
- data/lib/openstudio-standards/btap/costing/ventilation_costing.rb +2616 -0
- data/lib/openstudio-standards/constructions/modify.rb +2 -1
- data/lib/openstudio-standards/standards/Standards.Model.rb +39 -9
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/ashrae_90_1_prm.UserData.rb +6 -1
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +2 -27
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +68 -27
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +64 -25
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +9 -14
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +46 -20
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +635 -248
- data/lib/openstudio-standards/standards/necb/NECB2011/data/constants.json +43 -7
- data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +7 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/HighriseApartmentMult.osm +14272 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/necb_2015_table_c1.json +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/space_types.json +437 -437
- data/lib/openstudio-standards/standards/necb/NECB2011/data/systems.json +516 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/systems_including_sys5.json +588 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_namer.rb +489 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +16 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +48 -5
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +2 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +35 -27
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +34 -23
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +8 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +42 -13
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +214 -25
- data/lib/openstudio-standards/standards/necb/NECB2011/system_fuels.rb +61 -1
- data/lib/openstudio-standards/standards/necb/NECB2015/data/space_types.json +636 -636
- data/lib/openstudio-standards/standards/necb/NECB2015/data/unitary_acs.json +38 -38
- data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +15 -6
- data/lib/openstudio-standards/standards/necb/NECB2017/data/space_types.json +636 -636
- data/lib/openstudio-standards/standards/necb/NECB2020/data/chillers.json +71 -71
- data/lib/openstudio-standards/standards/necb/README.md +343 -0
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +190 -28
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +14 -5
- data/lib/openstudio-standards/standards/necb/common/eccc_electric_grid_intensity_20250311.csv +14 -0
- data/lib/openstudio-standards/standards/necb/common/nir_gas_grid_intensity_20250311.csv +14 -0
- data/lib/openstudio-standards/standards/necb/common/system_types.yaml +0 -0
- data/lib/openstudio-standards/utilities/logging.rb +18 -14
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards/weather/modify.rb +2 -2
- data/lib/openstudio-standards.rb +12 -0
- metadata +53 -2
@@ -0,0 +1,489 @@
|
|
1
|
+
class NECB2011
|
2
|
+
|
3
|
+
def get_chiller_type_from_water_coil(cooling_coil_water: nil)
|
4
|
+
if cooling_coil_water
|
5
|
+
# Get the PlantLoop attached to the CoilCoolingWater
|
6
|
+
plant_loop = cooling_coil_water.plantLoop
|
7
|
+
# Initialize an array to hold the names of the ChillerElectricEIR objects
|
8
|
+
chiller_names = []
|
9
|
+
# Check if the PlantLoop is valid
|
10
|
+
if plant_loop.is_initialized
|
11
|
+
# Get the actual PlantLoop object
|
12
|
+
plant_loop = plant_loop.get
|
13
|
+
# Get the ChillerElectricEIR objects attached to the PlantLoop
|
14
|
+
chillers = plant_loop.supplyComponents(OpenStudio::Model::ChillerElectricEIR::iddObjectType)
|
15
|
+
chillers.each do |chiller|
|
16
|
+
chiller = chiller.to_ChillerElectricEIR.get
|
17
|
+
chiller_names << chiller.name.get
|
18
|
+
end #chillers
|
19
|
+
|
20
|
+
case chiller_names[0]
|
21
|
+
# Check if name contains ["Scroll","Centrifugal","RotaryScrew","Reciprocating","WaterCooled"]
|
22
|
+
when /Scroll/
|
23
|
+
chiller_type = 'scrl'
|
24
|
+
when /Centrifugal/
|
25
|
+
chiller_type = 'cent'
|
26
|
+
when /RotaryScrew/ , /Rotary Screw/
|
27
|
+
chiller_type = 'screw'
|
28
|
+
when /Reciprocating/
|
29
|
+
chiller_type = 'recip'
|
30
|
+
when /WaterCooled/
|
31
|
+
chiller_type = 'water'
|
32
|
+
else
|
33
|
+
raise("Chiller type not recognized #{chiller_names[0]}")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def detect_air_system_type(air_loop: nil , sys_abbr: nil , old_system_name: nil)
|
40
|
+
ref_system_desc = {
|
41
|
+
"sys_1" => "PSZ %s %s Coils and %s",
|
42
|
+
"sys_2" => "FPFC %s %s Coils with %s Chiller",
|
43
|
+
"sys_3" => "PSZ %s %s Coils and %s",
|
44
|
+
"sys_4" => "PSZ %s %s Coils and %s",
|
45
|
+
"sys_5" => "TPFC %s %s Coils with %s Chiller",
|
46
|
+
"sys_6" => "MZ BU %s %s Heating Coil %s Chiller and %s"
|
47
|
+
}
|
48
|
+
|
49
|
+
# AirLoopHVACUnitaryHeatPumpAirToAir
|
50
|
+
unitary_hp = air_loop.components.detect(proc {false}) { |equip| equip.to_AirLoopHVACUnitaryHeatPumpAirToAir.is_initialized()} ? air_loop.components.detect() { |equip| equip.to_AirLoopHVACUnitaryHeatPumpAirToAir.is_initialized()}.to_AirLoopHVACUnitaryHeatPumpAirToAir.get : false
|
51
|
+
unitary_heating_coil_elec = unitary_hp and unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.heatingCoil.to_CoilHeatingElectric.is_initialized()? unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.heatingCoil.to_CoilHeatingElectric.get : false
|
52
|
+
unitary_heating_coil_gas = unitary_hp and unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.heatingCoil.to_CoilHeatingGas.is_initialized()? unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.heatingCoil.to_CoilHeatingGas.get : false
|
53
|
+
unitary_heating_coil_ashp = unitary_hp and unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.heatingCoil.to_CoilHeatingDXSingleSpeed.is_initialized()? unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.heatingCoil.to_CoilHeatingDXSingleSpeed.get : false
|
54
|
+
unitary_sup_heating_coil_elec =( unitary_hp && unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.supplementalHeatingCoil.to_CoilHeatingElectric.is_initialized()) ? unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.supplementalHeatingCoil.to_CoilHeatingElectric.get : false
|
55
|
+
unitary_sup_heating_coil_gas = ( unitary_hp && unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.supplementalHeatingCoil.to_CoilHeatingGas.is_initialized()) ? unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.supplementalHeatingCoil.to_CoilHeatingGas.get : false
|
56
|
+
unitary_sup_heating_coil_ashp =( unitary_hp && unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.supplementalHeatingCoil.to_CoilHeatingDXSingleSpeed.is_initialized()) ? unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.supplementalHeatingCoil.to_CoilHeatingDXSingleSpeed.get : false
|
57
|
+
unitary_supply_fan_on_off = unitary_hp and unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.supplyAirFan.to_FanOnOff.is_initialized() ? unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.supplyAirFan.to_FanOnOff.get : false
|
58
|
+
|
59
|
+
# Main AirLoopHVAC Components
|
60
|
+
# Heating Coils
|
61
|
+
heating_coil_elect = air_loop.components.detect(proc {false}) { |equip| equip.to_CoilHeatingElectric.is_initialized } ? air_loop.components.detect() { |equip| equip.to_CoilHeatingElectric.is_initialized}.to_CoilHeatingElectric.get : false
|
62
|
+
heating_coil_ashp = air_loop.components.detect(proc {false}) { |equip| equip.to_CoilHeatingDXSingleSpeed.is_initialized and equip.to_CoilHeatingDXSingleSpeed.get.minimumOutdoorDryBulbTemperatureforCompressorOperation == -10} ? air_loop.components.detect() { |equip| equip.to_CoilHeatingDXSingleSpeed.is_initialized}.to_CoilHeatingDXSingleSpeed.get : false
|
63
|
+
heating_coil_ccashp = air_loop.components.detect(proc {false}) { |equip| equip.to_CoilHeatingDXSingleSpeed.is_initialized and equip.to_CoilHeatingDXSingleSpeed.get.minimumOutdoorDryBulbTemperatureforCompressorOperation == -25} ? air_loop.components.detect() { |equip| equip.to_CoilHeatingDXSingleSpeed.is_initialized}.to_CoilHeatingDXSingleSpeed.get : false
|
64
|
+
heating_coil_water = air_loop.components.detect(proc {false}) { |equip| equip.to_CoilHeatingWater.is_initialized } ? air_loop.components.detect() { |equip| equip.to_CoilHeatingWater.is_initialized}.to_CoilHeatingWater.get : false
|
65
|
+
heating_coil_gas = air_loop.components.detect(proc {false}) { |equip| equip.to_CoilHeatingGas.is_initialized } ? air_loop.components.detect() { |equip| equip.to_CoilHeatingGas.is_initialized}.to_CoilHeatingGas.get : false
|
66
|
+
# Cooling Coils
|
67
|
+
cooling_coil_ashp = air_loop.components.detect(proc {false}) { |equip| equip.to_CoilCoolingDXSingleSpeed.is_initialized and heating_coil_ashp}
|
68
|
+
cooling_coil_ccashp = air_loop.components.detect(proc {false}) { |equip| equip.to_CoilCoolingDXSingleSpeed.is_initialized and heating_coil_ccashp}
|
69
|
+
cooling_coil_dx = air_loop.components.detect(proc {false}) { |equip| equip.to_CoilCoolingDXSingleSpeed.is_initialized and (heating_coil_gas or heating_coil_elect or heating_coil_water)}
|
70
|
+
cooling_coil_water = air_loop.components.detect(proc {false}) { |equip| equip.to_CoilCoolingWater.is_initialized } ? air_loop.components.detect() { |equip| equip.to_CoilCoolingWater.is_initialized}.to_CoilCoolingWater.get : false
|
71
|
+
|
72
|
+
# MAU Chiller Type
|
73
|
+
chiller_type = get_chiller_type_from_water_coil(cooling_coil_water: cooling_coil_water)
|
74
|
+
|
75
|
+
# Zone Baseboard Heating.
|
76
|
+
zone_htg_b_elec = air_loop.thermalZones.first.respond_to?(:equipment) ? air_loop.thermalZones.first.equipment.detect(proc {false}) { |equip| equip.nameString.include?('Zone HVAC Baseboard Convective Electric') } : false
|
77
|
+
zone_htg_b_water = air_loop.thermalZones.first.respond_to?(:equipment) ? air_loop.thermalZones.first.equipment.detect(proc {false}) { |equip| equip.nameString.include?('Zone HVAC Baseboard Convective Water') } : false
|
78
|
+
|
79
|
+
# Zone VAV with Reheat.
|
80
|
+
zone_vav_rh = air_loop.components.detect(proc {false}) { |equip| equip.to_AirTerminalSingleDuctVAVReheat.is_initialized()} ? air_loop.components.detect() { |equip| equip.to_AirTerminalSingleDuctVAVReheat.is_initialized()}.to_AirTerminalSingleDuctVAVReheat.get : false
|
81
|
+
|
82
|
+
|
83
|
+
# Zone 2/4 Pipe Fan Coils.
|
84
|
+
zone_tpfc = false
|
85
|
+
zone_fpfc = false
|
86
|
+
if air_loop.thermalZones.first.respond_to?(:equipment)
|
87
|
+
fan_coil = air_loop.thermalZones.first.equipment.detect(proc {false}) { |equip| equip.to_ZoneHVACFourPipeFanCoil().is_initialized() }
|
88
|
+
if fan_coil
|
89
|
+
case fan_coil.to_ZoneHVACFourPipeFanCoil.get.coolingCoil.to_CoilCoolingWater.get.availabilitySchedule.nameString
|
90
|
+
when 'tpfc_clg_availability'
|
91
|
+
zone_tpfc = true
|
92
|
+
when OpenStudio::Model::Model.new.alwaysOnDiscreteSchedule.nameString
|
93
|
+
zone_fpfc = true
|
94
|
+
else
|
95
|
+
raise('unknown schedule type')
|
96
|
+
end
|
97
|
+
cooling_coil_water = air_loop.thermalZones.first.equipment.detect(proc {false}) { |equip| equip.to_ZoneHVACFourPipeFanCoil().is_initialized()}.to_ZoneHVACFourPipeFanCoil.get.coolingCoil.to_CoilCoolingWater.get
|
98
|
+
|
99
|
+
# If chiller was not detected, from MAU or RTU, then detect it from the fan coil.
|
100
|
+
chiller_type = get_chiller_type_from_water_coil(cooling_coil_water: cooling_coil_water) if not chiller_type
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
if air_loop.thermalZones.first.respond_to?(:equipment)
|
106
|
+
zone_htg_pthp = air_loop.thermalZones.first.equipment.detect(proc {false}) { |equip| equip.nameString.include?('Zone HVAC Packaged Terminal Heat Pump') }
|
107
|
+
zone_clg_ptac = air_loop.thermalZones.first.equipment.detect(proc {false}) { |equip| equip.nameString.include?('PTAC') }
|
108
|
+
zone_clg_pthp = air_loop.thermalZones.first.equipment.detect(proc {false}) { |equip| equip.nameString.include?('Zone HVAC Packaged Terminal Heat Pump') }
|
109
|
+
zone_rh_elec = air_loop.thermalZones.first.equipment.detect(proc {false}) { |equip| equip.nameString.include?('Air Terminal Single Duct Constant Volume Reheat') and equip.to_AirTerminalSingleDuctConstantVolumeReheat.get.reheatCoil.nameString.include?('Coil Heating Electric') }
|
110
|
+
zone_rh_gas = air_loop.thermalZones.first.equipment.detect(proc {false}) { |equip| equip.nameString.include?('Air Terminal Single Duct Constant Volume Reheat') and equip.to_AirTerminalSingleDuctConstantVolumeReheat.get.reheatCoil.nameString.include?('Coil Heating Gas') }
|
111
|
+
zone_rh_hw = air_loop.thermalZones.first.equipment.detect(proc {false}) { |equip| equip.nameString.include?('Air Terminal Single Duct Constant Volume Reheat') and equip.to_AirTerminalSingleDuctConstantVolumeReheat.get.reheatCoil.nameString.include?('Coil Heating Water') }
|
112
|
+
end
|
113
|
+
return_fan = air_loop.components.detect(proc {false}) { |equip| equip.nameString.include?('Fan') }
|
114
|
+
# Determine System Outdoor Air type.
|
115
|
+
oa_controller = air_loop.components.detect(proc {false}) { |equip| equip.nameString.include?('ControllerOutdoorAir') }
|
116
|
+
oa_system = air_loop.components.detect(proc {false}) { |equip| equip.nameString.include?('OutdoorAirSystem') }
|
117
|
+
# Determine System Heat Recovery type.
|
118
|
+
heat_recovery = air_loop.components.detect(proc {false}) { |equip| equip.nameString.include?('HeatExchangerAirToAirSensibleAndLatent') }
|
119
|
+
# Determine System Supply Fan type.
|
120
|
+
fans_vv = air_loop.components.select{ |equip| equip.to_FanVariableVolume.is_initialized()}
|
121
|
+
fans_cv = air_loop.components.select{ |equip| equip.to_FanConstantVolume.is_initialized()}
|
122
|
+
case fans_vv.size
|
123
|
+
when 1
|
124
|
+
supply_fan_vv = fans_vv[0].to_FanVariableVolume.get
|
125
|
+
return_fan_vv = false
|
126
|
+
when 2
|
127
|
+
return_fan_vv = fans_vv[0].to_FanVariableVolume.get
|
128
|
+
supply_fan_vv = fans_vv[1].to_FanVariableVolume.get
|
129
|
+
else
|
130
|
+
supply_fan_vv = false
|
131
|
+
return_fan_vv = false
|
132
|
+
end
|
133
|
+
case fans_cv.size
|
134
|
+
when 1
|
135
|
+
supply_fan_cv = fans_cv[0].to_FanConstantVolume.get
|
136
|
+
return_fan_cv = false
|
137
|
+
when 2
|
138
|
+
return_fan_cv = fans_cv[0].to_FanConstantVolume.get
|
139
|
+
supply_fan_cv = fans_cv[1].to_FanConstantVolume.get
|
140
|
+
else
|
141
|
+
supply_fan_cv = false
|
142
|
+
return_fan_cv = false
|
143
|
+
end
|
144
|
+
|
145
|
+
# System Name and assumptions
|
146
|
+
|
147
|
+
case sys_abbr
|
148
|
+
when "sys_1"
|
149
|
+
ref_sys = sys_abbr
|
150
|
+
oa='doas'
|
151
|
+
oa = 'mixed' if heating_coil_ashp or heating_coil_ccashp
|
152
|
+
when "sys_2"
|
153
|
+
ref_sys = sys_abbr
|
154
|
+
oa='doas'
|
155
|
+
when "sys_3"
|
156
|
+
ref_sys = sys_abbr
|
157
|
+
oa='mixed'
|
158
|
+
when "sys_5"
|
159
|
+
ref_sys = sys_abbr
|
160
|
+
oa='doas'
|
161
|
+
when "sys_4"
|
162
|
+
ref_sys = sys_abbr
|
163
|
+
oa='mixed'
|
164
|
+
when "sys_6"
|
165
|
+
ref_sys = sys_abbr
|
166
|
+
oa='mixed'
|
167
|
+
else
|
168
|
+
raise("System name not recognized")
|
169
|
+
end
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
# Determine if the system is a DOAS based on
|
174
|
+
# whether there is 100% OA in heating and cooling sizing.
|
175
|
+
puts "allOutdoorAirinCooling #{air_loop.sizingSystem.allOutdoorAirinCooling}"
|
176
|
+
puts "allOutdoorAirinHeating #{air_loop.sizingSystem.allOutdoorAirinHeating}"
|
177
|
+
puts "typeofLoadtoSizeOn #{air_loop.sizingSystem.typeofLoadtoSizeOn}"
|
178
|
+
|
179
|
+
|
180
|
+
|
181
|
+
|
182
|
+
|
183
|
+
# puts "heating_coil_elect: #{heating_coil_elect.nil?}"
|
184
|
+
# puts "heating_coil_ashp: #{heating_coil_ashp}"
|
185
|
+
# puts "heating_coil_ccashp: #{heating_coil_ccashp}"
|
186
|
+
# puts "heating_coil_water: #{heating_coil_water}"
|
187
|
+
# puts "cooling_coil_ashp: #{cooling_coil_ashp}"
|
188
|
+
# puts "cooling_coil_ccashp: #{cooling_coil_ccashp}"
|
189
|
+
# puts "cooling_coil_dx: #{cooling_coil_dx}"
|
190
|
+
# puts "cooling_coil_water: #{cooling_coil_water}"
|
191
|
+
# puts "heating_coil_gas: #{heating_coil_gas}"
|
192
|
+
# puts "zone_htg_b_elec: #{zone_htg_b_elec}"
|
193
|
+
# puts "zone_htg_b_water: #{zone_htg_b_water}"
|
194
|
+
# puts "zone_htg_tpfc: #{zone_htg_tpfc}"
|
195
|
+
# puts "zone_htg_fpfc: #{zone_htg_fpfc}"
|
196
|
+
# puts "zone_htg_pthp: #{zone_htg_pthp}"
|
197
|
+
# puts "zone_clg_tpfc: #{zone_clg_tpfc}"
|
198
|
+
# puts "zone_clg_fpfc: #{zone_clg_fpfc}"
|
199
|
+
# puts "zone_clg_ptac: #{zone_clg_ptac}"
|
200
|
+
# puts "zone_clg_pthp: #{zone_clg_pthp}"
|
201
|
+
# puts "return_fan: #{return_fan}"
|
202
|
+
# puts "oa_controller: #{oa_controller}"
|
203
|
+
# puts "oa_system: #{oa_system}"
|
204
|
+
# puts "heat_recovery: #{heat_recovery}"
|
205
|
+
# puts "supply_fan_vv: #{supply_fan_vv}"
|
206
|
+
# puts "return_fan_vv: #{return_fan_vv}"
|
207
|
+
# puts "supply_fan_cv: #{supply_fan_cv}"
|
208
|
+
# puts "return_fan_cv: #{return_fan_cv}"
|
209
|
+
puts "zone_rh_elec: #{zone_rh_elec}"
|
210
|
+
puts "zone_rh_gas: #{zone_rh_gas}"
|
211
|
+
# puts "unitary_hp: #{unitary_hp}"
|
212
|
+
# puts "unitary_heating_coil_elec: #{unitary_heating_coil_elec}"
|
213
|
+
# puts "unitary_heating_coil_gas: #{unitary_heating_coil_gas}"
|
214
|
+
# puts "unitary_heating_coil_ashp: #{unitary_heating_coil_ashp}"
|
215
|
+
# puts "unitary_supply_fan_on_off: #{unitary_supply_fan_on_off}"
|
216
|
+
# puts "zone_htg_b_elec: #{zone_htg_b_elec}"
|
217
|
+
# puts "zone_htg_b_water: #{zone_htg_b_water}"
|
218
|
+
|
219
|
+
|
220
|
+
|
221
|
+
|
222
|
+
|
223
|
+
# sys_htg or sh>?
|
224
|
+
sh_map = {
|
225
|
+
"sh>none" => 'None',
|
226
|
+
"sh>c-e" => 'Electric',
|
227
|
+
"sh>c-g" => 'Gas',
|
228
|
+
"sh>c-hw" => 'Hot Water',
|
229
|
+
"sh>ashp>c-e" => 'ASHP with Electric',
|
230
|
+
"sh>ashp>c-g" => 'ASHP with Gas',
|
231
|
+
"sh>ashp>c-hw" => 'ASHP with Hot Water',
|
232
|
+
"sh>ccashp>c-e" => 'CCASHP with Electric',
|
233
|
+
"sh>ccashp>c-g" => 'CCASHP with Gas',
|
234
|
+
"sh>ccashp>c-hw" => 'CCASHP with Hot Water'
|
235
|
+
}
|
236
|
+
sc_map = {
|
237
|
+
"sc>none" => 'None',
|
238
|
+
"sc>ashp" => 'ASHP',
|
239
|
+
"sc>ccashp" => 'CCASHP',
|
240
|
+
"sc>dx" => 'DX',
|
241
|
+
"sc>c-chw" => 'Chilled Water'
|
242
|
+
}
|
243
|
+
ssf_map = {
|
244
|
+
"ssf>none" => 'None',
|
245
|
+
"ssf>cv" => 'Constant Volume',
|
246
|
+
"ssf>vv" => 'Variable Volume'
|
247
|
+
}
|
248
|
+
zh_map = {
|
249
|
+
"zh>none" => 'None',
|
250
|
+
"zh>b-e" => 'Electric Baseboard',
|
251
|
+
"zh>b-hw" => 'Hot Water Baseboard',
|
252
|
+
"zh>tpfc" => 'TPFC',
|
253
|
+
"zh>fpfc" => 'FPFC',
|
254
|
+
"zh>pthp" => 'PTHP'
|
255
|
+
}
|
256
|
+
zc_map = {
|
257
|
+
"zc>none" => 'None',
|
258
|
+
"zc>tpfc" => 'TPFC',
|
259
|
+
"zc>fpfc" => 'FPFC',
|
260
|
+
"zc>ptac" => 'PTAC',
|
261
|
+
"zc>pthp" => 'PTHP'
|
262
|
+
}
|
263
|
+
chiller_map = {
|
264
|
+
"ch>none" => 'None',
|
265
|
+
"ch>scrl" => 'Scroll',
|
266
|
+
"ch>cent" => 'Centrifugal',
|
267
|
+
"ch>screw" => 'Rotary Screw',
|
268
|
+
"ch>recip" => 'Reciprocating'
|
269
|
+
}
|
270
|
+
srf_map = {
|
271
|
+
"srf>none" => 'None',
|
272
|
+
"srf>cv" => 'Constant Volume',
|
273
|
+
"srf>vv" => 'Variable Volume'
|
274
|
+
}
|
275
|
+
zrh_map = {
|
276
|
+
"zrh>none" => 'None',
|
277
|
+
"zrh>e" => 'Electric',
|
278
|
+
"zrh>g" => 'Gas',
|
279
|
+
"zrh>hw" => 'Hot Water'
|
280
|
+
}
|
281
|
+
# Unitary Heating Coil
|
282
|
+
uhc_map = {
|
283
|
+
"uhc>none" => 'None',
|
284
|
+
"uhc>e" => 'Electric',
|
285
|
+
"uhc>g" => 'Gas',
|
286
|
+
}
|
287
|
+
|
288
|
+
# Unitary Supplemental Heating Coil
|
289
|
+
ushc_map = {
|
290
|
+
"ushc>none" => 'None',
|
291
|
+
"ushc>e" => 'Electric',
|
292
|
+
"ushc>g" => 'Gas',
|
293
|
+
}
|
294
|
+
|
295
|
+
# Unitary Supplemental Heating Coil
|
296
|
+
if unitary_sup_heating_coil_elec
|
297
|
+
ushc = 'ushc>e'
|
298
|
+
elsif unitary_sup_heating_coil_gas
|
299
|
+
ushc = 'ushc>g'
|
300
|
+
else
|
301
|
+
ushc = 'ushc>none'
|
302
|
+
end
|
303
|
+
|
304
|
+
# Unitary Heating Coil
|
305
|
+
if unitary_heating_coil_elec
|
306
|
+
uhc = 'uhc>e'
|
307
|
+
elsif unitary_heating_coil_gas
|
308
|
+
uhc = 'uhc>g'
|
309
|
+
elsif unitary_heating_coil_ashp
|
310
|
+
uhc = 'uhc>ashp'
|
311
|
+
else
|
312
|
+
uhc = 'uhc>none'
|
313
|
+
end
|
314
|
+
|
315
|
+
# Zone Reheat
|
316
|
+
if zone_rh_gas
|
317
|
+
zrh = 'zrh>g'
|
318
|
+
elsif zone_rh_elec
|
319
|
+
zrh = 'zrh>e'
|
320
|
+
elsif zone_rh_hw
|
321
|
+
zrh = 'zrh>hw'
|
322
|
+
else
|
323
|
+
zrh = 'zrh>none'
|
324
|
+
end
|
325
|
+
|
326
|
+
if heating_coil_elect
|
327
|
+
sh = 'sh>c-e'
|
328
|
+
elsif heating_coil_ashp or unitary_hp
|
329
|
+
sh = 'sh>ashp'
|
330
|
+
if zone_rh_gas or unitary_sup_heating_coil_gas
|
331
|
+
sh += '>c-g'
|
332
|
+
elsif zone_rh_elec or unitary_sup_heating_coil_elec
|
333
|
+
sh += '>c-e'
|
334
|
+
elsif zone_rh_hw
|
335
|
+
sh += '>c-hw'
|
336
|
+
end
|
337
|
+
elsif heating_coil_ccashp
|
338
|
+
sh = 'sh>ccashp'
|
339
|
+
if zone_rh_gas or unitary_sup_heating_coil_gas
|
340
|
+
sh += '>c-g'
|
341
|
+
elsif zone_rh_elec or unitary_sup_heating_coil_elec
|
342
|
+
sh += '>c-e'
|
343
|
+
elsif zone_rh_hw
|
344
|
+
sh += '>c-hw'
|
345
|
+
end
|
346
|
+
elsif heating_coil_water
|
347
|
+
sh = 'sh>c-hw'
|
348
|
+
elsif heating_coil_gas
|
349
|
+
sh = 'sh>c-g'
|
350
|
+
else
|
351
|
+
sh = 'sh>none'
|
352
|
+
end
|
353
|
+
|
354
|
+
# sys_clg or sc>?
|
355
|
+
|
356
|
+
if cooling_coil_ashp or unitary_hp
|
357
|
+
sc = 'sc>ashp'
|
358
|
+
elsif cooling_coil_ccashp
|
359
|
+
sc = 'sc>ccashp'
|
360
|
+
elsif cooling_coil_dx
|
361
|
+
sc = 'sc>dx'
|
362
|
+
elsif cooling_coil_water
|
363
|
+
sc = 'sc>c-chw'
|
364
|
+
else
|
365
|
+
sc = 'sc>none'
|
366
|
+
end
|
367
|
+
|
368
|
+
# sys_sf or ssf>?
|
369
|
+
if supply_fan_cv or unitary_supply_fan_on_off
|
370
|
+
ssf = 'ssf>cv'
|
371
|
+
elsif supply_fan_vv
|
372
|
+
ssf = 'ssf>vv'
|
373
|
+
else
|
374
|
+
ssf = 'ssf>none'
|
375
|
+
end
|
376
|
+
|
377
|
+
|
378
|
+
if return_fan_cv
|
379
|
+
srf = 'srf>cv'
|
380
|
+
elsif return_fan_vv
|
381
|
+
srf = 'srf>vv'
|
382
|
+
else
|
383
|
+
srf = 'srf>none'
|
384
|
+
end
|
385
|
+
|
386
|
+
# zone_htg or zh>?
|
387
|
+
if zone_htg_b_elec
|
388
|
+
zh = 'zh>b-e'
|
389
|
+
elsif zone_htg_b_water
|
390
|
+
zh = 'zh>b-hw'
|
391
|
+
elsif zone_tpfc
|
392
|
+
zh = 'zh>tpfc'
|
393
|
+
elsif zone_fpfc
|
394
|
+
zh = 'zh>fpfc'
|
395
|
+
elsif zone_htg_pthp
|
396
|
+
zh = 'zh>pthp'
|
397
|
+
else
|
398
|
+
zh = 'zh>none'
|
399
|
+
end
|
400
|
+
|
401
|
+
if zone_tpfc
|
402
|
+
zc = 'zc>tpfc'
|
403
|
+
elsif zone_fpfc
|
404
|
+
zc = 'zc>fpfc'
|
405
|
+
elsif zone_clg_ptac
|
406
|
+
zc = 'zc>ptac'
|
407
|
+
elsif zone_clg_pthp
|
408
|
+
zc = 'zc>pthp'
|
409
|
+
else
|
410
|
+
zc = 'zc>none'
|
411
|
+
end
|
412
|
+
|
413
|
+
# Chiller type
|
414
|
+
if chiller_type
|
415
|
+
chiller = "ch>#{chiller_type}"
|
416
|
+
else
|
417
|
+
chiller = "ch>none"
|
418
|
+
end
|
419
|
+
|
420
|
+
|
421
|
+
name =""
|
422
|
+
desc =""
|
423
|
+
# sh and sc are reversed for system 6
|
424
|
+
name = "#{ref_sys}|#{oa}|shr>none|#{sc}|#{sh}|#{ssf}|#{zh}|#{zc}|#{srf}|"
|
425
|
+
fixed_name = name
|
426
|
+
air_unit_type = oa == "mixed" ? 'RTU' : 'MAU'
|
427
|
+
case ref_sys
|
428
|
+
when "sys_1"
|
429
|
+
# Air Loop Coils
|
430
|
+
coils = ""
|
431
|
+
# if heating and cooling coils are the same, only list it once
|
432
|
+
if sh_map[sh] == sc_map[sc]
|
433
|
+
coils = "#{sh_map[sh]}"
|
434
|
+
else
|
435
|
+
coils = "#{sh_map[sh]} and #{sc_map[sc]}"
|
436
|
+
end
|
437
|
+
zone_system = "#{zh_map[zh]}"
|
438
|
+
zone_system += " with #{zc_map[zc]}" if zc_map[zc] != 'None'
|
439
|
+
# If reheating is present, add it to the zone system name
|
440
|
+
if zrh_map[zrh] != 'None'
|
441
|
+
zone_system += " with #{zrh_map[zrh]} Reheat"
|
442
|
+
end
|
443
|
+
desc= ref_system_desc[ref_sys] % [air_unit_type,coils,zone_system]
|
444
|
+
when "sys_2"
|
445
|
+
desc= ref_system_desc[ref_sys] % [air_unit_type,sc_map[sc],chiller_map[chiller]]
|
446
|
+
when "sys_3"
|
447
|
+
coils = ""
|
448
|
+
# if heating and cooling coils are the same, only list it once
|
449
|
+
if sh_map[sh] == sc_map[sc]
|
450
|
+
coils = "#{sh_map[sh]}"
|
451
|
+
else
|
452
|
+
coils = "#{sh_map[sh]} and #{sc_map[sc]}"
|
453
|
+
end
|
454
|
+
if ushc_map[ushc] != 'None'
|
455
|
+
coils += " with #{ushc_map[ushc]} Supp. Heat"
|
456
|
+
end
|
457
|
+
zone_system = "#{zh_map[zh]}"
|
458
|
+
zone_system += " with #{zc_map[zc]}" if zc_map[zc] != 'None'
|
459
|
+
desc= ref_system_desc[ref_sys] % [air_unit_type,coils,zone_system]
|
460
|
+
when "sys_4"
|
461
|
+
coils = ""
|
462
|
+
# if heating and cooling coils are the same, only list it once
|
463
|
+
if sh_map[sh] == sc_map[sc]
|
464
|
+
coils = "#{sh_map[sh]}"
|
465
|
+
else
|
466
|
+
coils = "#{sh_map[sh]} and #{sc_map[sc]}"
|
467
|
+
end
|
468
|
+
if ushc_map[ushc] != 'None'
|
469
|
+
coils += " with #{ushc_map[ushc]} Supp. Heat"
|
470
|
+
end
|
471
|
+
zone_system = "#{zh_map[zh]}"
|
472
|
+
zone_system += " with #{zc_map[zc]}" if zc_map[zc] != 'None'
|
473
|
+
desc= ref_system_desc[ref_sys] % [air_unit_type,coils,zone_system]
|
474
|
+
when "sys_5"
|
475
|
+
desc= ref_system_desc[ref_sys] % [air_unit_type,sc_map[sc],chiller_map[chiller]]
|
476
|
+
when "sys_6"
|
477
|
+
zone_system = "#{zh_map[zh]}"
|
478
|
+
zone_system += " with #{zc_map[zc]}" if zc_map[zc] != 'None'
|
479
|
+
desc= ref_system_desc[ref_sys] % [air_unit_type, sh_map[sh],chiller_map[chiller], zone_system]
|
480
|
+
fixed_name = "#{ref_sys}|#{oa}|shr>none|#{sh}|#{sc}|#{ssf}|#{zh}|#{zc}|#{srf}|"
|
481
|
+
else
|
482
|
+
|
483
|
+
end
|
484
|
+
|
485
|
+
#
|
486
|
+
|
487
|
+
return old_system_name, fixed_name, name, desc
|
488
|
+
end
|
489
|
+
end
|
@@ -110,14 +110,18 @@ class NECB2011
|
|
110
110
|
#end
|
111
111
|
# MAU Heating type selection.
|
112
112
|
raise("Flag 'necb_reference_hp' is true while 'mau_heating_coil_type' is not set to type DX") if (necb_reference_hp && (mau_heating_coil_type != 'DX'))
|
113
|
-
if mau_heating_coil_type == 'Electric' # electric coil
|
113
|
+
if mau_heating_coil_type == 'Electric' || mau_heating_coil_type == 'Electricity' || mau_heating_coil_type == 'FuelOilNo2' # electric coil
|
114
114
|
mau_htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model, always_on)
|
115
|
-
elsif mau_heating_coil_type == 'Hot Water'
|
115
|
+
elsif mau_heating_coil_type == 'Hot Water' || mau_heating_coil_type == 'HotWater'
|
116
116
|
mau_htg_coil = OpenStudio::Model::CoilHeatingWater.new(model, always_on)
|
117
117
|
hw_loop.addDemandBranchForComponent(mau_htg_coil)
|
118
118
|
elsif mau_heating_coil_type == 'DX'
|
119
119
|
mau_htg_coil = add_onespeed_htg_DX_coil(model, always_on)
|
120
120
|
mau_htg_coil.setName('CoilHeatingDXSingleSpeed_ashp')
|
121
|
+
elsif mau_heating_coil_type == 'Gas' || mau_heating_coil_type == "NaturalGas"
|
122
|
+
mau_htg_coil = OpenStudio::Model::CoilHeatingGas.new(model, always_on)
|
123
|
+
else
|
124
|
+
raise('Invalid fuel type selected for mau heating coil')
|
121
125
|
end
|
122
126
|
|
123
127
|
# Set up Single Speed DX coil with
|
@@ -228,11 +232,14 @@ class NECB2011
|
|
228
232
|
epw = OpenStudio::EpwFile.new(model.weatherFile.get.path.get)
|
229
233
|
necb_reference_hp_supp_fuel = @standards_data['regional_fuel_use'].detect { |fuel_sources| fuel_sources['state_province_regions'].include?(epw.stateProvinceRegion) }['fueltype_set']
|
230
234
|
end
|
231
|
-
if necb_reference_hp_supp_fuel == 'NaturalGas'
|
235
|
+
if necb_reference_hp_supp_fuel == 'NaturalGas' || necb_reference_hp_supp_fuel == "Gas"
|
232
236
|
rh_coil = OpenStudio::Model::CoilHeatingGas.new(model, always_on)
|
233
|
-
elsif necb_reference_hp_supp_fuel == 'Electricity'
|
237
|
+
elsif necb_reference_hp_supp_fuel == 'Electricity' || necb_reference_hp_supp_fuel == 'Electric' || necb_reference_hp_supp_fuel == 'FuelOilNo2'
|
234
238
|
rh_coil = OpenStudio::Model::CoilHeatingElectric.new(model, always_on)
|
235
|
-
|
239
|
+
elsif necb_reference_hp_supp_fuel == 'Hot Water' || necb_reference_hp_supp_fuel == 'HotWater'
|
240
|
+
rh_coil = OpenStudio::Model::CoilHeatingWater.new(model, always_on)
|
241
|
+
hw_loop.addDemandBranchForComponent(rh_coil)
|
242
|
+
else
|
236
243
|
raise('Invalid fuel type selected for heat pump supplemental coil')
|
237
244
|
end
|
238
245
|
cav_rh_terminal = OpenStudio::Model::AirTerminalSingleDuctConstantVolumeReheat.new(model, always_on, rh_coil)
|
@@ -251,6 +258,9 @@ class NECB2011
|
|
251
258
|
sys_name_pars['sys_clg'] = 'ashp' if necb_reference_hp
|
252
259
|
sys_name_pars['sys_htg'] = mau_heating_coil_type
|
253
260
|
sys_name_pars['sys_htg'] = 'ashp' if necb_reference_hp
|
261
|
+
sys_name_pars['sys_htg'] = 'ashp>c-g' if (necb_reference_hp && (necb_reference_hp_supp_fuel == "NaturalGas" || necb_reference_hp_supp_fuel == "Gas"))
|
262
|
+
sys_name_pars['sys_htg'] = 'ashp>c-e' if necb_reference_hp && necb_reference_hp_supp_fuel == "Electricity"
|
263
|
+
sys_name_pars['sys_htg'] = 'ashp>c-hw' if necb_reference_hp && (necb_reference_hp_supp_fuel == "Hot Water" || necb_reference_hp_supp_fuel == "HotWater")
|
254
264
|
sys_name_pars['sys_sf'] = 'cv'
|
255
265
|
sys_name_pars['zone_htg'] = baseboard_type
|
256
266
|
sys_oa = 'doas'
|
@@ -262,7 +272,7 @@ class NECB2011
|
|
262
272
|
sys_oa = 'doas'
|
263
273
|
end
|
264
274
|
sys_name_pars['sys_rf'] = 'none'
|
265
|
-
assign_base_sys_name(mau_air_loop,
|
275
|
+
return assign_base_sys_name(air_loop: mau_air_loop,
|
266
276
|
sys_abbr: 'sys_1',
|
267
277
|
sys_oa: sys_oa,
|
268
278
|
sys_name_pars: sys_name_pars)
|
@@ -78,13 +78,49 @@ class NECB2011
|
|
78
78
|
# Assume direct-fired gas heating coil for now; need to add logic
|
79
79
|
# to set up hydronic or electric coil depending on proposed?
|
80
80
|
|
81
|
-
|
81
|
+
# Get Heating Coil from heating coil type sys2. If set to DX use NECB reference HP supplemental fuel.
|
82
|
+
# TODO: If set to DX incorporate DX heating coil and supplemental heating type.
|
83
|
+
#if self.fuel_type_set.heating_coil_type_sys2 == "DX"
|
84
|
+
# htg_coil_fuel = self.fuel_type_set.necb_reference_hp_supp_fuel
|
85
|
+
#else
|
86
|
+
# htg_coil_fuel = self.fuel_type_set.heating_coil_type_sys2
|
87
|
+
#end
|
88
|
+
htg_coil_fuel = self.fuel_type_set.heating_coil_type_sys2
|
89
|
+
|
90
|
+
case htg_coil_fuel
|
91
|
+
when 'Electric', 'Electricity', 'FuelOilNo2' # Electric Coil
|
92
|
+
htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model, always_on)
|
93
|
+
when 'Gas', 'NaturalGas'# Natural Gas Coil
|
94
|
+
htg_coil = OpenStudio::Model::CoilHeatingGas.new(model, always_on)
|
95
|
+
when 'Hot Water', 'HotWater' # Hot Water Coil
|
96
|
+
htg_coil = OpenStudio::Model::CoilHeatingWater.new(model, always_on)
|
97
|
+
hw_loop.addDemandBranchForComponent(htg_coil)
|
98
|
+
when 'DX'
|
99
|
+
htg_coil = add_onespeed_htg_DX_coil(model, always_on)
|
100
|
+
htg_coil.setName('CoilHeatingDXSingleSpeed_ashp')
|
101
|
+
else # Default to Natural Gas Coil
|
102
|
+
htg_coil = OpenStudio::Model::CoilHeatingGas.new(model, always_on)
|
103
|
+
end
|
82
104
|
|
105
|
+
if htg_coil_fuel == 'DX'
|
106
|
+
supplemental_htg_fuel = self.fuel_type_set.necb_reference_hp_supp_fuel
|
107
|
+
case supplemental_htg_fuel
|
108
|
+
when 'Electric', 'Electricity', 'FuelOilNo2'
|
109
|
+
supp_htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model, always_on)
|
110
|
+
when 'Gas', 'NaturalGas'
|
111
|
+
supp_htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model, always_on)
|
112
|
+
when 'Hot Water', 'HotWater'
|
113
|
+
supp_htg_coil = OpenStudio::Model::CoilHeatingWater.new(model, always_on)
|
114
|
+
hw_loop.addDemandBranchForComponent(supp_htg_coil)
|
115
|
+
else
|
116
|
+
supp_htg_coil = OpenStudio::Model::CoilHeatingGas.new(model, always_on)
|
117
|
+
end
|
118
|
+
end
|
83
119
|
# Add DX or hydronic cooling coil
|
84
120
|
if mau_cooling_type == 'DX'
|
85
121
|
clg_coil = add_onespeed_DX_coil(model, tpfc_clg_availability_sch)
|
86
122
|
clg_coil.setName('CoilCoolingDXSingleSpeed_dx')
|
87
|
-
elsif mau_cooling_type == 'Hydronic'
|
123
|
+
elsif mau_cooling_type == 'Hydronic' || mau_cooling_type == 'Hot Water' || mau_cooling_type == 'HotWater'
|
88
124
|
clg_coil = OpenStudio::Model::CoilCoolingWater.new(model, tpfc_clg_availability_sch)
|
89
125
|
chw_loop.addDemandBranchForComponent(clg_coil)
|
90
126
|
end
|
@@ -104,6 +140,7 @@ class NECB2011
|
|
104
140
|
# in order from closest to zone to furthest from zone
|
105
141
|
supply_inlet_node = air_loop.supplyInletNode
|
106
142
|
fan.addToNode(supply_inlet_node)
|
143
|
+
supp_htg_coil.addToNode(supply_inlet_node) unless supp_htg_coil.nil?
|
107
144
|
htg_coil.addToNode(supply_inlet_node)
|
108
145
|
clg_coil.addToNode(supply_inlet_node)
|
109
146
|
oa_system.addToNode(supply_inlet_node)
|
@@ -163,13 +200,19 @@ class NECB2011
|
|
163
200
|
sys_abbr = 'sys_5' if fan_coil_type == 'TPFC'
|
164
201
|
sys_name_pars = {}
|
165
202
|
sys_name_pars['sys_hr'] = 'none'
|
166
|
-
sys_name_pars['sys_clg'] = mau_cooling_type
|
167
|
-
sys_name_pars['
|
203
|
+
sys_name_pars['sys_clg'] = 'Hydronic' if mau_cooling_type == 'Hydronic' || mau_cooling_type == 'Hot Water' || mau_cooling_type == 'HotWater'
|
204
|
+
sys_name_pars['sys_clg'] = 'DX' if mau_cooling_type == 'DX' && htg_coil_fuel != 'DX'
|
205
|
+
sys_name_pars['sys_clg'] = 'ashp' if mau_cooling_type == 'DX' && htg_coil_fuel == 'DX'
|
206
|
+
sys_name_pars['sys_htg'] = 'g' if (htg_coil_fuel == 'Gas' || htg_coil_fuel == 'NaturalGas')
|
207
|
+
sys_name_pars['sys_htg'] = 'e' if (htg_coil_fuel == 'Electric' || htg_coil_fuel == 'Electricity' || htg_coil_fuel == 'FuelOilNo2')
|
208
|
+
sys_name_pars['sys_htg'] = 'ashp>c-g' if (htg_coil_fuel == 'DX' && (supplemental_htg_fuel == "NaturalGas" || supplemental_htg_fuel == "Gas"))
|
209
|
+
sys_name_pars['sys_htg'] = 'ashp>c-e' if (htg_coil_fuel == 'DX' && (supplemental_htg_fuel == "Electricity" || supplemental_htg_fuel == "Electric" || supplemental_htg_fuel == "FuelOilNo2"))
|
210
|
+
sys_name_pars['sys_htg'] = 'ashp>c-hw' if (htg_coil_fuel == 'DX' && (supplemental_htg_fuel == "Hot Water" || supplemental_htg_fuel == "HotWater"))
|
168
211
|
sys_name_pars['sys_sf'] = 'cv'
|
169
212
|
sys_name_pars['zone_htg'] = fan_coil_type
|
170
213
|
sys_name_pars['zone_clg'] = fan_coil_type
|
171
214
|
sys_name_pars['sys_rf'] = 'none'
|
172
|
-
assign_base_sys_name(mau_air_loop,
|
215
|
+
return assign_base_sys_name(air_loop: mau_air_loop,
|
173
216
|
sys_abbr: sys_abbr,
|
174
217
|
sys_oa: 'doas',
|
175
218
|
sys_name_pars: sys_name_pars)
|
@@ -67,7 +67,7 @@ class NECB2011
|
|
67
67
|
return true
|
68
68
|
else
|
69
69
|
zones.each do |zone|
|
70
|
-
air_loop = add_system_3_and_8_airloop_multi_speed(heating_coil_type, model, system_data, zone)
|
70
|
+
air_loop = add_system_3_and_8_airloop_multi_speed(heating_coil_type, model, system_data, zone, hw_loop)
|
71
71
|
add_sys3_and_8_zone_equip(air_loop,
|
72
72
|
baseboard_type,
|
73
73
|
hw_loop,
|
@@ -78,7 +78,7 @@ class NECB2011
|
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
|
-
def add_system_3_and_8_airloop_multi_speed(heating_coil_type, model, system_data, control_zone)
|
81
|
+
def add_system_3_and_8_airloop_multi_speed(heating_coil_type, model, system_data, control_zone, hw_loop)
|
82
82
|
# System Type 3: PSZ-AC
|
83
83
|
# This measure creates:
|
84
84
|
# -a constant volume packaged single-zone A/C unit
|