openstudio-standards 0.4.0 → 0.5.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/data/inventory/thermal_bridging.csv +90 -0
- data/data/standards/OpenStudio_Standards-deer-comstock.xlsx +0 -0
- data/data/standards/manage_OpenStudio_Standards.rb +1 -1
- data/data/standards/test_performance_expected_dd_results.csv +2014 -1891
- data/lib/openstudio-standards/btap/analysis.rb +8 -8
- data/lib/openstudio-standards/btap/bridging.rb +664 -645
- data/lib/openstudio-standards/btap/btap.model.rb +14 -14
- data/lib/openstudio-standards/btap/btap.rb +7 -7
- data/lib/openstudio-standards/btap/btap_result.rb +1 -1
- data/lib/openstudio-standards/btap/economics.rb +23 -23
- data/lib/openstudio-standards/btap/envelope.rb +8 -8
- data/lib/openstudio-standards/btap/equest.rb +1 -1
- data/lib/openstudio-standards/btap/geometry.rb +2 -2
- data/lib/openstudio-standards/btap/mpc.rb +7 -7
- data/lib/openstudio-standards/btap/schedules.rb +1 -1
- data/lib/openstudio-standards/btap/simmanager.rb +4 -4
- data/lib/openstudio-standards/btap/spaceloads.rb +26 -26
- data/lib/openstudio-standards/btap/utilities.rb +6 -6
- data/lib/openstudio-standards/btap/vintagizer.rb +1 -1
- data/lib/openstudio-standards/constructions/information.rb +83 -0
- data/lib/openstudio-standards/constructions/materials/modify.rb +72 -0
- data/lib/openstudio-standards/constructions/modify.rb +80 -0
- data/lib/openstudio-standards/create_typical/create_typical.rb +983 -0
- data/lib/openstudio-standards/create_typical/enumerations.rb +484 -0
- data/lib/openstudio-standards/create_typical/space_type_blend.rb +791 -0
- data/lib/openstudio-standards/create_typical/space_type_ratios.rb +494 -0
- data/lib/openstudio-standards/daylighting/space.rb +47 -0
- data/lib/openstudio-standards/geometry/create.rb +801 -0
- data/lib/openstudio-standards/geometry/create_bar.rb +2171 -0
- data/lib/openstudio-standards/geometry/information.rb +462 -0
- data/lib/openstudio-standards/geometry/modify.rb +48 -0
- data/lib/openstudio-standards/hvac/air_loop/information.rb +79 -0
- data/lib/openstudio-standards/hvac/cbecs_hvac.rb +616 -0
- data/lib/openstudio-standards/hvac/setpoint_managers/information.rb +91 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Model.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.rb +2 -2
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.hvac_systems.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +4 -36
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.hvac_systems.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +4 -36
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +3 -3
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.hvac_systems.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.elevators.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.CoilHeatingGas.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.elevators.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.College.rb +7 -7
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Courthouse.rb +8 -8
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.FullServiceRestaurant.rb +14 -14
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.HighRiseApartment.rb +9 -9
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +16 -16
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb +7 -7
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterHighITE.rb +8 -8
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterLowITE.rb +8 -8
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +11 -11
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +7 -7
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOfficeDetailed.rb +9 -9
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +8 -8
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOfficeDetailed.rb +11 -11
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MidriseApartment.rb +9 -9
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +19 -19
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +10 -10
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.QuickServiceRestaurant.rb +13 -13
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStandalone.rb +6 -6
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStripmall.rb +6 -6
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +9 -9
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterHighITE.rb +8 -8
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterLowITE.rb +8 -8
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallHotel.rb +8 -8
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOffice.rb +8 -8
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOfficeDetailed.rb +11 -11
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperMarket.rb +10 -10
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperTallBuilding.rb +19 -19
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.TallBuilding.rb +18 -18
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Warehouse.rb +6 -6
- data/lib/openstudio-standards/prototypes/common/do_not_edit_metaclasses.rb +957 -957
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +84 -16
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingGas.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +61 -10
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.ControllerWaterCoil.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoolingTower.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanConstantVolume.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanOnOff.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanZoneExhaust.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +2 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +4 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +4 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +43 -30
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.swh.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +18 -11
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.SizingSystem.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +774 -117
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +340 -481
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +3 -3
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +3 -3
- data/lib/openstudio-standards/prototypes/common/prototype_metaprogramming.rb +22 -22
- data/lib/openstudio-standards/prototypes/deer/deer.Model.rb +1 -1
- data/lib/openstudio-standards/qaqc/calibration.rb +131 -0
- data/lib/openstudio-standards/qaqc/create_results.rb +983 -0
- data/lib/openstudio-standards/qaqc/envelope.rb +399 -0
- data/lib/openstudio-standards/qaqc/eui.rb +213 -0
- data/lib/openstudio-standards/qaqc/hvac.rb +1943 -0
- data/lib/openstudio-standards/qaqc/internal_loads.rb +568 -0
- data/lib/openstudio-standards/qaqc/reporting.rb +141 -0
- data/lib/openstudio-standards/qaqc/schedules.rb +129 -0
- data/lib/openstudio-standards/qaqc/service_water_heating.rb +273 -0
- data/lib/openstudio-standards/qaqc/weather_files.rb +497 -0
- data/lib/openstudio-standards/qaqc/zone_conditions.rb +278 -0
- data/lib/openstudio-standards/schedules/create.rb +364 -0
- data/lib/openstudio-standards/schedules/information.rb +169 -0
- data/lib/openstudio-standards/schedules/modify.rb +445 -0
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +110 -71
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +3 -3
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +4 -4
- data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +2 -1
- data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +16 -10
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +4 -4
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.CoilDX.rb +4 -4
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +5 -5
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.Construction.rb +17 -18
- data/lib/openstudio-standards/standards/Standards.CoolingTower.rb +6 -6
- data/lib/openstudio-standards/standards/Standards.CoolingTowerSingleSpeed.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.CoolingTowerTwoSpeed.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.CoolingTowerVariableSpeed.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.Fan.rb +6 -12
- data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.FluidCooler.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +3 -3
- data/lib/openstudio-standards/standards/Standards.Model.rb +411 -261
- data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +94 -29
- data/lib/openstudio-standards/standards/Standards.Pump.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +14 -14
- data/lib/openstudio-standards/standards/Standards.Space.rb +37 -30
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +38 -29
- data/lib/openstudio-standards/standards/Standards.SubSurface.rb +7 -7
- data/lib/openstudio-standards/standards/Standards.Surface.rb +13 -13
- data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +109 -66
- data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +11 -4
- data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PlantLoop.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Space.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.Space.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirLoopHVAC.rb +4 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Space.rb +4 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC.rb +4 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.CoolingTowerVariableSpeed.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.rb +5 -21
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Space.rb +4 -4
- 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 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirLoopHVAC.rb +36 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTowerVariableSpeed.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Space.rb +4 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.ZoneHVACComponent.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/comstock_ashrae_90_1_2016.AirLoopHVAC.rb +26 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +53 -10
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTowerVariableSpeed.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ZoneHVACComponent.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/comstock_ashrae_90_1_2019.AirLoopHVAC.rb +26 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +211 -211
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.economizers.json +14 -14
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirLoopHVAC.rb +4 -4
- 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 +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.economizers.json +14 -14
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirLoopHVAC.rb +4 -4
- 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 +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.CoolingTowerVariableSpeed.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Space.rb +4 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirLoopHVAC.rb +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerVariableSpeed.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Space.rb +4 -4
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +22 -28
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirTerminalSingleDuctParallelPIUReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirTerminalSingleDuctVAVReheat.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.BoilerHotWater.rb +1 -74
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ChillerElectricEIR.rb +7 -59
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXSingleSpeed.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXTwoSpeed.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilDX.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingDXSingleSpeed.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingGas.rb +1 -21
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.DesignSpecificationOutdoorAir.rb +101 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanConstantVolume.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanOnOff.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.HeatExchangerSensLat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +643 -526
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlanarSurface.rb +8 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +17 -77
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Space.rb +74 -16
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +96 -44
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Surface.rb +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ThermalZone.rb +18 -6
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ZoneHVACComponent.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.rb +328 -74
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +0 -118
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.rb +2 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.heat_rejection.json +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/baseline_outdoor_air.md +35 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_plug_load_measures.md +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/ashrae_90_1_prm.UserData.rb +228 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_enums.rb +131 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_space.csv +1 -1
- data/lib/openstudio-standards/standards/cbes/cbes.AirLoopHVAC.rb +5 -5
- data/lib/openstudio-standards/standards/cbes/cbes.Model.rb +1 -1
- data/lib/openstudio-standards/standards/cbes/cbes.PlantLoop.rb +1 -1
- data/lib/openstudio-standards/standards/cbes/cbes.Space.rb +1 -1
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2005/cbes_t24_2005.Space.rb +1 -1
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2008/cbes_t24_2008.Space.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer.AirLoopHVAC.rb +109 -27
- data/lib/openstudio-standards/standards/deer/deer.Space.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.economizers.json +246 -4
- data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.economizers.json +246 -4
- data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.economizers.json +246 -4
- data/lib/openstudio-standards/standards/deer/deer_2003/deer_2003.ThermalZone.rb +18 -18
- data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.economizers.json +246 -4
- data/lib/openstudio-standards/standards/deer/deer_2007/deer_2007.ThermalZone.rb +18 -18
- data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.economizers.json +246 -4
- data/lib/openstudio-standards/standards/deer/deer_2011/deer_2011.ThermalZone.rb +18 -18
- data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.economizers.json +248 -6
- data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.Space.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.ThermalZone.rb +18 -18
- data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.economizers.json +248 -6
- data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.Space.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.ThermalZone.rb +18 -18
- data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.economizers.json +248 -6
- data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.Space.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.ThermalZone.rb +18 -18
- data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.economizers.json +248 -6
- data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.AirLoopHVAC.rb +18 -5
- data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.Space.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.ThermalZone.rb +18 -18
- data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.economizers.json +248 -6
- data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.AirLoopHVAC.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.Space.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.economizers.json +248 -6
- data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.heat_pumps.json +2 -2
- data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.AirLoopHVAC.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.Space.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.economizers.json +248 -6
- data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.AirLoopHVAC.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.Space.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.economizers.json +248 -6
- data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.AirLoopHVAC.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.Space.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.economizers.json +260 -0
- data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.AirLoopHVAC.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.Space.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.economizers.json +248 -6
- data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.AirLoopHVAC.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.Space.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.economizers.json +248 -6
- data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.AirLoopHVAC.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.Space.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.economizers.json +248 -6
- data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.AirLoopHVAC.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.Space.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.economizers.json +248 -6
- data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.AirLoopHVAC.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.Space.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.economizers.json +248 -6
- data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.AirLoopHVAC.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.Space.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.economizers.json +248 -6
- data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.AirLoopHVAC.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.Space.rb +3 -3
- data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.economizers.json +246 -4
- data/lib/openstudio-standards/standards/necb/BTAP1980TO2010/data/space_types.json +447 -223
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/building_envelope.rb +1 -1
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/data/space_types.json +447 -223
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_systems.rb +5 -2
- data/lib/openstudio-standards/standards/necb/ECMS/data/chiller_types.json +25 -0
- data/lib/openstudio-standards/standards/necb/ECMS/data/chillers.json +44 -0
- data/lib/openstudio-standards/standards/necb/ECMS/data/curves.json +225 -0
- data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +2 -2
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +193 -73
- data/lib/openstudio-standards/standards/necb/ECMS/pv_ground.rb +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +10 -4
- data/lib/openstudio-standards/standards/necb/NECB2011/beps_compliance_path.rb +7 -7
- data/lib/openstudio-standards/standards/necb/NECB2011/building_envelope.rb +4 -5
- data/lib/openstudio-standards/standards/necb/NECB2011/data/chiller_types.json +32 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/chillers.json +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/constants.json +36 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +7 -7
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/NorthernEducation.osm +47587 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/NorthernHealthCare.osm +49764 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/Warehouse.osm +283 -297
- data/lib/openstudio-standards/standards/necb/NECB2011/data/space_type_unit_definitions.txt +2 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/space_types.json +447 -223
- data/lib/openstudio-standards/standards/necb/NECB2011/data/standards_data.rb +3 -3
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +49 -27
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +400 -202
- data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +4 -4
- data/lib/openstudio-standards/standards/necb/NECB2015/data/space_types.json +637 -318
- data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +18 -1
- data/lib/openstudio-standards/standards/necb/NECB2015/necb_2015.rb +3 -3
- data/lib/openstudio-standards/standards/necb/NECB2017/data/space_types.json +637 -318
- data/lib/openstudio-standards/standards/necb/NECB2017/hvac_systems.rb +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2017/necb_2017.rb +3 -3
- data/lib/openstudio-standards/standards/necb/NECB2020/building_envelope.rb +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2020/data/space_types.json +615 -307
- data/lib/openstudio-standards/standards/necb/NECB2020/service_water_heating.rb +4 -4
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +10 -5
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +1 -1
- data/lib/openstudio-standards/utilities/assertion.rb +128 -0
- data/lib/openstudio-standards/utilities/logging.rb +2 -3
- data/lib/openstudio-standards/utilities/object_info.rb +39 -18
- data/lib/openstudio-standards/utilities/schedule_translator.rb +8 -6
- data/lib/openstudio-standards/utilities/simulation.rb +24 -11
- data/lib/openstudio-standards/utilities/sqlfile.rb +10 -5
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards/weather/Weather.Model.rb +8 -9
- data/lib/openstudio-standards/weather/Weather.stat_file.rb +3 -3
- data/lib/openstudio-standards/weather/information.rb +35 -0
- data/lib/openstudio-standards.rb +69 -5
- metadata +52 -16
- data/data/standards/OpenStudio_Standards-deer-ALL-comstock(space_types).xlsx +0 -0
- data/lib/openstudio-standards/hvac_sizing/Siz.AirLoopHVAC.rb +0 -59
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingWater.rb +0 -13
- data/lib/openstudio-standards/hvac_sizing/Siz.HVACComponent.rb +0 -36
- data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +0 -898
- data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +0 -126
- data/lib/openstudio-standards/hvac_sizing/Siz.ThermalZone.rb +0 -356
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.rb +0 -35
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoolingTower.rb +0 -110
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoolingTowerVariableSpeed.rb +0 -5
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
# open the class to add methods to size all HVAC equipment
|
|
3
|
-
class OpenStudio::Model::Model
|
|
4
|
-
|
|
5
|
-
# Ensure that the version of OpenStudio is 2.4.1 or greater
|
|
6
|
-
# because this is when the .autosizedFoo methods were added to C++.
|
|
7
|
-
min_os_version = "2.4.1"
|
|
8
|
-
if OpenStudio::Model::Model.new.version < OpenStudio::VersionString.new(min_os_version)
|
|
9
|
-
OpenStudio::logFree(OpenStudio::Error, "openstudio.model.Model", "This measure requires a minimum OpenStudio version of #{min_os_version} because this is when the .autosizedFoo methods were added to C++.")
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
# Load the helper libraries for getting additional autosized
|
|
13
|
-
# values that aren't included in the C++ API.
|
|
14
|
-
require_relative 'Siz.AirLoopHVAC'
|
|
15
|
-
require_relative 'Siz.CoilCoolingWater'
|
|
16
|
-
require_relative 'Siz.ThermalZone'
|
|
17
|
-
|
|
18
|
-
# Heating and cooling fuel methods
|
|
19
|
-
require_relative 'Siz.HeatingCoolingFuels'
|
|
20
|
-
|
|
21
|
-
# Component quantity methods
|
|
22
|
-
require_relative 'Siz.HVACComponent'
|
|
23
|
-
|
|
24
|
-
# A helper method to get component sizes from the Equipment Summary of the TabularDataWithStrings Report
|
|
25
|
-
# returns the autosized value as an optional double
|
|
26
|
-
def getAutosizedValueFromEquipmentSummary(object, table_name, value_name, units)
|
|
27
|
-
|
|
28
|
-
result = OpenStudio::OptionalDouble.new
|
|
29
|
-
|
|
30
|
-
name = object.name.get.upcase
|
|
31
|
-
|
|
32
|
-
sql = self.sqlFile
|
|
33
|
-
|
|
34
|
-
if sql.is_initialized
|
|
35
|
-
sql = sql.get
|
|
36
|
-
|
|
37
|
-
#SELECT * FROM ComponentSizes WHERE CompType = 'Coil:Heating:Gas' AND CompName = "COIL HEATING GAS 3" AND Description = "Design Size Nominal Capacity"
|
|
38
|
-
query = "Select Value FROM TabularDataWithStrings WHERE
|
|
39
|
-
ReportName = 'EquipmentSummary' AND
|
|
40
|
-
TableName = '#{table_name}' AND
|
|
41
|
-
RowName = '#{name}' AND
|
|
42
|
-
ColumnName = '#{value_name}' AND
|
|
43
|
-
Units = '#{units}'"
|
|
44
|
-
|
|
45
|
-
val = sql.execAndReturnFirstDouble(query)
|
|
46
|
-
|
|
47
|
-
if val.is_initialized
|
|
48
|
-
result = OpenStudio::OptionalDouble.new(val.get)
|
|
49
|
-
else
|
|
50
|
-
# @todo comment following line (debugging new HVACsizing objects right now)
|
|
51
|
-
# OpenStudio::logFree(OpenStudio::Warn, "openstudio.model.Model", "QUERY ERROR: Data not found for query: #{query}")
|
|
52
|
-
end
|
|
53
|
-
else
|
|
54
|
-
OpenStudio::logFree(OpenStudio::Error, 'openstudio.model.Model', 'Model has no sql file containing results, cannot lookup data.')
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
return result
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
# Helper function to output the fan power for each fan in the model
|
|
62
|
-
# @param [String] csv_path: if given, will output a csv file
|
|
63
|
-
# @return [Array of Hash] each row is a fan, with its name, type, rated watts per cfm, and the airloop or hvac component or zonehvac component it serves
|
|
64
|
-
# @todo output actual bhp and allowable bhp for systems 3-4 and 5-8
|
|
65
|
-
# @todo remove maybe later?
|
|
66
|
-
def output_fan_report(csv_path = nil)
|
|
67
|
-
|
|
68
|
-
table = []
|
|
69
|
-
|
|
70
|
-
# Deal with all the constant volume fans
|
|
71
|
-
self.getFanConstantVolumes.each do |fan|
|
|
72
|
-
row = {:name=>fan.name.to_s, :type=>'Constant Volume', :rated_w_per_cfm=>fan.rated_w_per_cfm.round(2), :air_loop=>'', :hvac_component=>'', :zone_hvac_component=>''}
|
|
73
|
-
if fan.airLoopHVAC.is_initialized
|
|
74
|
-
row[:air_loop] = fan.airLoopHVAC.get.name.to_s
|
|
75
|
-
elsif fan.containingHVACComponent.is_initialized
|
|
76
|
-
row[:hvac_component] = fan.containingHVACComponent.get.name.to_s
|
|
77
|
-
elsif fan.containingZoneHVACComponent.is_initialized
|
|
78
|
-
row[:zone_hvac_component] = fan.containingZoneHVACComponent.get.name.to_s
|
|
79
|
-
end
|
|
80
|
-
# Add to table
|
|
81
|
-
table << row
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
# Deal with all the constant volume fans
|
|
85
|
-
self.getFanVariableVolumes.each do |fan|
|
|
86
|
-
row = {:name=>fan.name.to_s, :type=>'Variable Volume', :rated_w_per_cfm=>fan.rated_w_per_cfm.round(2), :air_loop=>'', :hvac_component=>'', :zone_hvac_component=>''}
|
|
87
|
-
if fan.airLoopHVAC.is_initialized
|
|
88
|
-
row[:air_loop] = fan.airLoopHVAC.get.name.to_s
|
|
89
|
-
elsif fan.containingHVACComponent.is_initialized
|
|
90
|
-
row[:hvac_component] = fan.containingHVACComponent.get.name.to_s
|
|
91
|
-
elsif fan.containingZoneHVACComponent.is_initialized
|
|
92
|
-
row[:zone_hvac_component] = fan.containingZoneHVACComponent.get.name.to_s
|
|
93
|
-
end
|
|
94
|
-
# Add to table
|
|
95
|
-
table << row
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
# Deal with all the constant volume fans
|
|
99
|
-
self.getFanOnOffs.each do |fan|
|
|
100
|
-
row = {:name=>fan.name.to_s, :type=>'On Off', :rated_w_per_cfm=>fan.rated_w_per_cfm.round(2), :air_loop=>'', :hvac_component=>'', :zone_hvac_component=>''}
|
|
101
|
-
if fan.airLoopHVAC.is_initialized
|
|
102
|
-
row[:air_loop] = fan.airLoopHVAC.get.name.to_s
|
|
103
|
-
elsif fan.containingHVACComponent.is_initialized
|
|
104
|
-
row[:hvac_component] = fan.containingHVACComponent.get.name.to_s
|
|
105
|
-
elsif fan.containingZoneHVACComponent.is_initialized
|
|
106
|
-
row[:zone_hvac_component] = fan.containingZoneHVACComponent.get.name.to_s
|
|
107
|
-
end
|
|
108
|
-
# Add to table
|
|
109
|
-
table << row
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
# If a csv path is given, output
|
|
113
|
-
if !csv_path.nil? && !table.first.nil?
|
|
114
|
-
CSV.open(csv_path, "wb") do |csv|
|
|
115
|
-
csv << table.first.keys # adds the attributes name on the first line
|
|
116
|
-
table.each do |hash|
|
|
117
|
-
csv << hash.values
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
return table
|
|
123
|
-
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
end
|
|
@@ -1,356 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
# open the class to add methods to return sizing values
|
|
3
|
-
class OpenStudio::Model::ThermalZone
|
|
4
|
-
|
|
5
|
-
# returns the autosized maximum outdoor air flow rate as an optional double
|
|
6
|
-
def autosizedMaximumOutdoorAirFlowRate
|
|
7
|
-
|
|
8
|
-
return self.getAutosizedValue('Maximum Outdoor Air Flow Rate', 'm3/s')
|
|
9
|
-
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
# returns the autosized minimum outdoor air flow rate as an optional double
|
|
13
|
-
def autosizedMinimumOutdoorAirFlowRate
|
|
14
|
-
|
|
15
|
-
return self.getAutosizedValue('Minimum Outdoor Air Flow Rate', 'm3/s')
|
|
16
|
-
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
# returns the autosized cooling design air flow rate as an optional double
|
|
20
|
-
def autosizedCoolingDesignAirFlowRate
|
|
21
|
-
|
|
22
|
-
result = OpenStudio::OptionalDouble.new
|
|
23
|
-
|
|
24
|
-
name = self.name.get.upcase
|
|
25
|
-
|
|
26
|
-
sql = self.model.sqlFile
|
|
27
|
-
|
|
28
|
-
if sql.is_initialized
|
|
29
|
-
sql = sql.get
|
|
30
|
-
|
|
31
|
-
# In E+ 8.4, (OS 1.9.3 onward) the table name changed
|
|
32
|
-
table_name = nil
|
|
33
|
-
if self.model.version < OpenStudio::VersionString.new('1.9.3')
|
|
34
|
-
table_name = 'Zone Cooling'
|
|
35
|
-
else
|
|
36
|
-
table_name = 'Zone Sensible Cooling'
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
query = "SELECT Value
|
|
40
|
-
FROM tabulardatawithstrings
|
|
41
|
-
WHERE ReportName='HVACSizingSummary'
|
|
42
|
-
AND ReportForString='Entire Facility'
|
|
43
|
-
AND TableName='#{table_name}'
|
|
44
|
-
AND ColumnName='User Design Air Flow'
|
|
45
|
-
AND RowName='#{name}'
|
|
46
|
-
AND Units='m3/s'"
|
|
47
|
-
|
|
48
|
-
val = sql.execAndReturnFirstDouble(query)
|
|
49
|
-
|
|
50
|
-
if val.is_initialized
|
|
51
|
-
result = OpenStudio::OptionalDouble.new(val.get)
|
|
52
|
-
else
|
|
53
|
-
#OpenStudio::logFree(OpenStudio::Warn, "openstudio.model.Model", "Data not found for query: #{query}")
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
else
|
|
57
|
-
OpenStudio::logFree(OpenStudio::Error, 'openstudio.model.Model', 'Model has no sql file containing results, cannot lookup data.')
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
return result
|
|
61
|
-
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
# returns the autosized heating design air flow rate as an optional double
|
|
65
|
-
def autosizedHeatingDesignAirFlowRate
|
|
66
|
-
|
|
67
|
-
result = OpenStudio::OptionalDouble.new
|
|
68
|
-
|
|
69
|
-
name = self.name.get.upcase
|
|
70
|
-
|
|
71
|
-
sql = self.model.sqlFile
|
|
72
|
-
|
|
73
|
-
if sql.is_initialized
|
|
74
|
-
sql = sql.get
|
|
75
|
-
|
|
76
|
-
# In E+ 8.4, (OS 1.9.3 onward) the table name changed
|
|
77
|
-
table_name = nil
|
|
78
|
-
if self.model.version < OpenStudio::VersionString.new('1.9.3')
|
|
79
|
-
table_name = 'Zone Heating'
|
|
80
|
-
else
|
|
81
|
-
table_name = 'Zone Sensible Heating'
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
query = "SELECT Value
|
|
85
|
-
FROM tabulardatawithstrings
|
|
86
|
-
WHERE ReportName='HVACSizingSummary'
|
|
87
|
-
AND ReportForString='Entire Facility'
|
|
88
|
-
AND TableName='#{table_name}'
|
|
89
|
-
AND ColumnName='User Design Air Flow'
|
|
90
|
-
AND RowName='#{name}'
|
|
91
|
-
AND Units='m3/s'"
|
|
92
|
-
|
|
93
|
-
val = sql.execAndReturnFirstDouble(query)
|
|
94
|
-
|
|
95
|
-
if val.is_initialized
|
|
96
|
-
result = OpenStudio::OptionalDouble.new(val.get)
|
|
97
|
-
else
|
|
98
|
-
#OpenStudio::logFree(OpenStudio::Warn, "openstudio.model.Model", "Data not found for query: #{query}")
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
else
|
|
102
|
-
OpenStudio::logFree(OpenStudio::Error, 'openstudio.model.Model', 'Model has no sql file containing results, cannot lookup data.')
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
return result
|
|
106
|
-
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
# returns the calculated cooling design load as an optional double
|
|
110
|
-
def coolingDesignLoad
|
|
111
|
-
|
|
112
|
-
result = OpenStudio::OptionalDouble.new
|
|
113
|
-
|
|
114
|
-
name = self.name.get.upcase
|
|
115
|
-
|
|
116
|
-
sql = self.model.sqlFile
|
|
117
|
-
|
|
118
|
-
if sql.is_initialized
|
|
119
|
-
sql = sql.get
|
|
120
|
-
|
|
121
|
-
# In E+ 8.4, (OS 1.9.3 onward) the table name changed
|
|
122
|
-
table_name = nil
|
|
123
|
-
if self.model.version < OpenStudio::VersionString.new('1.9.3')
|
|
124
|
-
table_name = 'Zone Cooling'
|
|
125
|
-
else
|
|
126
|
-
table_name = 'Zone Sensible Cooling'
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
query = "SELECT Value
|
|
130
|
-
FROM tabulardatawithstrings
|
|
131
|
-
WHERE ReportName='HVACSizingSummary'
|
|
132
|
-
AND ReportForString='Entire Facility'
|
|
133
|
-
AND TableName='#{table_name}'
|
|
134
|
-
AND ColumnName='User Design Load'
|
|
135
|
-
AND RowName='#{name}'
|
|
136
|
-
AND Units='W'"
|
|
137
|
-
|
|
138
|
-
val = sql.execAndReturnFirstDouble(query)
|
|
139
|
-
|
|
140
|
-
if val.is_initialized
|
|
141
|
-
floor_area_no_multiplier_m2 = self.floorArea
|
|
142
|
-
floor_area_m2 = floor_area_no_multiplier_m2 * self.multiplier
|
|
143
|
-
w_per_m2 = val.get/floor_area_m2
|
|
144
|
-
result = OpenStudio::OptionalDouble.new(w_per_m2)
|
|
145
|
-
else
|
|
146
|
-
#OpenStudio::logFree(OpenStudio::Warn, "openstudio.model.Model", "Data not found for query: #{query}")
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
else
|
|
150
|
-
OpenStudio::logFree(OpenStudio::Error, 'openstudio.model.Model', 'Model has no sql file containing results, cannot lookup data.')
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
return result
|
|
154
|
-
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
def designAirFlowRate
|
|
158
|
-
|
|
159
|
-
result = OpenStudio::OptionalDouble.new
|
|
160
|
-
|
|
161
|
-
name = self.name.get.upcase
|
|
162
|
-
|
|
163
|
-
sql = self.model.sqlFile
|
|
164
|
-
|
|
165
|
-
if sql.is_initialized
|
|
166
|
-
sql = sql.get
|
|
167
|
-
|
|
168
|
-
table_name = 'Zone Sizing Information'
|
|
169
|
-
if self.model.version < OpenStudio::VersionString.new('3.5.0')
|
|
170
|
-
report_name = 'Initialization Summary'
|
|
171
|
-
else
|
|
172
|
-
report_name = 'InitializationSummary'
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
# Get zone row name
|
|
176
|
-
query = "SELECT RowName
|
|
177
|
-
FROM tabulardatawithstrings
|
|
178
|
-
WHERE ReportName='#{report_name}'
|
|
179
|
-
AND ReportForString='Entire Facility'
|
|
180
|
-
AND TableName='#{table_name}'
|
|
181
|
-
AND ColumnName='Zone Name'
|
|
182
|
-
AND Value='#{name}'"
|
|
183
|
-
|
|
184
|
-
val = sql.execAndReturnVectorOfString(query).get
|
|
185
|
-
|
|
186
|
-
if !val.empty?
|
|
187
|
-
# no heating or cooling load; flow assumed to be the same
|
|
188
|
-
if val.length == 1
|
|
189
|
-
clg_id = val[0]
|
|
190
|
-
htg_id = clg_id
|
|
191
|
-
else
|
|
192
|
-
clg_id = val[0]
|
|
193
|
-
htg_id = val[1]
|
|
194
|
-
end
|
|
195
|
-
htg_des_air_flow_rate = 0
|
|
196
|
-
clg_des_air_flow_rate = 0
|
|
197
|
-
|
|
198
|
-
# Get zone cooling design flow rate
|
|
199
|
-
query = "SELECT Value
|
|
200
|
-
FROM tabulardatawithstrings
|
|
201
|
-
WHERE ReportName='#{report_name}'
|
|
202
|
-
AND ReportForString='Entire Facility'
|
|
203
|
-
AND TableName='#{table_name}'
|
|
204
|
-
AND ColumnName='User Des Air Flow Rate {m3/s}'
|
|
205
|
-
AND RowName='#{clg_id}'"
|
|
206
|
-
val = sql.execAndReturnFirstDouble(query)
|
|
207
|
-
if val.is_initialized
|
|
208
|
-
clg_des_air_flow_rate = val
|
|
209
|
-
else
|
|
210
|
-
OpenStudio::logFree(OpenStudio::Warn, "openstudio.model.Model", "Data not found for query: #{query}")
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
# Get zone heating design flow rate
|
|
214
|
-
query = "SELECT Value
|
|
215
|
-
FROM tabulardatawithstrings
|
|
216
|
-
WHERE ReportName='#{report_name}'
|
|
217
|
-
AND ReportForString='Entire Facility'
|
|
218
|
-
AND TableName='#{table_name}'
|
|
219
|
-
AND ColumnName='User Des Air Flow Rate {m3/s}'
|
|
220
|
-
AND RowName='#{htg_id}'"
|
|
221
|
-
val = sql.execAndReturnFirstDouble(query)
|
|
222
|
-
if val.is_initialized
|
|
223
|
-
htg_des_air_flow_rate = val
|
|
224
|
-
else
|
|
225
|
-
OpenStudio::logFree(OpenStudio::Warn, "openstudio.model.Model", "Data not found for query: #{query}")
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
# Use maximum of the two as actual design flow rate
|
|
229
|
-
result = OpenStudio::OptionalDouble.new([clg_des_air_flow_rate.to_f, htg_des_air_flow_rate.to_f].max)
|
|
230
|
-
else
|
|
231
|
-
OpenStudio::logFree(OpenStudio::Warn, "openstudio.model.Model", "Data not found for query: #{query}")
|
|
232
|
-
end
|
|
233
|
-
|
|
234
|
-
else
|
|
235
|
-
OpenStudio::logFree(OpenStudio::Error, 'openstudio.model.Model', 'Model has no sql file containing results, cannot lookup data.')
|
|
236
|
-
end
|
|
237
|
-
|
|
238
|
-
return result
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
# returns the calculated heating design load as an optional double
|
|
242
|
-
def heatingDesignLoad
|
|
243
|
-
|
|
244
|
-
result = OpenStudio::OptionalDouble.new
|
|
245
|
-
|
|
246
|
-
name = self.name.get.upcase
|
|
247
|
-
|
|
248
|
-
sql = self.model.sqlFile
|
|
249
|
-
|
|
250
|
-
if sql.is_initialized
|
|
251
|
-
sql = sql.get
|
|
252
|
-
|
|
253
|
-
# In E+ 8.4, (OS 1.9.3 onward) the table name changed
|
|
254
|
-
table_name = nil
|
|
255
|
-
if self.model.version < OpenStudio::VersionString.new('1.9.3')
|
|
256
|
-
table_name = 'Zone Heating'
|
|
257
|
-
else
|
|
258
|
-
table_name = 'Zone Sensible Heating'
|
|
259
|
-
end
|
|
260
|
-
|
|
261
|
-
query = "SELECT Value
|
|
262
|
-
FROM tabulardatawithstrings
|
|
263
|
-
WHERE ReportName='HVACSizingSummary'
|
|
264
|
-
AND ReportForString='Entire Facility'
|
|
265
|
-
AND TableName='#{table_name}'
|
|
266
|
-
AND ColumnName='User Design Load'
|
|
267
|
-
AND RowName='#{name}'
|
|
268
|
-
AND Units='W'"
|
|
269
|
-
|
|
270
|
-
val = sql.execAndReturnFirstDouble(query)
|
|
271
|
-
|
|
272
|
-
if val.is_initialized
|
|
273
|
-
floor_area_no_multiplier_m2 = self.floorArea
|
|
274
|
-
floor_area_m2 = floor_area_no_multiplier_m2 * self.multiplier
|
|
275
|
-
w_per_m2 = val.get/floor_area_m2
|
|
276
|
-
result = OpenStudio::OptionalDouble.new(w_per_m2)
|
|
277
|
-
else
|
|
278
|
-
#OpenStudio::logFree(OpenStudio::Warn, "openstudio.model.Model", "Data not found for query: #{query}")
|
|
279
|
-
end
|
|
280
|
-
|
|
281
|
-
else
|
|
282
|
-
OpenStudio::logFree(OpenStudio::Error, 'openstudio.model.Model', 'Model has no sql file containing results, cannot lookup data.')
|
|
283
|
-
end
|
|
284
|
-
|
|
285
|
-
return result
|
|
286
|
-
|
|
287
|
-
end
|
|
288
|
-
|
|
289
|
-
# Determine the zone heating fuels, including
|
|
290
|
-
# any fuels used by zone equipment, reheat terminals,
|
|
291
|
-
# the air loops serving the zone, and any plant loops
|
|
292
|
-
# serving those air loops.
|
|
293
|
-
#
|
|
294
|
-
# return [Array<String>] An array. Possible values are
|
|
295
|
-
# Electricity, NaturalGas, Propane, PropaneGas, FuelOilNo1, FuelOilNo2,
|
|
296
|
-
# Coal, Diesel, Gasoline, DistrictCooling, DistrictHeating,
|
|
297
|
-
# and SolarEnergy.
|
|
298
|
-
def heating_fuels
|
|
299
|
-
|
|
300
|
-
fuels = []
|
|
301
|
-
|
|
302
|
-
# Special logic for models imported from Sefaira.
|
|
303
|
-
# In this case, the fuels are listed as a comment
|
|
304
|
-
# above the Zone object.
|
|
305
|
-
if !self.comment == ''
|
|
306
|
-
m = self.comment.match /! *(.*)/
|
|
307
|
-
if m
|
|
308
|
-
all_fuels = m[1].split(',')
|
|
309
|
-
all_fuels.each do |fuel|
|
|
310
|
-
fuels += fuel.strip
|
|
311
|
-
end
|
|
312
|
-
end
|
|
313
|
-
if fuels.size > 0
|
|
314
|
-
OpenStudio::logFree(OpenStudio::Info, 'openstudio.model.Model', "For #{self.name}, fuel type #{fuels.join(', ')} pulled from Zone comment.")
|
|
315
|
-
fuels.uniq.sort
|
|
316
|
-
end
|
|
317
|
-
end
|
|
318
|
-
|
|
319
|
-
# Check the zone hvac heating fuels
|
|
320
|
-
fuels += self.model.zone_equipment_heating_fuels(self)
|
|
321
|
-
|
|
322
|
-
# Check the zone airloop heating fuels
|
|
323
|
-
fuels += self.model.zone_airloop_heating_fuels(self)
|
|
324
|
-
|
|
325
|
-
OpenStudio::logFree(OpenStudio::Debug, 'openstudio.model.Model', "For #{name}, heating fuels = #{fuels.uniq.sort.join(', ')}.")
|
|
326
|
-
|
|
327
|
-
return fuels.uniq.sort
|
|
328
|
-
|
|
329
|
-
end
|
|
330
|
-
|
|
331
|
-
# Determine the zone cooling fuels, including
|
|
332
|
-
# any fuels used by zone equipment, reheat terminals,
|
|
333
|
-
# the air loops serving the zone, and any plant loops
|
|
334
|
-
# serving those air loops.
|
|
335
|
-
#
|
|
336
|
-
# return [Array<String>] An array. Possible values are
|
|
337
|
-
# Electricity, NaturalGas, Propane, PropaneGas, FuelOilNo1, FuelOilNo2,
|
|
338
|
-
# Coal, Diesel, Gasoline, DistrictCooling, DistrictHeating,
|
|
339
|
-
# and SolarEnergy.
|
|
340
|
-
def cooling_fuels
|
|
341
|
-
|
|
342
|
-
fuels = []
|
|
343
|
-
|
|
344
|
-
# Check the zone hvac cooling fuels
|
|
345
|
-
fuels += self.model.zone_equipment_cooling_fuels(self)
|
|
346
|
-
|
|
347
|
-
# Check the zone airloop cooling fuels
|
|
348
|
-
fuels += self.model.zone_airloop_cooling_fuels(self)
|
|
349
|
-
|
|
350
|
-
OpenStudio::logFree(OpenStudio::Debug, 'openstudio.model.Model', "For #{name}, cooling fuels = #{fuels.uniq.sort.join(', ')}.")
|
|
351
|
-
|
|
352
|
-
return fuels.uniq.sort
|
|
353
|
-
|
|
354
|
-
end
|
|
355
|
-
|
|
356
|
-
end
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
class NRELZNEReady2017 < ASHRAE901
|
|
2
|
-
# @!group Model
|
|
3
|
-
|
|
4
|
-
# Determine the prototypical economizer type for the model.
|
|
5
|
-
#
|
|
6
|
-
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
|
7
|
-
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
8
|
-
# @return [String] the economizer type. Possible values are:
|
|
9
|
-
# 'NoEconomizer'
|
|
10
|
-
# 'FixedDryBulb'
|
|
11
|
-
# 'FixedEnthalpy'
|
|
12
|
-
# 'DifferentialDryBulb'
|
|
13
|
-
# 'DifferentialEnthalpy'
|
|
14
|
-
# 'FixedDewPointAndDryBulb'
|
|
15
|
-
# 'ElectronicEnthalpy'
|
|
16
|
-
# 'DifferentialDryBulbAndEnthalpy'
|
|
17
|
-
def model_economizer_type(model, climate_zone)
|
|
18
|
-
economizer_type = case climate_zone
|
|
19
|
-
when 'ASHRAE 169-2006-0A',
|
|
20
|
-
'ASHRAE 169-2006-1A',
|
|
21
|
-
'ASHRAE 169-2006-2A',
|
|
22
|
-
'ASHRAE 169-2006-3A',
|
|
23
|
-
'ASHRAE 169-2006-4A',
|
|
24
|
-
'ASHRAE 169-2013-0A',
|
|
25
|
-
'ASHRAE 169-2013-1A',
|
|
26
|
-
'ASHRAE 169-2013-2A',
|
|
27
|
-
'ASHRAE 169-2013-3A',
|
|
28
|
-
'ASHRAE 169-2013-4A'
|
|
29
|
-
'DifferentialEnthalpy'
|
|
30
|
-
else
|
|
31
|
-
'DifferentialDryBulb'
|
|
32
|
-
end
|
|
33
|
-
return economizer_type
|
|
34
|
-
end
|
|
35
|
-
end
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
# A variety of cooling tower methods that are the same regardless of type.
|
|
2
|
-
# These methods are available to CoolingTowerSingleSpeed, CoolingTowerTwoSpeed, and CoolingTowerVariableSpeed
|
|
3
|
-
module ASHRAEPRMCoolingTower
|
|
4
|
-
# @!group CoolingTower
|
|
5
|
-
|
|
6
|
-
# Set the cooling tower fan power such that the tower
|
|
7
|
-
# hits the minimum performance (gpm/hp) specified by the standard.
|
|
8
|
-
# Note that in this case hp is motor nameplate hp, per 90.1.
|
|
9
|
-
# This method assumes that the fan brake horsepower is 90%
|
|
10
|
-
# of the motor nameplate hp.
|
|
11
|
-
# This method determines the minimum motor efficiency
|
|
12
|
-
# for the nameplate motor hp and sets the actual
|
|
13
|
-
# fan power by multiplying the brake horsepower
|
|
14
|
-
# by the efficiency. Thus the fan power used as
|
|
15
|
-
# an input to the simulation divided by the design flow
|
|
16
|
-
# rate will not (and should not)
|
|
17
|
-
# exactly equal the minimum tower performance.
|
|
18
|
-
#
|
|
19
|
-
# @param cooling_tower [OpenStudio::Model::StraightComponent] cooling tower object, allowable types:
|
|
20
|
-
# CoolingTowerSingleSpeed, CoolingTowerTwoSpeed, and CoolingTowerVariableSpeed
|
|
21
|
-
# @return [Bool] returns true if successful, false if not
|
|
22
|
-
def cooling_tower_apply_minimum_power_per_flow(cooling_tower)
|
|
23
|
-
# Get the design water flow rate
|
|
24
|
-
design_water_flow_m3_per_s = nil
|
|
25
|
-
if cooling_tower.designWaterFlowRate.is_initialized
|
|
26
|
-
design_water_flow_m3_per_s = cooling_tower.designWaterFlowRate.get
|
|
27
|
-
elsif cooling_tower.autosizedDesignWaterFlowRate.is_initialized
|
|
28
|
-
design_water_flow_m3_per_s = cooling_tower.autosizedDesignWaterFlowRate.get
|
|
29
|
-
else
|
|
30
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoolingTower', "For #{cooling_tower.name} design water flow rate is not available, cannot apply efficiency standard.")
|
|
31
|
-
return false
|
|
32
|
-
end
|
|
33
|
-
design_water_flow_gpm = OpenStudio.convert(design_water_flow_m3_per_s, 'm^3/s', 'gal/min').get
|
|
34
|
-
|
|
35
|
-
# Get the table of cooling tower efficiencies
|
|
36
|
-
heat_rejection = standards_data['heat_rejection']
|
|
37
|
-
|
|
38
|
-
# Define the criteria to find the cooling tower properties
|
|
39
|
-
# in the hvac standards data set.
|
|
40
|
-
search_criteria = {}
|
|
41
|
-
search_criteria['template'] = template
|
|
42
|
-
|
|
43
|
-
# By definition cooling towers in E+ are open.
|
|
44
|
-
# Closed cooling towers are the fluidcooler objects.
|
|
45
|
-
search_criteria['equipment_type'] = 'Open Cooling Tower'
|
|
46
|
-
|
|
47
|
-
# Define the criteria to find the fan type
|
|
48
|
-
search_criteria['fan_type'] = 'Axial'
|
|
49
|
-
|
|
50
|
-
# Get the cooling tower properties
|
|
51
|
-
ct_props = model_find_object(heat_rejection, search_criteria)
|
|
52
|
-
unless ct_props
|
|
53
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoolingTower', "For #{cooling_tower.name}, cannot find heat rejection properties, cannot apply standard efficiencies or curves.")
|
|
54
|
-
return false
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
# Get cooling tower efficiency
|
|
58
|
-
min_gpm_per_hp = ct_props['minimum_performance']
|
|
59
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoolingTower', "For #{cooling_tower.name}, design water flow = #{design_water_flow_gpm.round} gpm, minimum performance = #{min_gpm_per_hp} gpm/hp (nameplate).")
|
|
60
|
-
|
|
61
|
-
# Calculate the allowed fan brake horsepower
|
|
62
|
-
# per method used in PNNL prototype buildings.
|
|
63
|
-
# Assumes that the fan brake horsepower is 90%
|
|
64
|
-
# of the fan nameplate rated motor power.
|
|
65
|
-
fan_motor_nameplate_hp = design_water_flow_gpm / min_gpm_per_hp
|
|
66
|
-
fan_bhp = 0.9 * fan_motor_nameplate_hp
|
|
67
|
-
|
|
68
|
-
# Lookup the minimum motor efficiency
|
|
69
|
-
fan_motor_eff = 0.85
|
|
70
|
-
motors = standards_data['motors']
|
|
71
|
-
|
|
72
|
-
# Assuming all fan motors are 4-pole Enclosed
|
|
73
|
-
search_criteria = {
|
|
74
|
-
'template' => template,
|
|
75
|
-
'number_of_poles' => 'Any',
|
|
76
|
-
'type' => 'Any'
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
motor_properties = model_find_object(motors, search_criteria, fan_motor_nameplate_hp)
|
|
80
|
-
if motor_properties.nil?
|
|
81
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.CoolingTower', "For #{cooling_tower.name}, could not find motor properties using search criteria: #{search_criteria}, motor_hp = #{fan_motor_nameplate_hp} hp.")
|
|
82
|
-
return false
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
fan_motor_eff = motor_properties['nominal_full_load_efficiency']
|
|
86
|
-
nominal_hp = motor_properties['maximum_capacity'].to_f.round(1)
|
|
87
|
-
# Round to nearest whole HP for niceness
|
|
88
|
-
if nominal_hp >= 2
|
|
89
|
-
nominal_hp = nominal_hp.round
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
# Calculate the fan motor power
|
|
93
|
-
fan_motor_actual_power_hp = fan_bhp / fan_motor_eff
|
|
94
|
-
# Convert to W
|
|
95
|
-
fan_motor_actual_power_w = fan_motor_actual_power_hp * 745.7 # 745.7 W/HP
|
|
96
|
-
|
|
97
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoolingTower', "For #{cooling_tower.name}, allowed fan motor nameplate hp = #{fan_motor_nameplate_hp.round(1)} hp, fan brake horsepower = #{fan_bhp.round(1)}, and fan motor actual power = #{fan_motor_actual_power_hp.round(1)} hp (#{fan_motor_actual_power_w.round} W) at #{fan_motor_eff} motor efficiency.")
|
|
98
|
-
|
|
99
|
-
# Append the efficiency to the name
|
|
100
|
-
cooling_tower.setName("#{cooling_tower.name} #{min_gpm_per_hp.round(1)} gpm/hp")
|
|
101
|
-
|
|
102
|
-
# Hard size the design fan power.
|
|
103
|
-
# Leave the water flow and air flow autosized.
|
|
104
|
-
if cooling_tower.to_CoolingTowerVariableSpeed.is_initialized
|
|
105
|
-
cooling_tower.setDesignFanPower(fan_motor_actual_power_w)
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
return true
|
|
109
|
-
end
|
|
110
|
-
end
|