openstudio-standards 0.2.14 → 0.2.15.pre.rc1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|