openstudio-standards 0.8.4 → 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/{costing/common_paths.rb → common_paths.rb} +14 -11
- 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/constructions_glazing.csv +121 -0
- data/lib/openstudio-standards/btap/common_resources/costs.csv +1897 -0
- data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/lighting.csv +59 -59
- data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/materials_hvac.csv +1019 -1032
- data/lib/openstudio-standards/btap/costing/btap_costing.rb +3 -7
- data/lib/openstudio-standards/btap/costing/costing_database_wrapper.rb +1 -5
- data/lib/openstudio-standards/btap/costing/daylighting_sensor_control_costing.rb +5 -4
- data/lib/openstudio-standards/btap/costing/dcv_costing.rb +1 -1
- data/lib/openstudio-standards/btap/costing/envelope_costing.rb +112 -181
- data/lib/openstudio-standards/btap/costing/heating_cooling_costing.rb +4 -4
- data/lib/openstudio-standards/btap/costing/led_lighting_costing.rb +2 -1
- data/lib/openstudio-standards/btap/costing/lighting_costing.rb +3 -3
- data/lib/openstudio-standards/btap/costing/test_list.txt +15 -17
- data/lib/openstudio-standards/btap/costing/test_run_all_test_locally.rb +10 -9
- data/lib/openstudio-standards/btap/geometry.rb +86 -6
- data/lib/openstudio-standards/btap/structure.rb +657 -0
- 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 +6 -11
- 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.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 +1 -0
- 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 +19 -10
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/building_envelope.rb +12 -11
- 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 +69 -92
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +2 -1
- 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 +32 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +18 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/heat_pumps_heating.json +21 -15
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_namer.rb +5 -5
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +2 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +30 -141
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +233 -112
- data/lib/openstudio-standards/standards/necb/NECB2015/data/heat_pumps_heating.json +10 -2
- data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +2 -2
- 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/common/btap_analysis.rb +79 -0
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +16 -4
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +65 -42
- 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/version.rb +1 -1
- data/lib/openstudio-standards/weather/stat_file.rb +2 -2
- data/lib/openstudio-standards.rb +55 -38
- metadata +106 -66
- data/lib/openstudio-standards/btap/costing/common_resources/constructions_glazing.csv +0 -61
- data/lib/openstudio-standards/btap/costing/common_resources/costs.csv +0 -1904
- 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/btap/{costing/common_resources → common_resources}/ConstructionProperties.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/Constructions.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/construction_sets.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/constructions_opaque.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/costs_local_factors.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/hvac_vent_ahu.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/lighting_sets.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/locations.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/materials_glazing.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/materials_lighting.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/materials_opaque.csv +0 -0
- /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,300 @@
|
|
|
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 CoilCoolingDXSingleSpeed 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 cooling coefficient of performance
|
|
16
|
+
# @return [OpenStudio::Model::CoilCoolingDXTwoSpeed] the DX cooling coil
|
|
17
|
+
def self.create_coil_cooling_dx_single_speed(model,
|
|
18
|
+
air_loop_node: nil,
|
|
19
|
+
name: '1spd DX Clg Coil',
|
|
20
|
+
schedule: nil,
|
|
21
|
+
type: nil,
|
|
22
|
+
cop: nil)
|
|
23
|
+
clg_coil = OpenStudio::Model::CoilCoolingDXSingleSpeed.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
|
+
# set coil availability schedule
|
|
32
|
+
if schedule.nil?
|
|
33
|
+
# default always on
|
|
34
|
+
coil_availability_schedule = model.alwaysOnDiscreteSchedule
|
|
35
|
+
elsif schedule.instance_of?(String)
|
|
36
|
+
coil_availability_schedule = model_add_schedule(model, schedule)
|
|
37
|
+
|
|
38
|
+
if coil_availability_schedule.nil? && schedule == 'alwaysOffDiscreteSchedule'
|
|
39
|
+
coil_availability_schedule = model.alwaysOffDiscreteSchedule
|
|
40
|
+
elsif coil_availability_schedule.nil?
|
|
41
|
+
coil_availability_schedule = model.alwaysOnDiscreteSchedule
|
|
42
|
+
end
|
|
43
|
+
elsif !schedule.to_Schedule.empty?
|
|
44
|
+
coil_availability_schedule = schedule
|
|
45
|
+
end
|
|
46
|
+
clg_coil.setAvailabilitySchedule(coil_availability_schedule)
|
|
47
|
+
|
|
48
|
+
# set coil cop
|
|
49
|
+
clg_coil.setRatedCOP(cop) unless cop.nil?
|
|
50
|
+
|
|
51
|
+
clg_cap_f_of_temp = nil
|
|
52
|
+
clg_cap_f_of_flow = nil
|
|
53
|
+
clg_energy_input_ratio_f_of_temp = nil
|
|
54
|
+
clg_energy_input_ratio_f_of_flow = nil
|
|
55
|
+
clg_part_load_ratio = nil
|
|
56
|
+
|
|
57
|
+
# curve sets
|
|
58
|
+
case type
|
|
59
|
+
when 'OS default'
|
|
60
|
+
# use OS defaults
|
|
61
|
+
|
|
62
|
+
when 'Heat Pump'
|
|
63
|
+
# "PSZ-AC_Unitary_PackagecoolCapFT"
|
|
64
|
+
clg_cap_f_of_temp = OpenStudio::Model::CurveBiquadratic.new(model)
|
|
65
|
+
clg_cap_f_of_temp.setCoefficient1Constant(0.766956)
|
|
66
|
+
clg_cap_f_of_temp.setCoefficient2x(0.0107756)
|
|
67
|
+
clg_cap_f_of_temp.setCoefficient3xPOW2(-0.0000414703)
|
|
68
|
+
clg_cap_f_of_temp.setCoefficient4y(0.00134961)
|
|
69
|
+
clg_cap_f_of_temp.setCoefficient5yPOW2(-0.000261144)
|
|
70
|
+
clg_cap_f_of_temp.setCoefficient6xTIMESY(0.000457488)
|
|
71
|
+
clg_cap_f_of_temp.setMinimumValueofx(12.78)
|
|
72
|
+
clg_cap_f_of_temp.setMaximumValueofx(23.89)
|
|
73
|
+
clg_cap_f_of_temp.setMinimumValueofy(21.1)
|
|
74
|
+
clg_cap_f_of_temp.setMaximumValueofy(46.1)
|
|
75
|
+
|
|
76
|
+
clg_cap_f_of_flow = OpenStudio::Model::CurveQuadratic.new(model)
|
|
77
|
+
clg_cap_f_of_flow.setCoefficient1Constant(0.8)
|
|
78
|
+
clg_cap_f_of_flow.setCoefficient2x(0.2)
|
|
79
|
+
clg_cap_f_of_flow.setCoefficient3xPOW2(0.0)
|
|
80
|
+
clg_cap_f_of_flow.setMinimumValueofx(0.5)
|
|
81
|
+
clg_cap_f_of_flow.setMaximumValueofx(1.5)
|
|
82
|
+
|
|
83
|
+
clg_energy_input_ratio_f_of_temp = OpenStudio::Model::CurveBiquadratic.new(model)
|
|
84
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient1Constant(0.297145)
|
|
85
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient2x(0.0430933)
|
|
86
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient3xPOW2(-0.000748766)
|
|
87
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient4y(0.00597727)
|
|
88
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient5yPOW2(0.000482112)
|
|
89
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient6xTIMESY(-0.000956448)
|
|
90
|
+
clg_energy_input_ratio_f_of_temp.setMinimumValueofx(12.78)
|
|
91
|
+
clg_energy_input_ratio_f_of_temp.setMaximumValueofx(23.89)
|
|
92
|
+
clg_energy_input_ratio_f_of_temp.setMinimumValueofy(21.1)
|
|
93
|
+
clg_energy_input_ratio_f_of_temp.setMaximumValueofy(46.1)
|
|
94
|
+
|
|
95
|
+
clg_energy_input_ratio_f_of_flow = OpenStudio::Model::CurveQuadratic.new(model)
|
|
96
|
+
clg_energy_input_ratio_f_of_flow.setCoefficient1Constant(1.156)
|
|
97
|
+
clg_energy_input_ratio_f_of_flow.setCoefficient2x(-0.1816)
|
|
98
|
+
clg_energy_input_ratio_f_of_flow.setCoefficient3xPOW2(0.0256)
|
|
99
|
+
clg_energy_input_ratio_f_of_flow.setMinimumValueofx(0.5)
|
|
100
|
+
clg_energy_input_ratio_f_of_flow.setMaximumValueofx(1.5)
|
|
101
|
+
|
|
102
|
+
clg_part_load_ratio = OpenStudio::Model::CurveQuadratic.new(model)
|
|
103
|
+
clg_part_load_ratio.setCoefficient1Constant(0.85)
|
|
104
|
+
clg_part_load_ratio.setCoefficient2x(0.15)
|
|
105
|
+
clg_part_load_ratio.setCoefficient3xPOW2(0.0)
|
|
106
|
+
clg_part_load_ratio.setMinimumValueofx(0.0)
|
|
107
|
+
clg_part_load_ratio.setMaximumValueofx(1.0)
|
|
108
|
+
|
|
109
|
+
when 'PSZ-AC'
|
|
110
|
+
# Defaults to "DOE Ref DX Clg Coil Cool-Cap-fT"
|
|
111
|
+
clg_cap_f_of_temp = OpenStudio::Model::CurveBiquadratic.new(model)
|
|
112
|
+
clg_cap_f_of_temp.setCoefficient1Constant(0.9712123)
|
|
113
|
+
clg_cap_f_of_temp.setCoefficient2x(-0.015275502)
|
|
114
|
+
clg_cap_f_of_temp.setCoefficient3xPOW2(0.0014434524)
|
|
115
|
+
clg_cap_f_of_temp.setCoefficient4y(-0.00039321)
|
|
116
|
+
clg_cap_f_of_temp.setCoefficient5yPOW2(-0.0000068364)
|
|
117
|
+
clg_cap_f_of_temp.setCoefficient6xTIMESY(-0.0002905956)
|
|
118
|
+
clg_cap_f_of_temp.setMinimumValueofx(-100.0)
|
|
119
|
+
clg_cap_f_of_temp.setMaximumValueofx(100.0)
|
|
120
|
+
clg_cap_f_of_temp.setMinimumValueofy(-100.0)
|
|
121
|
+
clg_cap_f_of_temp.setMaximumValueofy(100.0)
|
|
122
|
+
|
|
123
|
+
clg_cap_f_of_flow = OpenStudio::Model::CurveQuadratic.new(model)
|
|
124
|
+
clg_cap_f_of_flow.setCoefficient1Constant(1.0)
|
|
125
|
+
clg_cap_f_of_flow.setCoefficient2x(0.0)
|
|
126
|
+
clg_cap_f_of_flow.setCoefficient3xPOW2(0.0)
|
|
127
|
+
clg_cap_f_of_flow.setMinimumValueofx(-100.0)
|
|
128
|
+
clg_cap_f_of_flow.setMaximumValueofx(100.0)
|
|
129
|
+
|
|
130
|
+
# "DOE Ref DX Clg Coil Cool-EIR-fT",
|
|
131
|
+
clg_energy_input_ratio_f_of_temp = OpenStudio::Model::CurveBiquadratic.new(model)
|
|
132
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient1Constant(0.28687133)
|
|
133
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient2x(0.023902164)
|
|
134
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient3xPOW2(-0.000810648)
|
|
135
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient4y(0.013458546)
|
|
136
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient5yPOW2(0.0003389364)
|
|
137
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient6xTIMESY(-0.0004870044)
|
|
138
|
+
clg_energy_input_ratio_f_of_temp.setMinimumValueofx(-100.0)
|
|
139
|
+
clg_energy_input_ratio_f_of_temp.setMaximumValueofx(100.0)
|
|
140
|
+
clg_energy_input_ratio_f_of_temp.setMinimumValueofy(-100.0)
|
|
141
|
+
clg_energy_input_ratio_f_of_temp.setMaximumValueofy(100.0)
|
|
142
|
+
|
|
143
|
+
clg_energy_input_ratio_f_of_flow = OpenStudio::Model::CurveQuadratic.new(model)
|
|
144
|
+
clg_energy_input_ratio_f_of_flow.setCoefficient1Constant(1.0)
|
|
145
|
+
clg_energy_input_ratio_f_of_flow.setCoefficient2x(0.0)
|
|
146
|
+
clg_energy_input_ratio_f_of_flow.setCoefficient3xPOW2(0.0)
|
|
147
|
+
clg_energy_input_ratio_f_of_flow.setMinimumValueofx(-100.0)
|
|
148
|
+
clg_energy_input_ratio_f_of_flow.setMaximumValueofx(100.0)
|
|
149
|
+
|
|
150
|
+
# "DOE Ref DX Clg Coil Cool-PLF-fPLR"
|
|
151
|
+
clg_part_load_ratio = OpenStudio::Model::CurveQuadratic.new(model)
|
|
152
|
+
clg_part_load_ratio.setCoefficient1Constant(0.90949556)
|
|
153
|
+
clg_part_load_ratio.setCoefficient2x(0.09864773)
|
|
154
|
+
clg_part_load_ratio.setCoefficient3xPOW2(-0.00819488)
|
|
155
|
+
clg_part_load_ratio.setMinimumValueofx(0.0)
|
|
156
|
+
clg_part_load_ratio.setMaximumValueofx(1.0)
|
|
157
|
+
clg_part_load_ratio.setMinimumCurveOutput(0.7)
|
|
158
|
+
clg_part_load_ratio.setMaximumCurveOutput(1.0)
|
|
159
|
+
|
|
160
|
+
when 'Window AC'
|
|
161
|
+
# Performance curves
|
|
162
|
+
# From Frigidaire 10.7 EER unit in Winkler et. al. Lab Testing of Window ACs (2013)
|
|
163
|
+
# @note These coefficients are in SI UNITS
|
|
164
|
+
cool_cap_ft_coeffs_si = [0.6405, 0.01568, 0.0004531, 0.001615, -0.0001825, 0.00006614]
|
|
165
|
+
cool_eir_ft_coeffs_si = [2.287, -0.1732, 0.004745, 0.01662, 0.000484, -0.001306]
|
|
166
|
+
cool_cap_fflow_coeffs = [0.887, 0.1128, 0]
|
|
167
|
+
cool_eir_fflow_coeffs = [1.763, -0.6081, 0]
|
|
168
|
+
cool_plf_fplr_coeffs = [0.78, 0.22, 0]
|
|
169
|
+
|
|
170
|
+
# Make the curves
|
|
171
|
+
clg_cap_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, cool_cap_ft_coeffs_si, name: 'RoomAC-Cap-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
|
|
172
|
+
clg_cap_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_cap_fflow_coeffs, name: 'RoomAC-Cap-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
|
|
173
|
+
clg_energy_input_ratio_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, cool_eir_ft_coeffs_si, name: 'RoomAC-EIR-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
|
|
174
|
+
clg_energy_input_ratio_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_eir_fflow_coeffs, name: 'RoomAC-EIR-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
|
|
175
|
+
clg_part_load_ratio = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_plf_fplr_coeffs, name: 'RoomAC-PLF-fPLR', min_x: 0, max_x: 1, min_out: 0, max_out: 1, is_dimensionless: true)
|
|
176
|
+
|
|
177
|
+
when 'Residential Central AC'
|
|
178
|
+
# Performance curves
|
|
179
|
+
# These coefficients are in IP UNITS
|
|
180
|
+
cool_cap_ft_coeffs_ip = [3.670270705, -0.098652414, 0.000955906, 0.006552414, -0.0000156, -0.000131877]
|
|
181
|
+
cool_eir_ft_coeffs_ip = [-3.302695861, 0.137871531, -0.001056996, -0.012573945, 0.000214638, -0.000145054]
|
|
182
|
+
cool_cap_fflow_coeffs = [0.718605468, 0.410099989, -0.128705457]
|
|
183
|
+
cool_eir_fflow_coeffs = [1.32299905, -0.477711207, 0.154712157]
|
|
184
|
+
cool_plf_fplr_coeffs = [0.8, 0.2, 0]
|
|
185
|
+
|
|
186
|
+
# Convert coefficients from IP to SI
|
|
187
|
+
cool_cap_ft_coeffs_si = OpenstudioStandards::HVAC.convert_curve_biquadratic(cool_cap_ft_coeffs_ip)
|
|
188
|
+
cool_eir_ft_coeffs_si = OpenstudioStandards::HVAC.convert_curve_biquadratic(cool_eir_ft_coeffs_ip)
|
|
189
|
+
|
|
190
|
+
# Make the curves
|
|
191
|
+
clg_cap_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, cool_cap_ft_coeffs_si, name: 'AC-Cap-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
|
|
192
|
+
clg_cap_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_cap_fflow_coeffs, name: 'AC-Cap-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
|
|
193
|
+
clg_energy_input_ratio_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, cool_eir_ft_coeffs_si, name: 'AC-EIR-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
|
|
194
|
+
clg_energy_input_ratio_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_eir_fflow_coeffs, name: 'AC-EIR-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
|
|
195
|
+
clg_part_load_ratio = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_plf_fplr_coeffs, name: 'AC-PLF-fPLR', min_x: 0, max_x: 1, min_out: 0, max_out: 1, is_dimensionless: true)
|
|
196
|
+
|
|
197
|
+
when 'Residential Central ASHP'
|
|
198
|
+
# Performance curves
|
|
199
|
+
# These coefficients are in IP UNITS
|
|
200
|
+
cool_cap_ft_coeffs_ip = [3.68637657, -0.098352478, 0.000956357, 0.005838141, -0.0000127, -0.000131702]
|
|
201
|
+
cool_eir_ft_coeffs_ip = [-3.437356399, 0.136656369, -0.001049231, -0.0079378, 0.000185435, -0.0001441]
|
|
202
|
+
cool_cap_fflow_coeffs = [0.718664047, 0.41797409, -0.136638137]
|
|
203
|
+
cool_eir_fflow_coeffs = [1.143487507, -0.13943972, -0.004047787]
|
|
204
|
+
cool_plf_fplr_coeffs = [0.8, 0.2, 0]
|
|
205
|
+
|
|
206
|
+
# Convert coefficients from IP to SI
|
|
207
|
+
cool_cap_ft_coeffs_si = OpenstudioStandards::HVAC.convert_curve_biquadratic(cool_cap_ft_coeffs_ip)
|
|
208
|
+
cool_eir_ft_coeffs_si = OpenstudioStandards::HVAC.convert_curve_biquadratic(cool_eir_ft_coeffs_ip)
|
|
209
|
+
|
|
210
|
+
# Make the curves
|
|
211
|
+
clg_cap_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, cool_cap_ft_coeffs_si, name: 'Cool-Cap-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
|
|
212
|
+
clg_cap_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_cap_fflow_coeffs, name: 'Cool-Cap-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
|
|
213
|
+
clg_energy_input_ratio_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, cool_eir_ft_coeffs_si, name: 'Cool-EIR-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
|
|
214
|
+
clg_energy_input_ratio_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_eir_fflow_coeffs, name: 'Cool-EIR-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
|
|
215
|
+
clg_part_load_ratio = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_plf_fplr_coeffs, name: 'Cool-PLF-fPLR', min_x: 0, max_x: 1, min_out: 0, max_out: 1, is_dimensionless: true)
|
|
216
|
+
|
|
217
|
+
else # default curve set, type == 'Split AC' || 'PTAC'
|
|
218
|
+
clg_cap_f_of_temp = OpenStudio::Model::CurveBiquadratic.new(model)
|
|
219
|
+
clg_cap_f_of_temp.setCoefficient1Constant(0.942587793)
|
|
220
|
+
clg_cap_f_of_temp.setCoefficient2x(0.009543347)
|
|
221
|
+
clg_cap_f_of_temp.setCoefficient3xPOW2(0.00068377)
|
|
222
|
+
clg_cap_f_of_temp.setCoefficient4y(-0.011042676)
|
|
223
|
+
clg_cap_f_of_temp.setCoefficient5yPOW2(0.000005249)
|
|
224
|
+
clg_cap_f_of_temp.setCoefficient6xTIMESY(-0.00000972)
|
|
225
|
+
clg_cap_f_of_temp.setMinimumValueofx(12.77778)
|
|
226
|
+
clg_cap_f_of_temp.setMaximumValueofx(23.88889)
|
|
227
|
+
clg_cap_f_of_temp.setMinimumValueofy(23.88889)
|
|
228
|
+
clg_cap_f_of_temp.setMaximumValueofy(46.11111)
|
|
229
|
+
|
|
230
|
+
clg_cap_f_of_flow = OpenStudio::Model::CurveQuadratic.new(model)
|
|
231
|
+
clg_cap_f_of_flow.setCoefficient1Constant(0.8)
|
|
232
|
+
clg_cap_f_of_flow.setCoefficient2x(0.2)
|
|
233
|
+
clg_cap_f_of_flow.setCoefficient3xPOW2(0)
|
|
234
|
+
clg_cap_f_of_flow.setMinimumValueofx(0.5)
|
|
235
|
+
clg_cap_f_of_flow.setMaximumValueofx(1.5)
|
|
236
|
+
|
|
237
|
+
clg_energy_input_ratio_f_of_temp = OpenStudio::Model::CurveBiquadratic.new(model)
|
|
238
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient1Constant(0.342414409)
|
|
239
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient2x(0.034885008)
|
|
240
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient3xPOW2(-0.0006237)
|
|
241
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient4y(0.004977216)
|
|
242
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient5yPOW2(0.000437951)
|
|
243
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient6xTIMESY(-0.000728028)
|
|
244
|
+
clg_energy_input_ratio_f_of_temp.setMinimumValueofx(12.77778)
|
|
245
|
+
clg_energy_input_ratio_f_of_temp.setMaximumValueofx(23.88889)
|
|
246
|
+
clg_energy_input_ratio_f_of_temp.setMinimumValueofy(23.88889)
|
|
247
|
+
clg_energy_input_ratio_f_of_temp.setMaximumValueofy(46.11111)
|
|
248
|
+
|
|
249
|
+
clg_energy_input_ratio_f_of_flow = OpenStudio::Model::CurveQuadratic.new(model)
|
|
250
|
+
clg_energy_input_ratio_f_of_flow.setCoefficient1Constant(1.1552)
|
|
251
|
+
clg_energy_input_ratio_f_of_flow.setCoefficient2x(-0.1808)
|
|
252
|
+
clg_energy_input_ratio_f_of_flow.setCoefficient3xPOW2(0.0256)
|
|
253
|
+
clg_energy_input_ratio_f_of_flow.setMinimumValueofx(0.5)
|
|
254
|
+
clg_energy_input_ratio_f_of_flow.setMaximumValueofx(1.5)
|
|
255
|
+
|
|
256
|
+
clg_part_load_ratio = OpenStudio::Model::CurveQuadratic.new(model)
|
|
257
|
+
clg_part_load_ratio.setCoefficient1Constant(0.85)
|
|
258
|
+
clg_part_load_ratio.setCoefficient2x(0.15)
|
|
259
|
+
clg_part_load_ratio.setCoefficient3xPOW2(0.0)
|
|
260
|
+
clg_part_load_ratio.setMinimumValueofx(0.0)
|
|
261
|
+
clg_part_load_ratio.setMaximumValueofx(1.0)
|
|
262
|
+
clg_part_load_ratio.setMinimumCurveOutput(0.7)
|
|
263
|
+
clg_part_load_ratio.setMaximumCurveOutput(1.0)
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
clg_coil.setTotalCoolingCapacityFunctionOfTemperatureCurve(clg_cap_f_of_temp) unless clg_cap_f_of_temp.nil?
|
|
267
|
+
clg_coil.setTotalCoolingCapacityFunctionOfFlowFractionCurve(clg_cap_f_of_flow) unless clg_cap_f_of_flow.nil?
|
|
268
|
+
clg_coil.setEnergyInputRatioFunctionOfTemperatureCurve(clg_energy_input_ratio_f_of_temp) unless clg_energy_input_ratio_f_of_temp.nil?
|
|
269
|
+
clg_coil.setEnergyInputRatioFunctionOfFlowFractionCurve(clg_energy_input_ratio_f_of_flow) unless clg_energy_input_ratio_f_of_flow.nil?
|
|
270
|
+
clg_coil.setPartLoadFractionCorrelationCurve(clg_part_load_ratio) unless clg_part_load_ratio.nil?
|
|
271
|
+
|
|
272
|
+
return clg_coil
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
# Return the capacity in W of a CoilCoolingDXSingleSpeed
|
|
276
|
+
#
|
|
277
|
+
# @param coil_cooling_dx_single_speed [OpenStudio::Model::CoilCoolingDXSingleSpeed] coil cooling dx single speed object
|
|
278
|
+
# @param multiplier [Double] zone multiplier, if applicable
|
|
279
|
+
# @return [Double] capacity in W
|
|
280
|
+
def self.coil_cooling_dx_single_speed_get_capacity(coil_cooling_dx_single_speed, multiplier: nil)
|
|
281
|
+
capacity_w = nil
|
|
282
|
+
if coil_cooling_dx_single_speed.ratedTotalCoolingCapacity.is_initialized
|
|
283
|
+
capacity_w = coil_cooling_dx_single_speed.ratedTotalCoolingCapacity.get
|
|
284
|
+
elsif coil_cooling_dx_single_speed.autosizedRatedTotalCoolingCapacity.is_initialized
|
|
285
|
+
capacity_w = coil_cooling_dx_single_speed.autosizedRatedTotalCoolingCapacity.get
|
|
286
|
+
else
|
|
287
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.HVAC.coil_cooling_dx_single_speed', "For #{coil_cooling_dx_single_speed.name} capacity is not available.")
|
|
288
|
+
return capacity_w
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
if !multiplier.nil? && multiplier > 1
|
|
292
|
+
total_cap = capacity_w
|
|
293
|
+
capacity_w /= multiplier
|
|
294
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.HVAC.coil_cooling_dx_single_speed', "For #{coil_cooling_dx_single_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.")
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
return capacity_w
|
|
298
|
+
end
|
|
299
|
+
end
|
|
300
|
+
end
|
|
@@ -0,0 +1,187 @@
|
|
|
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 CoilCoolingDXTwoSpeed 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 two speed DX coil to reference the correct curve set
|
|
15
|
+
# @return [OpenStudio::Model::CoilCoolingDXTwoSpeed] the DX cooling coil
|
|
16
|
+
def self.create_coil_cooling_dx_two_speed(model,
|
|
17
|
+
air_loop_node: nil,
|
|
18
|
+
name: '2spd DX Clg Coil',
|
|
19
|
+
schedule: nil,
|
|
20
|
+
type: nil)
|
|
21
|
+
clg_coil = OpenStudio::Model::CoilCoolingDXTwoSpeed.new(model)
|
|
22
|
+
|
|
23
|
+
# add to air loop if specified
|
|
24
|
+
clg_coil.addToNode(air_loop_node) unless air_loop_node.nil?
|
|
25
|
+
|
|
26
|
+
# set coil name
|
|
27
|
+
clg_coil.setName(name)
|
|
28
|
+
|
|
29
|
+
# set coil availability schedule
|
|
30
|
+
if schedule.nil?
|
|
31
|
+
# default always on
|
|
32
|
+
coil_availability_schedule = model.alwaysOnDiscreteSchedule
|
|
33
|
+
elsif schedule.instance_of?(String)
|
|
34
|
+
coil_availability_schedule = model_add_schedule(model, schedule)
|
|
35
|
+
|
|
36
|
+
if coil_availability_schedule.nil? && schedule == 'alwaysOffDiscreteSchedule'
|
|
37
|
+
coil_availability_schedule = model.alwaysOffDiscreteSchedule
|
|
38
|
+
elsif coil_availability_schedule.nil?
|
|
39
|
+
coil_availability_schedule = model.alwaysOnDiscreteSchedule
|
|
40
|
+
end
|
|
41
|
+
elsif !schedule.to_Schedule.empty?
|
|
42
|
+
coil_availability_schedule = schedule
|
|
43
|
+
end
|
|
44
|
+
clg_coil.setAvailabilitySchedule(coil_availability_schedule)
|
|
45
|
+
|
|
46
|
+
clg_cap_f_of_temp = nil
|
|
47
|
+
clg_cap_f_of_flow = nil
|
|
48
|
+
clg_energy_input_ratio_f_of_temp = nil
|
|
49
|
+
clg_energy_input_ratio_f_of_flow = nil
|
|
50
|
+
clg_part_load_ratio = nil
|
|
51
|
+
clg_cap_f_of_temp_low_spd = nil
|
|
52
|
+
clg_energy_input_ratio_f_of_temp_low_spd = nil
|
|
53
|
+
|
|
54
|
+
# curve sets
|
|
55
|
+
if type == 'OS default'
|
|
56
|
+
# use OS defaults
|
|
57
|
+
elsif type == 'Residential Minisplit HP'
|
|
58
|
+
# Performance curves
|
|
59
|
+
# These coefficients are in SI units
|
|
60
|
+
cool_cap_ft_coeffs_si = [0.7531983499655835, 0.003618193903031667, 0.0, 0.006574385031351544, -6.87181191015432e-05, 0.0]
|
|
61
|
+
cool_eir_ft_coeffs_si = [-0.06376924779982301, -0.0013360593470367282, 1.413060577993827e-05, 0.019433076486584752, -4.91395947154321e-05, -4.909341249475308e-05]
|
|
62
|
+
cool_cap_fflow_coeffs = [1, 0, 0]
|
|
63
|
+
cool_eir_fflow_coeffs = [1, 0, 0]
|
|
64
|
+
cool_plf_fplr_coeffs = [0.89, 0.11, 0]
|
|
65
|
+
|
|
66
|
+
# Make the curves
|
|
67
|
+
clg_cap_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, cool_cap_ft_coeffs_si, name: 'Cool-Cap-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
|
|
68
|
+
clg_cap_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_cap_fflow_coeffs, name: 'Cool-Cap-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
|
|
69
|
+
clg_energy_input_ratio_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, cool_eir_ft_coeffs_si, name: 'Cool-EIR-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
|
|
70
|
+
clg_energy_input_ratio_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_eir_fflow_coeffs, name: 'Cool-EIR-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
|
|
71
|
+
clg_part_load_ratio = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_plf_fplr_coeffs, name: 'Cool-PLF-fPLR', min_x: 0, max_x: 1, min_out: 0, max_out: 1, is_dimensionless: true)
|
|
72
|
+
clg_cap_f_of_temp_low_spd = OpenstudioStandards::HVAC.create_curve_biquadratic(model, cool_cap_ft_coeffs_si, name: 'Cool-Cap-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
|
|
73
|
+
clg_energy_input_ratio_f_of_temp_low_spd = OpenstudioStandards::HVAC.create_curve_biquadratic(model, cool_eir_ft_coeffs_si, name: 'Cool-EIR-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
|
|
74
|
+
clg_coil.setRatedLowSpeedSensibleHeatRatio(0.73)
|
|
75
|
+
clg_coil.setCondenserType('AirCooled')
|
|
76
|
+
else # default curve set, type == 'PSZ-AC' || 'Split AC' || 'PTAC'
|
|
77
|
+
clg_cap_f_of_temp = OpenStudio::Model::CurveBiquadratic.new(model)
|
|
78
|
+
clg_cap_f_of_temp.setCoefficient1Constant(0.42415)
|
|
79
|
+
clg_cap_f_of_temp.setCoefficient2x(0.04426)
|
|
80
|
+
clg_cap_f_of_temp.setCoefficient3xPOW2(-0.00042)
|
|
81
|
+
clg_cap_f_of_temp.setCoefficient4y(0.00333)
|
|
82
|
+
clg_cap_f_of_temp.setCoefficient5yPOW2(-0.00008)
|
|
83
|
+
clg_cap_f_of_temp.setCoefficient6xTIMESY(-0.00021)
|
|
84
|
+
clg_cap_f_of_temp.setMinimumValueofx(17.0)
|
|
85
|
+
clg_cap_f_of_temp.setMaximumValueofx(22.0)
|
|
86
|
+
clg_cap_f_of_temp.setMinimumValueofy(13.0)
|
|
87
|
+
clg_cap_f_of_temp.setMaximumValueofy(46.0)
|
|
88
|
+
|
|
89
|
+
clg_cap_f_of_flow = OpenStudio::Model::CurveQuadratic.new(model)
|
|
90
|
+
clg_cap_f_of_flow.setCoefficient1Constant(0.77136)
|
|
91
|
+
clg_cap_f_of_flow.setCoefficient2x(0.34053)
|
|
92
|
+
clg_cap_f_of_flow.setCoefficient3xPOW2(-0.11088)
|
|
93
|
+
clg_cap_f_of_flow.setMinimumValueofx(0.75918)
|
|
94
|
+
clg_cap_f_of_flow.setMaximumValueofx(1.13877)
|
|
95
|
+
|
|
96
|
+
clg_energy_input_ratio_f_of_temp = OpenStudio::Model::CurveBiquadratic.new(model)
|
|
97
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient1Constant(1.23649)
|
|
98
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient2x(-0.02431)
|
|
99
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient3xPOW2(0.00057)
|
|
100
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient4y(-0.01434)
|
|
101
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient5yPOW2(0.00063)
|
|
102
|
+
clg_energy_input_ratio_f_of_temp.setCoefficient6xTIMESY(-0.00038)
|
|
103
|
+
clg_energy_input_ratio_f_of_temp.setMinimumValueofx(17.0)
|
|
104
|
+
clg_energy_input_ratio_f_of_temp.setMaximumValueofx(22.0)
|
|
105
|
+
clg_energy_input_ratio_f_of_temp.setMinimumValueofy(13.0)
|
|
106
|
+
clg_energy_input_ratio_f_of_temp.setMaximumValueofy(46.0)
|
|
107
|
+
|
|
108
|
+
clg_energy_input_ratio_f_of_flow = OpenStudio::Model::CurveQuadratic.new(model)
|
|
109
|
+
clg_energy_input_ratio_f_of_flow.setCoefficient1Constant(1.20550)
|
|
110
|
+
clg_energy_input_ratio_f_of_flow.setCoefficient2x(-0.32953)
|
|
111
|
+
clg_energy_input_ratio_f_of_flow.setCoefficient3xPOW2(0.12308)
|
|
112
|
+
clg_energy_input_ratio_f_of_flow.setMinimumValueofx(0.75918)
|
|
113
|
+
clg_energy_input_ratio_f_of_flow.setMaximumValueofx(1.13877)
|
|
114
|
+
|
|
115
|
+
clg_part_load_ratio = OpenStudio::Model::CurveQuadratic.new(model)
|
|
116
|
+
clg_part_load_ratio.setCoefficient1Constant(0.77100)
|
|
117
|
+
clg_part_load_ratio.setCoefficient2x(0.22900)
|
|
118
|
+
clg_part_load_ratio.setCoefficient3xPOW2(0.0)
|
|
119
|
+
clg_part_load_ratio.setMinimumValueofx(0.0)
|
|
120
|
+
clg_part_load_ratio.setMaximumValueofx(1.0)
|
|
121
|
+
|
|
122
|
+
clg_cap_f_of_temp_low_spd = OpenStudio::Model::CurveBiquadratic.new(model)
|
|
123
|
+
clg_cap_f_of_temp_low_spd.setCoefficient1Constant(0.42415)
|
|
124
|
+
clg_cap_f_of_temp_low_spd.setCoefficient2x(0.04426)
|
|
125
|
+
clg_cap_f_of_temp_low_spd.setCoefficient3xPOW2(-0.00042)
|
|
126
|
+
clg_cap_f_of_temp_low_spd.setCoefficient4y(0.00333)
|
|
127
|
+
clg_cap_f_of_temp_low_spd.setCoefficient5yPOW2(-0.00008)
|
|
128
|
+
clg_cap_f_of_temp_low_spd.setCoefficient6xTIMESY(-0.00021)
|
|
129
|
+
clg_cap_f_of_temp_low_spd.setMinimumValueofx(17.0)
|
|
130
|
+
clg_cap_f_of_temp_low_spd.setMaximumValueofx(22.0)
|
|
131
|
+
clg_cap_f_of_temp_low_spd.setMinimumValueofy(13.0)
|
|
132
|
+
clg_cap_f_of_temp_low_spd.setMaximumValueofy(46.0)
|
|
133
|
+
|
|
134
|
+
clg_energy_input_ratio_f_of_temp_low_spd = OpenStudio::Model::CurveBiquadratic.new(model)
|
|
135
|
+
clg_energy_input_ratio_f_of_temp_low_spd.setCoefficient1Constant(1.23649)
|
|
136
|
+
clg_energy_input_ratio_f_of_temp_low_spd.setCoefficient2x(-0.02431)
|
|
137
|
+
clg_energy_input_ratio_f_of_temp_low_spd.setCoefficient3xPOW2(0.00057)
|
|
138
|
+
clg_energy_input_ratio_f_of_temp_low_spd.setCoefficient4y(-0.01434)
|
|
139
|
+
clg_energy_input_ratio_f_of_temp_low_spd.setCoefficient5yPOW2(0.00063)
|
|
140
|
+
clg_energy_input_ratio_f_of_temp_low_spd.setCoefficient6xTIMESY(-0.00038)
|
|
141
|
+
clg_energy_input_ratio_f_of_temp_low_spd.setMinimumValueofx(17.0)
|
|
142
|
+
clg_energy_input_ratio_f_of_temp_low_spd.setMaximumValueofx(22.0)
|
|
143
|
+
clg_energy_input_ratio_f_of_temp_low_spd.setMinimumValueofy(13.0)
|
|
144
|
+
clg_energy_input_ratio_f_of_temp_low_spd.setMaximumValueofy(46.0)
|
|
145
|
+
|
|
146
|
+
clg_coil.setRatedLowSpeedSensibleHeatRatio(OpenStudio::OptionalDouble.new(0.69))
|
|
147
|
+
clg_coil.setBasinHeaterCapacity(10)
|
|
148
|
+
clg_coil.setBasinHeaterSetpointTemperature(2.0)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
clg_coil.setTotalCoolingCapacityFunctionOfTemperatureCurve(clg_cap_f_of_temp) unless clg_cap_f_of_temp.nil?
|
|
152
|
+
clg_coil.setTotalCoolingCapacityFunctionOfFlowFractionCurve(clg_cap_f_of_flow) unless clg_cap_f_of_flow.nil?
|
|
153
|
+
clg_coil.setEnergyInputRatioFunctionOfTemperatureCurve(clg_energy_input_ratio_f_of_temp) unless clg_energy_input_ratio_f_of_temp.nil?
|
|
154
|
+
clg_coil.setEnergyInputRatioFunctionOfFlowFractionCurve(clg_energy_input_ratio_f_of_flow) unless clg_energy_input_ratio_f_of_flow.nil?
|
|
155
|
+
clg_coil.setPartLoadFractionCorrelationCurve(clg_part_load_ratio) unless clg_part_load_ratio.nil?
|
|
156
|
+
clg_coil.setLowSpeedTotalCoolingCapacityFunctionOfTemperatureCurve(clg_cap_f_of_temp_low_spd) unless clg_cap_f_of_temp_low_spd.nil?
|
|
157
|
+
clg_coil.setLowSpeedEnergyInputRatioFunctionOfTemperatureCurve(clg_energy_input_ratio_f_of_temp_low_spd) unless clg_energy_input_ratio_f_of_temp_low_spd.nil?
|
|
158
|
+
|
|
159
|
+
return clg_coil
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Return the capacity in W of a CoilCoolingDXTwoSpeed
|
|
163
|
+
#
|
|
164
|
+
# @param coil_cooling_dx_two_speed [OpenStudio::Model::CoilCoolingDXTwoSpeed] coil cooling dx two speed object
|
|
165
|
+
# @param multiplier [Double] zone multiplier, if applicable
|
|
166
|
+
# @return [Double] capacity in W
|
|
167
|
+
def self.coil_cooling_dx_two_speed_get_capacity(coil_cooling_dx_two_speed, multiplier: nil)
|
|
168
|
+
capacity_w = nil
|
|
169
|
+
if coil_cooling_dx_two_speed.ratedHighSpeedTotalCoolingCapacity.is_initialized
|
|
170
|
+
capacity_w = coil_cooling_dx_two_speed.ratedHighSpeedTotalCoolingCapacity.get
|
|
171
|
+
elsif coil_cooling_dx_two_speed.autosizedRatedHighSpeedTotalCoolingCapacity.is_initialized
|
|
172
|
+
capacity_w = coil_cooling_dx_two_speed.autosizedRatedHighSpeedTotalCoolingCapacity.get
|
|
173
|
+
else
|
|
174
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.HVAC.coil_cooling_dx_two_speed', "For #{coil_cooling_dx_two_speed.name} capacity is not available.")
|
|
175
|
+
return capacity_w
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
if !multiplier.nil? && multiplier > 1
|
|
179
|
+
total_cap = capacity_w
|
|
180
|
+
capacity_w /= multiplier
|
|
181
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.HVAC.coil_cooling_dx_two_speed', "For #{coil_cooling_dx_two_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.")
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
return capacity_w
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
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 CoilCoolingWater object
|
|
8
|
+
#
|
|
9
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
|
10
|
+
# @param chilled_water_loop [<OpenStudio::Model::PlantLoop>] the coil will be placed on the demand side of this plant loop
|
|
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 coil, 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 design_inlet_water_temperature [Double] design inlet water temperature in degrees Celsius, default is nil
|
|
15
|
+
# @param design_inlet_air_temperature [Double] design inlet air temperature in degrees Celsius, default is nil
|
|
16
|
+
# @param design_outlet_air_temperature [Double] design outlet air temperature in degrees Celsius, default is nil
|
|
17
|
+
# @return [OpenStudio::Model::CoilCoolingWater] the cooling coil
|
|
18
|
+
def self.create_coil_cooling_water(model,
|
|
19
|
+
chilled_water_loop,
|
|
20
|
+
air_loop_node: nil,
|
|
21
|
+
name: 'Clg Coil',
|
|
22
|
+
schedule: nil,
|
|
23
|
+
design_inlet_water_temperature: nil,
|
|
24
|
+
design_inlet_air_temperature: nil,
|
|
25
|
+
design_outlet_air_temperature: nil)
|
|
26
|
+
clg_coil = OpenStudio::Model::CoilCoolingWater.new(model)
|
|
27
|
+
|
|
28
|
+
# add to chilled water loop
|
|
29
|
+
chilled_water_loop.addDemandBranchForComponent(clg_coil)
|
|
30
|
+
|
|
31
|
+
# add to air loop if specified
|
|
32
|
+
clg_coil.addToNode(air_loop_node) unless air_loop_node.nil?
|
|
33
|
+
|
|
34
|
+
# set coil name
|
|
35
|
+
if name.nil?
|
|
36
|
+
clg_coil.setName('Clg Coil')
|
|
37
|
+
else
|
|
38
|
+
clg_coil.setName(name)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# set coil availability schedule
|
|
42
|
+
if schedule.nil?
|
|
43
|
+
# default always on
|
|
44
|
+
coil_availability_schedule = model.alwaysOnDiscreteSchedule
|
|
45
|
+
elsif schedule.instance_of?(String)
|
|
46
|
+
coil_availability_schedule = model_add_schedule(model, schedule)
|
|
47
|
+
|
|
48
|
+
if coil_availability_schedule.nil? && schedule == 'alwaysOffDiscreteSchedule'
|
|
49
|
+
coil_availability_schedule = model.alwaysOffDiscreteSchedule
|
|
50
|
+
elsif coil_availability_schedule.nil?
|
|
51
|
+
coil_availability_schedule = model.alwaysOnDiscreteSchedule
|
|
52
|
+
end
|
|
53
|
+
elsif !schedule.to_Schedule.empty?
|
|
54
|
+
coil_availability_schedule = schedule
|
|
55
|
+
end
|
|
56
|
+
clg_coil.setAvailabilitySchedule(coil_availability_schedule)
|
|
57
|
+
|
|
58
|
+
# rated temperatures
|
|
59
|
+
if design_inlet_water_temperature.nil?
|
|
60
|
+
clg_coil.autosizeDesignInletWaterTemperature
|
|
61
|
+
else
|
|
62
|
+
clg_coil.setDesignInletWaterTemperature(design_inlet_water_temperature)
|
|
63
|
+
end
|
|
64
|
+
clg_coil.setDesignInletAirTemperature(design_inlet_air_temperature) unless design_inlet_air_temperature.nil?
|
|
65
|
+
clg_coil.setDesignOutletAirTemperature(design_outlet_air_temperature) unless design_outlet_air_temperature.nil?
|
|
66
|
+
|
|
67
|
+
# defaults
|
|
68
|
+
clg_coil.setHeatExchangerConfiguration('CrossFlow')
|
|
69
|
+
|
|
70
|
+
# coil controller properties
|
|
71
|
+
# @note These inputs will get overwritten if addToNode or addDemandBranchForComponent is called on the htg_coil object after this
|
|
72
|
+
clg_coil_controller = clg_coil.controllerWaterCoil.get
|
|
73
|
+
clg_coil_controller.setName("#{clg_coil.name} Controller")
|
|
74
|
+
clg_coil_controller.setAction('Reverse')
|
|
75
|
+
clg_coil_controller.setMinimumActuatedFlow(0.0)
|
|
76
|
+
|
|
77
|
+
return clg_coil
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|