openstudio-standards 0.8.3 → 0.8.5.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/data/geometry/ASHRAECollege.osm +30 -30
- data/data/geometry/ASHRAECourthouse.osm +22 -22
- data/data/geometry/ASHRAESmallOfficeDetailed.osm +2 -2
- data/data/geometry/DEER_Asm.osm +1 -1
- data/data/geometry/DEER_ECC.osm +1 -1
- data/data/geometry/DEER_EPr.osm +1 -1
- data/data/geometry/DEER_ERC.osm +1 -1
- data/data/geometry/DEER_ESe.osm +1 -1
- data/data/geometry/DEER_EUn.osm +1 -1
- data/data/geometry/DEER_Hsp.osm +1 -1
- data/data/geometry/DEER_Htl.osm +1 -1
- data/data/geometry/DEER_MBT.osm +1 -1
- data/data/geometry/DEER_MFm.osm +1 -1
- data/data/geometry/DEER_Nrs.osm +1 -1
- data/data/geometry/DEER_OfL.osm +1 -1
- data/data/geometry/DEER_OfS.osm +1 -1
- data/data/geometry/DEER_RFF.osm +1 -1
- data/data/geometry/DEER_RSD.osm +1 -1
- data/data/geometry/DEER_Rt3.osm +1 -1
- data/data/geometry/DEER_RtS.osm +1 -1
- data/data/standards/export_OpenStudio_libraries.rb +2 -3
- data/data/standards/test_performance_expected_dd_results.csv +42 -42
- data/lib/openstudio-standards/btap/NECB_building_types.csv +35 -0
- data/lib/openstudio-standards/btap/NECB_space_types.csv +109 -0
- data/lib/openstudio-standards/btap/activity.rb +480 -0
- data/lib/openstudio-standards/btap/attributes.rb +166 -0
- data/lib/openstudio-standards/btap/bridging.rb +561 -1402
- data/lib/openstudio-standards/btap/btap.rb +4 -2
- data/lib/openstudio-standards/btap/btap_test_helper.rb +86 -0
- data/lib/openstudio-standards/btap/carbon/btap_carbon.rb +177 -0
- data/lib/openstudio-standards/btap/common_paths.rb +81 -0
- data/lib/openstudio-standards/btap/common_resources/ConstructionProperties.csv +52 -0
- data/lib/openstudio-standards/btap/common_resources/Constructions.csv +37 -0
- data/lib/openstudio-standards/btap/common_resources/carbon_frame.csv +35 -0
- data/lib/openstudio-standards/btap/common_resources/carbon_glazing.csv +35 -0
- data/lib/openstudio-standards/btap/common_resources/carbon_opaque.csv +164 -0
- data/lib/openstudio-standards/btap/common_resources/construction_sets.csv +1270 -0
- data/lib/openstudio-standards/btap/common_resources/constructions_glazing.csv +121 -0
- data/lib/openstudio-standards/btap/common_resources/constructions_opaque.csv +2256 -0
- data/lib/openstudio-standards/btap/common_resources/costs.csv +1897 -0
- data/lib/openstudio-standards/btap/common_resources/costs_local_factors.csv +2315 -0
- data/lib/openstudio-standards/btap/common_resources/hvac_vent_ahu.csv +925 -0
- data/lib/openstudio-standards/btap/common_resources/lighting.csv +364 -0
- data/lib/openstudio-standards/btap/common_resources/lighting_sets.csv +2667 -0
- data/lib/openstudio-standards/btap/common_resources/locations.csv +75 -0
- data/lib/openstudio-standards/btap/common_resources/materials_glazing.csv +35 -0
- data/lib/openstudio-standards/btap/common_resources/materials_hvac.csv +1686 -0
- data/lib/openstudio-standards/btap/common_resources/materials_lighting.csv +267 -0
- data/lib/openstudio-standards/btap/common_resources/materials_opaque.csv +164 -0
- data/lib/openstudio-standards/btap/costing/README.md +502 -0
- data/lib/openstudio-standards/btap/costing/btap_costing.rb +469 -0
- data/lib/openstudio-standards/btap/costing/btap_measure_helper.rb +359 -0
- data/lib/openstudio-standards/btap/costing/btap_workflow.rb +117 -0
- data/lib/openstudio-standards/btap/costing/copy_test_results_files_to_expected_results.rb +11 -0
- data/lib/openstudio-standards/btap/costing/cost_building_from_file.rb +136 -0
- data/lib/openstudio-standards/btap/costing/costing_database_wrapper.rb +173 -0
- data/lib/openstudio-standards/btap/costing/daylighting_sensor_control_costing.rb +354 -0
- data/lib/openstudio-standards/btap/costing/dcv_costing.rb +314 -0
- data/lib/openstudio-standards/btap/costing/dummy.epw +8768 -0
- data/lib/openstudio-standards/btap/costing/dummy.osm +5320 -0
- data/lib/openstudio-standards/btap/costing/envelope_costing.rb +215 -0
- data/lib/openstudio-standards/btap/costing/heating_cooling_costing.rb +2584 -0
- data/lib/openstudio-standards/btap/costing/led_lighting_costing.rb +156 -0
- data/lib/openstudio-standards/btap/costing/lighting_costing.rb +209 -0
- data/lib/openstudio-standards/btap/costing/mech_sizing.json +502 -0
- data/lib/openstudio-standards/btap/costing/neb_end_use_prices.csv +42 -0
- data/lib/openstudio-standards/btap/costing/necb_2011_spacetype_info.csv +225 -0
- data/lib/openstudio-standards/btap/costing/necb_reference_runs.csv +28705 -0
- data/lib/openstudio-standards/btap/costing/nv_costing.rb +547 -0
- data/lib/openstudio-standards/btap/costing/parallel_tests.rb +92 -0
- data/lib/openstudio-standards/btap/costing/pv_ground_costing.rb +687 -0
- data/lib/openstudio-standards/btap/costing/shw_costing.rb +705 -0
- data/lib/openstudio-standards/btap/costing/test_list.txt +15 -0
- data/lib/openstudio-standards/btap/costing/test_run_all_test_locally.rb +27 -0
- data/lib/openstudio-standards/btap/costing/test_run_costing_tests.rb +80 -0
- data/lib/openstudio-standards/btap/costing/ventilation_costing.rb +2616 -0
- data/lib/openstudio-standards/btap/geometry.rb +86 -6
- data/lib/openstudio-standards/btap/structure.rb +657 -0
- data/lib/openstudio-standards/constructions/modify.rb +2 -1
- data/lib/openstudio-standards/create_typical/create_typical.rb +17 -33
- data/lib/openstudio-standards/create_typical/space_type_ratios.rb +36 -36
- data/lib/openstudio-standards/equipment/create_transformer.rb +104 -0
- data/lib/openstudio-standards/equipment/create_typical_equipment.rb +117 -0
- data/lib/openstudio-standards/equipment/data/electric_equipment_space_types.json +1514 -0
- data/lib/openstudio-standards/equipment/data/gas_equipment_space_types.json +227 -0
- data/lib/openstudio-standards/exterior_lighting/create.rb +22 -22
- data/lib/openstudio-standards/exterior_lighting/information.rb +3 -2
- data/lib/openstudio-standards/hvac/components/air_conditioner_vrf.rb +482 -0
- data/lib/openstudio-standards/hvac/components/air_terminal.rb +31 -0
- data/lib/openstudio-standards/hvac/components/boiler_hot_water.rb +163 -0
- data/lib/openstudio-standards/hvac/components/central_air_source_heat_pump.rb +220 -0
- data/lib/openstudio-standards/hvac/components/chiller.rb +25 -0
- data/lib/openstudio-standards/hvac/components/coil.rb +276 -0
- data/lib/openstudio-standards/hvac/components/coil_cooling_dx_multi_speed.rb +40 -0
- data/lib/openstudio-standards/hvac/components/coil_cooling_dx_single_speed.rb +300 -0
- data/lib/openstudio-standards/hvac/components/coil_cooling_dx_two_speed.rb +187 -0
- data/lib/openstudio-standards/hvac/components/coil_cooling_water.rb +80 -0
- data/lib/openstudio-standards/hvac/components/coil_cooling_water_to_air_heat_pump_equation_fit.rb +182 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_dx_single_speed.rb +220 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_electric.rb +56 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_gas.rb +90 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_gas_multi_stage.rb +33 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_water.rb +98 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_water_to_air_heat_pump_equation_fit.rb +147 -0
- data/lib/openstudio-standards/hvac/components/component.rb +39 -0
- data/lib/openstudio-standards/{standards/ashrae_90_1/data/ashrae_90_1.fans.json → hvac/components/data/fans.json} +6 -6
- data/lib/openstudio-standards/hvac/components/fan.rb +363 -0
- data/lib/openstudio-standards/hvac/components/heat_exchanger_air_to_air.rb +203 -0
- data/lib/openstudio-standards/hvac/components/pump.rb +181 -0
- data/lib/openstudio-standards/hvac/controls/radiant_system_controls.rb +594 -0
- data/lib/openstudio-standards/hvac/conversions.rb +222 -0
- data/lib/openstudio-standards/hvac/curves.rb +192 -0
- data/lib/openstudio-standards/hvac/helpers.rb +357 -0
- data/lib/openstudio-standards/hvac/setpoint_managers/information.rb +4 -4
- data/lib/openstudio-standards/interior_lighting/create_lights.rb +52 -0
- data/lib/openstudio-standards/interior_lighting/create_typical_interior_lighting.rb +254 -0
- data/lib/openstudio-standards/interior_lighting/data/convert_lighting_data.rb +249 -0
- data/lib/openstudio-standards/interior_lighting/data/lighting_space_types.csv +96 -0
- data/lib/openstudio-standards/interior_lighting/data/lighting_space_types.json +1429 -0
- data/lib/openstudio-standards/interior_lighting/data/lighting_technology.csv +46 -0
- data/lib/openstudio-standards/interior_lighting/data/lighting_technology.json +859 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +4 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +4 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.HighRiseApartment.rb +6 -7
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +15 -15
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +4 -4
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +5 -5
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +6 -6
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +7 -7
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +4 -4
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +6 -6
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOfficeDetailed.rb +5 -1
- data/lib/openstudio-standards/prototypes/common/data/prototype_space_type_map.json +2594 -0
- data/lib/openstudio-standards/prototypes/common/data/thermostat_schedule_lookup.json +2108 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +33 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +0 -140
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanConstantVolume.rb +1 -73
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanOnOff.rb +1 -69
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanVariableVolume.rb +0 -116
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanZoneExhaust.rb +0 -61
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +2 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +128 -13
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +606 -607
- data/lib/openstudio-standards/prototypes/common/prototype_space_type_map.rb +41 -0
- data/lib/openstudio-standards/prototypes/common/space_type_equipment_map.rb +184 -0
- data/lib/openstudio-standards/prototypes/common/space_type_thermostat_schedule_map.rb +116 -0
- data/lib/openstudio-standards/qaqc/hvac.rb +12 -12
- data/lib/openstudio-standards/refrigeration/create_compressor.rb +2 -5
- data/lib/openstudio-standards/refrigeration/data/refrigeration_compressors.csv +4 -4
- data/lib/openstudio-standards/service_water_heating/create_water_heater.rb +1 -2
- data/lib/openstudio-standards/service_water_heating/create_water_use.rb +5 -5
- data/lib/openstudio-standards/space_type/data/level_1_space_types.json +612 -0
- data/lib/openstudio-standards/space_type/standards_space_type.rb +53 -0
- data/lib/openstudio-standards/standards/Standards.AirConditionerVariableRefrigerantFlow.rb +8 -26
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +13 -13
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +0 -24
- data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +6 -43
- data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +7 -24
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +19 -44
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +25 -50
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +25 -33
- data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +9 -22
- data/lib/openstudio-standards/standards/Standards.CoilDX.rb +15 -157
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +18 -105
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +3 -23
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +0 -24
- data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +2 -86
- data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +0 -107
- data/lib/openstudio-standards/standards/Standards.Model.rb +45 -20
- data/lib/openstudio-standards/standards/Standards.People.rb +113 -0
- data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +11 -11
- data/lib/openstudio-standards/standards/Standards.Pump.rb +2 -147
- data/lib/openstudio-standards/standards/Standards.PumpVariableSpeed.rb +57 -41
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +30 -153
- data/lib/openstudio-standards/standards/Standards.Ventilation.rb +74 -0
- data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PlantLoop.rb +4 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps_heating.json +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +37 -112
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.spc_typ.json +37 -102
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps_heating.json +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +37 -112
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps_heating.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.BoilerHotWater.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.spc_typ.json +37 -102
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps_heating.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.BoilerHotWater.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.spc_typ.json +45 -109
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_pumps_heating.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.BoilerHotWater.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoilHeatingGas.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.spc_typ.json +45 -109
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_pumps_heating.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +0 -200
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/comstock_doe_ref_pre_1980.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ChillerElectricEIR.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXSingleSpeed.rb +2 -68
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXTwoSpeed.rb +2 -35
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilDX.rb +42 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingDXSingleSpeed.rb +5 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingGas.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019_WaterHeaterMixed.rb +2 -4
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.curves.json +0 -200
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.fans.json +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/ashrae_90_1_prm.UserData.rb +7 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_enums.rb +0 -1
- data/lib/openstudio-standards/standards/cbes/data/cbes.curves.json +0 -200
- data/lib/openstudio-standards/standards/deer/data/deer.curves.json +0 -200
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +21 -37
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/building_envelope.rb +12 -11
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +68 -27
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +64 -25
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +9 -14
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_systems.rb +4 -4
- data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +1 -1
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +115 -112
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +637 -249
- data/lib/openstudio-standards/standards/necb/NECB2011/beps_compliance_path.rb +16 -12
- data/lib/openstudio-standards/standards/necb/NECB2011/building_envelope.rb +799 -46
- data/lib/openstudio-standards/standards/necb/NECB2011/data/chillers.json +33 -51
- data/lib/openstudio-standards/standards/necb/NECB2011/data/constants.json +75 -7
- data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +25 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/HighriseApartmentMult.osm +14272 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/heat_pumps_heating.json +21 -15
- data/lib/openstudio-standards/standards/necb/NECB2011/data/necb_2015_table_c1.json +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/space_types.json +437 -437
- data/lib/openstudio-standards/standards/necb/NECB2011/data/systems.json +516 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/systems_including_sys5.json +588 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_namer.rb +489 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +18 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +48 -5
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +2 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +35 -27
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +34 -23
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +8 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +68 -150
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +444 -134
- data/lib/openstudio-standards/standards/necb/NECB2011/system_fuels.rb +61 -1
- data/lib/openstudio-standards/standards/necb/NECB2015/data/heat_pumps_heating.json +10 -2
- data/lib/openstudio-standards/standards/necb/NECB2015/data/space_types.json +636 -636
- data/lib/openstudio-standards/standards/necb/NECB2015/data/unitary_acs.json +38 -38
- data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +17 -8
- data/lib/openstudio-standards/standards/necb/NECB2017/data/space_types.json +636 -636
- data/lib/openstudio-standards/standards/necb/NECB2020/data/chillers.json +71 -71
- data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps_heating.json +16 -6
- data/lib/openstudio-standards/standards/necb/NECB2020/data/unitary_acs.json +60 -61
- data/lib/openstudio-standards/standards/necb/NECB2020/service_water_heating.rb +30 -30
- data/lib/openstudio-standards/standards/necb/README.md +343 -0
- data/lib/openstudio-standards/standards/necb/common/btap_analysis.rb +79 -0
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +206 -32
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +75 -43
- data/lib/openstudio-standards/standards/necb/common/eccc_electric_grid_intensity_20250311.csv +14 -0
- data/lib/openstudio-standards/standards/necb/common/nir_gas_grid_intensity_20250311.csv +14 -0
- data/lib/openstudio-standards/standards/necb/common/system_types.yaml +0 -0
- data/lib/openstudio-standards/thermal_zone/{thermal_zone.rb → information.rb} +12 -45
- data/lib/openstudio-standards/thermal_zone/thermostat_schedules.rb +152 -0
- data/lib/openstudio-standards/utilities/logging.rb +18 -14
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards/weather/modify.rb +2 -2
- data/lib/openstudio-standards/weather/stat_file.rb +2 -2
- data/lib/openstudio-standards.rb +67 -38
- metadata +141 -50
- data/lib/openstudio-standards/hvac/components/create.rb +0 -169
- data/lib/openstudio-standards/hvac/components/modify.rb +0 -42
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +0 -438
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.BoilerHotWater.rb +0 -123
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +0 -216
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXSingleSpeed.rb +0 -273
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +0 -159
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWater.rb +0 -77
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +0 -154
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +0 -214
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingElectric.rb +0 -53
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingGas.rb +0 -72
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWater.rb +0 -95
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +0 -125
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.ControllerWaterCoil.rb +0 -17
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.transformers.rb +0 -90
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Pump.rb +0 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.PumpVariableSpeed.rb +0 -70
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +0 -590
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +0 -901
- data/lib/openstudio-standards/standards/Standards.FanConstantVolume.rb +0 -5
- data/lib/openstudio-standards/standards/Standards.FanOnOff.rb +0 -5
- data/lib/openstudio-standards/standards/Standards.FanZoneExhaust.rb +0 -5
- data/lib/openstudio-standards/standards/Standards.HeaderedPumpsConstantSpeed.rb +0 -5
- data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +0 -55
- data/lib/openstudio-standards/standards/Standards.PumpConstantSpeed.rb +0 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanConstantVolume.rb +0 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanOnOff.rb +0 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanZoneExhaust.rb +0 -5
- data/lib/openstudio-standards/standards/cbes/data/cbes.fans.json +0 -328
- data/lib/openstudio-standards/standards/deer/data/deer.fans.json +0 -328
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PumpVariableSpeed.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.PumpVariableSpeed.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.PumpVariableSpeed.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.PumpVariableSpeed.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PumpVariableSpeed.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Pump.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PumpVariableSpeed.rb +0 -0
|
@@ -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
|
|
@@ -555,7 +550,7 @@ class Standard
|
|
|
555
550
|
# the PRM-RM; Note that the PRM-RM only suggest to increase
|
|
556
551
|
# air zone air flow, but the zone sizing factor in EnergyPlus
|
|
557
552
|
# increase both air flow and load.
|
|
558
|
-
umlh = OpenstudioStandards::SqlFile.model_get_annual_occupied_unmet_hours(
|
|
553
|
+
umlh = OpenstudioStandards::SqlFile.model_get_annual_occupied_unmet_hours(model)
|
|
559
554
|
if umlh > 300
|
|
560
555
|
model.getThermalZones.each do |thermal_zone|
|
|
561
556
|
# Cooling adjustments
|
|
@@ -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)
|
|
@@ -3054,11 +3049,24 @@ if !applicable_zones.nil? && !applicable_zones.include?(zone)
|
|
|
3054
3049
|
# @return [OpenStudio::Model::Construction] construction object
|
|
3055
3050
|
# @todo make return an OptionalConstruction
|
|
3056
3051
|
def model_add_construction(model, construction_name, construction_props = nil, surface = nil)
|
|
3052
|
+
intended_surface_type = construction_props&.[]('intended_surface_type') || ''
|
|
3053
|
+
|
|
3057
3054
|
# First check model and return construction if it already exists
|
|
3058
3055
|
model.getConstructions.sort.each do |construction|
|
|
3059
3056
|
if construction.name.get.to_s == construction_name
|
|
3060
3057
|
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Model', "Already added construction: #{construction_name}")
|
|
3061
|
-
|
|
3058
|
+
valid = true
|
|
3059
|
+
if !surface.nil?
|
|
3060
|
+
if intended_surface_type == 'GroundContactFloor' && construction.iddObjectType.valueName != 'OS_Construction_FfactorGroundFloor'
|
|
3061
|
+
valid = false
|
|
3062
|
+
elsif intended_surface_type == 'GroundContactWall' && construction.iddObjectType.valueName != 'OS_Construction_CfactorUndergroundWall'
|
|
3063
|
+
valid = false
|
|
3064
|
+
end
|
|
3065
|
+
end
|
|
3066
|
+
if valid
|
|
3067
|
+
return construction
|
|
3068
|
+
end
|
|
3069
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Model', "Already added construction: '#{construction_name}' but its type '#{construction.iddObjectType.valueName}' is not valid for the intended surface type '#{intended_surface_type}'. A new construction will be created.")
|
|
3062
3070
|
end
|
|
3063
3071
|
end
|
|
3064
3072
|
|
|
@@ -3076,12 +3084,31 @@ if !applicable_zones.nil? && !applicable_zones.include?(zone)
|
|
|
3076
3084
|
return OpenStudio::Model::OptionalConstruction.new
|
|
3077
3085
|
end
|
|
3078
3086
|
|
|
3087
|
+
intended_surface_type = data["intended_surface_type"]
|
|
3088
|
+
intended_surface_type ||= ''
|
|
3089
|
+
|
|
3079
3090
|
# Make a new construction and set the standards details
|
|
3080
|
-
|
|
3081
|
-
|
|
3082
|
-
|
|
3083
|
-
|
|
3084
|
-
|
|
3091
|
+
is_layered_construction = true
|
|
3092
|
+
|
|
3093
|
+
if intended_surface_type == 'GroundContactFloor' && !surface.nil?
|
|
3094
|
+
if construction_props
|
|
3095
|
+
construction = OpenStudio::Model::FFactorGroundFloorConstruction.new(model)
|
|
3096
|
+
is_layered_construction = false
|
|
3097
|
+
else
|
|
3098
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Model', "Construction properties not specified for '#{construction_name}', cannot create F-Factor Ground Floor Construction. A regular construction will be created instead, and Surface '#{surface.name}' will be set to use the 'Ground' outside boundary condition (previously '#{surface.outsideBoundaryCondition}').")
|
|
3099
|
+
surface.setOutsideBoundaryCondition('Ground')
|
|
3100
|
+
end
|
|
3101
|
+
elsif intended_surface_type == 'GroundContactWall' && !surface.nil?
|
|
3102
|
+
if construction_props
|
|
3103
|
+
construction = OpenStudio::Model::CFactorUndergroundWallConstruction.new(model)
|
|
3104
|
+
is_layered_construction = false
|
|
3105
|
+
else
|
|
3106
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Model', "Construction properties not specified for '#{construction_name}', cannot create C-Factor Underground Wall Construction. A regular construction will be created instead, and Surface '#{surface.name}' will be set to use the 'Ground' outside boundary condition (previously '#{surface.outsideBoundaryCondition}').")
|
|
3107
|
+
surface.setOutsideBoundaryCondition('Ground')
|
|
3108
|
+
end
|
|
3109
|
+
end
|
|
3110
|
+
|
|
3111
|
+
if is_layered_construction
|
|
3085
3112
|
construction = OpenStudio::Model::Construction.new(model)
|
|
3086
3113
|
# Add the material layers to the construction
|
|
3087
3114
|
layers = OpenStudio::Model::MaterialVector.new
|
|
@@ -3096,8 +3123,6 @@ if !applicable_zones.nil? && !applicable_zones.include?(zone)
|
|
|
3096
3123
|
construction.setName(construction_name)
|
|
3097
3124
|
standards_info = construction.standardsInformation
|
|
3098
3125
|
|
|
3099
|
-
intended_surface_type = data['intended_surface_type']
|
|
3100
|
-
intended_surface_type ||= ''
|
|
3101
3126
|
standards_info.setIntendedSurfaceType(intended_surface_type)
|
|
3102
3127
|
|
|
3103
3128
|
standards_construction_type = data['standards_construction_type']
|