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
data/lib/openstudio-standards/hvac/components/coil_cooling_water_to_air_heat_pump_equation_fit.rb
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
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
|
+
# Create CoilCoolingWaterToAirHeatPumpEquationFit object
|
|
8
|
+
# Enters in default curves for coil by type of coil
|
|
9
|
+
#
|
|
10
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
|
11
|
+
# @param plant_loop [<OpenStudio::Model::PlantLoop>] the coil will be placed on the demand side of this plant loop
|
|
12
|
+
# @param air_loop_node [<OpenStudio::Model::Node>] the coil will be placed on this node of the air loop
|
|
13
|
+
# @param name [String] the name of the system, or nil in which case it will be defaulted
|
|
14
|
+
# @param type [String] the type of coil to reference the correct curve set
|
|
15
|
+
# @param cop [Double] rated cooling coefficient of performance
|
|
16
|
+
# @return [OpenStudio::Model::CoilCoolingWaterToAirHeatPumpEquationFit] the cooling coil
|
|
17
|
+
def self.create_coil_cooling_water_to_air_heat_pump_equation_fit(model,
|
|
18
|
+
plant_loop,
|
|
19
|
+
air_loop_node: nil,
|
|
20
|
+
name: 'Water-to-Air HP Clg Coil',
|
|
21
|
+
type: nil,
|
|
22
|
+
cop: 3.4)
|
|
23
|
+
clg_coil = OpenStudio::Model::CoilCoolingWaterToAirHeatPumpEquationFit.new(model)
|
|
24
|
+
|
|
25
|
+
# add to air loop if specified
|
|
26
|
+
clg_coil.addToNode(air_loop_node) unless air_loop_node.nil?
|
|
27
|
+
|
|
28
|
+
# set coil name
|
|
29
|
+
clg_coil.setName(name)
|
|
30
|
+
|
|
31
|
+
# add to plant loop
|
|
32
|
+
if plant_loop.nil?
|
|
33
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.HVAC', 'No plant loop supplied for cooling coil')
|
|
34
|
+
return false
|
|
35
|
+
end
|
|
36
|
+
plant_loop.addDemandBranchForComponent(clg_coil)
|
|
37
|
+
|
|
38
|
+
# set coil cop
|
|
39
|
+
if cop.nil?
|
|
40
|
+
clg_coil.setRatedCoolingCoefficientofPerformance(3.4)
|
|
41
|
+
else
|
|
42
|
+
clg_coil.setRatedCoolingCoefficientofPerformance(cop)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# curve sets
|
|
46
|
+
if type == 'OS default'
|
|
47
|
+
# use OS default curves
|
|
48
|
+
else # default curve set
|
|
49
|
+
if model.version < OpenStudio::VersionString.new('3.2.0')
|
|
50
|
+
clg_coil.setTotalCoolingCapacityCoefficient1(-4.30266987344639)
|
|
51
|
+
clg_coil.setTotalCoolingCapacityCoefficient2(7.18536990534372)
|
|
52
|
+
clg_coil.setTotalCoolingCapacityCoefficient3(-2.23946714486189)
|
|
53
|
+
clg_coil.setTotalCoolingCapacityCoefficient4(0.139995928440879)
|
|
54
|
+
clg_coil.setTotalCoolingCapacityCoefficient5(0.102660179888915)
|
|
55
|
+
clg_coil.setSensibleCoolingCapacityCoefficient1(6.0019444814887)
|
|
56
|
+
clg_coil.setSensibleCoolingCapacityCoefficient2(22.6300677244073)
|
|
57
|
+
clg_coil.setSensibleCoolingCapacityCoefficient3(-26.7960783730934)
|
|
58
|
+
clg_coil.setSensibleCoolingCapacityCoefficient4(-1.72374720346819)
|
|
59
|
+
clg_coil.setSensibleCoolingCapacityCoefficient5(0.490644802367817)
|
|
60
|
+
clg_coil.setSensibleCoolingCapacityCoefficient6(0.0693119353468141)
|
|
61
|
+
clg_coil.setCoolingPowerConsumptionCoefficient1(-5.67775976415698)
|
|
62
|
+
clg_coil.setCoolingPowerConsumptionCoefficient2(0.438988156976704)
|
|
63
|
+
clg_coil.setCoolingPowerConsumptionCoefficient3(5.845277342193)
|
|
64
|
+
clg_coil.setCoolingPowerConsumptionCoefficient4(0.141605667000125)
|
|
65
|
+
clg_coil.setCoolingPowerConsumptionCoefficient5(-0.168727936032429)
|
|
66
|
+
else
|
|
67
|
+
if model.getCurveByName('Water to Air Heat Pump Total Cooling Capacity Curve').is_initialized
|
|
68
|
+
total_cooling_capacity_curve = model.getCurveByName('Water to Air Heat Pump Total Cooling Capacity Curve').get
|
|
69
|
+
total_cooling_capacity_curve = total_cooling_capacity_curve.to_CurveQuadLinear.get
|
|
70
|
+
else
|
|
71
|
+
total_cooling_capacity_curve = OpenStudio::Model::CurveQuadLinear.new(model)
|
|
72
|
+
total_cooling_capacity_curve.setName('Water to Air Heat Pump Total Cooling Capacity Curve')
|
|
73
|
+
total_cooling_capacity_curve.setCoefficient1Constant(-4.30266987344639)
|
|
74
|
+
total_cooling_capacity_curve.setCoefficient2w(7.18536990534372)
|
|
75
|
+
total_cooling_capacity_curve.setCoefficient3x(-2.23946714486189)
|
|
76
|
+
total_cooling_capacity_curve.setCoefficient4y(0.139995928440879)
|
|
77
|
+
total_cooling_capacity_curve.setCoefficient5z(0.102660179888915)
|
|
78
|
+
total_cooling_capacity_curve.setMinimumValueofw(-100)
|
|
79
|
+
total_cooling_capacity_curve.setMaximumValueofw(100)
|
|
80
|
+
total_cooling_capacity_curve.setMinimumValueofx(-100)
|
|
81
|
+
total_cooling_capacity_curve.setMaximumValueofx(100)
|
|
82
|
+
total_cooling_capacity_curve.setMinimumValueofy(0)
|
|
83
|
+
total_cooling_capacity_curve.setMaximumValueofy(100)
|
|
84
|
+
total_cooling_capacity_curve.setMinimumValueofz(0)
|
|
85
|
+
total_cooling_capacity_curve.setMaximumValueofz(100)
|
|
86
|
+
end
|
|
87
|
+
clg_coil.setTotalCoolingCapacityCurve(total_cooling_capacity_curve)
|
|
88
|
+
|
|
89
|
+
if model.getCurveByName('Water to Air Heat Pump Sensible Cooling Capacity Curve').is_initialized
|
|
90
|
+
sensible_cooling_capacity_curve = model.getCurveByName('Water to Air Heat Pump Sensible Cooling Capacity Curve').get
|
|
91
|
+
sensible_cooling_capacity_curve = sensible_cooling_capacity_curve.to_CurveQuintLinear.get
|
|
92
|
+
else
|
|
93
|
+
sensible_cooling_capacity_curve = OpenStudio::Model::CurveQuintLinear.new(model)
|
|
94
|
+
sensible_cooling_capacity_curve.setName('Water to Air Heat Pump Sensible Cooling Capacity Curve')
|
|
95
|
+
sensible_cooling_capacity_curve.setCoefficient1Constant(6.0019444814887)
|
|
96
|
+
sensible_cooling_capacity_curve.setCoefficient2v(22.6300677244073)
|
|
97
|
+
sensible_cooling_capacity_curve.setCoefficient3w(-26.7960783730934)
|
|
98
|
+
sensible_cooling_capacity_curve.setCoefficient4x(-1.72374720346819)
|
|
99
|
+
sensible_cooling_capacity_curve.setCoefficient5y(0.490644802367817)
|
|
100
|
+
sensible_cooling_capacity_curve.setCoefficient6z(0.0693119353468141)
|
|
101
|
+
sensible_cooling_capacity_curve.setMinimumValueofw(-100)
|
|
102
|
+
sensible_cooling_capacity_curve.setMaximumValueofw(100)
|
|
103
|
+
sensible_cooling_capacity_curve.setMinimumValueofx(-100)
|
|
104
|
+
sensible_cooling_capacity_curve.setMaximumValueofx(100)
|
|
105
|
+
sensible_cooling_capacity_curve.setMinimumValueofy(0)
|
|
106
|
+
sensible_cooling_capacity_curve.setMaximumValueofy(100)
|
|
107
|
+
sensible_cooling_capacity_curve.setMinimumValueofz(0)
|
|
108
|
+
sensible_cooling_capacity_curve.setMaximumValueofz(100)
|
|
109
|
+
end
|
|
110
|
+
clg_coil.setSensibleCoolingCapacityCurve(sensible_cooling_capacity_curve)
|
|
111
|
+
|
|
112
|
+
if model.getCurveByName('Water to Air Heat Pump Cooling Power Consumption Curve').is_initialized
|
|
113
|
+
cooling_power_consumption_curve = model.getCurveByName('Water to Air Heat Pump Cooling Power Consumption Curve').get
|
|
114
|
+
cooling_power_consumption_curve = cooling_power_consumption_curve.to_CurveQuadLinear.get
|
|
115
|
+
else
|
|
116
|
+
cooling_power_consumption_curve = OpenStudio::Model::CurveQuadLinear.new(model)
|
|
117
|
+
cooling_power_consumption_curve.setName('Water to Air Heat Pump Cooling Power Consumption Curve')
|
|
118
|
+
cooling_power_consumption_curve.setCoefficient1Constant(-5.67775976415698)
|
|
119
|
+
cooling_power_consumption_curve.setCoefficient2w(0.438988156976704)
|
|
120
|
+
cooling_power_consumption_curve.setCoefficient3x(5.845277342193)
|
|
121
|
+
cooling_power_consumption_curve.setCoefficient4y(0.141605667000125)
|
|
122
|
+
cooling_power_consumption_curve.setCoefficient5z(-0.168727936032429)
|
|
123
|
+
cooling_power_consumption_curve.setMinimumValueofw(-100)
|
|
124
|
+
cooling_power_consumption_curve.setMaximumValueofw(100)
|
|
125
|
+
cooling_power_consumption_curve.setMinimumValueofx(-100)
|
|
126
|
+
cooling_power_consumption_curve.setMaximumValueofx(100)
|
|
127
|
+
cooling_power_consumption_curve.setMinimumValueofy(0)
|
|
128
|
+
cooling_power_consumption_curve.setMaximumValueofy(100)
|
|
129
|
+
cooling_power_consumption_curve.setMinimumValueofz(0)
|
|
130
|
+
cooling_power_consumption_curve.setMaximumValueofz(100)
|
|
131
|
+
end
|
|
132
|
+
clg_coil.setCoolingPowerConsumptionCurve(cooling_power_consumption_curve)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# part load fraction correlation curve added as a required curve in OS v3.7.0
|
|
136
|
+
if model.version > OpenStudio::VersionString.new('3.6.1')
|
|
137
|
+
if model.getCurveByName('Water to Air Heat Pump Part Load Fraction Correlation Curve').is_initialized
|
|
138
|
+
part_load_correlation_curve = model.getCurveByName('Water to Air Heat Pump Part Load Fraction Correlation Curve').get
|
|
139
|
+
part_load_correlation_curve = part_load_correlation_curve.to_CurveLinear.get
|
|
140
|
+
else
|
|
141
|
+
part_load_correlation_curve = OpenStudio::Model::CurveLinear.new(model)
|
|
142
|
+
part_load_correlation_curve.setName('Water to Air Heat Pump Part Load Fraction Correlation Curve')
|
|
143
|
+
part_load_correlation_curve.setCoefficient1Constant(0.833746458696111)
|
|
144
|
+
part_load_correlation_curve.setCoefficient2x(0.166253541303889)
|
|
145
|
+
part_load_correlation_curve.setMinimumValueofx(0)
|
|
146
|
+
part_load_correlation_curve.setMaximumValueofx(1)
|
|
147
|
+
part_load_correlation_curve.setMinimumCurveOutput(0)
|
|
148
|
+
part_load_correlation_curve.setMaximumCurveOutput(1)
|
|
149
|
+
end
|
|
150
|
+
clg_coil.setPartLoadFractionCorrelationCurve(part_load_correlation_curve)
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
return clg_coil
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# Return the capacity in W of a CoilCoolingWaterToAirHeatPumpEquationFit
|
|
158
|
+
#
|
|
159
|
+
# @param coil_cooling_water_to_air_heat_pump [OpenStudio::Model::CoilCoolingWaterToAirHeatPumpEquationFit] coil cooling object
|
|
160
|
+
# @param multiplier [Double] zone multiplier, if applicable
|
|
161
|
+
# @return [Double] capacity in W
|
|
162
|
+
def self.coil_cooling_water_to_air_heat_pump_get_capacity(coil_cooling_water_to_air_heat_pump, multiplier: nil)
|
|
163
|
+
capacity_w = nil
|
|
164
|
+
if coil_cooling_water_to_air_heat_pump.ratedTotalCoolingCapacity.is_initialized
|
|
165
|
+
capacity_w = coil_cooling_water_to_air_heat_pump.ratedTotalCoolingCapacity.get
|
|
166
|
+
elsif coil_cooling_water_to_air_heat_pump.autosizedRatedTotalCoolingCapacity.is_initialized
|
|
167
|
+
capacity_w = coil_cooling_water_to_air_heat_pump.autosizedRatedTotalCoolingCapacity.get
|
|
168
|
+
else
|
|
169
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.HVAC.coil_cooling_water_to_air_heat_pump_equation_fit', "For #{coil_cooling_water_to_air_heat_pump.name} capacity is not available.")
|
|
170
|
+
return capacity_w
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
if !multiplier.nil? && multiplier > 1
|
|
174
|
+
total_cap = capacity_w
|
|
175
|
+
capacity_w /= multiplier
|
|
176
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.HVAC.coil_cooling_water_to_air_heat_pump', "For #{coil_cooling_dx_twcoil_cooling_water_to_air_heat_pumpo_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.")
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
return capacity_w
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
end
|
|
@@ -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:Coil
|
|
5
|
+
# Methods to create, modify, and get information about HVAC coil objects
|
|
6
|
+
|
|
7
|
+
# Create CoilHeatingDXSingleSpeed object
|
|
8
|
+
# Enters in default curves for coil by type of coil
|
|
9
|
+
#
|
|
10
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
|
11
|
+
# @param air_loop_node [<OpenStudio::Model::Node>] the coil will be placed on this node of the air loop
|
|
12
|
+
# @param name [String] the name of the system, or nil in which case it will be defaulted
|
|
13
|
+
# @param schedule [String] name of the availability schedule, or [<OpenStudio::Model::Schedule>] Schedule object, or nil in which case default to always on
|
|
14
|
+
# @param type [String] the type of single speed DX coil to reference the correct curve set
|
|
15
|
+
# @param cop [Double] rated heating coefficient of performance
|
|
16
|
+
# @param defrost_strategy [String] type of defrost strategy. options are reverse-cycle or resistive
|
|
17
|
+
# @return [OpenStudio::Model::CoilHeatingDXSingleSpeed] the DX heating coil
|
|
18
|
+
def self.create_coil_heating_dx_single_speed(model,
|
|
19
|
+
air_loop_node: nil,
|
|
20
|
+
name: '1spd DX Htg Coil',
|
|
21
|
+
schedule: nil,
|
|
22
|
+
type: nil,
|
|
23
|
+
cop: 3.3,
|
|
24
|
+
defrost_strategy: 'ReverseCycle')
|
|
25
|
+
htg_coil = OpenStudio::Model::CoilHeatingDXSingleSpeed.new(model)
|
|
26
|
+
|
|
27
|
+
# add to air loop if specified
|
|
28
|
+
htg_coil.addToNode(air_loop_node) unless air_loop_node.nil?
|
|
29
|
+
|
|
30
|
+
# set coil name
|
|
31
|
+
htg_coil.setName(name)
|
|
32
|
+
|
|
33
|
+
# set coil availability schedule
|
|
34
|
+
if schedule.nil?
|
|
35
|
+
# default always on
|
|
36
|
+
coil_availability_schedule = model.alwaysOnDiscreteSchedule
|
|
37
|
+
elsif schedule.instance_of?(String)
|
|
38
|
+
coil_availability_schedule = model_add_schedule(model, schedule)
|
|
39
|
+
|
|
40
|
+
if coil_availability_schedule.nil? && schedule == 'alwaysOffDiscreteSchedule'
|
|
41
|
+
coil_availability_schedule = model.alwaysOffDiscreteSchedule
|
|
42
|
+
elsif coil_availability_schedule.nil?
|
|
43
|
+
coil_availability_schedule = model.alwaysOnDiscreteSchedule
|
|
44
|
+
end
|
|
45
|
+
elsif !schedule.to_Schedule.empty?
|
|
46
|
+
coil_availability_schedule = schedule
|
|
47
|
+
end
|
|
48
|
+
htg_coil.setAvailabilitySchedule(coil_availability_schedule)
|
|
49
|
+
|
|
50
|
+
# set coil cop
|
|
51
|
+
if cop.nil?
|
|
52
|
+
htg_coil.setRatedCOP(3.3)
|
|
53
|
+
else
|
|
54
|
+
htg_coil.setRatedCOP(cop)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
htg_cap_f_of_temp = nil
|
|
58
|
+
htg_cap_f_of_flow = nil
|
|
59
|
+
htg_energy_input_ratio_f_of_temp = nil
|
|
60
|
+
htg_energy_input_ratio_f_of_flow = nil
|
|
61
|
+
htg_part_load_fraction = nil
|
|
62
|
+
def_eir_f_of_temp = nil
|
|
63
|
+
|
|
64
|
+
# curve sets
|
|
65
|
+
case type
|
|
66
|
+
when 'OS default'
|
|
67
|
+
# use OS defaults
|
|
68
|
+
when 'Residential Central Air Source HP'
|
|
69
|
+
# Performance curves
|
|
70
|
+
# These coefficients are in IP UNITS
|
|
71
|
+
heat_cap_ft_coeffs_ip = [0.566333415, -0.000744164, -0.0000103, 0.009414634, 0.0000506, -0.00000675]
|
|
72
|
+
heat_eir_ft_coeffs_ip = [0.718398423, 0.003498178, 0.000142202, -0.005724331, 0.00014085, -0.000215321]
|
|
73
|
+
heat_cap_fflow_coeffs = [0.694045465, 0.474207981, -0.168253446]
|
|
74
|
+
heat_eir_fflow_coeffs = [2.185418751, -1.942827919, 0.757409168]
|
|
75
|
+
heat_plf_fplr_coeffs = [0.8, 0.2, 0]
|
|
76
|
+
defrost_eir_coeffs = [0.1528, 0, 0, 0, 0, 0]
|
|
77
|
+
|
|
78
|
+
# Convert coefficients from IP to SI
|
|
79
|
+
heat_cap_ft_coeffs_si = OpenstudioStandards::HVAC.convert_curve_biquadratic(heat_cap_ft_coeffs_ip)
|
|
80
|
+
heat_eir_ft_coeffs_si = OpenstudioStandards::HVAC.convert_curve_biquadratic(heat_eir_ft_coeffs_ip)
|
|
81
|
+
|
|
82
|
+
htg_cap_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, heat_cap_ft_coeffs_si, name: 'Heat-Cap-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
|
|
83
|
+
htg_cap_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, heat_cap_fflow_coeffs, name: 'Heat-Cap-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
|
|
84
|
+
htg_energy_input_ratio_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, heat_eir_ft_coeffs_si, name: 'Heat-EIR-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
|
|
85
|
+
htg_energy_input_ratio_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, heat_eir_fflow_coeffs, name: 'Heat-EIR-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
|
|
86
|
+
htg_part_load_fraction = OpenstudioStandards::HVAC.create_curve_quadratic(model, heat_plf_fplr_coeffs, name: 'Heat-PLF-fPLR', min_x: 0, max_x: 1, min_out: 0, max_out: 1, is_dimensionless: true)
|
|
87
|
+
|
|
88
|
+
# Heating defrost curve for reverse cycle
|
|
89
|
+
def_eir_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, defrost_eir_coeffs, name: 'DefrostEIR', min_x: -100, max_x: 100, min_y: -100, max_y: 100)
|
|
90
|
+
when 'Residential Minisplit HP'
|
|
91
|
+
# Performance curves
|
|
92
|
+
# These coefficients are in SI UNITS
|
|
93
|
+
heat_cap_ft_coeffs_si = [1.14715889038462, -0.010386676170938, 0, 0.00865384615384615, 0, 0]
|
|
94
|
+
heat_eir_ft_coeffs_si = [0.9999941697687026, 0.004684593830254383, 5.901286675833333e-05, -0.0028624467783091973, 1.3041120194135802e-05, -0.00016172918478765433]
|
|
95
|
+
heat_cap_fflow_coeffs = [1, 0, 0]
|
|
96
|
+
heat_eir_fflow_coeffs = [1, 0, 0]
|
|
97
|
+
heat_plf_fplr_coeffs = [0.89, 0.11, 0]
|
|
98
|
+
defrost_eir_coeffs = [0.1528, 0, 0, 0, 0, 0]
|
|
99
|
+
|
|
100
|
+
htg_cap_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, heat_cap_ft_coeffs_si, name: 'Heat-Cap-fT', min_x: -100, max_x: 100, min_y: -100, max_y: 100)
|
|
101
|
+
htg_cap_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, heat_cap_fflow_coeffs, name: 'Heat-Cap-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
|
|
102
|
+
htg_energy_input_ratio_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, heat_eir_ft_coeffs_si, name: 'Heat-EIR-fT', min_x: -100, max_x: 100, min_y: -100, max_y: 100)
|
|
103
|
+
htg_energy_input_ratio_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, heat_eir_fflow_coeffs, name: 'Heat-EIR-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
|
|
104
|
+
htg_part_load_fraction = OpenstudioStandards::HVAC.create_curve_quadratic(model, heat_plf_fplr_coeffs, name: 'Heat-PLF-fPLR', min_x: 0, max_x: 1, min_out: 0.6, max_out: 1, is_dimensionless: true)
|
|
105
|
+
|
|
106
|
+
# Heating defrost curve for reverse cycle
|
|
107
|
+
def_eir_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, defrost_eir_coeffs, name: 'Defrost EIR', min_x: -100, max_x: 100, min_y: -100, max_y: 100)
|
|
108
|
+
else # default curve set
|
|
109
|
+
htg_cap_f_of_temp = OpenStudio::Model::CurveCubic.new(model)
|
|
110
|
+
htg_cap_f_of_temp.setName("#{htg_coil.name} Htg Cap Func of Temp Curve")
|
|
111
|
+
htg_cap_f_of_temp.setCoefficient1Constant(0.758746)
|
|
112
|
+
htg_cap_f_of_temp.setCoefficient2x(0.027626)
|
|
113
|
+
htg_cap_f_of_temp.setCoefficient3xPOW2(0.000148716)
|
|
114
|
+
htg_cap_f_of_temp.setCoefficient4xPOW3(0.0000034992)
|
|
115
|
+
htg_cap_f_of_temp.setMinimumValueofx(-20.0)
|
|
116
|
+
htg_cap_f_of_temp.setMaximumValueofx(20.0)
|
|
117
|
+
|
|
118
|
+
htg_cap_f_of_flow = OpenStudio::Model::CurveCubic.new(model)
|
|
119
|
+
htg_cap_f_of_flow.setName("#{htg_coil.name} Htg Cap Func of Flow Frac Curve")
|
|
120
|
+
htg_cap_f_of_flow.setCoefficient1Constant(0.84)
|
|
121
|
+
htg_cap_f_of_flow.setCoefficient2x(0.16)
|
|
122
|
+
htg_cap_f_of_flow.setCoefficient3xPOW2(0.0)
|
|
123
|
+
htg_cap_f_of_flow.setCoefficient4xPOW3(0.0)
|
|
124
|
+
htg_cap_f_of_flow.setMinimumValueofx(0.5)
|
|
125
|
+
htg_cap_f_of_flow.setMaximumValueofx(1.5)
|
|
126
|
+
|
|
127
|
+
htg_energy_input_ratio_f_of_temp = OpenStudio::Model::CurveCubic.new(model)
|
|
128
|
+
htg_energy_input_ratio_f_of_temp.setName("#{htg_coil.name} EIR Func of Temp Curve")
|
|
129
|
+
htg_energy_input_ratio_f_of_temp.setCoefficient1Constant(1.19248)
|
|
130
|
+
htg_energy_input_ratio_f_of_temp.setCoefficient2x(-0.0300438)
|
|
131
|
+
htg_energy_input_ratio_f_of_temp.setCoefficient3xPOW2(0.00103745)
|
|
132
|
+
htg_energy_input_ratio_f_of_temp.setCoefficient4xPOW3(-0.000023328)
|
|
133
|
+
htg_energy_input_ratio_f_of_temp.setMinimumValueofx(-20.0)
|
|
134
|
+
htg_energy_input_ratio_f_of_temp.setMaximumValueofx(20.0)
|
|
135
|
+
|
|
136
|
+
htg_energy_input_ratio_f_of_flow = OpenStudio::Model::CurveQuadratic.new(model)
|
|
137
|
+
htg_energy_input_ratio_f_of_flow.setName("#{htg_coil.name} EIR Func of Flow Frac Curve")
|
|
138
|
+
htg_energy_input_ratio_f_of_flow.setCoefficient1Constant(1.3824)
|
|
139
|
+
htg_energy_input_ratio_f_of_flow.setCoefficient2x(-0.4336)
|
|
140
|
+
htg_energy_input_ratio_f_of_flow.setCoefficient3xPOW2(0.0512)
|
|
141
|
+
htg_energy_input_ratio_f_of_flow.setMinimumValueofx(0.0)
|
|
142
|
+
htg_energy_input_ratio_f_of_flow.setMaximumValueofx(1.0)
|
|
143
|
+
|
|
144
|
+
htg_part_load_fraction = OpenStudio::Model::CurveQuadratic.new(model)
|
|
145
|
+
htg_part_load_fraction.setName("#{htg_coil.name} PLR Correlation Curve")
|
|
146
|
+
htg_part_load_fraction.setCoefficient1Constant(0.85)
|
|
147
|
+
htg_part_load_fraction.setCoefficient2x(0.15)
|
|
148
|
+
htg_part_load_fraction.setCoefficient3xPOW2(0.0)
|
|
149
|
+
htg_part_load_fraction.setMinimumValueofx(0.0)
|
|
150
|
+
htg_part_load_fraction.setMaximumValueofx(1.0)
|
|
151
|
+
|
|
152
|
+
unless defrost_strategy == 'Resistive'
|
|
153
|
+
def_eir_f_of_temp = OpenStudio::Model::CurveBiquadratic.new(model)
|
|
154
|
+
def_eir_f_of_temp.setName("#{htg_coil.name} Defrost EIR Func of Temp Curve")
|
|
155
|
+
def_eir_f_of_temp.setCoefficient1Constant(0.297145)
|
|
156
|
+
def_eir_f_of_temp.setCoefficient2x(0.0430933)
|
|
157
|
+
def_eir_f_of_temp.setCoefficient3xPOW2(-0.000748766)
|
|
158
|
+
def_eir_f_of_temp.setCoefficient4y(0.00597727)
|
|
159
|
+
def_eir_f_of_temp.setCoefficient5yPOW2(0.000482112)
|
|
160
|
+
def_eir_f_of_temp.setCoefficient6xTIMESY(-0.000956448)
|
|
161
|
+
def_eir_f_of_temp.setMinimumValueofx(-23.33333)
|
|
162
|
+
def_eir_f_of_temp.setMaximumValueofx(29.44444)
|
|
163
|
+
def_eir_f_of_temp.setMinimumValueofy(-23.33333)
|
|
164
|
+
def_eir_f_of_temp.setMaximumValueofy(29.44444)
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
if type == 'PSZ-AC'
|
|
169
|
+
htg_coil.setMinimumOutdoorDryBulbTemperatureforCompressorOperation(-12.2)
|
|
170
|
+
htg_coil.setMaximumOutdoorDryBulbTemperatureforDefrostOperation(1.67)
|
|
171
|
+
htg_coil.setCrankcaseHeaterCapacity(50.0)
|
|
172
|
+
htg_coil.setMaximumOutdoorDryBulbTemperatureforCrankcaseHeaterOperation(4.4)
|
|
173
|
+
htg_coil.setDefrostControl('OnDemand')
|
|
174
|
+
|
|
175
|
+
def_eir_f_of_temp = OpenStudio::Model::CurveBiquadratic.new(model)
|
|
176
|
+
def_eir_f_of_temp.setName("#{htg_coil.name} Defrost EIR Func of Temp Curve")
|
|
177
|
+
def_eir_f_of_temp.setCoefficient1Constant(0.297145)
|
|
178
|
+
def_eir_f_of_temp.setCoefficient2x(0.0430933)
|
|
179
|
+
def_eir_f_of_temp.setCoefficient3xPOW2(-0.000748766)
|
|
180
|
+
def_eir_f_of_temp.setCoefficient4y(0.00597727)
|
|
181
|
+
def_eir_f_of_temp.setCoefficient5yPOW2(0.000482112)
|
|
182
|
+
def_eir_f_of_temp.setCoefficient6xTIMESY(-0.000956448)
|
|
183
|
+
def_eir_f_of_temp.setMinimumValueofx(-23.33333)
|
|
184
|
+
def_eir_f_of_temp.setMaximumValueofx(29.44444)
|
|
185
|
+
def_eir_f_of_temp.setMinimumValueofy(-23.33333)
|
|
186
|
+
def_eir_f_of_temp.setMaximumValueofy(29.44444)
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
htg_coil.setTotalHeatingCapacityFunctionofTemperatureCurve(htg_cap_f_of_temp) unless htg_cap_f_of_temp.nil?
|
|
190
|
+
htg_coil.setTotalHeatingCapacityFunctionofFlowFractionCurve(htg_cap_f_of_flow) unless htg_cap_f_of_flow.nil?
|
|
191
|
+
htg_coil.setEnergyInputRatioFunctionofTemperatureCurve(htg_energy_input_ratio_f_of_temp) unless htg_energy_input_ratio_f_of_temp.nil?
|
|
192
|
+
htg_coil.setEnergyInputRatioFunctionofFlowFractionCurve(htg_energy_input_ratio_f_of_flow) unless htg_energy_input_ratio_f_of_flow.nil?
|
|
193
|
+
htg_coil.setPartLoadFractionCorrelationCurve(htg_part_load_fraction) unless htg_part_load_fraction.nil?
|
|
194
|
+
htg_coil.setDefrostEnergyInputRatioFunctionofTemperatureCurve(def_eir_f_of_temp) unless def_eir_f_of_temp.nil?
|
|
195
|
+
htg_coil.setDefrostStrategy(defrost_strategy)
|
|
196
|
+
htg_coil.setDefrostControl('OnDemand')
|
|
197
|
+
|
|
198
|
+
return htg_coil
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
# Return the capacity in W of a CoilHeatingDXSingleSpeed
|
|
202
|
+
#
|
|
203
|
+
# @param coil_heating_dx_single_speed [OpenStudio::Model::CoilHeatingDXSingleSpeed] coil heating dx single speed object
|
|
204
|
+
# @param multiplier [Double] zone multiplier, if applicable
|
|
205
|
+
# @return [Double] capacity in W
|
|
206
|
+
def self.coil_heating_dx_single_speed_get_capacity(coil_heating_dx_single_speed, multiplier: 1.0)
|
|
207
|
+
capacity_w = nil
|
|
208
|
+
if coil_heating_dx_single_speed.ratedTotalHeatingCapacity.is_initialized
|
|
209
|
+
capacity_w = coil_heating_dx_single_speed.ratedTotalHeatingCapacity.get
|
|
210
|
+
elsif coil_heating_dx_single_speed.autosizedRatedTotalHeatingCapacity.is_initialized
|
|
211
|
+
capacity_w = coil_heating_dx_single_speed.autosizedRatedTotalHeatingCapacity.get
|
|
212
|
+
else
|
|
213
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.HVAC.coil_heating_dx_single_speed', "For #{coil_heating_dx_single_speed.name} capacity is not available.")
|
|
214
|
+
return capacity_w
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
return capacity_w
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
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
|
+
# Create CoilHeatingElectric object
|
|
8
|
+
#
|
|
9
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
|
10
|
+
# @param air_loop_node [<OpenStudio::Model::Node>] the coil will be placed on this node of the air loop
|
|
11
|
+
# @param name [String] the name of the system, or nil in which case it will be defaulted
|
|
12
|
+
# @param schedule [String] name of the availability schedule, or [<OpenStudio::Model::Schedule>] Schedule object, or nil in which case default to always on
|
|
13
|
+
# @param nominal_capacity [Double] rated nominal capacity
|
|
14
|
+
# @param efficiency [Double] rated heating efficiency
|
|
15
|
+
# @return [OpenStudio::Model::CoilHeatingElectric] the electric heating coil
|
|
16
|
+
def self.create_coil_heating_electric(model,
|
|
17
|
+
air_loop_node: nil,
|
|
18
|
+
name: 'Electric Htg Coil',
|
|
19
|
+
schedule: nil,
|
|
20
|
+
nominal_capacity: nil,
|
|
21
|
+
efficiency: 1.0)
|
|
22
|
+
htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model)
|
|
23
|
+
|
|
24
|
+
# add to air loop if specified
|
|
25
|
+
htg_coil.addToNode(air_loop_node) unless air_loop_node.nil?
|
|
26
|
+
|
|
27
|
+
# set coil name
|
|
28
|
+
htg_coil.setName(name)
|
|
29
|
+
|
|
30
|
+
# set coil availability schedule
|
|
31
|
+
if schedule.nil?
|
|
32
|
+
# default always on
|
|
33
|
+
coil_availability_schedule = model.alwaysOnDiscreteSchedule
|
|
34
|
+
elsif schedule.instance_of?(String)
|
|
35
|
+
coil_availability_schedule = model_add_schedule(model, schedule)
|
|
36
|
+
|
|
37
|
+
if coil_availability_schedule.nil? && schedule == 'alwaysOffDiscreteSchedule'
|
|
38
|
+
coil_availability_schedule = model.alwaysOffDiscreteSchedule
|
|
39
|
+
elsif coil_availability_schedule.nil?
|
|
40
|
+
coil_availability_schedule = model.alwaysOnDiscreteSchedule
|
|
41
|
+
end
|
|
42
|
+
elsif !schedule.to_Schedule.empty?
|
|
43
|
+
coil_availability_schedule = schedule
|
|
44
|
+
end
|
|
45
|
+
htg_coil.setAvailabilitySchedule(coil_availability_schedule)
|
|
46
|
+
|
|
47
|
+
# set capacity
|
|
48
|
+
htg_coil.setNominalCapacity(nominal_capacity) unless nominal_capacity.nil?
|
|
49
|
+
|
|
50
|
+
# set efficiency
|
|
51
|
+
htg_coil.setEfficiency(efficiency) unless efficiency.nil?
|
|
52
|
+
|
|
53
|
+
return htg_coil
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
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
|
+
# Create CoilHeatingGas object
|
|
8
|
+
#
|
|
9
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
|
10
|
+
# @param air_loop_node [<OpenStudio::Model::Node>] the coil will be placed on this node of the air loop
|
|
11
|
+
# @param name [String] the name of the system, or nil in which case it will be defaulted
|
|
12
|
+
# @param schedule [String] name of the availability schedule, or [<OpenStudio::Model::Schedule>] Schedule object, or nil in which case default to always on
|
|
13
|
+
# @param nominal_capacity [Double] rated nominal capacity
|
|
14
|
+
# @param efficiency [Double] rated heating efficiency
|
|
15
|
+
# @return [OpenStudio::Model::CoilHeatingGas] the gas heating coil
|
|
16
|
+
def self.create_coil_heating_gas(model,
|
|
17
|
+
air_loop_node: nil,
|
|
18
|
+
name: 'Gas Htg Coil',
|
|
19
|
+
schedule: nil,
|
|
20
|
+
nominal_capacity: nil,
|
|
21
|
+
efficiency: 0.80)
|
|
22
|
+
htg_coil = OpenStudio::Model::CoilHeatingGas.new(model)
|
|
23
|
+
|
|
24
|
+
# add to air loop if specified
|
|
25
|
+
htg_coil.addToNode(air_loop_node) unless air_loop_node.nil?
|
|
26
|
+
|
|
27
|
+
# set coil name
|
|
28
|
+
htg_coil.setName(name)
|
|
29
|
+
|
|
30
|
+
# set coil availability schedule
|
|
31
|
+
if schedule.nil?
|
|
32
|
+
# default always on
|
|
33
|
+
coil_availability_schedule = model.alwaysOnDiscreteSchedule
|
|
34
|
+
elsif schedule.instance_of?(String)
|
|
35
|
+
coil_availability_schedule = model_add_schedule(model, schedule)
|
|
36
|
+
|
|
37
|
+
if coil_availability_schedule.nil? && schedule == 'alwaysOffDiscreteSchedule'
|
|
38
|
+
coil_availability_schedule = model.alwaysOffDiscreteSchedule
|
|
39
|
+
elsif coil_availability_schedule.nil?
|
|
40
|
+
coil_availability_schedule = model.alwaysOnDiscreteSchedule
|
|
41
|
+
end
|
|
42
|
+
elsif !schedule.to_Schedule.empty?
|
|
43
|
+
coil_availability_schedule = schedule
|
|
44
|
+
end
|
|
45
|
+
htg_coil.setAvailabilitySchedule(coil_availability_schedule)
|
|
46
|
+
|
|
47
|
+
# set capacity
|
|
48
|
+
htg_coil.setNominalCapacity(nominal_capacity) unless nominal_capacity.nil?
|
|
49
|
+
|
|
50
|
+
# set efficiency
|
|
51
|
+
htg_coil.setGasBurnerEfficiency(efficiency)
|
|
52
|
+
|
|
53
|
+
# defaults
|
|
54
|
+
if model.version < OpenStudio::VersionString.new('3.7.0')
|
|
55
|
+
htg_coil.setParasiticElectricLoad(0.0)
|
|
56
|
+
htg_coil.setParasiticGasLoad(0.0)
|
|
57
|
+
else
|
|
58
|
+
htg_coil.setOnCycleParasiticElectricLoad(0.0)
|
|
59
|
+
htg_coil.setOffCycleParasiticGasLoad(0.0)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
return htg_coil
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Return the capacity in W of a CoilHeatingGas
|
|
66
|
+
#
|
|
67
|
+
# @param coil_heating_gas [OpenStudio::Model::CoilHeatingGas] coil heating gas object
|
|
68
|
+
# @param multiplier [Double] zone multiplier, if applicable
|
|
69
|
+
# @return [Double] capacity in W
|
|
70
|
+
def self.coil_heating_gas_get_capacity(coil_heating_gas, multiplier: nil)
|
|
71
|
+
capacity_w = nil
|
|
72
|
+
if coil_heating_gas.nominalCapacity.is_initialized
|
|
73
|
+
capacity_w = coil_heating_gas.nominalCapacity.get
|
|
74
|
+
elsif coil_heating_gas.autosizedNominalCapacity.is_initialized
|
|
75
|
+
capacity_w = coil_heating_gas.autosizedNominalCapacity.get
|
|
76
|
+
else
|
|
77
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.HVAC.coil_heating_gas', "For #{coil_heating_gas.name} capacity is not available.")
|
|
78
|
+
return capacity_w
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
if !multiplier.nil? && multiplier > 1
|
|
82
|
+
total_cap = capacity_w
|
|
83
|
+
capacity_w /= multiplier
|
|
84
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.HVAC.coil_heating_gas', "For #{coil_heating_gas.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.")
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
return capacity_w
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
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
|
+
|
|
8
|
+
# Return the capacity in W of a CoilHeatingGasMultiStage
|
|
9
|
+
#
|
|
10
|
+
# @param coil_heating_gas_multi_stage [OpenStudio::Model::CoilHeatingGasMultiStage] coil heating gas multi stage object
|
|
11
|
+
# @return [Double] capacity in W
|
|
12
|
+
def self.coil_heating_gas_multi_stage_get_capacity(coil_heating_gas_multi_stage)
|
|
13
|
+
capacity_w = nil
|
|
14
|
+
htg_stages = coil_heating_gas_multi_stage.stages
|
|
15
|
+
if htg_stages.last.nominalCapacity.is_initialized
|
|
16
|
+
capacity_w = htg_stages.last.nominalCapacity.get
|
|
17
|
+
elsif (htg_stages.size == 1) && coil_heating_gas_multi_stage.stages[0].autosizedNominalCapacity.is_initialized
|
|
18
|
+
capacity_w = coil_heating_gas_multi_stage.stages[0].autosizedNominalCapacity.get
|
|
19
|
+
elsif (htg_stages.size == 2) && coil_heating_gas_multi_stage.stages[1].autosizedNominalCapacity.is_initialized
|
|
20
|
+
capacity_w = coil_heating_gas_multi_stage.stages[1].autosizedNominalCapacity.get
|
|
21
|
+
elsif (htg_stages.size == 3) && coil_heating_gas_multi_stage.stages[2].autosizedNominalCapacity.is_initialized
|
|
22
|
+
capacity_w = coil_heating_gas_multi_stage.stages[2].autosizedNominalCapacity.get
|
|
23
|
+
elsif (htg_stages.size == 4) && coil_heating_gas_multi_stage.stages[3].autosizedNominalCapacity.is_initialized
|
|
24
|
+
capacity_w = coil_heating_gas_multi_stage.stages[3].autosizedNominalCapacity.get
|
|
25
|
+
else
|
|
26
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.HVAC.coil_heating_gas_multistage', "For #{coil_heating_gas_multi_stage.name} capacity is not available.")
|
|
27
|
+
return capacity_w
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
return capacity_w
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|