openstudio-standards 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.md +33 -0
- 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 +2170 -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 +54 -18
- data/License.txt +0 -65
- 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
@@ -255,7 +255,6 @@ class ECMS
|
|
255
255
|
end
|
256
256
|
end
|
257
257
|
max_net_vert_distance = max_vert_distance + min_vert_distance
|
258
|
-
max_net_vert_distance = [max_net_vert_distance, 0.000001].max
|
259
258
|
|
260
259
|
return max_equiv_distance, max_net_vert_distance
|
261
260
|
end
|
@@ -467,10 +466,10 @@ class ECMS
|
|
467
466
|
# =============================================================================================================================
|
468
467
|
# The first 5 letters of the air loop name designate the system type (sys_abbr). This method updates the system type designation
|
469
468
|
# in the air loop name. At the same time the chosen air loop names are checked to avoid duplicate names from being used in the
|
470
|
-
# hash for system to
|
469
|
+
# hash for system to zones.
|
471
470
|
def update_system_zones_map_keys(system_zones_map,sys_abbr)
|
472
471
|
updated_system_zones_map = {}
|
473
|
-
system_zones_map.
|
472
|
+
system_zones_map.each do |sname,zones|
|
474
473
|
updated_sys_name = "#{sys_abbr}#{sname[5..-1]}"
|
475
474
|
if !updated_system_zones_map.has_key? updated_sys_name
|
476
475
|
updated_system_zones_map[updated_sys_name] = zones
|
@@ -595,12 +594,12 @@ class ECMS
|
|
595
594
|
|
596
595
|
# =============================================================================================================================
|
597
596
|
# Apply efficiencies for ECM 'hs08_ccashp_vrf'
|
598
|
-
def apply_efficiency_ecm_hs08_ccashp_vrf(model, air_sys_eqpt_type: 'ccashp')
|
597
|
+
def apply_efficiency_ecm_hs08_ccashp_vrf(model, standard, air_sys_eqpt_type: 'ccashp')
|
599
598
|
# Use same performance data as ECM 'hs09_ccashpsys' for air system
|
600
599
|
if air_sys_eqpt_type == 'ccashp'
|
601
|
-
apply_efficiency_ecm_hs09_ccashp_baseboard(model)
|
600
|
+
apply_efficiency_ecm_hs09_ccashp_baseboard(model,standard)
|
602
601
|
elsif air_sys_eqpt_type == 'ashp'
|
603
|
-
apply_efficiency_ecm_hs12_ashp_baseboard(model)
|
602
|
+
apply_efficiency_ecm_hs12_ashp_baseboard(model,standard)
|
604
603
|
end
|
605
604
|
# Apply efficiency for VRF units
|
606
605
|
eqpt_name = 'Mitsubishi_Hyper_Heating_VRF_Outdoor_Unit'
|
@@ -1042,8 +1041,13 @@ class ECMS
|
|
1042
1041
|
htg_eqpt = nil
|
1043
1042
|
case loop_htg_eqpt_type.downcase
|
1044
1043
|
when "district_heating"
|
1045
|
-
|
1046
|
-
|
1044
|
+
if model.version < OpenStudio::VersionString.new('3.7.0')
|
1045
|
+
htg_eqpt = OpenStudio::Model::DistrictHeating.new(model)
|
1046
|
+
else
|
1047
|
+
htg_eqpt = OpenStudio::Model::DistrictHeatingWater.new(model)
|
1048
|
+
end
|
1049
|
+
htg_eqpt.setName("DistrictHeating")
|
1050
|
+
|
1047
1051
|
when "heatpump_watertowater_equationfit"
|
1048
1052
|
htg_eqpt = OpenStudio::Model::HeatPumpWaterToWaterEquationFitHeating.new(model)
|
1049
1053
|
htg_eqpt.setName("HeatPumpWaterToWaterEquationFitHeating")
|
@@ -1106,7 +1110,11 @@ class ECMS
|
|
1106
1110
|
heat_rej_eqpt = OpenStudio::Model::GroundHeatExchangerVertical.new(model)
|
1107
1111
|
heat_rej_eqpt.setName("GroundHeatExchangerVertical")
|
1108
1112
|
when "district_heating"
|
1109
|
-
|
1113
|
+
if model.version < OpenStudio::VersionString.new('3.7.0')
|
1114
|
+
heat_rej_eqpt = OpenStudio::Model::DistrictHeating.new(model)
|
1115
|
+
else
|
1116
|
+
heat_rej_eqpt = OpenStudio::Model::DistrictHeatingWater.new(model)
|
1117
|
+
end
|
1110
1118
|
heat_rej_eqpt.setName("DistrictHeating")
|
1111
1119
|
when "district_cooling"
|
1112
1120
|
heat_rej_eqpt = OpenStudio::Model::DistrictCooling.new(model)
|
@@ -1253,13 +1261,16 @@ class ECMS
|
|
1253
1261
|
coil_cooling_dx_variable_speed_apply_curves(clg_dx_coil, eqpt_name)
|
1254
1262
|
coil_heating_dx_variable_speed_apply_curves(htg_dx_coil, eqpt_name)
|
1255
1263
|
# add zone equipment and diffuser
|
1256
|
-
|
1257
|
-
|
1258
|
-
|
1259
|
-
|
1260
|
-
|
1261
|
-
|
1262
|
-
|
1264
|
+
if sys_info['sys_vent_type'] == 'doas'
|
1265
|
+
zone_htg_eqpt_type = 'ptac_electric_off'
|
1266
|
+
zone_clg_eqpt_type = 'ptac_electric_off'
|
1267
|
+
zone_fan_type = 'constant_volume'
|
1268
|
+
else
|
1269
|
+
zone_htg_eqpt_type = 'baseboard_electric' if updated_heating_fuel == 'Electricity'
|
1270
|
+
zone_htg_eqpt_type = 'baseboard_hotwater' if updated_heating_fuel == 'NaturalGas'
|
1271
|
+
zone_clg_eqpt_type = 'none'
|
1272
|
+
zone_fan_type = 'none'
|
1273
|
+
end
|
1263
1274
|
add_zone_eqpt(model: model,
|
1264
1275
|
airloop: airloop,
|
1265
1276
|
zones: zones,
|
@@ -1271,9 +1282,9 @@ class ECMS
|
|
1271
1282
|
zone_fan_type: zone_fan_type,
|
1272
1283
|
hw_loop: hw_loop)
|
1273
1284
|
# for doas use baseboard electric or hotwater as backup for PTAC units
|
1274
|
-
zone_htg_eqpt_type = 'baseboard_hotwater' if heating_fuel == 'NaturalGas'
|
1275
|
-
zone_htg_eqpt_type = 'baseboard_electric' if heating_fuel == 'Electricity'
|
1276
1285
|
if sys_info['sys_vent_type'] == 'doas'
|
1286
|
+
zone_htg_eqpt_type = 'baseboard_electric' if updated_heating_fuel == 'Electricity'
|
1287
|
+
zone_htg_eqpt_type = 'baseboard_hotwater' if updated_heating_fuel == 'NaturalGas'
|
1277
1288
|
add_zone_eqpt(model: model,
|
1278
1289
|
airloop: airloop,
|
1279
1290
|
zones: zones,
|
@@ -1294,7 +1305,7 @@ class ECMS
|
|
1294
1305
|
|
1295
1306
|
# =============================================================================================================================
|
1296
1307
|
# Apply effiencies for ECM "hs09_ccashp_baseboard"
|
1297
|
-
def apply_efficiency_ecm_hs09_ccashp_baseboard(model)
|
1308
|
+
def apply_efficiency_ecm_hs09_ccashp_baseboard(model,standard)
|
1298
1309
|
# fraction of electric backup heating coil capacity assigned to dx heating coil
|
1299
1310
|
fr_backup_coil_cap_as_dx_coil_cap = 0.5
|
1300
1311
|
model.getAirLoopHVACs.sort.each do |isys|
|
@@ -1464,9 +1475,9 @@ class ECMS
|
|
1464
1475
|
|
1465
1476
|
# =============================================================================================================================
|
1466
1477
|
# Apply efficiencies and performance curves for ECM "hs11_ashp_pthp"
|
1467
|
-
def apply_efficiency_ecm_hs11_ashp_pthp(model)
|
1478
|
+
def apply_efficiency_ecm_hs11_ashp_pthp(model,standard)
|
1468
1479
|
fr_backup_coil_cap_as_dx_coil_cap = 0.5 # fraction of electric backup heating coil capacity assigned to dx heating coil
|
1469
|
-
apply_efficiency_ecm_hs12_ashp_baseboard(model)
|
1480
|
+
apply_efficiency_ecm_hs12_ashp_baseboard(model,standard)
|
1470
1481
|
pthp_eqpt_name = 'HS11_PTHP'
|
1471
1482
|
model.getAirLoopHVACs.sort.each do |isys|
|
1472
1483
|
isys.thermalZones.each do |zone|
|
@@ -1576,13 +1587,16 @@ class ECMS
|
|
1576
1587
|
coil_cooling_dx_single_speed_apply_curves(clg_dx_coil,eqpt_name)
|
1577
1588
|
coil_heating_dx_single_speed_apply_curves(htg_dx_coil,eqpt_name)
|
1578
1589
|
# add zone equipment and diffuser
|
1579
|
-
|
1580
|
-
|
1581
|
-
|
1582
|
-
|
1583
|
-
|
1584
|
-
|
1585
|
-
|
1590
|
+
if sys_info['sys_vent_type'] == 'doas'
|
1591
|
+
zone_htg_eqpt_type = 'ptac_electric_off'
|
1592
|
+
zone_clg_eqpt_type = 'ptac_electric_off'
|
1593
|
+
zone_fan_type = 'constant_volume'
|
1594
|
+
else
|
1595
|
+
zone_htg_eqpt_type = 'baseboard_electric' if updated_heating_fuel == 'Electricity'
|
1596
|
+
zone_htg_eqpt_type = 'baseboard_hotwater' if updated_heating_fuel == 'NaturalGas'
|
1597
|
+
zone_clg_eqpt_type = 'none'
|
1598
|
+
zone_fan_type = 'none'
|
1599
|
+
end
|
1586
1600
|
add_zone_eqpt(model: model,
|
1587
1601
|
airloop: airloop,
|
1588
1602
|
zones: zones,
|
@@ -1595,6 +1609,8 @@ class ECMS
|
|
1595
1609
|
hw_loop: hw_loop)
|
1596
1610
|
# for doas use baseboard electric or hotwater as backup for PTAC units
|
1597
1611
|
if sys_info['sys_vent_type'] == 'doas'
|
1612
|
+
zone_htg_eqpt_type = 'baseboard_electric' if updated_heating_fuel == 'Electricity'
|
1613
|
+
zone_htg_eqpt_type = 'baseboard_hotwater' if updated_heating_fuel == 'NaturalGas'
|
1598
1614
|
add_zone_eqpt(model: model,
|
1599
1615
|
airloop: airloop,
|
1600
1616
|
zones: zones,
|
@@ -1630,7 +1646,7 @@ class ECMS
|
|
1630
1646
|
|
1631
1647
|
# =============================================================================================================================
|
1632
1648
|
# Apply efficiencies and performance curves for ECM "hs12_ashp_baseboard"
|
1633
|
-
def apply_efficiency_ecm_hs12_ashp_baseboard(model)
|
1649
|
+
def apply_efficiency_ecm_hs12_ashp_baseboard(model,standard)
|
1634
1650
|
fr_backup_coil_cap_as_dx_coil_cap = 0.5 # fraction of electric backup heating coil capacity assigned to dx heating coil
|
1635
1651
|
ashp_eqpt_name = 'NECB2015_ASHP'
|
1636
1652
|
model.getAirLoopHVACs.sort.each do |isys|
|
@@ -1706,9 +1722,9 @@ class ECMS
|
|
1706
1722
|
|
1707
1723
|
# =============================================================================================================================
|
1708
1724
|
# Apply efficiencies and performance curves for ECM "hs12_ashp_vrf"
|
1709
|
-
def apply_efficiency_ecm_hs13_ashp_vrf(model)
|
1725
|
+
def apply_efficiency_ecm_hs13_ashp_vrf(model,standard)
|
1710
1726
|
# call method for ECM hs08 with ASHP in air system
|
1711
|
-
apply_efficiency_ecm_hs08_ccashp_vrf(model, air_sys_eqpt_type: 'ashp')
|
1727
|
+
apply_efficiency_ecm_hs08_ccashp_vrf(model, standard, air_sys_eqpt_type: 'ashp')
|
1712
1728
|
end
|
1713
1729
|
|
1714
1730
|
# =============================================================================================================================
|
@@ -1825,7 +1841,7 @@ class ECMS
|
|
1825
1841
|
loop_spm_type: 'Scheduled',
|
1826
1842
|
loop_setpoint: 50.0,
|
1827
1843
|
loop_temp_diff: 5.0)
|
1828
|
-
model.getCoilHeatingWaters.each {|coil| hw_loop.addDemandBranchForComponent(coil)}
|
1844
|
+
model.getCoilHeatingWaters.sort.each {|coil| hw_loop.addDemandBranchForComponent(coil)}
|
1829
1845
|
hcapf_curve_name = "HEATPUMP_WATERTOWATER_HCAPF"
|
1830
1846
|
hcapf_curve = model_add_curve(model, hcapf_curve_name)
|
1831
1847
|
if hcapf_curve
|
@@ -1857,7 +1873,7 @@ class ECMS
|
|
1857
1873
|
|
1858
1874
|
chw_loop_clg_eqpt.setName('ChillerWaterCooled')
|
1859
1875
|
chw_loop_clg_eqpt.setCondenserType("WaterCooled")
|
1860
|
-
model.getCoilCoolingWaters.each {|coil| chw_loop.addDemandBranchForComponent(coil)}
|
1876
|
+
model.getCoilCoolingWaters.sort.each {|coil| chw_loop.addDemandBranchForComponent(coil)}
|
1861
1877
|
sec_chiller = OpenStudio::Model::ChillerElectricEIR.new(model)
|
1862
1878
|
chw_loop_clg_eqpt_outlet_node = chw_loop_clg_eqpt.supplyOutletModelObject.get.to_Node.get
|
1863
1879
|
sec_chiller.addToNode(chw_loop_clg_eqpt_outlet_node)
|
@@ -1900,20 +1916,23 @@ class ECMS
|
|
1900
1916
|
|
1901
1917
|
#=============================================================================================================================
|
1902
1918
|
# Appy efficiencies for ECM "hs14_cgshp_fancoils"
|
1903
|
-
def apply_efficiency_ecm_hs14_cgshp_fancoils(model)
|
1919
|
+
def apply_efficiency_ecm_hs14_cgshp_fancoils(model,standard)
|
1904
1920
|
heatpump_siz_f = 0.4 # sizing factor for water-source heat pump (heating mode)
|
1905
1921
|
chiller_siz_f = 0.4 # sizing factor for water-cooled chiller
|
1906
|
-
# get water-source heat pump
|
1922
|
+
# get water-source heat pump and boiler
|
1907
1923
|
hw_loops = model.getPlantLoops.select {|loop| loop.sizingPlant.loopType.to_s.downcase == 'heating'}
|
1908
1924
|
hw_heatpump_loop = nil
|
1909
1925
|
hw_heatpump = nil
|
1926
|
+
hw_boiler = nil
|
1910
1927
|
hw_loops.each do |hw_loop|
|
1911
1928
|
hw_heatpumps = hw_loop.supplyComponents.select {|comp| comp.to_HeatPumpWaterToWaterEquationFitHeating.is_initialized}
|
1912
1929
|
if !hw_heatpumps.empty?
|
1913
1930
|
hw_heatpump_loop = hw_loop
|
1914
1931
|
hw_heatpump = hw_heatpumps[0].to_HeatPumpWaterToWaterEquationFitHeating.get
|
1915
|
-
break
|
1916
1932
|
end
|
1933
|
+
hw_boilers = hw_loop.supplyComponents.select {|comp| comp.to_BoilerHotWater.is_initialized}
|
1934
|
+
hw_boiler = hw_boilers[0].to_BoilerHotWater.get if !hw_boilers.empty?
|
1935
|
+
break if !hw_heatpump_loop.nil? && !hw_heatpump.nil? && !hw_boiler.nil?
|
1917
1936
|
end
|
1918
1937
|
raise("apply_efficiency_ecm_hs14_cgshp_fancoils: no water-source heat pump found in heating loop #{hw_loops.name.to_s}") if hw_heatpump.nil?
|
1919
1938
|
cw_loop = model.getPlantLoops.select {|loop| loop.sizingPlant.loopType.to_s.downcase == 'condenser'}[0]
|
@@ -1937,8 +1956,10 @@ class ECMS
|
|
1937
1956
|
cw_loop.setMaximumLoopFlowRate(cw_loop_max_flow)
|
1938
1957
|
cw_loop_pump = cw_loop.supplyComponents.select {|comp| comp.to_PumpVariableSpeed.is_initialized}[0].to_PumpVariableSpeed.get
|
1939
1958
|
cw_loop_pump.setRatedFlowRate(cw_loop_max_flow)
|
1940
|
-
# set heating capacity of water-source heat pump
|
1941
|
-
if hw_heatpump.
|
1959
|
+
# set heating capacity of water-source heat pump and boiler
|
1960
|
+
if hw_heatpump.autosizedRatedHeatingCapacity.is_initialized
|
1961
|
+
cap = hw_heatpump.autosizedRatedHeatingCapacity.to_f
|
1962
|
+
elsif hw_heatpump.ratedHeatingCapacity.is_initialized
|
1942
1963
|
cap = hw_heatpump.ratedHeatingCapacity.to_f
|
1943
1964
|
elsif hw_heatpump.autosizedRatedHeatingCapacity.is_initialized
|
1944
1965
|
cap = hw_heatpump.autosizedRatedHeatingCapacity.to_f
|
@@ -1946,18 +1967,22 @@ class ECMS
|
|
1946
1967
|
raise("apply_efficiency_ecm_hs14_cgshp_fancoils: capacity of water-source heat pump #{hw_heatpump.name.to_s} is not defined")
|
1947
1968
|
end
|
1948
1969
|
hw_heatpump.setRatedHeatingCapacity(heatpump_siz_f*cap)
|
1949
|
-
|
1970
|
+
hw_boiler.setNominalCapacity((1.0-heatpump_siz_f)*cap)
|
1971
|
+
# set cooling capacity of chillers
|
1950
1972
|
chillers = chw_loop.supplyComponents.select {|comp| comp.to_ChillerElectricEIR.is_initialized}
|
1951
1973
|
chiller_water_cooled = nil
|
1974
|
+
chiller_air_cooled = nil
|
1952
1975
|
chillers.each do |comp|
|
1953
1976
|
chlr = comp.to_ChillerElectricEIR.get
|
1954
|
-
if chlr.name.to_s.include? 'ChillerWaterCooled'
|
1955
|
-
|
1956
|
-
|
1957
|
-
|
1958
|
-
end
|
1977
|
+
chiller_water_cooled = chlr if chlr.name.to_s.include? 'ChillerWaterCooled'
|
1978
|
+
chiller_air_cooled = chlr if chlr.name.to_s.include? 'ChillerAirCooled'
|
1979
|
+
break if !chiller_water_cooled.nil? && !chiller_air_cooled.nil?
|
1980
|
+
end
|
1959
1981
|
raise("apply_efficiency_ecm_hs14_cgshp_fancoils: no water-cooled chiller found in cooling loop #{chw_loop.name.to_s}") if chiller_water_cooled.nil?
|
1960
|
-
if
|
1982
|
+
raise("apply_efficiency_ecm_hs14_cgshp_fancoils: no air-cooled chiller found in cooling loop #{chw_loop.name.to_s}") if chiller_air_cooled.nil?
|
1983
|
+
if chiller_water_cooled.autosizedReferenceCapacity.is_initialized
|
1984
|
+
cap = chiller_water_cooled.autosizedReferenceCapacity.to_f
|
1985
|
+
elsif chiller_water_cooled.referenceCapacity.is_initialized
|
1961
1986
|
cap = chiller_water_cooled.referenceCapacity.to_f
|
1962
1987
|
elsif chiller_water_cooled.autosizedReferenceCapacity.is_initialized
|
1963
1988
|
cap = chiller_water_cooled.autosizedReferenceCapacity.to_f
|
@@ -1965,6 +1990,24 @@ class ECMS
|
|
1965
1990
|
raise("apply_efficiency_ecm_hs14_cgshp_fancoils: cooling capacity of chiller #{chiller_water_cooled.name.to_s} is not defined")
|
1966
1991
|
end
|
1967
1992
|
chiller_water_cooled.setReferenceCapacity(chiller_siz_f*cap)
|
1993
|
+
chiller_air_cooled.setReferenceCapacity((1.0-chiller_siz_f)*cap)
|
1994
|
+
# call standard efficiency method again for water-cooled chiller
|
1995
|
+
new_chlr_name = chiller_water_cooled.name.to_s.chomp!(chiller_water_cooled.name.to_s.split.last).strip
|
1996
|
+
new_chlr_name = new_chlr_name.chomp!(new_chlr_name.split.last).strip
|
1997
|
+
new_chlr_name = new_chlr_name.chomp!(new_chlr_name.split.last).strip
|
1998
|
+
chiller_water_cooled.setName(new_chlr_name)
|
1999
|
+
standard.chiller_electric_eir_apply_efficiency_and_curves(chiller_water_cooled,nil)
|
2000
|
+
# set curves and cop of air-cooled chiller
|
2001
|
+
chlr_cap_w = (1.0-chiller_siz_f)*cap
|
2002
|
+
chlr_cap_ton = OpenStudio.convert(chlr_cap_w, 'W', 'ton').get
|
2003
|
+
search_criteria = {}
|
2004
|
+
search_criteria['cooling_type'] = 'AirCooled'
|
2005
|
+
chlr_props = model_find_object(standards_data['tables']['chiller_types_ecm']['table'], search_criteria, chlr_cap_ton)
|
2006
|
+
chiller_air_cooled.setName("ChillerAirCooled #{chlr_props['compressor_type']}")
|
2007
|
+
search_criteria = {}
|
2008
|
+
search_criteria['name'] = 'NECB2020_AirCooledChiller'
|
2009
|
+
search_criteria['compressor_type'] = chlr_props['compressor_type']
|
2010
|
+
chiller_electric_eir_apply_curves_and_cop(chiller_air_cooled, search_criteria)
|
1968
2011
|
end
|
1969
2012
|
|
1970
2013
|
#=============================================================================================================================
|
@@ -1975,11 +2018,20 @@ class ECMS
|
|
1975
2018
|
# maximum district cooling rate on the summer design day.
|
1976
2019
|
|
1977
2020
|
cw_loops = model.getPlantLoops.select{|loop| loop.sizingPlant.loopType.to_s.downcase == 'condenser'}
|
1978
|
-
ghx_loops = cw_loops.select {|loop| loop.name.to_s.downcase.include? 'glhx'}
|
2021
|
+
ghx_loops = cw_loops.select { |loop| loop.name.to_s.downcase.include? 'glhx' }
|
1979
2022
|
return if ghx_loops.empty?
|
1980
2023
|
ghx_loop = ghx_loops[0]
|
1981
|
-
dist_htg_eqpts = ghx_loop.supplyComponents.select {|comp| comp.
|
1982
|
-
|
2024
|
+
dist_htg_eqpts = ghx_loop.supplyComponents.select { |comp| comp.iddObjectType.valueName.to_s.include?('DistrictHeating') }
|
2025
|
+
if !dist_htg_eqpts.empty?
|
2026
|
+
case dist_htg_eqpts[0].iddObjectType.valueName.to_s
|
2027
|
+
when 'OS_DistrictHeating'
|
2028
|
+
dist_htg_eqpt = dist_htg_eqpts[0].to_DistrictHeating.get
|
2029
|
+
when 'OS_DistrictHeatingWater'
|
2030
|
+
dist_htg_eqpt = dist_htg_eqpts[0].to_DistrictHeatingWater.get
|
2031
|
+
when 'OS_DistrictHeatingSteam'
|
2032
|
+
dist_htg_eqpt = dist_htg_eqpts[0].to_DistrictHeatingSteam.get
|
2033
|
+
end
|
2034
|
+
end
|
1983
2035
|
dist_clg_eqpts = ghx_loop.supplyComponents.select {|comp| comp.to_DistrictCooling.is_initialized}
|
1984
2036
|
dist_clg_eqpt = dist_clg_eqpts[0].to_DistrictCooling.get if !dist_clg_eqpts.empty?
|
1985
2037
|
raise("set_cond_loop_district_cap: condenser loop doesn't have a district heating and district cooling objects") if dist_htg_eqpts.empty? || dist_clg_eqpts.empty?
|
@@ -2101,14 +2153,13 @@ class ECMS
|
|
2101
2153
|
capacity_w = coil_heating_dx_single_speed_find_capacity(coil_heating_dx_single_speed)
|
2102
2154
|
capacity_w = [1.0,capacity_w].max
|
2103
2155
|
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
|
2104
|
-
capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
|
2105
2156
|
|
2106
2157
|
# Lookup efficiencies
|
2107
2158
|
props = model_find_object(standards_data['tables']['heat_pump_heating_ecm']['table'], search_criteria, capacity_btu_per_hr)
|
2108
2159
|
|
2109
2160
|
# Check to make sure properties were found
|
2110
2161
|
if props.nil?
|
2111
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{coil_heating_dx_single_speed.name}, cannot find efficiency info using #{search_criteria}
|
2162
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{coil_heating_dx_single_speed.name}, cannot find efficiency info using #{search_criteria}.")
|
2112
2163
|
successfully_set_all_properties = false
|
2113
2164
|
end
|
2114
2165
|
|
@@ -2168,6 +2219,62 @@ class ECMS
|
|
2168
2219
|
|
2169
2220
|
end
|
2170
2221
|
|
2222
|
+
# =============================================================================================================================
|
2223
|
+
# Applies the performance curves "ChillerElectricEIR" object.
|
2224
|
+
def chiller_electric_eir_apply_curves_and_cop(chiller_electric_eir, search_criteria)
|
2225
|
+
successfully_set_all_properties = true
|
2226
|
+
|
2227
|
+
# Get the capacity
|
2228
|
+
capacity_w = chiller_electric_eir_find_capacity(chiller_electric_eir)
|
2229
|
+
capacity_tons = OpenStudio.convert(capacity_w, 'W', 'ton').get
|
2230
|
+
|
2231
|
+
# Lookup performance curves
|
2232
|
+
chlr_props = model_find_object(standards_data['tables']['chillers_ecm']['table'], search_criteria, capacity_tons)
|
2233
|
+
|
2234
|
+
# Check to make sure properties were found
|
2235
|
+
if chlr_props.nil?
|
2236
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standard.ChillerElectricEIR', "For #{chiller_electric_eir.name}, cannot find efficiency info using #{search_criteria}")
|
2237
|
+
successfully_set_all_properties = false
|
2238
|
+
end
|
2239
|
+
|
2240
|
+
# CAP-FT curve
|
2241
|
+
capft = model_add_curve(chiller_electric_eir.model, chlr_props['capft'])
|
2242
|
+
if capft
|
2243
|
+
chiller_electric_eir.setCoolingCapacityFunctionOfTemperature(capft)
|
2244
|
+
else
|
2245
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standard.ChillerElectricEIR', "For #{chiller_electric_eir.name}, cannot find cap_ft curve, will not be set.")
|
2246
|
+
successfully_set_all_properties = false
|
2247
|
+
end
|
2248
|
+
|
2249
|
+
# EIR-FT curve
|
2250
|
+
eirft = model_add_curve(chiller_electric_eir.model, chlr_props['eirft'])
|
2251
|
+
if eirft
|
2252
|
+
chiller_electric_eir.setElectricInputToCoolingOutputRatioFunctionOfTemperature(eirft)
|
2253
|
+
else
|
2254
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standard.ChillerElectricEIR', "For #{chiller_electric_eir.name}, cannot find eir_ft curve, will not be set.")
|
2255
|
+
successfully_set_all_properties = false
|
2256
|
+
end
|
2257
|
+
|
2258
|
+
# EIR-FPLR curve
|
2259
|
+
eirfplr = model_add_curve(chiller_electric_eir.model, chlr_props['eirfplr'])
|
2260
|
+
if eirfplr
|
2261
|
+
chiller_electric_eir.setElectricInputToCoolingOutputRatioFunctionOfPLR(eirfplr)
|
2262
|
+
else
|
2263
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standard.ChillerElectricEIR', "For #{chiller_electric_eir.name}, cannot find eir_fplr curve, will not be set.")
|
2264
|
+
successfully_set_all_properties = false
|
2265
|
+
end
|
2266
|
+
|
2267
|
+
# set COP
|
2268
|
+
cop = chlr_props['minimum_coefficient_of_performance_cooling'].to_f
|
2269
|
+
if cop
|
2270
|
+
chiller_electric_eir.setReferenceCOP(cop)
|
2271
|
+
else
|
2272
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standard.ChillerElectricEIR', "For #{chiller_electric_eir.name}, cannot find cop, will not be set.")
|
2273
|
+
successfully_set_all_properties = false
|
2274
|
+
end
|
2275
|
+
|
2276
|
+
end
|
2277
|
+
|
2171
2278
|
# =============================================================================================================================
|
2172
2279
|
# Applies the performance curves "CoilCoolingDXVariableSpeed" object.
|
2173
2280
|
def coil_cooling_dx_variable_speed_apply_curves(coil_cooling_dx_variable_speed, eqpt_name)
|
@@ -2177,7 +2284,6 @@ class ECMS
|
|
2177
2284
|
capacity_w = coil_cooling_dx_variable_speed_find_capacity(coil_cooling_dx_variable_speed)
|
2178
2285
|
capacity_w = [1.0,capacity_w].max
|
2179
2286
|
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
|
2180
|
-
capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
|
2181
2287
|
|
2182
2288
|
# Lookup performance curves
|
2183
2289
|
search_criteria = {}
|
@@ -2250,14 +2356,13 @@ class ECMS
|
|
2250
2356
|
capacity_w = coil_heating_dx_variable_speed_find_capacity(coil_heating_dx_variable_speed)
|
2251
2357
|
capacity_w = [1.0,capacity_w].max
|
2252
2358
|
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
|
2253
|
-
capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
|
2254
2359
|
|
2255
2360
|
# Lookup performance curves
|
2256
2361
|
props = model_find_object(standards_data['tables']['heat_pump_heating_ecm']['table'], search_criteria, capacity_btu_per_hr)
|
2257
2362
|
|
2258
2363
|
# Check to make sure properties were found
|
2259
2364
|
if props.nil?
|
2260
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{coil_heating_dx_variable_speed.name}, cannot find efficiency info using #{search_criteria}
|
2365
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{coil_heating_dx_variable_speed.name}, cannot find efficiency info using #{search_criteria}.")
|
2261
2366
|
successfully_set_all_properties = false
|
2262
2367
|
end
|
2263
2368
|
|
@@ -2328,7 +2433,6 @@ class ECMS
|
|
2328
2433
|
capacity_w = airconditioner_variablerefrigerantflow_cooling_find_capacity(airconditioner_variablerefrigerantflow)
|
2329
2434
|
capacity_w = [1.0,capacity_w].max
|
2330
2435
|
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
|
2331
|
-
capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
|
2332
2436
|
|
2333
2437
|
# Lookup performance curves
|
2334
2438
|
props = model_find_object(standards_data['tables']['heat_pump_cooling_ecm']['table'], search_criteria, capacity_btu_per_hr)
|
@@ -2460,7 +2564,6 @@ class ECMS
|
|
2460
2564
|
capacity_w = airconditioner_variablerefrigerantflow_heating_find_capacity(airconditioner_variablerefrigerantflow)
|
2461
2565
|
capacity_w = [1.0,capacity_w].max
|
2462
2566
|
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
|
2463
|
-
capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
|
2464
2567
|
|
2465
2568
|
# Lookup performance curves
|
2466
2569
|
props = model_find_object(standards_data['tables']['heat_pump_heating_ecm']['table'], search_criteria, capacity_btu_per_hr)
|
@@ -2587,12 +2690,12 @@ class ECMS
|
|
2587
2690
|
|
2588
2691
|
# Check to make sure properties were found
|
2589
2692
|
if ac_props.nil?
|
2590
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{coil_cooling_dx_single_speed.name}, cannot find efficiency info using #{search_criteria}
|
2693
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{coil_cooling_dx_single_speed.name}, cannot find efficiency info using #{search_criteria}.")
|
2591
2694
|
successfully_set_all_properties = false
|
2592
2695
|
return successfully_set_all_properties
|
2593
2696
|
end
|
2594
2697
|
|
2595
|
-
# Get the minimum efficiency
|
2698
|
+
# Get the minimum efficiency
|
2596
2699
|
cop = nil
|
2597
2700
|
|
2598
2701
|
# If specified as SEER
|
@@ -2659,12 +2762,12 @@ class ECMS
|
|
2659
2762
|
|
2660
2763
|
# Check to make sure properties were found
|
2661
2764
|
if props.nil?
|
2662
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{coil_heating_dx_single_speed.name}, cannot find efficiency info using #{search_criteria}
|
2765
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{coil_heating_dx_single_speed.name}, cannot find efficiency info using #{search_criteria}")
|
2663
2766
|
successfully_set_all_properties = false
|
2664
2767
|
return successfully_set_all_properties
|
2665
2768
|
end
|
2666
2769
|
|
2667
|
-
# Get the minimum efficiency
|
2770
|
+
# Get the minimum efficiency
|
2668
2771
|
cop = nil
|
2669
2772
|
|
2670
2773
|
# If specified as EER
|
@@ -2723,12 +2826,12 @@ class ECMS
|
|
2723
2826
|
|
2724
2827
|
# Check to make sure properties were found
|
2725
2828
|
if ac_props.nil?
|
2726
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{coil_cooling_dx_variable_speed.name}, cannot find efficiency info using #{search_criteria}
|
2829
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{coil_cooling_dx_variable_speed.name}, cannot find efficiency info using #{search_criteria}.")
|
2727
2830
|
successfully_set_all_properties = false
|
2728
2831
|
return successfully_set_all_properties
|
2729
2832
|
end
|
2730
2833
|
|
2731
|
-
# Get the minimum efficiency
|
2834
|
+
# Get the minimum efficiency
|
2732
2835
|
cop = nil
|
2733
2836
|
|
2734
2837
|
# If specified as SEER
|
@@ -2795,12 +2898,12 @@ class ECMS
|
|
2795
2898
|
|
2796
2899
|
# Check to make sure properties were found
|
2797
2900
|
if props.nil?
|
2798
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{coil_heating_dx_variable_speed.name}, cannot find efficiency info using #{search_criteria}
|
2901
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{coil_heating_dx_variable_speed.name}, cannot find efficiency info using #{search_criteria}.")
|
2799
2902
|
successfully_set_all_properties = false
|
2800
2903
|
return successfully_set_all_properties
|
2801
2904
|
end
|
2802
2905
|
|
2803
|
-
# Get the minimum efficiency
|
2906
|
+
# Get the minimum efficiency
|
2804
2907
|
cop = nil
|
2805
2908
|
|
2806
2909
|
# If specified as EER
|
@@ -2859,12 +2962,12 @@ class ECMS
|
|
2859
2962
|
|
2860
2963
|
# Check to make sure properties were found
|
2861
2964
|
if props.nil?
|
2862
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{airconditioner_variablerefrigerantflow.name}, cannot find efficiency info using #{search_criteria}
|
2965
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{airconditioner_variablerefrigerantflow.name}, cannot find efficiency info using #{search_criteria}.")
|
2863
2966
|
successfully_set_all_properties = false
|
2864
2967
|
return successfully_set_all_properties
|
2865
2968
|
end
|
2866
2969
|
|
2867
|
-
# Get the minimum efficiency
|
2970
|
+
# Get the minimum efficiency
|
2868
2971
|
cop = nil
|
2869
2972
|
|
2870
2973
|
# If specified as EER
|
@@ -2923,12 +3026,12 @@ class ECMS
|
|
2923
3026
|
|
2924
3027
|
# Check to make sure properties were found
|
2925
3028
|
if props.nil?
|
2926
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{airconditioner_variablerefrigerantflow.name}, cannot find heating efficiency info using #{search_criteria}
|
3029
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{airconditioner_variablerefrigerantflow.name}, cannot find heating efficiency info using #{search_criteria}.")
|
2927
3030
|
successfully_set_all_properties = false
|
2928
3031
|
return successfully_set_all_properties
|
2929
3032
|
end
|
2930
3033
|
|
2931
|
-
# Get the minimum efficiency
|
3034
|
+
# Get the minimum efficiency
|
2932
3035
|
cop = nil
|
2933
3036
|
|
2934
3037
|
# If specified as EER
|
@@ -2981,7 +3084,7 @@ class ECMS
|
|
2981
3084
|
elsif coil_cooling_dx_variable_speed.autosizedGrossRatedTotalCoolingCapacityAtSelectedNominalSpeedLevel.is_initialized
|
2982
3085
|
capacity_w = coil_cooling_dx_variable_speed.autosizedGrossRatedTotalCoolingCapacityAtSelectedNominalSpeedLevel.get
|
2983
3086
|
else
|
2984
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{coil_cooling_dx_variable_speed.name} capacity is not available
|
3087
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{coil_cooling_dx_variable_speed.name} capacity is not available.")
|
2985
3088
|
return 0.0
|
2986
3089
|
end
|
2987
3090
|
|
@@ -2997,7 +3100,7 @@ class ECMS
|
|
2997
3100
|
elsif coil_heating_dx_variable_speed.autosizedRatedHeatingCapacityAtSelectedNominalSpeedLevel.is_initialized
|
2998
3101
|
capacity_w = coil_heating_dx_variable_speed.autosizedRatedHeatingCapacityAtSelectedNominalSpeedLevel.get
|
2999
3102
|
else
|
3000
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{coil_heating_dx_variable_speed.name} capacity is not available
|
3103
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{coil_heating_dx_variable_speed.name} capacity is not available.")
|
3001
3104
|
return 0.0
|
3002
3105
|
end
|
3003
3106
|
|
@@ -3014,7 +3117,7 @@ class ECMS
|
|
3014
3117
|
capacity_w = airconditioner_variablerefrigerantflow.autosizedRatedTotalCoolingCapacity.get
|
3015
3118
|
airconditioner_variablerefrigerantflow.setRatedTotalCoolingCapacity(capacity_w)
|
3016
3119
|
else
|
3017
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{airconditioner_variablerefrigerantflow.name} cooling capacity is not available
|
3120
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{airconditioner_variablerefrigerantflow.name} cooling capacity is not available.")
|
3018
3121
|
return 0.0
|
3019
3122
|
end
|
3020
3123
|
|
@@ -3031,7 +3134,24 @@ class ECMS
|
|
3031
3134
|
capacity_w = airconditioner_variablerefrigerantflow.autosizedRatedTotalHeatingCapacity.get
|
3032
3135
|
airconditioner_variablerefrigerantflow.setRatedTotalHeatingCapacity(capacity_w)
|
3033
3136
|
else
|
3034
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{airconditioner_variablerefrigerantflow.name} heating capacity is not available
|
3137
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{airconditioner_variablerefrigerantflow.name} heating capacity is not available.")
|
3138
|
+
return 0.0
|
3139
|
+
end
|
3140
|
+
|
3141
|
+
return capacity_w
|
3142
|
+
end
|
3143
|
+
|
3144
|
+
# =============================================================================================================================
|
3145
|
+
# Find cooling capacity for "ChillerElectricEIR" object
|
3146
|
+
def chiller_electric_eir_find_capacity(chiller_electric_eir)
|
3147
|
+
capacity_w = nil
|
3148
|
+
if chiller_electric_eir.referenceCapacity.is_initialized
|
3149
|
+
capacity_w = chiller_electric_eir.referenceCapacity.get
|
3150
|
+
elsif chiller_electric_eir.autosizedRererenceCapacity.is_initialized
|
3151
|
+
capacity_w = chiller_electric_eir.autosizedRerenceCapacity.get
|
3152
|
+
chiller_electric_eir.setReferenceCapacity(capacity_w)
|
3153
|
+
else
|
3154
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ChillerElectricEIR', "For #{chiller_electric_eir.name} capacity not available")
|
3035
3155
|
return 0.0
|
3036
3156
|
end
|
3037
3157
|
|
@@ -3234,7 +3354,7 @@ class ECMS
|
|
3234
3354
|
# If an efficiency is set but is not between 0.01 and 1.0 it returns an error. Otherwise, it looks for mixed water
|
3235
3355
|
# heaters. If it finds any it then calls the reset_shw_efficiency method which resets the the shw efficiency and the
|
3236
3356
|
# part load curve. It also renames the shw tank with the following pattern:
|
3237
|
-
#
|
3357
|
+
# {volume}Gal {eff_name} Water Heater - {Capacity}kBtu/hr {efficiency} Therm Eff
|
3238
3358
|
def modify_shw_efficiency(model:, shw_eff: nil)
|
3239
3359
|
return if shw_eff.nil?
|
3240
3360
|
|
@@ -3279,7 +3399,7 @@ class ECMS
|
|
3279
3399
|
# This method sets the efficiency of the shw heater to whatever is entered in eff["efficiency"]. It then looks for the
|
3280
3400
|
# "part_load_curve" value in the curves.json file. If it does not find one it returns an error. If it finds one it
|
3281
3401
|
# resets the part load curve to whatever was found. It then renames the shw tank according to the following pattern:
|
3282
|
-
#
|
3402
|
+
# {volume}Gal {eff_name} Water Heater - {Capacity}kBtu/hr {efficiency} Therm Eff
|
3283
3403
|
def reset_shw_efficiency(model:, component:, eff:)
|
3284
3404
|
return if component.heaterFuelType.to_s.upcase == 'ELECTRICITY'
|
3285
3405
|
|
@@ -90,7 +90,7 @@ class ECMS
|
|
90
90
|
# Method for calculating footprint of the building model
|
91
91
|
def calculate_building_footprint(model:)
|
92
92
|
building_footprint_m2_array = []
|
93
|
-
lowest_floor = 10000000000.0 # dummy number as initialization to find the lowest floor among spaces #
|
93
|
+
lowest_floor = 10000000000.0 # dummy number as initialization to find the lowest floor among spaces # @todo Question:it it fine that it has been assumed that the floor of all lowest spaces are at the same level?
|
94
94
|
model.getSpaces.sort.each do |space|
|
95
95
|
space.surfaces.sort.select { |surface| (surface.surfaceType == 'Floor') && (surface.outsideBoundaryCondition != 'Surface') && (surface.outsideBoundaryCondition != 'Adiabatic') }.each do |surface|
|
96
96
|
floor_vertices = surface.vertices
|
@@ -4,7 +4,7 @@ class NECB2011
|
|
4
4
|
# e.g. (Prototype.secondary_school.rb) file.
|
5
5
|
#
|
6
6
|
# @param (see #add_constructions)
|
7
|
-
# @return [
|
7
|
+
# @return [Boolean] returns true if successful, false if not
|
8
8
|
def model_create_thermal_zones(model, space_multiplier_map = nil)
|
9
9
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Started creating thermal zones')
|
10
10
|
space_multiplier_map = {} if space_multiplier_map.nil?
|
@@ -193,8 +193,14 @@ class NECB2011
|
|
193
193
|
@stored_space_cooling_sizing_loads = {}
|
194
194
|
model.getSpaces.sort.each do |space|
|
195
195
|
space_type = space.spaceType.get.standardsSpaceType.get
|
196
|
-
|
197
|
-
|
196
|
+
|
197
|
+
# error if zone design load methods are not available
|
198
|
+
if space.model.version < OpenStudio::VersionString.new('3.6.0')
|
199
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.autozone', "Required ThermalZone methods .autosizedHeatingDesignLoad and .autosizedCoolingDesignLoad are not available in pre-OpenStudio 3.6.0 versions. Use a more recent version of OpenStudio.")
|
200
|
+
end
|
201
|
+
|
202
|
+
@stored_space_heating_sizing_loads[space] = space_type == '- undefined -' ? 0.0 : space.thermalZone.get.autosizedHeatingDesignLoad.get / space.floorArea
|
203
|
+
@stored_space_cooling_sizing_loads[space] = space_type == '- undefined -' ? 0.0 : space.thermalZone.get.autosizedCoolingDesignLoad.get / space.floorArea
|
198
204
|
end
|
199
205
|
end
|
200
206
|
|
@@ -795,7 +801,7 @@ class NECB2011
|
|
795
801
|
end
|
796
802
|
|
797
803
|
# This model determines the dominant NECB schedule type
|
798
|
-
# @param model [OpenStudio::
|
804
|
+
# @param model [OpenStudio::Model::Model] A model object
|
799
805
|
# return s.each [String]
|
800
806
|
def determine_dominant_necb_schedule_type(model)
|
801
807
|
return determine_dominant_schedule(model.getSpaces)
|