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
@@ -2,20 +2,20 @@ class ASHRAE901PRM < Standard
|
|
2
2
|
# Adjust the fenestration area to the values specified by the reduction value in a surface
|
3
3
|
#
|
4
4
|
# @param surface [OpenStudio::Model:Surface] openstudio surface object
|
5
|
-
# @param reduction [
|
5
|
+
# @param reduction [Double] ratio of adjustments
|
6
6
|
# @param model [OpenStudio::Model::Model] openstudio model
|
7
|
-
# @return [
|
7
|
+
# @return [Boolean] returns true if successful, false if not
|
8
8
|
def surface_adjust_fenestration_in_a_surface(surface, reduction, model)
|
9
9
|
# do nothing for cases when reduction == 1.0
|
10
10
|
if reduction < 1.0
|
11
|
-
surface.subSurfaces.
|
11
|
+
surface.subSurfaces.each do |ss|
|
12
12
|
next unless ss.subSurfaceType == 'FixedWindow' || ss.subSurfaceType == 'OperableWindow' || ss.subSurfaceType == 'GlassDoor'
|
13
13
|
|
14
14
|
sub_surface_reduce_area_by_percent_by_shrinking_toward_centroid(ss, reduction)
|
15
15
|
end
|
16
16
|
elsif reduction > 1.0
|
17
17
|
# case increase the window
|
18
|
-
surface_wwr =
|
18
|
+
surface_wwr = surface_get_wwr(surface)
|
19
19
|
if surface_wwr == 0.0
|
20
20
|
# In this case, we are adding fenestration
|
21
21
|
wwr_adjusted = reduction - 1.0
|
@@ -26,7 +26,7 @@ class ASHRAE901PRM < Standard
|
|
26
26
|
end
|
27
27
|
# Save doors to a temp list
|
28
28
|
door_list = []
|
29
|
-
surface.subSurfaces.
|
29
|
+
surface.subSurfaces.each do |sub|
|
30
30
|
if sub.subSurfaceType == 'Door'
|
31
31
|
door = {}
|
32
32
|
door['name'] = sub.name.get
|
@@ -37,7 +37,7 @@ class ASHRAE901PRM < Standard
|
|
37
37
|
end
|
38
38
|
# remove all existing windows and set the window to wall ratio to the calculated new WWR
|
39
39
|
# Remove all sub-surfaces including doors
|
40
|
-
surface.subSurfaces.
|
40
|
+
surface.subSurfaces.each(&:remove)
|
41
41
|
# Apply default construction to the subsurface - the standard construction will be applied later.
|
42
42
|
surface.setWindowToWallRatio(wwr_adjusted, 0.6, true)
|
43
43
|
# add door back.
|
@@ -7,8 +7,14 @@ class ASHRAE901PRM < Standard
|
|
7
7
|
# @param thermal_zone
|
8
8
|
def thermal_zone_get_fan_power_limitations(thermal_zone, is_energy_recovery_required)
|
9
9
|
fan_pwr_adjustment_in_wc = 0
|
10
|
+
|
11
|
+
# error if zone design air flow rate is not available
|
12
|
+
if thermal_zone.model.version < OpenStudio::VersionString.new('3.6.0')
|
13
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.ashrae_90_1_prm.ThermalZone', 'Required ThermalZone method .autosizedDesignAirFlowRate is not available in pre-OpenStudio 3.6.0 versions. Use a more recent version of OpenStudio.')
|
14
|
+
end
|
15
|
+
|
10
16
|
# Get autosized zone design supply air flow rate
|
11
|
-
dsn_zone_air_flow_m3_per_s = thermal_zone.
|
17
|
+
dsn_zone_air_flow_m3_per_s = thermal_zone.autosizedDesignAirFlowRate.to_f
|
12
18
|
dsn_zone_air_flow_cfm = OpenStudio.convert(dsn_zone_air_flow_m3_per_s, 'm^3/s', 'cfm').get
|
13
19
|
|
14
20
|
# Retrieve credits from zone additional features
|
@@ -151,15 +157,21 @@ class ASHRAE901PRM < Standard
|
|
151
157
|
end
|
152
158
|
|
153
159
|
# Identify if zone has district energy for occ_and_fuel_type method
|
154
|
-
# @param
|
155
|
-
# @return [
|
156
|
-
def thermal_zone_get_zone_fuels_for_occ_and_fuel_type(
|
160
|
+
# @param thermal_zone
|
161
|
+
# @return [String with applicable DistrictHeating and/or DistrictCooling
|
162
|
+
def thermal_zone_get_zone_fuels_for_occ_and_fuel_type(thermal_zone)
|
157
163
|
zone_fuels = ''
|
158
|
-
|
164
|
+
|
165
|
+
# error if HVACComponent heating fuels method is not available
|
166
|
+
if thermal_zone.model.version < OpenStudio::VersionString.new('3.6.0')
|
167
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.ashrae_90_1_prm.ThermalZone', 'Required HVACComponent methods .heatingFuelTypes and .coolingFuelTypes are not available in pre-OpenStudio 3.6.0 versions. Use a more recent version of OpenStudio.')
|
168
|
+
end
|
169
|
+
|
170
|
+
htg_fuels = thermal_zone.heatingFuelTypes.map(&:valueName)
|
159
171
|
if htg_fuels.include?('DistrictHeating')
|
160
172
|
zone_fuels = 'DistrictHeating'
|
161
173
|
end
|
162
|
-
clg_fuels =
|
174
|
+
clg_fuels = thermal_zone.coolingFuelTypes.map(&:valueName)
|
163
175
|
if clg_fuels.include?('DistrictCooling')
|
164
176
|
zone_fuels += 'DistrictCooling'
|
165
177
|
end
|
data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ZoneHVACComponent.rb
CHANGED
@@ -5,7 +5,7 @@ class ASHRAE901PRM < Standard
|
|
5
5
|
# (Fan coils, Unit Heaters, PTACs, PTHPs, VRF Terminals, WSHPs, ERVs)
|
6
6
|
# based on the W/cfm specified in the standard.
|
7
7
|
#
|
8
|
-
# @return [
|
8
|
+
# @return [Boolean] returns true if successful, false if not
|
9
9
|
def zone_hvac_component_apply_prm_baseline_fan_power(zone_hvac_component)
|
10
10
|
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.ashrae_90_1_prm.ZoneHVACComponent', "Setting fan power for #{zone_hvac_component.name}.")
|
11
11
|
|
@@ -7,18 +7,47 @@ require 'csv'
|
|
7
7
|
class ASHRAE901PRM < Standard
|
8
8
|
def initialize
|
9
9
|
load_standards_database
|
10
|
+
@sizing_run_dir = Dir.pwd
|
10
11
|
end
|
11
12
|
|
12
13
|
def load_standards_database(data_directories = [])
|
13
14
|
super([__dir__] + data_directories)
|
14
15
|
end
|
15
16
|
|
17
|
+
# Method to generate user data from a user model and save the csvs to the user_data_path
|
18
|
+
# This method can generate one user data csv based on the matching name or a full set of user data if
|
19
|
+
# leave it as nil
|
20
|
+
# @param user_model [OpenStudio::Model::Model] OpenStudio model object
|
21
|
+
# @param user_data_path [String] data path
|
22
|
+
# @param user_data_file [String] the name of the user data file.
|
23
|
+
def generate_userdata_to_csv(user_model, user_data_path, user_data_file = nil)
|
24
|
+
user_data_list = [UserDataCSVAirLoopHVAC.new(user_model, user_data_path),
|
25
|
+
UserDataCSVBuilding.new(user_model, user_data_path),
|
26
|
+
UserDataCSVSpace.new(user_model, user_data_path),
|
27
|
+
UserDataCSVSpaceTypes.new(user_model, user_data_path),
|
28
|
+
UserDataCSVAirLoopHVACDOAS.new(user_model, user_data_path),
|
29
|
+
UserDataCSVExteriorLights.new(user_model, user_data_path),
|
30
|
+
UserDataCSVThermalZone.new(user_model, user_data_path),
|
31
|
+
UserDataCSVElectricEquipment.new(user_model, user_data_path),
|
32
|
+
UserDataCSVOutdoorAir.new(user_model, user_data_path)]
|
33
|
+
|
34
|
+
if user_data_file.nil?
|
35
|
+
user_data_list.each(&:write_csv)
|
36
|
+
else
|
37
|
+
user_data_list.each do |user_data|
|
38
|
+
if user_data.file_name == user_data_file
|
39
|
+
user_data.write_csv
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
16
45
|
# Convert user data csv files to json format and save to project folder
|
17
46
|
# Method will create the json_folder in the project_path
|
18
47
|
# @author Doug Maddox, PNNL
|
19
|
-
# @param
|
20
|
-
# @param
|
21
|
-
# @return [
|
48
|
+
# @param user_data_path [String path to folder containing csv files
|
49
|
+
# @param project_path [String path to project folder
|
50
|
+
# @return [String] path to json files
|
22
51
|
def convert_userdata_csv_to_json(user_data_path, project_path)
|
23
52
|
# Get list of possible files from lib\openstudio-standards\standards\ashrae_90_1_prm\userdata_csv
|
24
53
|
stds_dir = __dir__
|
@@ -28,9 +57,12 @@ class ASHRAE901PRM < Standard
|
|
28
57
|
Dir.glob(src_csv_dir).each do |csv_full_name|
|
29
58
|
json_rows = []
|
30
59
|
csv_file_name = File.basename(csv_full_name, File.extname(csv_full_name))
|
60
|
+
unless UserDataFiles.matched_any?(csv_file_name)
|
61
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "user data file: #{csv_file_name} is not a valid file name. See the full list of acceptable file names in https://pnnl.github.io/BEM-for-PRM/user_guide/add_compliance_data/")
|
62
|
+
end
|
31
63
|
json_objs[csv_file_name] = json_rows
|
32
64
|
end
|
33
|
-
|
65
|
+
|
34
66
|
# Read all valid files in user_data_folder and load into json array
|
35
67
|
unless user_data_path == ''
|
36
68
|
user_data_validation_outcome = true
|
@@ -81,7 +113,7 @@ class ASHRAE901PRM < Standard
|
|
81
113
|
# Load user data from project folder into standards database data structure
|
82
114
|
# Each user data object type is a new item in the @standards_data hash
|
83
115
|
# @author Doug Maddox, PNNL
|
84
|
-
# @param json_path [
|
116
|
+
# @param json_path [String path to folder containing json files
|
85
117
|
def load_userdata_to_standards_database(json_path)
|
86
118
|
files = Dir.glob("#{json_path}/*.json").select { |e| File.file? e }
|
87
119
|
files.each do |file|
|
@@ -107,7 +139,7 @@ class ASHRAE901PRM < Standard
|
|
107
139
|
row.each do |sub_array|
|
108
140
|
new_array << sub_array.collect { |e| e ? e.strip : e }
|
109
141
|
end
|
110
|
-
#
|
142
|
+
# @todo Future expansion can added to here.
|
111
143
|
# Convert the 2d array to hash
|
112
144
|
return new_array.to_h
|
113
145
|
end
|
@@ -121,91 +153,308 @@ class ASHRAE901PRM < Standard
|
|
121
153
|
def user_data_validation(object_name, user_data)
|
122
154
|
# 1. Check user_spacetype and user_space LPD total % = 1.0
|
123
155
|
case object_name
|
124
|
-
when
|
156
|
+
when UserDataFiles::BUILDING
|
157
|
+
return check_userdata_building(object_name, user_data)
|
158
|
+
when UserDataFiles::SPACE, UserDataFiles::SPACETYPE
|
125
159
|
return check_userdata_space_and_spacetype(object_name, user_data)
|
126
|
-
when
|
160
|
+
when UserDataFiles::ELECTRIC_EQUIPMENT
|
127
161
|
return check_userdata_electric_equipment(object_name, user_data)
|
162
|
+
when UserDataFiles::EXTERIOR_LIGHTS
|
163
|
+
return check_userdata_exterior_lighting(object_name, user_data)
|
164
|
+
when UserDataFiles::AIRLOOP_HVAC
|
165
|
+
return check_userdata_airloop_hvac(object_name, user_data)
|
166
|
+
when UserDataFiles::DESIGN_SPECIFICATION_OUTDOOR_AIR
|
167
|
+
return check_userdata_outdoor_air(object_name, user_data)
|
168
|
+
when UserDataFiles::AIRLOOP_HVAC_DOAS
|
169
|
+
return check_userdata_airloop_hvac_doas(object_name, user_data)
|
170
|
+
when UserDataFiles::THERMAL_ZONE
|
171
|
+
return check_userdata_thermal_zone(object_name, user_data)
|
128
172
|
else
|
129
173
|
return true
|
130
174
|
end
|
131
175
|
end
|
132
176
|
|
133
|
-
|
177
|
+
def check_userdata_building(object_name, user_data)
|
178
|
+
userdata_valid = true
|
179
|
+
user_data.each do |user_building|
|
180
|
+
name = prm_read_user_data(user_building, 'name')
|
181
|
+
unless name
|
182
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}: building name is missing or empty. Building user data has not validated.")
|
183
|
+
return false
|
184
|
+
end
|
185
|
+
|
186
|
+
building_type_for_hvac = prm_read_user_data(user_building, 'building_type_for_hvac')
|
187
|
+
unless building_type_for_hvac.nil? || UserDataHVACBldgType.matched_any?(building_type_for_hvac)
|
188
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "Unknown building type #{building_type_for_hvac} for prescribed HVAC system type. For full list of the building type, see: https://pnnl.github.io/BEM-for-PRM/user_guide/prm_api_ref/baseline_generation_api/#--default_hvac_bldg_type")
|
189
|
+
userdata_valid = false
|
190
|
+
end
|
191
|
+
|
192
|
+
building_type_for_wwr = prm_read_user_data(user_building, 'building_type_for_wwr')
|
193
|
+
unless building_type_for_wwr.nil? || UserDataWWRBldgType.matched_any?(building_type_for_wwr)
|
194
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "Unknown building type #{building_type_for_hvac} for prescribed window-to-wall ratio. For full list of the building type, see: https://pnnl.github.io/BEM-for-PRM/user_guide/prm_api_ref/baseline_generation_api/#--default_wwr_bldg_type")
|
195
|
+
userdata_valid = false
|
196
|
+
end
|
134
197
|
|
198
|
+
building_type_for_swh = prm_read_user_data(user_building, 'building_type_for_swh')
|
199
|
+
unless building_type_for_swh.nil? || UserDataSHWBldgType.matched_any?(building_type_for_swh)
|
200
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "Unknown building type #{building_type_for_hvac} for prescribed service hot water system. For full list of the building type, see: https://pnnl.github.io/BEM-for-PRM/user_guide/prm_api_ref/baseline_generation_api/#--default_swh_bldg_type")
|
201
|
+
userdata_valid = false
|
202
|
+
end
|
203
|
+
|
204
|
+
is_exempt_from_rotations = prm_read_user_data(user_building, 'is_exempt_from_rotations')
|
205
|
+
unless is_exempt_from_rotations.nil? || UserDataBoolean.matched_any?(is_exempt_from_rotations)
|
206
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}, Building name #{name}, is_exempt_from_rotations shall be either True or False. Got #{is_exempt_from_rotations}.")
|
207
|
+
userdata_valid = false
|
208
|
+
end
|
209
|
+
end
|
210
|
+
return userdata_valid
|
211
|
+
end
|
212
|
+
|
213
|
+
def check_userdata_thermal_zone(object_name, user_data)
|
214
|
+
userdata_valid = true
|
215
|
+
user_data.each do |user_thermal_zone|
|
216
|
+
name = prm_read_user_data(user_thermal_zone, 'name')
|
217
|
+
unless name
|
218
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}: thermal zone name is missing or empty. Thermal zone user data has not validated.")
|
219
|
+
return false
|
220
|
+
end
|
221
|
+
has_health_safety_night_cycle_exception = prm_read_user_data(user_thermal_zone, 'has_health_safety_night_cycle_exception', UserDataBoolean::FALSE)
|
222
|
+
unless has_health_safety_night_cycle_exception.nil? || UserDataBoolean.matched_any?(has_health_safety_night_cycle_exception)
|
223
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}, Thermal zone name #{name}, has_health_safety_night_cycle_exception shall be either True or False. Got #{has_health_safety_night_cycle_exception}")
|
224
|
+
userdata_valid = false
|
225
|
+
end
|
226
|
+
end
|
227
|
+
return userdata_valid
|
228
|
+
end
|
229
|
+
|
230
|
+
# Check for incorrect data in [UserDataFiles::AIRLOOP_HVAC_DOAS]
|
135
231
|
# @param object_name [String] name of user data csv file to check
|
136
232
|
# @param user_data [Hash] hash of data from user data csv file
|
137
|
-
|
138
233
|
# @return [Boolean] true if data is valid, false if error found
|
139
|
-
def
|
234
|
+
def check_userdata_airloop_hvac_doas(object_name, user_data)
|
140
235
|
userdata_valid = true
|
141
|
-
user_data.each do |
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
236
|
+
user_data.each do |user_airloop|
|
237
|
+
name = prm_read_user_data(user_airloop, 'name')
|
238
|
+
unless name
|
239
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}: air loop name is missing or empty. Air loop user data has not validated.")
|
240
|
+
return false
|
241
|
+
end
|
242
|
+
# Fan power credits, exhaust air energy recovery
|
243
|
+
user_airloop.keys.each do |info_key|
|
244
|
+
# Fan power credits
|
245
|
+
if info_key.include?('has_fan_power_credit')
|
246
|
+
has_fan_power_credit = prm_read_user_data(user_airloop, info_key)
|
247
|
+
unless has_fan_power_credit.nil? || UserDataBoolean.matched_any?(has_fan_power_credit)
|
248
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}, Air Loop name #{name}, #{info_key} shall be either True or False. Got #{has_fan_power_credit}.")
|
249
|
+
userdata_valid = false
|
250
|
+
end
|
251
|
+
elsif info_key.include?('fan_power_credit')
|
252
|
+
fan_power_credit = prm_read_user_data(user_airloop, info_key)
|
253
|
+
unless fan_power_credit.nil? || Float(fan_power_credit, exception: false)
|
254
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}, Air Loop name #{name}, #{info_key} shall be a numeric value. Got #{fan_power_credit}.")
|
255
|
+
userdata_valid = false
|
256
|
+
end
|
146
257
|
end
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
258
|
+
# Exhaust air energy recovery
|
259
|
+
if info_key.include?('exhaust_energy_recovery_exception')
|
260
|
+
exhaust_energy_recovery_exception = prm_read_user_data(user_airloop, info_key)
|
261
|
+
unless exhaust_energy_recovery_exception.nil? || UserDataBoolean.matched_any?(exhaust_energy_recovery_exception)
|
262
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}, Air Loop name #{name}, #{info_key} shall be either True or False. Got #{has_fan_power_credit}.")
|
263
|
+
userdata_valid = false
|
264
|
+
end
|
152
265
|
end
|
153
|
-
|
154
|
-
|
155
|
-
|
266
|
+
end
|
267
|
+
end
|
268
|
+
return userdata_valid
|
269
|
+
end
|
270
|
+
|
271
|
+
# Check for incorrect data in [UserDataFiles::DESIGN_SPECIFICATION_OUTDOOR_AIR]
|
272
|
+
# @param object_name [String] name of user data csv file to check
|
273
|
+
# @param user_data [Hash] hash of data from user data csv file
|
274
|
+
# @return [Boolean] true if data is valid, false if error found
|
275
|
+
def check_userdata_outdoor_air(object_name, user_data)
|
276
|
+
userdata_valid = true
|
277
|
+
user_data.each do |user_oa|
|
278
|
+
name = prm_read_user_data(user_oa, 'name')
|
279
|
+
unless name
|
280
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}: air loop name is missing or empty. Air loop user data has not validated.")
|
281
|
+
return false
|
282
|
+
end
|
283
|
+
|
284
|
+
outdoor_airflow_per_person = prm_read_user_data(user_oa, 'outdoor_airflow_per_person')
|
285
|
+
unless outdoor_airflow_per_person.nil? || Float(outdoor_airflow_per_person, exception: false)
|
286
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}, Design outdoor air name #{name}, outdoor_airflow_per_person shall be a numeric value. Got #{outdoor_airflow_per_person}.")
|
287
|
+
userdata_valid = false
|
288
|
+
end
|
289
|
+
|
290
|
+
outdoor_airflow_per_floor_area = prm_read_user_data(user_oa, 'outdoor_airflow_per_floor_area')
|
291
|
+
unless outdoor_airflow_per_floor_area.nil? || Float(outdoor_airflow_per_floor_area, exception: false)
|
292
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}, Design outdoor air name #{name}, outdoor_airflow_per_floor_area shall be a numeric value. Got #{outdoor_airflow_per_floor_area}.")
|
293
|
+
userdata_valid = false
|
294
|
+
end
|
295
|
+
|
296
|
+
outdoor_air_flowrate = prm_read_user_data(user_oa, 'outdoor_air_flowrate')
|
297
|
+
unless outdoor_air_flowrate.nil? || Float(outdoor_air_flowrate, exception: false)
|
298
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}, Design outdoor air name #{name}, outdoor_air_flowrate shall be a numeric value. Got #{outdoor_air_flowrate}.")
|
299
|
+
userdata_valid = false
|
300
|
+
end
|
301
|
+
|
302
|
+
outdoor_air_flow_air_changes_per_hour = prm_read_user_data(user_oa, 'outdoor_air_flow_air_changes_per_hour')
|
303
|
+
unless outdoor_air_flow_air_changes_per_hour.nil? || Float(outdoor_air_flow_air_changes_per_hour, exception: false)
|
304
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}, Design outdoor air name #{name}, outdoor_air_flow_air_changes_per_hour shall be a numeric value. Got #{outdoor_air_flow_air_changes_per_hour}.")
|
305
|
+
userdata_valid = false
|
306
|
+
end
|
307
|
+
end
|
308
|
+
return userdata_valid
|
309
|
+
end
|
310
|
+
|
311
|
+
# Check for incorrect data in [UserDataFiles::AIRLOOP_HVAC]
|
312
|
+
# @param object_name [String] name of user data csv file to check
|
313
|
+
# @param user_data [Hash] hash of data from user data csv file
|
314
|
+
# @return [Boolean] true if data is valid, false if error found
|
315
|
+
def check_userdata_airloop_hvac(object_name, user_data)
|
316
|
+
userdata_valid = true
|
317
|
+
user_data.each do |user_airloop|
|
318
|
+
name = prm_read_user_data(user_airloop, 'name')
|
319
|
+
unless name
|
320
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}: air loop name is missing or empty. Air loop user data has not validated.")
|
321
|
+
return false
|
322
|
+
end
|
323
|
+
# gas phase air cleaning is system base - add proposed hvac system name to zones
|
324
|
+
economizer_exception_for_gas_phase_air_cleaning = prm_read_user_data(user_airloop, 'economizer_exception_for_gas_phase_air_cleaning', UserDataBoolean::FALSE)
|
325
|
+
unless economizer_exception_for_gas_phase_air_cleaning.nil? || UserDataBoolean.matched_any?(economizer_exception_for_gas_phase_air_cleaning)
|
326
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}, Air Loop name #{name}, economizer_exception_for_gas_phase_air_cleaning shall be either True or False. Got #{economizer_exception_for_gas_phase_air_cleaning}")
|
327
|
+
userdata_valid = false
|
328
|
+
end
|
329
|
+
|
330
|
+
economizer_exception_for_open_refrigerated_cases = prm_read_user_data(user_airloop, 'economizer_exception_for_open_refrigerated_cases', UserDataBoolean::FALSE)
|
331
|
+
unless economizer_exception_for_open_refrigerated_cases.nil? || UserDataBoolean.matched_any?(economizer_exception_for_open_refrigerated_cases)
|
332
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}, Air Loop name #{name}, economizer_exception_for_open_refrigerated_cases shall be either True or False. Got #{economizer_exception_for_open_refrigerated_cases}")
|
333
|
+
userdata_valid = false
|
334
|
+
end
|
335
|
+
|
336
|
+
# Fan power credits, exhaust air energy recovery
|
337
|
+
user_airloop.keys.each do |info_key|
|
338
|
+
# Fan power credits
|
339
|
+
if info_key.include?('has_fan_power_credit')
|
340
|
+
has_fan_power_credit = prm_read_user_data(user_airloop, info_key)
|
341
|
+
unless has_fan_power_credit.nil? || UserDataBoolean.matched_any?(has_fan_power_credit)
|
342
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}, Air Loop name #{name}, #{info_key} shall be either True or False. Got #{has_fan_power_credit}.")
|
343
|
+
userdata_valid = false
|
344
|
+
end
|
345
|
+
elsif info_key.include?('fan_power_credit')
|
346
|
+
fan_power_credit = prm_read_user_data(user_airloop, info_key)
|
347
|
+
unless fan_power_credit.nil? || Float(fan_power_credit, exception: false)
|
348
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}, Air Loop name #{name}, #{info_key} shall be a numeric value. Got #{fan_power_credit}.")
|
349
|
+
userdata_valid = false
|
350
|
+
end
|
351
|
+
end
|
352
|
+
# Exhaust air energy recovery
|
353
|
+
if info_key.include?('exhaust_energy_recovery_exception')
|
354
|
+
exhaust_energy_recovery_exception = prm_read_user_data(user_airloop, info_key)
|
355
|
+
unless exhaust_energy_recovery_exception.nil? || UserDataBoolean.matched_any?(exhaust_energy_recovery_exception)
|
356
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}, Air Loop name #{name}, #{info_key} shall be either True or False. Got #{has_fan_power_credit}.")
|
357
|
+
userdata_valid = false
|
358
|
+
end
|
156
359
|
end
|
157
|
-
|
360
|
+
end
|
361
|
+
end
|
362
|
+
return userdata_valid
|
363
|
+
end
|
364
|
+
|
365
|
+
# Check for incorrect data in exterior lights user data
|
366
|
+
|
367
|
+
# @param object_name [String] name of user data csv file to check
|
368
|
+
# @param user_data [Hash] hash of data from user data csv file
|
369
|
+
|
370
|
+
# @return [Boolean] true if data is valid, false if error found
|
371
|
+
def check_userdata_exterior_lighting(object_name, user_data)
|
372
|
+
userdata_valid = true
|
373
|
+
user_data.each do |exterior_light|
|
374
|
+
name = prm_read_user_data(exterior_light, 'name')
|
375
|
+
unless name
|
376
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}: exterior light name is missing or empty. Exterior light user data has not validated.")
|
377
|
+
return false
|
378
|
+
end
|
379
|
+
|
380
|
+
num_cats = prm_read_user_data(exterior_light, 'num_ext_lights_subcats', '0').to_i
|
381
|
+
(1..num_cats).each do |icat|
|
382
|
+
cat_key = format('end_use_subcategory_%02d', icat)
|
383
|
+
subcat = prm_read_user_data(exterior_light, cat_key, nil)
|
384
|
+
unless subcat
|
385
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}, Exterior light: #{name}, #{cat_key} is either missing or empty.")
|
158
386
|
userdata_valid = false
|
159
|
-
OpenStudio.logFree(OpenStudio::Error, 'User Data Error', "User data: #{object_name}: Motor #{electric_row['name']} is exempt data should be either Yes or No. But get data #{electric_row['motor_is_exempt']}")
|
160
387
|
end
|
161
388
|
end
|
389
|
+
end
|
390
|
+
return userdata_valid
|
391
|
+
end
|
392
|
+
|
393
|
+
# Check for incorrect data in electric equipment user data
|
394
|
+
|
395
|
+
# @param object_name [String] name of user data csv file to check
|
396
|
+
# @param user_data [Hash] hash of data from user data csv file
|
397
|
+
|
398
|
+
# @return [Boolean] true if data is valid, false if error found
|
399
|
+
def check_userdata_electric_equipment(object_name, user_data)
|
400
|
+
userdata_valid = true
|
401
|
+
user_data.each do |electric_row|
|
402
|
+
# check for data type
|
403
|
+
# unless fan_power_credit.nil? || Float(fan_power_credit, exception: false)
|
404
|
+
motor_horsepower = prm_read_user_data(electric_row, 'motor_horsepower')
|
405
|
+
unless motor_horsepower.nil? || Float(motor_horsepower, exception: false)
|
406
|
+
userdata_valid = false
|
407
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}: Motor #{electric_row['name']}'s horsepower data is either 0.0 or unavailable. Check the inputs.")
|
408
|
+
end
|
409
|
+
motor_efficiency = prm_read_user_data(electric_row, 'motor_efficiency')
|
410
|
+
unless motor_efficiency.nil? || Float(motor_efficiency, exception: false)
|
411
|
+
userdata_valid = false
|
412
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}: Motor #{electric_row['name']}'s efficiency data is either 0.0 or unavailable. Check the inputs.")
|
413
|
+
end
|
414
|
+
motor_is_exempt = prm_read_user_data(electric_row, 'motor_is_exempt')
|
415
|
+
unless motor_is_exempt.nil? || UserDataBoolean.matched_any?(motor_is_exempt)
|
416
|
+
userdata_valid = false
|
417
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}: Motor #{electric_row['name']} is exempt data should be either True or False. But get data #{electric_row['motor_is_exempt']}")
|
418
|
+
end
|
162
419
|
# We may need to do the same for refrigeration and elevator?
|
163
420
|
# Check elevator
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
userdata_valid = false
|
189
|
-
OpenStudio.logFree(OpenStudio::Error, 'User Data Error', "User data: #{object_name}: Elevator #{electric_row['name']}'s serves number of stories data is either smaller or equal to 1 or unavailable. Check the inputs.")
|
190
|
-
end
|
421
|
+
elevator_weight_of_car = prm_read_user_data(electric_row, 'elevator_weight_of_car')
|
422
|
+
unless elevator_weight_of_car.nil? || Float(elevator_weight_of_car, exception: false)
|
423
|
+
userdata_valid = false
|
424
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}: Elevator #{electric_row['name']}'s weight of car data is either 0.0 or unavailable. Check the inputs.")
|
425
|
+
end
|
426
|
+
elevator_rated_load = prm_read_user_data(electric_row, 'elevator_rated_load')
|
427
|
+
unless elevator_rated_load.nil? || Float(elevator_rated_load, exception: false)
|
428
|
+
userdata_valid = false
|
429
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}: Elevator #{electric_row['name']}'s rated load data is either 0.0 or unavailable. Check the inputs.")
|
430
|
+
end
|
431
|
+
elevator_counter_weight_of_car = prm_read_user_data(electric_row, 'elevator_counter_weight_of_car')
|
432
|
+
unless elevator_counter_weight_of_car.nil? || Float(elevator_counter_weight_of_car, exception: false)
|
433
|
+
userdata_valid = false
|
434
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}: Elevator #{electric_row['name']}'s counter weight of car data is either 0.0 or unavailable. Check the inputs.")
|
435
|
+
end
|
436
|
+
elevator_speed_of_car = prm_read_user_data(electric_row, 'elevator_speed_of_car')
|
437
|
+
unless elevator_speed_of_car.nil? || Float(elevator_speed_of_car, exception: false)
|
438
|
+
userdata_valid = false
|
439
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}: Elevator #{electric_row['name']}'s speed of car data is either 0.0 or unavailable. Check the inputs.")
|
440
|
+
end
|
441
|
+
elevator_number_of_stories = prm_read_user_data(electric_row, 'elevator_number_of_stories')
|
442
|
+
unless elevator_number_of_stories.nil? || Integer(elevator_number_of_stories, exception: false)
|
443
|
+
userdata_valid = false
|
444
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}: Elevator #{electric_row['name']}'s serves number of stories data is either smaller or equal to 1 or unavailable. Check the inputs.")
|
191
445
|
end
|
192
446
|
# Check refrigeration
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
end
|
205
|
-
if electric_row['refrigeration_equipment_total_display_area'].to_f == 0.0
|
206
|
-
userdata_valid = false
|
207
|
-
OpenStudio.logFree(OpenStudio::Error, 'User Data Error', "User data: #{object_name}: Refrigeration #{electric_row['name']}'s total display area data is either 0.0 or unavailable. Check the inputs.")
|
208
|
-
end
|
447
|
+
# Check data type
|
448
|
+
# The equipment class shall be verified at the implementation level
|
449
|
+
refrigeration_equipment_volume = prm_read_user_data(electric_row, 'refrigeration_equipment_volume')
|
450
|
+
unless refrigeration_equipment_volume.nil? || Float(refrigeration_equipment_volume, exception: false)
|
451
|
+
userdata_valid = false
|
452
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}: Refrigeration #{electric_row['name']}'s equipment volume data is either 0.0 or unavailable. Check the inputs.")
|
453
|
+
end
|
454
|
+
refrigeration_equipment_total_display_area = prm_read_user_data(electric_row, 'refrigeration_equipment_total_display_area')
|
455
|
+
unless refrigeration_equipment_total_display_area.nil? || Float(refrigeration_equipment_total_display_area, exception: false)
|
456
|
+
userdata_valid = false
|
457
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data: #{object_name}: Refrigeration #{electric_row['name']}'s total display area data is either 0.0 or unavailable. Check the inputs.")
|
209
458
|
end
|
210
459
|
end
|
211
460
|
return userdata_valid
|
@@ -219,18 +468,23 @@ class ASHRAE901PRM < Standard
|
|
219
468
|
# @return [Boolean] true if data is valid, false if error found
|
220
469
|
def check_userdata_space_and_spacetype(object_name, user_data)
|
221
470
|
userdata_valid = true
|
222
|
-
user_data.each do |
|
223
|
-
|
224
|
-
|
471
|
+
user_data.each do |row|
|
472
|
+
building_type_for_wwr = prm_read_user_data(row, 'building_type_for_wwr')
|
473
|
+
unless building_type_for_wwr.nil? || UserDataWWRBldgType.matched_any?(building_type_for_wwr)
|
474
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "Unknown building type #{building_type_for_wwr} for prescribed window to wall ratio. For full list of the building type, see: https://pnnl.github.io/BEM-for-PRM/user_guide/prm_api_ref/baseline_generation_api/#--default_wwr_bldg_type")
|
475
|
+
userdata_valid = false
|
476
|
+
end
|
477
|
+
unless prm_read_user_data(row, 'num_std_ltg_types', '0').to_i == 0
|
478
|
+
num_ltg_type = row['num_std_ltg_types'].to_i
|
225
479
|
total_ltg_percent = 0.0
|
226
480
|
std_ltg_index = 0
|
227
481
|
while std_ltg_index < num_ltg_type
|
228
482
|
frac_key = format('std_ltg_type_frac%02d', (std_ltg_index + 1))
|
229
|
-
total_ltg_percent +=
|
483
|
+
total_ltg_percent += prm_read_user_data(row, frac_key, '0.0').to_f
|
230
484
|
std_ltg_index += 1
|
231
485
|
end
|
232
486
|
if (total_ltg_percent - 1.0).abs > 0.01
|
233
|
-
OpenStudio.logFree(OpenStudio::Error, '
|
487
|
+
OpenStudio.logFree(OpenStudio::Error, 'prm.log', "User data #{object_name}: The fraction of user defined lighting types in Space/SpaceType: #{row['name']} does not add up to 1.0. The calculated fraction is #{total_ltg_percent}.")
|
234
488
|
userdata_valid = false
|
235
489
|
end
|
236
490
|
end
|