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
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
module OpenstudioStandards
|
|
2
|
+
# The HVAC module provides methods create, modify, and get information about HVAC systems in the model
|
|
3
|
+
module HVAC
|
|
4
|
+
# @!group Component:CentralAirSourceHeatPump
|
|
5
|
+
# Methods to create central air source heat pumps
|
|
6
|
+
|
|
7
|
+
# Create CentralAirSourceHeatPump object using PlantComponentUserDefined
|
|
8
|
+
#
|
|
9
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
|
10
|
+
# @param hot_water_loop [<OpenStudio::Model::PlantLoop>] a hot water loop served by the central air source heat pump
|
|
11
|
+
# @param name [String] the name of the central air source heat pump, or nil in which case it will be defaulted
|
|
12
|
+
# @param cop [Double] air source heat pump rated cop
|
|
13
|
+
# @return [OpenStudio::Model::PlantComponentUserDefined] a plant component representing the air source heat pump
|
|
14
|
+
# @todo update curve to better calculate based on the rated cop
|
|
15
|
+
# @todo refactor to use the new EnergyPlus central air source heat pump object when it becomes available
|
|
16
|
+
# set hot_water_loop to an optional keyword argument, and add input keyword arguments for other characteristics
|
|
17
|
+
def self.create_central_air_source_heat_pump(model,
|
|
18
|
+
hot_water_loop,
|
|
19
|
+
name: nil,
|
|
20
|
+
cop: 3.65)
|
|
21
|
+
|
|
22
|
+
# create the PlantComponentUserDefined object as a proxy for the Central Air Source Heat Pump
|
|
23
|
+
plant_comp = OpenStudio::Model::PlantComponentUserDefined.new(model)
|
|
24
|
+
if name.nil?
|
|
25
|
+
if hot_water_loop.nil?
|
|
26
|
+
name = 'Central Air Source Heat Pump'
|
|
27
|
+
else
|
|
28
|
+
name = "#{hot_water_loop.name} Central Air Source Heat Pump"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# change equipment name for EMS validity
|
|
33
|
+
plant_comp.setName(OpenstudioStandards::HVAC.ems_friendly_name(name))
|
|
34
|
+
|
|
35
|
+
# set plant component properties
|
|
36
|
+
plant_comp.setPlantLoadingMode('MeetsLoadWithNominalCapacityHiOutLimit')
|
|
37
|
+
plant_comp.setPlantLoopFlowRequestMode('NeedsFlowIfLoopOn')
|
|
38
|
+
|
|
39
|
+
# plant design volume flow rate internal variable
|
|
40
|
+
vdot_des_int_var = OpenStudio::Model::EnergyManagementSystemInternalVariable.new(model, 'Plant Design Volume Flow Rate')
|
|
41
|
+
vdot_des_int_var.setName("#{plant_comp.name}_Vdot_Des_Int_Var")
|
|
42
|
+
vdot_des_int_var.setInternalDataIndexKeyName(hot_water_loop.handle.to_s)
|
|
43
|
+
|
|
44
|
+
# inlet temperature internal variable
|
|
45
|
+
tin_int_var = OpenStudio::Model::EnergyManagementSystemInternalVariable.new(model, 'Inlet Temperature for Plant Connection 1')
|
|
46
|
+
tin_int_var.setName("#{plant_comp.name}_Tin_Int_Var")
|
|
47
|
+
tin_int_var.setInternalDataIndexKeyName(plant_comp.handle.to_s)
|
|
48
|
+
|
|
49
|
+
# inlet mass flow rate internal variable
|
|
50
|
+
mdot_int_var = OpenStudio::Model::EnergyManagementSystemInternalVariable.new(model, 'Inlet Mass Flow Rate for Plant Connection 1')
|
|
51
|
+
mdot_int_var.setName("#{plant_comp.name}_Mdot_Int_Var")
|
|
52
|
+
mdot_int_var.setInternalDataIndexKeyName(plant_comp.handle.to_s)
|
|
53
|
+
|
|
54
|
+
# inlet specific heat internal variable
|
|
55
|
+
cp_int_var = OpenStudio::Model::EnergyManagementSystemInternalVariable.new(model, 'Inlet Specific Heat for Plant Connection 1')
|
|
56
|
+
cp_int_var.setName("#{plant_comp.name}_Cp_Int_Var")
|
|
57
|
+
cp_int_var.setInternalDataIndexKeyName(plant_comp.handle.to_s)
|
|
58
|
+
|
|
59
|
+
# inlet density internal variable
|
|
60
|
+
rho_int_var = OpenStudio::Model::EnergyManagementSystemInternalVariable.new(model, 'Inlet Density for Plant Connection 1')
|
|
61
|
+
rho_int_var.setName("#{plant_comp.name}_rho_Int_Var")
|
|
62
|
+
rho_int_var.setInternalDataIndexKeyName(plant_comp.handle.to_s)
|
|
63
|
+
|
|
64
|
+
# load request internal variable
|
|
65
|
+
load_int_var = OpenStudio::Model::EnergyManagementSystemInternalVariable.new(model, 'Load Request for Plant Connection 1')
|
|
66
|
+
load_int_var.setName("#{plant_comp.name}_Load_Int_Var")
|
|
67
|
+
load_int_var.setInternalDataIndexKeyName(plant_comp.handle.to_s)
|
|
68
|
+
|
|
69
|
+
# supply outlet node setpoint temperature sensor
|
|
70
|
+
setpt_mgr_sch_sen = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Schedule Value')
|
|
71
|
+
setpt_mgr_sch_sen.setName("#{plant_comp.name}_Setpt_Mgr_Temp_Sen")
|
|
72
|
+
hot_water_loop.supplyOutletNode.setpointManagers.each do |m|
|
|
73
|
+
if m.to_SetpointManagerScheduled.is_initialized
|
|
74
|
+
setpt_mgr_sch_sen.setKeyName(m.to_SetpointManagerScheduled.get.schedule.name.to_s)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# outdoor air drybulb temperature sensor
|
|
79
|
+
oa_dbt_sen = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Site Outdoor Air Drybulb Temperature')
|
|
80
|
+
oa_dbt_sen.setName("#{plant_comp.name}_OA_DBT_Sen")
|
|
81
|
+
oa_dbt_sen.setKeyName('Environment')
|
|
82
|
+
|
|
83
|
+
# minimum mass flow rate actuator
|
|
84
|
+
mdot_min_act = plant_comp.minimumMassFlowRateActuator.get
|
|
85
|
+
mdot_min_act.setName("#{plant_comp.name}_Mdot_Min_Act")
|
|
86
|
+
|
|
87
|
+
# maximum mass flow rate actuator
|
|
88
|
+
mdot_max_act = plant_comp.maximumMassFlowRateActuator.get
|
|
89
|
+
mdot_max_act.setName("#{plant_comp.name}_Mdot_Max_Act")
|
|
90
|
+
|
|
91
|
+
# design flow rate actuator
|
|
92
|
+
vdot_des_act = plant_comp.designVolumeFlowRateActuator.get
|
|
93
|
+
vdot_des_act.setName("#{plant_comp.name}_Vdot_Des_Act")
|
|
94
|
+
|
|
95
|
+
# minimum loading capacity actuator
|
|
96
|
+
cap_min_act = plant_comp.minimumLoadingCapacityActuator.get
|
|
97
|
+
cap_min_act.setName("#{plant_comp.name}_Cap_Min_Act")
|
|
98
|
+
|
|
99
|
+
# maximum loading capacity actuator
|
|
100
|
+
cap_max_act = plant_comp.maximumLoadingCapacityActuator.get
|
|
101
|
+
cap_max_act.setName("#{plant_comp.name}_Cap_Max_Act")
|
|
102
|
+
|
|
103
|
+
# optimal loading capacity actuator
|
|
104
|
+
cap_opt_act = plant_comp.optimalLoadingCapacityActuator.get
|
|
105
|
+
cap_opt_act.setName("#{plant_comp.name}_Cap_Opt_Act")
|
|
106
|
+
|
|
107
|
+
# outlet temperature actuator
|
|
108
|
+
tout_act = plant_comp.outletTemperatureActuator.get
|
|
109
|
+
tout_act.setName("#{plant_comp.name}_Tout_Act")
|
|
110
|
+
|
|
111
|
+
# mass flow rate actuator
|
|
112
|
+
mdot_req_act = plant_comp.massFlowRateActuator.get
|
|
113
|
+
mdot_req_act.setName("#{plant_comp.name}_Mdot_Req_Act")
|
|
114
|
+
|
|
115
|
+
# heat pump COP curve
|
|
116
|
+
constant_coeff = 1.932 + (cop - 3.65)
|
|
117
|
+
hp_cop_curve = OpenStudio::Model::CurveQuadratic.new(model)
|
|
118
|
+
hp_cop_curve.setCoefficient1Constant(constant_coeff)
|
|
119
|
+
hp_cop_curve.setCoefficient2x(0.227674286)
|
|
120
|
+
hp_cop_curve.setCoefficient3xPOW2(-0.007313143)
|
|
121
|
+
hp_cop_curve.setMinimumValueofx(1.67)
|
|
122
|
+
hp_cop_curve.setMaximumValueofx(12.78)
|
|
123
|
+
hp_cop_curve.setInputUnitTypeforX('Temperature')
|
|
124
|
+
hp_cop_curve.setOutputUnitType('Dimensionless')
|
|
125
|
+
|
|
126
|
+
# heat pump COP curve index variable
|
|
127
|
+
hp_cop_curve_idx_var = OpenStudio::Model::EnergyManagementSystemCurveOrTableIndexVariable.new(model, hp_cop_curve)
|
|
128
|
+
|
|
129
|
+
# high outlet temperature limit actuator
|
|
130
|
+
tout_max_act = OpenStudio::Model::EnergyManagementSystemActuator.new(plant_comp, 'Plant Connection 1', 'High Outlet Temperature Limit')
|
|
131
|
+
tout_max_act.setName("#{plant_comp.name}_Tout_Max_Act")
|
|
132
|
+
|
|
133
|
+
# init program
|
|
134
|
+
init_pgrm = plant_comp.plantInitializationProgram.get
|
|
135
|
+
init_pgrm.setName("#{plant_comp.name}_Init_Pgrm")
|
|
136
|
+
init_pgrm_body = <<-EMS
|
|
137
|
+
SET Loop_Exit_Temp = #{hot_water_loop.sizingPlant.designLoopExitTemperature}
|
|
138
|
+
SET Loop_Delta_Temp = #{hot_water_loop.sizingPlant.loopDesignTemperatureDifference}
|
|
139
|
+
SET Cp = @CPHW Loop_Exit_Temp
|
|
140
|
+
SET rho = @RhoH2O Loop_Exit_Temp
|
|
141
|
+
SET #{vdot_des_act.handle} = #{vdot_des_int_var.handle}
|
|
142
|
+
SET #{mdot_min_act.handle} = 0
|
|
143
|
+
SET Mdot_Max = #{vdot_des_int_var.handle} * rho
|
|
144
|
+
SET #{mdot_max_act.handle} = Mdot_Max
|
|
145
|
+
SET Cap = Mdot_Max * Cp * Loop_Delta_Temp
|
|
146
|
+
SET #{cap_min_act.handle} = 0
|
|
147
|
+
SET #{cap_max_act.handle} = Cap
|
|
148
|
+
SET #{cap_opt_act.handle} = 1 * Cap
|
|
149
|
+
EMS
|
|
150
|
+
init_pgrm.setBody(init_pgrm_body)
|
|
151
|
+
|
|
152
|
+
# sim program
|
|
153
|
+
sim_pgrm = plant_comp.plantSimulationProgram.get
|
|
154
|
+
sim_pgrm.setName("#{plant_comp.name}_Sim_Pgrm")
|
|
155
|
+
sim_pgrm_body = <<-EMS
|
|
156
|
+
SET tmp = #{load_int_var.handle}
|
|
157
|
+
SET tmp = #{tin_int_var.handle}
|
|
158
|
+
SET tmp = #{mdot_int_var.handle}
|
|
159
|
+
SET #{tout_max_act.handle} = 75.0
|
|
160
|
+
IF #{load_int_var.handle} == 0
|
|
161
|
+
SET #{tout_act.handle} = #{tin_int_var.handle}
|
|
162
|
+
SET #{mdot_req_act.handle} = 0
|
|
163
|
+
SET Elec = 0
|
|
164
|
+
RETURN
|
|
165
|
+
ENDIF
|
|
166
|
+
IF #{load_int_var.handle} >= #{cap_max_act.handle}
|
|
167
|
+
SET Qdot = #{cap_max_act.handle}
|
|
168
|
+
SET Mdot = #{mdot_max_act.handle}
|
|
169
|
+
SET #{mdot_req_act.handle} = Mdot
|
|
170
|
+
SET #{tout_act.handle} = (Qdot / (Mdot * #{cp_int_var.handle})) + #{tin_int_var.handle}
|
|
171
|
+
IF #{tout_act.handle} > #{tout_max_act.handle}
|
|
172
|
+
SET #{tout_act.handle} = #{tout_max_act.handle}
|
|
173
|
+
SET Qdot = Mdot * #{cp_int_var.handle} * (#{tout_act.handle} - #{tin_int_var.handle})
|
|
174
|
+
ENDIF
|
|
175
|
+
ELSE
|
|
176
|
+
SET Qdot = #{load_int_var.handle}
|
|
177
|
+
SET #{tout_act.handle} = #{setpt_mgr_sch_sen.handle}
|
|
178
|
+
SET Mdot = Qdot / (#{cp_int_var.handle} * (#{tout_act.handle} - #{tin_int_var.handle}))
|
|
179
|
+
SET #{mdot_req_act.handle} = Mdot
|
|
180
|
+
ENDIF
|
|
181
|
+
SET Tdb = #{oa_dbt_sen.handle}
|
|
182
|
+
SET COP = @CurveValue #{hp_cop_curve_idx_var.handle} Tdb
|
|
183
|
+
SET EIR = 1 / COP
|
|
184
|
+
SET Pwr = Qdot * EIR
|
|
185
|
+
SET Elec = Pwr * SystemTimestep * 3600
|
|
186
|
+
EMS
|
|
187
|
+
sim_pgrm.setBody(sim_pgrm_body)
|
|
188
|
+
|
|
189
|
+
# init program calling manager
|
|
190
|
+
init_mgr = plant_comp.plantInitializationProgramCallingManager.get
|
|
191
|
+
init_mgr.setName("#{plant_comp.name}_Init_Pgrm_Mgr")
|
|
192
|
+
|
|
193
|
+
# sim program calling manager
|
|
194
|
+
sim_mgr = plant_comp.plantSimulationProgramCallingManager.get
|
|
195
|
+
sim_mgr.setName("#{plant_comp.name}_Sim_Pgrm_Mgr")
|
|
196
|
+
|
|
197
|
+
# metered output variable
|
|
198
|
+
elec_mtr_out_var = OpenStudio::Model::EnergyManagementSystemMeteredOutputVariable.new(model, "#{plant_comp.name} Electricity Consumption")
|
|
199
|
+
elec_mtr_out_var.setName("#{plant_comp.name} Electricity Consumption")
|
|
200
|
+
elec_mtr_out_var.setEMSVariableName('Elec')
|
|
201
|
+
elec_mtr_out_var.setUpdateFrequency('SystemTimestep')
|
|
202
|
+
elec_mtr_out_var.setString(4, sim_pgrm.handle.to_s)
|
|
203
|
+
elec_mtr_out_var.setResourceType('Electricity')
|
|
204
|
+
elec_mtr_out_var.setGroupType('HVAC')
|
|
205
|
+
elec_mtr_out_var.setEndUseCategory('Heating')
|
|
206
|
+
elec_mtr_out_var.setEndUseSubcategory('')
|
|
207
|
+
elec_mtr_out_var.setUnits('J')
|
|
208
|
+
|
|
209
|
+
# add to supply side of hot water loop if specified
|
|
210
|
+
hot_water_loop&.addSupplyBranchForComponent(plant_comp)
|
|
211
|
+
|
|
212
|
+
# add operation scheme
|
|
213
|
+
htg_op_scheme = OpenStudio::Model::PlantEquipmentOperationHeatingLoad.new(model)
|
|
214
|
+
htg_op_scheme.addEquipment(1000000000.0, plant_comp)
|
|
215
|
+
hot_water_loop.setPlantEquipmentOperationHeatingLoad(htg_op_scheme)
|
|
216
|
+
|
|
217
|
+
return plant_comp
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module OpenstudioStandards
|
|
2
|
+
# The HVAC module provides methods create, modify, and get information about HVAC systems in the model
|
|
3
|
+
module HVAC
|
|
4
|
+
# @!group Component:Chiller
|
|
5
|
+
# Methods to create, modify, and get information about chillers
|
|
6
|
+
|
|
7
|
+
# Return the capacity in W of a ChillerElectricEIR
|
|
8
|
+
#
|
|
9
|
+
# @param chiller_electric_eir [OpenStudio::Model::ChillerElectricEIR] chiller object
|
|
10
|
+
# @return [Double] capacity in W
|
|
11
|
+
def self.chiller_electric_get_capacity(chiller_electric_eir)
|
|
12
|
+
capacity_w = nil
|
|
13
|
+
if chiller_electric_eir.referenceCapacity.is_initialized
|
|
14
|
+
capacity_w = chiller_electric_eir.referenceCapacity.get
|
|
15
|
+
elsif chiller_electric_eir.autosizedReferenceCapacity.is_initialized
|
|
16
|
+
capacity_w = chiller_electric_eir.autosizedReferenceCapacity.get
|
|
17
|
+
else
|
|
18
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.HVAC.chiller', "For #{chiller_electric_eir.name} capacity is not available.")
|
|
19
|
+
return capacity_w
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
return capacity_w
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
module OpenstudioStandards
|
|
2
|
+
# The HVAC module provides methods create, modify, and get information about HVAC systems in the model
|
|
3
|
+
module HVAC
|
|
4
|
+
# @!group Component:Coil
|
|
5
|
+
# Methods to create, modify, and get information about HVAC coil objects
|
|
6
|
+
|
|
7
|
+
# Finds the subcategory. Possible choices are:
|
|
8
|
+
# Single Package, Split System, PTAC, or PTHP
|
|
9
|
+
#
|
|
10
|
+
# @param coil_dx [OpenStudio::Model::StraightComponent] coil cooling object, allowable types:
|
|
11
|
+
# CoilCoolingDXSingleSpeed, CoilCoolingDXTwoSpeed, CoilCoolingDXMultiSpeed
|
|
12
|
+
# @return [String] the coil_dx_subcategory(coil_dx)
|
|
13
|
+
# @todo Add add split system vs single package to model object
|
|
14
|
+
def self.coil_dx_subcategory(coil_dx)
|
|
15
|
+
sub_category = 'Single Package'
|
|
16
|
+
|
|
17
|
+
# Fallback to the name, mainly for library export
|
|
18
|
+
if coil_dx.name.get.to_s.include?('Single Package')
|
|
19
|
+
sub_category = 'Single Package'
|
|
20
|
+
elsif coil_dx.name.get.to_s.include?('Split System') ||
|
|
21
|
+
coil_dx.name.get.to_s.include?('Central Air Source HP')
|
|
22
|
+
sub_category = 'Split System'
|
|
23
|
+
elsif coil_dx.name.get.to_s.include?('Minisplit HP')
|
|
24
|
+
sub_category = 'Minisplit System'
|
|
25
|
+
elsif coil_dx.name.get.to_s.include?('CRAC')
|
|
26
|
+
sub_category = 'CRAC'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
if coil_dx.airLoopHVAC.empty? && coil_dx.containingZoneHVACComponent.is_initialized
|
|
30
|
+
containing_comp = coil_dx.containingZoneHVACComponent.get
|
|
31
|
+
# PTHP
|
|
32
|
+
if containing_comp.to_ZoneHVACPackagedTerminalHeatPump.is_initialized
|
|
33
|
+
sub_category = 'PTHP'
|
|
34
|
+
end
|
|
35
|
+
# @todo Add other zone hvac systems
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
return sub_category
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Determine if it is a heat pump
|
|
42
|
+
#
|
|
43
|
+
# @param coil_dx [OpenStudio::Model::StraightComponent] coil cooling object, allowable types:
|
|
44
|
+
# CoilCoolingDXSingleSpeed, CoilCoolingDXTwoSpeed, CoilCoolingDXMultiSpeed
|
|
45
|
+
# @return [Boolean] returns true if it is a heat pump, false if not
|
|
46
|
+
def self.coil_dx_heat_pump?(coil_dx)
|
|
47
|
+
heat_pump = false
|
|
48
|
+
|
|
49
|
+
if coil_dx.airLoopHVAC.empty?
|
|
50
|
+
if coil_dx.containingHVACComponent.is_initialized
|
|
51
|
+
containing_comp = coil_dx.containingHVACComponent.get
|
|
52
|
+
if containing_comp.to_AirLoopHVACUnitarySystem.is_initialized
|
|
53
|
+
htg_coil = containing_comp.to_AirLoopHVACUnitarySystem.get.heatingCoil
|
|
54
|
+
unless htg_coil.empty?
|
|
55
|
+
heat_pump = ['OS_Coil_Heating_DX_SingleSpeed',
|
|
56
|
+
'OS_Coil_Heating_DX_MultiSpeed',
|
|
57
|
+
'OS_Coil_Heating_DX_VariableSpeed',
|
|
58
|
+
'OS_Coil_Heating_WaterToAirHeatPump_EquationFit'].include?(htg_coil.get.iddObjectType.valueName.to_s)
|
|
59
|
+
end
|
|
60
|
+
elsif containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAir.is_initialized
|
|
61
|
+
heat_pump = true
|
|
62
|
+
elsif containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed.is_initialized
|
|
63
|
+
htg_coil = containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed.get.heatingCoil
|
|
64
|
+
if htg_coil.to_CoilHeatingDXMultiSpeed.is_initialized then heat_pump = true end
|
|
65
|
+
end
|
|
66
|
+
elsif coil_dx.containingZoneHVACComponent.is_initialized
|
|
67
|
+
containing_comp = coil_dx.containingZoneHVACComponent.get
|
|
68
|
+
# PTHP
|
|
69
|
+
if containing_comp.to_ZoneHVACPackagedTerminalHeatPump.is_initialized
|
|
70
|
+
heat_pump = true
|
|
71
|
+
end
|
|
72
|
+
# @todo Add other zone hvac systems
|
|
73
|
+
end
|
|
74
|
+
else
|
|
75
|
+
if !coil_dx.airLoopHVAC.get.supplyComponents('OS:Coil:Heating:DX:SingleSpeed'.to_IddObjectType).empty? ||
|
|
76
|
+
!coil_dx.airLoopHVAC.get.supplyComponents('OS:Coil:Heating:DX:MultiSpeed'.to_IddObjectType).empty? ||
|
|
77
|
+
!coil_dx.airLoopHVAC.get.supplyComponents('OS:Coil:Heating:DX:VariableSpeed'.to_IddObjectType).empty?
|
|
78
|
+
heat_pump = true
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
return heat_pump
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Determine the heating type for a dx cooling coil. Possible choices are: 'Electric Resistance or None', 'All Other'.
|
|
86
|
+
#
|
|
87
|
+
# @param coil_dx [OpenStudio::Model::StraightComponent] coil cooling object, allowable types:
|
|
88
|
+
# CoilCoolingDXSingleSpeed, CoilCoolingDXTwoSpeed, CoilCoolingDXMultiSpeed
|
|
89
|
+
# @return [String] the heating type
|
|
90
|
+
def self.coil_dx_heating_type(coil_dx)
|
|
91
|
+
htg_type = nil
|
|
92
|
+
|
|
93
|
+
# If Unitary or Zone HVAC (could be a unitary system on an air loop)
|
|
94
|
+
if coil_dx.airLoopHVAC.empty?
|
|
95
|
+
if coil_dx.containingHVACComponent.is_initialized
|
|
96
|
+
containing_comp = coil_dx.containingHVACComponent.get
|
|
97
|
+
if containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAir.is_initialized
|
|
98
|
+
htg_type = 'Electric Resistance or None'
|
|
99
|
+
elsif containing_comp.to_AirLoopHVACUnitarySystem.is_initialized
|
|
100
|
+
htg_coil = containing_comp.to_AirLoopHVACUnitarySystem.get.heatingCoil
|
|
101
|
+
if containing_comp.name.to_s.include? 'Minisplit'
|
|
102
|
+
htg_type = 'All Other'
|
|
103
|
+
elsif htg_coil.is_initialized
|
|
104
|
+
htg_coil = htg_coil.get
|
|
105
|
+
if htg_coil.to_CoilHeatingElectric.is_initialized || htg_coil.to_CoilHeatingDXMultiSpeed.is_initialized
|
|
106
|
+
htg_type = 'Electric Resistance or None'
|
|
107
|
+
elsif htg_coil.to_CoilHeatingGas.is_initialized || htg_coil.to_CoilHeatingGasMultiStage.is_initialized || htg_coil.to_CoilHeatingWater.is_initialized
|
|
108
|
+
htg_type = 'All Other'
|
|
109
|
+
end
|
|
110
|
+
else
|
|
111
|
+
htg_type = 'Electric Resistance or None'
|
|
112
|
+
end
|
|
113
|
+
elsif containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed.is_initialized
|
|
114
|
+
htg_coil = containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed.get.heatingCoil
|
|
115
|
+
supp_htg_coil = containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed.get.supplementalHeatingCoil
|
|
116
|
+
if htg_coil.to_CoilHeatingDXMultiSpeed.is_initialized || supp_htg_coil.to_CoilHeatingElectric.is_initialized
|
|
117
|
+
htg_type = 'Electric Resistance or None'
|
|
118
|
+
elsif htg_coil.to_CoilHeatingGas.is_initialized || htg_coil.to_CoilHeatingGasMultiStage.is_initialized || htg_coil.to_CoilHeatingWater.is_initialized
|
|
119
|
+
htg_type = 'All Other'
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
# @todo Add other unitary systems
|
|
123
|
+
elsif coil_dx.containingZoneHVACComponent.is_initialized
|
|
124
|
+
containing_comp = coil_dx.containingZoneHVACComponent.get
|
|
125
|
+
# PTAC
|
|
126
|
+
if containing_comp.to_ZoneHVACPackagedTerminalAirConditioner.is_initialized
|
|
127
|
+
htg_coil = containing_comp.to_ZoneHVACPackagedTerminalAirConditioner.get.heatingCoil
|
|
128
|
+
if htg_coil.to_CoilHeatingElectric.is_initialized
|
|
129
|
+
htg_type = 'Electric Resistance or None'
|
|
130
|
+
elsif htg_coil.to_CoilHeatingGas.is_initialized || htg_coil.to_CoilHeatingGasMultiStage.is_initialized || htg_coil.to_CoilHeatingWater.is_initialized
|
|
131
|
+
htg_type = 'All Other'
|
|
132
|
+
end
|
|
133
|
+
# PTHP
|
|
134
|
+
elsif containing_comp.to_ZoneHVACPackagedTerminalHeatPump.is_initialized
|
|
135
|
+
htg_type = 'Electric Resistance or None'
|
|
136
|
+
end
|
|
137
|
+
# @todo Add other zone hvac systems
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# If on an AirLoop
|
|
142
|
+
if coil_dx.airLoopHVAC.is_initialized
|
|
143
|
+
air_loop = coil_dx.airLoopHVAC.get
|
|
144
|
+
htg_type = if !air_loop.supplyComponents('OS:Coil:Heating:Gas'.to_IddObjectType).empty?
|
|
145
|
+
'All Other'
|
|
146
|
+
elsif !air_loop.supplyComponents('OS:Coil:Heating:Water'.to_IddObjectType).empty?
|
|
147
|
+
'All Other'
|
|
148
|
+
elsif !air_loop.supplyComponents('OS:Coil:Heating:DX:SingleSpeed'.to_IddObjectType).empty?
|
|
149
|
+
'All Other'
|
|
150
|
+
elsif !air_loop.supplyComponents('OS:Coil:Heating:DX:MultiSpeed'.to_IddObjectType).empty?
|
|
151
|
+
'All Other'
|
|
152
|
+
elsif !air_loop.supplyComponents('OS:Coil:Heating:DX:VariableSpeed'.to_IddObjectType).empty?
|
|
153
|
+
'All Other'
|
|
154
|
+
elsif !air_loop.supplyComponents('OS:Coil:Heating:Gas:MultiStage'.to_IddObjectType).empty?
|
|
155
|
+
'All Other'
|
|
156
|
+
elsif !air_loop.supplyComponents('OS:Coil:Heating:Desuperheater'.to_IddObjectType).empty?
|
|
157
|
+
'All Other'
|
|
158
|
+
elsif !air_loop.supplyComponents('OS:Coil:Heating:WaterToAirHeatPump:EquationFit'.to_IddObjectType).empty?
|
|
159
|
+
'All Other'
|
|
160
|
+
elsif !air_loop.supplyComponents('OS:Coil:Heating:Electric'.to_IddObjectType).empty?
|
|
161
|
+
'Electric Resistance or None'
|
|
162
|
+
else
|
|
163
|
+
'Electric Resistance or None'
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
return htg_type
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
# Return the cooling capacity of the DX cooling coil paired with the heating coil
|
|
171
|
+
#
|
|
172
|
+
# @param coil_heating [OpenStudio::Model::CoilHeatingDXSingleSpeed, OpenStudio::Model::CoilHeatingWaterToAirHeatPumpEquationFit] coil heating object
|
|
173
|
+
# @return [Double] capacity in W to be used for find object
|
|
174
|
+
def self.coil_heating_get_paired_coil_cooling_capacity(coil_heating)
|
|
175
|
+
capacity_w = nil
|
|
176
|
+
|
|
177
|
+
# Get the paired cooling coil
|
|
178
|
+
clg_coil = nil
|
|
179
|
+
|
|
180
|
+
# Unitary and zone equipment
|
|
181
|
+
if coil_heating.airLoopHVAC.empty?
|
|
182
|
+
if coil_heating.containingHVACComponent.is_initialized
|
|
183
|
+
containing_comp = coil_heating.containingHVACComponent.get
|
|
184
|
+
if containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAir.is_initialized
|
|
185
|
+
clg_coil = containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.coolingCoil
|
|
186
|
+
elsif containing_comp.to_AirLoopHVACUnitarySystem.is_initialized
|
|
187
|
+
unitary = containing_comp.to_AirLoopHVACUnitarySystem.get
|
|
188
|
+
if unitary.coolingCoil.is_initialized
|
|
189
|
+
clg_coil = unitary.coolingCoil.get
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
# @todo Add other unitary systems
|
|
193
|
+
elsif coil_heating.containingZoneHVACComponent.is_initialized
|
|
194
|
+
containing_comp = coil_heating.containingZoneHVACComponent.get
|
|
195
|
+
# PTHP
|
|
196
|
+
if containing_comp.to_ZoneHVACPackagedTerminalHeatPump.is_initialized
|
|
197
|
+
pthp = containing_comp.to_ZoneHVACPackagedTerminalHeatPump.get
|
|
198
|
+
clg_coil = containing_comp.to_ZoneHVACPackagedTerminalHeatPump.get.coolingCoil
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
# On AirLoop directly
|
|
204
|
+
if coil_heating.airLoopHVAC.is_initialized
|
|
205
|
+
air_loop = coil_heating.airLoopHVAC.get
|
|
206
|
+
|
|
207
|
+
# Check for the presence of any other type of cooling coil
|
|
208
|
+
clg_types = ['OS:Coil:Cooling:DX:SingleSpeed',
|
|
209
|
+
'OS:Coil:Cooling:DX:TwoSpeed',
|
|
210
|
+
'OS:Coil:Cooling:DX:MultiSpeed']
|
|
211
|
+
clg_types.each do |ct|
|
|
212
|
+
coils = air_loop.supplyComponents(ct.to_IddObjectType)
|
|
213
|
+
next if coils.empty?
|
|
214
|
+
|
|
215
|
+
clg_coil = coils[0].to_StraightComponent.get
|
|
216
|
+
# Stop on first DX cooling coil found
|
|
217
|
+
break
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
# If no paired cooling coil was found, throw an error and fall back to the heating capacity
|
|
222
|
+
if clg_coil.nil?
|
|
223
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.HVAC.coil', "For #{coil_heating.name}, the paired DX cooling coil could not be found to determine capacity. Using the coil's heating capacity instead, which will incorrectly select efficiency levels for most standards.")
|
|
224
|
+
|
|
225
|
+
if coil_heating.to_CoilHeatingDXSingleSpeed.is_initialized
|
|
226
|
+
coil_heating = coil_heating.to_CoilHeatingDXSingleSpeed.get
|
|
227
|
+
capacity_w = OpenstudioStandards::HVAC.coil_heating_dx_single_speed_get_capacity(coil_heating)
|
|
228
|
+
elsif coil_heating.to_CoilHeatingWaterToAirHeatPumpEquationFit.is_initialized
|
|
229
|
+
coil_heating = coil_heating.to_CoilHeatingWaterToAirHeatPumpEquationFit.get
|
|
230
|
+
capacity_w = OpenstudioStandards::HVAC.coil_heating_water_to_air_heat_pump_equation_fit_get_capacity(coil_heating)
|
|
231
|
+
elsif coil_heating.to_CoilHeatingGas.is_initialized
|
|
232
|
+
coil_heating = coil_heating.to_CoilHeatingGas.get
|
|
233
|
+
capacity_w = OpenstudioStandards::HVAC.coil_heating_gas_get_capacity(coil_heating)
|
|
234
|
+
elsif coil_heating.to_CoilHeatingGasMultiStage.is_initialized
|
|
235
|
+
coil_heating = coil_heating.to_CoilHeatingGasMultiStage.get
|
|
236
|
+
capacity_w = OpenstudioStandards::HVAC.coil_heating_gas_multi_stage_get_capacity(coil_heating)
|
|
237
|
+
else
|
|
238
|
+
# If the coil is not a supported coil type, we cannot determine the capacity
|
|
239
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.HVAC.coil', "For #{coil_heating.name}, the coil is not a supported coil type and cannot determine capacity.")
|
|
240
|
+
return nil
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
# return nil if no capacity is available
|
|
244
|
+
if capacity_w.nil?
|
|
245
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.HVAC.coil', "For #{coil_heating.name} capacity is not available.")
|
|
246
|
+
return nil
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
return capacity_w
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
multiplier = 1.0
|
|
253
|
+
if ['PTAC', 'PTHP'].include?(OpenstudioStandards::HVAC.coil_dx_subcategory(clg_coil))
|
|
254
|
+
thermal_zone = OpenstudioStandards::HVAC.hvac_component_get_thermal_zone(clg_coil)
|
|
255
|
+
multiplier = thermal_zone.multiplier if !thermal_zone.nil?
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
# If a coil was found, cast to the correct type
|
|
259
|
+
if clg_coil.to_CoilCoolingDXSingleSpeed.is_initialized
|
|
260
|
+
clg_coil = clg_coil.to_CoilCoolingDXSingleSpeed.get
|
|
261
|
+
capacity_w = OpenstudioStandards::HVAC.coil_cooling_dx_single_speed_get_capacity(clg_coil, multiplier: multiplier)
|
|
262
|
+
elsif clg_coil.to_CoilCoolingDXTwoSpeed.is_initialized
|
|
263
|
+
clg_coil = clg_coil.to_CoilCoolingDXTwoSpeed.get
|
|
264
|
+
capacity_w = OpenstudioStandards::HVAC.coil_cooling_dx_two_speed_get_capacity(clg_coil, multiplier: multiplier)
|
|
265
|
+
elsif clg_coil.to_CoilCoolingDXMultiSpeed.is_initialized
|
|
266
|
+
clg_coil = clg_coil.to_CoilCoolingDXMultiSpeed.get
|
|
267
|
+
capacity_w = OpenstudioStandards::HVAC.coil_cooling_dx_multi_speed_get_capacity(clg_coil, multiplier: multiplier)
|
|
268
|
+
elsif clg_coil.to_CoilCoolingWaterToAirHeatPumpEquationFit.is_initialized
|
|
269
|
+
clg_coil = clg_coil.to_CoilCoolingWaterToAirHeatPumpEquationFit.get
|
|
270
|
+
capacity_w = OpenstudioStandards::HVAC.coil_cooling_water_to_air_heat_pump_get_capacity(clg_coil, multiplier: multiplier)
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
return capacity_w
|
|
274
|
+
end
|
|
275
|
+
end
|
|
276
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module OpenstudioStandards
|
|
2
|
+
# The HVAC module provides methods create, modify, and get information about HVAC systems in the model
|
|
3
|
+
module HVAC
|
|
4
|
+
# @!group Component:Coil
|
|
5
|
+
# Methods to create, modify, and get information about HVAC coil objects
|
|
6
|
+
|
|
7
|
+
# Return the capacity in W of a CoilCoolingDXMultiSpeed
|
|
8
|
+
#
|
|
9
|
+
#
|
|
10
|
+
# @param coil_cooling_dx_multi_speed [OpenStudio::Model::CoilCoolingDXMultiSpeed] coil cooling dx multi speed object
|
|
11
|
+
# @param multiplier [Double] zone multiplier, if applicable
|
|
12
|
+
# @return [Double] capacity in W
|
|
13
|
+
def self.coil_cooling_dx_multi_speed_get_capacity(coil_cooling_dx_multi_speed, multiplier: nil)
|
|
14
|
+
capacity_w = nil
|
|
15
|
+
clg_stages = coil_cooling_dx_multi_speed.stages
|
|
16
|
+
if clg_stages.last.grossRatedTotalCoolingCapacity.is_initialized
|
|
17
|
+
capacity_w = clg_stages.last.grossRatedTotalCoolingCapacity.get
|
|
18
|
+
elsif (clg_stages.size == 1) && coil_cooling_dx_multi_speed.stages[0].autosizedSpeedRatedTotalCoolingCapacity.is_initialized
|
|
19
|
+
capacity_w = coil_cooling_dx_multi_speed.stages[0].autosizedSpeedRatedTotalCoolingCapacity.get
|
|
20
|
+
elsif (clg_stages.size == 2) && coil_cooling_dx_multi_speed.stages[1].autosizedGrossRatedTotalCoolingCapacity.is_initialized
|
|
21
|
+
capacity_w = coil_cooling_dx_multi_speed.stages[1].autosizedGrossRatedTotalCoolingCapacity.get
|
|
22
|
+
elsif (clg_stages.size == 3) && coil_cooling_dx_multi_speed.stages[2].autosizedGrossRatedTotalCoolingCapacity.is_initialized
|
|
23
|
+
capacity_w = coil_cooling_dx_multi_speed.stages[2].autosizedSpeedRatedTotalCoolingCapacity.get
|
|
24
|
+
elsif (clg_stages.size == 4) && coil_cooling_dx_multi_speed.stages[3].autosizedGrossRatedTotalCoolingCapacity.is_initialized
|
|
25
|
+
capacity_w = coil_cooling_dx_multi_speed.stages[3].autosizedGrossRatedTotalCoolingCapacity.get
|
|
26
|
+
else
|
|
27
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.HVAC.coil_cooling_dx_multi_speed', "For #{coil_cooling_dx_multi_speed.name} capacity is not available.")
|
|
28
|
+
return capacity_w
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
if !multiplier.nil? && multiplier > 1
|
|
32
|
+
total_cap = capacity_w
|
|
33
|
+
capacity_w /= multiplier
|
|
34
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.HVAC.coil_cooling_dx_multi_speed', "For #{coil_cooling_dx_multi_speed.name}, total capacity of #{OpenStudio.convert(total_cap, 'W', 'kBtu/hr').get.round(2)}kBTU/hr was divided by the zone multiplier of #{multiplier} to give #{capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get.round(2)}kBTU/hr.")
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
return capacity_w
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|