openstudio-standards 0.2.14 → 0.2.15.pre.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.json +0 -19
- data/data/geometry/ASHRAEMidriseApartment.json +47 -47
- data/data/geometry/ASHRAESecondarySchool.osm +2 -2
- data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
- data/data/standards/export_OpenStudio_libraries.rb +1 -1
- data/data/standards/manage_OpenStudio_Standards.rb +43 -87
- data/data/standards/metadata_units_OpenStudio_Standards-ashrae_90_1.csv +9 -0
- data/data/standards/openstudio_standards_duplicates_log.csv +142 -27
- data/data/standards/test_performance_expected_dd_results.csv +2016 -2016
- data/data/weather/CAN_NU_Iqaluit.AP.719090_CWEC2016.ddy +2316 -0
- data/data/weather/CAN_NU_Iqaluit.AP.719090_CWEC2016.epw +8768 -0
- data/data/weather/CAN_NU_Iqaluit.AP.719090_CWEC2016.stat +697 -0
- data/lib/openstudio-standards/btap/WeatherData1.json +54 -0
- data/lib/openstudio-standards/btap/WeatherData1.xlsx +0 -0
- data/lib/openstudio-standards/btap/btap_result.rb +12 -10
- data/lib/openstudio-standards/btap/envelope.rb +2 -2
- data/lib/openstudio-standards/btap/geometry.rb +96 -49
- data/lib/openstudio-standards/{utilities → btap/utilities}/Add_template_field_to_json.rb +0 -0
- data/lib/openstudio-standards/{utilities → btap/utilities}/convert_surfaces_to_adiabatic_necb_8426.rb +0 -0
- data/lib/openstudio-standards/{utilities → btap/utilities}/generate_space_types.rb +0 -0
- data/lib/openstudio-standards/{utilities → btap/utilities}/necb_to_epw_map.rb +0 -0
- data/lib/openstudio-standards/{utilities → btap/utilities}/os_sim_extract.rb +0 -0
- data/lib/openstudio-standards/{utilities → btap/utilities}/rename_surfaces.rb +0 -0
- data/lib/openstudio-standards/{utilities → btap/utilities}/round_surf_coords.rb +0 -0
- data/lib/openstudio-standards/{utilities → btap/utilities}/sched_create.rb +0 -0
- data/lib/openstudio-standards/{utilities → btap/utilities}/set_mult_to_adiabatic.rb +0 -0
- data/lib/openstudio-standards/btap/utilities/space_type.rb +78 -0
- data/lib/openstudio-standards/{utilities → btap/utilities}/weatherData1_xlsx_to_json.rb +0 -0
- data/lib/openstudio-standards/hvac_sizing/Siz.AirConditionerVariableRefrigerantFlow.rb +1 -1
- data/lib/openstudio-standards/hvac_sizing/Siz.HVACComponent.rb +1 -1
- data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +20 -6
- data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +6 -6
- data/lib/openstudio-standards/hvac_sizing/Siz.WaterHeaterMixed.rb +2 -2
- data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACTerminalUnitVariableRefrigerantFlow.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PumpVariableSpeed.rb +6 -7
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanConstantVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanOnOff.rb +5 -5
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanVariableVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.PumpVariableSpeed.rb +6 -7
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanConstantVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanOnOff.rb +5 -5
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanVariableVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Model.elevators.rb +6 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Model.rb +10 -9
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.PumpVariableSpeed.rb +9 -11
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanConstantVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanOnOff.rb +5 -5
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanVariableVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.elevators.rb +11 -7
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.rb +17 -16
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.PumpVariableSpeed.rb +9 -11
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.hvac_systems.rb +4 -2
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanConstantVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanOnOff.rb +5 -5
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanVariableVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.elevators.rb +11 -7
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +23 -22
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PumpVariableSpeed.rb +9 -10
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.hvac_systems.rb +4 -2
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanConstantVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanOnOff.rb +5 -5
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanVariableVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.elevators.rb +11 -7
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +23 -22
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Pump.rb +89 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PumpVariableSpeed.rb +9 -10
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +76 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.hvac_systems.rb +22 -2
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.elevators.rb +11 -11
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.refrigeration.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.CoilHeatingGas.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.elevators.rb +11 -11
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.refrigeration.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.FanConstantVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.FanOnOff.rb +5 -5
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.FanVariableVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.HeatExchangerAirToAirSensibleAndLatent.rb +2 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.elevators.rb +11 -7
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.rb +10 -10
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.hvac_systems.rb +4 -2
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanConstantVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanOnOff.rb +5 -5
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanVariableVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerAirToAirSensibleAndLatent.rb +2 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.elevators.rb +11 -7
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +10 -10
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.hvac_systems.rb +4 -2
- data/lib/openstudio-standards/prototypes/cbes/cbes.Model.elevators.rb +3 -6
- data/lib/openstudio-standards/prototypes/cbes/cbes.refrigeration.rb +5 -4
- data/lib/openstudio-standards/prototypes/cbes/cbes_t24_2008/cbes_t24_2008.FanConstantVolume.rb +5 -3
- data/lib/openstudio-standards/prototypes/cbes/cbes_t24_2008/cbes_t24_2008.FanOnOff.rb +5 -4
- data/lib/openstudio-standards/prototypes/cbes/cbes_t24_2008/cbes_t24_2008.FanVariableVolume.rb +5 -3
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.College.rb +65 -30
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Courthouse.rb +54 -23
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.FullServiceRestaurant.rb +135 -147
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.HighRiseApartment.rb +42 -7
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +85 -12
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb +42 -30
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterHighITE.rb +39 -8
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterLowITE.rb +39 -8
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +60 -12
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +33 -265
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOfficeDetailed.rb +41 -3
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +69 -297
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOfficeDetailed.rb +68 -25
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MidriseApartment.rb +88 -59
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +88 -9
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +48 -10
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.QuickServiceRestaurant.rb +130 -145
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStandalone.rb +29 -101
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStripmall.rb +24 -7
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +48 -589
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterHighITE.rb +38 -7
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterLowITE.rb +38 -8
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallHotel.rb +40 -7
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOffice.rb +85 -171
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOfficeDetailed.rb +87 -44
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperMarket.rb +46 -5
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperTallBuilding.rb +105 -17
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.TallBuilding.rb +97 -15
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Warehouse.rb +26 -167
- data/lib/openstudio-standards/prototypes/common/do_not_edit_metaclasses.rb +3828 -1131
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +3 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.BoilerHotWater.rb +2 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +2 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXSingleSpeed.rb +4 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +3 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWater.rb +4 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +3 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +9 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingElectric.rb +3 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingGas.rb +9 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWater.rb +4 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +3 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.ControllerWaterCoil.rb +2 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoolingTower.rb +4 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +23 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanConstantVolume.rb +29 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanOnOff.rb +29 -5
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanVariableVolume.rb +43 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanZoneExhaust.rb +22 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +46 -3
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.elevators.rb +27 -22
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +15 -8
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +22 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +429 -59
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.swh.rb +18 -11
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.transformers.rb +11 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Pump.rb +1 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.PumpVariableSpeed.rb +8 -10
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +37 -28
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.SizingSystem.rb +24 -6
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +251 -65
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +46 -31
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +62 -10
- data/lib/openstudio-standards/prototypes/common/prototype_metaprogramming.rb +76 -33
- data/lib/openstudio-standards/prototypes/deer/deer.Model.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +445 -275
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +3 -3
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +26 -21
- data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +5 -2
- data/lib/openstudio-standards/standards/Standards.BuildingStory.rb +7 -9
- data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +8 -2
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +10 -6
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +5 -1
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +6 -1
- data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +45 -4
- data/lib/openstudio-standards/standards/Standards.CoilDX.rb +18 -8
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +9 -7
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +8 -4
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +86 -3
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +5 -2
- data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +6 -2
- data/lib/openstudio-standards/standards/Standards.Construction.rb +66 -35
- data/lib/openstudio-standards/standards/Standards.CoolingTower.rb +7 -7
- data/lib/openstudio-standards/standards/Standards.CoolingTowerSingleSpeed.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.CoolingTowerTwoSpeed.rb +2 -1
- data/lib/openstudio-standards/standards/Standards.CoolingTowerVariableSpeed.rb +2 -1
- data/lib/openstudio-standards/standards/Standards.Fan.rb +53 -35
- data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +22 -16
- data/lib/openstudio-standards/standards/Standards.FluidCooler.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +4 -4
- data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +77 -19
- data/lib/openstudio-standards/standards/Standards.Model.rb +387 -245
- data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +13 -15
- data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +94 -48
- data/lib/openstudio-standards/standards/Standards.Pump.rb +28 -20
- data/lib/openstudio-standards/standards/Standards.PumpVariableSpeed.rb +3 -4
- data/lib/openstudio-standards/standards/Standards.ScheduleCompact.rb +2 -1
- data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +2 -0
- data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +34 -24
- data/lib/openstudio-standards/standards/Standards.Space.rb +179 -116
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +23 -12
- data/lib/openstudio-standards/standards/Standards.SubSurface.rb +55 -25
- data/lib/openstudio-standards/standards/Standards.Surface.rb +57 -32
- data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +157 -107
- data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +9 -6
- data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +52 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1.Standards.FanVariableVolume.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirLoopHVAC.rb +28 -18
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PlantLoop.rb +4 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/comstock_ashrae_90_1_2004.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/ashrae_90_1.schedules.json +696 -2938
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.ext_ltg.json +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.spc_typ.json +123 -123
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.furnaces.json +26 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +11 -11
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_system.json +0 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +395 -384
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.unitary_acs.json +69 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirLoopHVAC.rb +20 -13
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.Model.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/comstock_ashrae_90_1_2007.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/ashrae_90_1.schedules.json +696 -2938
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.ext_ltg.json +1 -1
- 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 +122 -122
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.furnaces.json +26 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +11 -11
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_system.json +0 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +413 -401
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.unitary_acs.json +69 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirLoopHVAC.rb +42 -53
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +3 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.CoolingTower.rb +5 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Space.rb +6 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/comstock_ashrae_90_1_2010.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/ashrae_90_1.schedules.json +696 -2938
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.ext_ltg.json +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 +129 -129
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.energy_recovery.json +210 -42
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.furnaces.json +26 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +11 -11
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_system.json +0 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +460 -320
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.unitary_acs.json +69 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC.rb +45 -51
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +3 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.CoolingTower.rb +5 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.CoolingTowerVariableSpeed.rb +2 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanVariableVolume.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Space.rb +8 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.ThermalZone.rb +2 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.WaterHeaterMixed.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.ZoneHVACComponent.rb +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/comstock_ashrae_90_1_2013.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/ashrae_90_1.schedules.json +696 -2938
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.ext_ltg.json +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 +121 -121
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +420 -84
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.furnaces.json +26 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +12 -12
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_system.json +0 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +475 -335
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.unitary_acs.json +69 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirLoopHVAC.rb +40 -50
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +3 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTower.rb +5 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTowerVariableSpeed.rb +2 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanVariableVolume.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Space.rb +8 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.ThermalZone.rb +2 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.ZoneHVACComponent.rb +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/comstock_ashrae_90_1_2016.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/ashrae_90_1.schedules.json +696 -2938
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.ext_ltg.json +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 +152 -128
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.energy_recovery.json +488 -84
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.furnaces.json +26 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +47 -47
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.unitary_acs.json +69 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +342 -56
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +3 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTower.rb +5 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTowerVariableSpeed.rb +2 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanVariableVolume.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +25 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ThermalZone.rb +2 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ZoneHVACComponent.rb +30 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/comstock_ashrae_90_1_2019.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/ashrae_90_1.schedules.json +696 -2938
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.ext_ltg.json +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 +151 -127
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.boilers.json +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.energy_recovery.json +2307 -101
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.furnaces.json +26 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_compressors.json +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +47 -47
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.unitary_acs.json +69 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +25 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +286 -224
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/comstock_doe_ref_1980_2004.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/ashrae_90_1.schedules.json +696 -2938
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.ext_ltg.json +1 -1
- 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 +126 -126
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.furnaces.json +26 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.prototype_inputs.json +11 -11
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.refrigeration_system.json +0 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +405 -393
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirLoopHVAC.rb +15 -11
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.PlantLoop.rb +3 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/comstock_doe_ref_pre_1980.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/ashrae_90_1.schedules.json +696 -2938
- 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 +121 -121
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.furnaces.json +37 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.prototype_inputs.json +11 -11
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.refrigeration_system.json +0 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +403 -391
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirLoopHVAC.rb +15 -11
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.PlantLoop.rb +3 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.furnaces.json +15 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +64 -42
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +3 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.CoolingTower.rb +5 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.CoolingTowerVariableSpeed.rb +2 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.FanVariableVolume.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.HeatExchangerSensLat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Model.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +4 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Space.rb +5 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.ZoneHVACComponent.rb +3 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.furnaces.json +15 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirLoopHVAC.rb +61 -36
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +3 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTower.rb +5 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerVariableSpeed.rb +2 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanVariableVolume.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerSensLat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +4 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Space.rb +6 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.ZoneHVACComponent.rb +3 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.rb +4 -0
- data/lib/openstudio-standards/standards/cbes/cbes.AirLoopHVAC.rb +20 -14
- data/lib/openstudio-standards/standards/cbes/cbes.PlantLoop.rb +3 -0
- data/lib/openstudio-standards/standards/cbes/cbes.rb +4 -0
- data/lib/openstudio-standards/standards/cbes/cbes_pre_1978/cbes_pre_1978.rb +4 -0
- data/lib/openstudio-standards/standards/cbes/cbes_t24_1978/cbes_t24_1978.rb +4 -0
- data/lib/openstudio-standards/standards/cbes/cbes_t24_1992/cbes_t24_1992.rb +4 -0
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2001/cbes_t24_2001.rb +4 -0
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2005/cbes_t24_2005.rb +4 -0
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2008/cbes_t24_2008.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer.AirLoopHVAC.rb +10 -5
- data/lib/openstudio-standards/standards/deer/deer.PlanarSurface.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_1985/comstock_deer_1985/comstock_deer_1985.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_1985/comstock_deer_1985/data/comstock_deer_1985.ext_ltg.json +2 -2
- data/lib/openstudio-standards/standards/deer/deer_1985/deer_1985.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_1996/comstock_deer_1996/comstock_deer_1996.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_1996/comstock_deer_1996/data/comstock_deer_1996.ext_ltg.json +2 -2
- data/lib/openstudio-standards/standards/deer/deer_1996/deer_1996.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2003/comstock_deer_2003/comstock_deer_2003.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2003/comstock_deer_2003/data/comstock_deer_2003.ext_ltg.json +2 -2
- data/lib/openstudio-standards/standards/deer/deer_2003/deer_2003.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2007/comstock_deer_2007/comstock_deer_2007.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2007/comstock_deer_2007/data/comstock_deer_2007.ext_ltg.json +2 -2
- data/lib/openstudio-standards/standards/deer/deer_2007/deer_2007.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2011/comstock_deer_2011/comstock_deer_2011.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2011/comstock_deer_2011/data/comstock_deer_2011.ext_ltg.json +2 -2
- data/lib/openstudio-standards/standards/deer/deer_2011/deer_2011.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2014/comstock_deer_2014/comstock_deer_2014.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2014/comstock_deer_2014/data/comstock_deer_2014.ext_ltg.json +2 -2
- data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2015/comstock_deer_2015/comstock_deer_2015.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2015/comstock_deer_2015/data/comstock_deer_2015.ext_ltg.json +2 -2
- data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2017/comstock_deer_2017/comstock_deer_2017.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2017/comstock_deer_2017/data/comstock_deer_2017.ext_ltg.json +2 -2
- data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2020/comstock_deer_2020/comstock_deer_2020.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2025/comstock_deer_2025/comstock_deer_2025.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2030/comstock_deer_2030/comstock_deer_2030.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2035/comstock_deer_2035/comstock_deer_2035.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2040/comstock_deer_2040/comstock_deer_2040.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2045/comstock_deer_2045/comstock_deer_2045.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2050/comstock_deer_2050/comstock_deer_2050.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2055/comstock_deer_2055/comstock_deer_2055.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2060/comstock_deer_2060/comstock_deer_2060.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2065/comstock_deer_2065/comstock_deer_2065.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2070/comstock_deer_2070/comstock_deer_2070.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2075/comstock_deer_2075/comstock_deer_2075.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_pre_1975/comstock_deer_pre_1975/comstock_deer_pre_1975.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_pre_1975/comstock_deer_pre_1975/data/comstock_deer_pre_1975.ext_ltg.json +2 -2
- data/lib/openstudio-standards/standards/deer/deer_pre_1975/deer_pre_1975.rb +4 -0
- data/lib/openstudio-standards/standards/icc_iecc/icc_iecc_2015/icc_iecc_2015.rb +4 -0
- data/lib/openstudio-standards/standards/necb/BTAP1980TO2010/btap_1980to2010.rb +6 -28
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +25 -110
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/building_envelope.rb +45 -60
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +19 -23
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +84 -83
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +52 -47
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_systems.rb +43 -40
- data/lib/openstudio-standards/standards/necb/ECMS/data/boiler_set.json +18 -0
- data/lib/openstudio-standards/standards/necb/ECMS/data/chiller_set.json +211 -0
- data/lib/openstudio-standards/standards/necb/ECMS/data/curves.json +1195 -20
- data/lib/openstudio-standards/standards/necb/ECMS/data/furnace_set.json +18 -0
- data/lib/openstudio-standards/standards/necb/ECMS/data/heat_pumps.json +244 -182
- data/lib/openstudio-standards/standards/necb/ECMS/data/heat_pumps_heating.json +232 -185
- data/lib/openstudio-standards/standards/necb/ECMS/data/shw_set.json +20 -2
- data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +18 -25
- data/lib/openstudio-standards/standards/necb/ECMS/erv.rb +12 -13
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +1647 -466
- data/lib/openstudio-standards/standards/necb/ECMS/loads.rb +93 -0
- data/lib/openstudio-standards/standards/necb/ECMS/nv.rb +40 -47
- data/lib/openstudio-standards/standards/necb/ECMS/pv_ground.rb +26 -25
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +303 -305
- data/lib/openstudio-standards/standards/necb/NECB2011/beps_compliance_path.rb +45 -45
- data/lib/openstudio-standards/standards/necb/NECB2011/building_envelope.rb +90 -120
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/Hospital.osm +1176 -1115
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LowriseApartment.osm +8279 -28923
- data/lib/openstudio-standards/standards/necb/NECB2011/data/space_types.json +1173 -1173
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +15 -13
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +32 -29
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +25 -26
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +14 -14
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +24 -29
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +85 -84
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +41 -42
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +209 -197
- data/lib/openstudio-standards/standards/necb/NECB2011/lighting.rb +87 -82
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +510 -406
- data/lib/openstudio-standards/standards/necb/NECB2011/nv.md +3 -3
- data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +686 -683
- data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +129 -82
- data/lib/openstudio-standards/standards/necb/NECB2015/data/space_types.json +1608 -1608
- data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +25 -18
- data/lib/openstudio-standards/standards/necb/NECB2015/lighting.rb +73 -67
- data/lib/openstudio-standards/standards/necb/NECB2015/necb_2015.rb +18 -22
- data/lib/openstudio-standards/standards/necb/NECB2015/qaqc/necb_2015_qaqc.rb +59 -63
- data/lib/openstudio-standards/standards/necb/NECB2017/data/space_types.json +1608 -1608
- data/lib/openstudio-standards/standards/necb/NECB2017/hvac_systems.rb +1 -4
- data/lib/openstudio-standards/standards/necb/NECB2017/necb_2017.rb +10 -14
- data/lib/openstudio-standards/standards/necb/NECB2020/building_envelope.rb +779 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/boilers.json +122 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/chillers.json +335 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/constants.json +13 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/furnaces.json +41 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps.json +452 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps_heating.json +164 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_rejection.json +228 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/led_lighting_data.json +2883 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/space_types.json +25851 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/surface_thermal_transmittance.json +60 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/unitary_acs.json +585 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/necb_2020.rb +175 -0
- data/lib/openstudio-standards/standards/necb/common/bc_step_code_indicators.md +10 -0
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +1963 -0
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +410 -0
- data/lib/openstudio-standards/standards/necb/common/neb_end_use_prices.csv +42 -0
- data/lib/openstudio-standards/standards/necb/common/necb_reference_runs.csv +28705 -0
- data/lib/openstudio-standards/standards/necb/common/phius.md +23 -0
- data/lib/openstudio-standards/standards/necb/common/space_type_upgrade_map.json +1158 -386
- data/lib/openstudio-standards/standards/oeesc/oeesc_2014/oeesc_2014.rb +4 -0
- data/lib/openstudio-standards/standards/standard.rb +2 -1
- data/lib/openstudio-standards/utilities/define_thermal_zone_and_mulitpliers.rb +1 -1
- data/lib/openstudio-standards/utilities/logging.rb +6 -0
- data/lib/openstudio-standards/utilities/simulation.rb +30 -14
- data/lib/openstudio-standards/utilities/{speacetype_map_converter.rb → spacetype_map_converter.rb} +0 -0
- data/lib/openstudio-standards/utilities/sqlfile.rb +112 -71
- data/lib/openstudio-standards/version.rb +2 -2
- data/lib/openstudio-standards/weather/Weather.Model.rb +209 -9
- data/lib/openstudio-standards/weather/Weather.stat_file.rb +1 -1
- data/lib/openstudio-standards.rb +9 -0
- metadata +106 -205
- data/data/standards/OpenStudio_Standards-ashrae_90_1-ALL-comstock(space_types).xlsx +0 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.boilers.json +0 -49
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.chillers.json +0 -293
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +0 -25426
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_sets.json +0 -1600
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.economizers.json +0 -564
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.elevators.json +0 -349
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ext_ltg.json +0 -164
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ground_temperatures.json +0 -10663
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps.json +0 -508
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps_heating.json +0 -156
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_rejection.json +0 -44
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.motors.json +0 -184
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +0 -3094
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ref_cases.json +0 -829
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ref_lnup.json +0 -562
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_compressors.json +0 -52
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_condenser.json +0 -220
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_system.json +0 -156
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_walkins.json +0 -1316
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +0 -21446
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.unitary_acs.json +0 -554
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_heaters.json +0 -68
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_source_heat_pumps.json +0 -28
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_source_heat_pumps_heating.json +0 -12
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.boilers.json +0 -49
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.chillers.json +0 -293
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +0 -12487
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_sets.json +0 -1600
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.economizers.json +0 -564
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.elevators.json +0 -349
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ext_ltg.json +0 -164
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ground_temperatures.json +0 -10663
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps.json +0 -466
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps_heating.json +0 -137
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_rejection.json +0 -44
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.motors.json +0 -184
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +0 -3094
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ref_cases.json +0 -829
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ref_lnup.json +0 -562
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_compressors.json +0 -52
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_condenser.json +0 -220
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_system.json +0 -156
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_walkins.json +0 -1316
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +0 -21380
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.unitary_acs.json +0 -554
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_heaters.json +0 -68
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_source_heat_pumps.json +0 -28
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_source_heat_pumps_heating.json +0 -12
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.boilers.json +0 -49
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.chillers.json +0 -395
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +0 -12487
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_sets.json +0 -1600
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.economizers.json +0 -592
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.elevators.json +0 -349
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.energy_recovery.json +0 -550
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ext_ltg.json +0 -164
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ground_temperatures.json +0 -10663
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps.json +0 -466
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps_heating.json +0 -137
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_rejection.json +0 -44
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.motors.json +0 -238
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +0 -3094
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ref_cases.json +0 -829
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ref_lnup.json +0 -562
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_compressors.json +0 -52
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_condenser.json +0 -220
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_system.json +0 -156
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_walkins.json +0 -1316
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +0 -21548
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.unitary_acs.json +0 -554
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_heaters.json +0 -68
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_source_heat_pumps.json +0 -28
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_source_heat_pumps_heating.json +0 -12
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.boilers.json +0 -64
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.chillers.json +0 -871
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +0 -12487
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_sets.json +0 -1600
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.economizers.json +0 -592
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.elevators.json +0 -349
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +0 -1096
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ext_ltg.json +0 -164
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ground_temperatures.json +0 -10663
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps.json +0 -886
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps_heating.json +0 -194
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_rejection.json +0 -44
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.motors.json +0 -247
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +0 -3094
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ref_cases.json +0 -829
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ref_lnup.json +0 -562
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_compressors.json +0 -52
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_condenser.json +0 -220
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_system.json +0 -156
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_walkins.json +0 -1316
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +0 -22079
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.unitary_acs.json +0 -994
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_heaters.json +0 -68
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_source_heat_pumps.json +0 -28
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_source_heat_pumps_heating.json +0 -12
- data/lib/openstudio-standards/utilities/convert_costing_constructions.rb +0 -105
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
class Standard
|
|
2
2
|
# @!group AirLoopHVAC
|
|
3
3
|
|
|
4
|
-
# Apply multizone vav outdoor air method and
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
# of 0.6 per PNNL. Hard-size the resulting min OA
|
|
8
|
-
# into the sizing:system object.
|
|
4
|
+
# Apply multizone vav outdoor air method and adjust multizone VAV damper positions
|
|
5
|
+
# to achieve a system minimum ventilation effectiveness of 0.6 per PNNL.
|
|
6
|
+
# Hard-size the resulting min OA into the sizing:system object.
|
|
9
7
|
#
|
|
8
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
10
9
|
# return [Bool] returns true if successful, false if not
|
|
11
10
|
# @todo move building-type-specific code to Prototype classes
|
|
12
11
|
def air_loop_hvac_apply_multizone_vav_outdoor_air_sizing(air_loop_hvac)
|
|
@@ -14,7 +13,7 @@ class Standard
|
|
|
14
13
|
# Only applies to multi-zone vav systems
|
|
15
14
|
# exclusion: for Outpatient: (1) both AHU1 and AHU2 in 'DOE Ref Pre-1980' and 'DOE Ref 1980-2004'
|
|
16
15
|
# (2) AHU1 in 2004-2019
|
|
17
|
-
#
|
|
16
|
+
# @todo refactor: move building-type-specific code to Prototype classes
|
|
18
17
|
if air_loop_hvac_multizone_vav_system?(air_loop_hvac) && !(air_loop_hvac.name.to_s.include? 'Outpatient F1')
|
|
19
18
|
air_loop_hvac_adjust_minimum_vav_damper_positions(air_loop_hvac)
|
|
20
19
|
end
|
|
@@ -24,7 +23,8 @@ class Standard
|
|
|
24
23
|
|
|
25
24
|
# Apply all standard required controls to the airloop
|
|
26
25
|
#
|
|
27
|
-
# @param
|
|
26
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
27
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
28
28
|
# @return [Bool] returns true if successful, false if not
|
|
29
29
|
# @todo optimum start
|
|
30
30
|
# @todo night damper shutoff
|
|
@@ -56,8 +56,11 @@ class Standard
|
|
|
56
56
|
air_loop_hvac_apply_vav_damper_action(air_loop_hvac)
|
|
57
57
|
|
|
58
58
|
# Multizone VAV Optimization
|
|
59
|
-
# This rule does not apply to two hospital and one outpatient systems
|
|
60
|
-
unless air_loop_hvac.name.to_s.include? '
|
|
59
|
+
# This rule does not apply to two hospital and one outpatient systems
|
|
60
|
+
unless (@instvarbuilding_type == 'Hospital' && (air_loop_hvac.name.to_s.include?('VAV_ER') || air_loop_hvac.name.to_s.include?('VAV_ICU') ||
|
|
61
|
+
air_loop_hvac.name.to_s.include?('VAV_OR') || air_loop_hvac.name.to_s.include?('VAV_LABS') ||
|
|
62
|
+
air_loop_hvac.name.to_s.include?('VAV_PATRMS'))) ||
|
|
63
|
+
(@instvarbuilding_type == 'Outpatient' && air_loop_hvac.name.to_s.include?('Outpatient F1'))
|
|
61
64
|
if air_loop_hvac_multizone_vav_optimization_required?(air_loop_hvac, climate_zone)
|
|
62
65
|
air_loop_hvac_enable_multizone_vav_optimization(air_loop_hvac)
|
|
63
66
|
else
|
|
@@ -160,14 +163,32 @@ class Standard
|
|
|
160
163
|
end
|
|
161
164
|
air_loop_hvac_apply_single_zone_controls(air_loop_hvac, climate_zone)
|
|
162
165
|
end
|
|
166
|
+
|
|
167
|
+
# Standby mode occupancy control
|
|
168
|
+
unless air_loop_hvac.thermalZones.empty?
|
|
169
|
+
thermal_zones = air_loop_hvac.thermalZones
|
|
170
|
+
|
|
171
|
+
standby_mode_spaces = []
|
|
172
|
+
thermal_zones.sort.each do |thermal_zone|
|
|
173
|
+
thermal_zone.spaces.sort.each do |space|
|
|
174
|
+
if space_occupancy_standby_mode_required?(space)
|
|
175
|
+
standby_mode_spaces << space
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
if !standby_mode_spaces.empty?
|
|
181
|
+
air_loop_hvac_standby_mode_occupancy_control(air_loop_hvac, standby_mode_spaces)
|
|
182
|
+
end
|
|
183
|
+
end
|
|
163
184
|
end
|
|
164
185
|
|
|
165
186
|
# Apply all PRM baseline required controls to the airloop.
|
|
166
|
-
# Only applies those controls that differ from the normal
|
|
167
|
-
#
|
|
168
|
-
# air_loop_hvac_apply_standard_controls(AirLoopHVAC)
|
|
187
|
+
# Only applies those controls that differ from the normal prescriptive controls,
|
|
188
|
+
# which are added via air_loop_hvac_apply_standard_controls(air_loop_hvac, climate_zone)
|
|
169
189
|
#
|
|
170
|
-
# @param
|
|
190
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
191
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
171
192
|
# @return [Bool] returns true if successful, false if not
|
|
172
193
|
def air_loop_hvac_apply_prm_baseline_controls(air_loop_hvac, climate_zone)
|
|
173
194
|
# Economizers
|
|
@@ -201,9 +222,10 @@ class Standard
|
|
|
201
222
|
end
|
|
202
223
|
|
|
203
224
|
# Determines if optimum start control is required.
|
|
204
|
-
# Defaults to 90.1-2004 logic, which requires
|
|
205
|
-
# optimum start if > 10,000 cfm
|
|
225
|
+
# Defaults to 90.1-2004 logic, which requires optimum start if > 10,000 cfm
|
|
206
226
|
#
|
|
227
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
228
|
+
# @return [Bool] returns true if required, false if not
|
|
207
229
|
def air_loop_hvac_optimum_start_required?(air_loop_hvac)
|
|
208
230
|
opt_start_required = false
|
|
209
231
|
|
|
@@ -237,6 +259,8 @@ class Standard
|
|
|
237
259
|
|
|
238
260
|
# Adds optimum start control to the airloop.
|
|
239
261
|
#
|
|
262
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
263
|
+
# @return [Bool] returns true if successful, false if not
|
|
240
264
|
def air_loop_hvac_enable_optimum_start(air_loop_hvac)
|
|
241
265
|
# Get the heating and cooling setpoint schedules
|
|
242
266
|
# for all zones on this airloop.
|
|
@@ -325,17 +349,15 @@ class Standard
|
|
|
325
349
|
return true
|
|
326
350
|
end
|
|
327
351
|
|
|
328
|
-
# Calculate and apply the performance rating method
|
|
329
|
-
#
|
|
330
|
-
# Fan motor efficiency will be set, and then
|
|
331
|
-
# fan pressure rise adjusted so that the
|
|
352
|
+
# Calculate and apply the performance rating method baseline fan power to this air loop.
|
|
353
|
+
# Fan motor efficiency will be set, and then fan pressure rise adjusted so that the
|
|
332
354
|
# fan power is the maximum allowable.
|
|
333
|
-
# Also adjusts the fan power and flow rates
|
|
334
|
-
# of any parallel PIU terminals on the system.
|
|
335
|
-
#
|
|
355
|
+
# Also adjusts the fan power and flow rates of any parallel PIU terminals on the system.
|
|
336
356
|
# @todo Figure out how to split fan power between multiple fans
|
|
337
|
-
#
|
|
338
|
-
#
|
|
357
|
+
# if the proposed model had multiple fans (supply, return, exhaust, etc.)
|
|
358
|
+
#
|
|
359
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
360
|
+
# return [Bool] true if successful, false if not
|
|
339
361
|
def air_loop_hvac_apply_prm_baseline_fan_power(air_loop_hvac)
|
|
340
362
|
# Main AHU fans
|
|
341
363
|
|
|
@@ -375,8 +397,8 @@ class Standard
|
|
|
375
397
|
# Determine the fan power limitation pressure drop adjustment
|
|
376
398
|
# Per Table 6.5.3.1.1B
|
|
377
399
|
#
|
|
378
|
-
# @
|
|
379
|
-
#
|
|
400
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
401
|
+
# @return [Double] fan power limitation pressure drop adjustment, in units of horsepower
|
|
380
402
|
# @todo Determine the presence of MERV filters and other stuff in Table 6.5.3.1.1B. May need to extend AirLoopHVAC data model
|
|
381
403
|
def air_loop_hvac_fan_power_limitation_pressure_drop_adjustment_brake_horsepower(air_loop_hvac)
|
|
382
404
|
# Get design supply air flow rate (whether autosized or hard-sized)
|
|
@@ -392,12 +414,12 @@ class Standard
|
|
|
392
414
|
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.AirLoopHVAC', "* #{dsn_air_flow_cfm.round} cfm = Hard sized Design Supply Air Flow Rate.")
|
|
393
415
|
end
|
|
394
416
|
|
|
395
|
-
#
|
|
417
|
+
# @todo determine the presence of MERV filters and other stuff
|
|
396
418
|
# in Table 6.5.3.1.1B
|
|
397
419
|
# perhaps need to extend AirLoopHVAC data model
|
|
398
420
|
has_fully_ducted_return_and_or_exhaust_air_systems = false
|
|
399
|
-
|
|
400
|
-
|
|
421
|
+
has_merv_9_through_12 = false
|
|
422
|
+
has_merv_13_through_15 = false
|
|
401
423
|
|
|
402
424
|
# Calculate Fan Power Limitation Pressure Drop Adjustment (in wc)
|
|
403
425
|
fan_pwr_adjustment_in_wc = 0
|
|
@@ -410,14 +432,14 @@ class Standard
|
|
|
410
432
|
end
|
|
411
433
|
|
|
412
434
|
# MERV 9 through 12
|
|
413
|
-
if
|
|
435
|
+
if has_merv_9_through_12
|
|
414
436
|
adj_in_wc = 0.5
|
|
415
437
|
fan_pwr_adjustment_in_wc += adj_in_wc
|
|
416
438
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "--Added #{adj_in_wc} in wc for Particulate Filtration Credit: MERV 9 through 12")
|
|
417
439
|
end
|
|
418
440
|
|
|
419
441
|
# MERV 13 through 15
|
|
420
|
-
if
|
|
442
|
+
if has_merv_13_through_15
|
|
421
443
|
adj_in_wc = 0.9
|
|
422
444
|
fan_pwr_adjustment_in_wc += adj_in_wc
|
|
423
445
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "--Added #{adj_in_wc} in wc for Particulate Filtration Credit: MERV 13 through 15")
|
|
@@ -434,8 +456,8 @@ class Standard
|
|
|
434
456
|
# Determine the allowable fan system brake horsepower
|
|
435
457
|
# Per Table 6.5.3.1.1A
|
|
436
458
|
#
|
|
437
|
-
# @
|
|
438
|
-
#
|
|
459
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
460
|
+
# @return [Double] allowable fan system brake horsepower, in units of horsepower
|
|
439
461
|
def air_loop_hvac_allowable_system_brake_horsepower(air_loop_hvac)
|
|
440
462
|
# Get design supply air flow rate (whether autosized or hard-sized)
|
|
441
463
|
dsn_air_flow_m3_per_s = 0
|
|
@@ -532,6 +554,7 @@ class Standard
|
|
|
532
554
|
|
|
533
555
|
# Get all of the supply, return, exhaust, and relief fans on this system
|
|
534
556
|
#
|
|
557
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
535
558
|
# @return [Array] an array of FanConstantVolume, FanVariableVolume, and FanOnOff objects
|
|
536
559
|
def air_loop_hvac_supply_return_exhaust_relief_fans(air_loop_hvac)
|
|
537
560
|
# Fans on the supply side of the airloop directly, or inside of unitary equipment.
|
|
@@ -571,11 +594,11 @@ class Standard
|
|
|
571
594
|
# Determine the total brake horsepower of the fans on the system
|
|
572
595
|
# with or without the fans inside of fan powered terminals.
|
|
573
596
|
#
|
|
597
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
574
598
|
# @param include_terminal_fans [Bool] if true, power from fan powered terminals will be included
|
|
575
|
-
# @return [Double] total brake horsepower of the fans on the system
|
|
576
|
-
# units = horsepower
|
|
599
|
+
# @return [Double] total brake horsepower of the fans on the system, in units of horsepower
|
|
577
600
|
def air_loop_hvac_system_fan_brake_horsepower(air_loop_hvac, include_terminal_fans = true)
|
|
578
|
-
#
|
|
601
|
+
# @todo get the template from the parent model itself?
|
|
579
602
|
# Or not because maybe you want to see the difference between two standards?
|
|
580
603
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "#{air_loop_hvac.name}-Determining #{template} allowable system fan power.")
|
|
581
604
|
|
|
@@ -614,6 +637,8 @@ class Standard
|
|
|
614
637
|
# Set the fan pressure rises that will result in
|
|
615
638
|
# the system hitting the baseline allowable fan power
|
|
616
639
|
#
|
|
640
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
641
|
+
# @return [Bool] returns true if successful, false if not
|
|
617
642
|
def air_loop_hvac_apply_baseline_fan_pressure_rise(air_loop_hvac)
|
|
618
643
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "#{air_loop_hvac.name}-Setting #{template} baseline fan power.")
|
|
619
644
|
|
|
@@ -632,12 +657,12 @@ class Standard
|
|
|
632
657
|
# Get all fans
|
|
633
658
|
fans = air_loop_hvac_supply_return_exhaust_relief_fans(air_loop_hvac)
|
|
634
659
|
|
|
635
|
-
#
|
|
660
|
+
# @todo improve description
|
|
636
661
|
# Loop through the fans, changing the pressure rise
|
|
637
662
|
# until the fan bhp is the same percentage of the baseline allowable bhp
|
|
638
663
|
# as it was on the proposed system.
|
|
639
664
|
fans.each do |fan|
|
|
640
|
-
#
|
|
665
|
+
# @todo Yixing Check the model of the Fan Coil Unit
|
|
641
666
|
next if fan.name.to_s.include?('Fan Coil fan')
|
|
642
667
|
next if fan.name.to_s.include?('UnitHeater Fan')
|
|
643
668
|
|
|
@@ -690,15 +715,16 @@ class Standard
|
|
|
690
715
|
|
|
691
716
|
# Calculate the total bhp of the system to make sure it matches the goal
|
|
692
717
|
calc_sys_bhp = air_loop_hvac_system_fan_brake_horsepower(air_loop_hvac, false)
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
718
|
+
return true unless ((calc_sys_bhp - allowable_fan_bhp) / allowable_fan_bhp).abs > 0.02
|
|
719
|
+
|
|
720
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.AirLoopHVAC', "#{air_loop_hvac.name} baseline system bhp supposed to be #{allowable_fan_bhp}, but is #{calc_sys_bhp}.")
|
|
721
|
+
return false
|
|
696
722
|
end
|
|
697
723
|
|
|
698
724
|
# Get the total cooling capacity for the air loop
|
|
699
725
|
#
|
|
700
|
-
# @
|
|
701
|
-
#
|
|
726
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
727
|
+
# @return [Double] total cooling capacity in watts
|
|
702
728
|
# @todo Change to pull water coil nominal capacity instead of design load; not a huge difference, but water coil nominal capacity not available in sizing table.
|
|
703
729
|
# @todo Handle all additional cooling coil types. Currently only handles CoilCoolingDXSingleSpeed, CoilCoolingDXTwoSpeed, and CoilCoolingWater
|
|
704
730
|
def air_loop_hvac_total_cooling_capacity(air_loop_hvac)
|
|
@@ -716,7 +742,6 @@ class Standard
|
|
|
716
742
|
else
|
|
717
743
|
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name} capacity of #{coil.name} is not available, total cooling capacity of air loop will be incorrect when applying standard.")
|
|
718
744
|
end
|
|
719
|
-
# CoilCoolingDXTwoSpeed
|
|
720
745
|
elsif sc.to_CoilCoolingDXTwoSpeed.is_initialized
|
|
721
746
|
coil = sc.to_CoilCoolingDXTwoSpeed.get
|
|
722
747
|
if coil.ratedHighSpeedTotalCoolingCapacity.is_initialized
|
|
@@ -729,7 +754,8 @@ class Standard
|
|
|
729
754
|
# CoilCoolingWater
|
|
730
755
|
elsif sc.to_CoilCoolingWater.is_initialized
|
|
731
756
|
coil = sc.to_CoilCoolingWater.get
|
|
732
|
-
if coil.autosizedDesignCoilLoad.is_initialized
|
|
757
|
+
if coil.autosizedDesignCoilLoad.is_initialized
|
|
758
|
+
# @todo Change to pull water coil nominal capacity instead of design load
|
|
733
759
|
total_cooling_capacity_w += coil.autosizedDesignCoilLoad.get
|
|
734
760
|
else
|
|
735
761
|
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name} capacity of #{coil.name} is not available, total cooling capacity of air loop will be incorrect when applying standard.")
|
|
@@ -771,7 +797,8 @@ class Standard
|
|
|
771
797
|
# CoilCoolingWater
|
|
772
798
|
elsif clg_coil.to_CoilCoolingWater.is_initialized
|
|
773
799
|
coil = clg_coil.to_CoilCoolingWater.get
|
|
774
|
-
if coil.autosizedDesignCoilLoad.is_initialized
|
|
800
|
+
if coil.autosizedDesignCoilLoad.is_initialized
|
|
801
|
+
# @todo Change to pull water coil nominal capacity instead of design load
|
|
775
802
|
total_cooling_capacity_w += coil.autosizedDesignCoilLoad.get
|
|
776
803
|
else
|
|
777
804
|
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name} capacity of #{coil.name} is not available, total cooling capacity of air loop will be incorrect when applying standard.")
|
|
@@ -814,7 +841,8 @@ class Standard
|
|
|
814
841
|
# CoilCoolingWater
|
|
815
842
|
elsif clg_coil.to_CoilCoolingWater.is_initialized
|
|
816
843
|
coil = clg_coil.to_CoilCoolingWater.get
|
|
817
|
-
if coil.autosizedDesignCoilLoad.is_initialized
|
|
844
|
+
if coil.autosizedDesignCoilLoad.is_initialized
|
|
845
|
+
# @todo Change to pull water coil nominal capacity instead of design load
|
|
818
846
|
total_cooling_capacity_w += coil.autosizedDesignCoilLoad.get
|
|
819
847
|
else
|
|
820
848
|
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name} capacity of #{coil.name} is not available, total cooling capacity of air loop will be incorrect when applying standard.")
|
|
@@ -828,6 +856,36 @@ class Standard
|
|
|
828
856
|
coil = clg_coil.to_CoilCoolingDXMultiSpeed.get
|
|
829
857
|
total_cooling_capacity_w = coil_cooling_dx_multi_speed_find_capacity(coil)
|
|
830
858
|
end
|
|
859
|
+
elsif sc.to_CoilCoolingDXVariableSpeed.is_initialized
|
|
860
|
+
coil = sc.to_CoilCoolingDXVariableSpeed.get
|
|
861
|
+
if coil.autosizedGrossRatedTotalCoolingCapacityAtSelectedNominalSpeedLevel.is_initialized
|
|
862
|
+
# autosized capacity needs to be corrected for actual flow rate and fan power
|
|
863
|
+
sys_fans = []
|
|
864
|
+
air_loop_hvac.supplyComponents.each do |comp|
|
|
865
|
+
if comp.to_FanConstantVolume.is_initialized
|
|
866
|
+
sys_fans << comp.to_FanConstantVolume.get
|
|
867
|
+
elsif comp.to_FanVariableVolume.is_initialized
|
|
868
|
+
sys_fans << comp.to_FanVariableVolume.get
|
|
869
|
+
end
|
|
870
|
+
end
|
|
871
|
+
max_pd = 0.0
|
|
872
|
+
supply_fan = nil
|
|
873
|
+
sys_fans.each do |fan|
|
|
874
|
+
if fan.pressureRise.to_f > max_pd
|
|
875
|
+
max_pd = fan.pressureRise.to_f
|
|
876
|
+
supply_fan = fan # assume supply fan has higher pressure drop
|
|
877
|
+
end
|
|
878
|
+
end
|
|
879
|
+
fan_power = supply_fan.autosizedMaximumFlowRate.to_f * supply_fan.pressureRise.to_f / supply_fan.fanTotalEfficiency.to_f
|
|
880
|
+
nominal_cooling_capacity_w = coil.autosizedGrossRatedTotalCoolingCapacityAtSelectedNominalSpeedLevel.to_f
|
|
881
|
+
nominal_flow_rate_factor = supply_fan.autosizedMaximumFlowRate.to_f / coil.autosizedRatedAirFlowRateAtSelectedNominalSpeedLevel.to_f
|
|
882
|
+
fan_power_adjustment_w = fan_power / coil.speeds.last.referenceUnitGrossRatedSensibleHeatRatio.to_f
|
|
883
|
+
total_cooling_capacity_w += nominal_cooling_capacity_w * nominal_flow_rate_factor + fan_power_adjustment_w
|
|
884
|
+
elsif coil.grossRatedTotalCoolingCapacityAtSelectedNominalSpeedLevel.is_initialized
|
|
885
|
+
total_cooling_capacity_w += coil.grossRatedTotalCoolingCapacityAtSelectedNominalSpeedLevel.to_f
|
|
886
|
+
else
|
|
887
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name} capacity of #{coil.name} is not available, total cooling capacity of air loop will be incorrect when applying standard.")
|
|
888
|
+
end
|
|
831
889
|
elsif sc.to_CoilCoolingDXMultiSpeed.is_initialized ||
|
|
832
890
|
sc.to_CoilCoolingCooledBeam.is_initialized ||
|
|
833
891
|
sc.to_AirLoopHVACUnitaryHeatCoolVAVChangeoverBypass.is_initialized ||
|
|
@@ -845,13 +903,10 @@ class Standard
|
|
|
845
903
|
return total_cooling_capacity_w
|
|
846
904
|
end
|
|
847
905
|
|
|
848
|
-
# Determine whether or not this system
|
|
849
|
-
# is required to have an economizer.
|
|
906
|
+
# Determine whether or not this system is required to have an economizer.
|
|
850
907
|
#
|
|
851
|
-
# @param
|
|
852
|
-
#
|
|
853
|
-
# 'ASHRAE 169-2013-5A', 'ASHRAE 169-2013-5B', 'ASHRAE 169-2013-5C', 'ASHRAE 169-2013-6A', 'ASHRAE 169-2013-6B', 'ASHRAE 169-2013-7A',
|
|
854
|
-
# 'ASHRAE 169-2013-7B', 'ASHRAE 169-2013-8A', 'ASHRAE 169-2013-8B'
|
|
908
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
909
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
855
910
|
# @return [Bool] returns true if an economizer is required, false if not
|
|
856
911
|
def air_loop_hvac_economizer_required?(air_loop_hvac, climate_zone)
|
|
857
912
|
economizer_required = false
|
|
@@ -926,7 +981,8 @@ class Standard
|
|
|
926
981
|
# Set the economizer limits per the standard. Limits are based on the economizer
|
|
927
982
|
# type currently specified in the ControllerOutdoorAir object on this air loop.
|
|
928
983
|
#
|
|
929
|
-
# @param
|
|
984
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
985
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
930
986
|
# @return [Bool] returns true if successful, false if not
|
|
931
987
|
def air_loop_hvac_apply_economizer_limits(air_loop_hvac, climate_zone)
|
|
932
988
|
# EnergyPlus economizer types
|
|
@@ -941,11 +997,9 @@ class Standard
|
|
|
941
997
|
|
|
942
998
|
# Get the OA system and OA controller
|
|
943
999
|
oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
return false # No OA system
|
|
948
|
-
end
|
|
1000
|
+
return false unless oa_sys.is_initialized
|
|
1001
|
+
|
|
1002
|
+
oa_sys = oa_sys.get
|
|
949
1003
|
oa_control = oa_sys.getControllerOutdoorAir
|
|
950
1004
|
economizer_type = oa_control.getEconomizerControlType
|
|
951
1005
|
|
|
@@ -995,8 +1049,10 @@ class Standard
|
|
|
995
1049
|
return true
|
|
996
1050
|
end
|
|
997
1051
|
|
|
998
|
-
# Determine the limits for the type of economizer present
|
|
999
|
-
#
|
|
1052
|
+
# Determine the limits for the type of economizer present on the AirLoopHVAC, if any.
|
|
1053
|
+
#
|
|
1054
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
1055
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
1000
1056
|
# @return [Array<Double>] [drybulb_limit_f, enthalpy_limit_btu_per_lb, dewpoint_limit_f]
|
|
1001
1057
|
def air_loop_hvac_economizer_limits(air_loop_hvac, climate_zone)
|
|
1002
1058
|
drybulb_limit_f = nil
|
|
@@ -1005,11 +1061,9 @@ class Standard
|
|
|
1005
1061
|
|
|
1006
1062
|
# Get the OA system and OA controller
|
|
1007
1063
|
oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
return [nil, nil, nil] # No OA system
|
|
1012
|
-
end
|
|
1064
|
+
return [nil, nil, nil] unless oa_sys.is_initialized
|
|
1065
|
+
|
|
1066
|
+
oa_sys = oa_sys.get
|
|
1013
1067
|
oa_control = oa_sys.getControllerOutdoorAir
|
|
1014
1068
|
economizer_type = oa_control.getEconomizerControlType
|
|
1015
1069
|
|
|
@@ -1033,12 +1087,12 @@ class Standard
|
|
|
1033
1087
|
return [drybulb_limit_f, enthalpy_limit_btu_per_lb, dewpoint_limit_f]
|
|
1034
1088
|
end
|
|
1035
1089
|
|
|
1036
|
-
# For systems required to have an economizer,
|
|
1037
|
-
# to integrated on non-integrated per the standard.
|
|
1090
|
+
# For systems required to have an economizer,
|
|
1091
|
+
# set the economizer to integrated on non-integrated per the standard.
|
|
1092
|
+
# @note this method assumes you previously checked that an economizer is required at all via #economizer_required?
|
|
1038
1093
|
#
|
|
1039
|
-
# @
|
|
1040
|
-
#
|
|
1041
|
-
# @param (see #economizer_required?)
|
|
1094
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
1095
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
1042
1096
|
# @return [Bool] returns true if successful, false if not
|
|
1043
1097
|
def air_loop_hvac_apply_economizer_integration(air_loop_hvac, climate_zone)
|
|
1044
1098
|
# Determine if an integrated economizer is required
|
|
@@ -1073,6 +1127,7 @@ class Standard
|
|
|
1073
1127
|
|
|
1074
1128
|
# Determine if the airloop includes hydronic cooling coils
|
|
1075
1129
|
#
|
|
1130
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
1076
1131
|
# @return [Bool] returns true if hydronic coolings coils are included on the airloop
|
|
1077
1132
|
def air_loop_hvac_include_hydronic_cooling_coil?(air_loop_hvac)
|
|
1078
1133
|
air_loop_hvac.supplyComponents.each do |comp|
|
|
@@ -1083,6 +1138,7 @@ class Standard
|
|
|
1083
1138
|
|
|
1084
1139
|
# Determine if the airloop includes WSHP cooling coils
|
|
1085
1140
|
#
|
|
1141
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
1086
1142
|
# @return [Bool] returns true if WSHP cooling coils are included on the airloop
|
|
1087
1143
|
def air_loop_hvac_include_wshp?(air_loop_hvac)
|
|
1088
1144
|
air_loop_hvac.supplyComponents.each do |comp|
|
|
@@ -1097,8 +1153,23 @@ class Standard
|
|
|
1097
1153
|
return false
|
|
1098
1154
|
end
|
|
1099
1155
|
|
|
1156
|
+
# Determine if the air loop includes a unitary system
|
|
1157
|
+
#
|
|
1158
|
+
# @return [Bool] returns true if a unitary system is included on the air loop
|
|
1159
|
+
def air_loop_hvac_include_unitary_system?(air_loop_hvac)
|
|
1160
|
+
air_loop_hvac.supplyComponents.each do |comp|
|
|
1161
|
+
return true if comp.to_AirLoopHVACUnitarySystem.is_initialized
|
|
1162
|
+
end
|
|
1163
|
+
|
|
1164
|
+
return false
|
|
1165
|
+
end
|
|
1166
|
+
|
|
1100
1167
|
# Determine if the system economizer must be integrated or not.
|
|
1101
1168
|
# Default logic is from 90.1-2004.
|
|
1169
|
+
#
|
|
1170
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
1171
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
1172
|
+
# @return [Bool] returns true if required, false if not
|
|
1102
1173
|
def air_loop_hvac_integrated_economizer_required?(air_loop_hvac, climate_zone)
|
|
1103
1174
|
# Determine if it is a VAV system
|
|
1104
1175
|
is_vav = air_loop_hvac_vav_system?(air_loop_hvac)
|
|
@@ -1174,7 +1245,8 @@ class Standard
|
|
|
1174
1245
|
# Determine if an economizer is required per the PRM.
|
|
1175
1246
|
# Default logic from 90.1-2007
|
|
1176
1247
|
#
|
|
1177
|
-
# @param
|
|
1248
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
1249
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
1178
1250
|
# @return [Bool] returns true if required, false if not
|
|
1179
1251
|
def air_loop_hvac_prm_baseline_economizer_required?(air_loop_hvac, climate_zone)
|
|
1180
1252
|
economizer_required = false
|
|
@@ -1235,7 +1307,8 @@ class Standard
|
|
|
1235
1307
|
|
|
1236
1308
|
# Apply the PRM economizer type and set temperature limits
|
|
1237
1309
|
#
|
|
1238
|
-
# @param
|
|
1310
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
1311
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
1239
1312
|
# @return [Bool] returns true if successful, false if not
|
|
1240
1313
|
def air_loop_hvac_apply_prm_baseline_economizer(air_loop_hvac, climate_zone)
|
|
1241
1314
|
# EnergyPlus economizer types
|
|
@@ -1253,11 +1326,9 @@ class Standard
|
|
|
1253
1326
|
|
|
1254
1327
|
# Get the OA system and OA controller
|
|
1255
1328
|
oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
return false # No OA system
|
|
1260
|
-
end
|
|
1329
|
+
return false unless oa_sys.is_initialized
|
|
1330
|
+
|
|
1331
|
+
oa_sys = oa_sys.get
|
|
1261
1332
|
oa_control = oa_sys.getControllerOutdoorAir
|
|
1262
1333
|
|
|
1263
1334
|
# Set the economizer type
|
|
@@ -1298,6 +1369,9 @@ class Standard
|
|
|
1298
1369
|
|
|
1299
1370
|
# Determine the economizer type and limits for the the PRM
|
|
1300
1371
|
# Defaults to 90.1-2007 logic.
|
|
1372
|
+
#
|
|
1373
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
1374
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
1301
1375
|
# @return [Array<Double>] [economizer_type, drybulb_limit_f, enthalpy_limit_btu_per_lb, dewpoint_limit_f]
|
|
1302
1376
|
def air_loop_hvac_prm_economizer_type_and_limits(air_loop_hvac, climate_zone)
|
|
1303
1377
|
economizer_type = 'NoEconomizer'
|
|
@@ -1353,9 +1427,10 @@ class Standard
|
|
|
1353
1427
|
# Check the economizer type currently specified in the ControllerOutdoorAir object on this air loop
|
|
1354
1428
|
# is acceptable per the standard. Defaults to 90.1-2007 logic.
|
|
1355
1429
|
#
|
|
1356
|
-
# @param
|
|
1357
|
-
# @
|
|
1358
|
-
#
|
|
1430
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
1431
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
1432
|
+
# @return [Bool] returns true if allowable, if the system has no economizer or no OA system
|
|
1433
|
+
# Returns false if the economizer type is not allowable.
|
|
1359
1434
|
def air_loop_hvac_economizer_type_allowable?(air_loop_hvac, climate_zone)
|
|
1360
1435
|
# EnergyPlus economizer types
|
|
1361
1436
|
# 'NoEconomizer'
|
|
@@ -1369,18 +1444,14 @@ class Standard
|
|
|
1369
1444
|
|
|
1370
1445
|
# Get the OA system and OA controller
|
|
1371
1446
|
oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
return true # No OA system
|
|
1376
|
-
end
|
|
1447
|
+
return true unless oa_sys.is_initialized
|
|
1448
|
+
|
|
1449
|
+
oa_sys = oa_sys.get
|
|
1377
1450
|
oa_control = oa_sys.getControllerOutdoorAir
|
|
1378
1451
|
economizer_type = oa_control.getEconomizerControlType
|
|
1379
1452
|
|
|
1380
1453
|
# Return true if no economizer is present
|
|
1381
|
-
if economizer_type == 'NoEconomizer'
|
|
1382
|
-
return true
|
|
1383
|
-
end
|
|
1454
|
+
return true if economizer_type == 'NoEconomizer'
|
|
1384
1455
|
|
|
1385
1456
|
# Determine the prohibited types
|
|
1386
1457
|
prohibited_types = []
|
|
@@ -1441,8 +1512,9 @@ class Standard
|
|
|
1441
1512
|
|
|
1442
1513
|
# Check if ERV is required on this airloop.
|
|
1443
1514
|
#
|
|
1444
|
-
# @param
|
|
1445
|
-
# @
|
|
1515
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
1516
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
1517
|
+
# @return [Bool] returns true if required, false if not
|
|
1446
1518
|
# @todo Add exception logic for systems serving parking garage, warehouse, or multifamily
|
|
1447
1519
|
def air_loop_hvac_energy_recovery_ventilator_required?(air_loop_hvac, climate_zone)
|
|
1448
1520
|
# ERV Not Applicable for AHUs that serve
|
|
@@ -1457,7 +1529,7 @@ class Standard
|
|
|
1457
1529
|
|
|
1458
1530
|
erv_required = nil
|
|
1459
1531
|
# ERV not applicable for medical AHUs (AHU1 in Outpatient), per AIA 2001 - 7.31.D2.
|
|
1460
|
-
#
|
|
1532
|
+
# @todo refactor: move building type specific code
|
|
1461
1533
|
if air_loop_hvac.name.to_s.include? 'Outpatient F1'
|
|
1462
1534
|
erv_required = false
|
|
1463
1535
|
return erv_required
|
|
@@ -1472,7 +1544,8 @@ class Standard
|
|
|
1472
1544
|
return erv_required
|
|
1473
1545
|
end
|
|
1474
1546
|
case template
|
|
1475
|
-
when '90.1-2004', '90.1-2007'
|
|
1547
|
+
when '90.1-2004', '90.1-2007'
|
|
1548
|
+
# @todo Refactor figure out how to remove this.
|
|
1476
1549
|
if air_loop_hvac.name.to_s.include? 'VAV_ICU'
|
|
1477
1550
|
erv_required = false
|
|
1478
1551
|
return erv_required
|
|
@@ -1541,19 +1614,26 @@ class Standard
|
|
|
1541
1614
|
return erv_required
|
|
1542
1615
|
end
|
|
1543
1616
|
|
|
1544
|
-
# Determine the airflow limits that govern whether or not
|
|
1545
|
-
#
|
|
1617
|
+
# Determine the airflow limits that govern whether or not an ERV is required.
|
|
1618
|
+
# Based on climate zone and % OA.
|
|
1546
1619
|
# Defaults to DOE Ref Pre-1980, not required.
|
|
1547
|
-
#
|
|
1548
|
-
#
|
|
1620
|
+
#
|
|
1621
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
1622
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
1623
|
+
# @param pct_oa [Double] percentage of outdoor air
|
|
1624
|
+
# @return [Double] the flow rate above which an ERV is required. if nil, ERV is never required.
|
|
1549
1625
|
def air_loop_hvac_energy_recovery_ventilator_flow_limit(air_loop_hvac, climate_zone, pct_oa)
|
|
1550
1626
|
erv_cfm = nil # Not required
|
|
1551
1627
|
return erv_cfm
|
|
1552
1628
|
end
|
|
1553
1629
|
|
|
1554
|
-
# Determine whether to apply an Energy Recovery Ventilator 'ERV'
|
|
1630
|
+
# Determine whether to apply an Energy Recovery Ventilator 'ERV'
|
|
1631
|
+
# or a Heat Recovery Ventilator 'HRV' depending on the climate zone
|
|
1555
1632
|
# Defaults to ERV.
|
|
1556
|
-
#
|
|
1633
|
+
#
|
|
1634
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
1635
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
1636
|
+
# @return [String] the erv type
|
|
1557
1637
|
def air_loop_hvac_energy_recovery_ventilator_type(air_loop_hvac, climate_zone)
|
|
1558
1638
|
erv_type = 'ERV'
|
|
1559
1639
|
return erv_type
|
|
@@ -1561,16 +1641,40 @@ class Standard
|
|
|
1561
1641
|
|
|
1562
1642
|
# Determine whether to use a Plate-Frame or Rotary Wheel style ERV depending on air loop outdoor air flow rate
|
|
1563
1643
|
# Defaults to Rotary.
|
|
1564
|
-
#
|
|
1644
|
+
#
|
|
1645
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
1646
|
+
# @return [String] the erv type
|
|
1565
1647
|
def air_loop_hvac_energy_recovery_ventilator_heat_exchanger_type(air_loop_hvac)
|
|
1566
1648
|
heat_exchanger_type = 'Rotary'
|
|
1567
1649
|
return heat_exchanger_type
|
|
1568
1650
|
end
|
|
1569
1651
|
|
|
1652
|
+
def air_loop_hvac_remove_erv(air_loop_hvac)
|
|
1653
|
+
# Get the OA system
|
|
1654
|
+
oa_sys = nil
|
|
1655
|
+
if air_loop_hvac.airLoopHVACOutdoorAirSystem.is_initialized
|
|
1656
|
+
oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem.get
|
|
1657
|
+
else
|
|
1658
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}, ERV cannot be removed because the system has no OA intake.")
|
|
1659
|
+
return false
|
|
1660
|
+
end
|
|
1661
|
+
|
|
1662
|
+
# Get the existing ERV or create an ERV and add it to the OA system
|
|
1663
|
+
oa_sys.oaComponents.each do |oa_comp|
|
|
1664
|
+
if oa_comp.to_HeatExchangerAirToAirSensibleAndLatent.is_initialized
|
|
1665
|
+
erv = oa_comp.to_HeatExchangerAirToAirSensibleAndLatent.get
|
|
1666
|
+
erv.remove
|
|
1667
|
+
end
|
|
1668
|
+
end
|
|
1669
|
+
|
|
1670
|
+
return true
|
|
1671
|
+
end
|
|
1672
|
+
|
|
1570
1673
|
# Add an ERV to this airloop
|
|
1571
1674
|
#
|
|
1572
|
-
# @param
|
|
1573
|
-
# @
|
|
1675
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
1676
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
1677
|
+
# @return [Bool] returns true if required, false if not
|
|
1574
1678
|
# @todo Add exception logic for systems serving parking garage, warehouse, or multifamily
|
|
1575
1679
|
def air_loop_hvac_apply_energy_recovery_ventilator(air_loop_hvac, climate_zone)
|
|
1576
1680
|
# Get the OA system
|
|
@@ -1664,7 +1768,7 @@ class Standard
|
|
|
1664
1768
|
# @param erv [OpenStudio::Model::HeatExchangerAirToAirSensibleAndLatent] erv to apply efficiency values
|
|
1665
1769
|
# @param erv_type [String] erv type ERV or HRV
|
|
1666
1770
|
# @param heat_exchanger_type [String] heat exchanger type Rotary or Plate
|
|
1667
|
-
# @return
|
|
1771
|
+
# @return [OpenStudio::Model::HeatExchangerAirToAirSensibleAndLatent] erv to apply efficiency values
|
|
1668
1772
|
def air_loop_hvac_apply_energy_recovery_ventilator_efficiency(erv, erv_type: 'ERV', heat_exchanger_type: 'Rotary')
|
|
1669
1773
|
erv.setSensibleEffectivenessat100HeatingAirFlow(0.7)
|
|
1670
1774
|
erv.setLatentEffectivenessat100HeatingAirFlow(0.6)
|
|
@@ -1680,11 +1784,10 @@ class Standard
|
|
|
1680
1784
|
# Determine if multizone vav optimization is required.
|
|
1681
1785
|
# Defaults to 90.1-2007 logic, where it is not required.
|
|
1682
1786
|
#
|
|
1683
|
-
# @param
|
|
1684
|
-
# @
|
|
1685
|
-
# @
|
|
1686
|
-
#
|
|
1687
|
-
# dual duct systems
|
|
1787
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
1788
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
1789
|
+
# @return [Bool] returns true if required, false if not
|
|
1790
|
+
# @todo Add exception logic for systems with AIA healthcare ventilation requirements dual duct systems
|
|
1688
1791
|
def air_loop_hvac_multizone_vav_optimization_required?(air_loop_hvac, climate_zone)
|
|
1689
1792
|
multizone_opt_required = false
|
|
1690
1793
|
return multizone_opt_required
|
|
@@ -1693,7 +1796,8 @@ class Standard
|
|
|
1693
1796
|
# Enable multizone vav optimization by changing the Outdoor Air Method
|
|
1694
1797
|
# in the Controller:MechanicalVentilation object to 'VentilationRateProcedure'
|
|
1695
1798
|
#
|
|
1696
|
-
# @
|
|
1799
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
1800
|
+
# @return [Bool] returns true if required, false if not
|
|
1697
1801
|
def air_loop_hvac_enable_multizone_vav_optimization(air_loop_hvac)
|
|
1698
1802
|
# Enable multizone vav optimization
|
|
1699
1803
|
# at each timestep.
|
|
@@ -1713,7 +1817,8 @@ class Standard
|
|
|
1713
1817
|
# Disable multizone vav optimization by changing the Outdoor Air Method
|
|
1714
1818
|
# in the Controller:MechanicalVentilation object to 'ZoneSum'
|
|
1715
1819
|
#
|
|
1716
|
-
# @
|
|
1820
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
1821
|
+
# @return [Bool] returns true if required, false if not
|
|
1717
1822
|
def air_loop_hvac_disable_multizone_vav_optimization(air_loop_hvac)
|
|
1718
1823
|
# Disable multizone vav optimization
|
|
1719
1824
|
# at each timestep.
|
|
@@ -1731,9 +1836,10 @@ class Standard
|
|
|
1731
1836
|
|
|
1732
1837
|
# Set the minimum VAV damper positions.
|
|
1733
1838
|
#
|
|
1734
|
-
# @param
|
|
1735
|
-
# is DDC control of vav terminals.
|
|
1736
|
-
#
|
|
1839
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
1840
|
+
# @param has_ddc [Bool] if true, will assume that there is DDC control of vav terminals.
|
|
1841
|
+
# If false, assumes otherwise.
|
|
1842
|
+
# @return [Bool] returns true if successful, false if not
|
|
1737
1843
|
def air_loop_hvac_apply_minimum_vav_damper_positions(air_loop_hvac, has_ddc = true)
|
|
1738
1844
|
air_loop_hvac.thermalZones.each do |zone|
|
|
1739
1845
|
zone.equipment.each do |equip|
|
|
@@ -1748,10 +1854,11 @@ class Standard
|
|
|
1748
1854
|
return true
|
|
1749
1855
|
end
|
|
1750
1856
|
|
|
1751
|
-
# Adjust minimum VAV damper positions
|
|
1857
|
+
# Adjust minimum VAV damper positions and set minimum design
|
|
1858
|
+
# system outdoor air flow
|
|
1752
1859
|
#
|
|
1753
|
-
# @param
|
|
1754
|
-
# @return [Bool]
|
|
1860
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
1861
|
+
# @return [Bool] returns true if required, false if not
|
|
1755
1862
|
# @todo Add exception logic for systems serving parking garage, warehouse, or multifamily
|
|
1756
1863
|
def air_loop_hvac_adjust_minimum_vav_damper_positions(air_loop_hvac)
|
|
1757
1864
|
# Do not apply the adjustment to some of the system in
|
|
@@ -1964,11 +2071,16 @@ class Standard
|
|
|
1964
2071
|
# object with the calculated min OA flow rate
|
|
1965
2072
|
sizing_system = air_loop_hvac.sizingSystem
|
|
1966
2073
|
sizing_system.setDesignOutdoorAirFlowRate(v_ot_adj)
|
|
2074
|
+
sizing_system.setSystemOutdoorAirMethod('ZoneSum')
|
|
1967
2075
|
|
|
1968
2076
|
return true
|
|
1969
2077
|
end
|
|
1970
2078
|
|
|
1971
2079
|
# Set an air terminal's minimum damper position
|
|
2080
|
+
#
|
|
2081
|
+
# @param zone [OpenStudio::Model::ThermalZone] thermal zone
|
|
2082
|
+
# @param mdp [Double] minimum damper position
|
|
2083
|
+
# @return [Bool] returns true if successful, false if not
|
|
1972
2084
|
def air_loop_hvac_set_minimum_damper_position(zone, mdp)
|
|
1973
2085
|
zone.equipment.each do |equip|
|
|
1974
2086
|
if equip.to_AirTerminalSingleDuctVAVHeatAndCoolNoReheat.is_initialized
|
|
@@ -1995,14 +2107,17 @@ class Standard
|
|
|
1995
2107
|
# Reference: <Achieving the 30% Goal: Energy and Cost Savings Analysis of ASHRAE Standard 90.1-2010> Page109-111
|
|
1996
2108
|
# For implementation purpose, since it is time-consuming to perform autosizing in three climate zones, just use
|
|
1997
2109
|
# the results of the current climate zone
|
|
2110
|
+
#
|
|
2111
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2112
|
+
# @return [Bool] returns true if successful, false if not
|
|
1998
2113
|
def air_loop_hvac_adjust_minimum_vav_damper_positions_outpatient(air_loop_hvac)
|
|
1999
2114
|
air_loop_hvac.model.getSpaces.sort.each do |space|
|
|
2000
2115
|
zone = space.thermalZone.get
|
|
2001
2116
|
sizing_zone = zone.sizingZone
|
|
2002
2117
|
space_area = space.floorArea
|
|
2003
|
-
if sizing_zone.coolingDesignAirFlowMethod == 'DesignDay'
|
|
2004
|
-
|
|
2005
|
-
|
|
2118
|
+
next if sizing_zone.coolingDesignAirFlowMethod == 'DesignDay'
|
|
2119
|
+
|
|
2120
|
+
if sizing_zone.coolingDesignAirFlowMethod == 'DesignDayWithLimit'
|
|
2006
2121
|
minimum_airflow_per_zone_floor_area = sizing_zone.coolingMinimumAirFlowperZoneFloorArea
|
|
2007
2122
|
minimum_airflow_per_zone = minimum_airflow_per_zone_floor_area * space_area
|
|
2008
2123
|
# get the autosized maximum air flow of the VAV terminal
|
|
@@ -2028,13 +2143,12 @@ class Standard
|
|
|
2028
2143
|
return true
|
|
2029
2144
|
end
|
|
2030
2145
|
|
|
2031
|
-
# Determine if demand control ventilation (DCV) is
|
|
2032
|
-
# required for this air loop.
|
|
2146
|
+
# Determine if demand control ventilation (DCV) is required for this air loop.
|
|
2033
2147
|
#
|
|
2034
|
-
# @param
|
|
2035
|
-
# @
|
|
2036
|
-
# @
|
|
2037
|
-
#
|
|
2148
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2149
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
2150
|
+
# @return [Bool] returns true if required, false if not
|
|
2151
|
+
# @todo Add exception logic for systems that serve multifamily, parking garage, warehouse
|
|
2038
2152
|
def air_loop_hvac_demand_control_ventilation_required?(air_loop_hvac, climate_zone)
|
|
2039
2153
|
dcv_required = false
|
|
2040
2154
|
|
|
@@ -2113,9 +2227,10 @@ class Standard
|
|
|
2113
2227
|
end
|
|
2114
2228
|
|
|
2115
2229
|
# Determines the OA flow rates above which an economizer is required.
|
|
2116
|
-
# Two separate rates, one for systems with an economizer and another
|
|
2117
|
-
#
|
|
2118
|
-
#
|
|
2230
|
+
# Two separate rates, one for systems with an economizer and another for systems without.
|
|
2231
|
+
# Defaults to pre-1980 logic, where the limits are zero for both types.
|
|
2232
|
+
#
|
|
2233
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2119
2234
|
# @return [Array<Double>] [min_oa_without_economizer_cfm, min_oa_with_economizer_cfm]
|
|
2120
2235
|
def air_loop_hvac_demand_control_ventilation_limits(air_loop_hvac)
|
|
2121
2236
|
min_oa_without_economizer_cfm = 0
|
|
@@ -2125,18 +2240,21 @@ class Standard
|
|
|
2125
2240
|
|
|
2126
2241
|
# Determine if the standard has an exception for demand control ventilation
|
|
2127
2242
|
# when an energy recovery device is present. Defaults to true.
|
|
2243
|
+
#
|
|
2244
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2245
|
+
# @return [Bool] returns true if required, false if not
|
|
2128
2246
|
def air_loop_hvac_dcv_required_when_erv(air_loop_hvac)
|
|
2129
2247
|
dcv_required_when_erv_present = false
|
|
2130
2248
|
return dcv_required_when_erv_present
|
|
2131
2249
|
end
|
|
2132
2250
|
|
|
2133
2251
|
# Enable demand control ventilation (DCV) for this air loop.
|
|
2134
|
-
# Zones on this loop that require DCV preserve
|
|
2135
|
-
#
|
|
2136
|
-
# Other zones have OA reqs converted
|
|
2137
|
-
# to per-area values only so that DCV won't impact these zones.
|
|
2252
|
+
# Zones on this loop that require DCV preserve both per-area and per-person OA reqs.
|
|
2253
|
+
# Other zones have OA reqs converted to per-area values only so that DCV won't impact these zones.
|
|
2138
2254
|
#
|
|
2139
|
-
# @
|
|
2255
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2256
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
2257
|
+
# @return [Bool] returns true if required, false if not
|
|
2140
2258
|
def air_loop_hvac_enable_demand_control_ventilation(air_loop_hvac, climate_zone)
|
|
2141
2259
|
# Get the OA intake
|
|
2142
2260
|
controller_oa = nil
|
|
@@ -2164,20 +2282,21 @@ class Standard
|
|
|
2164
2282
|
return true
|
|
2165
2283
|
end
|
|
2166
2284
|
|
|
2167
|
-
# Determine if the system required supply air temperature
|
|
2168
|
-
#
|
|
2285
|
+
# Determine if the system required supply air temperature (SAT) reset.
|
|
2286
|
+
# Defaults to 90.1-2007, no SAT reset required.
|
|
2169
2287
|
#
|
|
2170
|
-
# @param
|
|
2171
|
-
# @
|
|
2288
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2289
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
2290
|
+
# @return [Bool] returns true if required, false if not
|
|
2172
2291
|
def air_loop_hvac_supply_air_temperature_reset_required?(air_loop_hvac, climate_zone)
|
|
2173
2292
|
is_sat_reset_required = false
|
|
2174
2293
|
return is_sat_reset_required
|
|
2175
2294
|
end
|
|
2176
2295
|
|
|
2177
|
-
# Enable supply air temperature (SAT) reset based
|
|
2178
|
-
# on the cooling demand of the warmest zone.
|
|
2296
|
+
# Enable supply air temperature (SAT) reset based on the cooling demand of the warmest zone.
|
|
2179
2297
|
#
|
|
2180
|
-
# @
|
|
2298
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2299
|
+
# @return [Bool] returns true if successful, false if not
|
|
2181
2300
|
def air_loop_hvac_enable_supply_air_temperature_reset_warmest_zone(air_loop_hvac)
|
|
2182
2301
|
# Get the current setpoint and calculate
|
|
2183
2302
|
# the new setpoint.
|
|
@@ -2211,19 +2330,20 @@ class Standard
|
|
|
2211
2330
|
# Determines supply air temperature (SAT) temperature.
|
|
2212
2331
|
# Defaults to 90.1-2007, 5 delta-F (R)
|
|
2213
2332
|
#
|
|
2214
|
-
# @
|
|
2333
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2334
|
+
# @return [Double] the SAT reset amount in degrees Rankine
|
|
2215
2335
|
def air_loop_hvac_enable_supply_air_temperature_reset_delta(air_loop_hvac)
|
|
2216
|
-
sat_reset_r = 5
|
|
2336
|
+
sat_reset_r = 5.0
|
|
2217
2337
|
return sat_reset_r
|
|
2218
2338
|
end
|
|
2219
2339
|
|
|
2220
|
-
# Enable supply air temperature (SAT) reset based
|
|
2221
|
-
#
|
|
2222
|
-
#
|
|
2223
|
-
#
|
|
2224
|
-
# linearly when outdoor air is between 50F and 70F.
|
|
2340
|
+
# Enable supply air temperature (SAT) reset based on outdoor air conditions.
|
|
2341
|
+
# SAT will be kept at the current design temperature when outdoor air is above 70F,
|
|
2342
|
+
# increased by 5F when outdoor air is below 50F,
|
|
2343
|
+
# and reset linearly when outdoor air is between 50F and 70F.
|
|
2225
2344
|
#
|
|
2226
|
-
# @
|
|
2345
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2346
|
+
# @return [Bool] returns true if successful, false if not
|
|
2227
2347
|
def air_loop_hvac_enable_supply_air_temperature_reset_outdoor_temperature(air_loop_hvac)
|
|
2228
2348
|
# for AHU1 in Outpatient, SAT is 52F constant, no reset
|
|
2229
2349
|
return true if air_loop_hvac.name.get == 'PVAV Outpatient F1'
|
|
@@ -2265,28 +2385,27 @@ class Standard
|
|
|
2265
2385
|
|
|
2266
2386
|
# Determine if the system has an economizer
|
|
2267
2387
|
#
|
|
2268
|
-
# @
|
|
2388
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2389
|
+
# @return [Bool] returns true if required, false if not
|
|
2269
2390
|
def air_loop_hvac_economizer?(air_loop_hvac)
|
|
2270
2391
|
# Get the OA system and OA controller
|
|
2271
2392
|
oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
return false # No OA system
|
|
2276
|
-
end
|
|
2393
|
+
return false unless oa_sys.is_initialized
|
|
2394
|
+
|
|
2395
|
+
oa_sys = oa_sys.get
|
|
2277
2396
|
oa_control = oa_sys.getControllerOutdoorAir
|
|
2278
2397
|
economizer_type = oa_control.getEconomizerControlType
|
|
2279
2398
|
|
|
2280
2399
|
# Return false if no economizer is present
|
|
2281
|
-
if economizer_type == 'NoEconomizer'
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
return true
|
|
2285
|
-
end
|
|
2400
|
+
return false if economizer_type == 'NoEconomizer'
|
|
2401
|
+
|
|
2402
|
+
return true
|
|
2286
2403
|
end
|
|
2287
2404
|
|
|
2288
|
-
# Determine if the system is a VAV system based on the fan
|
|
2289
|
-
#
|
|
2405
|
+
# Determine if the system is a VAV system based on the fan which may be inside of a unitary system.
|
|
2406
|
+
#
|
|
2407
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2408
|
+
# @return [Bool] returns true if vav system, false if not
|
|
2290
2409
|
def air_loop_hvac_vav_system?(air_loop_hvac)
|
|
2291
2410
|
is_vav = false
|
|
2292
2411
|
air_loop_hvac.supplyComponents.reverse.each do |comp|
|
|
@@ -2312,7 +2431,8 @@ class Standard
|
|
|
2312
2431
|
|
|
2313
2432
|
# Determine if the system is a multizone VAV system
|
|
2314
2433
|
#
|
|
2315
|
-
# @
|
|
2434
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2435
|
+
# @return [Bool] returns true if multizone vav, false if not
|
|
2316
2436
|
def air_loop_hvac_multizone_vav_system?(air_loop_hvac)
|
|
2317
2437
|
multizone_vav_system = false
|
|
2318
2438
|
|
|
@@ -2335,7 +2455,8 @@ class Standard
|
|
|
2335
2455
|
|
|
2336
2456
|
# Determine if the system has terminal reheat
|
|
2337
2457
|
#
|
|
2338
|
-
# @
|
|
2458
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2459
|
+
# @return [Bool] returns true if has one or more reheat terminals, false if it doesn't
|
|
2339
2460
|
def air_loop_hvac_terminal_reheat?(air_loop_hvac)
|
|
2340
2461
|
has_term_rht = false
|
|
2341
2462
|
air_loop_hvac.demandComponents.each do |sc|
|
|
@@ -2354,19 +2475,17 @@ class Standard
|
|
|
2354
2475
|
|
|
2355
2476
|
# Determine if the system has energy recovery already
|
|
2356
2477
|
#
|
|
2357
|
-
# @
|
|
2478
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2479
|
+
# @return [Bool] returns true if an ERV is present, false if not
|
|
2358
2480
|
def air_loop_hvac_energy_recovery?(air_loop_hvac)
|
|
2359
2481
|
has_erv = false
|
|
2360
2482
|
|
|
2361
2483
|
# Get the OA system
|
|
2362
2484
|
oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
|
|
2363
|
-
|
|
2364
|
-
oa_sys = oa_sys.get
|
|
2365
|
-
else
|
|
2366
|
-
return has_erv # No OA system
|
|
2367
|
-
end
|
|
2485
|
+
return false unless oa_sys.is_initialized
|
|
2368
2486
|
|
|
2369
2487
|
# Find any ERV on the OA system
|
|
2488
|
+
oa_sys = oa_sys.get
|
|
2370
2489
|
oa_sys.oaComponents.each do |oa_comp|
|
|
2371
2490
|
if oa_comp.to_HeatExchangerAirToAirSensibleAndLatent.is_initialized
|
|
2372
2491
|
has_erv = true
|
|
@@ -2378,7 +2497,8 @@ class Standard
|
|
|
2378
2497
|
|
|
2379
2498
|
# Determine if the air loop is a unitary system
|
|
2380
2499
|
#
|
|
2381
|
-
# @
|
|
2500
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2501
|
+
# @return [Bool] returns true if a unitary system is present, false if not
|
|
2382
2502
|
def air_loop_hvac_unitary_system?(air_loop_hvac)
|
|
2383
2503
|
is_unitary_system = false
|
|
2384
2504
|
air_loop_hvac.supplyComponents.each do |component|
|
|
@@ -2393,7 +2513,8 @@ class Standard
|
|
|
2393
2513
|
|
|
2394
2514
|
# Set the VAV damper control to single maximum or dual maximum control depending on the standard.
|
|
2395
2515
|
#
|
|
2396
|
-
# @
|
|
2516
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2517
|
+
# @return [Bool] returns true if successful, false if not
|
|
2397
2518
|
# @todo see if this impacts the sizing run.
|
|
2398
2519
|
def air_loop_hvac_apply_vav_damper_action(air_loop_hvac)
|
|
2399
2520
|
damper_action = air_loop_hvac_vav_damper_action(air_loop_hvac)
|
|
@@ -2442,6 +2563,7 @@ class Standard
|
|
|
2442
2563
|
# Determine whether the VAV damper control is single maximum or dual maximum control.
|
|
2443
2564
|
# Defaults to 90.1-2007.
|
|
2444
2565
|
#
|
|
2566
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2445
2567
|
# @return [String] the damper control type: Single Maximum, Dual Maximum
|
|
2446
2568
|
def air_loop_hvac_vav_damper_action(air_loop_hvac)
|
|
2447
2569
|
damper_action = 'Dual Maximum'
|
|
@@ -2449,10 +2571,14 @@ class Standard
|
|
|
2449
2571
|
end
|
|
2450
2572
|
|
|
2451
2573
|
# Determine if a motorized OA damper is required
|
|
2574
|
+
#
|
|
2575
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2576
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
2577
|
+
# @return [Bool] returns true if required, false if not
|
|
2452
2578
|
def air_loop_hvac_motorized_oa_damper_required?(air_loop_hvac, climate_zone)
|
|
2453
2579
|
motorized_oa_damper_required = false
|
|
2454
2580
|
|
|
2455
|
-
#
|
|
2581
|
+
# @todo refactor: Remove building type dependent logic
|
|
2456
2582
|
if air_loop_hvac.name.to_s.include? 'Outpatient F1'
|
|
2457
2583
|
motorized_oa_damper_required = true
|
|
2458
2584
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}: always has a damper, the minimum OA schedule is the same as airloop availability schedule.")
|
|
@@ -2519,41 +2645,37 @@ class Standard
|
|
|
2519
2645
|
return motorized_oa_damper_required
|
|
2520
2646
|
end
|
|
2521
2647
|
|
|
2522
|
-
# Determine the air flow and number of story limits
|
|
2523
|
-
#
|
|
2524
|
-
#
|
|
2525
|
-
# @
|
|
2526
|
-
#
|
|
2648
|
+
# Determine the air flow and number of story limits for whether motorized OA damper is required.
|
|
2649
|
+
# Defaults to DOE Ref Pre-1980 logic (never required).
|
|
2650
|
+
#
|
|
2651
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2652
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
2653
|
+
# @return [Array<Double>] [minimum_oa_flow_cfm, maximum_stories]. If both nil, never required
|
|
2527
2654
|
def air_loop_hvac_motorized_oa_damper_limits(air_loop_hvac, climate_zone)
|
|
2528
2655
|
minimum_oa_flow_cfm = nil
|
|
2529
2656
|
maximum_stories = nil
|
|
2530
2657
|
return [minimum_oa_flow_cfm, maximum_stories]
|
|
2531
2658
|
end
|
|
2532
2659
|
|
|
2533
|
-
# Add a motorized damper by modifying the OA schedule
|
|
2534
|
-
#
|
|
2535
|
-
#
|
|
2536
|
-
#
|
|
2537
|
-
#
|
|
2538
|
-
#
|
|
2539
|
-
#
|
|
2540
|
-
# is already other than Always On, will assume that this schedule
|
|
2541
|
-
# reflects a motorized OA damper and not change.
|
|
2660
|
+
# Add a motorized damper by modifying the OA schedule to require zero OA during unoccupied hours.
|
|
2661
|
+
# This means that even during morning warmup or nightcyling,
|
|
2662
|
+
# no OA will be brought into the building, lowering heating/cooling load.
|
|
2663
|
+
# If no occupancy schedule is supplied, one will be created. In this case,
|
|
2664
|
+
# occupied is defined as the total percent occupancy for the loop for all zones served.
|
|
2665
|
+
# If the OA schedule is already other than Always On,
|
|
2666
|
+
# will assume that this schedule reflects a motorized OA damper and not change.
|
|
2542
2667
|
#
|
|
2543
|
-
# @param
|
|
2544
|
-
# the system will be considered unoccupied.
|
|
2668
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2669
|
+
# @param min_occ_pct [Double] the fractional value below which the system will be considered unoccupied.
|
|
2545
2670
|
# @param occ_sch [OpenStudio::Model::Schedule] the occupancy schedule.
|
|
2546
|
-
#
|
|
2547
|
-
#
|
|
2548
|
-
# @return [Bool] true if successful, false if not
|
|
2671
|
+
# If not supplied, one will be created based on the supplied occupancy threshold.
|
|
2672
|
+
# @return [Bool] returns true if successful, false if not
|
|
2549
2673
|
def air_loop_hvac_add_motorized_oa_damper(air_loop_hvac, min_occ_pct = 0.05, occ_sch = nil)
|
|
2550
2674
|
# Get the OA system and OA controller
|
|
2551
2675
|
oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
return false # No OA system
|
|
2556
|
-
end
|
|
2676
|
+
return false unless oa_sys.is_initialized
|
|
2677
|
+
|
|
2678
|
+
oa_sys = oa_sys.get
|
|
2557
2679
|
oa_control = oa_sys.getControllerOutdoorAir
|
|
2558
2680
|
|
|
2559
2681
|
# Get the current min OA schedule and do nothing
|
|
@@ -2588,14 +2710,15 @@ class Standard
|
|
|
2588
2710
|
# the damper will be open and OA will be brought into the building.
|
|
2589
2711
|
# This reflects the use of a backdraft gravity damper, and
|
|
2590
2712
|
# increases building loads unnecessarily during unoccupied hours.
|
|
2713
|
+
#
|
|
2714
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2715
|
+
# @return [Bool] returns true if successful, false if not
|
|
2591
2716
|
def air_loop_hvac_remove_motorized_oa_damper(air_loop_hvac)
|
|
2592
2717
|
# Get the OA system and OA controller
|
|
2593
2718
|
oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
return false # No OA system
|
|
2598
|
-
end
|
|
2719
|
+
return false unless oa_sys.is_initialized
|
|
2720
|
+
|
|
2721
|
+
oa_sys = oa_sys.get
|
|
2599
2722
|
oa_control = oa_sys.getControllerOutdoorAir
|
|
2600
2723
|
|
|
2601
2724
|
# Set the minimum OA schedule to always 1 (100%)
|
|
@@ -2612,7 +2735,7 @@ class Standard
|
|
|
2612
2735
|
# but other zones that are intermittently occupied by many people,
|
|
2613
2736
|
# the first zone doesn't drive the entire system.
|
|
2614
2737
|
#
|
|
2615
|
-
# @param air_loop_hvac [
|
|
2738
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2616
2739
|
# @param occupied_percentage_threshold [Double] the minimum fraction (0 to 1) that counts as occupied
|
|
2617
2740
|
# @return [ScheduleRuleset] a ScheduleRuleset where 0 = unoccupied, 1 = occupied
|
|
2618
2741
|
def air_loop_hvac_get_occupancy_schedule(air_loop_hvac, occupied_percentage_threshold: 0.05)
|
|
@@ -2623,9 +2746,10 @@ class Standard
|
|
|
2623
2746
|
return sch_ruleset
|
|
2624
2747
|
end
|
|
2625
2748
|
|
|
2626
|
-
# Generate the EMS used to implement the economizer
|
|
2627
|
-
# and staging controls for packaged single zone units.
|
|
2749
|
+
# Generate the EMS used to implement the economizer and staging controls for packaged single zone units.
|
|
2628
2750
|
#
|
|
2751
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
2752
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
2629
2753
|
# @return [Bool] returns true if successful, false if not
|
|
2630
2754
|
def air_loop_hvac_apply_single_zone_controls(air_loop_hvac, climate_zone)
|
|
2631
2755
|
# These controls only apply to systems with DX cooling
|
|
@@ -2668,11 +2792,9 @@ class Standard
|
|
|
2668
2792
|
|
|
2669
2793
|
# Get the OA system and OA controller
|
|
2670
2794
|
oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
|
|
2671
|
-
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
return false # No OA system
|
|
2675
|
-
end
|
|
2795
|
+
return false unless oa_sys.is_initialized
|
|
2796
|
+
|
|
2797
|
+
oa_sys = oa_sys.get
|
|
2676
2798
|
oa_control = oa_sys.getControllerOutdoorAir
|
|
2677
2799
|
oa_node = oa_sys.outboardOANode.get
|
|
2678
2800
|
|
|
@@ -2683,6 +2805,10 @@ class Standard
|
|
|
2683
2805
|
air_loop_hvac.model.alwaysOnDiscreteSchedule
|
|
2684
2806
|
end
|
|
2685
2807
|
|
|
2808
|
+
# Create an economizer maximum OA fraction schedule with
|
|
2809
|
+
# a maximum of 70% to reflect damper leakage per PNNL
|
|
2810
|
+
max_oa_sch = set_maximum_fraction_outdoor_air_schedule(air_loop_hvac, oa_control, snc) unless air_loop_hvac_has_simple_transfer_air?(air_loop_hvac)
|
|
2811
|
+
|
|
2686
2812
|
# Get the supply fan
|
|
2687
2813
|
if air_loop_hvac.supplyFan.empty?
|
|
2688
2814
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}: No supply fan found, cannot apply DX fan/economizer control.")
|
|
@@ -2725,15 +2851,6 @@ class Standard
|
|
|
2725
2851
|
return false
|
|
2726
2852
|
end
|
|
2727
2853
|
|
|
2728
|
-
# Create an economizer maximum OA fraction schedule with
|
|
2729
|
-
# a maximum of 70% to reflect damper leakage per PNNL
|
|
2730
|
-
max_oa_sch_name = "#{snc}maxOASch"
|
|
2731
|
-
max_oa_sch = OpenStudio::Model::ScheduleRuleset.new(air_loop_hvac.model)
|
|
2732
|
-
max_oa_sch.setName(max_oa_sch_name)
|
|
2733
|
-
max_oa_sch.defaultDaySchedule.setName("#{max_oa_sch_name}Default")
|
|
2734
|
-
max_oa_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0.7)
|
|
2735
|
-
oa_control.setMaximumFractionofOutdoorAirSchedule(max_oa_sch)
|
|
2736
|
-
|
|
2737
2854
|
### EMS shared by both programs ###
|
|
2738
2855
|
# Sensors
|
|
2739
2856
|
oat_db_c_sen = OpenStudio::Model::EnergyManagementSystemSensor.new(air_loop_hvac.model, 'Site Outdoor Air Drybulb Temperature')
|
|
@@ -2983,27 +3100,29 @@ class Standard
|
|
|
2983
3100
|
return true
|
|
2984
3101
|
end
|
|
2985
3102
|
|
|
2986
|
-
# Determine the number of stages that should be used as controls
|
|
2987
|
-
#
|
|
2988
|
-
# that no special single zone control is required.
|
|
3103
|
+
# Determine the number of stages that should be used as controls for single zone DX systems.
|
|
3104
|
+
# Defaults to zero, which means that no special single zone control is required.
|
|
2989
3105
|
#
|
|
3106
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
3107
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
2990
3108
|
# @return [Integer] the number of stages: 0, 1, 2
|
|
2991
3109
|
def air_loop_hvac_single_zone_controls_num_stages(air_loop_hvac, climate_zone)
|
|
2992
3110
|
num_stages = 0
|
|
2993
3111
|
return num_stages
|
|
2994
3112
|
end
|
|
2995
3113
|
|
|
2996
|
-
# Determine if static pressure reset is required for this
|
|
2997
|
-
#
|
|
2998
|
-
#
|
|
2999
|
-
#
|
|
3114
|
+
# Determine if static pressure reset is required for this system.
|
|
3115
|
+
# For 90.1, this determination needs information about
|
|
3116
|
+
# whether or not the system has DDC control over the VAV terminals.
|
|
3117
|
+
# Defaults to 90.1-2007 logic.
|
|
3000
3118
|
#
|
|
3001
3119
|
# @todo Instead of requiring the input of whether a system
|
|
3002
3120
|
# has DDC control of VAV terminals or not, determine this
|
|
3003
3121
|
# from the system itself. This may require additional information
|
|
3004
3122
|
# be added to the OpenStudio data model.
|
|
3005
|
-
#
|
|
3006
|
-
#
|
|
3123
|
+
#
|
|
3124
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
3125
|
+
# @param has_ddc [Bool] whether or not the system has DDC control over VAV terminals.
|
|
3007
3126
|
# return [Bool] returns true if static pressure reset is required, false if not
|
|
3008
3127
|
def air_loop_hvac_static_pressure_reset_required?(air_loop_hvac, has_ddc)
|
|
3009
3128
|
sp_reset_required = false
|
|
@@ -3020,7 +3139,9 @@ class Standard
|
|
|
3020
3139
|
|
|
3021
3140
|
# Determine if a system's fans must shut off when not required.
|
|
3022
3141
|
# Per ASHRAE 90.1 section 6.4.3.3, HVAC systems are required to have off-hour controls
|
|
3023
|
-
#
|
|
3142
|
+
#
|
|
3143
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
3144
|
+
# @return [Bool] returns true if required, false if not
|
|
3024
3145
|
def air_loop_hvac_unoccupied_fan_shutoff_required?(air_loop_hvac)
|
|
3025
3146
|
shutoff_required = true
|
|
3026
3147
|
|
|
@@ -3033,27 +3154,23 @@ class Standard
|
|
|
3033
3154
|
end
|
|
3034
3155
|
|
|
3035
3156
|
# Default occupancy fraction threshold for determining if the spaces on the air loop are occupied
|
|
3157
|
+
# @return [Double] threshold at which the air loop space are considered unoccupied
|
|
3036
3158
|
def air_loop_hvac_unoccupied_threshold
|
|
3037
3159
|
return 0.15
|
|
3038
3160
|
end
|
|
3039
3161
|
|
|
3040
3162
|
# Shut off the system during unoccupied periods.
|
|
3041
|
-
# During these times, systems will cycle on briefly
|
|
3042
|
-
#
|
|
3043
|
-
#
|
|
3044
|
-
#
|
|
3045
|
-
#
|
|
3046
|
-
#
|
|
3047
|
-
#
|
|
3048
|
-
#
|
|
3049
|
-
#
|
|
3050
|
-
#
|
|
3051
|
-
#
|
|
3052
|
-
# occupancy for the loop for all zones served.
|
|
3053
|
-
#
|
|
3054
|
-
# @param min_occ_pct [Double] the fractional value below which
|
|
3055
|
-
# the system will be considered unoccupied.
|
|
3056
|
-
# @return [Bool] true if successful, false if not
|
|
3163
|
+
# During these times, systems will cycle on briefly if temperature drifts below setpoint.
|
|
3164
|
+
# For systems with fan-powered terminals, the whole system (not just the terminal fans) will cycle on.
|
|
3165
|
+
# Terminal-only night cycling is not used because the terminals cannot provide cooling,
|
|
3166
|
+
# so terminal-only night cycling leads to excessive unmet cooling hours during unoccupied periods.
|
|
3167
|
+
# If the system already has a schedule other than Always-On, no change will be made.
|
|
3168
|
+
# If the system has an Always-On schedule assigned, a new schedule will be created.
|
|
3169
|
+
# In this case, occupied is defined as the total percent occupancy for the loop for all zones served.
|
|
3170
|
+
#
|
|
3171
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
3172
|
+
# @param min_occ_pct [Double] the fractional value below which the system will be considered unoccupied.
|
|
3173
|
+
# @return [Bool] returns true if successful, false if not
|
|
3057
3174
|
def air_loop_hvac_enable_unoccupied_fan_shutoff(air_loop_hvac, min_occ_pct = 0.05)
|
|
3058
3175
|
# Set the system to night cycle
|
|
3059
3176
|
air_loop_hvac.setNightCycleControlType('CycleOnAny')
|
|
@@ -3083,11 +3200,10 @@ class Standard
|
|
|
3083
3200
|
return true
|
|
3084
3201
|
end
|
|
3085
3202
|
|
|
3086
|
-
# Calculate the total floor area of all zones attached
|
|
3087
|
-
# to the air loop, in m^2.
|
|
3203
|
+
# Calculate the total floor area of all zones attached to the air loop, in m^2.
|
|
3088
3204
|
#
|
|
3089
|
-
#
|
|
3090
|
-
# to the air loop
|
|
3205
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
3206
|
+
# return [Double] the total floor area of all zones attached to the air loop in m^2.
|
|
3091
3207
|
def air_loop_hvac_floor_area_served(air_loop_hvac)
|
|
3092
3208
|
total_area = 0.0
|
|
3093
3209
|
|
|
@@ -3098,11 +3214,10 @@ class Standard
|
|
|
3098
3214
|
return total_area
|
|
3099
3215
|
end
|
|
3100
3216
|
|
|
3101
|
-
# Calculate the total floor area of all zones attached
|
|
3102
|
-
# to the air loop that have no exterior surfaces, in m^2.
|
|
3217
|
+
# Calculate the total floor area of all zones attached to the air loop that have no exterior surfaces, in m^2.
|
|
3103
3218
|
#
|
|
3104
|
-
#
|
|
3105
|
-
# to the air loop
|
|
3219
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
3220
|
+
# return [Double] the total floor area of all zones attached to the air loop in m^2.
|
|
3106
3221
|
def air_loop_hvac_floor_area_served_interior_zones(air_loop_hvac)
|
|
3107
3222
|
total_area = 0.0
|
|
3108
3223
|
|
|
@@ -3116,11 +3231,10 @@ class Standard
|
|
|
3116
3231
|
return total_area
|
|
3117
3232
|
end
|
|
3118
3233
|
|
|
3119
|
-
# Calculate the total floor area of all zones attached
|
|
3120
|
-
# to the air loop that have at least one exterior surface, in m^2.
|
|
3234
|
+
# Calculate the total floor area of all zones attached to the air loop that have at least one exterior surface, in m^2.
|
|
3121
3235
|
#
|
|
3122
|
-
#
|
|
3123
|
-
# to the air loop
|
|
3236
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
3237
|
+
# return [Double] the total floor area of all zones attached to the air loop in m^2.
|
|
3124
3238
|
def air_loop_hvac_floor_area_served_exterior_zones(air_loop_hvac)
|
|
3125
3239
|
total_area = 0.0
|
|
3126
3240
|
|
|
@@ -3136,7 +3250,8 @@ class Standard
|
|
|
3136
3250
|
|
|
3137
3251
|
# find design_supply_air_flow_rate
|
|
3138
3252
|
#
|
|
3139
|
-
# @
|
|
3253
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
3254
|
+
# @return [Double] design supply air flow rate in m^3/s
|
|
3140
3255
|
def air_loop_hvac_find_design_supply_air_flow_rate(air_loop_hvac)
|
|
3141
3256
|
# Get the design_supply_air_flow_rate
|
|
3142
3257
|
design_supply_air_flow_rate = nil
|
|
@@ -3153,7 +3268,8 @@ class Standard
|
|
|
3153
3268
|
|
|
3154
3269
|
# Determine how much residential area the airloop serves
|
|
3155
3270
|
#
|
|
3156
|
-
# @
|
|
3271
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
3272
|
+
# @return [Double] residential area served in m^2
|
|
3157
3273
|
def air_loop_hvac_residential_area_served(air_loop_hvac)
|
|
3158
3274
|
res_area = 0.0
|
|
3159
3275
|
|
|
@@ -3177,15 +3293,12 @@ class Standard
|
|
|
3177
3293
|
return res_area
|
|
3178
3294
|
end
|
|
3179
3295
|
|
|
3180
|
-
# Determine how much data center
|
|
3181
|
-
# area the airloop serves.
|
|
3296
|
+
# Determine how much data center area the airloop serves.
|
|
3182
3297
|
#
|
|
3183
|
-
# @
|
|
3184
|
-
# in m^2.
|
|
3185
|
-
# @todo Add an is_data_center field to the
|
|
3186
|
-
# standards space type
|
|
3187
|
-
# of relying on the standards space type name to
|
|
3188
|
-
# identify a data center.
|
|
3298
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
3299
|
+
# @return [Double] the area of data center is served in m^2.
|
|
3300
|
+
# @todo Add an is_data_center field to the standards space type spreadsheet instead
|
|
3301
|
+
# of relying on the standards space type name to identify a data center.
|
|
3189
3302
|
def air_loop_hvac_data_center_area_served(air_loop_hvac)
|
|
3190
3303
|
dc_area_m2 = 0.0
|
|
3191
3304
|
|
|
@@ -3216,6 +3329,7 @@ class Standard
|
|
|
3216
3329
|
|
|
3217
3330
|
# Determine how many humidifies are on the airloop
|
|
3218
3331
|
#
|
|
3332
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
3219
3333
|
# @return [Integer] the number of humidifiers
|
|
3220
3334
|
def air_loop_hvac_humidifier_count(air_loop_hvac)
|
|
3221
3335
|
humidifiers = 0
|
|
@@ -3227,11 +3341,11 @@ class Standard
|
|
|
3227
3341
|
return humidifiers
|
|
3228
3342
|
end
|
|
3229
3343
|
|
|
3230
|
-
# Sets the maximum reheat temperature to the specified
|
|
3231
|
-
# value for all reheat terminals (of any type) on the loop.
|
|
3344
|
+
# Sets the maximum reheat temperature to the specified value for all reheat terminals (of any type) on the loop.
|
|
3232
3345
|
#
|
|
3233
|
-
# @param
|
|
3234
|
-
# @
|
|
3346
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
3347
|
+
# @param max_reheat_c [Double] the maximum reheat temperature, in degrees Celsius
|
|
3348
|
+
# @return [Bool] returns true if successful, false if not
|
|
3235
3349
|
def air_loop_hvac_apply_maximum_reheat_temperature(air_loop_hvac, max_reheat_c)
|
|
3236
3350
|
air_loop_hvac.demandComponents.each do |sc|
|
|
3237
3351
|
if sc.to_AirTerminalSingleDuctConstantVolumeReheat.is_initialized
|
|
@@ -3258,7 +3372,8 @@ class Standard
|
|
|
3258
3372
|
|
|
3259
3373
|
# Set the system sizing properties based on the zone sizing information
|
|
3260
3374
|
#
|
|
3261
|
-
# @
|
|
3375
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
3376
|
+
# @return [Bool] returns true if successful, false if not
|
|
3262
3377
|
def air_loop_hvac_apply_prm_sizing_temperatures(air_loop_hvac)
|
|
3263
3378
|
# Get the design heating and cooling SAT information
|
|
3264
3379
|
# for all zones served by the system.
|
|
@@ -3302,8 +3417,10 @@ class Standard
|
|
|
3302
3417
|
return true
|
|
3303
3418
|
end
|
|
3304
3419
|
|
|
3305
|
-
# Determine if every zone on the system has an identical
|
|
3306
|
-
#
|
|
3420
|
+
# Determine if every zone on the system has an identical multiplier.
|
|
3421
|
+
# If so, return this number. If not, return 1.
|
|
3422
|
+
#
|
|
3423
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
3307
3424
|
# @return [Integer] an integer representing the system multiplier.
|
|
3308
3425
|
def air_loop_hvac_system_multiplier(air_loop_hvac)
|
|
3309
3426
|
mult = 1
|
|
@@ -3327,7 +3444,8 @@ class Standard
|
|
|
3327
3444
|
|
|
3328
3445
|
# Determine if this Air Loop uses DX cooling.
|
|
3329
3446
|
#
|
|
3330
|
-
# @
|
|
3447
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
3448
|
+
# @return [Bool] returns true if uses DX cooling, false if not
|
|
3331
3449
|
def air_loop_hvac_dx_cooling?(air_loop_hvac)
|
|
3332
3450
|
dx_clg = false
|
|
3333
3451
|
|
|
@@ -3374,7 +3492,8 @@ class Standard
|
|
|
3374
3492
|
|
|
3375
3493
|
# Determine if this Air Loop uses multi-stage DX cooling.
|
|
3376
3494
|
#
|
|
3377
|
-
# @
|
|
3495
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
3496
|
+
# @return [Bool] returns true if uses multi-stage DX cooling, false if not
|
|
3378
3497
|
def air_loop_hvac_multi_stage_dx_cooling?(air_loop_hvac)
|
|
3379
3498
|
dx_clg = false
|
|
3380
3499
|
|
|
@@ -3414,4 +3533,55 @@ class Standard
|
|
|
3414
3533
|
|
|
3415
3534
|
return dx_clg
|
|
3416
3535
|
end
|
|
3536
|
+
|
|
3537
|
+
# Add occupant standby controls to air loop
|
|
3538
|
+
# When the thermostat schedule is setup or setback
|
|
3539
|
+
# the ventilation is shutoff. Currently this is done
|
|
3540
|
+
# by scheduling air terminal dampers (so load can
|
|
3541
|
+
# still be met) and cycling unitary system fans
|
|
3542
|
+
#
|
|
3543
|
+
# @param air_loop_hvac [OpenStudio::model::AirLoopHVAC] OpenStudio AirLoopHVAC object
|
|
3544
|
+
# @param standby_mode_space [Array] List of all spaces required to have standby mode controls
|
|
3545
|
+
# @return [Boolean] true if sucessful, false otherwise
|
|
3546
|
+
def air_loop_hvac_standby_mode_occupancy_control(air_loop_hvac, standby_mode_spaces)
|
|
3547
|
+
return true
|
|
3548
|
+
end
|
|
3549
|
+
|
|
3550
|
+
# Create an economizer maximum OA fraction schedule with
|
|
3551
|
+
# For ASHRAE 90.1 2019, a maximum of 75% to reflect damper leakage per PNNL
|
|
3552
|
+
#
|
|
3553
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] HVAC air loop object
|
|
3554
|
+
# @param oa_control [OpenStudio::Model::ControllerOutdoorAir] Outdoor air controller object to have this maximum OA fraction schedule
|
|
3555
|
+
# @param snc [String] System name
|
|
3556
|
+
#
|
|
3557
|
+
# @return [OpenStudio::Model::ScheduleRuleset] Generated maximum outdoor air fraction schedule for later use
|
|
3558
|
+
def set_maximum_fraction_outdoor_air_schedule(air_loop_hvac, oa_control, snc)
|
|
3559
|
+
max_oa_sch_name = "#{snc}maxOASch"
|
|
3560
|
+
max_oa_sch = OpenStudio::Model::ScheduleRuleset.new(air_loop_hvac.model)
|
|
3561
|
+
max_oa_sch.setName(max_oa_sch_name)
|
|
3562
|
+
max_oa_sch.defaultDaySchedule.setName("#{max_oa_sch_name}Default")
|
|
3563
|
+
max_oa_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0.7)
|
|
3564
|
+
oa_control.setMaximumFractionofOutdoorAirSchedule(max_oa_sch)
|
|
3565
|
+
max_oa_sch
|
|
3566
|
+
end
|
|
3567
|
+
|
|
3568
|
+
# Checks if zones served by the air loop use zone exhaust fan
|
|
3569
|
+
# a simplified approach to model transfer air
|
|
3570
|
+
#
|
|
3571
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] OpenStudio AirLoopHVAC object
|
|
3572
|
+
# @return [Boolean] true if simple transfer air is modeled, false otherwise
|
|
3573
|
+
def air_loop_hvac_has_simple_transfer_air?(air_loop_hvac)
|
|
3574
|
+
simple_transfer_air = false
|
|
3575
|
+
zones = air_loop_hvac.thermalZones
|
|
3576
|
+
zones_name = []
|
|
3577
|
+
zones.each do |zone|
|
|
3578
|
+
zones_name << zone.name.to_s
|
|
3579
|
+
end
|
|
3580
|
+
air_loop_hvac.model.getFanZoneExhausts.sort.each do |exhaust_fan|
|
|
3581
|
+
if (zones_name.include? exhaust_fan.thermalZone.get.name.to_s) && exhaust_fan.balancedExhaustFractionSchedule.is_initialized
|
|
3582
|
+
simple_transfer_air = true
|
|
3583
|
+
end
|
|
3584
|
+
end
|
|
3585
|
+
return simple_transfer_air
|
|
3586
|
+
end
|
|
3417
3587
|
end
|