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
|
@@ -825,10 +825,10 @@ class Standard
|
|
|
825
825
|
plant_loop.supplyComponents.each do |sc|
|
|
826
826
|
if sc.to_PumpVariableSpeed.is_initialized
|
|
827
827
|
pump = sc.to_PumpVariableSpeed.get
|
|
828
|
-
pump_variable_speed_set_control_type(pump, pri_control_type)
|
|
828
|
+
OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: pri_control_type)
|
|
829
829
|
elsif sc.to_HeaderedPumpsVariableSpeed.is_initialized
|
|
830
830
|
pump = sc.to_HeaderedPumpsVariableSpeed.get
|
|
831
|
-
|
|
831
|
+
OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: pri_control_type)
|
|
832
832
|
end
|
|
833
833
|
end
|
|
834
834
|
|
|
@@ -836,10 +836,10 @@ class Standard
|
|
|
836
836
|
plant_loop.demandComponents.each do |sc|
|
|
837
837
|
if sc.to_PumpVariableSpeed.is_initialized
|
|
838
838
|
pump = sc.to_PumpVariableSpeed.get
|
|
839
|
-
pump_variable_speed_set_control_type(pump, sec_control_type)
|
|
839
|
+
OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: sec_control_type)
|
|
840
840
|
elsif sc.to_HeaderedPumpsVariableSpeed.is_initialized
|
|
841
841
|
pump = sc.to_HeaderedPumpsVariableSpeed.get
|
|
842
|
-
|
|
842
|
+
OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: sec_control_type)
|
|
843
843
|
end
|
|
844
844
|
end
|
|
845
845
|
|
|
@@ -869,7 +869,7 @@ class Standard
|
|
|
869
869
|
plant_loop.supplyComponents.each do |sc|
|
|
870
870
|
if sc.to_PumpVariableSpeed.is_initialized
|
|
871
871
|
pump = sc.to_PumpVariableSpeed.get
|
|
872
|
-
pump_variable_speed_set_control_type(pump, control_type)
|
|
872
|
+
OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: control_type)
|
|
873
873
|
end
|
|
874
874
|
end
|
|
875
875
|
|
|
@@ -898,10 +898,10 @@ class Standard
|
|
|
898
898
|
plant_loop.supplyComponents.each do |sc|
|
|
899
899
|
if sc.to_PumpVariableSpeed.is_initialized
|
|
900
900
|
pump = sc.to_PumpVariableSpeed.get
|
|
901
|
-
pump_variable_speed_set_control_type(pump, control_type)
|
|
901
|
+
OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: control_type)
|
|
902
902
|
elsif sc.to_HeaderedPumpsVariableSpeed.is_initialized
|
|
903
903
|
pump = sc.to_HeaderedPumpsVariableSpeed.get
|
|
904
|
-
|
|
904
|
+
OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: control_type)
|
|
905
905
|
end
|
|
906
906
|
end
|
|
907
907
|
|
|
@@ -1274,12 +1274,12 @@ class Standard
|
|
|
1274
1274
|
plant_loop.supplyComponents.each do |component|
|
|
1275
1275
|
if component.to_PumpConstantSpeed.is_initialized
|
|
1276
1276
|
pump = component.to_PumpConstantSpeed.get
|
|
1277
|
-
pump_rated_w_per_gpm =
|
|
1277
|
+
pump_rated_w_per_gpm = OpenstudioStandards::HVAC.pump_get_rated_w_per_gpm(pump)
|
|
1278
1278
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "'#{loop_type}' Loop #{plant_loop.name} - Primary (Supply) Constant Speed Pump '#{pump.name}' - pump_rated_w_per_gpm #{pump_rated_w_per_gpm} W/GPM")
|
|
1279
1279
|
supply_w_per_gpm += pump_rated_w_per_gpm
|
|
1280
1280
|
elsif component.to_PumpVariableSpeed.is_initialized
|
|
1281
1281
|
pump = component.to_PumpVariableSpeed.get
|
|
1282
|
-
pump_rated_w_per_gpm =
|
|
1282
|
+
pump_rated_w_per_gpm = OpenstudioStandards::HVAC.pump_get_rated_w_per_gpm(pump)
|
|
1283
1283
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "'#{loop_type}' Loop #{plant_loop.name} - Primary (Supply) VSD Pump '#{pump.name}' - pump_rated_w_per_gpm #{pump_rated_w_per_gpm} W/GPM")
|
|
1284
1284
|
supply_w_per_gpm += pump_rated_w_per_gpm
|
|
1285
1285
|
end
|
|
@@ -1291,12 +1291,12 @@ class Standard
|
|
|
1291
1291
|
demand_pumps.each do |component|
|
|
1292
1292
|
if component.to_PumpConstantSpeed.is_initialized
|
|
1293
1293
|
pump = component.to_PumpConstantSpeed.get
|
|
1294
|
-
pump_rated_w_per_gpm =
|
|
1294
|
+
pump_rated_w_per_gpm = OpenstudioStandards::HVAC.pump_get_rated_w_per_gpm(pump)
|
|
1295
1295
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "'#{loop_type}' Loop #{plant_loop.name} - Secondary (Demand) Constant Speed Pump '#{pump.name}' - pump_rated_w_per_gpm #{pump_rated_w_per_gpm} W/GPM")
|
|
1296
1296
|
demand_w_per_gpm += pump_rated_w_per_gpm
|
|
1297
1297
|
elsif component.to_PumpVariableSpeed.is_initialized
|
|
1298
1298
|
pump = component.to_PumpVariableSpeed.get
|
|
1299
|
-
pump_rated_w_per_gpm =
|
|
1299
|
+
pump_rated_w_per_gpm = OpenstudioStandards::HVAC.pump_get_rated_w_per_gpm(pump)
|
|
1300
1300
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "'#{loop_type}' Loop #{plant_loop.name} - Secondary (Demand) VSD Pump '#{pump.name}' - pump_rated_w_per_gpm #{pump_rated_w_per_gpm} W/GPM")
|
|
1301
1301
|
demand_w_per_gpm += pump_rated_w_per_gpm
|
|
1302
1302
|
end
|
|
@@ -81,7 +81,7 @@ module Pump
|
|
|
81
81
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Pump', "For #{pump.name}: motor nameplate = #{nominal_hp}HP, motor eff = #{(motor_efficiency * 100).round(2)}%; #{target_w_per_gpm.round} W/gpm translates to a pressure rise of #{pressure_rise_ft_h2o.round(2)} ftH2O.")
|
|
82
82
|
|
|
83
83
|
# Calculate the W/gpm for verification
|
|
84
|
-
calculated_w =
|
|
84
|
+
calculated_w = OpenstudioStandards::HVAC.pump_get_power(pump)
|
|
85
85
|
|
|
86
86
|
calculated_w_per_gpm = calculated_w / flow_gpm
|
|
87
87
|
|
|
@@ -97,7 +97,7 @@ module Pump
|
|
|
97
97
|
# @return [Boolean] returns true if successful, false if not
|
|
98
98
|
def pump_apply_standard_minimum_motor_efficiency(pump)
|
|
99
99
|
# Get the horsepower
|
|
100
|
-
bhp =
|
|
100
|
+
bhp = OpenstudioStandards::HVAC.pump_get_brake_horsepower(pump)
|
|
101
101
|
|
|
102
102
|
# Find the motor efficiency
|
|
103
103
|
motor_eff, nominal_hp = pump_standard_minimum_motor_efficiency_and_size(pump, bhp)
|
|
@@ -180,149 +180,4 @@ module Pump
|
|
|
180
180
|
|
|
181
181
|
return [motor_eff, nominal_hp]
|
|
182
182
|
end
|
|
183
|
-
|
|
184
|
-
# Determines the pump power (W) based on flow rate, pressure rise,
|
|
185
|
-
# and total pump efficiency(impeller eff * motor eff).
|
|
186
|
-
# Uses the E+ default assumption of 0.78 impeller efficiency.
|
|
187
|
-
#
|
|
188
|
-
# @param pump [OpenStudio::Model::StraightComponent] pump object, allowable types:
|
|
189
|
-
# PumpConstantSpeed, PumpVariableSpeed
|
|
190
|
-
# @return [Double] pump power in watts
|
|
191
|
-
def pump_pumppower(pump)
|
|
192
|
-
# Get flow rate (whether autosized or hard-sized)
|
|
193
|
-
flow_m3_per_s = 0
|
|
194
|
-
flow_m3_per_s = if pump.to_PumpVariableSpeed.is_initialized || pump.to_PumpConstantSpeed.is_initialized
|
|
195
|
-
if pump.ratedFlowRate.is_initialized
|
|
196
|
-
pump.ratedFlowRate.get
|
|
197
|
-
elsif pump.autosizedRatedFlowRate.is_initialized
|
|
198
|
-
pump.autosizedRatedFlowRate.get
|
|
199
|
-
end
|
|
200
|
-
elsif pump.to_HeaderedPumpsVariableSpeed.is_initialized || pump.to_HeaderedPumpsConstantSpeed.is_initialized
|
|
201
|
-
if pump.totalRatedFlowRate.is_initialized
|
|
202
|
-
pump.totalRatedFlowRate.get
|
|
203
|
-
elsif pump.autosizedTotalRatedFlowRate.is_initialized
|
|
204
|
-
pump.autosizedTotalRatedFlowRate.get
|
|
205
|
-
end
|
|
206
|
-
end
|
|
207
|
-
|
|
208
|
-
# E+ default impeller efficiency
|
|
209
|
-
# http://bigladdersoftware.com/epx/docs/8-4/engineering-reference/component-sizing.html#pump-sizing
|
|
210
|
-
impeller_eff = 0.78
|
|
211
|
-
|
|
212
|
-
# Get the motor efficiency
|
|
213
|
-
motor_eff = pump.motorEfficiency
|
|
214
|
-
|
|
215
|
-
# Calculate the total efficiency
|
|
216
|
-
# which includes both motor and
|
|
217
|
-
# impeller efficiency.
|
|
218
|
-
pump_total_eff = impeller_eff * motor_eff
|
|
219
|
-
|
|
220
|
-
# Get the pressure rise (Pa)
|
|
221
|
-
pressure_rise_pa = pump.ratedPumpHead
|
|
222
|
-
|
|
223
|
-
# Calculate the pump power (W)
|
|
224
|
-
pump_power_w = pressure_rise_pa * flow_m3_per_s / pump_total_eff
|
|
225
|
-
|
|
226
|
-
return pump_power_w
|
|
227
|
-
end
|
|
228
|
-
|
|
229
|
-
# Determines the brake horsepower of the pump based on flow rate,
|
|
230
|
-
# pressure rise, and impeller efficiency.
|
|
231
|
-
#
|
|
232
|
-
# @param pump [OpenStudio::Model::StraightComponent] pump object, allowable types:
|
|
233
|
-
# PumpConstantSpeed, PumpVariableSpeed
|
|
234
|
-
# @return [Double] brake horsepower
|
|
235
|
-
def pump_brake_horsepower(pump)
|
|
236
|
-
# Get flow rate (whether autosized or hard-sized)
|
|
237
|
-
# Get flow rate (whether autosized or hard-sized)
|
|
238
|
-
flow_m3_per_s = 0
|
|
239
|
-
flow_m3_per_s = if pump.to_PumpVariableSpeed.is_initialized || pump.to_PumpConstantSpeed.is_initialized
|
|
240
|
-
if pump.ratedFlowRate.is_initialized
|
|
241
|
-
pump.ratedFlowRate.get
|
|
242
|
-
elsif pump.autosizedRatedFlowRate.is_initialized
|
|
243
|
-
pump.autosizedRatedFlowRate.get
|
|
244
|
-
end
|
|
245
|
-
elsif pump.to_HeaderedPumpsVariableSpeed.is_initialized || pump.to_HeaderedPumpsConstantSpeed.is_initialized
|
|
246
|
-
if pump.totalRatedFlowRate.is_initialized
|
|
247
|
-
pump.totalRatedFlowRate.get
|
|
248
|
-
elsif pump.autosizedTotalRatedFlowRate.is_initialized
|
|
249
|
-
pump.autosizedTotalRatedFlowRate.get
|
|
250
|
-
end
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
# E+ default impeller efficiency
|
|
254
|
-
# http://bigladdersoftware.com/epx/docs/8-4/engineering-reference/component-sizing.html#pump-sizing
|
|
255
|
-
impeller_eff = 0.78
|
|
256
|
-
|
|
257
|
-
# Get the pressure rise (Pa)
|
|
258
|
-
pressure_rise_pa = pump.ratedPumpHead
|
|
259
|
-
|
|
260
|
-
# Calculate the pump power (W)
|
|
261
|
-
pump_power_w = pressure_rise_pa * flow_m3_per_s / impeller_eff
|
|
262
|
-
|
|
263
|
-
# Convert to HP
|
|
264
|
-
pump_power_hp = pump_power_w / 745.7 # 745.7 W/HP
|
|
265
|
-
|
|
266
|
-
return pump_power_hp
|
|
267
|
-
end
|
|
268
|
-
|
|
269
|
-
# Determines the horsepower of the pump motor, including motor efficiency and pump impeller efficiency.
|
|
270
|
-
#
|
|
271
|
-
# @param pump [OpenStudio::Model::StraightComponent] pump object, allowable types:
|
|
272
|
-
# PumpConstantSpeed, PumpVariableSpeed
|
|
273
|
-
# @return [Double] motor horsepower
|
|
274
|
-
def pump_motor_horsepower(pump)
|
|
275
|
-
# Get the pump power
|
|
276
|
-
pump_power_w = pump_pumppower(pump)
|
|
277
|
-
|
|
278
|
-
# Convert to HP
|
|
279
|
-
pump_hp = pump_power_w / 745.7 # 745.7 W/HP
|
|
280
|
-
|
|
281
|
-
return pump_hp
|
|
282
|
-
end
|
|
283
|
-
|
|
284
|
-
# Determines the rated watts per GPM of the pump
|
|
285
|
-
#
|
|
286
|
-
# @param pump [OpenStudio::Model::StraightComponent] pump object, allowable types:
|
|
287
|
-
# PumpConstantSpeed, PumpVariableSpeed
|
|
288
|
-
# @return [Double] rated power consumption per flow in watts per gpm, W*min/gal
|
|
289
|
-
def pump_rated_w_per_gpm(pump)
|
|
290
|
-
# Get design power (whether autosized or hard-sized)
|
|
291
|
-
rated_power_w = 0
|
|
292
|
-
if pump.ratedPowerConsumption.is_initialized
|
|
293
|
-
rated_power_w = pump.ratedPowerConsumption.get
|
|
294
|
-
elsif pump.autosizedRatedPowerConsumption.is_initialized
|
|
295
|
-
rated_power_w = pump.autosizedRatedPowerConsumption.get
|
|
296
|
-
else
|
|
297
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Pump', "For #{pump.name}, could not find rated pump power consumption, cannot determine w per gpm correctly.")
|
|
298
|
-
return 0.0
|
|
299
|
-
end
|
|
300
|
-
|
|
301
|
-
rated_m3_per_s = 0
|
|
302
|
-
if pump.to_PumpVariableSpeed.is_initialized || pump.to_PumpConstantSpeed.is_initialized
|
|
303
|
-
if pump.ratedFlowRate.is_initialized
|
|
304
|
-
rated_m3_per_s = pump.ratedFlowRate.get
|
|
305
|
-
elsif pump.autosizedRatedFlowRate.is_initialized
|
|
306
|
-
rated_m3_per_s = pump.autosizedRatedFlowRate.get
|
|
307
|
-
else
|
|
308
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Pump', "For #{pump.name}, could not find rated pump Flow Rate, cannot determine w per gpm correctly.")
|
|
309
|
-
return 0.0
|
|
310
|
-
end
|
|
311
|
-
elsif pump.to_HeaderedPumpsVariableSpeed.is_initialized || pump.to_HeaderedPumpsConstantSpeed.is_initialized
|
|
312
|
-
if pump.totalRatedFlowRate.is_initialized
|
|
313
|
-
rated_m3_per_s = pump.totalRatedFlowRate.get
|
|
314
|
-
elsif pump.autosizedTotalRatedFlowRate.is_initialized
|
|
315
|
-
rated_m3_per_s = pump.autosizedTotalRatedFlowRate.get
|
|
316
|
-
else
|
|
317
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Pump', "For #{pump.name}, could not find rated pump Flow Rate, cannot determine w per gpm correctly.")
|
|
318
|
-
return 0.0
|
|
319
|
-
end
|
|
320
|
-
end
|
|
321
|
-
|
|
322
|
-
rated_w_per_m3s = rated_power_w / rated_m3_per_s
|
|
323
|
-
|
|
324
|
-
rated_w_per_gpm = OpenStudio.convert(rated_w_per_m3s, 'W*s/m^3', 'W*min/gal').get
|
|
325
|
-
|
|
326
|
-
return rated_w_per_gpm
|
|
327
|
-
end
|
|
328
183
|
end
|
|
@@ -1,54 +1,70 @@
|
|
|
1
1
|
class Standard
|
|
2
|
-
# @!group PumpVariableSpeed
|
|
3
|
-
|
|
4
2
|
include Pump
|
|
5
3
|
|
|
6
|
-
#
|
|
4
|
+
# Determine and set type of part load control type for heating and chilled
|
|
5
|
+
# water variable speed pumps
|
|
7
6
|
#
|
|
8
|
-
# @param
|
|
9
|
-
# @
|
|
10
|
-
def
|
|
11
|
-
#
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
coeff_a = 0.0
|
|
24
|
-
coeff_b = 3.2485
|
|
25
|
-
coeff_c = -4.7443
|
|
26
|
-
coeff_d = 2.5294
|
|
27
|
-
when 'VSD No Reset'
|
|
28
|
-
coeff_a = 0.0
|
|
29
|
-
coeff_b = 0.5726
|
|
30
|
-
coeff_c = -0.301
|
|
31
|
-
coeff_d = 0.7347
|
|
32
|
-
when 'VSD DP Reset'
|
|
33
|
-
coeff_a = 0.0
|
|
34
|
-
coeff_b = 0.0205
|
|
35
|
-
coeff_c = 0.4101
|
|
36
|
-
coeff_d = 0.5753
|
|
7
|
+
# @param pump [OpenStudio::Model::PumpVariableSpeed] OpenStudio pump object
|
|
8
|
+
# @return [Boolean] Returns true if applicable, false otherwise
|
|
9
|
+
def pump_variable_speed_control_type(pump)
|
|
10
|
+
# Get plant loop
|
|
11
|
+
plant_loop = pump.plantLoop.get
|
|
12
|
+
|
|
13
|
+
# Get plant loop type
|
|
14
|
+
plant_loop_type = plant_loop.sizingPlant.loopType
|
|
15
|
+
return false unless plant_loop_type == 'Heating' || plant_loop_type == 'Cooling'
|
|
16
|
+
|
|
17
|
+
# Get rated pump power
|
|
18
|
+
if pump.ratedPowerConsumption.is_initialized
|
|
19
|
+
pump_rated_power_w = pump.ratedPowerConsumption.get
|
|
20
|
+
elsif pump.autosizedRatedPowerConsumption.is_initialized
|
|
21
|
+
pump_rated_power_w = pump.autosizedRatedPowerConsumption.get
|
|
37
22
|
else
|
|
38
|
-
OpenStudio.logFree(OpenStudio::
|
|
23
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Pump', "For #{pump.name}, could not find rated pump power consumption, cannot determine w per gpm correctly.")
|
|
39
24
|
return false
|
|
40
25
|
end
|
|
41
26
|
|
|
42
|
-
#
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
pump_variable_speed.setPumpControlType('Intermittent')
|
|
27
|
+
# Get nominal nameplate HP
|
|
28
|
+
pump_nominal_hp = pump_rated_power_w * pump.motorEfficiency / 745.7
|
|
29
|
+
|
|
30
|
+
# Assign peformance curves
|
|
31
|
+
control_type = pump_variable_speed_get_control_type(pump, plant_loop_type, pump_nominal_hp)
|
|
48
32
|
|
|
49
|
-
#
|
|
50
|
-
|
|
33
|
+
# Set pump part load performance curve coefficients
|
|
34
|
+
OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: control_type) if control_type
|
|
51
35
|
|
|
52
36
|
return true
|
|
53
37
|
end
|
|
38
|
+
|
|
39
|
+
# Determine type of pump part load control type
|
|
40
|
+
#
|
|
41
|
+
# @param pump [OpenStudio::Model::PumpVariableSpeed] OpenStudio pump object
|
|
42
|
+
# @param plant_loop_type [String] Type of plant loop
|
|
43
|
+
# @param pump_nominal_hp [Float] Pump nominal horsepower
|
|
44
|
+
# @return [String] Pump part load control type
|
|
45
|
+
def pump_variable_speed_get_control_type(pump, plant_loop_type, pump_nominal_hp)
|
|
46
|
+
# Get plant loop
|
|
47
|
+
plant_loop = pump.plantLoop.get
|
|
48
|
+
|
|
49
|
+
# Default assumptions are based on ASHRAE 90.1-2010 Appendix G (G3.1.3.5 and G3.1.3.10)
|
|
50
|
+
case plant_loop_type
|
|
51
|
+
when 'Heating'
|
|
52
|
+
# Determine the area served by the plant loop
|
|
53
|
+
area_served_m2 = plant_loop_total_floor_area_served(plant_loop)
|
|
54
|
+
area_served_ft2 = OpenStudio.convert(area_served_m2, 'm^2', 'ft^2').get
|
|
55
|
+
|
|
56
|
+
return 'VSD No Reset' if area_served_ft2 > 120_000
|
|
57
|
+
|
|
58
|
+
# else
|
|
59
|
+
return 'Riding Curve'
|
|
60
|
+
when 'Cooling'
|
|
61
|
+
# Get plant loop capacity capacity
|
|
62
|
+
cooling_capacity_w = plant_loop_total_cooling_capacity(plant_loop)
|
|
63
|
+
|
|
64
|
+
return 'VSD No Reset' if cooling_capacity_w >= 300
|
|
65
|
+
|
|
66
|
+
# else
|
|
67
|
+
return 'Riding Curve'
|
|
68
|
+
end
|
|
69
|
+
end
|
|
54
70
|
end
|
|
@@ -23,7 +23,7 @@ class Standard
|
|
|
23
23
|
# lookup space type properties
|
|
24
24
|
space_type_properties = model_find_object(standards_data['space_types'], search_criteria)
|
|
25
25
|
|
|
26
|
-
if space_type_properties.nil?
|
|
26
|
+
if space_type_properties.nil? || space_type_properties.empty?
|
|
27
27
|
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.SpaceType', "Space type properties lookup failed: #{search_criteria}.")
|
|
28
28
|
space_type_properties = {}
|
|
29
29
|
end
|
|
@@ -97,7 +97,7 @@ class Standard
|
|
|
97
97
|
# loads directly assigned to spaces. This method skips plenums.
|
|
98
98
|
#
|
|
99
99
|
# @param space_type [OpenStudio::Model::SpaceType] space type object
|
|
100
|
-
# @param set_people [Boolean] if true, set the people density.
|
|
100
|
+
# @param set_people [Boolean] if true, set the people density. occupancy values are in the ventilation standard.
|
|
101
101
|
# Also, assign reasonable clothing, air velocity, and work efficiency inputs
|
|
102
102
|
# to allow reasonable thermal comfort metrics to be calculated.
|
|
103
103
|
# @param set_lights [Boolean] if true, set the lighting density, lighting fraction
|
|
@@ -106,10 +106,8 @@ class Standard
|
|
|
106
106
|
# @param set_gas_equipment [Boolean] if true, set the gas equipment density
|
|
107
107
|
# @param set_ventilation [Boolean] if true, set the ventilation rates (per-person and per-area)
|
|
108
108
|
# @return [Boolean] returns true if successful, false if not
|
|
109
|
-
def space_type_apply_internal_loads(space_type, set_people, set_lights, set_electric_equipment, set_gas_equipment, set_ventilation)
|
|
109
|
+
def space_type_apply_internal_loads(space_type, set_people: true, set_lights: true, set_electric_equipment: true, set_gas_equipment: true, set_ventilation: true)
|
|
110
110
|
# Skip plenums
|
|
111
|
-
# Check if the space type name
|
|
112
|
-
# contains the word plenum.
|
|
113
111
|
if space_type.name.get.to_s.downcase.include?('plenum')
|
|
114
112
|
return false
|
|
115
113
|
end
|
|
@@ -126,87 +124,9 @@ class Standard
|
|
|
126
124
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} was not found in the standards data.")
|
|
127
125
|
return false
|
|
128
126
|
end
|
|
129
|
-
# People
|
|
130
|
-
people_have_info = false
|
|
131
|
-
occupancy_per_area = space_type_properties['occupancy_per_area'].to_f
|
|
132
|
-
people_have_info = true unless occupancy_per_area.zero?
|
|
133
|
-
|
|
134
|
-
if set_people && people_have_info
|
|
135
|
-
|
|
136
|
-
# Remove all but the first instance
|
|
137
|
-
instances = space_type.people.sort
|
|
138
|
-
if instances.empty?
|
|
139
|
-
# Create a new definition and instance
|
|
140
|
-
definition = OpenStudio::Model::PeopleDefinition.new(space_type.model)
|
|
141
|
-
definition.setName("#{space_type.name} People Definition")
|
|
142
|
-
instance = OpenStudio::Model::People.new(definition)
|
|
143
|
-
instance.setName("#{space_type.name} People")
|
|
144
|
-
instance.setSpaceType(space_type)
|
|
145
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} had no people, one has been created.")
|
|
146
|
-
instances << instance
|
|
147
|
-
elsif instances.size > 1
|
|
148
|
-
instances.each_with_index do |inst, i|
|
|
149
|
-
next if i.zero?
|
|
150
127
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
end
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
# Modify the definition of the instance
|
|
157
|
-
space_type.people.sort.each do |inst|
|
|
158
|
-
definition = inst.peopleDefinition
|
|
159
|
-
unless occupancy_per_area.zero?
|
|
160
|
-
definition.setPeopleperSpaceFloorArea(OpenStudio.convert(occupancy_per_area / 1000, 'people/ft^2', 'people/m^2').get)
|
|
161
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set occupancy to #{occupancy_per_area} people/1000 ft^2.")
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
# set fraction radiant ##
|
|
165
|
-
definition.setFractionRadiant(0.3)
|
|
166
|
-
|
|
167
|
-
# Clothing schedule for thermal comfort metrics
|
|
168
|
-
clothing_sch = space_type.model.getScheduleRulesetByName('Clothing Schedule')
|
|
169
|
-
if clothing_sch.is_initialized
|
|
170
|
-
clothing_sch = clothing_sch.get
|
|
171
|
-
else
|
|
172
|
-
clothing_sch = OpenStudio::Model::ScheduleRuleset.new(space_type.model)
|
|
173
|
-
clothing_sch.setName('Clothing Schedule')
|
|
174
|
-
clothing_sch.defaultDaySchedule.setName('Clothing Schedule Default Winter Clothes')
|
|
175
|
-
clothing_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 1.0)
|
|
176
|
-
sch_rule = OpenStudio::Model::ScheduleRule.new(clothing_sch)
|
|
177
|
-
sch_rule.daySchedule.setName('Clothing Schedule Summer Clothes')
|
|
178
|
-
sch_rule.daySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0.5)
|
|
179
|
-
sch_rule.setStartDate(OpenStudio::Date.new(OpenStudio::MonthOfYear.new(5), 1))
|
|
180
|
-
sch_rule.setEndDate(OpenStudio::Date.new(OpenStudio::MonthOfYear.new(9), 30))
|
|
181
|
-
end
|
|
182
|
-
inst.setClothingInsulationSchedule(clothing_sch)
|
|
183
|
-
|
|
184
|
-
# Air velocity schedule for thermal comfort metrics
|
|
185
|
-
air_velo_sch = space_type.model.getScheduleRulesetByName('Air Velocity Schedule')
|
|
186
|
-
if air_velo_sch.is_initialized
|
|
187
|
-
air_velo_sch = air_velo_sch.get
|
|
188
|
-
else
|
|
189
|
-
air_velo_sch = OpenStudio::Model::ScheduleRuleset.new(space_type.model)
|
|
190
|
-
air_velo_sch.setName('Air Velocity Schedule')
|
|
191
|
-
air_velo_sch.defaultDaySchedule.setName('Air Velocity Schedule Default')
|
|
192
|
-
air_velo_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0.2)
|
|
193
|
-
end
|
|
194
|
-
inst.setAirVelocitySchedule(air_velo_sch)
|
|
195
|
-
|
|
196
|
-
# Work efficiency schedule for thermal comfort metrics
|
|
197
|
-
work_efficiency_sch = space_type.model.getScheduleRulesetByName('Work Efficiency Schedule')
|
|
198
|
-
if work_efficiency_sch.is_initialized
|
|
199
|
-
work_efficiency_sch = work_efficiency_sch.get
|
|
200
|
-
else
|
|
201
|
-
work_efficiency_sch = OpenStudio::Model::ScheduleRuleset.new(space_type.model)
|
|
202
|
-
work_efficiency_sch.setName('Work Efficiency Schedule')
|
|
203
|
-
work_efficiency_sch.defaultDaySchedule.setName('Work Efficiency Schedule Default')
|
|
204
|
-
work_efficiency_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0)
|
|
205
|
-
end
|
|
206
|
-
inst.setWorkEfficiencySchedule(work_efficiency_sch)
|
|
207
|
-
end
|
|
208
|
-
|
|
209
|
-
end
|
|
128
|
+
# People
|
|
129
|
+
space_type_apply_people(space_type) if set_people
|
|
210
130
|
|
|
211
131
|
# Lights
|
|
212
132
|
lights_have_info = false
|
|
@@ -388,53 +308,7 @@ class Standard
|
|
|
388
308
|
end
|
|
389
309
|
|
|
390
310
|
# Ventilation
|
|
391
|
-
|
|
392
|
-
ventilation_per_area = space_type_properties['ventilation_per_area'].to_f
|
|
393
|
-
ventilation_per_person = space_type_properties['ventilation_per_person'].to_f
|
|
394
|
-
ventilation_ach = space_type_properties['ventilation_air_changes'].to_f
|
|
395
|
-
ventilation_have_info = true unless ventilation_per_area.zero?
|
|
396
|
-
ventilation_have_info = true unless ventilation_per_person.zero?
|
|
397
|
-
ventilation_have_info = true unless ventilation_ach.zero?
|
|
398
|
-
|
|
399
|
-
# Get the design OA or create a new one if none exists
|
|
400
|
-
ventilation = space_type.designSpecificationOutdoorAir
|
|
401
|
-
if ventilation.is_initialized
|
|
402
|
-
ventilation = ventilation.get
|
|
403
|
-
else
|
|
404
|
-
ventilation = OpenStudio::Model::DesignSpecificationOutdoorAir.new(space_type.model)
|
|
405
|
-
ventilation.setName("#{space_type.name} Ventilation")
|
|
406
|
-
space_type.setDesignSpecificationOutdoorAir(ventilation)
|
|
407
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} had no ventilation specification, one has been created.")
|
|
408
|
-
end
|
|
409
|
-
|
|
410
|
-
if set_ventilation && ventilation_have_info
|
|
411
|
-
|
|
412
|
-
# Modify the ventilation properties
|
|
413
|
-
ventilation_method = model_ventilation_method(space_type.model)
|
|
414
|
-
ventilation.setOutdoorAirMethod(ventilation_method)
|
|
415
|
-
unless ventilation_per_area.zero?
|
|
416
|
-
ventilation.setOutdoorAirFlowperFloorArea(OpenStudio.convert(ventilation_per_area.to_f, 'ft^3/min*ft^2', 'm^3/s*m^2').get)
|
|
417
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set ventilation per area to #{ventilation_per_area} cfm/ft^2.")
|
|
418
|
-
end
|
|
419
|
-
unless ventilation_per_person.zero?
|
|
420
|
-
ventilation.setOutdoorAirFlowperPerson(OpenStudio.convert(ventilation_per_person.to_f, 'ft^3/min*person', 'm^3/s*person').get)
|
|
421
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set ventilation per person to #{ventilation_per_person} cfm/person.")
|
|
422
|
-
end
|
|
423
|
-
unless ventilation_ach.zero?
|
|
424
|
-
ventilation.setOutdoorAirFlowAirChangesperHour(ventilation_ach)
|
|
425
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set ventilation to #{ventilation_ach} ACH.")
|
|
426
|
-
end
|
|
427
|
-
|
|
428
|
-
elsif set_ventilation && !ventilation_have_info
|
|
429
|
-
|
|
430
|
-
# All space types must have a design spec OA
|
|
431
|
-
# object for ventilation controls to work correctly,
|
|
432
|
-
# even if the values are all zero.
|
|
433
|
-
ventilation.setOutdoorAirFlowperFloorArea(0)
|
|
434
|
-
ventilation.setOutdoorAirFlowperPerson(0)
|
|
435
|
-
ventilation.setOutdoorAirFlowAirChangesperHour(0)
|
|
436
|
-
|
|
437
|
-
end
|
|
311
|
+
space_type_apply_ventilation(space_type) if set_ventilation
|
|
438
312
|
|
|
439
313
|
return true
|
|
440
314
|
end
|
|
@@ -567,11 +441,8 @@ class Standard
|
|
|
567
441
|
# @param set_lights [Boolean] if true, set the lighting schedule
|
|
568
442
|
# @param set_electric_equipment [Boolean] if true, set the electric schedule schedule
|
|
569
443
|
# @param set_gas_equipment [Boolean] if true, set the gas equipment density
|
|
570
|
-
# @param make_thermostat [Boolean] if true, makes a thermostat for this space type from the
|
|
571
|
-
# schedules listed for the space type. This thermostat is not hooked to any zone by this method,
|
|
572
|
-
# but may be found and used later.
|
|
573
444
|
# @return [Boolean] returns true if successful, false if not
|
|
574
|
-
def space_type_apply_internal_load_schedules(space_type, set_people, set_lights, set_electric_equipment, set_gas_equipment, set_ventilation
|
|
445
|
+
def space_type_apply_internal_load_schedules(space_type, set_people: true, set_lights: true, set_electric_equipment: true, set_gas_equipment: true, set_ventilation: true)
|
|
575
446
|
# Get the standards data
|
|
576
447
|
space_type_properties = space_type_get_standards_data(space_type)
|
|
577
448
|
|
|
@@ -599,14 +470,11 @@ class Standard
|
|
|
599
470
|
default_sch_set.setPeopleActivityLevelSchedule(model_add_schedule(space_type.model, occupancy_activity_sch))
|
|
600
471
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set occupant activity schedule to #{occupancy_activity_sch}.")
|
|
601
472
|
end
|
|
602
|
-
|
|
603
473
|
end
|
|
604
474
|
|
|
605
475
|
# Lights
|
|
606
476
|
if set_lights
|
|
607
|
-
|
|
608
477
|
apply_lighting_schedule(space_type, space_type_properties, default_sch_set)
|
|
609
|
-
|
|
610
478
|
end
|
|
611
479
|
|
|
612
480
|
# Electric Equipment
|
|
@@ -627,22 +495,31 @@ class Standard
|
|
|
627
495
|
end
|
|
628
496
|
end
|
|
629
497
|
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
thermostat = OpenStudio::Model::ThermostatSetpointDualSetpoint.new(space_type.model)
|
|
633
|
-
thermostat.setName("#{space_type.name} Thermostat")
|
|
498
|
+
return true
|
|
499
|
+
end
|
|
634
500
|
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
501
|
+
# Makes a thermostat for this space type from the schedules listed for the space type.
|
|
502
|
+
# This thermostat is not hooked to any zone by this method,but may be found and used later.
|
|
503
|
+
#
|
|
504
|
+
# @param space_type [OpenStudio::Model::SpaceType] space type object
|
|
505
|
+
# @return [Boolean] returns true if successful, false if not
|
|
506
|
+
def space_type_apply_thermostat_schedules(space_type)
|
|
507
|
+
# Get the standards data
|
|
508
|
+
space_type_properties = space_type_get_standards_data(space_type)
|
|
640
509
|
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
510
|
+
thermostat = OpenStudio::Model::ThermostatSetpointDualSetpoint.new(space_type.model)
|
|
511
|
+
thermostat.setName("#{space_type.name} Thermostat")
|
|
512
|
+
|
|
513
|
+
heating_setpoint_sch = space_type_properties['heating_setpoint_schedule']
|
|
514
|
+
unless heating_setpoint_sch.nil?
|
|
515
|
+
thermostat.setHeatingSetpointTemperatureSchedule(model_add_schedule(space_type.model, heating_setpoint_sch))
|
|
516
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set heating setpoint schedule to #{heating_setpoint_sch}.")
|
|
517
|
+
end
|
|
518
|
+
|
|
519
|
+
cooling_setpoint_sch = space_type_properties['cooling_setpoint_schedule']
|
|
520
|
+
unless cooling_setpoint_sch.nil?
|
|
521
|
+
thermostat.setCoolingSetpointTemperatureSchedule(model_add_schedule(space_type.model, cooling_setpoint_sch))
|
|
522
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set cooling setpoint schedule to #{cooling_setpoint_sch}.")
|
|
646
523
|
end
|
|
647
524
|
|
|
648
525
|
return true
|