openstudio-standards 0.8.3 → 0.8.5.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/data/geometry/ASHRAECollege.osm +30 -30
- data/data/geometry/ASHRAECourthouse.osm +22 -22
- data/data/geometry/ASHRAESmallOfficeDetailed.osm +2 -2
- data/data/geometry/DEER_Asm.osm +1 -1
- data/data/geometry/DEER_ECC.osm +1 -1
- data/data/geometry/DEER_EPr.osm +1 -1
- data/data/geometry/DEER_ERC.osm +1 -1
- data/data/geometry/DEER_ESe.osm +1 -1
- data/data/geometry/DEER_EUn.osm +1 -1
- data/data/geometry/DEER_Hsp.osm +1 -1
- data/data/geometry/DEER_Htl.osm +1 -1
- data/data/geometry/DEER_MBT.osm +1 -1
- data/data/geometry/DEER_MFm.osm +1 -1
- data/data/geometry/DEER_Nrs.osm +1 -1
- data/data/geometry/DEER_OfL.osm +1 -1
- data/data/geometry/DEER_OfS.osm +1 -1
- data/data/geometry/DEER_RFF.osm +1 -1
- data/data/geometry/DEER_RSD.osm +1 -1
- data/data/geometry/DEER_Rt3.osm +1 -1
- data/data/geometry/DEER_RtS.osm +1 -1
- data/data/standards/export_OpenStudio_libraries.rb +2 -3
- data/data/standards/test_performance_expected_dd_results.csv +42 -42
- data/lib/openstudio-standards/btap/NECB_building_types.csv +35 -0
- data/lib/openstudio-standards/btap/NECB_space_types.csv +109 -0
- data/lib/openstudio-standards/btap/activity.rb +480 -0
- data/lib/openstudio-standards/btap/attributes.rb +166 -0
- data/lib/openstudio-standards/btap/bridging.rb +561 -1402
- data/lib/openstudio-standards/btap/btap.rb +4 -2
- data/lib/openstudio-standards/btap/btap_test_helper.rb +86 -0
- data/lib/openstudio-standards/btap/carbon/btap_carbon.rb +177 -0
- data/lib/openstudio-standards/btap/common_paths.rb +81 -0
- data/lib/openstudio-standards/btap/common_resources/ConstructionProperties.csv +52 -0
- data/lib/openstudio-standards/btap/common_resources/Constructions.csv +37 -0
- data/lib/openstudio-standards/btap/common_resources/carbon_frame.csv +35 -0
- data/lib/openstudio-standards/btap/common_resources/carbon_glazing.csv +35 -0
- data/lib/openstudio-standards/btap/common_resources/carbon_opaque.csv +164 -0
- data/lib/openstudio-standards/btap/common_resources/construction_sets.csv +1270 -0
- data/lib/openstudio-standards/btap/common_resources/constructions_glazing.csv +121 -0
- data/lib/openstudio-standards/btap/common_resources/constructions_opaque.csv +2256 -0
- data/lib/openstudio-standards/btap/common_resources/costs.csv +1897 -0
- data/lib/openstudio-standards/btap/common_resources/costs_local_factors.csv +2315 -0
- data/lib/openstudio-standards/btap/common_resources/hvac_vent_ahu.csv +925 -0
- data/lib/openstudio-standards/btap/common_resources/lighting.csv +364 -0
- data/lib/openstudio-standards/btap/common_resources/lighting_sets.csv +2667 -0
- data/lib/openstudio-standards/btap/common_resources/locations.csv +75 -0
- data/lib/openstudio-standards/btap/common_resources/materials_glazing.csv +35 -0
- data/lib/openstudio-standards/btap/common_resources/materials_hvac.csv +1686 -0
- data/lib/openstudio-standards/btap/common_resources/materials_lighting.csv +267 -0
- data/lib/openstudio-standards/btap/common_resources/materials_opaque.csv +164 -0
- data/lib/openstudio-standards/btap/costing/README.md +502 -0
- data/lib/openstudio-standards/btap/costing/btap_costing.rb +469 -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/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 +173 -0
- data/lib/openstudio-standards/btap/costing/daylighting_sensor_control_costing.rb +354 -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 +215 -0
- data/lib/openstudio-standards/btap/costing/heating_cooling_costing.rb +2584 -0
- data/lib/openstudio-standards/btap/costing/led_lighting_costing.rb +156 -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 +15 -0
- data/lib/openstudio-standards/btap/costing/test_run_all_test_locally.rb +27 -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/btap/geometry.rb +86 -6
- data/lib/openstudio-standards/btap/structure.rb +657 -0
- data/lib/openstudio-standards/constructions/modify.rb +2 -1
- data/lib/openstudio-standards/create_typical/create_typical.rb +17 -33
- data/lib/openstudio-standards/create_typical/space_type_ratios.rb +36 -36
- data/lib/openstudio-standards/equipment/create_transformer.rb +104 -0
- data/lib/openstudio-standards/equipment/create_typical_equipment.rb +117 -0
- data/lib/openstudio-standards/equipment/data/electric_equipment_space_types.json +1514 -0
- data/lib/openstudio-standards/equipment/data/gas_equipment_space_types.json +227 -0
- data/lib/openstudio-standards/exterior_lighting/create.rb +22 -22
- data/lib/openstudio-standards/exterior_lighting/information.rb +3 -2
- data/lib/openstudio-standards/hvac/components/air_conditioner_vrf.rb +482 -0
- data/lib/openstudio-standards/hvac/components/air_terminal.rb +31 -0
- data/lib/openstudio-standards/hvac/components/boiler_hot_water.rb +163 -0
- data/lib/openstudio-standards/hvac/components/central_air_source_heat_pump.rb +220 -0
- data/lib/openstudio-standards/hvac/components/chiller.rb +25 -0
- data/lib/openstudio-standards/hvac/components/coil.rb +276 -0
- data/lib/openstudio-standards/hvac/components/coil_cooling_dx_multi_speed.rb +40 -0
- data/lib/openstudio-standards/hvac/components/coil_cooling_dx_single_speed.rb +300 -0
- data/lib/openstudio-standards/hvac/components/coil_cooling_dx_two_speed.rb +187 -0
- data/lib/openstudio-standards/hvac/components/coil_cooling_water.rb +80 -0
- data/lib/openstudio-standards/hvac/components/coil_cooling_water_to_air_heat_pump_equation_fit.rb +182 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_dx_single_speed.rb +220 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_electric.rb +56 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_gas.rb +90 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_gas_multi_stage.rb +33 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_water.rb +98 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_water_to_air_heat_pump_equation_fit.rb +147 -0
- data/lib/openstudio-standards/hvac/components/component.rb +39 -0
- data/lib/openstudio-standards/{standards/ashrae_90_1/data/ashrae_90_1.fans.json → hvac/components/data/fans.json} +6 -6
- data/lib/openstudio-standards/hvac/components/fan.rb +363 -0
- data/lib/openstudio-standards/hvac/components/heat_exchanger_air_to_air.rb +203 -0
- data/lib/openstudio-standards/hvac/components/pump.rb +181 -0
- data/lib/openstudio-standards/hvac/controls/radiant_system_controls.rb +594 -0
- data/lib/openstudio-standards/hvac/conversions.rb +222 -0
- data/lib/openstudio-standards/hvac/curves.rb +192 -0
- data/lib/openstudio-standards/hvac/helpers.rb +357 -0
- data/lib/openstudio-standards/hvac/setpoint_managers/information.rb +4 -4
- data/lib/openstudio-standards/interior_lighting/create_lights.rb +52 -0
- data/lib/openstudio-standards/interior_lighting/create_typical_interior_lighting.rb +254 -0
- data/lib/openstudio-standards/interior_lighting/data/convert_lighting_data.rb +249 -0
- data/lib/openstudio-standards/interior_lighting/data/lighting_space_types.csv +96 -0
- data/lib/openstudio-standards/interior_lighting/data/lighting_space_types.json +1429 -0
- data/lib/openstudio-standards/interior_lighting/data/lighting_technology.csv +46 -0
- data/lib/openstudio-standards/interior_lighting/data/lighting_technology.json +859 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +4 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +4 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.HighRiseApartment.rb +6 -7
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +15 -15
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +4 -4
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +5 -5
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +6 -6
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +7 -7
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +4 -4
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +6 -6
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOfficeDetailed.rb +5 -1
- data/lib/openstudio-standards/prototypes/common/data/prototype_space_type_map.json +2594 -0
- data/lib/openstudio-standards/prototypes/common/data/thermostat_schedule_lookup.json +2108 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +33 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +0 -140
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanConstantVolume.rb +1 -73
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanOnOff.rb +1 -69
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanVariableVolume.rb +0 -116
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanZoneExhaust.rb +0 -61
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +2 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +128 -13
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +606 -607
- data/lib/openstudio-standards/prototypes/common/prototype_space_type_map.rb +41 -0
- data/lib/openstudio-standards/prototypes/common/space_type_equipment_map.rb +184 -0
- data/lib/openstudio-standards/prototypes/common/space_type_thermostat_schedule_map.rb +116 -0
- data/lib/openstudio-standards/qaqc/hvac.rb +12 -12
- data/lib/openstudio-standards/refrigeration/create_compressor.rb +2 -5
- data/lib/openstudio-standards/refrigeration/data/refrigeration_compressors.csv +4 -4
- data/lib/openstudio-standards/service_water_heating/create_water_heater.rb +1 -2
- data/lib/openstudio-standards/service_water_heating/create_water_use.rb +5 -5
- data/lib/openstudio-standards/space_type/data/level_1_space_types.json +612 -0
- data/lib/openstudio-standards/space_type/standards_space_type.rb +53 -0
- data/lib/openstudio-standards/standards/Standards.AirConditionerVariableRefrigerantFlow.rb +8 -26
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +13 -13
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +0 -24
- data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +6 -43
- data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +7 -24
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +19 -44
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +25 -50
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +25 -33
- data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +9 -22
- data/lib/openstudio-standards/standards/Standards.CoilDX.rb +15 -157
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +18 -105
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +3 -23
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +0 -24
- data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +2 -86
- data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +0 -107
- data/lib/openstudio-standards/standards/Standards.Model.rb +45 -20
- data/lib/openstudio-standards/standards/Standards.People.rb +113 -0
- data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +11 -11
- data/lib/openstudio-standards/standards/Standards.Pump.rb +2 -147
- data/lib/openstudio-standards/standards/Standards.PumpVariableSpeed.rb +57 -41
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +30 -153
- data/lib/openstudio-standards/standards/Standards.Ventilation.rb +74 -0
- data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PlantLoop.rb +4 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps_heating.json +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +37 -112
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.spc_typ.json +37 -102
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps_heating.json +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +37 -112
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps_heating.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.BoilerHotWater.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.spc_typ.json +37 -102
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps_heating.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.BoilerHotWater.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.spc_typ.json +45 -109
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_pumps_heating.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.BoilerHotWater.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoilHeatingGas.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.spc_typ.json +45 -109
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_pumps_heating.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +0 -200
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/comstock_doe_ref_pre_1980.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ChillerElectricEIR.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXSingleSpeed.rb +2 -68
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXTwoSpeed.rb +2 -35
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilDX.rb +42 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingDXSingleSpeed.rb +5 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingGas.rb +2 -2
- 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/ashrae_90_1_prm.PlantLoop.rb +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019_WaterHeaterMixed.rb +2 -4
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.curves.json +0 -200
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.fans.json +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/ashrae_90_1_prm.UserData.rb +7 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_enums.rb +0 -1
- data/lib/openstudio-standards/standards/cbes/data/cbes.curves.json +0 -200
- data/lib/openstudio-standards/standards/deer/data/deer.curves.json +0 -200
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +21 -37
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/building_envelope.rb +12 -11
- 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/BTAPPRE1980/hvac_systems.rb +4 -4
- data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +1 -1
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +115 -112
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +637 -249
- data/lib/openstudio-standards/standards/necb/NECB2011/beps_compliance_path.rb +16 -12
- data/lib/openstudio-standards/standards/necb/NECB2011/building_envelope.rb +799 -46
- data/lib/openstudio-standards/standards/necb/NECB2011/data/chillers.json +33 -51
- data/lib/openstudio-standards/standards/necb/NECB2011/data/constants.json +75 -7
- data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +25 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/HighriseApartmentMult.osm +14272 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/heat_pumps_heating.json +21 -15
- 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 +18 -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 +68 -150
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +444 -134
- data/lib/openstudio-standards/standards/necb/NECB2011/system_fuels.rb +61 -1
- data/lib/openstudio-standards/standards/necb/NECB2015/data/heat_pumps_heating.json +10 -2
- 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 +17 -8
- 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/NECB2020/data/heat_pumps_heating.json +16 -6
- data/lib/openstudio-standards/standards/necb/NECB2020/data/unitary_acs.json +60 -61
- data/lib/openstudio-standards/standards/necb/NECB2020/service_water_heating.rb +30 -30
- data/lib/openstudio-standards/standards/necb/README.md +343 -0
- data/lib/openstudio-standards/standards/necb/common/btap_analysis.rb +79 -0
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +206 -32
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +75 -43
- 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/thermal_zone/{thermal_zone.rb → information.rb} +12 -45
- data/lib/openstudio-standards/thermal_zone/thermostat_schedules.rb +152 -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/weather/stat_file.rb +2 -2
- data/lib/openstudio-standards.rb +67 -38
- metadata +141 -50
- data/lib/openstudio-standards/hvac/components/create.rb +0 -169
- data/lib/openstudio-standards/hvac/components/modify.rb +0 -42
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +0 -438
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.BoilerHotWater.rb +0 -123
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +0 -216
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXSingleSpeed.rb +0 -273
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +0 -159
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWater.rb +0 -77
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +0 -154
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +0 -214
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingElectric.rb +0 -53
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingGas.rb +0 -72
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWater.rb +0 -95
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +0 -125
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.ControllerWaterCoil.rb +0 -17
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.transformers.rb +0 -90
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Pump.rb +0 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.PumpVariableSpeed.rb +0 -70
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +0 -590
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +0 -901
- data/lib/openstudio-standards/standards/Standards.FanConstantVolume.rb +0 -5
- data/lib/openstudio-standards/standards/Standards.FanOnOff.rb +0 -5
- data/lib/openstudio-standards/standards/Standards.FanZoneExhaust.rb +0 -5
- data/lib/openstudio-standards/standards/Standards.HeaderedPumpsConstantSpeed.rb +0 -5
- data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +0 -55
- data/lib/openstudio-standards/standards/Standards.PumpConstantSpeed.rb +0 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanConstantVolume.rb +0 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanOnOff.rb +0 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanZoneExhaust.rb +0 -5
- data/lib/openstudio-standards/standards/cbes/data/cbes.fans.json +0 -328
- data/lib/openstudio-standards/standards/deer/data/deer.fans.json +0 -328
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PumpVariableSpeed.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.PumpVariableSpeed.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.PumpVariableSpeed.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.PumpVariableSpeed.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PumpVariableSpeed.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Pump.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PumpVariableSpeed.rb +0 -0
|
@@ -147,7 +147,7 @@ class Standard
|
|
|
147
147
|
ambient_loop.addDemandBranchForComponent(water_to_water_hp)
|
|
148
148
|
# Central Air Source Heat Pump
|
|
149
149
|
when 'AirSourceHeatPump', 'ASHP'
|
|
150
|
-
create_central_air_source_heat_pump(model, hot_water_loop)
|
|
150
|
+
OpenstudioStandards::HVAC.create_central_air_source_heat_pump(model, hot_water_loop)
|
|
151
151
|
# Boiler
|
|
152
152
|
when 'Electricity', 'Gas', 'NaturalGas', 'Propane', 'PropaneGas', 'FuelOilNo1', 'FuelOilNo2'
|
|
153
153
|
if boiler_lvg_temp_dsgn.nil?
|
|
@@ -162,16 +162,16 @@ class Standard
|
|
|
162
162
|
out_temp_lmt_f = boiler_out_temp_lmt
|
|
163
163
|
end
|
|
164
164
|
|
|
165
|
-
boiler = create_boiler_hot_water(model,
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
165
|
+
boiler = OpenstudioStandards::HVAC.create_boiler_hot_water(model,
|
|
166
|
+
hot_water_loop: hot_water_loop,
|
|
167
|
+
fuel_type: boiler_fuel_type,
|
|
168
|
+
draft_type: boiler_draft_type,
|
|
169
|
+
nominal_thermal_efficiency: 0.78,
|
|
170
|
+
eff_curve_temp_eval_var: boiler_eff_curve_temp_eval_var,
|
|
171
|
+
lvg_temp_dsgn_f: lvg_temp_dsgn_f,
|
|
172
|
+
out_temp_lmt_f: out_temp_lmt_f,
|
|
173
|
+
max_plr: boiler_max_plr,
|
|
174
|
+
sizing_factor: boiler_sizing_factor)
|
|
175
175
|
|
|
176
176
|
# @todo Yixing. Adding temperature setpoint controller at boiler outlet causes simulation errors
|
|
177
177
|
# boiler_stpt_manager = OpenStudio::Model::SetpointManagerScheduled.new(self, hw_temp_sch)
|
|
@@ -319,7 +319,7 @@ class Standard
|
|
|
319
319
|
# Add Constant pump, in plant loop, the number of chiller adjustment will assign pump to each chiller
|
|
320
320
|
# pri_chw_pump = OpenStudio::Model::PumpConstantSpeed.new(model)
|
|
321
321
|
pri_chw_pump = OpenStudio::Model::PumpVariableSpeed.new(model)
|
|
322
|
-
pump_variable_speed_set_control_type(pri_chw_pump, control_type
|
|
322
|
+
OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pri_chw_pump, control_type: 'Riding Curve')
|
|
323
323
|
# This pump name is important for function add_ems_for_multiple_chiller_pumps_w_secondary_plant. If you update
|
|
324
324
|
# it here, you must update the logic there to account for this
|
|
325
325
|
pri_chw_pump.setName("#{chilled_water_loop.name} Primary Pump")
|
|
@@ -386,11 +386,11 @@ class Standard
|
|
|
386
386
|
# 0.66 kw/ton for a 150 ton Water Cooled positive displacement chiller
|
|
387
387
|
case chiller_cooling_type
|
|
388
388
|
when 'AirCooled'
|
|
389
|
-
default_cop = kw_per_ton_to_cop(1.188)
|
|
389
|
+
default_cop = OpenstudioStandards::HVAC.kw_per_ton_to_cop(1.188)
|
|
390
390
|
when 'WaterCooled'
|
|
391
|
-
default_cop = kw_per_ton_to_cop(0.66)
|
|
391
|
+
default_cop = OpenstudioStandards::HVAC.kw_per_ton_to_cop(0.66)
|
|
392
392
|
else
|
|
393
|
-
default_cop = kw_per_ton_to_cop(0.66)
|
|
393
|
+
default_cop = OpenstudioStandards::HVAC.kw_per_ton_to_cop(0.66)
|
|
394
394
|
end
|
|
395
395
|
|
|
396
396
|
# make the correct type of chiller based these properties
|
|
@@ -920,18 +920,18 @@ class Standard
|
|
|
920
920
|
heat_pump_water_loop.addSupplyBranchForComponent(heating_equipment)
|
|
921
921
|
heating_equipment_stpt_manager.setName("#{heat_pump_water_loop.name} District Heating Scheduled Dual Setpoint")
|
|
922
922
|
when 'AirSourceHeatPump', 'ASHP'
|
|
923
|
-
heating_equipment = create_central_air_source_heat_pump(model, heat_pump_water_loop)
|
|
923
|
+
heating_equipment = OpenstudioStandards::HVAC.create_central_air_source_heat_pump(model, heat_pump_water_loop)
|
|
924
924
|
heating_equipment_stpt_manager.setName("#{heat_pump_water_loop.name} ASHP Scheduled Dual Setpoint")
|
|
925
925
|
when 'Electricity', 'Gas', 'NaturalGas', 'Propane', 'PropaneGas', 'FuelOilNo1', 'FuelOilNo2'
|
|
926
|
-
heating_equipment = create_boiler_hot_water(model,
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
926
|
+
heating_equipment = OpenstudioStandards::HVAC.create_boiler_hot_water(model,
|
|
927
|
+
hot_water_loop: heat_pump_water_loop,
|
|
928
|
+
name: "#{heat_pump_water_loop.name} Supplemental Boiler",
|
|
929
|
+
fuel_type: heating_fuel,
|
|
930
|
+
flow_mode: 'ConstantFlow',
|
|
931
|
+
lvg_temp_dsgn_f: 86.0, # 30.0 degrees Celsius
|
|
932
|
+
min_plr: 0.0,
|
|
933
|
+
max_plr: 1.2,
|
|
934
|
+
opt_plr: 1.0)
|
|
935
935
|
heating_equipment_stpt_manager.setName("#{heat_pump_water_loop.name} Boiler Scheduled Dual Setpoint")
|
|
936
936
|
else
|
|
937
937
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.Model.Model', "Boiler fuel type #{heating_fuel} is not valid, no heating equipment will be added.")
|
|
@@ -1028,7 +1028,7 @@ class Standard
|
|
|
1028
1028
|
loop_stpt_manager.addToNode(ground_hx_loop.supplyOutletNode)
|
|
1029
1029
|
|
|
1030
1030
|
# edit name to be EMS friendly
|
|
1031
|
-
ground_hx_ems_name = ems_friendly_name(ground_hx.name)
|
|
1031
|
+
ground_hx_ems_name = OpenstudioStandards::HVAC.ems_friendly_name(ground_hx.name)
|
|
1032
1032
|
|
|
1033
1033
|
# sensor to read supply inlet temperature
|
|
1034
1034
|
inlet_temp_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model,
|
|
@@ -1206,8 +1206,8 @@ class Standard
|
|
|
1206
1206
|
chilled_water_loop.addAvailabilityManager(chilled_water_loop_lockout_manager)
|
|
1207
1207
|
else
|
|
1208
1208
|
# create availability managers based on zone heating and cooling demand
|
|
1209
|
-
hot_water_loop_name = ems_friendly_name(hot_water_loop.name)
|
|
1210
|
-
chilled_water_loop_name = ems_friendly_name(chilled_water_loop.name)
|
|
1209
|
+
hot_water_loop_name = OpenstudioStandards::HVAC.ems_friendly_name(hot_water_loop.name)
|
|
1210
|
+
chilled_water_loop_name = OpenstudioStandards::HVAC.ems_friendly_name(chilled_water_loop.name)
|
|
1211
1211
|
|
|
1212
1212
|
# create hot water plant availability schedule managers and create an EMS acuator
|
|
1213
1213
|
sch_hot_water_availability = OpenstudioStandards::Schedules.create_constant_schedule_ruleset(model,
|
|
@@ -1368,10 +1368,9 @@ class Standard
|
|
|
1368
1368
|
sizing_system.setCentralHeatingDesignSupplyAirTemperature(htg_dsgn_sup_air_temp_c)
|
|
1369
1369
|
|
|
1370
1370
|
# create supply fan
|
|
1371
|
-
supply_fan =
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
end_use_subcategory: 'DOAS Fans')
|
|
1371
|
+
supply_fan = OpenstudioStandards::HVAC.create_typical_fan(model, 'Constant_DOAS_Fan',
|
|
1372
|
+
fan_name: 'DOAS Supply Fan',
|
|
1373
|
+
end_use_subcategory: 'DOAS Fans')
|
|
1375
1374
|
supply_fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
|
1376
1375
|
supply_fan.setMaximumFlowRate(OpenStudio.convert(fan_maximum_flow_rate, 'cfm', 'm^3/s').get) unless fan_maximum_flow_rate.nil?
|
|
1377
1376
|
supply_fan.addToNode(air_loop.supplyInletNode)
|
|
@@ -1379,32 +1378,32 @@ class Standard
|
|
|
1379
1378
|
# create heating coil
|
|
1380
1379
|
if hot_water_loop.nil?
|
|
1381
1380
|
# electric backup heating coil
|
|
1382
|
-
create_coil_heating_electric(model,
|
|
1383
|
-
|
|
1384
|
-
|
|
1381
|
+
OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
1382
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
1383
|
+
name: "#{air_loop.name} Backup Htg Coil")
|
|
1385
1384
|
# heat pump coil
|
|
1386
|
-
create_coil_heating_dx_single_speed(model,
|
|
1387
|
-
|
|
1388
|
-
|
|
1385
|
+
OpenstudioStandards::HVAC.create_coil_heating_dx_single_speed(model,
|
|
1386
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
1387
|
+
name: "#{air_loop.name} Htg Coil")
|
|
1389
1388
|
else
|
|
1390
|
-
create_coil_heating_water(model,
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1389
|
+
OpenstudioStandards::HVAC.create_coil_heating_water(model,
|
|
1390
|
+
hot_water_loop,
|
|
1391
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
1392
|
+
name: "#{air_loop.name} Htg Coil",
|
|
1393
|
+
controller_convergence_tolerance: 0.0001)
|
|
1395
1394
|
end
|
|
1396
1395
|
|
|
1397
1396
|
# create cooling coil
|
|
1398
1397
|
if chilled_water_loop.nil?
|
|
1399
|
-
create_coil_cooling_dx_two_speed(model,
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1398
|
+
OpenstudioStandards::HVAC.create_coil_cooling_dx_two_speed(model,
|
|
1399
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
1400
|
+
name: "#{air_loop.name} 2spd DX Clg Coil",
|
|
1401
|
+
type: 'OS default')
|
|
1403
1402
|
else
|
|
1404
|
-
create_coil_cooling_water(model,
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1403
|
+
OpenstudioStandards::HVAC.create_coil_cooling_water(model,
|
|
1404
|
+
chilled_water_loop,
|
|
1405
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
1406
|
+
name: "#{air_loop.name} Clg Coil")
|
|
1408
1407
|
end
|
|
1409
1408
|
|
|
1410
1409
|
# minimum outdoor air schedule
|
|
@@ -1462,18 +1461,18 @@ class Standard
|
|
|
1462
1461
|
# create the ERV and set its properties
|
|
1463
1462
|
# @todo come up with scheme for estimating power of ERV motor wheel which might require knowing airflow.
|
|
1464
1463
|
# erv.setNominalElectricPower(value_new)
|
|
1465
|
-
erv = OpenstudioStandards::HVAC.
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1464
|
+
erv = OpenstudioStandards::HVAC.create_heat_exchanger_air_to_air_sensible_and_latent(model,
|
|
1465
|
+
name: "#{zone.name} ERV HX",
|
|
1466
|
+
type: "Rotary",
|
|
1467
|
+
economizer_lockout: true,
|
|
1468
|
+
sensible_heating_100_eff: 0.76,
|
|
1469
|
+
sensible_heating_75_eff: 0.81,
|
|
1470
|
+
latent_heating_100_eff: 0.68,
|
|
1471
|
+
latent_heating_75_eff: 0.73,
|
|
1472
|
+
sensible_cooling_100_eff: 0.76,
|
|
1473
|
+
sensible_cooling_75_eff: 0.81,
|
|
1474
|
+
latent_cooling_100_eff: 0.68,
|
|
1475
|
+
latent_cooling_75_eff: 0.73)
|
|
1477
1476
|
erv.addToNode(oa_system.outboardOANode.get)
|
|
1478
1477
|
|
|
1479
1478
|
# increase fan static pressure to account for ERV
|
|
@@ -1598,15 +1597,15 @@ class Standard
|
|
|
1598
1597
|
sizing_system.setCentralHeatingDesignSupplyAirTemperature(htg_dsgn_sup_air_temp_c)
|
|
1599
1598
|
|
|
1600
1599
|
if doas_type == 'DOASCV'
|
|
1601
|
-
supply_fan =
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1600
|
+
supply_fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
1601
|
+
'Constant_DOAS_Fan',
|
|
1602
|
+
fan_name: 'DOAS Supply Fan',
|
|
1603
|
+
end_use_subcategory: 'DOAS Fans')
|
|
1605
1604
|
else # 'DOASVAV'
|
|
1606
|
-
supply_fan =
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1605
|
+
supply_fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
1606
|
+
'Variable_DOAS_Fan',
|
|
1607
|
+
fan_name: 'DOAS Supply Fan',
|
|
1608
|
+
end_use_subcategory: 'DOAS Fans')
|
|
1610
1609
|
end
|
|
1611
1610
|
supply_fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
|
1612
1611
|
supply_fan.setMaximumFlowRate(OpenStudio.convert(fan_maximum_flow_rate, 'cfm', 'm^3/s').get) unless fan_maximum_flow_rate.nil?
|
|
@@ -1615,19 +1614,19 @@ class Standard
|
|
|
1615
1614
|
# create heating coil
|
|
1616
1615
|
if hot_water_loop.nil?
|
|
1617
1616
|
# electric backup heating coil
|
|
1618
|
-
create_coil_heating_electric(model,
|
|
1619
|
-
|
|
1620
|
-
|
|
1617
|
+
OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
1618
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
1619
|
+
name: "#{air_loop.name} Backup Htg Coil")
|
|
1621
1620
|
# heat pump coil
|
|
1622
|
-
create_coil_heating_dx_single_speed(model,
|
|
1623
|
-
|
|
1624
|
-
|
|
1621
|
+
OpenstudioStandards::HVAC.create_coil_heating_dx_single_speed(model,
|
|
1622
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
1623
|
+
name: "#{air_loop.name} Htg Coil")
|
|
1625
1624
|
else
|
|
1626
|
-
create_coil_heating_water(model,
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1625
|
+
OpenstudioStandards::HVAC.create_coil_heating_water(model,
|
|
1626
|
+
hot_water_loop,
|
|
1627
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
1628
|
+
name: "#{air_loop.name} Htg Coil",
|
|
1629
|
+
controller_convergence_tolerance: 0.0001)
|
|
1631
1630
|
end
|
|
1632
1631
|
|
|
1633
1632
|
# could add a humidity controller here set to limit supply air to a 16.6C/62F dewpoint
|
|
@@ -1644,15 +1643,15 @@ class Standard
|
|
|
1644
1643
|
|
|
1645
1644
|
# create cooling coil
|
|
1646
1645
|
if chilled_water_loop.nil?
|
|
1647
|
-
create_coil_cooling_dx_two_speed(model,
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1646
|
+
OpenstudioStandards::HVAC.create_coil_cooling_dx_two_speed(model,
|
|
1647
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
1648
|
+
name: "#{air_loop.name} 2spd DX Clg Coil",
|
|
1649
|
+
type: 'OS default')
|
|
1651
1650
|
else
|
|
1652
|
-
create_coil_cooling_water(model,
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1651
|
+
OpenstudioStandards::HVAC.create_coil_cooling_water(model,
|
|
1652
|
+
chilled_water_loop,
|
|
1653
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
1654
|
+
name: "#{air_loop.name} Clg Coil")
|
|
1656
1655
|
end
|
|
1657
1656
|
|
|
1658
1657
|
# minimum outdoor air schedule
|
|
@@ -1693,15 +1692,15 @@ class Standard
|
|
|
1693
1692
|
# create an exhaust fan
|
|
1694
1693
|
if include_exhaust_fan
|
|
1695
1694
|
if doas_type == 'DOASCV'
|
|
1696
|
-
exhaust_fan =
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1695
|
+
exhaust_fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
1696
|
+
'Constant_DOAS_Fan',
|
|
1697
|
+
fan_name: 'DOAS Exhaust Fan',
|
|
1698
|
+
end_use_subcategory: 'DOAS Fans')
|
|
1700
1699
|
else # 'DOASVAV'
|
|
1701
|
-
exhaust_fan =
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1700
|
+
exhaust_fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
1701
|
+
'Variable_DOAS_Fan',
|
|
1702
|
+
fan_name: 'DOAS Exhaust Fan',
|
|
1703
|
+
end_use_subcategory: 'DOAS Fans')
|
|
1705
1704
|
end
|
|
1706
1705
|
# set pressure rise 1.0 inH2O lower than supply fan, 1.0 inH2O minimum
|
|
1707
1706
|
exhaust_fan_pressure_rise = supply_fan.pressureRise - OpenStudio.convert(1.0, 'inH_{2}O', 'Pa').get
|
|
@@ -1740,9 +1739,9 @@ class Standard
|
|
|
1740
1739
|
elsif doas_type == 'DOASVAVReheat'
|
|
1741
1740
|
# Reheat coil
|
|
1742
1741
|
if hot_water_loop.nil?
|
|
1743
|
-
rht_coil = create_coil_heating_electric(model, name: "#{zone.name} Electric Reheat Coil")
|
|
1742
|
+
rht_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model, name: "#{zone.name} Electric Reheat Coil")
|
|
1744
1743
|
else
|
|
1745
|
-
rht_coil = create_coil_heating_water(model, hot_water_loop, name: "#{zone.name} Reheat Coil")
|
|
1744
|
+
rht_coil = OpenstudioStandards::HVAC.create_coil_heating_water(model, hot_water_loop, name: "#{zone.name} Reheat Coil")
|
|
1746
1745
|
end
|
|
1747
1746
|
# VAV reheat terminal
|
|
1748
1747
|
air_terminal = OpenStudio::Model::AirTerminalSingleDuctVAVReheat.new(model, model.alwaysOnDiscreteSchedule, rht_coil)
|
|
@@ -1892,36 +1891,36 @@ class Standard
|
|
|
1892
1891
|
|
|
1893
1892
|
# create fan
|
|
1894
1893
|
# @type [OpenStudio::Model::FanVariableVolume] fan
|
|
1895
|
-
fan =
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1894
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
1895
|
+
'VAV_System_Fan',
|
|
1896
|
+
fan_name: "#{air_loop.name} Fan",
|
|
1897
|
+
fan_efficiency: fan_efficiency,
|
|
1898
|
+
pressure_rise: fan_pressure_rise,
|
|
1899
|
+
motor_efficiency: fan_motor_efficiency,
|
|
1900
|
+
end_use_subcategory: 'VAV System Fans')
|
|
1902
1901
|
fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
|
1903
1902
|
fan.addToNode(air_loop.supplyInletNode)
|
|
1904
1903
|
|
|
1905
1904
|
# create heating coil
|
|
1906
1905
|
if hot_water_loop.nil?
|
|
1907
1906
|
if heating_type == 'Electricity'
|
|
1908
|
-
htg_coil = create_coil_heating_electric(model,
|
|
1909
|
-
|
|
1910
|
-
|
|
1907
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
1908
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
1909
|
+
name: "#{air_loop.name} Main Electric Htg Coil")
|
|
1911
1910
|
else # default to NaturalGas
|
|
1912
|
-
htg_coil = create_coil_heating_gas(model,
|
|
1913
|
-
|
|
1914
|
-
|
|
1911
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_gas(model,
|
|
1912
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
1913
|
+
name: "#{air_loop.name} Main Gas Htg Coil")
|
|
1915
1914
|
end
|
|
1916
1915
|
else
|
|
1917
|
-
htg_coil = create_coil_heating_water(model,
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1916
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_water(model,
|
|
1917
|
+
hot_water_loop,
|
|
1918
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
1919
|
+
name: "#{air_loop.name} Main Htg Coil",
|
|
1920
|
+
rated_inlet_water_temperature: hw_temp_c,
|
|
1921
|
+
rated_outlet_water_temperature: (hw_temp_c - hw_delta_t_k),
|
|
1922
|
+
rated_inlet_air_temperature: dsgn_temps['prehtg_dsgn_sup_air_temp_c'],
|
|
1923
|
+
rated_outlet_air_temperature: dsgn_temps['htg_dsgn_sup_air_temp_c'])
|
|
1925
1924
|
end
|
|
1926
1925
|
|
|
1927
1926
|
# set the setpointmanager for the central/preheat coil if required
|
|
@@ -1929,15 +1928,15 @@ class Standard
|
|
|
1929
1928
|
|
|
1930
1929
|
# create cooling coil
|
|
1931
1930
|
if chilled_water_loop.nil?
|
|
1932
|
-
create_coil_cooling_dx_two_speed(model,
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1931
|
+
OpenstudioStandards::HVAC.create_coil_cooling_dx_two_speed(model,
|
|
1932
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
1933
|
+
name: "#{air_loop.name} 2spd DX Clg Coil",
|
|
1934
|
+
type: 'OS default')
|
|
1936
1935
|
else
|
|
1937
|
-
create_coil_cooling_water(model,
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1936
|
+
OpenstudioStandards::HVAC.create_coil_cooling_water(model,
|
|
1937
|
+
chilled_water_loop,
|
|
1938
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
1939
|
+
name: "#{air_loop.name} Clg Coil")
|
|
1941
1940
|
end
|
|
1942
1941
|
|
|
1943
1942
|
# outdoor air intake system
|
|
@@ -1987,19 +1986,19 @@ class Standard
|
|
|
1987
1986
|
# create reheat coil
|
|
1988
1987
|
case reheat_type
|
|
1989
1988
|
when 'NaturalGas', 'Gas'
|
|
1990
|
-
rht_coil = create_coil_heating_gas(model,
|
|
1991
|
-
|
|
1989
|
+
rht_coil = OpenstudioStandards::HVAC.create_coil_heating_gas(model,
|
|
1990
|
+
name: "#{zone.name} Gas Reheat Coil")
|
|
1992
1991
|
when 'Electricity'
|
|
1993
|
-
rht_coil = create_coil_heating_electric(model,
|
|
1994
|
-
|
|
1992
|
+
rht_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
1993
|
+
name: "#{zone.name} Electric Reheat Coil")
|
|
1995
1994
|
when 'Water'
|
|
1996
|
-
rht_coil = create_coil_heating_water(model,
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
1995
|
+
rht_coil = OpenstudioStandards::HVAC.create_coil_heating_water(model,
|
|
1996
|
+
hot_water_loop,
|
|
1997
|
+
name: "#{zone.name} Reheat Coil",
|
|
1998
|
+
rated_inlet_water_temperature: hw_temp_c,
|
|
1999
|
+
rated_outlet_water_temperature: (hw_temp_c - hw_delta_t_k),
|
|
2000
|
+
rated_inlet_air_temperature: dsgn_temps['htg_dsgn_sup_air_temp_c'],
|
|
2001
|
+
rated_outlet_air_temperature: dsgn_temps['zn_htg_dsgn_sup_air_temp_c'])
|
|
2003
2002
|
else
|
|
2004
2003
|
# no reheat
|
|
2005
2004
|
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.Model.Model', "No reheat coil for terminal in #{zone.name}")
|
|
@@ -2119,29 +2118,29 @@ class Standard
|
|
|
2119
2118
|
|
|
2120
2119
|
# create fan
|
|
2121
2120
|
# @type [OpenStudio::Model::FanVariableVolume] fan
|
|
2122
|
-
fan =
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2121
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
2122
|
+
'VAV_System_Fan',
|
|
2123
|
+
fan_name: "#{air_loop.name} Fan",
|
|
2124
|
+
fan_efficiency: fan_efficiency,
|
|
2125
|
+
pressure_rise: fan_pressure_rise,
|
|
2126
|
+
motor_efficiency: fan_motor_efficiency,
|
|
2127
|
+
end_use_subcategory: 'VAV System Fans')
|
|
2129
2128
|
fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
|
2130
2129
|
fan.addToNode(air_loop.supplyInletNode)
|
|
2131
2130
|
|
|
2132
2131
|
# create heating coil
|
|
2133
|
-
htg_coil = create_coil_heating_electric(model,
|
|
2134
|
-
|
|
2135
|
-
|
|
2132
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
2133
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
2134
|
+
name: "#{air_loop.name} Htg Coil")
|
|
2136
2135
|
|
|
2137
2136
|
# set the setpointmanager for the central/preheat coil if required
|
|
2138
2137
|
model_set_central_preheat_coil_spm(model, thermal_zones, htg_coil)
|
|
2139
2138
|
|
|
2140
2139
|
# create cooling coil
|
|
2141
|
-
create_coil_cooling_water(model,
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2140
|
+
OpenstudioStandards::HVAC.create_coil_cooling_water(model,
|
|
2141
|
+
chilled_water_loop,
|
|
2142
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
2143
|
+
name: "#{air_loop.name} Clg Coil")
|
|
2145
2144
|
|
|
2146
2145
|
# create outdoor air intake system
|
|
2147
2146
|
oa_intake_controller = OpenStudio::Model::ControllerOutdoorAir.new(model)
|
|
@@ -2166,14 +2165,14 @@ class Standard
|
|
|
2166
2165
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.Model.Model', "Adding VAV with PFP Boxes and Reheat system terminal for #{zone.name}.")
|
|
2167
2166
|
|
|
2168
2167
|
# create reheat coil
|
|
2169
|
-
rht_coil = create_coil_heating_electric(model,
|
|
2170
|
-
|
|
2168
|
+
rht_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
2169
|
+
name: "#{zone.name} Electric Reheat Coil")
|
|
2171
2170
|
|
|
2172
2171
|
# create terminal fan
|
|
2173
2172
|
# @type [OpenStudio::Model::FanConstantVolume] pfp_fan
|
|
2174
|
-
pfp_fan =
|
|
2175
|
-
|
|
2176
|
-
|
|
2173
|
+
pfp_fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
2174
|
+
'PFP_Fan',
|
|
2175
|
+
fan_name: "#{zone.name} PFP Term Fan")
|
|
2177
2176
|
pfp_fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
|
2178
2177
|
|
|
2179
2178
|
# create parallel fan powered terminal
|
|
@@ -2272,31 +2271,31 @@ class Standard
|
|
|
2272
2271
|
sa_stpt_manager.addToNode(air_loop.supplyOutletNode)
|
|
2273
2272
|
|
|
2274
2273
|
# create fan
|
|
2275
|
-
fan =
|
|
2276
|
-
|
|
2277
|
-
|
|
2274
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
2275
|
+
'VAV_default',
|
|
2276
|
+
fan_name: "#{air_loop.name} Fan")
|
|
2278
2277
|
fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
|
2279
2278
|
fan.addToNode(air_loop.supplyInletNode)
|
|
2280
2279
|
|
|
2281
2280
|
# create heating coil
|
|
2282
2281
|
if hot_water_loop.nil?
|
|
2283
2282
|
if heating_type == 'Electricity'
|
|
2284
|
-
htg_coil = create_coil_heating_electric(model,
|
|
2285
|
-
|
|
2286
|
-
|
|
2283
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
2284
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
2285
|
+
name: "#{air_loop.name} Main Electric Htg Coil")
|
|
2287
2286
|
else # default to NaturalGas
|
|
2288
|
-
htg_coil = create_coil_heating_gas(model,
|
|
2289
|
-
|
|
2290
|
-
|
|
2287
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_gas(model,
|
|
2288
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
2289
|
+
name: "#{air_loop.name} Main Gas Htg Coil")
|
|
2291
2290
|
end
|
|
2292
2291
|
else
|
|
2293
|
-
htg_coil = create_coil_heating_water(model, hot_water_loop,
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
|
-
|
|
2299
|
-
|
|
2292
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_water(model, hot_water_loop,
|
|
2293
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
2294
|
+
name: "#{air_loop.name} Main Htg Coil",
|
|
2295
|
+
rated_inlet_water_temperature: hw_temp_c,
|
|
2296
|
+
rated_outlet_water_temperature: (hw_temp_c - hw_delta_t_k),
|
|
2297
|
+
rated_inlet_air_temperature: dsgn_temps['prehtg_dsgn_sup_air_temp_c'],
|
|
2298
|
+
rated_outlet_air_temperature: dsgn_temps['htg_dsgn_sup_air_temp_c'])
|
|
2300
2299
|
end
|
|
2301
2300
|
|
|
2302
2301
|
# set the setpointmanager for the central/preheat coil if required
|
|
@@ -2304,15 +2303,15 @@ class Standard
|
|
|
2304
2303
|
|
|
2305
2304
|
# create cooling coil
|
|
2306
2305
|
if chilled_water_loop.nil?
|
|
2307
|
-
create_coil_cooling_dx_two_speed(model,
|
|
2308
|
-
|
|
2309
|
-
|
|
2310
|
-
|
|
2306
|
+
OpenstudioStandards::HVAC.create_coil_cooling_dx_two_speed(model,
|
|
2307
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
2308
|
+
name: "#{air_loop.name} 2spd DX Clg Coil",
|
|
2309
|
+
type: 'OS default')
|
|
2311
2310
|
else
|
|
2312
|
-
create_coil_cooling_water(model,
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2311
|
+
OpenstudioStandards::HVAC.create_coil_cooling_water(model,
|
|
2312
|
+
chilled_water_loop,
|
|
2313
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
2314
|
+
name: "#{air_loop.name} Clg Coil")
|
|
2316
2315
|
end
|
|
2317
2316
|
|
|
2318
2317
|
# outdoor air intake system
|
|
@@ -2361,16 +2360,16 @@ class Standard
|
|
|
2361
2360
|
|
|
2362
2361
|
# create reheat coil
|
|
2363
2362
|
if electric_reheat || hot_water_loop.nil?
|
|
2364
|
-
rht_coil = create_coil_heating_electric(model,
|
|
2365
|
-
|
|
2363
|
+
rht_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
2364
|
+
name: "#{zone.name} Electric Reheat Coil")
|
|
2366
2365
|
else
|
|
2367
|
-
rht_coil = create_coil_heating_water(model,
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
|
-
|
|
2373
|
-
|
|
2366
|
+
rht_coil = OpenstudioStandards::HVAC.create_coil_heating_water(model,
|
|
2367
|
+
hot_water_loop,
|
|
2368
|
+
name: "#{zone.name} Reheat Coil",
|
|
2369
|
+
rated_inlet_water_temperature: hw_temp_c,
|
|
2370
|
+
rated_outlet_water_temperature: (hw_temp_c - hw_delta_t_k),
|
|
2371
|
+
rated_inlet_air_temperature: dsgn_temps['htg_dsgn_sup_air_temp_c'],
|
|
2372
|
+
rated_outlet_air_temperature: dsgn_temps['zn_htg_dsgn_sup_air_temp_c'])
|
|
2374
2373
|
end
|
|
2375
2374
|
|
|
2376
2375
|
# create VAV terminal
|
|
@@ -2462,34 +2461,34 @@ class Standard
|
|
|
2462
2461
|
|
|
2463
2462
|
# create fan
|
|
2464
2463
|
# @type [OpenStudio::Model::FanVariableVolume] fan
|
|
2465
|
-
fan =
|
|
2466
|
-
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
|
|
2470
|
-
|
|
2471
|
-
|
|
2464
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
2465
|
+
'VAV_System_Fan',
|
|
2466
|
+
fan_name: "#{air_loop.name} Fan",
|
|
2467
|
+
fan_efficiency: fan_efficiency,
|
|
2468
|
+
pressure_rise: fan_pressure_rise,
|
|
2469
|
+
motor_efficiency: fan_motor_efficiency,
|
|
2470
|
+
end_use_subcategory: 'VAV System Fans')
|
|
2472
2471
|
fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
|
2473
2472
|
fan.addToNode(air_loop.supplyInletNode)
|
|
2474
2473
|
|
|
2475
2474
|
# create heating coil
|
|
2476
|
-
htg_coil = create_coil_heating_electric(model,
|
|
2477
|
-
|
|
2478
|
-
|
|
2475
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
2476
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
2477
|
+
name: "#{air_loop.name} Main Htg Coil")
|
|
2479
2478
|
|
|
2480
2479
|
# set the setpointmanager for the central/preheat coil if required
|
|
2481
2480
|
model_set_central_preheat_coil_spm(model, thermal_zones, htg_coil)
|
|
2482
2481
|
|
|
2483
2482
|
# create cooling coil
|
|
2484
2483
|
if chilled_water_loop.nil?
|
|
2485
|
-
create_coil_cooling_dx_two_speed(model,
|
|
2486
|
-
|
|
2487
|
-
|
|
2484
|
+
OpenstudioStandards::HVAC.create_coil_cooling_dx_two_speed(model,
|
|
2485
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
2486
|
+
name: "#{air_loop.name} 2spd DX Clg Coil", type: 'OS default')
|
|
2488
2487
|
else
|
|
2489
|
-
create_coil_cooling_water(model,
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2488
|
+
OpenstudioStandards::HVAC.create_coil_cooling_water(model,
|
|
2489
|
+
chilled_water_loop,
|
|
2490
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
2491
|
+
name: "#{air_loop.name} Clg Coil")
|
|
2493
2492
|
end
|
|
2494
2493
|
|
|
2495
2494
|
# create outdoor air intake system
|
|
@@ -2516,14 +2515,14 @@ class Standard
|
|
|
2516
2515
|
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.Model.Model', "Adding PVAV PFP Box to zone #{zone.name}")
|
|
2517
2516
|
|
|
2518
2517
|
# create electric reheat coil
|
|
2519
|
-
rht_coil = create_coil_heating_electric(model,
|
|
2520
|
-
|
|
2518
|
+
rht_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
2519
|
+
name: "#{zone.name} Electric Reheat Coil")
|
|
2521
2520
|
|
|
2522
2521
|
# create terminal fan
|
|
2523
2522
|
# @type [OpenStudio::Model::FanConstantVolume] pfp_fan
|
|
2524
|
-
pfp_fan =
|
|
2525
|
-
|
|
2526
|
-
|
|
2523
|
+
pfp_fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
2524
|
+
'PFP_Fan',
|
|
2525
|
+
fan_name: "#{zone.name} PFP Term Fan")
|
|
2527
2526
|
pfp_fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
|
2528
2527
|
|
|
2529
2528
|
# parallel fan powered terminal
|
|
@@ -2619,37 +2618,37 @@ class Standard
|
|
|
2619
2618
|
sa_stpt_manager.addToNode(air_loop.supplyOutletNode)
|
|
2620
2619
|
|
|
2621
2620
|
# create fan
|
|
2622
|
-
fan =
|
|
2623
|
-
|
|
2624
|
-
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2621
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
2622
|
+
'Packaged_RTU_SZ_AC_CAV_Fan',
|
|
2623
|
+
fan_name: "#{air_loop.name} Fan",
|
|
2624
|
+
fan_efficiency: fan_efficiency,
|
|
2625
|
+
pressure_rise: fan_pressure_rise,
|
|
2626
|
+
motor_efficiency: fan_motor_efficiency,
|
|
2627
|
+
end_use_subcategory: 'CAV System Fans')
|
|
2629
2628
|
fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
|
2630
2629
|
fan.addToNode(air_loop.supplyInletNode)
|
|
2631
2630
|
|
|
2632
2631
|
# create heating coil
|
|
2633
|
-
create_coil_heating_water(model,
|
|
2634
|
-
|
|
2635
|
-
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
|
|
2640
|
-
|
|
2632
|
+
OpenstudioStandards::HVAC.create_coil_heating_water(model,
|
|
2633
|
+
hot_water_loop,
|
|
2634
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
2635
|
+
name: "#{air_loop.name} Main Htg Coil",
|
|
2636
|
+
rated_inlet_water_temperature: hw_temp_c,
|
|
2637
|
+
rated_outlet_water_temperature: (hw_temp_c - hw_delta_t_k),
|
|
2638
|
+
rated_inlet_air_temperature: dsgn_temps['prehtg_dsgn_sup_air_temp_c'],
|
|
2639
|
+
rated_outlet_air_temperature: dsgn_temps['htg_dsgn_sup_air_temp_c'])
|
|
2641
2640
|
|
|
2642
2641
|
# create cooling coil
|
|
2643
2642
|
if chilled_water_loop.nil?
|
|
2644
|
-
create_coil_cooling_dx_two_speed(model,
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2643
|
+
OpenstudioStandards::HVAC.create_coil_cooling_dx_two_speed(model,
|
|
2644
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
2645
|
+
name: "#{air_loop.name} 2spd DX Clg Coil",
|
|
2646
|
+
type: 'OS default')
|
|
2648
2647
|
else
|
|
2649
|
-
create_coil_cooling_water(model,
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2648
|
+
OpenstudioStandards::HVAC.create_coil_cooling_water(model,
|
|
2649
|
+
chilled_water_loop,
|
|
2650
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
2651
|
+
name: "#{air_loop.name} Clg Coil")
|
|
2653
2652
|
end
|
|
2654
2653
|
|
|
2655
2654
|
# create outdoor air intake system
|
|
@@ -2675,13 +2674,13 @@ class Standard
|
|
|
2675
2674
|
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.Model.Model', "Adding CAV for #{zone.name}")
|
|
2676
2675
|
|
|
2677
2676
|
# Reheat coil
|
|
2678
|
-
rht_coil = create_coil_heating_water(model,
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2677
|
+
rht_coil = OpenstudioStandards::HVAC.create_coil_heating_water(model,
|
|
2678
|
+
hot_water_loop,
|
|
2679
|
+
name: "#{zone.name} Reheat Coil",
|
|
2680
|
+
rated_inlet_water_temperature: hw_temp_c,
|
|
2681
|
+
rated_outlet_water_temperature: (hw_temp_c - hw_delta_t_k),
|
|
2682
|
+
rated_inlet_air_temperature: dsgn_temps['htg_dsgn_sup_air_temp_c'],
|
|
2683
|
+
rated_outlet_air_temperature: dsgn_temps['zn_htg_dsgn_sup_air_temp_c'])
|
|
2685
2684
|
# VAV terminal
|
|
2686
2685
|
terminal = OpenStudio::Model::AirTerminalSingleDuctVAVReheat.new(model, model.alwaysOnDiscreteSchedule, rht_coil)
|
|
2687
2686
|
terminal.setName("#{zone.name} VAV Terminal")
|
|
@@ -2800,54 +2799,54 @@ class Standard
|
|
|
2800
2799
|
# create heating coil
|
|
2801
2800
|
case heating_type
|
|
2802
2801
|
when 'NaturalGas', 'Gas'
|
|
2803
|
-
htg_coil = create_coil_heating_gas(model,
|
|
2804
|
-
|
|
2802
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_gas(model,
|
|
2803
|
+
name: "#{air_loop.name} Gas Htg Coil")
|
|
2805
2804
|
when 'Water'
|
|
2806
2805
|
if hot_water_loop.nil?
|
|
2807
2806
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', 'No hot water plant loop supplied')
|
|
2808
2807
|
return false
|
|
2809
2808
|
end
|
|
2810
|
-
htg_coil = create_coil_heating_water(model,
|
|
2811
|
-
|
|
2812
|
-
|
|
2813
|
-
|
|
2814
|
-
|
|
2815
|
-
|
|
2816
|
-
|
|
2809
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_water(model,
|
|
2810
|
+
hot_water_loop,
|
|
2811
|
+
name: "#{air_loop.name} Water Htg Coil",
|
|
2812
|
+
rated_inlet_water_temperature: hw_temp_c,
|
|
2813
|
+
rated_outlet_water_temperature: (hw_temp_c - hw_delta_t_k),
|
|
2814
|
+
rated_inlet_air_temperature: dsgn_temps['prehtg_dsgn_sup_air_temp_c'],
|
|
2815
|
+
rated_outlet_air_temperature: dsgn_temps['htg_dsgn_sup_air_temp_c'])
|
|
2817
2816
|
when 'Single Speed Heat Pump'
|
|
2818
|
-
htg_coil = create_coil_heating_dx_single_speed(model,
|
|
2819
|
-
|
|
2820
|
-
|
|
2821
|
-
|
|
2817
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_dx_single_speed(model,
|
|
2818
|
+
name: "#{zone.name} HP Htg Coil",
|
|
2819
|
+
type: 'PSZ-AC',
|
|
2820
|
+
cop: 3.3)
|
|
2822
2821
|
when 'Water To Air Heat Pump'
|
|
2823
|
-
htg_coil = create_coil_heating_water_to_air_heat_pump_equation_fit(model,
|
|
2824
|
-
|
|
2825
|
-
|
|
2822
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_water_to_air_heat_pump_equation_fit(model,
|
|
2823
|
+
hot_water_loop,
|
|
2824
|
+
name: "#{air_loop.name} Water-to-Air HP Htg Coil")
|
|
2826
2825
|
when 'Electricity', 'Electric'
|
|
2827
|
-
htg_coil = create_coil_heating_electric(model,
|
|
2828
|
-
|
|
2826
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
2827
|
+
name: "#{air_loop.name} Electric Htg Coil")
|
|
2829
2828
|
else
|
|
2830
2829
|
# zero-capacity, always-off electric heating coil
|
|
2831
|
-
htg_coil = create_coil_heating_electric(model,
|
|
2832
|
-
|
|
2833
|
-
|
|
2834
|
-
|
|
2830
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
2831
|
+
name: "#{air_loop.name} No Heat",
|
|
2832
|
+
schedule: model.alwaysOffDiscreteSchedule,
|
|
2833
|
+
nominal_capacity: 0.0)
|
|
2835
2834
|
end
|
|
2836
2835
|
|
|
2837
2836
|
# create supplemental heating coil
|
|
2838
2837
|
case supplemental_heating_type
|
|
2839
2838
|
when 'Electricity', 'Electric'
|
|
2840
|
-
supplemental_htg_coil = create_coil_heating_electric(model,
|
|
2841
|
-
|
|
2839
|
+
supplemental_htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
2840
|
+
name: "#{air_loop.name} Electric Backup Htg Coil")
|
|
2842
2841
|
when 'NaturalGas', 'Gas'
|
|
2843
|
-
supplemental_htg_coil = create_coil_heating_gas(model,
|
|
2844
|
-
|
|
2842
|
+
supplemental_htg_coil = OpenstudioStandards::HVAC.create_coil_heating_gas(model,
|
|
2843
|
+
name: "#{air_loop.name} Gas Backup Htg Coil")
|
|
2845
2844
|
else
|
|
2846
2845
|
# Zero-capacity, always-off electric heating coil
|
|
2847
|
-
supplemental_htg_coil = create_coil_heating_electric(model,
|
|
2848
|
-
|
|
2849
|
-
|
|
2850
|
-
|
|
2846
|
+
supplemental_htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
2847
|
+
name: "#{air_loop.name} No Heat",
|
|
2848
|
+
schedule: model.alwaysOffDiscreteSchedule,
|
|
2849
|
+
nominal_capacity: 0.0)
|
|
2851
2850
|
end
|
|
2852
2851
|
|
|
2853
2852
|
# create cooling coil
|
|
@@ -2857,20 +2856,20 @@ class Standard
|
|
|
2857
2856
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', 'No chilled water plant loop supplied')
|
|
2858
2857
|
return false
|
|
2859
2858
|
end
|
|
2860
|
-
clg_coil = create_coil_cooling_water(model,
|
|
2861
|
-
|
|
2862
|
-
|
|
2859
|
+
clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_water(model,
|
|
2860
|
+
chilled_water_loop,
|
|
2861
|
+
name: "#{air_loop.name} Water Clg Coil")
|
|
2863
2862
|
when 'Two Speed DX AC'
|
|
2864
|
-
clg_coil = create_coil_cooling_dx_two_speed(model,
|
|
2865
|
-
|
|
2863
|
+
clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_dx_two_speed(model,
|
|
2864
|
+
name: "#{air_loop.name} 2spd DX AC Clg Coil")
|
|
2866
2865
|
when 'Single Speed DX AC'
|
|
2867
|
-
clg_coil = create_coil_cooling_dx_single_speed(model,
|
|
2868
|
-
|
|
2869
|
-
|
|
2866
|
+
clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_dx_single_speed(model,
|
|
2867
|
+
name: "#{air_loop.name} 1spd DX AC Clg Coil",
|
|
2868
|
+
type: 'PSZ-AC')
|
|
2870
2869
|
when 'Single Speed Heat Pump'
|
|
2871
|
-
clg_coil = create_coil_cooling_dx_single_speed(model,
|
|
2872
|
-
|
|
2873
|
-
|
|
2870
|
+
clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_dx_single_speed(model,
|
|
2871
|
+
name: "#{air_loop.name} 1spd DX HP Clg Coil",
|
|
2872
|
+
type: 'Heat Pump')
|
|
2874
2873
|
# clg_coil.setMaximumOutdoorDryBulbTemperatureForCrankcaseHeaterOperation(OpenStudio::OptionalDouble.new(10.0))
|
|
2875
2874
|
# clg_coil.setRatedSensibleHeatRatio(0.69)
|
|
2876
2875
|
# clg_coil.setBasinHeaterCapacity(10)
|
|
@@ -2880,9 +2879,9 @@ class Standard
|
|
|
2880
2879
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', 'No chilled water plant loop supplied')
|
|
2881
2880
|
return false
|
|
2882
2881
|
end
|
|
2883
|
-
clg_coil = create_coil_cooling_water_to_air_heat_pump_equation_fit(model,
|
|
2884
|
-
|
|
2885
|
-
|
|
2882
|
+
clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_water_to_air_heat_pump_equation_fit(model,
|
|
2883
|
+
chilled_water_loop,
|
|
2884
|
+
name: "#{air_loop.name} Water-to-Air HP Clg Coil")
|
|
2886
2885
|
else
|
|
2887
2886
|
clg_coil = nil
|
|
2888
2887
|
end
|
|
@@ -2890,13 +2889,13 @@ class Standard
|
|
|
2890
2889
|
# Use a Fan:OnOff in the unitary system object
|
|
2891
2890
|
case fan_type
|
|
2892
2891
|
when 'Cycling'
|
|
2893
|
-
fan =
|
|
2894
|
-
|
|
2895
|
-
|
|
2892
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
2893
|
+
'Packaged_RTU_SZ_AC_Cycling_Fan',
|
|
2894
|
+
fan_name: "#{air_loop.name} Fan")
|
|
2896
2895
|
when 'ConstantVolume'
|
|
2897
|
-
fan =
|
|
2898
|
-
|
|
2899
|
-
|
|
2896
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
2897
|
+
'Packaged_RTU_SZ_AC_CAV_OnOff_Fan',
|
|
2898
|
+
fan_name: "#{air_loop.name} Fan")
|
|
2900
2899
|
else
|
|
2901
2900
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', 'Invalid fan_type')
|
|
2902
2901
|
return false
|
|
@@ -3073,54 +3072,54 @@ class Standard
|
|
|
3073
3072
|
|
|
3074
3073
|
# create fan
|
|
3075
3074
|
# @type [OpenStudio::Model::FanVariableVolume] fan
|
|
3076
|
-
fan =
|
|
3077
|
-
|
|
3078
|
-
|
|
3079
|
-
|
|
3075
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
3076
|
+
fan_type,
|
|
3077
|
+
fan_name: "#{air_loop.name} Fan",
|
|
3078
|
+
end_use_subcategory: 'VAV System Fans')
|
|
3080
3079
|
fan.setAvailabilitySchedule(hvac_op_sch)
|
|
3081
3080
|
|
|
3082
3081
|
# create heating coil
|
|
3083
3082
|
case heating_type
|
|
3084
3083
|
when 'NaturalGas', 'Gas'
|
|
3085
|
-
htg_coil = create_coil_heating_gas(model,
|
|
3086
|
-
|
|
3084
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_gas(model,
|
|
3085
|
+
name: "#{air_loop.name} Gas Htg Coil")
|
|
3087
3086
|
when 'Electricity', 'Electric'
|
|
3088
|
-
htg_coil = create_coil_heating_electric(model,
|
|
3089
|
-
|
|
3087
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
3088
|
+
name: "#{air_loop.name} Electric Htg Coil")
|
|
3090
3089
|
when 'Water'
|
|
3091
|
-
htg_coil = create_coil_heating_water(model,
|
|
3092
|
-
|
|
3093
|
-
|
|
3090
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_water(model,
|
|
3091
|
+
hot_water_loop,
|
|
3092
|
+
name: "#{air_loop.name} Water Htg Coil")
|
|
3094
3093
|
else
|
|
3095
3094
|
# Zero-capacity, always-off electric heating coil
|
|
3096
|
-
htg_coil = create_coil_heating_electric(model,
|
|
3097
|
-
|
|
3098
|
-
|
|
3099
|
-
|
|
3095
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
3096
|
+
name: "#{air_loop.name} No Heat",
|
|
3097
|
+
schedule: model.alwaysOffDiscreteSchedule,
|
|
3098
|
+
nominal_capacity: 0.0)
|
|
3100
3099
|
end
|
|
3101
3100
|
|
|
3102
3101
|
# create supplemental heating coil
|
|
3103
3102
|
case supplemental_heating_type
|
|
3104
3103
|
when 'Electricity', 'Electric'
|
|
3105
|
-
supplemental_htg_coil = create_coil_heating_electric(model,
|
|
3106
|
-
|
|
3104
|
+
supplemental_htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
3105
|
+
name: "#{air_loop.name} Electric Backup Htg Coil")
|
|
3107
3106
|
when 'NaturalGas', 'Gas'
|
|
3108
|
-
supplemental_htg_coil = create_coil_heating_gas(model,
|
|
3109
|
-
|
|
3107
|
+
supplemental_htg_coil = OpenstudioStandards::HVAC.create_coil_heating_gas(model,
|
|
3108
|
+
name: "#{air_loop.name} Gas Backup Htg Coil")
|
|
3110
3109
|
else
|
|
3111
3110
|
# zero-capacity, always-off electric heating coil
|
|
3112
|
-
supplemental_htg_coil = create_coil_heating_electric(model,
|
|
3113
|
-
|
|
3114
|
-
|
|
3115
|
-
|
|
3111
|
+
supplemental_htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
3112
|
+
name: "#{air_loop.name} No Backup Heat",
|
|
3113
|
+
schedule: model.alwaysOffDiscreteSchedule,
|
|
3114
|
+
nominal_capacity: 0.0)
|
|
3116
3115
|
end
|
|
3117
3116
|
|
|
3118
3117
|
# create cooling coil
|
|
3119
3118
|
case cooling_type
|
|
3120
3119
|
when 'WaterCooled'
|
|
3121
|
-
clg_coil = create_coil_cooling_water(model,
|
|
3122
|
-
|
|
3123
|
-
|
|
3120
|
+
clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_water(model,
|
|
3121
|
+
chilled_water_loop,
|
|
3122
|
+
name: "#{air_loop.name} Clg Coil")
|
|
3124
3123
|
else # 'AirCooled'
|
|
3125
3124
|
clg_coil = OpenStudio::Model::CoilCoolingDXVariableSpeed.new(model)
|
|
3126
3125
|
clg_coil.setName("#{air_loop.name} Var spd DX AC Clg Coil")
|
|
@@ -3291,19 +3290,19 @@ class Standard
|
|
|
3291
3290
|
# add the components to the air loop in order from closest to zone to furthest from zone
|
|
3292
3291
|
if main_data_center
|
|
3293
3292
|
# extra water heating coil
|
|
3294
|
-
create_coil_heating_water(model,
|
|
3295
|
-
|
|
3296
|
-
|
|
3297
|
-
|
|
3298
|
-
|
|
3299
|
-
|
|
3300
|
-
|
|
3301
|
-
|
|
3293
|
+
OpenstudioStandards::HVAC.create_coil_heating_water(model,
|
|
3294
|
+
hot_water_loop,
|
|
3295
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
3296
|
+
name: "#{air_loop.name} Water Htg Coil",
|
|
3297
|
+
rated_inlet_water_temperature: hw_temp_c,
|
|
3298
|
+
rated_outlet_water_temperature: (hw_temp_c - hw_delta_t_k),
|
|
3299
|
+
rated_inlet_air_temperature: dsgn_temps['prehtg_dsgn_sup_air_temp_c'],
|
|
3300
|
+
rated_outlet_air_temperature: dsgn_temps['htg_dsgn_sup_air_temp_c'])
|
|
3302
3301
|
|
|
3303
3302
|
# extra electric heating coil
|
|
3304
|
-
create_coil_heating_electric(model,
|
|
3305
|
-
|
|
3306
|
-
|
|
3303
|
+
OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
3304
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
3305
|
+
name: "#{air_loop.name} Electric Htg Coil")
|
|
3307
3306
|
|
|
3308
3307
|
# humidity controllers
|
|
3309
3308
|
humidifier = OpenStudio::Model::HumidifierSteamElectric.new(model)
|
|
@@ -3321,20 +3320,20 @@ class Standard
|
|
|
3321
3320
|
|
|
3322
3321
|
# create fan
|
|
3323
3322
|
# @type [OpenStudio::Model::FanConstantVolume]
|
|
3324
|
-
fan =
|
|
3325
|
-
|
|
3326
|
-
|
|
3323
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
3324
|
+
'Packaged_RTU_SZ_AC_Cycling_Fan',
|
|
3325
|
+
fan_name: "#{air_loop.name} Fan")
|
|
3327
3326
|
fan.setAvailabilitySchedule(hvac_op_sch)
|
|
3328
3327
|
|
|
3329
3328
|
# create heating and cooling coils
|
|
3330
|
-
htg_coil = create_coil_heating_water_to_air_heat_pump_equation_fit(model,
|
|
3331
|
-
|
|
3332
|
-
|
|
3333
|
-
clg_coil = create_coil_cooling_water_to_air_heat_pump_equation_fit(model,
|
|
3334
|
-
|
|
3335
|
-
|
|
3336
|
-
supplemental_htg_coil = create_coil_heating_electric(model,
|
|
3337
|
-
|
|
3329
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_water_to_air_heat_pump_equation_fit(model,
|
|
3330
|
+
heat_pump_loop,
|
|
3331
|
+
name: "#{air_loop.name} Water-to-Air HP Htg Coil")
|
|
3332
|
+
clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_water_to_air_heat_pump_equation_fit(model,
|
|
3333
|
+
heat_pump_loop,
|
|
3334
|
+
name: "#{air_loop.name} Water-to-Air HP Clg Coil")
|
|
3335
|
+
supplemental_htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
3336
|
+
name: "#{air_loop.name} Electric Backup Htg Coil")
|
|
3338
3337
|
|
|
3339
3338
|
# wrap fan and coils in a unitary system object
|
|
3340
3339
|
unitary_system = OpenStudio::Model::AirLoopHVACUnitarySystem.new(model)
|
|
@@ -3457,19 +3456,19 @@ class Standard
|
|
|
3457
3456
|
# Cycling: Unitary System
|
|
3458
3457
|
# CyclingHeatPump: Unitary Heat Pump system
|
|
3459
3458
|
if fan_type == 'VariableVolume'
|
|
3460
|
-
fan =
|
|
3461
|
-
|
|
3462
|
-
|
|
3459
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
3460
|
+
'CRAC_VAV_fan',
|
|
3461
|
+
fan_name: "#{air_loop.name} Fan")
|
|
3463
3462
|
fan.setAvailabilitySchedule(hvac_op_sch)
|
|
3464
3463
|
elsif fan_type == 'ConstantVolume'
|
|
3465
|
-
fan =
|
|
3466
|
-
|
|
3467
|
-
|
|
3464
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
3465
|
+
'CRAC_CAV_fan',
|
|
3466
|
+
fan_name: "#{air_loop.name} Fan")
|
|
3468
3467
|
fan.setAvailabilitySchedule(hvac_op_sch)
|
|
3469
3468
|
elsif fan_type == 'Cycling'
|
|
3470
|
-
fan =
|
|
3471
|
-
|
|
3472
|
-
|
|
3469
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
3470
|
+
'CRAC_Cycling_fan',
|
|
3471
|
+
fan_name: "#{air_loop.name} Fan")
|
|
3473
3472
|
fan.setAvailabilitySchedule(hvac_op_sch)
|
|
3474
3473
|
else
|
|
3475
3474
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.Model.Model', "Fan type '#{fan_type}' not recognized, cannot add CRAC.")
|
|
@@ -3479,12 +3478,12 @@ class Standard
|
|
|
3479
3478
|
# create cooling coil
|
|
3480
3479
|
case cooling_type
|
|
3481
3480
|
when 'Two Speed DX AC'
|
|
3482
|
-
clg_coil = create_coil_cooling_dx_two_speed(model,
|
|
3483
|
-
|
|
3481
|
+
clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_dx_two_speed(model,
|
|
3482
|
+
name: "#{air_loop.name} 2spd DX AC Clg Coil")
|
|
3484
3483
|
when 'Single Speed DX AC'
|
|
3485
|
-
clg_coil = create_coil_cooling_dx_single_speed(model,
|
|
3486
|
-
|
|
3487
|
-
|
|
3484
|
+
clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_dx_single_speed(model,
|
|
3485
|
+
name: "#{air_loop.name} 1spd DX AC Clg Coil",
|
|
3486
|
+
type: 'PSZ-AC')
|
|
3488
3487
|
else
|
|
3489
3488
|
clg_coil = nil
|
|
3490
3489
|
end
|
|
@@ -3671,9 +3670,9 @@ class Standard
|
|
|
3671
3670
|
setpoint_mgr_cooling.addToNode(air_loop.supplyOutletNode)
|
|
3672
3671
|
|
|
3673
3672
|
# create fan
|
|
3674
|
-
fan =
|
|
3675
|
-
|
|
3676
|
-
|
|
3673
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
3674
|
+
'VAV_System_Fan',
|
|
3675
|
+
fan_name: "#{air_loop.name} Fan")
|
|
3677
3676
|
fan.setAvailabilitySchedule(hvac_op_sch)
|
|
3678
3677
|
fan.addToNode(air_loop.supplyInletNode)
|
|
3679
3678
|
|
|
@@ -3689,11 +3688,11 @@ class Standard
|
|
|
3689
3688
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', 'No chilled water plant loop supplied for CRAH system')
|
|
3690
3689
|
return false
|
|
3691
3690
|
else
|
|
3692
|
-
create_coil_cooling_water(model,
|
|
3693
|
-
|
|
3694
|
-
|
|
3695
|
-
|
|
3696
|
-
|
|
3691
|
+
OpenstudioStandards::HVAC.create_coil_cooling_water(model,
|
|
3692
|
+
chilled_water_loop,
|
|
3693
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
3694
|
+
name: "#{air_loop.name} Water Clg Coil",
|
|
3695
|
+
schedule: hvac_op_sch)
|
|
3697
3696
|
end
|
|
3698
3697
|
|
|
3699
3698
|
# outdoor air intake system
|
|
@@ -3815,16 +3814,16 @@ class Standard
|
|
|
3815
3814
|
# create fan
|
|
3816
3815
|
fan = nil
|
|
3817
3816
|
if fan_type == 'ConstantVolume'
|
|
3818
|
-
fan =
|
|
3819
|
-
|
|
3820
|
-
|
|
3821
|
-
|
|
3817
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
3818
|
+
'Split_AC_CAV_Fan',
|
|
3819
|
+
fan_name: "#{air_loop.name} Fan",
|
|
3820
|
+
end_use_subcategory: 'CAV System Fans')
|
|
3822
3821
|
fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
|
3823
3822
|
elsif fan_type == 'Cycling'
|
|
3824
|
-
fan =
|
|
3825
|
-
|
|
3826
|
-
|
|
3827
|
-
|
|
3823
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
3824
|
+
'Split_AC_Cycling_Fan',
|
|
3825
|
+
fan_name: "#{air_loop.name} Fan",
|
|
3826
|
+
end_use_subcategory: 'CAV System Fans')
|
|
3828
3827
|
fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
|
3829
3828
|
else
|
|
3830
3829
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.Model.Model', "fan_type #{fan_type} invalid for split AC system.")
|
|
@@ -3833,20 +3832,20 @@ class Standard
|
|
|
3833
3832
|
|
|
3834
3833
|
# create supplemental heating coil
|
|
3835
3834
|
if supplemental_heating_type == 'Electric'
|
|
3836
|
-
create_coil_heating_electric(model,
|
|
3837
|
-
|
|
3838
|
-
|
|
3835
|
+
OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
3836
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
3837
|
+
name: "#{air_loop.name} Electric Backup Htg Coil")
|
|
3839
3838
|
elsif supplemental_heating_type == 'Gas'
|
|
3840
|
-
create_coil_heating_gas(model,
|
|
3841
|
-
|
|
3842
|
-
|
|
3839
|
+
OpenstudioStandards::HVAC.create_coil_heating_gas(model,
|
|
3840
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
3841
|
+
name: "#{air_loop.name} Gas Backup Htg Coil")
|
|
3843
3842
|
end
|
|
3844
3843
|
|
|
3845
3844
|
# create heating coil
|
|
3846
3845
|
if heating_type == 'Gas'
|
|
3847
|
-
htg_coil = create_coil_heating_gas(model,
|
|
3848
|
-
|
|
3849
|
-
|
|
3846
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_gas(model,
|
|
3847
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
3848
|
+
name: "#{air_loop.name} Gas Htg Coil")
|
|
3850
3849
|
htg_part_load_fraction_correlation = OpenStudio::Model::CurveCubic.new(model)
|
|
3851
3850
|
htg_part_load_fraction_correlation.setCoefficient1Constant(0.8)
|
|
3852
3851
|
htg_part_load_fraction_correlation.setCoefficient2x(0.2)
|
|
@@ -3856,24 +3855,24 @@ class Standard
|
|
|
3856
3855
|
htg_part_load_fraction_correlation.setMaximumValueofx(1.0)
|
|
3857
3856
|
htg_coil.setPartLoadFractionCorrelationCurve(htg_part_load_fraction_correlation)
|
|
3858
3857
|
elsif heating_type == 'Single Speed Heat Pump'
|
|
3859
|
-
create_coil_heating_dx_single_speed(model,
|
|
3860
|
-
|
|
3861
|
-
|
|
3858
|
+
OpenstudioStandards::HVAC.create_coil_heating_dx_single_speed(model,
|
|
3859
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
3860
|
+
name: "#{air_loop.name} HP Htg Coil")
|
|
3862
3861
|
end
|
|
3863
3862
|
|
|
3864
3863
|
# create cooling coil
|
|
3865
3864
|
if cooling_type == 'Two Speed DX AC'
|
|
3866
|
-
create_coil_cooling_dx_two_speed(model,
|
|
3867
|
-
|
|
3868
|
-
|
|
3865
|
+
OpenstudioStandards::HVAC.create_coil_cooling_dx_two_speed(model,
|
|
3866
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
3867
|
+
name: "#{air_loop.name} 2spd DX AC Clg Coil")
|
|
3869
3868
|
elsif cooling_type == 'Single Speed DX AC'
|
|
3870
|
-
create_coil_cooling_dx_single_speed(model,
|
|
3869
|
+
OpenstudioStandards::HVAC.create_coil_cooling_dx_single_speed(model,
|
|
3871
3870
|
air_loop_node: air_loop.supplyInletNode,
|
|
3872
3871
|
name: "#{air_loop.name} 1spd DX AC Clg Coil", type: 'Split AC')
|
|
3873
3872
|
elsif cooling_type == 'Single Speed Heat Pump'
|
|
3874
|
-
create_coil_cooling_dx_single_speed(model,
|
|
3875
|
-
|
|
3876
|
-
|
|
3873
|
+
OpenstudioStandards::HVAC.create_coil_cooling_dx_single_speed(model,
|
|
3874
|
+
air_loop_node: air_loop.supplyInletNode,
|
|
3875
|
+
name: "#{air_loop.name} 1spd DX HP Clg Coil", type: 'Heat Pump')
|
|
3877
3876
|
end
|
|
3878
3877
|
|
|
3879
3878
|
# create outdoor air controller
|
|
@@ -3953,9 +3952,9 @@ class Standard
|
|
|
3953
3952
|
# create heating coil
|
|
3954
3953
|
case heating_type
|
|
3955
3954
|
when 'Single Speed DX'
|
|
3956
|
-
htg_coil = create_coil_heating_dx_single_speed(model,
|
|
3957
|
-
|
|
3958
|
-
|
|
3955
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_dx_single_speed(model,
|
|
3956
|
+
name: "#{air_loop.name} Heating Coil",
|
|
3957
|
+
type: 'Residential Minisplit HP')
|
|
3959
3958
|
htg_coil.setMinimumOutdoorDryBulbTemperatureforCompressorOperation(OpenStudio.convert(-30.0, 'F', 'C').get)
|
|
3960
3959
|
htg_coil.setMaximumOutdoorDryBulbTemperatureforDefrostOperation(OpenStudio.convert(40.0, 'F', 'C').get)
|
|
3961
3960
|
htg_coil.setCrankcaseHeaterCapacity(0)
|
|
@@ -3968,31 +3967,31 @@ class Standard
|
|
|
3968
3967
|
end
|
|
3969
3968
|
|
|
3970
3969
|
# create backup heating coil
|
|
3971
|
-
supplemental_htg_coil = create_coil_heating_electric(model,
|
|
3972
|
-
|
|
3970
|
+
supplemental_htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
3971
|
+
name: "#{air_loop.name} Electric Backup Htg Coil")
|
|
3973
3972
|
|
|
3974
3973
|
# create cooling coil
|
|
3975
3974
|
case cooling_type
|
|
3976
3975
|
when 'Two Speed DX AC'
|
|
3977
|
-
clg_coil = create_coil_cooling_dx_two_speed(model,
|
|
3978
|
-
|
|
3979
|
-
|
|
3976
|
+
clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_dx_two_speed(model,
|
|
3977
|
+
name: "#{air_loop.name} 2spd DX AC Clg Coil",
|
|
3978
|
+
type: 'Residential Minisplit HP')
|
|
3980
3979
|
when 'Single Speed DX AC'
|
|
3981
|
-
clg_coil = create_coil_cooling_dx_single_speed(model,
|
|
3982
|
-
|
|
3980
|
+
clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_dx_single_speed(model,
|
|
3981
|
+
name: "#{air_loop.name} 1spd DX AC Clg Coil", type: 'Split AC')
|
|
3983
3982
|
when 'Single Speed Heat Pump'
|
|
3984
|
-
clg_coil = create_coil_cooling_dx_single_speed(model,
|
|
3985
|
-
|
|
3983
|
+
clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_dx_single_speed(model,
|
|
3984
|
+
name: "#{air_loop.name} 1spd DX HP Clg Coil", type: 'Heat Pump')
|
|
3986
3985
|
else
|
|
3987
3986
|
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.Model.Model', "No cooling coil type selected for minisplit HP for #{zone.name}.")
|
|
3988
3987
|
clg_coil = nil
|
|
3989
3988
|
end
|
|
3990
3989
|
|
|
3991
3990
|
# create fan
|
|
3992
|
-
fan =
|
|
3993
|
-
|
|
3994
|
-
|
|
3995
|
-
|
|
3991
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
3992
|
+
'Minisplit_HP_Fan',
|
|
3993
|
+
fan_name: "#{air_loop.name} Fan",
|
|
3994
|
+
end_use_subcategory: 'Minisplit HP Fans')
|
|
3996
3995
|
fan.setAvailabilitySchedule(hvac_op_sch)
|
|
3997
3996
|
|
|
3998
3997
|
# create unitary system (holds the coils and fan)
|
|
@@ -4070,13 +4069,13 @@ class Standard
|
|
|
4070
4069
|
|
|
4071
4070
|
# add fan
|
|
4072
4071
|
if fan_type == 'ConstantVolume'
|
|
4073
|
-
fan =
|
|
4074
|
-
|
|
4075
|
-
|
|
4072
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
4073
|
+
'PTAC_CAV_Fan',
|
|
4074
|
+
fan_name: "#{zone.name} PTAC Fan")
|
|
4076
4075
|
elsif fan_type == 'Cycling'
|
|
4077
|
-
fan =
|
|
4078
|
-
|
|
4079
|
-
|
|
4076
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
4077
|
+
'PTAC_Cycling_Fan',
|
|
4078
|
+
fan_name: "#{zone.name} PTAC Fan")
|
|
4080
4079
|
else
|
|
4081
4080
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', "ptac_fan_type of #{fan_type} is not recognized.")
|
|
4082
4081
|
end
|
|
@@ -4085,38 +4084,38 @@ class Standard
|
|
|
4085
4084
|
# add heating coil
|
|
4086
4085
|
case heating_type
|
|
4087
4086
|
when 'NaturalGas', 'Gas'
|
|
4088
|
-
htg_coil = create_coil_heating_gas(model,
|
|
4089
|
-
|
|
4087
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_gas(model,
|
|
4088
|
+
name: "#{zone.name} PTAC Gas Htg Coil")
|
|
4090
4089
|
when 'Electricity', 'Electric'
|
|
4091
|
-
htg_coil = create_coil_heating_electric(model,
|
|
4092
|
-
|
|
4090
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
4091
|
+
name: "#{zone.name} PTAC Electric Htg Coil")
|
|
4093
4092
|
when nil
|
|
4094
|
-
htg_coil = create_coil_heating_electric(model,
|
|
4095
|
-
|
|
4096
|
-
|
|
4097
|
-
|
|
4093
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
4094
|
+
name: "#{zone.name} PTAC No Heat",
|
|
4095
|
+
schedule: model.alwaysOffDiscreteSchedule,
|
|
4096
|
+
nominal_capacity: 0)
|
|
4098
4097
|
when 'Water'
|
|
4099
4098
|
if hot_water_loop.nil?
|
|
4100
4099
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', 'No hot water plant loop supplied')
|
|
4101
4100
|
return false
|
|
4102
4101
|
end
|
|
4103
|
-
htg_coil = create_coil_heating_water(model,
|
|
4104
|
-
|
|
4105
|
-
|
|
4106
|
-
|
|
4107
|
-
|
|
4102
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_water(model,
|
|
4103
|
+
hot_water_loop,
|
|
4104
|
+
name: "#{hot_water_loop.name} Water Htg Coil",
|
|
4105
|
+
rated_inlet_water_temperature: hw_temp_c,
|
|
4106
|
+
rated_outlet_water_temperature: (hw_temp_c - hw_delta_t_k))
|
|
4108
4107
|
else
|
|
4109
4108
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', "ptac_heating_type of #{heating_type} is not recognized.")
|
|
4110
4109
|
end
|
|
4111
4110
|
|
|
4112
4111
|
# add cooling coil
|
|
4113
4112
|
if cooling_type == 'Two Speed DX AC'
|
|
4114
|
-
clg_coil = create_coil_cooling_dx_two_speed(model,
|
|
4115
|
-
|
|
4113
|
+
clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_dx_two_speed(model,
|
|
4114
|
+
name: "#{zone.name} PTAC 2spd DX AC Clg Coil")
|
|
4116
4115
|
elsif cooling_type == 'Single Speed DX AC'
|
|
4117
|
-
clg_coil = create_coil_cooling_dx_single_speed(model,
|
|
4118
|
-
|
|
4119
|
-
|
|
4116
|
+
clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_dx_single_speed(model,
|
|
4117
|
+
name: "#{zone.name} PTAC 1spd DX AC Clg Coil",
|
|
4118
|
+
type: 'PTAC')
|
|
4120
4119
|
else
|
|
4121
4120
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', "ptac_cooling_type of #{cooling_type} is not recognized.")
|
|
4122
4121
|
end
|
|
@@ -4182,13 +4181,13 @@ class Standard
|
|
|
4182
4181
|
|
|
4183
4182
|
# add fan
|
|
4184
4183
|
if fan_type == 'ConstantVolume'
|
|
4185
|
-
fan =
|
|
4186
|
-
|
|
4187
|
-
|
|
4184
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
4185
|
+
'PTAC_CAV_Fan',
|
|
4186
|
+
fan_name: "#{zone.name} PTHP Fan")
|
|
4188
4187
|
elsif fan_type == 'Cycling'
|
|
4189
|
-
fan =
|
|
4190
|
-
|
|
4191
|
-
|
|
4188
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
4189
|
+
'PTAC_Cycling_Fan',
|
|
4190
|
+
fan_name: "#{zone.name} PTHP Fan")
|
|
4192
4191
|
else
|
|
4193
4192
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', "PTHP fan_type of #{fan_type} is not recognized.")
|
|
4194
4193
|
return false
|
|
@@ -4196,15 +4195,15 @@ class Standard
|
|
|
4196
4195
|
fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
|
4197
4196
|
|
|
4198
4197
|
# add heating coil
|
|
4199
|
-
htg_coil = create_coil_heating_dx_single_speed(model,
|
|
4200
|
-
|
|
4198
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_dx_single_speed(model,
|
|
4199
|
+
name: "#{zone.name} PTHP Htg Coil")
|
|
4201
4200
|
# add cooling coil
|
|
4202
|
-
clg_coil = create_coil_cooling_dx_single_speed(model,
|
|
4203
|
-
|
|
4204
|
-
|
|
4201
|
+
clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_dx_single_speed(model,
|
|
4202
|
+
name: "#{zone.name} PTHP Clg Coil",
|
|
4203
|
+
type: 'Heat Pump')
|
|
4205
4204
|
# supplemental heating coil
|
|
4206
|
-
supplemental_htg_coil = create_coil_heating_electric(model,
|
|
4207
|
-
|
|
4205
|
+
supplemental_htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
4206
|
+
name: "#{zone.name} PTHP Supplemental Htg Coil")
|
|
4208
4207
|
# wrap coils in a PTHP system
|
|
4209
4208
|
pthp_system = OpenStudio::Model::ZoneHVACPackagedTerminalHeatPump.new(model,
|
|
4210
4209
|
model.alwaysOnDiscreteSchedule,
|
|
@@ -4287,21 +4286,21 @@ class Standard
|
|
|
4287
4286
|
sizing_zone.setZoneHeatingDesignSupplyAirTemperature(dsgn_temps['zn_htg_dsgn_sup_air_temp_c'])
|
|
4288
4287
|
|
|
4289
4288
|
# add fan
|
|
4290
|
-
fan =
|
|
4291
|
-
|
|
4292
|
-
|
|
4293
|
-
|
|
4289
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
4290
|
+
'Unit_Heater_Fan',
|
|
4291
|
+
fan_name: "#{zone.name} UnitHeater Fan",
|
|
4292
|
+
pressure_rise: fan_pressure_rise)
|
|
4294
4293
|
fan.setAvailabilitySchedule(hvac_op_sch)
|
|
4295
4294
|
|
|
4296
4295
|
# add heating coil
|
|
4297
4296
|
if heating_type == 'NaturalGas' || heating_type == 'Gas'
|
|
4298
|
-
htg_coil = create_coil_heating_gas(model,
|
|
4299
|
-
|
|
4300
|
-
|
|
4297
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_gas(model,
|
|
4298
|
+
name: "#{zone.name} UnitHeater Gas Htg Coil",
|
|
4299
|
+
schedule: hvac_op_sch)
|
|
4301
4300
|
elsif heating_type == 'Electricity' || heating_type == 'Electric'
|
|
4302
|
-
htg_coil = create_coil_heating_electric(model,
|
|
4303
|
-
|
|
4304
|
-
|
|
4301
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
4302
|
+
name: "#{zone.name} UnitHeater Electric Htg Coil",
|
|
4303
|
+
schedule: hvac_op_sch)
|
|
4305
4304
|
elsif heating_type.include?('DistrictHeating') && !hot_water_loop.nil?
|
|
4306
4305
|
# control temperature for hot water loop
|
|
4307
4306
|
if rated_inlet_water_temperature.nil?
|
|
@@ -4324,13 +4323,13 @@ class Standard
|
|
|
4324
4323
|
else
|
|
4325
4324
|
rated_outlet_air_temperature_c = OpenStudio.convert(rated_outlet_air_temperature, 'F', 'C').get
|
|
4326
4325
|
end
|
|
4327
|
-
htg_coil = create_coil_heating_water(model,
|
|
4328
|
-
|
|
4329
|
-
|
|
4330
|
-
|
|
4331
|
-
|
|
4332
|
-
|
|
4333
|
-
|
|
4326
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_water(model,
|
|
4327
|
+
hot_water_loop,
|
|
4328
|
+
name: "#{zone.name} UnitHeater Water Htg Coil",
|
|
4329
|
+
rated_inlet_water_temperature: rated_inlet_water_temperature_c,
|
|
4330
|
+
rated_outlet_water_temperature: rated_outlet_water_temperature_c,
|
|
4331
|
+
rated_inlet_air_temperature: rated_inlet_air_temperature_c,
|
|
4332
|
+
rated_outlet_air_temperature: rated_outlet_air_temperature_c)
|
|
4334
4333
|
else
|
|
4335
4334
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.Model.Model', 'No heating type was found when adding unit heater; no unit heater will be created.')
|
|
4336
4335
|
return false
|
|
@@ -4469,20 +4468,20 @@ class Standard
|
|
|
4469
4468
|
# Create a sensor to read the zone load
|
|
4470
4469
|
zn_load_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model,
|
|
4471
4470
|
'Zone Predicted Sensible Load to Cooling Setpoint Heat Transfer Rate')
|
|
4472
|
-
zn_load_sensor.setName("#{ems_friendly_name(zone_name_clean)} Clg Load Sensor")
|
|
4471
|
+
zn_load_sensor.setName("#{OpenstudioStandards::HVAC.ems_friendly_name(zone_name_clean)} Clg Load Sensor")
|
|
4473
4472
|
zn_load_sensor.setKeyName(zone.handle.to_s)
|
|
4474
4473
|
|
|
4475
4474
|
# Create an actuator to set the airloop availability
|
|
4476
4475
|
air_loop_avail_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(air_loop_avail_sch,
|
|
4477
4476
|
'Schedule:Constant',
|
|
4478
4477
|
'Schedule Value')
|
|
4479
|
-
air_loop_avail_actuator.setName("#{ems_friendly_name(air_loop.name)} Availability Actuator")
|
|
4478
|
+
air_loop_avail_actuator.setName("#{OpenstudioStandards::HVAC.ems_friendly_name(air_loop.name)} Availability Actuator")
|
|
4480
4479
|
|
|
4481
4480
|
# Create a program to turn on Evap Cooler if
|
|
4482
4481
|
# there is a cooling load in the target zone.
|
|
4483
4482
|
# Load < 0.0 is a cooling load.
|
|
4484
4483
|
avail_program = OpenStudio::Model::EnergyManagementSystemProgram.new(model)
|
|
4485
|
-
avail_program.setName("#{ems_friendly_name(air_loop.name)} Availability Control")
|
|
4484
|
+
avail_program.setName("#{OpenstudioStandards::HVAC.ems_friendly_name(air_loop.name)} Availability Control")
|
|
4486
4485
|
avail_program_body = <<-EMS
|
|
4487
4486
|
IF #{zn_load_sensor.handle} < 0.0
|
|
4488
4487
|
SET #{air_loop_avail_actuator.handle} = 1
|
|
@@ -4508,15 +4507,15 @@ class Standard
|
|
|
4508
4507
|
evap.addToNode(air_loop.supplyInletNode)
|
|
4509
4508
|
|
|
4510
4509
|
# Fan (cycling), must be inside unitary system to cycle on airloop
|
|
4511
|
-
fan =
|
|
4512
|
-
|
|
4513
|
-
|
|
4510
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
4511
|
+
'Evap_Cooler_Supply_Fan',
|
|
4512
|
+
fan_name: "#{zone.name} Evap Cooler Supply Fan")
|
|
4514
4513
|
fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
|
4515
4514
|
|
|
4516
4515
|
# Dummy zero-capacity cooling coil
|
|
4517
|
-
clg_coil = create_coil_cooling_dx_single_speed(model,
|
|
4518
|
-
|
|
4519
|
-
|
|
4516
|
+
clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_dx_single_speed(model,
|
|
4517
|
+
name: 'Dummy Always Off DX Coil',
|
|
4518
|
+
schedule: model.alwaysOffDiscreteSchedule)
|
|
4520
4519
|
unitary_system = OpenStudio::Model::AirLoopHVACUnitarySystem.new(model)
|
|
4521
4520
|
unitary_system.setName("#{zone.name} Evap Cooler Cycling Fan")
|
|
4522
4521
|
unitary_system.setSupplyFan(fan)
|
|
@@ -4624,9 +4623,9 @@ class Standard
|
|
|
4624
4623
|
|
|
4625
4624
|
# create vrf outdoor unit
|
|
4626
4625
|
master_zone = thermal_zones[0]
|
|
4627
|
-
vrf_outdoor_unit = create_air_conditioner_variable_refrigerant_flow(model,
|
|
4628
|
-
|
|
4629
|
-
|
|
4626
|
+
vrf_outdoor_unit = OpenstudioStandards::HVAC.create_air_conditioner_variable_refrigerant_flow(model,
|
|
4627
|
+
name: "#{thermal_zones.size} Zone VRF System",
|
|
4628
|
+
master_zone: master_zone)
|
|
4630
4629
|
|
|
4631
4630
|
# default design temperatures used across all air loops
|
|
4632
4631
|
dsgn_temps = standard_design_sizing_temperatures
|
|
@@ -4699,38 +4698,38 @@ class Standard
|
|
|
4699
4698
|
sizing_zone.setZoneHeatingDesignSupplyAirTemperature(dsgn_temps['zn_htg_dsgn_sup_air_temp_c'])
|
|
4700
4699
|
|
|
4701
4700
|
if chilled_water_loop
|
|
4702
|
-
fcu_clg_coil = create_coil_cooling_water(model,
|
|
4703
|
-
|
|
4704
|
-
|
|
4701
|
+
fcu_clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_water(model,
|
|
4702
|
+
chilled_water_loop,
|
|
4703
|
+
name: "#{zone.name} FCU Cooling Coil")
|
|
4705
4704
|
else
|
|
4706
4705
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.Model.Model', 'Fan coil units require a chilled water loop, but none was provided.')
|
|
4707
4706
|
return false
|
|
4708
4707
|
end
|
|
4709
4708
|
|
|
4710
4709
|
if hot_water_loop
|
|
4711
|
-
fcu_htg_coil = create_coil_heating_water(model,
|
|
4712
|
-
|
|
4713
|
-
|
|
4714
|
-
|
|
4710
|
+
fcu_htg_coil = OpenstudioStandards::HVAC.create_coil_heating_water(model,
|
|
4711
|
+
hot_water_loop,
|
|
4712
|
+
name: "#{zone.name} FCU Heating Coil",
|
|
4713
|
+
rated_outlet_air_temperature: dsgn_temps['zn_htg_dsgn_sup_air_temp_c'])
|
|
4715
4714
|
else
|
|
4716
4715
|
# Zero-capacity, always-off electric heating coil
|
|
4717
|
-
fcu_htg_coil = create_coil_heating_electric(model,
|
|
4718
|
-
|
|
4719
|
-
|
|
4720
|
-
|
|
4716
|
+
fcu_htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
4717
|
+
name: "#{zone.name} No Heat",
|
|
4718
|
+
schedule: model.alwaysOffDiscreteSchedule,
|
|
4719
|
+
nominal_capacity: 0.0)
|
|
4721
4720
|
end
|
|
4722
4721
|
|
|
4723
4722
|
case capacity_control_method
|
|
4724
4723
|
when 'VariableFanVariableFlow', 'VariableFanConstantFlow'
|
|
4725
|
-
fcu_fan =
|
|
4726
|
-
|
|
4727
|
-
|
|
4728
|
-
|
|
4724
|
+
fcu_fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
4725
|
+
'Fan_Coil_VarSpeed_Fan',
|
|
4726
|
+
fan_name: "#{zone.name} Fan Coil Variable Fan",
|
|
4727
|
+
end_use_subcategory: 'FCU Fans')
|
|
4729
4728
|
else
|
|
4730
|
-
fcu_fan =
|
|
4731
|
-
|
|
4732
|
-
|
|
4733
|
-
|
|
4729
|
+
fcu_fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
4730
|
+
'Fan_Coil_Fan',
|
|
4731
|
+
fan_name: "#{zone.name} Fan Coil fan",
|
|
4732
|
+
end_use_subcategory: 'FCU Fans')
|
|
4734
4733
|
end
|
|
4735
4734
|
fcu_fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
|
4736
4735
|
fcu_fan.autosizeMaximumFlowRate
|
|
@@ -5254,40 +5253,40 @@ class Standard
|
|
|
5254
5253
|
radiant_loops << radiant_loop
|
|
5255
5254
|
|
|
5256
5255
|
# rename nodes before adding EMS code
|
|
5257
|
-
rename_plant_loop_nodes(model)
|
|
5256
|
+
OpenstudioStandards::HVAC.rename_plant_loop_nodes(model)
|
|
5258
5257
|
|
|
5259
5258
|
# set radiant loop controls
|
|
5260
5259
|
case control_strategy.downcase
|
|
5261
5260
|
when 'proportional_control'
|
|
5262
5261
|
# slab setpoint varies based on previous day zone conditions
|
|
5263
|
-
model_add_radiant_proportional_controls(model, zone, radiant_loop,
|
|
5264
|
-
|
|
5265
|
-
|
|
5266
|
-
|
|
5267
|
-
|
|
5268
|
-
|
|
5269
|
-
|
|
5270
|
-
|
|
5262
|
+
OpenstudioStandards::HVAC.model_add_radiant_proportional_controls(model, zone, radiant_loop,
|
|
5263
|
+
radiant_temperature_control_type: radiant_temperature_control_type,
|
|
5264
|
+
use_zone_occupancy_for_control: use_zone_occupancy_for_control,
|
|
5265
|
+
occupied_percentage_threshold: occupied_percentage_threshold,
|
|
5266
|
+
model_occ_hr_start: model_occ_hr_start,
|
|
5267
|
+
model_occ_hr_end: model_occ_hr_end,
|
|
5268
|
+
proportional_gain: proportional_gain,
|
|
5269
|
+
switch_over_time: switch_over_time)
|
|
5271
5270
|
when 'oa_based_control'
|
|
5272
5271
|
# slab setpoint varies based on outdoor weather
|
|
5273
|
-
model_add_radiant_basic_controls(model, zone, radiant_loop,
|
|
5274
|
-
|
|
5275
|
-
|
|
5276
|
-
|
|
5277
|
-
|
|
5278
|
-
|
|
5279
|
-
|
|
5280
|
-
|
|
5272
|
+
OpenstudioStandards::HVAC.model_add_radiant_basic_controls(model, zone, radiant_loop,
|
|
5273
|
+
radiant_temperature_control_type: radiant_temperature_control_type,
|
|
5274
|
+
slab_setpoint_oa_control: true,
|
|
5275
|
+
switch_over_time: switch_over_time,
|
|
5276
|
+
slab_sp_at_oat_low: slab_sp_at_oat_low,
|
|
5277
|
+
slab_oat_low: slab_oat_low,
|
|
5278
|
+
slab_sp_at_oat_high: slab_sp_at_oat_high,
|
|
5279
|
+
slab_oat_high: slab_oat_high)
|
|
5281
5280
|
when 'constant_control'
|
|
5282
5281
|
# constant slab setpoint control
|
|
5283
|
-
model_add_radiant_basic_controls(model, zone, radiant_loop,
|
|
5284
|
-
|
|
5285
|
-
|
|
5286
|
-
|
|
5287
|
-
|
|
5288
|
-
|
|
5289
|
-
|
|
5290
|
-
|
|
5282
|
+
OpenstudioStandards::HVAC.model_add_radiant_basic_controls(model, zone, radiant_loop,
|
|
5283
|
+
radiant_temperature_control_type: radiant_temperature_control_type,
|
|
5284
|
+
slab_setpoint_oa_control: false,
|
|
5285
|
+
switch_over_time: switch_over_time,
|
|
5286
|
+
slab_sp_at_oat_low: slab_sp_at_oat_low,
|
|
5287
|
+
slab_oat_low: slab_oat_low,
|
|
5288
|
+
slab_sp_at_oat_high: slab_sp_at_oat_high,
|
|
5289
|
+
slab_oat_high: slab_oat_high)
|
|
5291
5290
|
end
|
|
5292
5291
|
end
|
|
5293
5292
|
return radiant_loops
|
|
@@ -5312,26 +5311,26 @@ class Standard
|
|
|
5312
5311
|
thermal_zones.each do |zone|
|
|
5313
5312
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.Model.Model', "Adding window AC for #{zone.name}.")
|
|
5314
5313
|
|
|
5315
|
-
clg_coil = create_coil_cooling_dx_single_speed(model,
|
|
5316
|
-
|
|
5317
|
-
|
|
5318
|
-
|
|
5314
|
+
clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_dx_single_speed(model,
|
|
5315
|
+
name: "#{zone.name} Window AC Cooling Coil",
|
|
5316
|
+
type: 'Window AC',
|
|
5317
|
+
cop: cop)
|
|
5319
5318
|
clg_coil.setRatedSensibleHeatRatio(shr)
|
|
5320
5319
|
clg_coil.setRatedEvaporatorFanPowerPerVolumeFlowRate(OpenStudio::OptionalDouble.new(773.3))
|
|
5321
5320
|
clg_coil.setEvaporativeCondenserEffectiveness(OpenStudio::OptionalDouble.new(0.9))
|
|
5322
5321
|
clg_coil.setMaximumOutdoorDryBulbTemperatureForCrankcaseHeaterOperation(OpenStudio::OptionalDouble.new(10))
|
|
5323
5322
|
clg_coil.setBasinHeaterSetpointTemperature(OpenStudio::OptionalDouble.new(2))
|
|
5324
5323
|
|
|
5325
|
-
fan =
|
|
5326
|
-
|
|
5327
|
-
|
|
5328
|
-
|
|
5324
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
5325
|
+
'Window_AC_Supply_Fan',
|
|
5326
|
+
fan_name: "#{zone.name} Window AC Supply Fan",
|
|
5327
|
+
end_use_subcategory: 'Window AC Fans')
|
|
5329
5328
|
fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
|
5330
5329
|
|
|
5331
|
-
htg_coil = create_coil_heating_electric(model,
|
|
5332
|
-
|
|
5333
|
-
|
|
5334
|
-
|
|
5330
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
5331
|
+
name: "#{zone.name} Window AC Always Off Htg Coil",
|
|
5332
|
+
schedule: model.alwaysOffDiscreteSchedule,
|
|
5333
|
+
nominal_capacity: 0)
|
|
5335
5334
|
ptac = OpenStudio::Model::ZoneHVACPackagedTerminalAirConditioner.new(model,
|
|
5336
5335
|
model.alwaysOnDiscreteSchedule,
|
|
5337
5336
|
fan,
|
|
@@ -5406,19 +5405,19 @@ class Standard
|
|
|
5406
5405
|
# create heating coil
|
|
5407
5406
|
htg_coil = nil
|
|
5408
5407
|
if heating
|
|
5409
|
-
htg_coil = create_coil_heating_gas(model,
|
|
5410
|
-
|
|
5411
|
-
|
|
5408
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_gas(model,
|
|
5409
|
+
name: "#{air_loop.name} Heating Coil",
|
|
5410
|
+
efficiency: OpenstudioStandards::HVAC.afue_to_thermal_eff(afue))
|
|
5412
5411
|
end
|
|
5413
5412
|
|
|
5414
5413
|
# create cooling coil
|
|
5415
5414
|
clg_coil = nil
|
|
5416
5415
|
if cooling
|
|
5417
|
-
clg_coil = create_coil_cooling_dx_single_speed(model,
|
|
5418
|
-
|
|
5419
|
-
|
|
5416
|
+
clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_dx_single_speed(model,
|
|
5417
|
+
name: "#{air_loop.name} Cooling Coil",
|
|
5418
|
+
type: 'Residential Central AC')
|
|
5420
5419
|
clg_coil.setRatedSensibleHeatRatio(shr)
|
|
5421
|
-
clg_coil.setRatedCOP(OpenStudio::OptionalDouble.new(eer_to_cop_no_fan(eer)))
|
|
5420
|
+
clg_coil.setRatedCOP(OpenStudio::OptionalDouble.new(OpenstudioStandards::HVAC.eer_to_cop_no_fan(eer)))
|
|
5422
5421
|
clg_coil.setRatedEvaporatorFanPowerPerVolumeFlowRate(OpenStudio::OptionalDouble.new(ac_w_per_cfm / OpenStudio.convert(1.0, 'cfm', 'm^3/s').get))
|
|
5423
5422
|
clg_coil.setNominalTimeForCondensateRemovalToBegin(OpenStudio::OptionalDouble.new(1000.0))
|
|
5424
5423
|
clg_coil.setRatioOfInitialMoistureEvaporationRateAndSteadyStateLatentCapacity(OpenStudio::OptionalDouble.new(1.5))
|
|
@@ -5430,10 +5429,10 @@ class Standard
|
|
|
5430
5429
|
end
|
|
5431
5430
|
|
|
5432
5431
|
# create fan
|
|
5433
|
-
fan =
|
|
5434
|
-
|
|
5435
|
-
|
|
5436
|
-
|
|
5432
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
5433
|
+
'Residential_HVAC_Fan',
|
|
5434
|
+
fan_name: "#{air_loop.name} Supply Fan",
|
|
5435
|
+
end_use_subcategory: 'Residential HVAC Fans')
|
|
5437
5436
|
fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
|
5438
5437
|
|
|
5439
5438
|
if ventilation
|
|
@@ -5529,10 +5528,10 @@ class Standard
|
|
|
5529
5528
|
htg_coil = nil
|
|
5530
5529
|
supplemental_htg_coil = nil
|
|
5531
5530
|
if heating
|
|
5532
|
-
htg_coil = create_coil_heating_dx_single_speed(model,
|
|
5533
|
-
|
|
5534
|
-
|
|
5535
|
-
|
|
5531
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_dx_single_speed(model,
|
|
5532
|
+
name: "#{air_loop.name} heating coil",
|
|
5533
|
+
type: 'Residential Central Air Source HP',
|
|
5534
|
+
cop: OpenstudioStandards::HVAC.hspf_to_cop_no_fan(hspf))
|
|
5536
5535
|
if model.version < OpenStudio::VersionString.new('3.5.0')
|
|
5537
5536
|
htg_coil.setRatedSupplyFanPowerPerVolumeFlowRate(ac_w_per_cfm / OpenStudio.convert(1.0, 'cfm', 'm^3/s').get)
|
|
5538
5537
|
else
|
|
@@ -5549,17 +5548,17 @@ class Standard
|
|
|
5549
5548
|
# Supplemental Heating Coil
|
|
5550
5549
|
|
|
5551
5550
|
# create supplemental heating coil
|
|
5552
|
-
supplemental_htg_coil = create_coil_heating_electric(model,
|
|
5553
|
-
|
|
5551
|
+
supplemental_htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
5552
|
+
name: "#{air_loop.name} Supplemental Htg Coil")
|
|
5554
5553
|
end
|
|
5555
5554
|
|
|
5556
5555
|
# create cooling coil
|
|
5557
5556
|
clg_coil = nil
|
|
5558
5557
|
if cooling
|
|
5559
|
-
clg_coil = create_coil_cooling_dx_single_speed(model,
|
|
5560
|
-
|
|
5561
|
-
|
|
5562
|
-
|
|
5558
|
+
clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_dx_single_speed(model,
|
|
5559
|
+
name: "#{air_loop.name} Cooling Coil",
|
|
5560
|
+
type: 'Residential Central ASHP',
|
|
5561
|
+
cop: cop)
|
|
5563
5562
|
clg_coil.setRatedSensibleHeatRatio(shr)
|
|
5564
5563
|
clg_coil.setRatedEvaporatorFanPowerPerVolumeFlowRate(OpenStudio::OptionalDouble.new(ac_w_per_cfm / OpenStudio.convert(1.0, 'cfm', 'm^3/s').get))
|
|
5565
5564
|
clg_coil.setNominalTimeForCondensateRemovalToBegin(OpenStudio::OptionalDouble.new(1000.0))
|
|
@@ -5572,10 +5571,10 @@ class Standard
|
|
|
5572
5571
|
end
|
|
5573
5572
|
|
|
5574
5573
|
# create fan
|
|
5575
|
-
fan =
|
|
5576
|
-
|
|
5577
|
-
|
|
5578
|
-
|
|
5574
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
5575
|
+
'Residential_HVAC_Fan',
|
|
5576
|
+
fan_name: "#{air_loop.name} Supply Fan",
|
|
5577
|
+
end_use_subcategory: 'Residential HVAC Fans')
|
|
5579
5578
|
fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
|
5580
5579
|
|
|
5581
5580
|
# create outdoor air intake
|
|
@@ -5637,19 +5636,19 @@ class Standard
|
|
|
5637
5636
|
|
|
5638
5637
|
water_to_air_hp_systems = []
|
|
5639
5638
|
thermal_zones.each do |zone|
|
|
5640
|
-
supplemental_htg_coil = create_coil_heating_electric(model,
|
|
5641
|
-
|
|
5642
|
-
htg_coil = create_coil_heating_water_to_air_heat_pump_equation_fit(model,
|
|
5643
|
-
|
|
5644
|
-
|
|
5645
|
-
clg_coil = create_coil_cooling_water_to_air_heat_pump_equation_fit(model,
|
|
5646
|
-
|
|
5647
|
-
|
|
5639
|
+
supplemental_htg_coil = OpenstudioStandards::HVAC.create_coil_heating_electric(model,
|
|
5640
|
+
name: "#{zone.name} Supplemental Htg Coil")
|
|
5641
|
+
htg_coil = OpenstudioStandards::HVAC.create_coil_heating_water_to_air_heat_pump_equation_fit(model,
|
|
5642
|
+
condenser_loop,
|
|
5643
|
+
name: "#{zone.name} Water-to-Air HP Htg Coil")
|
|
5644
|
+
clg_coil = OpenstudioStandards::HVAC.create_coil_cooling_water_to_air_heat_pump_equation_fit(model,
|
|
5645
|
+
condenser_loop,
|
|
5646
|
+
name: "#{zone.name} Water-to-Air HP Clg Coil")
|
|
5648
5647
|
|
|
5649
5648
|
# add fan
|
|
5650
|
-
fan =
|
|
5651
|
-
|
|
5652
|
-
|
|
5649
|
+
fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
5650
|
+
'WSHP_Fan',
|
|
5651
|
+
fan_name: "#{zone.name} WSHP Fan")
|
|
5653
5652
|
fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
|
5654
5653
|
|
|
5655
5654
|
water_to_air_hp_system = OpenStudio::Model::ZoneHVACWaterToAirHeatPump.new(model,
|
|
@@ -5686,14 +5685,14 @@ class Standard
|
|
|
5686
5685
|
|
|
5687
5686
|
# Determine the OA requirement for this zone
|
|
5688
5687
|
min_oa_flow_m3_per_s_per_m2 = OpenstudioStandards::ThermalZone.thermal_zone_get_outdoor_airflow_rate_per_area(zone)
|
|
5689
|
-
supply_fan =
|
|
5690
|
-
|
|
5691
|
-
|
|
5688
|
+
supply_fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
5689
|
+
'ERV_Supply_Fan',
|
|
5690
|
+
fan_name: "#{zone.name} ERV Supply Fan")
|
|
5692
5691
|
impeller_eff = fan_baseline_impeller_efficiency(supply_fan)
|
|
5693
5692
|
fan_change_impeller_efficiency(supply_fan, impeller_eff)
|
|
5694
|
-
exhaust_fan =
|
|
5695
|
-
|
|
5696
|
-
|
|
5693
|
+
exhaust_fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
5694
|
+
'ERV_Supply_Fan',
|
|
5695
|
+
fan_name: "#{zone.name} ERV Exhaust Fan")
|
|
5697
5696
|
fan_change_impeller_efficiency(exhaust_fan, impeller_eff)
|
|
5698
5697
|
|
|
5699
5698
|
erv_controller = OpenStudio::Model::ZoneHVACEnergyRecoveryVentilatorController.new(model)
|
|
@@ -5703,19 +5702,19 @@ class Standard
|
|
|
5703
5702
|
# erv_controller.setTimeofDayEconomizerFlowControlSchedule(self.alwaysOnDiscreteSchedule)
|
|
5704
5703
|
# erv_controller.setHighHumidityControlFlag(false)
|
|
5705
5704
|
|
|
5706
|
-
heat_exchanger = OpenstudioStandards::HVAC.
|
|
5707
|
-
|
|
5708
|
-
|
|
5709
|
-
|
|
5710
|
-
|
|
5711
|
-
|
|
5712
|
-
|
|
5713
|
-
|
|
5714
|
-
|
|
5715
|
-
|
|
5716
|
-
|
|
5717
|
-
|
|
5718
|
-
|
|
5705
|
+
heat_exchanger = OpenstudioStandards::HVAC.create_heat_exchanger_air_to_air_sensible_and_latent(model,
|
|
5706
|
+
name: "#{zone.name} ERV HX",
|
|
5707
|
+
type: "Plate",
|
|
5708
|
+
economizer_lockout: false,
|
|
5709
|
+
supply_air_outlet_temperature_control: false,
|
|
5710
|
+
sensible_heating_100_eff: 0.76,
|
|
5711
|
+
sensible_heating_75_eff: 0.81,
|
|
5712
|
+
latent_heating_100_eff: 0.68,
|
|
5713
|
+
latent_heating_75_eff: 0.73,
|
|
5714
|
+
sensible_cooling_100_eff: 0.76,
|
|
5715
|
+
sensible_cooling_75_eff: 0.81,
|
|
5716
|
+
latent_cooling_100_eff: 0.68,
|
|
5717
|
+
latent_cooling_75_eff: 0.73)
|
|
5719
5718
|
|
|
5720
5719
|
zone_hvac = OpenStudio::Model::ZoneHVACEnergyRecoveryVentilator.new(model, heat_exchanger, supply_fan, exhaust_fan)
|
|
5721
5720
|
zone_hvac.setName("#{zone.name} ERV")
|
|
@@ -6014,12 +6013,12 @@ class Standard
|
|
|
6014
6013
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.Model.Model', "Adding standalone ERV for #{thermal_zone.name}.")
|
|
6015
6014
|
|
|
6016
6015
|
# Fan power with energy recovery = 0.934 W/cfm
|
|
6017
|
-
supply_fan =
|
|
6018
|
-
|
|
6019
|
-
|
|
6020
|
-
exhaust_fan =
|
|
6021
|
-
|
|
6022
|
-
|
|
6016
|
+
supply_fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
6017
|
+
'ERV_Supply_Fan',
|
|
6018
|
+
fan_name: "#{thermal_zone.name} ERV Supply Fan")
|
|
6019
|
+
exhaust_fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
6020
|
+
'ERV_Supply_Fan',
|
|
6021
|
+
fan_name: "#{thermal_zone.name} ERV Exhaust Fan")
|
|
6023
6022
|
supply_fan.setMotorEfficiency(0.48)
|
|
6024
6023
|
exhaust_fan.setMotorEfficiency(0.48)
|
|
6025
6024
|
supply_fan.setFanTotalEfficiency(0.303158)
|
|
@@ -6028,12 +6027,12 @@ class Standard
|
|
|
6028
6027
|
exhaust_fan.setPressureRise(270.64755)
|
|
6029
6028
|
|
|
6030
6029
|
# Create heat exchanger
|
|
6031
|
-
heat_exchanger = OpenstudioStandards::HVAC.
|
|
6032
|
-
|
|
6033
|
-
|
|
6034
|
-
|
|
6035
|
-
|
|
6036
|
-
|
|
6030
|
+
heat_exchanger = OpenstudioStandards::HVAC.create_heat_exchanger_air_to_air_sensible_and_latent(model,
|
|
6031
|
+
name: "#{thermal_zone.name} ERV HX",
|
|
6032
|
+
type: 'Rotary',
|
|
6033
|
+
economizer_lockout: false,
|
|
6034
|
+
supply_air_outlet_temperature_control: false,
|
|
6035
|
+
frost_control_type: 'ExhaustOnly')
|
|
6037
6036
|
heat_exchanger.setThresholdTemperature(-23.3)
|
|
6038
6037
|
heat_exchanger.setInitialDefrostTimeFraction(0.167)
|
|
6039
6038
|
heat_exchanger.setRateofDefrostTimeFractionIncrease(1.44)
|
|
@@ -6090,9 +6089,9 @@ class Standard
|
|
|
6090
6089
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.Model.Model', "Adding standalone unit ventilator for #{thermal_zone.name}.")
|
|
6091
6090
|
|
|
6092
6091
|
# Fan power with no energy recovery = 0.806 W/cfm
|
|
6093
|
-
supply_fan =
|
|
6094
|
-
|
|
6095
|
-
|
|
6092
|
+
supply_fan = OpenstudioStandards::HVAC.create_typical_fan(model,
|
|
6093
|
+
'ERV_Supply_Fan',
|
|
6094
|
+
fan_name: "#{thermal_zone.name} Ventilator Supply Fan")
|
|
6096
6095
|
supply_fan.setMotorEfficiency(0.48)
|
|
6097
6096
|
supply_fan.setFanTotalEfficiency(0.303158)
|
|
6098
6097
|
supply_fan.setPressureRise(233.6875)
|
|
@@ -6100,10 +6099,10 @@ class Standard
|
|
|
6100
6099
|
unit_ventilator = OpenStudio::Model::ZoneHVACUnitVentilator.new(model, supply_fan)
|
|
6101
6100
|
unit_ventilator.setName("#{thermal_zone.name} Unit Ventilator")
|
|
6102
6101
|
unit_ventilator.addToThermalZone(thermal_zone)
|
|
6103
|
-
fan_zone_exhaust = create_fan_zone_exhaust(model,
|
|
6104
|
-
|
|
6105
|
-
|
|
6106
|
-
|
|
6102
|
+
fan_zone_exhaust = OpenstudioStandards::HVAC.create_fan_zone_exhaust(model,
|
|
6103
|
+
fan_name: "#{thermal_zone.name} Exhaust Fan",
|
|
6104
|
+
fan_efficiency: 0.303158,
|
|
6105
|
+
pressure_rise: 233.6875)
|
|
6107
6106
|
|
|
6108
6107
|
# Set OA requirements; Assumes a default of 55 cfm
|
|
6109
6108
|
if min_oa_flow_m3_per_s_per_m2.nil?
|
|
@@ -6374,7 +6373,7 @@ class Standard
|
|
|
6374
6373
|
model_add_zone_heat_cool_request_count_program(model, thermal_zones)
|
|
6375
6374
|
end
|
|
6376
6375
|
|
|
6377
|
-
plant_water_loop_name = ems_friendly_name(plant_water_loop.name)
|
|
6376
|
+
plant_water_loop_name = OpenstudioStandards::HVAC.ems_friendly_name(plant_water_loop.name)
|
|
6378
6377
|
|
|
6379
6378
|
if plant_water_loop.componentType.valueName == 'Heating'
|
|
6380
6379
|
swt_upper_limit = sp_at_oat_low.nil? ? OpenStudio.convert(120, 'F', 'C').get : OpenStudio.convert(sp_at_oat_low, 'F', 'C').get
|
|
@@ -6550,7 +6549,7 @@ class Standard
|
|
|
6550
6549
|
exisiting_ems_sensors_names = exisiting_ems_sensors.collect { |sensor| "#{sensor.name.get}-#{sensor.outputVariableOrMeterName}" }
|
|
6551
6550
|
|
|
6552
6551
|
# Create zone air temperature 'sensor' for the zone.
|
|
6553
|
-
zone_name = ems_friendly_name(zone.name)
|
|
6552
|
+
zone_name = OpenstudioStandards::HVAC.ems_friendly_name(zone.name)
|
|
6554
6553
|
zone_air_sensor_name = "#{zone_name}_ctrl_temperature"
|
|
6555
6554
|
|
|
6556
6555
|
unless exisiting_ems_sensors_names.include?("#{zone_air_sensor_name}-Zone Air Temperature")
|
|
@@ -7523,7 +7522,7 @@ class Standard
|
|
|
7523
7522
|
end
|
|
7524
7523
|
|
|
7525
7524
|
# rename air loop and plant loop nodes for readability
|
|
7526
|
-
rename_air_loop_nodes(model)
|
|
7527
|
-
rename_plant_loop_nodes(model)
|
|
7525
|
+
OpenstudioStandards::HVAC.rename_air_loop_nodes(model)
|
|
7526
|
+
OpenstudioStandards::HVAC.rename_plant_loop_nodes(model)
|
|
7528
7527
|
end
|
|
7529
7528
|
end
|