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
|
@@ -4,7 +4,7 @@ class Standard
|
|
|
4
4
|
# Returns standards data for selected space type and template
|
|
5
5
|
#
|
|
6
6
|
# @param space_type [OpenStudio::Model::SpaceType] space type object
|
|
7
|
-
# @return [
|
|
7
|
+
# @return [Hash] hash of internal loads for different load types
|
|
8
8
|
def space_type_get_standards_data(space_type)
|
|
9
9
|
standards_building_type = if space_type.standardsBuildingType.is_initialized
|
|
10
10
|
space_type.standardsBuildingType.get
|
|
@@ -48,7 +48,13 @@ class Standard
|
|
|
48
48
|
interior_lighting_properties = model_find_object(standards_data['prm_interior_lighting'], search_criteria)
|
|
49
49
|
|
|
50
50
|
if interior_lighting_properties.nil?
|
|
51
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.SpaceType', "Interior lighting PRM properties lookup failed: #{search_criteria}.")
|
|
51
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.SpaceType', "Interior lighting PRM properties lookup failed: #{search_criteria}. Trying to search with primary_space_type. It is highly recommended to update the standard space type to one of the lighting types listed in: https://pnnl.github.io/BEM-for-PRM/user_guide/model_requirements/standards_space_type/")
|
|
52
|
+
search_criteria = {
|
|
53
|
+
'template' => template,
|
|
54
|
+
'primary_space_type' => standards_space_type
|
|
55
|
+
}
|
|
56
|
+
interior_lighting_properties = model_find_object(standards_data['prm_interior_lighting'], search_criteria)
|
|
57
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.SpaceType', "Interior Lighting PRM properties lookup failed: #{search_criteria}")
|
|
52
58
|
interior_lighting_properties = {}
|
|
53
59
|
end
|
|
54
60
|
|
|
@@ -58,7 +64,7 @@ class Standard
|
|
|
58
64
|
# Sets the color for the space types as shown in the SketchUp plugin using render by space type.
|
|
59
65
|
#
|
|
60
66
|
# @param space_type [OpenStudio::Model::SpaceType] space type object
|
|
61
|
-
# @return [
|
|
67
|
+
# @return [Boolean] returns true if successful, false if not
|
|
62
68
|
def space_type_apply_rendering_color(space_type)
|
|
63
69
|
# Get the standards data
|
|
64
70
|
space_type_properties = space_type_get_standards_data(space_type)
|
|
@@ -91,16 +97,16 @@ class Standard
|
|
|
91
97
|
# loads directly assigned to spaces. This method skips plenums.
|
|
92
98
|
#
|
|
93
99
|
# @param space_type [OpenStudio::Model::SpaceType] space type object
|
|
94
|
-
# @param set_people [
|
|
100
|
+
# @param set_people [Boolean] if true, set the people density.
|
|
95
101
|
# Also, assign reasonable clothing, air velocity, and work efficiency inputs
|
|
96
102
|
# to allow reasonable thermal comfort metrics to be calculated.
|
|
97
|
-
# @param set_lights [
|
|
103
|
+
# @param set_lights [Boolean] if true, set the lighting density, lighting fraction
|
|
98
104
|
# to return air, fraction radiant, and fraction visible.
|
|
99
|
-
# @param set_electric_equipment [
|
|
100
|
-
# @param set_gas_equipment [
|
|
101
|
-
# @param set_ventilation [
|
|
102
|
-
# @param set_infiltration [
|
|
103
|
-
# @return [
|
|
105
|
+
# @param set_electric_equipment [Boolean] if true, set the electric equipment density
|
|
106
|
+
# @param set_gas_equipment [Boolean] if true, set the gas equipment density
|
|
107
|
+
# @param set_ventilation [Boolean] if true, set the ventilation rates (per-person and per-area)
|
|
108
|
+
# @param set_infiltration [Boolean] if true, set the infiltration rates
|
|
109
|
+
# @return [Boolean] returns true if successful, false if not
|
|
104
110
|
def space_type_apply_internal_loads(space_type, set_people, set_lights, set_electric_equipment, set_gas_equipment, set_ventilation, set_infiltration)
|
|
105
111
|
# Skip plenums
|
|
106
112
|
# Check if the space type name
|
|
@@ -478,8 +484,9 @@ class Standard
|
|
|
478
484
|
# Initially, only lighting power density will be set
|
|
479
485
|
# Possibly infiltration will also be set from here
|
|
480
486
|
#
|
|
481
|
-
# @param
|
|
487
|
+
# @param space_type [OpenStudio::Model::SpaceType] OpenStudio space type object
|
|
482
488
|
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
|
489
|
+
# @return [Boolean] returns true if successful, false if not
|
|
483
490
|
def space_type_apply_int_loads_prm(space_type, model)
|
|
484
491
|
# Skip plenums
|
|
485
492
|
# Check if the space type name
|
|
@@ -522,14 +529,14 @@ class Standard
|
|
|
522
529
|
else
|
|
523
530
|
lighting_per_area_hash = {}
|
|
524
531
|
multiple_lpd_value_check = true
|
|
525
|
-
space_type.spaces.each do |
|
|
532
|
+
space_type.spaces.each do |space_type_space|
|
|
526
533
|
# Space height
|
|
527
|
-
space_volume =
|
|
528
|
-
space_area =
|
|
534
|
+
space_volume = space_type_space.volume
|
|
535
|
+
space_area = space_type_space.floorArea
|
|
529
536
|
space_height = space_volume / space_area
|
|
530
537
|
# New lpd values
|
|
531
538
|
lighting_per_area_new = lighting_per_area + lighting_per_length * space_height
|
|
532
|
-
lighting_per_area_hash[
|
|
539
|
+
lighting_per_area_hash[space_type_space.name.to_s] = lighting_per_area_new
|
|
533
540
|
end
|
|
534
541
|
end
|
|
535
542
|
end
|
|
@@ -564,10 +571,10 @@ class Standard
|
|
|
564
571
|
end
|
|
565
572
|
end
|
|
566
573
|
else
|
|
567
|
-
space_type.spaces.each do |
|
|
574
|
+
space_type.spaces.each do |space_type_space|
|
|
568
575
|
new_space_type = space_type.clone.to_SpaceType.get
|
|
569
|
-
|
|
570
|
-
lighting_per_area = lighting_per_area_hash[
|
|
576
|
+
space_type_space.setSpaceType(new_space_type)
|
|
577
|
+
lighting_per_area = lighting_per_area_hash[space_type_space.name.to_s]
|
|
571
578
|
new_space_type.lights.sort.each do |inst|
|
|
572
579
|
definition = inst.lightsDefinition
|
|
573
580
|
unless lighting_per_area.zero?
|
|
@@ -580,11 +587,13 @@ class Standard
|
|
|
580
587
|
space_type.remove
|
|
581
588
|
end
|
|
582
589
|
end
|
|
590
|
+
return true
|
|
583
591
|
end
|
|
584
592
|
|
|
585
593
|
# Modify the lighting schedules for Appendix G PRM for 2016 and later
|
|
586
594
|
#
|
|
587
595
|
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
|
596
|
+
# @return [Boolean] returns true if successful, false if not
|
|
588
597
|
def space_type_light_sch_change(model)
|
|
589
598
|
return true
|
|
590
599
|
end
|
|
@@ -597,15 +606,15 @@ class Standard
|
|
|
597
606
|
# does not inherit from the default schedule set.
|
|
598
607
|
#
|
|
599
608
|
# @param space_type [OpenStudio::Model::SpaceType] space type object
|
|
600
|
-
# @param set_people [
|
|
601
|
-
# @param set_lights [
|
|
602
|
-
# @param set_electric_equipment [
|
|
603
|
-
# @param set_gas_equipment [
|
|
604
|
-
# @param set_infiltration [
|
|
605
|
-
# @param make_thermostat [
|
|
609
|
+
# @param set_people [Boolean] if true, set the occupancy and activity schedules
|
|
610
|
+
# @param set_lights [Boolean] if true, set the lighting schedule
|
|
611
|
+
# @param set_electric_equipment [Boolean] if true, set the electric schedule schedule
|
|
612
|
+
# @param set_gas_equipment [Boolean] if true, set the gas equipment density
|
|
613
|
+
# @param set_infiltration [Boolean] if true, set the infiltration schedule
|
|
614
|
+
# @param make_thermostat [Boolean] if true, makes a thermostat for this space type from the
|
|
606
615
|
# schedules listed for the space type. This thermostat is not hooked to any zone by this method,
|
|
607
616
|
# but may be found and used later.
|
|
608
|
-
# @return [
|
|
617
|
+
# @return [Boolean] returns true if successful, false if not
|
|
609
618
|
def space_type_apply_internal_load_schedules(space_type, set_people, set_lights, set_electric_equipment, set_gas_equipment, set_ventilation, set_infiltration, make_thermostat)
|
|
610
619
|
# Get the standards data
|
|
611
620
|
space_type_properties = space_type_get_standards_data(space_type)
|
|
@@ -697,7 +706,7 @@ class Standard
|
|
|
697
706
|
# @param space_type [OpenStudio::Model::SpaceType] space type object
|
|
698
707
|
# @param space_type_properties [Hash] hash of space type properties
|
|
699
708
|
# @param default_sch_set [OpenStudio::Model::DefaultScheduleSet] default schedule set
|
|
700
|
-
# @return [
|
|
709
|
+
# @return [Boolean] returns true if successful, false if not
|
|
701
710
|
def apply_lighting_schedule(space_type, space_type_properties, default_sch_set)
|
|
702
711
|
lighting_sch = space_type_properties['lighting_schedule']
|
|
703
712
|
return false if lighting_sch.nil?
|
|
@@ -710,9 +719,9 @@ class Standard
|
|
|
710
719
|
# Returns standards data for selected construction
|
|
711
720
|
#
|
|
712
721
|
# @param space_type [OpenStudio::Model::SpaceType] space type object
|
|
713
|
-
# @param intended_surface_type [
|
|
714
|
-
# @param standards_construction_type [
|
|
715
|
-
# @return [
|
|
722
|
+
# @param intended_surface_type [String] the type of surface
|
|
723
|
+
# @param standards_construction_type [String] the type of construction
|
|
724
|
+
# @return [Hash] hash of construction properties
|
|
716
725
|
def space_type_get_construction_properties(space_type, intended_surface_type, standards_construction_type)
|
|
717
726
|
# get building_category value
|
|
718
727
|
building_category = if !space_type_get_standards_data(space_type).nil? && space_type_get_standards_data(space_type)['is_residential'] == 'Yes'
|
|
@@ -78,7 +78,7 @@ class Standard
|
|
|
78
78
|
#
|
|
79
79
|
# @param sub_surface [OpenStudio::Model::SubSurface] sub surface object
|
|
80
80
|
# @param percent_reduction [Double] the fractional amount to reduce the area
|
|
81
|
-
# @return [
|
|
81
|
+
# @return [Boolean] returns true if successful, false if not
|
|
82
82
|
def sub_surface_reduce_area_by_percent_by_shrinking_toward_centroid(sub_surface, percent_reduction)
|
|
83
83
|
# if percent_reduction > 1=> percent increase instead of reduction
|
|
84
84
|
mult = percent_reduction <= 1 ? 1 - percent_reduction : percent_reduction
|
|
@@ -113,7 +113,7 @@ class Standard
|
|
|
113
113
|
#
|
|
114
114
|
# @param sub_surface [OpenStudio::Model::SubSurface] sub surface object
|
|
115
115
|
# @param percent_reduction [Double] the fractional amount to reduce the area.
|
|
116
|
-
# @return [
|
|
116
|
+
# @return [Boolean] returns true if successful, false if not
|
|
117
117
|
def sub_surface_reduce_area_by_percent_by_raising_sill(sub_surface, percent_reduction)
|
|
118
118
|
mult = 1 - percent_reduction
|
|
119
119
|
|
|
@@ -162,7 +162,7 @@ class Standard
|
|
|
162
162
|
# meaning a rectangle where the bottom is parallel to the ground.
|
|
163
163
|
#
|
|
164
164
|
# @param sub_surface [OpenStudio::Model::SubSurface] sub surface object
|
|
165
|
-
# @return [
|
|
165
|
+
# @return [Boolean] returns true if the surface is a vertical rectangle, false if not
|
|
166
166
|
def sub_surface_vertical_rectangle?(sub_surface)
|
|
167
167
|
# Get the vertices once
|
|
168
168
|
verts = sub_surface.vertices
|
|
@@ -195,7 +195,7 @@ class Standard
|
|
|
195
195
|
#
|
|
196
196
|
# @param surface [OpenStudio::Model::Surface] surface object
|
|
197
197
|
# @param area_fraction [Double] fraction of area of the larger surface
|
|
198
|
-
# @return [
|
|
198
|
+
# @return [Boolean] returns true if successful, false if not
|
|
199
199
|
def sub_surface_create_centered_subsurface_from_scaled_surface(surface, area_fraction)
|
|
200
200
|
# Get rid of all existing subsurfaces.
|
|
201
201
|
remove_all_subsurfaces(surface: surface)
|
|
@@ -245,7 +245,7 @@ class Standard
|
|
|
245
245
|
# @param surface [OpenStudio::Model::Surface] surface object
|
|
246
246
|
# @param area_fraction [Double] fraction of area of the larger surface
|
|
247
247
|
# @param construction [OpenStudio::Model::Construction] construction to use for the new surface
|
|
248
|
-
# @return [
|
|
248
|
+
# @return [Boolean] returns true if successful, false if not
|
|
249
249
|
def sub_surface_create_scaled_subsurfaces_from_surface(surface:, area_fraction:, construction:)
|
|
250
250
|
# Set geometry tolerences:
|
|
251
251
|
geometry_tolerence = 12
|
|
@@ -334,7 +334,7 @@ class Standard
|
|
|
334
334
|
# @param surface [OpenStudio::Model::Surface] surface object
|
|
335
335
|
# @param area_fraction [Double] fraction of area of the larger surface
|
|
336
336
|
# @param construction [OpenStudio::Model::Construction] construction to use for the new surface
|
|
337
|
-
# @return [
|
|
337
|
+
# @return [Boolean] returns true if successful, false if not
|
|
338
338
|
def set_window_to_wall_ratio_set_name(surface:, area_fraction:, construction:)
|
|
339
339
|
surface.setWindowToWallRatio(area_fraction)
|
|
340
340
|
surface.subSurfaces.sort.each do |sub_surf|
|
|
@@ -350,7 +350,7 @@ class Standard
|
|
|
350
350
|
# Is a preparation for replaceing windows or clearing doors before adding windows.
|
|
351
351
|
#
|
|
352
352
|
# @param surface [OpenStudio::Model::Surface] surface object
|
|
353
|
-
# @return [
|
|
353
|
+
# @return [Boolean] returns true if successful, false if not
|
|
354
354
|
def remove_all_subsurfaces(surface:)
|
|
355
355
|
surface.subSurfaces.sort.each(&:remove)
|
|
356
356
|
return true
|
|
@@ -50,7 +50,8 @@ class Standard
|
|
|
50
50
|
when 'Floor'
|
|
51
51
|
infil_rate_cfm_per_ft2 = component_infil_rates_cfm_per_ft2[type]['slab_on_grade']
|
|
52
52
|
end
|
|
53
|
-
when '
|
|
53
|
+
when 'Surface'
|
|
54
|
+
# @todo edit
|
|
54
55
|
case surface_type
|
|
55
56
|
when 'Floor'
|
|
56
57
|
infil_rate_cfm_per_ft2 = component_infil_rates_cfm_per_ft2[type]['floor_over_unconditioned']
|
|
@@ -89,7 +90,7 @@ class Standard
|
|
|
89
90
|
# @param sill_height_m [Double] sill height in meters
|
|
90
91
|
# @param window_height_m [Double] window height in meters
|
|
91
92
|
# @param fdwr [Double] fdwr
|
|
92
|
-
# @return [
|
|
93
|
+
# @return [Boolean] returns true if successful, false if not
|
|
93
94
|
def surface_replace_existing_subsurfaces_with_centered_subsurface(model, sill_height_m, window_height_m, fdwr)
|
|
94
95
|
vertical_surfaces = find_exposed_conditioned_vertical_surfaces(model)
|
|
95
96
|
vertical_surfaces.each do |vertical_surface|
|
|
@@ -381,9 +382,8 @@ class Standard
|
|
|
381
382
|
|
|
382
383
|
# Returns the surface and subsurface UA product
|
|
383
384
|
#
|
|
384
|
-
# @param [OpenStudio::Model::Surface] OpenStudio model surface object
|
|
385
|
-
#
|
|
386
|
-
# @retrun [Double] UA product in W/K
|
|
385
|
+
# @param surface [OpenStudio::Model::Surface] OpenStudio model surface object
|
|
386
|
+
# @return [Double] UA product in W/K
|
|
387
387
|
def surface_subsurface_ua(surface)
|
|
388
388
|
# Compute the surface UA product
|
|
389
389
|
if surface.outsideBoundaryCondition.to_s == 'GroundFCfactorMethod' && surface.construction.is_initialized
|
|
@@ -489,9 +489,9 @@ class Standard
|
|
|
489
489
|
|
|
490
490
|
# Calculate the wwr of a surface
|
|
491
491
|
#
|
|
492
|
-
# @param surface [OpenStudio::Model::Surface]
|
|
493
|
-
# @return [
|
|
494
|
-
def
|
|
492
|
+
# @param surface [OpenStudio::Model::Surface] OpenStudio Surface object
|
|
493
|
+
# @return [Double] window to wall ratio of a surface
|
|
494
|
+
def surface_get_wwr(surface)
|
|
495
495
|
surface_area = surface.grossArea
|
|
496
496
|
surface_fene_area = 0.0
|
|
497
497
|
surface.subSurfaces.sort.each do |ss|
|
|
@@ -505,9 +505,9 @@ class Standard
|
|
|
505
505
|
# Adjust the fenestration area to the values specified by the reduction value in a surface
|
|
506
506
|
#
|
|
507
507
|
# @param surface [OpenStudio::Model:Surface] openstudio surface object
|
|
508
|
-
# @param reduction [
|
|
508
|
+
# @param reduction [Double] ratio of adjustments
|
|
509
509
|
# @param model [OpenStudio::Model::Model] openstudio model
|
|
510
|
-
# @return [
|
|
510
|
+
# @return [Boolean] returns true if successful, false if not
|
|
511
511
|
def surface_adjust_fenestration_in_a_surface(surface, reduction, model)
|
|
512
512
|
# Subsurfaces in this surface
|
|
513
513
|
# Default case only handles reduction
|
|
@@ -527,9 +527,9 @@ class Standard
|
|
|
527
527
|
|
|
528
528
|
# Calculate the door ratio of a surface
|
|
529
529
|
#
|
|
530
|
-
# @param surface [OpenStudio::Model::Surface]
|
|
531
|
-
# @return [
|
|
532
|
-
def
|
|
530
|
+
# @param surface [OpenStudio::Model::Surface] OpenStudio Surface object
|
|
531
|
+
# @return [Double] window to wall ratio of a surface
|
|
532
|
+
def surface_get_door_ratio(surface)
|
|
533
533
|
surface_area = surface.grossArea
|
|
534
534
|
surface_door_area = 0.0
|
|
535
535
|
surface.subSurfaces.sort.each do |ss|
|
|
@@ -96,7 +96,7 @@ class Standard
|
|
|
96
96
|
# Convert total minimum OA requirement to a per-area value.
|
|
97
97
|
#
|
|
98
98
|
# @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
|
|
99
|
-
# @return [
|
|
99
|
+
# @return [Boolean] returns true if successful, false if not
|
|
100
100
|
def thermal_zone_convert_oa_req_to_per_area(thermal_zone)
|
|
101
101
|
# For each space in the zone, convert
|
|
102
102
|
# all design OA to per-area
|
|
@@ -561,7 +561,7 @@ class Standard
|
|
|
561
561
|
# In the event that they are equal, it will be assumed nonresidential.
|
|
562
562
|
#
|
|
563
563
|
# @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
|
|
564
|
-
# return [
|
|
564
|
+
# return [Boolean] true if residential, false if nonresidential
|
|
565
565
|
def thermal_zone_residential?(thermal_zone)
|
|
566
566
|
# Determine the respective areas
|
|
567
567
|
res_area_m2 = 0
|
|
@@ -591,7 +591,7 @@ class Standard
|
|
|
591
591
|
# This is as-defined by 90.1 Appendix G.
|
|
592
592
|
#
|
|
593
593
|
# @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
|
|
594
|
-
# @return [
|
|
594
|
+
# @return [Boolean] true if Fossil Fuel, Fossil/Electric Hybrid, and Purchased Heat zone,
|
|
595
595
|
# false if Electric or Other.
|
|
596
596
|
# @todo It's not doing it properly right now.
|
|
597
597
|
# If you have a zone with a VRF + a DOAS (via an ATU SingleDUct Uncontrolled)
|
|
@@ -603,19 +603,30 @@ class Standard
|
|
|
603
603
|
# Get an array of the heating fuels
|
|
604
604
|
# used by the zone. Possible values are
|
|
605
605
|
# Electricity, NaturalGas, Propane, PropaneGas, FuelOilNo1, FuelOilNo2,
|
|
606
|
-
# Coal, Diesel, Gasoline,
|
|
607
|
-
# and
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
if
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
606
|
+
# Coal, Diesel, Gasoline, SolarEnergy,
|
|
607
|
+
# DistrictHeating, DistrictHeatingWater, and DistrictHeatingSteam.
|
|
608
|
+
|
|
609
|
+
# error if HVACComponent heating fuels method is not available
|
|
610
|
+
if thermal_zone.model.version < OpenStudio::VersionString.new('3.6.0')
|
|
611
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.Standards.ThermalZone', 'Required HVACComponent method .heatingFuelTypes is not available in pre-OpenStudio 3.6.0 versions. Use a more recent version of OpenStudio.')
|
|
612
|
+
end
|
|
613
|
+
|
|
614
|
+
htg_fuels = thermal_zone.heatingFuelTypes.map(&:valueName)
|
|
615
|
+
|
|
616
|
+
if htg_fuels.include?('Gas')
|
|
617
|
+
htg_fuels.include?('NaturalGas') ||
|
|
618
|
+
htg_fuels.include?('Propane') ||
|
|
619
|
+
htg_fuels.include?('PropaneGas') ||
|
|
620
|
+
htg_fuels.include?('FuelOil_1') ||
|
|
621
|
+
htg_fuels.include?('FuelOilNo1') ||
|
|
622
|
+
htg_fuels.include?('FuelOil_2') ||
|
|
623
|
+
htg_fuels.include?('FuelOilNo2') ||
|
|
624
|
+
htg_fuels.include?('Coal') ||
|
|
625
|
+
htg_fuels.include?('Diesel') ||
|
|
626
|
+
htg_fuels.include?('Gasoline') ||
|
|
627
|
+
htg_fuels.include?('DistrictHeating') ||
|
|
628
|
+
htg_fuels.include?('DistrictHeatingWater') ||
|
|
629
|
+
htg_fuels.include?('DistrictHeatingSteam')
|
|
619
630
|
|
|
620
631
|
is_fossil = true
|
|
621
632
|
end
|
|
@@ -626,10 +637,10 @@ class Standard
|
|
|
626
637
|
end
|
|
627
638
|
|
|
628
639
|
# for 2013 and prior, baseline fuel = proposed fuel
|
|
629
|
-
# @param
|
|
630
|
-
# @return [
|
|
631
|
-
def thermal_zone_get_zone_fuels_for_occ_and_fuel_type(
|
|
632
|
-
zone_fuels = thermal_zone_fossil_or_electric_type(
|
|
640
|
+
# @param thermal_zone
|
|
641
|
+
# @return [String with applicable DistrictHeating and/or DistrictCooling
|
|
642
|
+
def thermal_zone_get_zone_fuels_for_occ_and_fuel_type(thermal_zone)
|
|
643
|
+
zone_fuels = thermal_zone_fossil_or_electric_type(thermal_zone, '')
|
|
633
644
|
return zone_fuels
|
|
634
645
|
end
|
|
635
646
|
|
|
@@ -647,17 +658,27 @@ class Standard
|
|
|
647
658
|
fossil = false
|
|
648
659
|
electric = false
|
|
649
660
|
|
|
661
|
+
# error if HVACComponent heating fuels method is not available
|
|
662
|
+
if thermal_zone.model.version < OpenStudio::VersionString.new('3.6.0')
|
|
663
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.Standards.ThermalZone', 'Required HVACComponent methods .heatingFuelTypes and .coolingFuelTypes are not available in pre-OpenStudio 3.6.0 versions. Use a more recent version of OpenStudio.')
|
|
664
|
+
end
|
|
665
|
+
|
|
650
666
|
# Fossil heating
|
|
651
|
-
htg_fuels = thermal_zone.
|
|
652
|
-
if htg_fuels.include?('
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
667
|
+
htg_fuels = thermal_zone.heatingFuelTypes.map(&:valueName)
|
|
668
|
+
if htg_fuels.include?('Gas')
|
|
669
|
+
htg_fuels.include?('NaturalGas') ||
|
|
670
|
+
htg_fuels.include?('Propane') ||
|
|
671
|
+
htg_fuels.include?('PropaneGas') ||
|
|
672
|
+
htg_fuels.include?('FuelOil_1') ||
|
|
673
|
+
htg_fuels.include?('FuelOilNo1') ||
|
|
674
|
+
htg_fuels.include?('FuelOil_2') ||
|
|
675
|
+
htg_fuels.include?('FuelOilNo2') ||
|
|
676
|
+
htg_fuels.include?('Coal') ||
|
|
677
|
+
htg_fuels.include?('Diesel') ||
|
|
678
|
+
htg_fuels.include?('Gasoline') ||
|
|
679
|
+
htg_fuels.include?('DistrictHeating') ||
|
|
680
|
+
htg_fuels.include?('DistrictHeatingWater') ||
|
|
681
|
+
htg_fuels.include?('DistrictHeatingSteam')
|
|
661
682
|
fossil = true
|
|
662
683
|
end
|
|
663
684
|
|
|
@@ -668,7 +689,7 @@ class Standard
|
|
|
668
689
|
|
|
669
690
|
# Cooling fuels, for determining
|
|
670
691
|
# unconditioned zones
|
|
671
|
-
clg_fuels = thermal_zone.
|
|
692
|
+
clg_fuels = thermal_zone.coolingFuelTypes
|
|
672
693
|
|
|
673
694
|
# Categorize
|
|
674
695
|
fuel_type = nil
|
|
@@ -707,33 +728,42 @@ class Standard
|
|
|
707
728
|
# Determine if the thermal zone is Fossil/Purchased Heat/Electric Hybrid
|
|
708
729
|
#
|
|
709
730
|
# @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
|
|
710
|
-
# @return [
|
|
731
|
+
# @return [Boolean] true if mixed Fossil/Electric Hybrid, and Purchased Heat zone, false if not
|
|
711
732
|
def thermal_zone_mixed_heating_fuel?(thermal_zone)
|
|
712
733
|
is_mixed = false
|
|
713
734
|
|
|
735
|
+
# error if HVACComponent heating fuels method is not available
|
|
736
|
+
if thermal_zone.model.version < OpenStudio::VersionString.new('3.6.0')
|
|
737
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.Standards.ThermalZone', 'Required HVACComponent method .heatingFuelTypes is not available in pre-OpenStudio 3.6.0 versions. Use a more recent version of OpenStudio.')
|
|
738
|
+
end
|
|
739
|
+
|
|
714
740
|
# Get an array of the heating fuels
|
|
715
741
|
# used by the zone. Possible values are
|
|
716
742
|
# Electricity, NaturalGas, Propane, PropaneGas, FuelOilNo1, FuelOilNo2,
|
|
717
|
-
# Coal, Diesel, Gasoline,
|
|
718
|
-
# and
|
|
719
|
-
htg_fuels = thermal_zone.
|
|
743
|
+
# Coal, Diesel, Gasoline, SolarEnergy,
|
|
744
|
+
# DistrictHeating, DistrictHeatingWater, and DistrictHeatingSteam.
|
|
745
|
+
htg_fuels = thermal_zone.heatingFuelTypes.map(&:valueName)
|
|
720
746
|
|
|
721
747
|
# Includes fossil
|
|
722
748
|
fossil = false
|
|
723
|
-
if htg_fuels.include?('
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
749
|
+
if htg_fuels.include?('Gas')
|
|
750
|
+
htg_fuels.include?('NaturalGas') ||
|
|
751
|
+
htg_fuels.include?('Propane') ||
|
|
752
|
+
htg_fuels.include?('PropaneGas') ||
|
|
753
|
+
htg_fuels.include?('FuelOil_1') ||
|
|
754
|
+
htg_fuels.include?('FuelOilNo1') ||
|
|
755
|
+
htg_fuels.include?('FuelOil_2') ||
|
|
756
|
+
htg_fuels.include?('FuelOilNo2') ||
|
|
757
|
+
htg_fuels.include?('Coal') ||
|
|
758
|
+
htg_fuels.include?('Diesel') ||
|
|
759
|
+
htg_fuels.include?('Gasoline')
|
|
731
760
|
|
|
732
761
|
fossil = true
|
|
733
762
|
end
|
|
734
763
|
|
|
735
764
|
# Electric and fossil and district
|
|
736
|
-
|
|
765
|
+
has_district_heating = (htg_fuels.include?('DistrictHeating') || htg_fuels.include?('DistrictHeatingWater') || htg_fuels.include?('DistrictHeatingSteam'))
|
|
766
|
+
if htg_fuels.include?('Electricity') && has_district_heating && fossil
|
|
737
767
|
is_mixed = true
|
|
738
768
|
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.Standards.ThermalZone', "For #{thermal_zone.name}, heating mixed electricity, fossil, and district.")
|
|
739
769
|
end
|
|
@@ -745,13 +775,13 @@ class Standard
|
|
|
745
775
|
end
|
|
746
776
|
|
|
747
777
|
# Electric and district
|
|
748
|
-
if htg_fuels.include?('Electricity') &&
|
|
778
|
+
if htg_fuels.include?('Electricity') && has_district_heating
|
|
749
779
|
is_mixed = true
|
|
750
780
|
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.Standards.ThermalZone', "For #{thermal_zone.name}, heating mixed electricity and district.")
|
|
751
781
|
end
|
|
752
782
|
|
|
753
783
|
# Fossil and district
|
|
754
|
-
if fossil &&
|
|
784
|
+
if fossil && has_district_heating
|
|
755
785
|
is_mixed = true
|
|
756
786
|
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.Standards.ThermalZone', "For #{thermal_zone.name}, heating mixed fossil and district.")
|
|
757
787
|
end
|
|
@@ -837,9 +867,14 @@ class Standard
|
|
|
837
867
|
end
|
|
838
868
|
end
|
|
839
869
|
|
|
870
|
+
# error if HVACComponent heating fuels method is not available
|
|
871
|
+
if thermal_zone.model.version < OpenStudio::VersionString.new('3.6.0')
|
|
872
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.Standards.ThermalZone', 'Required HVACComponent methods .heatingFuelTypes and .coolingFuelTypes are not available in pre-OpenStudio 3.6.0 versions. Use a more recent version of OpenStudio.')
|
|
873
|
+
end
|
|
874
|
+
|
|
840
875
|
# Get the zone heating and cooling fuels
|
|
841
|
-
htg_fuels = thermal_zone.
|
|
842
|
-
clg_fuels = thermal_zone.
|
|
876
|
+
htg_fuels = thermal_zone.heatingFuelTypes.map(&:valueName)
|
|
877
|
+
clg_fuels = thermal_zone.coolingFuelTypes.map(&:valueName)
|
|
843
878
|
is_fossil = thermal_zone_fossil_hybrid_or_purchased_heat?(thermal_zone)
|
|
844
879
|
|
|
845
880
|
# Infer the HVAC type
|
|
@@ -944,7 +979,7 @@ class Standard
|
|
|
944
979
|
#
|
|
945
980
|
# @author Andrew Parker, Julien Marrec
|
|
946
981
|
# @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
|
|
947
|
-
# @return [
|
|
982
|
+
# @return [Boolean] returns true if heated, false if not
|
|
948
983
|
def thermal_zone_heated?(thermal_zone)
|
|
949
984
|
temp_f = 41
|
|
950
985
|
temp_c = OpenStudio.convert(temp_f, 'F', 'C').get
|
|
@@ -1094,7 +1129,7 @@ class Standard
|
|
|
1094
1129
|
#
|
|
1095
1130
|
# @author Andrew Parker, Julien Marrec
|
|
1096
1131
|
# @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
|
|
1097
|
-
# @return [
|
|
1132
|
+
# @return [Boolean] returns true if cooled, false if not
|
|
1098
1133
|
def thermal_zone_cooled?(thermal_zone)
|
|
1099
1134
|
temp_f = 91
|
|
1100
1135
|
temp_c = OpenStudio.convert(temp_f, 'F', 'C').get
|
|
@@ -1235,7 +1270,7 @@ class Standard
|
|
|
1235
1270
|
# Determine if the thermal zone is a plenum based on whether a majority of the spaces in the zone are plenums or not.
|
|
1236
1271
|
#
|
|
1237
1272
|
# @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
|
|
1238
|
-
# @return [
|
|
1273
|
+
# @return [Boolean] returns true if majority plenum, false if not
|
|
1239
1274
|
def thermal_zone_plenum?(thermal_zone)
|
|
1240
1275
|
plenum_status = false
|
|
1241
1276
|
|
|
@@ -1261,7 +1296,7 @@ class Standard
|
|
|
1261
1296
|
# Zone must be less than 200 ft^2 and also have an infiltration object specified using Flow/Zone.
|
|
1262
1297
|
#
|
|
1263
1298
|
# @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
|
|
1264
|
-
# @return [
|
|
1299
|
+
# @return [Boolean] returns true if vestibule, false if not
|
|
1265
1300
|
def thermal_zone_vestibule?(thermal_zone)
|
|
1266
1301
|
is_vest = false
|
|
1267
1302
|
|
|
@@ -1286,24 +1321,31 @@ class Standard
|
|
|
1286
1321
|
# Logic to detect indirectly-conditioned spaces cannot be implemented
|
|
1287
1322
|
# as part of this measure as it would need to call itself.
|
|
1288
1323
|
# It is implemented as part of space_conditioning_category().
|
|
1289
|
-
#
|
|
1324
|
+
# @todo Add addendum db rules to 90.1-2019 for 90.1-2022 (use stable baseline value for zones designated as semiheated using proposed sizing run)
|
|
1290
1325
|
#
|
|
1291
1326
|
# @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
|
|
1292
1327
|
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
1293
1328
|
# @return [String] NonResConditioned, ResConditioned, Semiheated, Unconditioned
|
|
1294
1329
|
def thermal_zone_conditioning_category(thermal_zone, climate_zone)
|
|
1330
|
+
# error if zone design load methods are not available
|
|
1331
|
+
if thermal_zone.model.version < OpenStudio::VersionString.new('3.6.0')
|
|
1332
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.Standards.ThermalZone', 'Required ThermalZone methods .autosizedHeatingDesignLoad and .autosizedCoolingDesignLoad are not available in pre-OpenStudio 3.6.0 versions. Use a more recent version of OpenStudio.')
|
|
1333
|
+
end
|
|
1334
|
+
|
|
1295
1335
|
# Get the heating load
|
|
1296
1336
|
htg_load_btu_per_ft2 = 0.0
|
|
1297
|
-
|
|
1298
|
-
if
|
|
1299
|
-
|
|
1337
|
+
htg_load_w = thermal_zone.autosizedHeatingDesignLoad
|
|
1338
|
+
if htg_load_w.is_initialized
|
|
1339
|
+
htg_load_w_per_m2 = thermal_zone.autosizedHeatingDesignLoad.get / thermal_zone.floorArea
|
|
1340
|
+
htg_load_btu_per_ft2 = OpenStudio.convert(htg_load_w_per_m2, 'W/m^2', 'Btu/hr*ft^2').get
|
|
1300
1341
|
end
|
|
1301
1342
|
|
|
1302
1343
|
# Get the cooling load
|
|
1303
1344
|
clg_load_btu_per_ft2 = 0.0
|
|
1304
|
-
|
|
1305
|
-
if
|
|
1306
|
-
|
|
1345
|
+
clg_load_w = thermal_zone.autosizedCoolingDesignLoad
|
|
1346
|
+
if clg_load_w.is_initialized
|
|
1347
|
+
clg_load_w_per_m2 = thermal_zone.autosizedCoolingDesignLoad.get / thermal_zone.floorArea
|
|
1348
|
+
clg_load_btu_per_ft2 = OpenStudio.convert(clg_load_w_per_m2, 'W/m^2', 'Btu/hr*ft^2').get
|
|
1307
1349
|
end
|
|
1308
1350
|
|
|
1309
1351
|
# Determine the heating limit based on climate zone
|
|
@@ -1523,7 +1565,7 @@ class Standard
|
|
|
1523
1565
|
# This value determines zone air flows, which will be summed during system design airflow calculation.
|
|
1524
1566
|
#
|
|
1525
1567
|
# @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
|
|
1526
|
-
# @return [
|
|
1568
|
+
# @return [Boolean] returns true if successful, false if not
|
|
1527
1569
|
def thermal_zone_apply_prm_baseline_supply_temperatures(thermal_zone)
|
|
1528
1570
|
# Skip spaces that aren't heated or cooled
|
|
1529
1571
|
return true unless thermal_zone_heated?(thermal_zone) || thermal_zone_cooled?(thermal_zone)
|
|
@@ -1553,7 +1595,7 @@ class Standard
|
|
|
1553
1595
|
# or cooled by thermal_zone_cooled?() and thermal_zone_heated?()
|
|
1554
1596
|
#
|
|
1555
1597
|
# @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
|
|
1556
|
-
# @return [
|
|
1598
|
+
# @return [Boolean] returns true if successful, false if not
|
|
1557
1599
|
def thermal_zone_add_unconditioned_thermostat(thermal_zone)
|
|
1558
1600
|
# Heated to 0F (below thermal_zone_heated?(thermal_zone) threshold)
|
|
1559
1601
|
htg_t_f = 0
|
|
@@ -1767,7 +1809,7 @@ class Standard
|
|
|
1767
1809
|
#
|
|
1768
1810
|
# @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
|
|
1769
1811
|
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
|
1770
|
-
# @return [
|
|
1812
|
+
# @return [Boolean] Returns true if required, false if not
|
|
1771
1813
|
# @todo Add exception logic for 90.1-2013
|
|
1772
1814
|
# for cells, sickrooms, labs, barbers, salons, and bowling alleys
|
|
1773
1815
|
def thermal_zone_demand_control_ventilation_required?(thermal_zone, climate_zone)
|
|
@@ -1778,6 +1820,7 @@ class Standard
|
|
|
1778
1820
|
|
|
1779
1821
|
# Not required if both limits nil
|
|
1780
1822
|
if min_area_m2.nil? && min_area_m2_per_occ.nil?
|
|
1823
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.ThermalZone', "For #{thermal_zone.name}: DCV is not required due to lack of minimum area requirements.")
|
|
1781
1824
|
return dcv_required
|
|
1782
1825
|
end
|
|
1783
1826
|
|
|
@@ -1964,7 +2007,7 @@ class Standard
|
|
|
1964
2007
|
# returns adjacent zones that share a wall with the zone
|
|
1965
2008
|
#
|
|
1966
2009
|
# @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
|
|
1967
|
-
# @param same_floor [
|
|
2010
|
+
# @param same_floor [Boolean] only valid option for now is true
|
|
1968
2011
|
# @return [Array<OpenStudio::Model::ThermalZone>] array of adjacent thermal zones
|
|
1969
2012
|
def thermal_zone_get_adjacent_zones_with_shared_wall_areas(thermal_zone, same_floor = true)
|
|
1970
2013
|
adjacent_zones = []
|
|
@@ -1988,16 +2031,16 @@ class Standard
|
|
|
1988
2031
|
# returns true if DCV is required for exhaust fan for specified tempate
|
|
1989
2032
|
#
|
|
1990
2033
|
# @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
|
|
1991
|
-
# @return [
|
|
2034
|
+
# @return [Boolean] returns true if DCV is required for exhaust fan for specified template, false if not
|
|
1992
2035
|
def thermal_zone_exhaust_fan_dcv_required?(thermal_zone); end
|
|
1993
2036
|
|
|
1994
2037
|
# Add DCV to exhaust fan and if requsted to related objects
|
|
1995
2038
|
#
|
|
1996
2039
|
# @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
|
|
1997
|
-
# @param change_related_objects [
|
|
2040
|
+
# @param change_related_objects [Boolean] change related objects
|
|
1998
2041
|
# @param zone_mixing_objects [Array<OpenStudio::Model::ZoneMixing>] array of zone mixing objects
|
|
1999
2042
|
# @param transfer_air_source_zones [Array<OpenStudio::Model::ThermalZone>] array thermal zones that transfer air
|
|
2000
|
-
# @return [
|
|
2043
|
+
# @return [Boolean] returns true if successful, false if not
|
|
2001
2044
|
# @todo this method is currently empty
|
|
2002
2045
|
def thermal_zone_add_exhaust_fan_dcv(thermal_zone, change_related_objects = true, zone_mixing_objects = [], transfer_air_source_zones = [])
|
|
2003
2046
|
# set flow fraction schedule for all zone exhaust fans and then set zone mixing schedule to the intersection of exhaust availability and exhaust fractional schedule
|