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
|
@@ -3,113 +3,18 @@ class Standard
|
|
|
3
3
|
|
|
4
4
|
include CoilDX
|
|
5
5
|
|
|
6
|
-
# Finds capacity in W. This is the cooling capacity of the paired DX cooling coil.
|
|
7
|
-
#
|
|
8
|
-
# @param coil_heating_dx_single_speed [OpenStudio::Model::CoilHeatingDXSingleSpeed] coil heating dx single speed object
|
|
9
|
-
# @param necb_ref_hp [Boolean] for compatability with NECB ruleset only.
|
|
10
|
-
# @return [Double] capacity in W to be used for find object
|
|
11
|
-
def coil_heating_dx_single_speed_find_capacity(coil_heating_dx_single_speed, necb_ref_hp = false)
|
|
12
|
-
capacity_w = nil
|
|
13
|
-
|
|
14
|
-
# Get the paired cooling coil
|
|
15
|
-
clg_coil = nil
|
|
16
|
-
|
|
17
|
-
# Unitary and zone equipment
|
|
18
|
-
if coil_heating_dx_single_speed.airLoopHVAC.empty?
|
|
19
|
-
if coil_heating_dx_single_speed.containingHVACComponent.is_initialized
|
|
20
|
-
containing_comp = coil_heating_dx_single_speed.containingHVACComponent.get
|
|
21
|
-
if containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAir.is_initialized
|
|
22
|
-
clg_coil = containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.coolingCoil
|
|
23
|
-
elsif containing_comp.to_AirLoopHVACUnitarySystem.is_initialized
|
|
24
|
-
unitary = containing_comp.to_AirLoopHVACUnitarySystem.get
|
|
25
|
-
if unitary.coolingCoil.is_initialized
|
|
26
|
-
clg_coil = unitary.coolingCoil.get
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
# @todo Add other unitary systems
|
|
30
|
-
elsif coil_heating_dx_single_speed.containingZoneHVACComponent.is_initialized
|
|
31
|
-
containing_comp = coil_heating_dx_single_speed.containingZoneHVACComponent.get
|
|
32
|
-
# PTHP
|
|
33
|
-
if containing_comp.to_ZoneHVACPackagedTerminalHeatPump.is_initialized
|
|
34
|
-
pthp = containing_comp.to_ZoneHVACPackagedTerminalHeatPump.get
|
|
35
|
-
clg_coil = containing_comp.to_ZoneHVACPackagedTerminalHeatPump.get.coolingCoil
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# On AirLoop directly
|
|
41
|
-
if coil_heating_dx_single_speed.airLoopHVAC.is_initialized
|
|
42
|
-
air_loop = coil_heating_dx_single_speed.airLoopHVAC.get
|
|
43
|
-
# Check for the presence of any other type of cooling coil
|
|
44
|
-
clg_types = ['OS:Coil:Cooling:DX:SingleSpeed',
|
|
45
|
-
'OS:Coil:Cooling:DX:TwoSpeed',
|
|
46
|
-
'OS:Coil:Cooling:DX:MultiSpeed']
|
|
47
|
-
clg_types.each do |ct|
|
|
48
|
-
coils = air_loop.supplyComponents(ct.to_IddObjectType)
|
|
49
|
-
next if coils.empty?
|
|
50
|
-
|
|
51
|
-
clg_coil = coils[0]
|
|
52
|
-
break # Stop on first DX cooling coil found
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
# If no paired cooling coil was found,
|
|
57
|
-
# throw an error and fall back to the heating capacity
|
|
58
|
-
# of the DX heating coil
|
|
59
|
-
if clg_coil.nil?
|
|
60
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{coil_heating_dx_single_speed.name}, the paired DX cooling coil could not be found to determine capacity. Efficiency will incorrectly be based on DX coil's heating capacity.")
|
|
61
|
-
if coil_heating_dx_single_speed.ratedTotalHeatingCapacity.is_initialized
|
|
62
|
-
capacity_w = coil_heating_dx_single_speed.ratedTotalHeatingCapacity.get
|
|
63
|
-
elsif coil_heating_dx_single_speed.autosizedRatedTotalHeatingCapacity.is_initialized
|
|
64
|
-
capacity_w = coil_heating_dx_single_speed.autosizedRatedTotalHeatingCapacity.get
|
|
65
|
-
else
|
|
66
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{coil_heating_dx_single_speed.name} capacity is not available, cannot apply efficiency standard to paired DX heating coil.")
|
|
67
|
-
return 0.0
|
|
68
|
-
end
|
|
69
|
-
return capacity_w
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
# If a coil was found, cast to the correct type
|
|
73
|
-
if clg_coil.to_CoilCoolingDXSingleSpeed.is_initialized
|
|
74
|
-
clg_coil = clg_coil.to_CoilCoolingDXSingleSpeed.get
|
|
75
|
-
capacity_w = coil_cooling_dx_single_speed_find_capacity(clg_coil)
|
|
76
|
-
elsif clg_coil.to_CoilCoolingDXTwoSpeed.is_initialized
|
|
77
|
-
clg_coil = clg_coil.to_CoilCoolingDXTwoSpeed.get
|
|
78
|
-
capacity_w = coil_cooling_dx_two_speed_find_capacity(clg_coil)
|
|
79
|
-
elsif clg_coil.to_CoilCoolingDXMultiSpeed.is_initialized
|
|
80
|
-
clg_coil = clg_coil.to_CoilCoolingDXMultiSpeed.get
|
|
81
|
-
capacity_w = coil_cooling_dx_multi_speed_find_capacity(clg_coil)
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
# If it's a PTAC or PTHP System, we need to divide the capacity by the potential zone multiplier
|
|
85
|
-
# because the COP is dependent on capacity, and the capacity should be the capacity of a single zone, not all the zones
|
|
86
|
-
if ['PTAC', 'PTHP'].include?(coil_dx_subcategory(coil_heating_dx_single_speed))
|
|
87
|
-
mult = 1
|
|
88
|
-
comp = coil_heating_dx_single_speed.containingZoneHVACComponent
|
|
89
|
-
if comp.is_initialized && comp.get.thermalZone.is_initialized
|
|
90
|
-
mult = comp.get.thermalZone.get.multiplier
|
|
91
|
-
if mult > 1
|
|
92
|
-
total_cap = capacity_w
|
|
93
|
-
capacity_w /= mult
|
|
94
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{coil_heating_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 #{mult} to give #{capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get.round(2)}kBTU/hr.")
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
return capacity_w
|
|
100
|
-
end
|
|
101
|
-
|
|
102
6
|
# Finds lookup object in standards and return efficiency
|
|
103
7
|
#
|
|
104
8
|
# @param coil_heating_dx_single_speed [OpenStudio::Model::CoilHeatingDXSingleSpeed] coil heating dx single speed object
|
|
105
9
|
# @param rename [Boolean] if true, object will be renamed to include capacity and efficiency level
|
|
106
10
|
# @param necb_ref_hp [Boolean] for compatability with NECB ruleset only.
|
|
11
|
+
# @param equipment_type [Boolean] indicate that equipment_type should be in the search criteria.
|
|
107
12
|
# @return [Double] full load efficiency (COP)
|
|
108
13
|
def coil_heating_dx_single_speed_standard_minimum_cop(coil_heating_dx_single_speed, rename = false, necb_ref_hp = false, equipment_type = false)
|
|
109
14
|
coil_efficiency_data = standards_data['heat_pumps_heating']
|
|
110
15
|
|
|
111
16
|
# Get the capacity
|
|
112
|
-
capacity_w =
|
|
17
|
+
capacity_w = OpenstudioStandards::HVAC.coil_heating_get_paired_coil_cooling_capacity(coil_heating_dx_single_speed)
|
|
113
18
|
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
|
|
114
19
|
capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
|
|
115
20
|
|
|
@@ -128,7 +33,7 @@ class Standard
|
|
|
128
33
|
if equipment_type == 'PTHP'
|
|
129
34
|
search_criteria['application'] = coil_dx_packaged_terminal_application(coil_heating_dx_single_speed)
|
|
130
35
|
end
|
|
131
|
-
elsif !coil_dx_heat_pump?(coil_heating_dx_single_speed) # `coil_dx_heat_pump?` returns false when a DX heating coil is wrapped into a AirloopHVAC:UnitarySystem
|
|
36
|
+
elsif !OpenstudioStandards::HVAC.coil_dx_heat_pump?(coil_heating_dx_single_speed) # `coil_dx_heat_pump?` returns false when a DX heating coil is wrapped into a AirloopHVAC:UnitarySystem
|
|
132
37
|
search_criteria['equipment_type'] = 'Heat Pumps'
|
|
133
38
|
end
|
|
134
39
|
unless (template == 'NECB2011') || (template == 'NECB2015') || (template == 'NECB2017') || (template == 'NECB2020') || (template == 'BTAPPRE1980') ||
|
|
@@ -182,7 +87,7 @@ class Standard
|
|
|
182
87
|
end
|
|
183
88
|
|
|
184
89
|
min_coph = pthp_cop_coeff_1 - (pthp_cop_coeff_2 * capacity_btu_per_hr / 1000.0)
|
|
185
|
-
cop = cop_heating_to_cop_heating_no_fan(min_coph, OpenStudio.convert(capacity_btu_per_hr, 'Btu/hr', 'W').get)
|
|
90
|
+
cop = OpenstudioStandards::HVAC.cop_heating_to_cop_heating_no_fan(min_coph, OpenStudio.convert(capacity_btu_per_hr, 'Btu/hr', 'W').get)
|
|
186
91
|
new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round} Clg kBtu/hr #{min_coph.round(1)}COPH"
|
|
187
92
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{coil_heating_dx_single_speed.name}: #{sub_category} Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; COPH = #{min_coph.round(2)}")
|
|
188
93
|
end
|
|
@@ -190,7 +95,7 @@ class Standard
|
|
|
190
95
|
# If specified as HSPF
|
|
191
96
|
unless hp_props['minimum_heating_seasonal_performance_factor'].nil?
|
|
192
97
|
min_hspf = hp_props['minimum_heating_seasonal_performance_factor']
|
|
193
|
-
cop = hspf_to_cop_no_fan(min_hspf)
|
|
98
|
+
cop = OpenstudioStandards::HVAC.hspf_to_cop_no_fan(min_hspf)
|
|
194
99
|
new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round} Clg kBtu/hr #{min_hspf.round(1)}HSPF"
|
|
195
100
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: #{suppl_heating_type} #{sub_category} Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; HSPF = #{min_hspf}")
|
|
196
101
|
end
|
|
@@ -199,7 +104,7 @@ class Standard
|
|
|
199
104
|
# TODO: assumed to be the same as HSPF for now
|
|
200
105
|
unless hp_props['minimum_heating_seasonal_performance_factor_2'].nil?
|
|
201
106
|
min_hspf = hp_props['minimum_heating_seasonal_performance_factor_2']
|
|
202
|
-
cop = hspf_to_cop_no_fan(min_hspf)
|
|
107
|
+
cop = OpenstudioStandards::HVAC.hspf_to_cop_no_fan(min_hspf)
|
|
203
108
|
new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round} Clg kBtu/hr #{min_hspf.round(1)}HSPF2"
|
|
204
109
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: #{suppl_heating_type} #{sub_category} Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; HSPF = #{min_hspf}")
|
|
205
110
|
end
|
|
@@ -207,7 +112,7 @@ class Standard
|
|
|
207
112
|
# If specified as COPH
|
|
208
113
|
unless hp_props['minimum_coefficient_of_performance_heating'].nil?
|
|
209
114
|
min_coph = hp_props['minimum_coefficient_of_performance_heating']
|
|
210
|
-
cop = cop_heating_to_cop_heating_no_fan(min_coph, OpenStudio.convert(capacity_kbtu_per_hr, 'kBtu/hr', 'W').get)
|
|
115
|
+
cop = OpenstudioStandards::HVAC.cop_heating_to_cop_heating_no_fan(min_coph, OpenStudio.convert(capacity_kbtu_per_hr, 'kBtu/hr', 'W').get)
|
|
211
116
|
new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round} Clg kBtu/hr #{min_coph.round(1)}COPH"
|
|
212
117
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: #{suppl_heating_type} #{sub_category} Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; COPH = #{min_coph}")
|
|
213
118
|
end
|
|
@@ -215,11 +120,19 @@ class Standard
|
|
|
215
120
|
# If specified as EER
|
|
216
121
|
unless hp_props['minimum_energy_efficiency_ratio'].nil?
|
|
217
122
|
min_eer = hp_props['minimum_energy_efficiency_ratio']
|
|
218
|
-
cop = eer_to_cop_no_fan(min_eer)
|
|
123
|
+
cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
|
|
219
124
|
new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round} Clg kBtu/hr #{min_eer.round(1)}EER"
|
|
220
125
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: #{suppl_heating_type} #{sub_category} Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
|
|
221
126
|
end
|
|
222
127
|
|
|
128
|
+
# If specified as SEER
|
|
129
|
+
unless hp_props['minimum_seasonal_energy_efficiency_ratio'].nil?
|
|
130
|
+
min_seer = hp_props['minimum_seasonal_energy_efficiency_ratio']
|
|
131
|
+
cop = OpenstudioStandards::HVAC.seer_to_cop_no_fan(min_seer)
|
|
132
|
+
new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round} Clg kBtu/hr #{min_seer.round(1)}SEER"
|
|
133
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: #{suppl_heating_type} #{sub_category} Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
|
|
134
|
+
end
|
|
135
|
+
|
|
223
136
|
# Rename
|
|
224
137
|
if rename
|
|
225
138
|
coil_heating_dx_single_speed.setName(new_comp_name)
|
|
@@ -243,7 +156,7 @@ class Standard
|
|
|
243
156
|
equipment_type = coil_efficiency_data[0].keys.include?('equipment_type') ? true : false
|
|
244
157
|
|
|
245
158
|
# Get the capacity
|
|
246
|
-
capacity_w =
|
|
159
|
+
capacity_w = OpenstudioStandards::HVAC.coil_heating_get_paired_coil_cooling_capacity(coil_heating_dx_single_speed)
|
|
247
160
|
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
|
|
248
161
|
capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
|
|
249
162
|
|
|
@@ -255,7 +168,7 @@ class Standard
|
|
|
255
168
|
if ['PTHP'].include?(equipment_type) && template.include?('90.1')
|
|
256
169
|
search_criteria['application'] = coil_dx_packaged_terminal_application(coil_heating_dx_single_speed)
|
|
257
170
|
end
|
|
258
|
-
elsif !coil_dx_heat_pump?(coil_heating_dx_single_speed) # `coil_dx_heat_pump?` returns false when a DX heating coil is wrapped into a AirloopHVAC:UnitarySystem
|
|
171
|
+
elsif !OpenstudioStandards::HVAC.coil_dx_heat_pump?(coil_heating_dx_single_speed) # `coil_dx_heat_pump?` returns false when a DX heating coil is wrapped into a AirloopHVAC:UnitarySystem
|
|
259
172
|
search_criteria['equipment_type'] = 'Heat Pumps'
|
|
260
173
|
end
|
|
261
174
|
unless (template == 'NECB2011') || (template == 'NECB2015') || (template == 'NECB2017') || (template == 'NECB2020') || (template == 'BTAPPRE1980') ||
|
|
@@ -24,7 +24,7 @@ class Standard
|
|
|
24
24
|
search_criteria = coil_heating_gas_additional_search_criteria(coil_heating_gas, search_criteria)
|
|
25
25
|
|
|
26
26
|
# Get the capacity, but return false if not available
|
|
27
|
-
capacity_w =
|
|
27
|
+
capacity_w = OpenstudioStandards::HVAC.coil_heating_gas_get_capacity(coil_heating_gas)
|
|
28
28
|
|
|
29
29
|
# Return false if the coil does not have a heating capacity associated with it. Cannot apply the standard if without
|
|
30
30
|
# it.
|
|
@@ -56,7 +56,7 @@ class Standard
|
|
|
56
56
|
# If specified as AFUE
|
|
57
57
|
unless furnace_props['minimum_annual_fuel_utilization_efficiency'].nil?
|
|
58
58
|
min_afue = furnace_props['minimum_annual_fuel_utilization_efficiency']
|
|
59
|
-
thermal_eff = afue_to_thermal_eff(min_afue)
|
|
59
|
+
thermal_eff = OpenstudioStandards::HVAC.afue_to_thermal_eff(min_afue)
|
|
60
60
|
new_comp_name = "#{coil_heating_gas.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_afue} AFUE"
|
|
61
61
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingGas', "For #{template}: #{coil_heating_gas.name}: = #{capacity_kbtu_per_hr.round}kBtu/hr; AFUE = #{min_afue}")
|
|
62
62
|
end
|
|
@@ -64,7 +64,7 @@ class Standard
|
|
|
64
64
|
# If specified as combustion efficiency
|
|
65
65
|
unless furnace_props['minimum_combustion_efficiency'].nil?
|
|
66
66
|
min_comb_eff = furnace_props['minimum_combustion_efficiency']
|
|
67
|
-
thermal_eff = combustion_eff_to_thermal_eff(min_comb_eff)
|
|
67
|
+
thermal_eff = OpenstudioStandards::HVAC.combustion_eff_to_thermal_eff(min_comb_eff)
|
|
68
68
|
new_comp_name = "#{coil_heating_gas.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_comb_eff} Combustion Eff"
|
|
69
69
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingGas', "For #{template}: #{coil_heating_gas.name}: = #{capacity_kbtu_per_hr.round}kBtu/hr; Combustion Efficiency = #{min_comb_eff}")
|
|
70
70
|
end
|
|
@@ -85,24 +85,4 @@ class Standard
|
|
|
85
85
|
|
|
86
86
|
return successfully_set_all_properties
|
|
87
87
|
end
|
|
88
|
-
|
|
89
|
-
# Retrieves the capacity of an OpenStudio::Model::CoilHeatingGas in watts
|
|
90
|
-
#
|
|
91
|
-
# @param coil_heating_gas [OpenStudio::Model::CoilHeatingGas] the gas heating coil
|
|
92
|
-
# @return [Double, false] a double representing the capacity of the CoilHeatingGas object in watts. If unsuccessful in
|
|
93
|
-
# determining the capacity, this function returns false.
|
|
94
|
-
def coil_heating_gas_find_capacity(coil_heating_gas)
|
|
95
|
-
capacity_w = nil
|
|
96
|
-
if coil_heating_gas.nominalCapacity.is_initialized
|
|
97
|
-
capacity_w = coil_heating_gas.nominalCapacity.get
|
|
98
|
-
elsif coil_heating_gas.autosizedNominalCapacity.is_initialized
|
|
99
|
-
capacity_w = coil_heating_gas.autosizedNominalCapacity.get
|
|
100
|
-
else
|
|
101
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingGas', "For #{coil_heating_gas.name} capacity is not available, cannot apply efficiency standard.")
|
|
102
|
-
successfully_set_all_properties = false
|
|
103
|
-
return successfully_set_all_properties
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
return capacity_w
|
|
107
|
-
end
|
|
108
88
|
end
|
|
@@ -45,28 +45,4 @@ class Standard
|
|
|
45
45
|
successfully_set_all_properties = false
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
|
-
|
|
49
|
-
# Finds capacity in W
|
|
50
|
-
#
|
|
51
|
-
# @param coil_heating_gas_multi_stage [OpenStudio::Model::CoilHeatingGasMultiStage] coil heating gas multi stage object
|
|
52
|
-
# @return [Double] capacity in W to be used for find object
|
|
53
|
-
def coil_heating_gas_multi_stage_find_capacity(coil_heating_gas_multi_stage)
|
|
54
|
-
capacity_w = nil
|
|
55
|
-
htg_stages = coil_heating_gas_multi_stage.stages
|
|
56
|
-
if htg_stages.last.nominalCapacity.is_initialized
|
|
57
|
-
capacity_w = htg_stages.last.nominalCapacity.get
|
|
58
|
-
elsif (htg_stages.size == 1) && coil_heating_gas_multi_stage.stages[0].autosizedNominalCapacity.is_initialized
|
|
59
|
-
capacity_w = coil_heating_gas_multi_stage.stages[0].autosizedNominalCapacity.get
|
|
60
|
-
elsif (htg_stages.size == 2) && coil_heating_gas_multi_stage.stages[1].autosizedNominalCapacity.is_initialized
|
|
61
|
-
capacity_w = coil_heating_gas_multi_stage.stages[1].autosizedNominalCapacity.get
|
|
62
|
-
elsif (htg_stages.size == 3) && coil_heating_gas_multi_stage.stages[2].autosizedNominalCapacity.is_initialized
|
|
63
|
-
capacity_w = coil_heating_gas_multi_stage.stages[2].autosizedNominalCapacity.get
|
|
64
|
-
elsif (htg_stages.size == 4) && coil_heating_gas_multi_stage.stages[3].autosizedNominalCapacity.is_initialized
|
|
65
|
-
capacity_w = coil_heating_gas_multi_stage.stages[3].autosizedNominalCapacity.get
|
|
66
|
-
else
|
|
67
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{coil_heating_gas_multi_stage.name} capacity is not available, cannot apply efficiency standard.")
|
|
68
|
-
successfully_set_all_properties = false
|
|
69
|
-
return successfully_set_all_properties
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
48
|
end
|
data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb
CHANGED
|
@@ -1,90 +1,6 @@
|
|
|
1
1
|
class Standard
|
|
2
2
|
# @!group CoilHeatingWaterToAirHeatPumpEquationFit
|
|
3
3
|
|
|
4
|
-
# Finds capacity in W.
|
|
5
|
-
# This is the cooling capacity of the paired cooling coil.
|
|
6
|
-
#
|
|
7
|
-
# @param coil_heating_water_to_air_heat_pump [OpenStudio::Model::CoilHeatingWaterToAirHeatPumpEquationFit] coil heating object
|
|
8
|
-
# @return [Double] capacity in W to be used for find object
|
|
9
|
-
def coil_heating_water_to_air_heat_pump_find_capacity(coil_heating_water_to_air_heat_pump)
|
|
10
|
-
capacity_w = nil
|
|
11
|
-
|
|
12
|
-
# Get the paired cooling coil
|
|
13
|
-
clg_coil = nil
|
|
14
|
-
|
|
15
|
-
# Unitary and zone equipment
|
|
16
|
-
if coil_heating_water_to_air_heat_pump.airLoopHVAC.empty?
|
|
17
|
-
if coil_heating_water_to_air_heat_pump.containingHVACComponent.is_initialized
|
|
18
|
-
containing_comp = coil_heating_water_to_air_heat_pump.containingHVACComponent.get
|
|
19
|
-
if containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAir.is_initialized
|
|
20
|
-
clg_coil = containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.coolingCoil
|
|
21
|
-
elsif containing_comp.to_AirLoopHVACUnitarySystem.is_initialized
|
|
22
|
-
unitary = containing_comp.to_AirLoopHVACUnitarySystem.get
|
|
23
|
-
if unitary.coolingCoil.is_initialized
|
|
24
|
-
clg_coil = unitary.coolingCoil.get
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
elsif coil_heating_water_to_air_heat_pump.containingZoneHVACComponent.is_initialized
|
|
28
|
-
containing_comp = coil_heating_water_to_air_heat_pump.containingZoneHVACComponent.get
|
|
29
|
-
# PTHP
|
|
30
|
-
if containing_comp.to_ZoneHVACPackagedTerminalHeatPump.is_initialized
|
|
31
|
-
clg_coil = containing_comp.to_ZoneHVACPackagedTerminalHeatPump.get.coolingCoil
|
|
32
|
-
# WSHP
|
|
33
|
-
elsif containing_comp.to_ZoneHVACWaterToAirHeatPump.is_initialized
|
|
34
|
-
clg_coil = containing_comp.to_ZoneHVACWaterToAirHeatPump.get.coolingCoil
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# On AirLoop directly
|
|
40
|
-
if coil_heating_water_to_air_heat_pump.airLoopHVAC.is_initialized
|
|
41
|
-
air_loop = coil_heating_water_to_air_heat_pump.airLoopHVAC.get
|
|
42
|
-
# Check for the presence of any other type of cooling coil
|
|
43
|
-
clg_types = ['OS:Coil:Cooling:DX:SingleSpeed',
|
|
44
|
-
'OS:Coil:Cooling:DX:TwoSpeed',
|
|
45
|
-
'OS:Coil:Cooling:DX:MultiSpeed']
|
|
46
|
-
clg_types.each do |ct|
|
|
47
|
-
coils = air_loop.supplyComponents(ct.to_IddObjectType)
|
|
48
|
-
next if coils.empty?
|
|
49
|
-
|
|
50
|
-
clg_coil = coils[0]
|
|
51
|
-
break # Stop on first cooling coil found
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
# If no paired cooling coil was found,
|
|
56
|
-
# throw an error and fall back to the heating capacity of the heating coil
|
|
57
|
-
if clg_coil.nil?
|
|
58
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingWaterToAirHeatPumpEquationFit', "For #{coil_heating_water_to_air_heat_pump.name}, the paired cooling coil could not be found to determine capacity. Efficiency will incorrectly be based on coil's heating capacity.")
|
|
59
|
-
if coil_heating_water_to_air_heat_pump.ratedTotalHeatingCapacity.is_initialized
|
|
60
|
-
capacity_w = coil_heating_water_to_air_heat_pump.ratedTotalHeatingCapacity.get
|
|
61
|
-
elsif coil_heating_water_to_air_heat_pump.autosizedRatedTotalHeatingCapacity.is_initialized
|
|
62
|
-
capacity_w = coil_heating_water_to_air_heat_pump.autosizedRatedTotalHeatingCapacity.get
|
|
63
|
-
else
|
|
64
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingWaterToAirHeatPumpEquationFit', "For #{coil_heating_water_to_air_heat_pump.name} capacity is not available, cannot apply efficiency standard to paired heating coil.")
|
|
65
|
-
return 0.0
|
|
66
|
-
end
|
|
67
|
-
return capacity_w
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
# If a coil was found, cast to the correct type
|
|
71
|
-
if clg_coil.to_CoilCoolingDXSingleSpeed.is_initialized
|
|
72
|
-
clg_coil = clg_coil.to_CoilCoolingDXSingleSpeed.get
|
|
73
|
-
capacity_w = coil_cooling_dx_single_speed_find_capacity(clg_coil)
|
|
74
|
-
elsif clg_coil.to_CoilCoolingDXTwoSpeed.is_initialized
|
|
75
|
-
clg_coil = clg_coil.to_CoilCoolingDXTwoSpeed.get
|
|
76
|
-
capacity_w = coil_cooling_dx_two_speed_find_capacity(clg_coil)
|
|
77
|
-
elsif clg_coil.to_CoilCoolingDXMultiSpeed.is_initialized
|
|
78
|
-
clg_coil = clg_coil.to_CoilCoolingDXMultiSpeed.get
|
|
79
|
-
capacity_w = coil_cooling_dx_multi_speed_find_capacity(clg_coil)
|
|
80
|
-
elsif clg_coil.to_CoilCoolingWaterToAirHeatPumpEquationFit.is_initialized
|
|
81
|
-
clg_coil = clg_coil.to_CoilCoolingWaterToAirHeatPumpEquationFit.get
|
|
82
|
-
capacity_w = coil_cooling_water_to_air_heat_pump_find_capacity(clg_coil)
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
return capacity_w
|
|
86
|
-
end
|
|
87
|
-
|
|
88
4
|
# Finds lookup object in standards and return efficiency
|
|
89
5
|
#
|
|
90
6
|
# @param coil_heating_water_to_air_heat_pump [OpenStudio::Model::CoilHeatingWaterToAirHeatPumpEquationFit] coil heating object
|
|
@@ -93,7 +9,7 @@ class Standard
|
|
|
93
9
|
def coil_heating_water_to_air_heat_pump_standard_minimum_cop(coil_heating_water_to_air_heat_pump, rename = false)
|
|
94
10
|
search_criteria = {}
|
|
95
11
|
search_criteria['template'] = template
|
|
96
|
-
capacity_w =
|
|
12
|
+
capacity_w = OpenstudioStandards::HVAC.coil_heating_get_paired_coil_cooling_capacity(coil_heating_water_to_air_heat_pump)
|
|
97
13
|
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
|
|
98
14
|
capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
|
|
99
15
|
|
|
@@ -136,7 +52,7 @@ class Standard
|
|
|
136
52
|
# Get the search criteria
|
|
137
53
|
search_criteria = {}
|
|
138
54
|
search_criteria['template'] = template
|
|
139
|
-
capacity_w =
|
|
55
|
+
capacity_w = OpenstudioStandards::HVAC.coil_heating_get_paired_coil_cooling_capacity(coil_heating_water_to_air_heat_pump)
|
|
140
56
|
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
|
|
141
57
|
|
|
142
58
|
# Look up the efficiency characteristics
|
|
@@ -3,113 +3,6 @@ class Standard
|
|
|
3
3
|
|
|
4
4
|
include Fan
|
|
5
5
|
|
|
6
|
-
# Modify the fan curve coefficients to reflect a specific type of control.
|
|
7
|
-
#
|
|
8
|
-
# @param fan_variable_volume [OpenStudio::Model::FanVariableVolume] variable volume fan object
|
|
9
|
-
# @param control_type [String] valid choices are:
|
|
10
|
-
# Multi Zone VAV with discharge dampers,
|
|
11
|
-
# Multi Zone VAV with VSD and SP Setpoint Reset,
|
|
12
|
-
# Multi Zone VAV with AF or BI Riding Curve,
|
|
13
|
-
# Multi Zone VAV with AF or BI with Inlet Vanes,
|
|
14
|
-
# Multi Zone VAV with FC Riding Curve,
|
|
15
|
-
# Multi Zone VAV with FC with Inlet Vanes,
|
|
16
|
-
# Multi Zone VAV with Vane-axial with Variable Pitch Blades,
|
|
17
|
-
# Multi Zone VAV with VSD and Fixed SP Setpoint,
|
|
18
|
-
# Multi Zone VAV with VSD and Static Pressure Reset,
|
|
19
|
-
# Single Zone VAV Fan
|
|
20
|
-
# @return [Boolean] returns true if successful, false if not
|
|
21
|
-
def fan_variable_volume_set_control_type(fan_variable_volume, control_type)
|
|
22
|
-
# Determine the coefficients
|
|
23
|
-
coeff_a = nil
|
|
24
|
-
coeff_b = nil
|
|
25
|
-
coeff_c = nil
|
|
26
|
-
coeff_d = nil
|
|
27
|
-
min_pct_pwr = nil
|
|
28
|
-
case control_type
|
|
29
|
-
|
|
30
|
-
# add 'Multi Zone VAV with discharge dampers' and change the minimum fan power fraction of "Multi Zone VAV with VSD and Static Pressure Reset"
|
|
31
|
-
when 'Multi Zone VAV with discharge dampers'
|
|
32
|
-
coeff_a = 0.18984763
|
|
33
|
-
coeff_b = 0.31447014
|
|
34
|
-
coeff_c = 0.49568211
|
|
35
|
-
coeff_d = 0.0
|
|
36
|
-
min_pct_pwr = 0.25
|
|
37
|
-
when 'Multi Zone VAV with VSD and SP Setpoint Reset'
|
|
38
|
-
coeff_a = 0.04076
|
|
39
|
-
coeff_b = 0.0881
|
|
40
|
-
coeff_c = -0.0729
|
|
41
|
-
coeff_d = 0.9437
|
|
42
|
-
min_pct_pwr = 0.25
|
|
43
|
-
when 'Multi Zone VAV with AF or BI Riding Curve'
|
|
44
|
-
coeff_a = 0.1631
|
|
45
|
-
coeff_b = 1.5901
|
|
46
|
-
coeff_c = -0.8817
|
|
47
|
-
coeff_d = 0.1281
|
|
48
|
-
min_pct_pwr = 0.7
|
|
49
|
-
when 'Multi Zone VAV with AF or BI with Inlet Vanes'
|
|
50
|
-
coeff_a = 0.9977
|
|
51
|
-
coeff_b = -0.659
|
|
52
|
-
coeff_c = 0.9547
|
|
53
|
-
coeff_d = -0.2936
|
|
54
|
-
min_pct_pwr = 0.5
|
|
55
|
-
when 'Multi Zone VAV with FC Riding Curve'
|
|
56
|
-
coeff_a = 0.1224
|
|
57
|
-
coeff_b = 0.612
|
|
58
|
-
coeff_c = 0.5983
|
|
59
|
-
coeff_d = -0.3334
|
|
60
|
-
min_pct_pwr = 0.3
|
|
61
|
-
when 'Multi Zone VAV with FC with Inlet Vanes'
|
|
62
|
-
coeff_a = 0.3038
|
|
63
|
-
coeff_b = -0.7608
|
|
64
|
-
coeff_c = 2.2729
|
|
65
|
-
coeff_d = -0.8169
|
|
66
|
-
min_pct_pwr = 0.3
|
|
67
|
-
when 'Multi Zone VAV with Vane-axial with Variable Pitch Blades'
|
|
68
|
-
coeff_a = 0.1639
|
|
69
|
-
coeff_b = -0.4016
|
|
70
|
-
coeff_c = 1.9909
|
|
71
|
-
coeff_d = -0.7541
|
|
72
|
-
min_pct_pwr = 0.2
|
|
73
|
-
when 'Multi Zone VAV with VSD and Fixed SP Setpoint'
|
|
74
|
-
coeff_a = 0.0013
|
|
75
|
-
coeff_b = 0.1470
|
|
76
|
-
coeff_c = 0.9506
|
|
77
|
-
coeff_d = -0.0998
|
|
78
|
-
min_pct_pwr = 0.2
|
|
79
|
-
when 'Multi Zone VAV with VSD and Static Pressure Reset'
|
|
80
|
-
coeff_a = 0.04076
|
|
81
|
-
coeff_b = 0.0881
|
|
82
|
-
coeff_c = -0.0729
|
|
83
|
-
coeff_d = 0.9437
|
|
84
|
-
min_pct_pwr = 0.1
|
|
85
|
-
when 'Single Zone VAV Fan'
|
|
86
|
-
coeff_a = 0.027828
|
|
87
|
-
coeff_b = 0.026583
|
|
88
|
-
coeff_c = -0.087069
|
|
89
|
-
coeff_d = 1.030920
|
|
90
|
-
min_pct_pwr = 0.1
|
|
91
|
-
else
|
|
92
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.FanVariableVolume', "Fan control type '#{control_type}' not recognized, fan power coefficients will not be changed.")
|
|
93
|
-
return false
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.FanVariableVolume', "For #{fan_variable_volume.name}: Set fan curve coefficients to reflect control type of '#{control_type}'.")
|
|
97
|
-
|
|
98
|
-
# Set the coefficients
|
|
99
|
-
fan_variable_volume.setFanPowerCoefficient1(coeff_a)
|
|
100
|
-
fan_variable_volume.setFanPowerCoefficient2(coeff_b)
|
|
101
|
-
fan_variable_volume.setFanPowerCoefficient3(coeff_c)
|
|
102
|
-
fan_variable_volume.setFanPowerCoefficient4(coeff_d)
|
|
103
|
-
|
|
104
|
-
# Set the fan minimum power
|
|
105
|
-
fan_variable_volume.setFanPowerMinimumFlowRateInputMethod('Fraction')
|
|
106
|
-
fan_variable_volume.setFanPowerMinimumFlowFraction(min_pct_pwr)
|
|
107
|
-
|
|
108
|
-
# Append the control type to the fan name
|
|
109
|
-
# self.setName("#{self.name} #{control_type}")
|
|
110
|
-
return true
|
|
111
|
-
end
|
|
112
|
-
|
|
113
6
|
# Determines whether there is a requirement to have a VSD or some other method to reduce fan power at low part load ratios.
|
|
114
7
|
#
|
|
115
8
|
# @param fan_variable_volume [OpenStudio::Model::FanVariableVolume] variable volume fan object
|
|
@@ -237,13 +237,8 @@ class Standard
|
|
|
237
237
|
# Modify the internal loads in each space type, keeping user-defined schedules.
|
|
238
238
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', '*** Changing Lighting Loads ***')
|
|
239
239
|
model.getSpaceTypes.sort.each do |space_type|
|
|
240
|
-
|
|
241
|
-
set_lights
|
|
242
|
-
set_electric_equipment = false
|
|
243
|
-
set_gas_equipment = false
|
|
244
|
-
set_ventilation = false
|
|
245
|
-
# For PRM, it only applies lights for now.
|
|
246
|
-
space_type_apply_internal_loads(space_type, set_people, set_lights, set_electric_equipment, set_gas_equipment, set_ventilation)
|
|
240
|
+
# For PRM, only apply lights for now
|
|
241
|
+
space_type_apply_internal_loads(space_type, set_people: false, set_lights: true, set_electric_equipment: false, set_gas_equipment: false, set_ventilation: false)
|
|
247
242
|
end
|
|
248
243
|
|
|
249
244
|
# Modify the lighting schedule to handle lighting occupancy sensors
|
|
@@ -774,10 +769,10 @@ class Standard
|
|
|
774
769
|
end
|
|
775
770
|
|
|
776
771
|
# This is only used for the stable baseline (2016 and later)
|
|
777
|
-
if !applicable_zones.nil? && !applicable_zones.include?(zone)
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
772
|
+
if !applicable_zones.nil? && !applicable_zones.include?(zone)
|
|
773
|
+
# This zone is not part of the current hvac_building_type
|
|
774
|
+
next
|
|
775
|
+
end
|
|
781
776
|
|
|
782
777
|
# Skip unconditioned zones
|
|
783
778
|
heated = OpenstudioStandards::ThermalZone.thermal_zone_heated?(zone)
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
class Standard
|
|
2
|
+
# @!group People
|
|
3
|
+
|
|
4
|
+
# Apply people from ventilation standards data to a space type
|
|
5
|
+
# Create a DesignSpecificationOutdoorAir air object and assign it to the SpaceType
|
|
6
|
+
#
|
|
7
|
+
# @param space_type [OpenStudio::Model::SpaceType] OpenStudio SpaceType object to apply people to
|
|
8
|
+
# @param thermal_comfort_models [Array<String>] optional argument to determine which thermal comfort model to use. Can select multiple with an array. Options are Fanger, Pierce, KSU, AdaptiveASH55, AdaptiveCEN15251, CoolingEffectASH55, and AnkleDraftASH55.
|
|
9
|
+
# @return [Boolean] returns true if successful, false if not
|
|
10
|
+
def space_type_apply_people(space_type, thermal_comfort_models: ['AdaptiveASH55'])
|
|
11
|
+
# Skip plenums
|
|
12
|
+
if space_type.name.get.to_s.downcase.include?('plenum')
|
|
13
|
+
return false
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
if space_type.standardsSpaceType.is_initialized && space_type.standardsSpaceType.get.downcase.include?('plenum')
|
|
17
|
+
return false
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Get the standards data
|
|
21
|
+
# @todo replace this look from standards_data['space_types'] to ventilation data directly, use 62.1 as a Standard
|
|
22
|
+
space_type_properties = space_type_get_standards_data(space_type)
|
|
23
|
+
|
|
24
|
+
# Ensure space_type_properties available
|
|
25
|
+
if space_type_properties.nil? || space_type_properties.empty?
|
|
26
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} was not found in the standards data.")
|
|
27
|
+
return false
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# People
|
|
31
|
+
people_have_info = false
|
|
32
|
+
occupancy_per_area = space_type_properties['occupancy_per_area'].to_f
|
|
33
|
+
people_have_info = true unless occupancy_per_area.zero?
|
|
34
|
+
|
|
35
|
+
if people_have_info
|
|
36
|
+
# Remove all but the first instance
|
|
37
|
+
instances = space_type.people.sort
|
|
38
|
+
if instances.empty?
|
|
39
|
+
# Create a new definition and instance
|
|
40
|
+
definition = OpenStudio::Model::PeopleDefinition.new(space_type.model)
|
|
41
|
+
definition.setName("#{space_type.name} People Definition")
|
|
42
|
+
instance = OpenStudio::Model::People.new(definition)
|
|
43
|
+
instance.setName("#{space_type.name} People")
|
|
44
|
+
instance.setSpaceType(space_type)
|
|
45
|
+
thermal_comfort_models.each { |m| definition.pushThermalComfortModelType(m)}
|
|
46
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} had no people, one has been created.")
|
|
47
|
+
instances << instance
|
|
48
|
+
elsif instances.size > 1
|
|
49
|
+
instances.each_with_index do |inst, i|
|
|
50
|
+
next if i.zero?
|
|
51
|
+
|
|
52
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "Removed #{inst.name} from #{space_type.name}.")
|
|
53
|
+
inst.remove
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Modify the definition of the instance
|
|
58
|
+
space_type.people.sort.each do |inst|
|
|
59
|
+
definition = inst.peopleDefinition
|
|
60
|
+
unless occupancy_per_area.zero?
|
|
61
|
+
definition.setPeopleperSpaceFloorArea(OpenStudio.convert(occupancy_per_area / 1000, 'people/ft^2', 'people/m^2').get)
|
|
62
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set occupancy to #{occupancy_per_area} people/1000 ft^2.")
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# set fraction radiant
|
|
66
|
+
definition.setFractionRadiant(0.3)
|
|
67
|
+
|
|
68
|
+
# Clothing schedule for thermal comfort metrics
|
|
69
|
+
clothing_sch = space_type.model.getScheduleRulesetByName('Clothing Schedule')
|
|
70
|
+
if clothing_sch.is_initialized
|
|
71
|
+
clothing_sch = clothing_sch.get
|
|
72
|
+
else
|
|
73
|
+
clothing_sch = OpenStudio::Model::ScheduleRuleset.new(space_type.model)
|
|
74
|
+
clothing_sch.setName('Clothing Schedule')
|
|
75
|
+
clothing_sch.defaultDaySchedule.setName('Clothing Schedule Default Winter Clothes')
|
|
76
|
+
clothing_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 1.0)
|
|
77
|
+
sch_rule = OpenStudio::Model::ScheduleRule.new(clothing_sch)
|
|
78
|
+
sch_rule.daySchedule.setName('Clothing Schedule Summer Clothes')
|
|
79
|
+
sch_rule.daySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0.5)
|
|
80
|
+
sch_rule.setStartDate(OpenStudio::Date.new(OpenStudio::MonthOfYear.new(5), 1))
|
|
81
|
+
sch_rule.setEndDate(OpenStudio::Date.new(OpenStudio::MonthOfYear.new(9), 30))
|
|
82
|
+
end
|
|
83
|
+
inst.setClothingInsulationSchedule(clothing_sch)
|
|
84
|
+
|
|
85
|
+
# Air velocity schedule for thermal comfort metrics
|
|
86
|
+
air_velo_sch = space_type.model.getScheduleRulesetByName('Air Velocity Schedule')
|
|
87
|
+
if air_velo_sch.is_initialized
|
|
88
|
+
air_velo_sch = air_velo_sch.get
|
|
89
|
+
else
|
|
90
|
+
air_velo_sch = OpenStudio::Model::ScheduleRuleset.new(space_type.model)
|
|
91
|
+
air_velo_sch.setName('Air Velocity Schedule')
|
|
92
|
+
air_velo_sch.defaultDaySchedule.setName('Air Velocity Schedule Default')
|
|
93
|
+
air_velo_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0.2)
|
|
94
|
+
end
|
|
95
|
+
inst.setAirVelocitySchedule(air_velo_sch)
|
|
96
|
+
|
|
97
|
+
# Work efficiency schedule for thermal comfort metrics
|
|
98
|
+
work_efficiency_sch = space_type.model.getScheduleRulesetByName('Work Efficiency Schedule')
|
|
99
|
+
if work_efficiency_sch.is_initialized
|
|
100
|
+
work_efficiency_sch = work_efficiency_sch.get
|
|
101
|
+
else
|
|
102
|
+
work_efficiency_sch = OpenStudio::Model::ScheduleRuleset.new(space_type.model)
|
|
103
|
+
work_efficiency_sch.setName('Work Efficiency Schedule')
|
|
104
|
+
work_efficiency_sch.defaultDaySchedule.setName('Work Efficiency Schedule Default')
|
|
105
|
+
work_efficiency_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0)
|
|
106
|
+
end
|
|
107
|
+
inst.setWorkEfficiencySchedule(work_efficiency_sch)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
return true
|
|
112
|
+
end
|
|
113
|
+
end
|