openstudio-standards 0.2.14 → 0.2.15.pre.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/geometry/ASHRAECollege.json +0 -19
- data/data/geometry/ASHRAEMidriseApartment.json +47 -47
- data/data/geometry/ASHRAESecondarySchool.osm +2 -2
- data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
- data/data/standards/export_OpenStudio_libraries.rb +1 -1
- data/data/standards/manage_OpenStudio_Standards.rb +43 -87
- data/data/standards/metadata_units_OpenStudio_Standards-ashrae_90_1.csv +9 -0
- data/data/standards/openstudio_standards_duplicates_log.csv +142 -27
- data/data/standards/test_performance_expected_dd_results.csv +2016 -2016
- data/data/weather/CAN_NU_Iqaluit.AP.719090_CWEC2016.ddy +2316 -0
- data/data/weather/CAN_NU_Iqaluit.AP.719090_CWEC2016.epw +8768 -0
- data/data/weather/CAN_NU_Iqaluit.AP.719090_CWEC2016.stat +697 -0
- data/lib/openstudio-standards/btap/WeatherData1.json +54 -0
- data/lib/openstudio-standards/btap/WeatherData1.xlsx +0 -0
- data/lib/openstudio-standards/btap/btap_result.rb +12 -10
- data/lib/openstudio-standards/btap/envelope.rb +2 -2
- data/lib/openstudio-standards/btap/geometry.rb +96 -49
- data/lib/openstudio-standards/{utilities → btap/utilities}/Add_template_field_to_json.rb +0 -0
- data/lib/openstudio-standards/{utilities → btap/utilities}/convert_surfaces_to_adiabatic_necb_8426.rb +0 -0
- data/lib/openstudio-standards/{utilities → btap/utilities}/generate_space_types.rb +0 -0
- data/lib/openstudio-standards/{utilities → btap/utilities}/necb_to_epw_map.rb +0 -0
- data/lib/openstudio-standards/{utilities → btap/utilities}/os_sim_extract.rb +0 -0
- data/lib/openstudio-standards/{utilities → btap/utilities}/rename_surfaces.rb +0 -0
- data/lib/openstudio-standards/{utilities → btap/utilities}/round_surf_coords.rb +0 -0
- data/lib/openstudio-standards/{utilities → btap/utilities}/sched_create.rb +0 -0
- data/lib/openstudio-standards/{utilities → btap/utilities}/set_mult_to_adiabatic.rb +0 -0
- data/lib/openstudio-standards/btap/utilities/space_type.rb +78 -0
- data/lib/openstudio-standards/{utilities → btap/utilities}/weatherData1_xlsx_to_json.rb +0 -0
- data/lib/openstudio-standards/hvac_sizing/Siz.AirConditionerVariableRefrigerantFlow.rb +1 -1
- data/lib/openstudio-standards/hvac_sizing/Siz.HVACComponent.rb +1 -1
- data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +20 -6
- data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +6 -6
- data/lib/openstudio-standards/hvac_sizing/Siz.WaterHeaterMixed.rb +2 -2
- data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACTerminalUnitVariableRefrigerantFlow.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PumpVariableSpeed.rb +6 -7
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanConstantVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanOnOff.rb +5 -5
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanVariableVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.PumpVariableSpeed.rb +6 -7
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanConstantVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanOnOff.rb +5 -5
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanVariableVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Model.elevators.rb +6 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Model.rb +10 -9
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.PumpVariableSpeed.rb +9 -11
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanConstantVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanOnOff.rb +5 -5
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanVariableVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.elevators.rb +11 -7
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.rb +17 -16
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.PumpVariableSpeed.rb +9 -11
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.hvac_systems.rb +4 -2
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanConstantVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanOnOff.rb +5 -5
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanVariableVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.elevators.rb +11 -7
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +23 -22
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PumpVariableSpeed.rb +9 -10
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.hvac_systems.rb +4 -2
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanConstantVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanOnOff.rb +5 -5
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanVariableVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.elevators.rb +11 -7
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +23 -22
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Pump.rb +89 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PumpVariableSpeed.rb +9 -10
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +76 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.hvac_systems.rb +22 -2
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.elevators.rb +11 -11
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.refrigeration.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.CoilHeatingGas.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.elevators.rb +11 -11
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.refrigeration.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.FanConstantVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.FanOnOff.rb +5 -5
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.FanVariableVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.HeatExchangerAirToAirSensibleAndLatent.rb +2 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.elevators.rb +11 -7
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.rb +10 -10
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.hvac_systems.rb +4 -2
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanConstantVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanOnOff.rb +5 -5
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanVariableVolume.rb +5 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerAirToAirSensibleAndLatent.rb +2 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.elevators.rb +11 -7
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +10 -10
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.hvac_systems.rb +4 -2
- data/lib/openstudio-standards/prototypes/cbes/cbes.Model.elevators.rb +3 -6
- data/lib/openstudio-standards/prototypes/cbes/cbes.refrigeration.rb +5 -4
- data/lib/openstudio-standards/prototypes/cbes/cbes_t24_2008/cbes_t24_2008.FanConstantVolume.rb +5 -3
- data/lib/openstudio-standards/prototypes/cbes/cbes_t24_2008/cbes_t24_2008.FanOnOff.rb +5 -4
- data/lib/openstudio-standards/prototypes/cbes/cbes_t24_2008/cbes_t24_2008.FanVariableVolume.rb +5 -3
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.College.rb +65 -30
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Courthouse.rb +54 -23
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.FullServiceRestaurant.rb +135 -147
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.HighRiseApartment.rb +42 -7
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +85 -12
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb +42 -30
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterHighITE.rb +39 -8
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterLowITE.rb +39 -8
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +60 -12
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +33 -265
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOfficeDetailed.rb +41 -3
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +69 -297
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOfficeDetailed.rb +68 -25
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MidriseApartment.rb +88 -59
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +88 -9
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +48 -10
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.QuickServiceRestaurant.rb +130 -145
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStandalone.rb +29 -101
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStripmall.rb +24 -7
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +48 -589
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterHighITE.rb +38 -7
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterLowITE.rb +38 -8
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallHotel.rb +40 -7
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOffice.rb +85 -171
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOfficeDetailed.rb +87 -44
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperMarket.rb +46 -5
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperTallBuilding.rb +105 -17
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.TallBuilding.rb +97 -15
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Warehouse.rb +26 -167
- data/lib/openstudio-standards/prototypes/common/do_not_edit_metaclasses.rb +3828 -1131
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +3 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +2 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.BoilerHotWater.rb +2 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +2 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXSingleSpeed.rb +4 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +3 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWater.rb +4 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +3 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +9 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingElectric.rb +3 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingGas.rb +9 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWater.rb +4 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +3 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.ControllerWaterCoil.rb +2 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoolingTower.rb +4 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +23 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanConstantVolume.rb +29 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanOnOff.rb +29 -5
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanVariableVolume.rb +43 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanZoneExhaust.rb +22 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +46 -3
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.elevators.rb +27 -22
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +15 -8
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +22 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +429 -59
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.swh.rb +18 -11
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.transformers.rb +11 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Pump.rb +1 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.PumpVariableSpeed.rb +8 -10
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +37 -28
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.SizingSystem.rb +24 -6
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +251 -65
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +46 -31
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +62 -10
- data/lib/openstudio-standards/prototypes/common/prototype_metaprogramming.rb +76 -33
- data/lib/openstudio-standards/prototypes/deer/deer.Model.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +445 -275
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +3 -3
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +26 -21
- data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +5 -2
- data/lib/openstudio-standards/standards/Standards.BuildingStory.rb +7 -9
- data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +8 -2
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +10 -6
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +5 -1
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +6 -1
- data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +45 -4
- data/lib/openstudio-standards/standards/Standards.CoilDX.rb +18 -8
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +9 -7
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +8 -4
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +86 -3
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +5 -2
- data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +6 -2
- data/lib/openstudio-standards/standards/Standards.Construction.rb +66 -35
- data/lib/openstudio-standards/standards/Standards.CoolingTower.rb +7 -7
- data/lib/openstudio-standards/standards/Standards.CoolingTowerSingleSpeed.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.CoolingTowerTwoSpeed.rb +2 -1
- data/lib/openstudio-standards/standards/Standards.CoolingTowerVariableSpeed.rb +2 -1
- data/lib/openstudio-standards/standards/Standards.Fan.rb +53 -35
- data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +22 -16
- data/lib/openstudio-standards/standards/Standards.FluidCooler.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +4 -4
- data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +77 -19
- data/lib/openstudio-standards/standards/Standards.Model.rb +387 -245
- data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +13 -15
- data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +94 -48
- data/lib/openstudio-standards/standards/Standards.Pump.rb +28 -20
- data/lib/openstudio-standards/standards/Standards.PumpVariableSpeed.rb +3 -4
- data/lib/openstudio-standards/standards/Standards.ScheduleCompact.rb +2 -1
- data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +2 -0
- data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +34 -24
- data/lib/openstudio-standards/standards/Standards.Space.rb +179 -116
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +23 -12
- data/lib/openstudio-standards/standards/Standards.SubSurface.rb +55 -25
- data/lib/openstudio-standards/standards/Standards.Surface.rb +57 -32
- data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +157 -107
- data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +9 -6
- data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +52 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1.Standards.FanVariableVolume.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirLoopHVAC.rb +28 -18
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PlantLoop.rb +4 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/comstock_ashrae_90_1_2004.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/ashrae_90_1.schedules.json +696 -2938
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.ext_ltg.json +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.spc_typ.json +123 -123
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.furnaces.json +26 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +11 -11
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_system.json +0 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +395 -384
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.unitary_acs.json +69 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirLoopHVAC.rb +20 -13
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.Model.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/comstock_ashrae_90_1_2007.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/ashrae_90_1.schedules.json +696 -2938
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.ext_ltg.json +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.spc_typ.json +122 -122
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.furnaces.json +26 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +11 -11
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_system.json +0 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +413 -401
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.unitary_acs.json +69 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirLoopHVAC.rb +42 -53
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +3 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.CoolingTower.rb +5 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanVariableVolume.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Space.rb +6 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/comstock_ashrae_90_1_2010.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/ashrae_90_1.schedules.json +696 -2938
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.ext_ltg.json +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.spc_typ.json +129 -129
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.energy_recovery.json +210 -42
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.furnaces.json +26 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +11 -11
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_system.json +0 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +460 -320
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.unitary_acs.json +69 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC.rb +45 -51
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +3 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.CoolingTower.rb +5 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.CoolingTowerVariableSpeed.rb +2 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanVariableVolume.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Space.rb +8 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.ThermalZone.rb +2 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.WaterHeaterMixed.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.ZoneHVACComponent.rb +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/comstock_ashrae_90_1_2013.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/ashrae_90_1.schedules.json +696 -2938
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.ext_ltg.json +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.spc_typ.json +121 -121
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +420 -84
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.furnaces.json +26 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +12 -12
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_system.json +0 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +475 -335
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.unitary_acs.json +69 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirLoopHVAC.rb +40 -50
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +3 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTower.rb +5 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTowerVariableSpeed.rb +2 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanVariableVolume.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Space.rb +8 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.ThermalZone.rb +2 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.ZoneHVACComponent.rb +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/comstock_ashrae_90_1_2016.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/ashrae_90_1.schedules.json +696 -2938
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.ext_ltg.json +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.spc_typ.json +152 -128
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.energy_recovery.json +488 -84
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.furnaces.json +26 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +47 -47
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.unitary_acs.json +69 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +342 -56
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +3 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTower.rb +5 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTowerVariableSpeed.rb +2 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanVariableVolume.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +25 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ThermalZone.rb +2 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ZoneHVACComponent.rb +30 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/comstock_ashrae_90_1_2019.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/ashrae_90_1.schedules.json +696 -2938
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.ext_ltg.json +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.spc_typ.json +151 -127
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.boilers.json +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.energy_recovery.json +2307 -101
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.furnaces.json +26 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_compressors.json +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +47 -47
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.unitary_acs.json +69 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +25 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +286 -224
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/comstock_doe_ref_1980_2004.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/ashrae_90_1.schedules.json +696 -2938
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.ext_ltg.json +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.spc_typ.json +126 -126
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.furnaces.json +26 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.prototype_inputs.json +11 -11
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.refrigeration_system.json +0 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +405 -393
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirLoopHVAC.rb +15 -11
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.PlantLoop.rb +3 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/comstock_doe_ref_pre_1980.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/ashrae_90_1.schedules.json +696 -2938
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/comstock_doe_ref_pre_1980.spc_typ.json +121 -121
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.furnaces.json +37 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.prototype_inputs.json +11 -11
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.refrigeration_system.json +0 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +403 -391
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirLoopHVAC.rb +15 -11
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.PlantLoop.rb +3 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.furnaces.json +15 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +64 -42
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +3 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.CoolingTower.rb +5 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.CoolingTowerVariableSpeed.rb +2 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.FanVariableVolume.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.HeatExchangerSensLat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Model.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +4 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Space.rb +5 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.ZoneHVACComponent.rb +3 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.rb +4 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.furnaces.json +15 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirLoopHVAC.rb +61 -36
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +3 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTower.rb +5 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerVariableSpeed.rb +2 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanVariableVolume.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerSensLat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +4 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Space.rb +6 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.ZoneHVACComponent.rb +3 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.rb +4 -0
- data/lib/openstudio-standards/standards/cbes/cbes.AirLoopHVAC.rb +20 -14
- data/lib/openstudio-standards/standards/cbes/cbes.PlantLoop.rb +3 -0
- data/lib/openstudio-standards/standards/cbes/cbes.rb +4 -0
- data/lib/openstudio-standards/standards/cbes/cbes_pre_1978/cbes_pre_1978.rb +4 -0
- data/lib/openstudio-standards/standards/cbes/cbes_t24_1978/cbes_t24_1978.rb +4 -0
- data/lib/openstudio-standards/standards/cbes/cbes_t24_1992/cbes_t24_1992.rb +4 -0
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2001/cbes_t24_2001.rb +4 -0
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2005/cbes_t24_2005.rb +4 -0
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2008/cbes_t24_2008.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer.AirLoopHVAC.rb +10 -5
- data/lib/openstudio-standards/standards/deer/deer.PlanarSurface.rb +1 -1
- data/lib/openstudio-standards/standards/deer/deer.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_1985/comstock_deer_1985/comstock_deer_1985.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_1985/comstock_deer_1985/data/comstock_deer_1985.ext_ltg.json +2 -2
- data/lib/openstudio-standards/standards/deer/deer_1985/deer_1985.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_1996/comstock_deer_1996/comstock_deer_1996.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_1996/comstock_deer_1996/data/comstock_deer_1996.ext_ltg.json +2 -2
- data/lib/openstudio-standards/standards/deer/deer_1996/deer_1996.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2003/comstock_deer_2003/comstock_deer_2003.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2003/comstock_deer_2003/data/comstock_deer_2003.ext_ltg.json +2 -2
- data/lib/openstudio-standards/standards/deer/deer_2003/deer_2003.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2007/comstock_deer_2007/comstock_deer_2007.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2007/comstock_deer_2007/data/comstock_deer_2007.ext_ltg.json +2 -2
- data/lib/openstudio-standards/standards/deer/deer_2007/deer_2007.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2011/comstock_deer_2011/comstock_deer_2011.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2011/comstock_deer_2011/data/comstock_deer_2011.ext_ltg.json +2 -2
- data/lib/openstudio-standards/standards/deer/deer_2011/deer_2011.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2014/comstock_deer_2014/comstock_deer_2014.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2014/comstock_deer_2014/data/comstock_deer_2014.ext_ltg.json +2 -2
- data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2015/comstock_deer_2015/comstock_deer_2015.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2015/comstock_deer_2015/data/comstock_deer_2015.ext_ltg.json +2 -2
- data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2017/comstock_deer_2017/comstock_deer_2017.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2017/comstock_deer_2017/data/comstock_deer_2017.ext_ltg.json +2 -2
- data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2020/comstock_deer_2020/comstock_deer_2020.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2025/comstock_deer_2025/comstock_deer_2025.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2030/comstock_deer_2030/comstock_deer_2030.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2035/comstock_deer_2035/comstock_deer_2035.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2040/comstock_deer_2040/comstock_deer_2040.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2045/comstock_deer_2045/comstock_deer_2045.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2050/comstock_deer_2050/comstock_deer_2050.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2055/comstock_deer_2055/comstock_deer_2055.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2060/comstock_deer_2060/comstock_deer_2060.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2065/comstock_deer_2065/comstock_deer_2065.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2070/comstock_deer_2070/comstock_deer_2070.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2075/comstock_deer_2075/comstock_deer_2075.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.FanVariableVolume.rb +3 -0
- data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.Space.rb +5 -3
- data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_pre_1975/comstock_deer_pre_1975/comstock_deer_pre_1975.rb +4 -0
- data/lib/openstudio-standards/standards/deer/deer_pre_1975/comstock_deer_pre_1975/data/comstock_deer_pre_1975.ext_ltg.json +2 -2
- data/lib/openstudio-standards/standards/deer/deer_pre_1975/deer_pre_1975.rb +4 -0
- data/lib/openstudio-standards/standards/icc_iecc/icc_iecc_2015/icc_iecc_2015.rb +4 -0
- data/lib/openstudio-standards/standards/necb/BTAP1980TO2010/btap_1980to2010.rb +6 -28
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +25 -110
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/building_envelope.rb +45 -60
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +19 -23
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +84 -83
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +52 -47
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_systems.rb +43 -40
- data/lib/openstudio-standards/standards/necb/ECMS/data/boiler_set.json +18 -0
- data/lib/openstudio-standards/standards/necb/ECMS/data/chiller_set.json +211 -0
- data/lib/openstudio-standards/standards/necb/ECMS/data/curves.json +1195 -20
- data/lib/openstudio-standards/standards/necb/ECMS/data/furnace_set.json +18 -0
- data/lib/openstudio-standards/standards/necb/ECMS/data/heat_pumps.json +244 -182
- data/lib/openstudio-standards/standards/necb/ECMS/data/heat_pumps_heating.json +232 -185
- data/lib/openstudio-standards/standards/necb/ECMS/data/shw_set.json +20 -2
- data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +18 -25
- data/lib/openstudio-standards/standards/necb/ECMS/erv.rb +12 -13
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +1647 -466
- data/lib/openstudio-standards/standards/necb/ECMS/loads.rb +93 -0
- data/lib/openstudio-standards/standards/necb/ECMS/nv.rb +40 -47
- data/lib/openstudio-standards/standards/necb/ECMS/pv_ground.rb +26 -25
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +303 -305
- data/lib/openstudio-standards/standards/necb/NECB2011/beps_compliance_path.rb +45 -45
- data/lib/openstudio-standards/standards/necb/NECB2011/building_envelope.rb +90 -120
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/Hospital.osm +1176 -1115
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LowriseApartment.osm +8279 -28923
- data/lib/openstudio-standards/standards/necb/NECB2011/data/space_types.json +1173 -1173
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +15 -13
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +32 -29
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +25 -26
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +14 -14
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +24 -29
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +85 -84
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +41 -42
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +209 -197
- data/lib/openstudio-standards/standards/necb/NECB2011/lighting.rb +87 -82
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +510 -406
- data/lib/openstudio-standards/standards/necb/NECB2011/nv.md +3 -3
- data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +686 -683
- data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +129 -82
- data/lib/openstudio-standards/standards/necb/NECB2015/data/space_types.json +1608 -1608
- data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +25 -18
- data/lib/openstudio-standards/standards/necb/NECB2015/lighting.rb +73 -67
- data/lib/openstudio-standards/standards/necb/NECB2015/necb_2015.rb +18 -22
- data/lib/openstudio-standards/standards/necb/NECB2015/qaqc/necb_2015_qaqc.rb +59 -63
- data/lib/openstudio-standards/standards/necb/NECB2017/data/space_types.json +1608 -1608
- data/lib/openstudio-standards/standards/necb/NECB2017/hvac_systems.rb +1 -4
- data/lib/openstudio-standards/standards/necb/NECB2017/necb_2017.rb +10 -14
- data/lib/openstudio-standards/standards/necb/NECB2020/building_envelope.rb +779 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/boilers.json +122 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/chillers.json +335 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/constants.json +13 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/furnaces.json +41 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps.json +452 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps_heating.json +164 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_rejection.json +228 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/led_lighting_data.json +2883 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/space_types.json +25851 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/surface_thermal_transmittance.json +60 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/data/unitary_acs.json +585 -0
- data/lib/openstudio-standards/standards/necb/NECB2020/necb_2020.rb +175 -0
- data/lib/openstudio-standards/standards/necb/common/bc_step_code_indicators.md +10 -0
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +1963 -0
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +410 -0
- data/lib/openstudio-standards/standards/necb/common/neb_end_use_prices.csv +42 -0
- data/lib/openstudio-standards/standards/necb/common/necb_reference_runs.csv +28705 -0
- data/lib/openstudio-standards/standards/necb/common/phius.md +23 -0
- data/lib/openstudio-standards/standards/necb/common/space_type_upgrade_map.json +1158 -386
- data/lib/openstudio-standards/standards/oeesc/oeesc_2014/oeesc_2014.rb +4 -0
- data/lib/openstudio-standards/standards/standard.rb +2 -1
- data/lib/openstudio-standards/utilities/define_thermal_zone_and_mulitpliers.rb +1 -1
- data/lib/openstudio-standards/utilities/logging.rb +6 -0
- data/lib/openstudio-standards/utilities/simulation.rb +30 -14
- data/lib/openstudio-standards/utilities/{speacetype_map_converter.rb → spacetype_map_converter.rb} +0 -0
- data/lib/openstudio-standards/utilities/sqlfile.rb +112 -71
- data/lib/openstudio-standards/version.rb +2 -2
- data/lib/openstudio-standards/weather/Weather.Model.rb +209 -9
- data/lib/openstudio-standards/weather/Weather.stat_file.rb +1 -1
- data/lib/openstudio-standards.rb +9 -0
- metadata +106 -205
- data/data/standards/OpenStudio_Standards-ashrae_90_1-ALL-comstock(space_types).xlsx +0 -0
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.boilers.json +0 -49
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.chillers.json +0 -293
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +0 -25426
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_sets.json +0 -1600
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.economizers.json +0 -564
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.elevators.json +0 -349
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ext_ltg.json +0 -164
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ground_temperatures.json +0 -10663
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps.json +0 -508
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps_heating.json +0 -156
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_rejection.json +0 -44
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.motors.json +0 -184
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +0 -3094
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ref_cases.json +0 -829
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ref_lnup.json +0 -562
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_compressors.json +0 -52
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_condenser.json +0 -220
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_system.json +0 -156
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_walkins.json +0 -1316
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +0 -21446
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.unitary_acs.json +0 -554
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_heaters.json +0 -68
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_source_heat_pumps.json +0 -28
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_source_heat_pumps_heating.json +0 -12
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.boilers.json +0 -49
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.chillers.json +0 -293
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +0 -12487
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_sets.json +0 -1600
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.economizers.json +0 -564
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.elevators.json +0 -349
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ext_ltg.json +0 -164
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ground_temperatures.json +0 -10663
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps.json +0 -466
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps_heating.json +0 -137
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_rejection.json +0 -44
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.motors.json +0 -184
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +0 -3094
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ref_cases.json +0 -829
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ref_lnup.json +0 -562
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_compressors.json +0 -52
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_condenser.json +0 -220
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_system.json +0 -156
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_walkins.json +0 -1316
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +0 -21380
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.unitary_acs.json +0 -554
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_heaters.json +0 -68
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_source_heat_pumps.json +0 -28
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_source_heat_pumps_heating.json +0 -12
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.boilers.json +0 -49
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.chillers.json +0 -395
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +0 -12487
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_sets.json +0 -1600
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.economizers.json +0 -592
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.elevators.json +0 -349
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.energy_recovery.json +0 -550
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ext_ltg.json +0 -164
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ground_temperatures.json +0 -10663
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps.json +0 -466
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps_heating.json +0 -137
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_rejection.json +0 -44
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.motors.json +0 -238
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +0 -3094
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ref_cases.json +0 -829
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ref_lnup.json +0 -562
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_compressors.json +0 -52
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_condenser.json +0 -220
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_system.json +0 -156
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_walkins.json +0 -1316
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +0 -21548
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.unitary_acs.json +0 -554
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_heaters.json +0 -68
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_source_heat_pumps.json +0 -28
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_source_heat_pumps_heating.json +0 -12
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.boilers.json +0 -64
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.chillers.json +0 -871
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +0 -12487
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_sets.json +0 -1600
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.economizers.json +0 -592
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.elevators.json +0 -349
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +0 -1096
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ext_ltg.json +0 -164
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ground_temperatures.json +0 -10663
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps.json +0 -886
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps_heating.json +0 -194
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_rejection.json +0 -44
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.motors.json +0 -247
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +0 -3094
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ref_cases.json +0 -829
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ref_lnup.json +0 -562
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_compressors.json +0 -52
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_condenser.json +0 -220
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_system.json +0 -156
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_walkins.json +0 -1316
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +0 -22079
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.unitary_acs.json +0 -994
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_heaters.json +0 -68
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_source_heat_pumps.json +0 -28
- data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_source_heat_pumps_heating.json +0 -12
- data/lib/openstudio-standards/utilities/convert_costing_constructions.rb +0 -105
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
class NECB2011
|
|
2
|
-
|
|
3
2
|
# Creates thermal zones to contain each space, as defined for each building in the
|
|
4
3
|
# system_to_space_map inside the Prototype.building_name
|
|
5
4
|
# e.g. (Prototype.secondary_school.rb) file.
|
|
@@ -63,7 +62,6 @@ class NECB2011
|
|
|
63
62
|
@standards_data['space_types'] = Standard.build(template).standards_data['space_types']
|
|
64
63
|
end
|
|
65
64
|
|
|
66
|
-
|
|
67
65
|
# The first thing we need to do is get a sizing run to determine the heating loads of all the spaces. The default
|
|
68
66
|
# btap geometry has a one to one relationship of zones to spaces.. So we simply create the thermal zones for all the spaces.
|
|
69
67
|
# to do this we need to create thermals zone for each space.
|
|
@@ -78,25 +76,26 @@ class NECB2011
|
|
|
78
76
|
end
|
|
79
77
|
|
|
80
78
|
# collect sizing information on each space.
|
|
81
|
-
|
|
79
|
+
store_space_sizing_loads(model)
|
|
82
80
|
# Remove any Thermal zones assigned again to start fresh.
|
|
83
81
|
model.getThermalZones.each(&:remove)
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
#
|
|
82
|
+
auto_zone_dwelling_units(model)
|
|
83
|
+
auto_zone_wet_spaces(model: model, lights_type: lights_type, lights_scale: lights_scale)
|
|
84
|
+
auto_zone_all_other_spaces(model)
|
|
85
|
+
auto_zone_wild_spaces(model: model, lights_type: lights_type, lights_scale: lights_scale)
|
|
86
|
+
# This will color the spaces and zones.
|
|
89
87
|
random = Random.new(1234)
|
|
90
|
-
#Set ideal hvac in case we want to not implement the hvac yet and still run osm right after this function.
|
|
91
|
-
#model.getThermalZones.each { |zone| zone.setUseIdealAirLoads(true) }
|
|
92
|
-
model.getThermalZones.sort.each {|item| item.setRenderingColor(
|
|
93
|
-
model.getSpaceTypes.sort.each {|item| item.setRenderingColor(
|
|
88
|
+
# Set ideal hvac in case we want to not implement the hvac yet and still run osm right after this function.
|
|
89
|
+
# model.getThermalZones.each { |zone| zone.setUseIdealAirLoads(true) }
|
|
90
|
+
model.getThermalZones.sort.each { |item| item.setRenderingColor(set_random_rendering_color(item, random)) }
|
|
91
|
+
model.getSpaceTypes.sort.each { |item| item.setRenderingColor(set_random_rendering_color(item, random)) }
|
|
94
92
|
end
|
|
95
93
|
|
|
96
94
|
# Organizes Zones and assigns them to appropriate systems according to NECB 2011-17 systems spacetype rules in Sec 8.
|
|
97
95
|
# requires requires fuel type to be assigned for each system aspect. Defaults to gas hydronic.
|
|
98
96
|
def apply_systems(model:, primary_heating_fuel:, sizing_run_dir:)
|
|
99
97
|
raise('validation of model failed.') unless validate_initial_model(model)
|
|
98
|
+
|
|
100
99
|
# Check to see if model is using another vintage of spacetypes. If so overwrite the @standards for the object with the
|
|
101
100
|
# other spacetype data. This is required for correct system mapping.
|
|
102
101
|
template = determine_spacetype_vintage(model)
|
|
@@ -106,23 +105,22 @@ class NECB2011
|
|
|
106
105
|
end
|
|
107
106
|
|
|
108
107
|
# do a sizing run.
|
|
109
|
-
if model_run_sizing_run(model, "#{sizing_run_dir}/
|
|
108
|
+
if model_run_sizing_run(model, "#{sizing_run_dir}/autozone_systems") == false
|
|
110
109
|
raise('autorun sizing run failed!')
|
|
111
110
|
end
|
|
112
111
|
|
|
113
112
|
# collect sizing information on each space.
|
|
114
|
-
|
|
113
|
+
store_space_sizing_loads(model)
|
|
115
114
|
|
|
116
115
|
# Set the primary fuel set to default to to specific fuel type.
|
|
117
116
|
if primary_heating_fuel == 'DefaultFuel'
|
|
118
117
|
epw = BTAP::Environment::WeatherFile.new(model.weatherFile.get.path.get)
|
|
119
|
-
primary_heating_fuel = @standards_data['regional_fuel_use'].detect {|fuel_sources| fuel_sources['state_province_regions'].include?(epw.state_province_region)}['fueltype_set']
|
|
118
|
+
primary_heating_fuel = @standards_data['regional_fuel_use'].detect { |fuel_sources| fuel_sources['state_province_regions'].include?(epw.state_province_region) }['fueltype_set']
|
|
120
119
|
end
|
|
121
120
|
# Get fuelset.
|
|
122
|
-
system_fuel_defaults = @standards_data['fuel_type_sets'].detect {|fuel_type_set| fuel_type_set['name'] == primary_heating_fuel}
|
|
121
|
+
system_fuel_defaults = @standards_data['fuel_type_sets'].detect { |fuel_type_set| fuel_type_set['name'] == primary_heating_fuel }
|
|
123
122
|
raise("fuel_type_sets named #{primary_heating_fuel} not found in fuel_type_sets table.") if system_fuel_defaults.nil?
|
|
124
123
|
|
|
125
|
-
|
|
126
124
|
# Assign fuel sources.
|
|
127
125
|
boiler_fueltype = system_fuel_defaults['boiler_fueltype']
|
|
128
126
|
baseboard_type = system_fuel_defaults['baseboard_type']
|
|
@@ -135,13 +133,13 @@ class NECB2011
|
|
|
135
133
|
heating_coil_type_sys6 = system_fuel_defaults['heating_coil_type_sys6']
|
|
136
134
|
fan_type = system_fuel_defaults['fan_type']
|
|
137
135
|
|
|
138
|
-
#remove idealair from zones if any.
|
|
136
|
+
# remove idealair from zones if any.
|
|
139
137
|
model.getZoneHVACIdealLoadsAirSystems.each(&:remove)
|
|
140
138
|
@hw_loop = create_hw_loop_if_required(baseboard_type,
|
|
141
139
|
boiler_fueltype,
|
|
142
140
|
mau_heating_coil_type,
|
|
143
141
|
model)
|
|
144
|
-
#Rule that all dwelling units have their own zone and system.
|
|
142
|
+
# Rule that all dwelling units have their own zone and system.
|
|
145
143
|
auto_system_dwelling_units(model: model,
|
|
146
144
|
baseboard_type: baseboard_type,
|
|
147
145
|
boiler_fueltype: boiler_fueltype,
|
|
@@ -153,24 +151,21 @@ class NECB2011
|
|
|
153
151
|
heating_coil_type_sys6: heating_coil_type_sys6,
|
|
154
152
|
mau_cooling_type: mau_cooling_type,
|
|
155
153
|
mau_heating_coil_type: mau_heating_coil_type,
|
|
156
|
-
mau_type: mau_type
|
|
157
|
-
)
|
|
154
|
+
mau_type: mau_type)
|
|
158
155
|
|
|
159
|
-
#Assign a single system 4 for all wet spaces.. and assign the control zone to the one with the largest load.
|
|
156
|
+
# Assign a single system 4 for all wet spaces.. and assign the control zone to the one with the largest load.
|
|
160
157
|
auto_system_wet_spaces(baseboard_type: baseboard_type,
|
|
161
158
|
boiler_fueltype: boiler_fueltype,
|
|
162
159
|
heating_coil_type_sys4: heating_coil_type_sys4,
|
|
163
160
|
model: model)
|
|
164
161
|
|
|
165
|
-
|
|
166
|
-
#Assign a single system 4 for all storage spaces.. and assign the control zone to the one with the largest load.
|
|
162
|
+
# Assign a single system 4 for all storage spaces.. and assign the control zone to the one with the largest load.
|
|
167
163
|
auto_system_storage_spaces(baseboard_type: baseboard_type,
|
|
168
164
|
boiler_fueltype: boiler_fueltype,
|
|
169
165
|
heating_coil_type_sys4: heating_coil_type_sys4,
|
|
170
166
|
model: model)
|
|
171
167
|
|
|
172
|
-
|
|
173
|
-
#Assign the wild spaces to a single system 4 system with a control zone with the largest load.
|
|
168
|
+
# Assign the wild spaces to a single system 4 system with a control zone with the largest load.
|
|
174
169
|
auto_system_wild_spaces(baseboard_type: baseboard_type,
|
|
175
170
|
heating_coil_type_sys4: heating_coil_type_sys4,
|
|
176
171
|
model: model)
|
|
@@ -186,14 +181,12 @@ class NECB2011
|
|
|
186
181
|
heating_coil_type_sys6: heating_coil_type_sys6,
|
|
187
182
|
mau_cooling_type: mau_cooling_type,
|
|
188
183
|
mau_heating_coil_type: mau_heating_coil_type,
|
|
189
|
-
mau_type: mau_type
|
|
190
|
-
)
|
|
184
|
+
mau_type: mau_type)
|
|
191
185
|
model_add_swh(model: model, swh_fueltype: system_fuel_defaults['swh_fueltype'])
|
|
192
186
|
model_apply_sizing_parameters(model)
|
|
193
187
|
# set a larger tolerance for unmet hours from default 0.2 to 1.0C
|
|
194
188
|
model.getOutputControlReportingTolerances.setToleranceforTimeHeatingSetpointNotMet(1.0)
|
|
195
189
|
model.getOutputControlReportingTolerances.setToleranceforTimeCoolingSetpointNotMet(1.0)
|
|
196
|
-
|
|
197
190
|
end
|
|
198
191
|
|
|
199
192
|
# Method to store space sizing loads. This is needed because later when the zones are destroyed this information will be lost.
|
|
@@ -201,7 +194,6 @@ class NECB2011
|
|
|
201
194
|
@stored_space_heating_sizing_loads = {}
|
|
202
195
|
@stored_space_cooling_sizing_loads = {}
|
|
203
196
|
model.getSpaces.sort.each do |space|
|
|
204
|
-
|
|
205
197
|
space_type = space.spaceType.get.standardsSpaceType.get
|
|
206
198
|
@stored_space_heating_sizing_loads[space] = space_type == '- undefined -' ? 0.0 : space.thermalZone.get.heatingDesignLoad.get
|
|
207
199
|
@stored_space_cooling_sizing_loads[space] = space_type == '- undefined -' ? 0.0 : space.thermalZone.get.coolingDesignLoad.get
|
|
@@ -212,9 +204,10 @@ class NECB2011
|
|
|
212
204
|
def stored_space_heating_load(space)
|
|
213
205
|
if @stored_space_heating_sizing_loads.nil?
|
|
214
206
|
# do a sizing run.
|
|
215
|
-
raise(
|
|
216
|
-
|
|
217
|
-
|
|
207
|
+
raise('autorun sizing run failed!') if model_run_sizing_run(space.model, "#{Dir.pwd}/autozone") == false
|
|
208
|
+
|
|
209
|
+
# collect sizing information on each space.
|
|
210
|
+
store_space_sizing_loads(space.model)
|
|
218
211
|
end
|
|
219
212
|
@stored_space_heating_sizing_loads[space]
|
|
220
213
|
end
|
|
@@ -223,9 +216,10 @@ class NECB2011
|
|
|
223
216
|
def stored_space_cooling_load(space)
|
|
224
217
|
if @stored_space_cooling_sizing_loads.nil?
|
|
225
218
|
# do a sizing run.
|
|
226
|
-
raise(
|
|
227
|
-
|
|
228
|
-
|
|
219
|
+
raise('autorun sizing run failed!') if model_run_sizing_run(space.model, "#{Dir.pwd}/autozone") == false
|
|
220
|
+
|
|
221
|
+
# collect sizing information on each space.
|
|
222
|
+
store_space_sizing_loads(space.model)
|
|
229
223
|
end
|
|
230
224
|
@stored_space_cooling_sizing_loads[space]
|
|
231
225
|
end
|
|
@@ -255,9 +249,9 @@ class NECB2011
|
|
|
255
249
|
def auto_zone_dwelling_units(model)
|
|
256
250
|
dwelling_tz_array = []
|
|
257
251
|
# ----Dwelling units----------- will always have their own system per unit, so they should have their own thermal zone.
|
|
258
|
-
model.getSpaces.select {|space| is_a_necb_dwelling_unit?(space)}.each do |space|
|
|
252
|
+
model.getSpaces.select { |space| is_a_necb_dwelling_unit?(space) }.each do |space|
|
|
259
253
|
zone = OpenStudio::Model::ThermalZone.new(model)
|
|
260
|
-
zone.setName("DU_BT=#{space.spaceType.get.standardsBuildingType.get}_ST=#{space.spaceType.get.standardsSpaceType.get}_FL=#{space.buildingStory
|
|
254
|
+
zone.setName("DU_BT=#{space.spaceType.get.standardsBuildingType.get}_ST=#{space.spaceType.get.standardsSpaceType.get}_FL=#{space.buildingStory.get.name}_SCH#{determine_dominant_schedule([space])}")
|
|
261
255
|
unless space_multiplier_map[space.name.to_s].nil? || (space_multiplier_map[space.name.to_s] == 1)
|
|
262
256
|
zone.setMultiplier(space_multiplier_map[space.name.to_s])
|
|
263
257
|
end
|
|
@@ -286,27 +280,28 @@ class NECB2011
|
|
|
286
280
|
# their own single system 4 system. These will be set to the dominant floor schedule.
|
|
287
281
|
|
|
288
282
|
def auto_zone_wet_spaces(model:, lights_type: 'NECB_Default', lights_scale: 1.0)
|
|
289
|
-
wet_zone_array =
|
|
290
|
-
model.getSpaces.select {|space| is_an_necb_wet_space?(space)}.each do |space|
|
|
291
|
-
#if this space was already assigned to something skip it.
|
|
283
|
+
wet_zone_array = []
|
|
284
|
+
model.getSpaces.select { |space| is_an_necb_wet_space?(space) }.each do |space|
|
|
285
|
+
# if this space was already assigned to something skip it.
|
|
292
286
|
next unless space.thermalZone.empty?
|
|
287
|
+
|
|
293
288
|
# get space to dominant schedule
|
|
294
289
|
dominant_schedule = determine_dominant_schedule(space.model.getSpaces)
|
|
295
|
-
#create new TZ and set space to the zone.
|
|
290
|
+
# create new TZ and set space to the zone.
|
|
296
291
|
zone = OpenStudio::Model::ThermalZone.new(model)
|
|
297
292
|
space.setThermalZone(zone)
|
|
298
|
-
tz_name = "WET_ST=#{space.spaceType.get.standardsSpaceType.get}_FL=#{space.buildingStory
|
|
293
|
+
tz_name = "WET_ST=#{space.spaceType.get.standardsSpaceType.get}_FL=#{space.buildingStory.get.name}_SCH#{dominant_schedule}"
|
|
299
294
|
zone.setName(tz_name)
|
|
300
|
-
#Set multiplier from the original tz multiplier.
|
|
295
|
+
# Set multiplier from the original tz multiplier.
|
|
301
296
|
unless space_multiplier_map[space.name.to_s].nil? || (space_multiplier_map[space.name.to_s] == 1)
|
|
302
297
|
zone.setMultiplier(space_multiplier_map[space.name.to_s])
|
|
303
298
|
end
|
|
304
299
|
|
|
305
|
-
#this method will determine if the right schedule was used for this wet & wild space if not.. it will reset the space
|
|
300
|
+
# this method will determine if the right schedule was used for this wet & wild space if not.. it will reset the space
|
|
306
301
|
# to use the correct schedule version of the wet and wild space type.
|
|
307
302
|
adjust_wildcard_spacetype_schedule(space: space, schedule: dominant_schedule, lights_type: lights_type, lights_scale: lights_scale)
|
|
308
303
|
|
|
309
|
-
#Find spacetype thermostat and assign it to the zone.
|
|
304
|
+
# Find spacetype thermostat and assign it to the zone.
|
|
310
305
|
thermostat_name = space.spaceType.get.name.get + ' Thermostat'
|
|
311
306
|
thermostat = model.getThermostatSetpointDualSetpointByName(thermostat_name)
|
|
312
307
|
if thermostat.empty?
|
|
@@ -320,10 +315,10 @@ class NECB2011
|
|
|
320
315
|
ideal_loads.addToThermalZone(zone)
|
|
321
316
|
end
|
|
322
317
|
# Go through other spaces to see if there are similar spaces with similar loads on the same floor that can be grouped.
|
|
323
|
-
model.getSpaces.select {|s| is_an_necb_wet_space?(s)}.each do |space_target|
|
|
318
|
+
model.getSpaces.select { |s| is_an_necb_wet_space?(s) }.each do |space_target|
|
|
324
319
|
if space_target.thermalZone.empty?
|
|
325
|
-
if are_space_loads_similar?(space_1: space, space_2: space_target) && space.buildingStory
|
|
326
|
-
adjust_wildcard_spacetype_schedule(space_target, dominant_schedule, lights_type, lights_scale
|
|
320
|
+
if are_space_loads_similar?(space_1: space, space_2: space_target) && space.buildingStory.get == space_target.buildingStory.get # added since chris needs zones to not span floors for costing.
|
|
321
|
+
adjust_wildcard_spacetype_schedule(space: space_target, schedule: dominant_schedule, lights_type: lights_type, lights_scale: lights_scale)
|
|
327
322
|
space_target.setThermalZone(zone)
|
|
328
323
|
end
|
|
329
324
|
end
|
|
@@ -337,20 +332,21 @@ class NECB2011
|
|
|
337
332
|
# if the spaces are similar based on exposure and load and blend those spaces into the same zone. It will not merge spaces
|
|
338
333
|
# from different floors, since this will impact Chris Kirneys costing algorithms.
|
|
339
334
|
def auto_zone_all_other_spaces(model)
|
|
340
|
-
other_tz_array =
|
|
341
|
-
#iterate through all non wildcard spaces.
|
|
342
|
-
model.getSpaces.select {|space|
|
|
343
|
-
#skip if already assigned to a thermal zone.
|
|
335
|
+
other_tz_array = []
|
|
336
|
+
# iterate through all non wildcard spaces.
|
|
337
|
+
model.getSpaces.select { |space| !is_a_necb_dwelling_unit?(space) && !is_an_necb_wildcard_space?(space) }.each do |space|
|
|
338
|
+
# skip if already assigned to a thermal zone.
|
|
344
339
|
next unless space.thermalZone.empty?
|
|
345
|
-
|
|
340
|
+
|
|
341
|
+
# create new zone for this space based on the space name.
|
|
346
342
|
zone = OpenStudio::Model::ThermalZone.new(model)
|
|
347
|
-
tz_name = "ALL_ST=#{space.spaceType.get.standardsSpaceType.get}_FL=#{space.buildingStory
|
|
343
|
+
tz_name = "ALL_ST=#{space.spaceType.get.standardsSpaceType.get}_FL=#{space.buildingStory.get.name}_SCH=#{determine_dominant_schedule([space])}"
|
|
348
344
|
zone.setName(tz_name)
|
|
349
|
-
#sets space mulitplier unless it is nil or 1.
|
|
345
|
+
# sets space mulitplier unless it is nil or 1.
|
|
350
346
|
unless space_multiplier_map[space.name.to_s].nil? || (space_multiplier_map[space.name.to_s] == 1)
|
|
351
347
|
zone.setMultiplier(space_multiplier_map[space.name.to_s])
|
|
352
348
|
end
|
|
353
|
-
#Assign space to the new zone.
|
|
349
|
+
# Assign space to the new zone.
|
|
354
350
|
space.setThermalZone(zone)
|
|
355
351
|
|
|
356
352
|
# Add a thermostat
|
|
@@ -368,9 +364,9 @@ class NECB2011
|
|
|
368
364
|
ideal_loads.addToThermalZone(zone)
|
|
369
365
|
end
|
|
370
366
|
# Go through other spaces and if you find something with similar loads on the same floor, add it to the zone.
|
|
371
|
-
model.getSpaces.select {|
|
|
367
|
+
model.getSpaces.select { |curr_space| !is_a_necb_dwelling_unit?(curr_space) && !is_an_necb_wildcard_space?(curr_space) }.each do |space_target|
|
|
372
368
|
if space_target.thermalZone.empty?
|
|
373
|
-
if are_space_loads_similar?(space_1: space, space_2: space_target)
|
|
369
|
+
if are_space_loads_similar?(space_1: space, space_2: space_target) && space.buildingStory.get == space_target.buildingStory.get # added since chris needs zones to not span floors for costing.
|
|
374
370
|
space_target.setThermalZone(zone)
|
|
375
371
|
end
|
|
376
372
|
end
|
|
@@ -383,20 +379,21 @@ class NECB2011
|
|
|
383
379
|
# This will take all the wildcard spaces and merge them to be supported by a system 4. The control zone will be the
|
|
384
380
|
# zone that has the largest heating load per area.
|
|
385
381
|
def auto_zone_wild_spaces(model:, lights_type: 'NECB_Default', lights_scale: 1.0)
|
|
386
|
-
other_tz_array =
|
|
387
|
-
#iterate through wildcard spaces.
|
|
388
|
-
model.getSpaces.select {|space| is_an_necb_wildcard_space?(space)
|
|
389
|
-
#skip if already assigned to a thermal zone.
|
|
382
|
+
other_tz_array = []
|
|
383
|
+
# iterate through wildcard spaces.
|
|
384
|
+
model.getSpaces.select { |space| is_an_necb_wildcard_space?(space) && !is_an_necb_wet_space?(space) }.each do |space|
|
|
385
|
+
# skip if already assigned to a thermal zone.
|
|
390
386
|
next unless space.thermalZone.empty?
|
|
391
|
-
|
|
387
|
+
|
|
388
|
+
# create new zone for this space based on the space name.
|
|
392
389
|
zone = OpenStudio::Model::ThermalZone.new(model)
|
|
393
|
-
tz_name = "WILD_ST=#{space.spaceType.get.standardsSpaceType.get}_FL=#{space.buildingStory
|
|
390
|
+
tz_name = "WILD_ST=#{space.spaceType.get.standardsSpaceType.get}_FL=#{space.buildingStory.get.name}_SCH=#{determine_dominant_schedule(space.model.getSpaces)}"
|
|
394
391
|
zone.setName(tz_name)
|
|
395
|
-
#sets space mulitplier unless it is nil or 1.
|
|
392
|
+
# sets space mulitplier unless it is nil or 1.
|
|
396
393
|
unless space_multiplier_map[space.name.to_s].nil? || (space_multiplier_map[space.name.to_s] == 1)
|
|
397
394
|
zone.setMultiplier(space_multiplier_map[space.name.to_s])
|
|
398
395
|
end
|
|
399
|
-
#Assign space to the new zone.
|
|
396
|
+
# Assign space to the new zone.
|
|
400
397
|
space.setThermalZone(zone)
|
|
401
398
|
|
|
402
399
|
# lets keep the wild schedules to be the same as what dominate the floor.
|
|
@@ -422,10 +419,10 @@ class NECB2011
|
|
|
422
419
|
ideal_loads.addToThermalZone(zone)
|
|
423
420
|
end
|
|
424
421
|
# Go through other spaces and if you find something with similar loads on the same floor, add it to the zone.
|
|
425
|
-
model.getSpaces.select {|
|
|
422
|
+
model.getSpaces.select { |curr_space| is_an_necb_wildcard_space?(curr_space) && !is_an_necb_wet_space?(curr_space) }.each do |space_target|
|
|
426
423
|
if space_target.thermalZone.empty?
|
|
427
|
-
if are_space_loads_similar?(space_1: space, space_2: space_target)
|
|
428
|
-
|
|
424
|
+
if are_space_loads_similar?(space_1: space, space_2: space_target) &&
|
|
425
|
+
(space.buildingStory.get == space_target.buildingStory.get) # added since chris needs zones to not span floors for costing.
|
|
429
426
|
space_target.setThermalZone(zone)
|
|
430
427
|
end
|
|
431
428
|
end
|
|
@@ -435,62 +432,63 @@ class NECB2011
|
|
|
435
432
|
return other_tz_array
|
|
436
433
|
|
|
437
434
|
wild_zone_array = []
|
|
438
|
-
#Get a list of all the wild spaces.
|
|
439
|
-
model.getSpaces.select {|space| is_an_necb_wildcard_space?(space)
|
|
440
|
-
#if this space was already assigned to something skip it.
|
|
435
|
+
# Get a list of all the wild spaces.
|
|
436
|
+
model.getSpaces.select { |space| is_an_necb_wildcard_space?(space) && !is_an_necb_wet_space?(space) }.each do |space|
|
|
437
|
+
# if this space was already assigned to something skip it.
|
|
441
438
|
next unless space.thermalZone.empty?
|
|
442
|
-
|
|
439
|
+
|
|
440
|
+
# find adjacent spaces to the current space.
|
|
443
441
|
adj_spaces = space_get_adjacent_spaces_with_shared_wall_areas(space, true)
|
|
444
|
-
adj_spaces = adj_spaces.map {|key, value| key}
|
|
442
|
+
adj_spaces = adj_spaces.map { |key, value| key }
|
|
445
443
|
|
|
446
444
|
# find unassigned adjacent wild spaces that have not been assigned that have the same multiplier these will be
|
|
447
445
|
# lumped together in the same zone.
|
|
448
|
-
wild_adjacent_spaces = adj_spaces.select
|
|
449
|
-
is_an_necb_wildcard_space?(adj_space)
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
#put them all together.
|
|
446
|
+
wild_adjacent_spaces = adj_spaces.select do |adj_space|
|
|
447
|
+
is_an_necb_wildcard_space?(adj_space) &&
|
|
448
|
+
!is_an_necb_wet_space?(adj_space) &&
|
|
449
|
+
adj_space.thermalZone.empty? &&
|
|
450
|
+
(space_multiplier_map[space.name.to_s] == space_multiplier_map[adj_space.name.to_s])
|
|
451
|
+
end
|
|
452
|
+
# put them all together.
|
|
455
453
|
wild_adjacent_spaces << space
|
|
456
454
|
|
|
457
455
|
# Get adjacent candidate foster zones. Must not be a wildcard space and must not be linked to another space incase
|
|
458
456
|
# it is part of a mirrored space.
|
|
459
457
|
other_adjacent_spaces = adj_spaces.select do |adj_space|
|
|
460
|
-
is_an_necb_wildcard_space?(adj_space) == false
|
|
461
|
-
|
|
462
|
-
|
|
458
|
+
(is_an_necb_wildcard_space?(adj_space) == false) &&
|
|
459
|
+
(adj_space.thermalZone.get.spaces.size == 1) &&
|
|
460
|
+
(space_multiplier_map[space.name.to_s] == space_multiplier_map[adj_space.name.to_s])
|
|
463
461
|
end
|
|
464
462
|
|
|
465
|
-
#If there are adjacent spaces that fit the above criteria.
|
|
463
|
+
# If there are adjacent spaces that fit the above criteria.
|
|
466
464
|
# We will need to set each space to the dominant floor schedule by setting the spaces spacetypes to that
|
|
467
465
|
# schedule version and eventually set it to a system 4
|
|
468
466
|
unless other_adjacent_spaces.empty?
|
|
469
|
-
#assign the space(s) to the adjacent thermal zone.
|
|
467
|
+
# assign the space(s) to the adjacent thermal zone.
|
|
470
468
|
schedule_type = determine_dominant_schedule(space.buildingStory.get.spaces)
|
|
471
469
|
zone = other_adjacent_spaces.first.thermalZone.get
|
|
472
|
-
wild_adjacent_spaces.each do |
|
|
473
|
-
adjust_wildcard_spacetype_schedule(
|
|
474
|
-
|
|
470
|
+
wild_adjacent_spaces.each do |curr_space|
|
|
471
|
+
adjust_wildcard_spacetype_schedule(curr_space, schedule_type, @lights_type, @lights_scale, @space_height)
|
|
472
|
+
curr_space.setThermalZone(zone)
|
|
475
473
|
end
|
|
476
474
|
end
|
|
477
475
|
|
|
478
|
-
#create new TZ and set space to the zone.
|
|
476
|
+
# create new TZ and set space to the zone.
|
|
479
477
|
zone = OpenStudio::Model::ThermalZone.new(model)
|
|
480
478
|
space.setThermalZone(zone)
|
|
481
|
-
zone.setName("Wild-ZN:BT=#{space.spaceType.get.standardsBuildingType.get}:ST=#{space.spaceType.get.standardsSpaceType.get}:FL=#{space.buildingStory
|
|
482
|
-
#Set multiplier from the original tz multiplier.
|
|
479
|
+
zone.setName("Wild-ZN:BT=#{space.spaceType.get.standardsBuildingType.get}:ST=#{space.spaceType.get.standardsSpaceType.get}:FL=#{space.buildingStory.get.name}:")
|
|
480
|
+
# Set multiplier from the original tz multiplier.
|
|
483
481
|
unless space_multiplier_map[space.name.to_s].nil? || (space_multiplier_map[space.name.to_s] == 1)
|
|
484
482
|
zone.setMultiplier(space_multiplier_map[space.name.to_s])
|
|
485
483
|
end
|
|
486
484
|
|
|
487
485
|
# Set space to dominant
|
|
488
486
|
|
|
489
|
-
dominant_floor_schedule = determine_dominant_schedule(space.buildingStory
|
|
490
|
-
#this method will determine if the right schedule was used for this wet & wild space if not.. it will reset the space
|
|
487
|
+
dominant_floor_schedule = determine_dominant_schedule(space.buildingStory.get.spaces)
|
|
488
|
+
# this method will determine if the right schedule was used for this wet & wild space if not.. it will reset the space
|
|
491
489
|
# to use the correct schedule version of the wet and wild space type.
|
|
492
|
-
adjust_wildcard_spacetype_schedule(space, dominant_floor_schedule, @lights_type,
|
|
493
|
-
#Find spacetype thermostat and assign it to the zone.
|
|
490
|
+
adjust_wildcard_spacetype_schedule(space: space, schedule: dominant_floor_schedule, lights_type: @lights_type, lights_scale: @lights_scale)
|
|
491
|
+
# Find spacetype thermostat and assign it to the zone.
|
|
494
492
|
thermostat_name = space.spaceType.get.name.get + ' Thermostat'
|
|
495
493
|
thermostat = model.getThermostatSetpointDualSetpointByName(thermostat_name)
|
|
496
494
|
if thermostat.empty?
|
|
@@ -504,11 +502,11 @@ class NECB2011
|
|
|
504
502
|
ideal_loads.addToThermalZone(zone)
|
|
505
503
|
end
|
|
506
504
|
# Go through other spaces to see if there are similar spaces with similar loads on the same floor that can be grouped.
|
|
507
|
-
model.getSpaces.select {|s| is_an_necb_wildcard_space?(s)
|
|
505
|
+
model.getSpaces.select { |s| is_an_necb_wildcard_space?(s) && !is_an_necb_wet_space?(s) }.each do |space_target|
|
|
508
506
|
if space_target.thermalZone.empty?
|
|
509
507
|
if are_space_loads_similar?(space_1: space, space_2: space_target) &&
|
|
510
|
-
|
|
511
|
-
adjust_wildcard_spacetype_schedule(space_target, dominant_floor_schedule, @lights_type,
|
|
508
|
+
space.buildingStory.get == space_target.buildingStory.get # added since chris needs zones to not span floors for costing.
|
|
509
|
+
adjust_wildcard_spacetype_schedule(space: space_target, schedule: dominant_floor_schedule, lights_type: @lights_type, lights_scale: @lights_scale)
|
|
512
510
|
space_target.setThermalZone(zone)
|
|
513
511
|
end
|
|
514
512
|
end
|
|
@@ -520,9 +518,10 @@ class NECB2011
|
|
|
520
518
|
|
|
521
519
|
# This method will determine if the loads on a zone are similar. (Exposure, space type, space loads, and schedules, etc)
|
|
522
520
|
def are_zone_loads_similar?(zone_1:, zone_2:)
|
|
523
|
-
#make sure they have the same number of spaces.
|
|
521
|
+
# make sure they have the same number of spaces.
|
|
524
522
|
truthes = []
|
|
525
523
|
return false if zone_1.spaces.size != zone_2.spaces.size
|
|
524
|
+
|
|
526
525
|
zone_1.spaces.each do |space_1|
|
|
527
526
|
zone_2.spaces.each do |space_2|
|
|
528
527
|
if are_space_loads_similar?(space_1: space_1, space_2: space_2)
|
|
@@ -530,7 +529,7 @@ class NECB2011
|
|
|
530
529
|
end
|
|
531
530
|
end
|
|
532
531
|
end
|
|
533
|
-
#truthes sizes should be the same as the # of spaces if all spaces are similar.
|
|
532
|
+
# truthes sizes should be the same as the # of spaces if all spaces are similar.
|
|
534
533
|
return truthes.size == zone_1.spaces.size
|
|
535
534
|
end
|
|
536
535
|
|
|
@@ -547,129 +546,130 @@ class NECB2011
|
|
|
547
546
|
return false if space_2.spaceType.empty?
|
|
548
547
|
# ensure that they have the same spacetype.
|
|
549
548
|
return false unless space_1.spaceType.get == space_2.spaceType.get
|
|
549
|
+
|
|
550
550
|
# Perform surface comparision. If ranges are within percent_difference_tolerance.. they can be considered the same.
|
|
551
551
|
space_1_floor_area = space_1.floorArea
|
|
552
552
|
space_2_floor_area = space_2.floorArea
|
|
553
553
|
space_1_surface_report = space_surface_report(space_1)
|
|
554
554
|
space_2_surface_report = space_surface_report(space_2)
|
|
555
|
-
#Spaces should have the same number of surface orientations.
|
|
555
|
+
# Spaces should have the same number of surface orientations.
|
|
556
556
|
return false unless space_1_surface_report.size == space_2_surface_report.size
|
|
557
|
-
#spaces should have similar loads
|
|
558
|
-
return false unless
|
|
559
|
-
|
|
557
|
+
# spaces should have similar loads
|
|
558
|
+
return false unless percentage_difference(stored_space_heating_load(space_1), stored_space_heating_load(space_2)) <= heating_load_percent_difference_tolerance
|
|
559
|
+
|
|
560
|
+
# Each surface should match
|
|
560
561
|
space_1_surface_report.each do |space_1_surface|
|
|
561
562
|
surface_match = space_2_surface_report.detect do |space_2_surface|
|
|
562
563
|
space_1_surface[:surface_type] == space_2_surface[:surface_type] &&
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
564
|
+
space_1_surface[:boundary_condition] == space_2_surface[:boundary_condition] &&
|
|
565
|
+
percentage_difference(space_1_surface[:tilt], space_2_surface[:tilt]) <= angular_percent_difference_tolerance &&
|
|
566
|
+
percentage_difference(space_1_surface[:azimuth], space_2_surface[:azimuth]) <= angular_percent_difference_tolerance &&
|
|
567
|
+
percentage_difference(space_1_surface[:surface_area_to_floor_ratio],
|
|
568
|
+
space_2_surface[:surface_area_to_floor_ratio]) <= surface_percent_difference_tolerance &&
|
|
569
|
+
percentage_difference(space_1_surface[:glazed_subsurface_area_to_floor_ratio],
|
|
570
|
+
space_2_surface[:glazed_subsurface_area_to_floor_ratio]) <= surface_percent_difference_tolerance &&
|
|
571
|
+
percentage_difference(space_1_surface[:opaque_subsurface_area_to_floor_ratio],
|
|
572
|
+
space_2_surface[:opaque_subsurface_area_to_floor_ratio]) <= surface_percent_difference_tolerance
|
|
573
573
|
end
|
|
574
574
|
return false if surface_match.nil?
|
|
575
575
|
end
|
|
576
576
|
return true
|
|
577
577
|
end
|
|
578
578
|
|
|
579
|
-
#This method gathers the surface information for the space to determine if spaces are the same.
|
|
579
|
+
# This method gathers the surface information for the space to determine if spaces are the same.
|
|
580
580
|
def space_surface_report(space)
|
|
581
581
|
surface_report = []
|
|
582
582
|
space_floor_area = space.floorArea
|
|
583
583
|
['Outdoors', 'Ground'].each do |bc|
|
|
584
584
|
surfaces = BTAP::Geometry::Surfaces.filter_by_boundary_condition(space.surfaces, [bc]).each do |surface|
|
|
585
|
-
#sum wall area and subsurface area by direction. This is the old way so excluding top and bottom surfaces.
|
|
586
|
-
#new way
|
|
587
|
-
glazings = BTAP::Geometry::Surfaces
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
doors = BTAP::Geometry::Surfaces
|
|
594
|
-
|
|
585
|
+
# sum wall area and subsurface area by direction. This is the old way so excluding top and bottom surfaces.
|
|
586
|
+
# new way
|
|
587
|
+
glazings = BTAP::Geometry::Surfaces.filter_subsurfaces_by_types(surface.subSurfaces, ['FixedWindow',
|
|
588
|
+
'OperableWindow',
|
|
589
|
+
'GlassDoor',
|
|
590
|
+
'Skylight',
|
|
591
|
+
'TubularDaylightDiffuser',
|
|
592
|
+
'TubularDaylightDome'])
|
|
593
|
+
doors = BTAP::Geometry::Surfaces.filter_subsurfaces_by_types(surface.subSurfaces, ['Door',
|
|
594
|
+
'OverheadDoor'])
|
|
595
595
|
azimuth = (surface.azimuth() * 180.0 / Math::PI)
|
|
596
596
|
tilt = (surface.tilt() * 180.0 / Math::PI)
|
|
597
|
-
surface_data = surface_report.detect do |
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
597
|
+
surface_data = surface_report.detect do |curr_surface_data|
|
|
598
|
+
curr_surface_data[:surface_type] == surface.surfaceType &&
|
|
599
|
+
curr_surface_data[:azimuth] == azimuth &&
|
|
600
|
+
curr_surface_data[:tilt] == tilt &&
|
|
601
|
+
curr_surface_data[:boundary_condition] == bc
|
|
602
602
|
end
|
|
603
603
|
|
|
604
604
|
if surface_data.nil?
|
|
605
605
|
surface_data = {
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
606
|
+
surface_type: surface.surfaceType,
|
|
607
|
+
azimuth: azimuth,
|
|
608
|
+
tilt: tilt,
|
|
609
|
+
boundary_condition: bc,
|
|
610
|
+
surface_area: 0,
|
|
611
|
+
surface_area_to_floor_ratio: 0,
|
|
612
|
+
glazed_subsurface_area: 0,
|
|
613
|
+
glazed_subsurface_area_to_floor_ratio: 0,
|
|
614
|
+
opaque_subsurface_area: 0,
|
|
615
|
+
opaque_subsurface_area_to_floor_ratio: 0
|
|
616
616
|
}
|
|
617
617
|
surface_report << surface_data
|
|
618
618
|
end
|
|
619
619
|
surface_data[:surface_area] += surface.grossArea.to_i
|
|
620
620
|
surface_data[:surface_area_to_floor_ratio] += surface.grossArea / space.floorArea
|
|
621
621
|
|
|
622
|
-
surface_data[:glazed_subsurface_area] += glazings.map {|subsurface| subsurface.grossArea * subsurface.multiplier}.inject(0) {|sum, x| sum + x}.to_i
|
|
623
|
-
surface_data[:glazed_subsurface_area_to_floor_ratio] += glazings.map {|subsurface| subsurface.grossArea * subsurface.multiplier}.inject(0) {|sum, x| sum + x} / space.floorArea
|
|
622
|
+
surface_data[:glazed_subsurface_area] += glazings.map { |subsurface| subsurface.grossArea * subsurface.multiplier }.inject(0) { |sum, x| sum + x }.to_i
|
|
623
|
+
surface_data[:glazed_subsurface_area_to_floor_ratio] += glazings.map { |subsurface| subsurface.grossArea * subsurface.multiplier }.inject(0) { |sum, x| sum + x } / space.floorArea
|
|
624
624
|
|
|
625
|
-
surface_data[:surface_area] += doors.map {|subsurface| subsurface.grossArea * subsurface.multiplier}.inject(0) {|sum, x| sum + x}.to_i
|
|
626
|
-
surface_data[:surface_area_to_floor_ratio] += doors.map {|subsurface| subsurface.grossArea * subsurface.multiplier}.inject(0) {|sum, x| sum + x} / space.floorArea
|
|
625
|
+
surface_data[:surface_area] += doors.map { |subsurface| subsurface.grossArea * subsurface.multiplier }.inject(0) { |sum, x| sum + x }.to_i
|
|
626
|
+
surface_data[:surface_area_to_floor_ratio] += doors.map { |subsurface| subsurface.grossArea * subsurface.multiplier }.inject(0) { |sum, x| sum + x } / space.floorArea
|
|
627
627
|
end
|
|
628
628
|
end
|
|
629
|
-
surface_report.sort! {|a, b| [a[:surface_type], a[:azimuth], a[:tilt], a[:boundary_condition]] <=> [b[:surface_type], b[:azimuth], b[:tilt], b[:boundary_condition]]}
|
|
629
|
+
surface_report.sort! { |a, b| [a[:surface_type], a[:azimuth], a[:tilt], a[:boundary_condition]] <=> [b[:surface_type], b[:azimuth], b[:tilt], b[:boundary_condition]] }
|
|
630
630
|
|
|
631
631
|
return surface_report
|
|
632
632
|
end
|
|
633
633
|
|
|
634
|
-
#Check to see if this is a wildcard space that the NECB does not have a specified schedule or system for.
|
|
634
|
+
# Check to see if this is a wildcard space that the NECB does not have a specified schedule or system for.
|
|
635
635
|
def is_an_necb_wildcard_space?(space)
|
|
636
636
|
space_type_table = @standards_data['space_types']
|
|
637
637
|
space_type_data = model_find_object(space_type_table,
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
raise(
|
|
642
|
-
|
|
638
|
+
'template' => self.class.name,
|
|
639
|
+
'space_type' => space.spaceType.get.standardsSpaceType.get,
|
|
640
|
+
'building_type' => space.spaceType.get.standardsBuildingType.get)
|
|
641
|
+
raise(space.to_s) if space_type_data.nil?
|
|
642
|
+
|
|
643
|
+
return space_type_data['necb_hvac_system_selection_type'] == 'Wildcard'
|
|
643
644
|
end
|
|
644
645
|
|
|
645
646
|
# Check to see if this is a wet space that the NECB does not have a specified schedule or system for. Currently hardcoded to
|
|
646
647
|
# Locker room and washroom.
|
|
647
648
|
def is_an_necb_wet_space?(space)
|
|
648
|
-
#Hack! Should replace this with a proper table lookup.
|
|
649
|
+
# Hack! Should replace this with a proper table lookup.
|
|
649
650
|
return space.spaceType.get.standardsSpaceType.get.include?('Locker room') || space.spaceType.get.standardsSpaceType.get.include?('Washroom')
|
|
650
651
|
end
|
|
651
652
|
|
|
652
653
|
# Check to see if this is a wet space that the NECB does not have a specified schedule or system for. Currently hardcoded to
|
|
653
654
|
# Locker room and washroom.
|
|
654
655
|
def is_an_necb_storage_space?(space)
|
|
655
|
-
#Hack! Should replace this with a proper table lookup.
|
|
656
|
+
# Hack! Should replace this with a proper table lookup.
|
|
656
657
|
return space.spaceType.get.standardsSpaceType.get.include?('Storage')
|
|
657
658
|
end
|
|
658
659
|
|
|
659
|
-
|
|
660
660
|
# Check if the space spactype is a dwelling unit as per NECB.
|
|
661
661
|
def is_a_necb_dwelling_unit?(space)
|
|
662
662
|
space_type_table = @standards_data['space_types']
|
|
663
663
|
space_type_data = model_find_object(space_type_table,
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
664
|
+
'template' => self.class.name,
|
|
665
|
+
'space_type' => space.spaceType.get.standardsSpaceType.get,
|
|
666
|
+
'building_type' => space.spaceType.get.standardsBuildingType.get)
|
|
667
667
|
|
|
668
668
|
necb_hvac_system_selection_table = @standards_data['necb_hvac_system_selection_type']
|
|
669
|
-
necb_hvac_system_select = necb_hvac_system_selection_table.detect do |
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
669
|
+
necb_hvac_system_select = necb_hvac_system_selection_table.detect do |curr_necb_hvac_system_select|
|
|
670
|
+
curr_necb_hvac_system_select['necb_hvac_system_selection_type'] == space_type_data['necb_hvac_system_selection_type'] &&
|
|
671
|
+
curr_necb_hvac_system_select['min_stories'] <= space.model.getBuilding.standardsNumberOfAboveGroundStories.get &&
|
|
672
|
+
curr_necb_hvac_system_select['max_stories'] >= space.model.getBuilding.standardsNumberOfAboveGroundStories.get
|
|
673
673
|
end
|
|
674
674
|
return necb_hvac_system_select['dwelling'] == true
|
|
675
675
|
end
|
|
@@ -677,21 +677,24 @@ class NECB2011
|
|
|
677
677
|
# Determines what system index number is required for the space's spacetype by NECB rules.
|
|
678
678
|
def get_necb_spacetype_system_selection(space)
|
|
679
679
|
space_type_table = @standards_data['space_types']
|
|
680
|
-
space_type_data = model_find_object(space_type_table,
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
680
|
+
space_type_data = model_find_object(space_type_table, 'space_type' => space.spaceType.get.standardsSpaceType.get,
|
|
681
|
+
'building_type' => space.spaceType.get.standardsBuildingType.get)
|
|
682
|
+
if space_type_data.nil?
|
|
683
|
+
raise("Could not find space_type_data for #{{ 'space_type' => space.spaceType.get.standardsSpaceType.get,
|
|
684
|
+
'building_type' => space.spaceType.get.standardsBuildingType.get }} ")
|
|
685
|
+
end
|
|
684
686
|
|
|
685
687
|
# identify space-system_index and assign the right NECB system type 1-7.
|
|
686
688
|
necb_hvac_system_selection_table = @standards_data['necb_hvac_system_selection_type']
|
|
687
|
-
necb_hvac_system_select = necb_hvac_system_selection_table.detect do |
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
689
|
+
necb_hvac_system_select = necb_hvac_system_selection_table.detect do |curr_necb_hvac_system_select|
|
|
690
|
+
curr_necb_hvac_system_select['necb_hvac_system_selection_type'] == space_type_data['necb_hvac_system_selection_type'] &&
|
|
691
|
+
curr_necb_hvac_system_select['min_stories'] <= space.model.getBuilding.standardsNumberOfAboveGroundStories.get &&
|
|
692
|
+
curr_necb_hvac_system_select['max_stories'] >= space.model.getBuilding.standardsNumberOfAboveGroundStories.get &&
|
|
693
|
+
curr_necb_hvac_system_select['min_cooling_capacity_kw'] <= stored_space_cooling_load(space) &&
|
|
694
|
+
curr_necb_hvac_system_select['max_cooling_capacity_kw'] >= stored_space_cooling_load(space)
|
|
693
695
|
end
|
|
694
|
-
raise(
|
|
696
|
+
raise('could not find system for given spacetype') if necb_hvac_system_select.nil?
|
|
697
|
+
|
|
695
698
|
return necb_hvac_system_select['system_type']
|
|
696
699
|
end
|
|
697
700
|
|
|
@@ -703,20 +706,22 @@ class NECB2011
|
|
|
703
706
|
end
|
|
704
707
|
systems.uniq!
|
|
705
708
|
systems.compact!
|
|
706
|
-
raise(
|
|
709
|
+
raise('This thermal zone spaces require different systems.') if systems.size > 1
|
|
710
|
+
|
|
707
711
|
return systems.first
|
|
708
712
|
end
|
|
709
713
|
|
|
710
714
|
# Math fundtion to determine percent difference.
|
|
711
715
|
def percentage_difference(value_1, value_2)
|
|
712
716
|
return 0.0 if value_1 == value_2
|
|
717
|
+
|
|
713
718
|
return ((value_1 - value_2).abs / ((value_1 + value_2) / 2) * 100)
|
|
714
719
|
end
|
|
715
720
|
|
|
716
721
|
# Set wildcard spactype schedule to NECB letter index.
|
|
717
722
|
def adjust_wildcard_spacetype_schedule(space:, schedule:, lights_type: 'NECB_Default', lights_scale: 1.0)
|
|
718
723
|
if space.spaceType.empty?
|
|
719
|
-
OpenStudio.logFree(OpenStudio::Error,
|
|
724
|
+
OpenStudio.logFree(OpenStudio::Error, "Error: No spacetype assigned for #{space.name.get}. This must be assigned. Aborting.")
|
|
720
725
|
end
|
|
721
726
|
# Get current spacetype name
|
|
722
727
|
space_type_name = space.spaceType.get.standardsSpaceType.get.to_s
|
|
@@ -725,13 +730,13 @@ class NECB2011
|
|
|
725
730
|
new_spacetype_name = "#{space_type_name.match(regex).captures.first}#{schedule}"
|
|
726
731
|
new_spacetype = nil
|
|
727
732
|
|
|
728
|
-
#if the new spacetype does not match the old space type. we gotta update the space with the new spacetype.
|
|
733
|
+
# if the new spacetype does not match the old space type. we gotta update the space with the new spacetype.
|
|
729
734
|
if space_type_name != new_spacetype_name
|
|
730
735
|
new_spacetype = space.model.getSpaceTypes.detect do |spacetype|
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
736
|
+
!spacetype.standardsBuildingType.empty? && # need to do this to prevent an exception.
|
|
737
|
+
(spacetype.standardsBuildingType.get == space.spaceType.get.standardsBuildingType.get) &&
|
|
738
|
+
!spacetype.standardsSpaceType.empty? && # need to do this to prevent an exception.
|
|
739
|
+
(spacetype.standardsSpaceType.get == new_spacetype_name)
|
|
735
740
|
end
|
|
736
741
|
if new_spacetype.nil?
|
|
737
742
|
# Space type is not in model. need to create from scratch.
|
|
@@ -743,14 +748,14 @@ class NECB2011
|
|
|
743
748
|
space_type_apply_internal_load_schedules(new_spacetype, true, true, true, true, true, true, true)
|
|
744
749
|
end
|
|
745
750
|
space.setSpaceType(new_spacetype)
|
|
746
|
-
#sanity check.
|
|
747
|
-
raise
|
|
751
|
+
# sanity check.
|
|
752
|
+
raise 'could not reassign space type schedule.' if schedule != space.spaceType.get.name.get.match(regex)[2]
|
|
748
753
|
end
|
|
749
754
|
return space
|
|
750
755
|
end
|
|
751
756
|
|
|
752
757
|
def set_wildcard_schedules_to_dominant_building_schedule(model, runner = nil)
|
|
753
|
-
#Get rid of.
|
|
758
|
+
# Get rid of.
|
|
754
759
|
end
|
|
755
760
|
|
|
756
761
|
def determine_dominant_schedule(spaces)
|
|
@@ -780,15 +785,14 @@ class NECB2011
|
|
|
780
785
|
'Q', 0
|
|
781
786
|
]
|
|
782
787
|
# iterate through spaces in building.
|
|
783
|
-
spaces.select {|space|
|
|
784
|
-
|
|
788
|
+
spaces.select { |space| !is_an_necb_wildcard_space?(space) && (space.spaceType.get.standardsSpaceType.get != '- undefined -') }.each do |space|
|
|
785
789
|
# Ensure space floors are multiplied.
|
|
786
790
|
mult = @space_multiplier_map[space.name.to_s].nil? ? 1.0 : @space_multiplier_map[space.name.to_s]
|
|
787
791
|
# puts "this #{determine_necb_schedule_type(space)}"
|
|
788
792
|
schedule_hash[determine_necb_schedule_type(space)] += space.floorArea * mult
|
|
789
793
|
end
|
|
790
794
|
# finds max value and returns NECB schedule letter.
|
|
791
|
-
#determine dominant letter schedule.
|
|
795
|
+
# determine dominant letter schedule.
|
|
792
796
|
return schedule_hash.max_by(&:last).first
|
|
793
797
|
end
|
|
794
798
|
|
|
@@ -807,7 +811,8 @@ class NECB2011
|
|
|
807
811
|
spacetype_data = @standards_data['space_types']
|
|
808
812
|
raise "Spacetype not defined for space #{space.get.name}) if space.spaceType.empty?" if space.spaceType.empty?
|
|
809
813
|
raise "Undefined standardsSpaceType or StandardsBuildingType for space #{space.spaceType.get.name}) if space.spaceType.empty?" if space.spaceType.get.standardsSpaceType.empty? | space.spaceType.get.standardsBuildingType.empty?
|
|
810
|
-
|
|
814
|
+
|
|
815
|
+
space_type_properties = spacetype_data.detect { |st| (st['space_type'] == space.spaceType.get.standardsSpaceType.get) && (st['building_type'] == space.spaceType.get.standardsBuildingType.get) }
|
|
811
816
|
return space_type_properties['necb_schedule_type'].strip
|
|
812
817
|
end
|
|
813
818
|
|
|
@@ -815,34 +820,35 @@ class NECB2011
|
|
|
815
820
|
|
|
816
821
|
# Method will create a hot water loop if systems default fuel and medium sources require it.
|
|
817
822
|
def create_hw_loop_if_required(baseboard_type, boiler_fueltype, mau_heating_coil_type, model)
|
|
818
|
-
#get systems that will be used in the model based on the space types to determine if a hw_loop is required.
|
|
823
|
+
# get systems that will be used in the model based on the space types to determine if a hw_loop is required.
|
|
819
824
|
systems_used = []
|
|
820
825
|
model.getSpaces.sort.each do |space|
|
|
821
826
|
systems_used << get_necb_spacetype_system_selection(space)
|
|
822
827
|
systems_used.uniq!
|
|
823
828
|
end
|
|
824
829
|
|
|
825
|
-
#See if we need to create a hot water loop based on fueltype and systems used.
|
|
830
|
+
# See if we need to create a hot water loop based on fueltype and systems used.
|
|
826
831
|
hw_loop_needed = false
|
|
827
832
|
systems_used.each do |system|
|
|
828
833
|
case system.to_s
|
|
829
834
|
when '2', '5', '7'
|
|
830
835
|
hw_loop_needed = true
|
|
831
836
|
when '1', '6'
|
|
832
|
-
if mau_heating_coil_type == 'Hot Water'
|
|
837
|
+
if (mau_heating_coil_type == 'Hot Water') || (baseboard_type == 'Hot Water')
|
|
833
838
|
hw_loop_needed = true
|
|
834
839
|
end
|
|
835
840
|
when '3', '4'
|
|
836
|
-
if mau_heating_coil_type == 'Hot Water'
|
|
837
|
-
hw_loop_needed = true if
|
|
841
|
+
if (mau_heating_coil_type == 'Hot Water') || (baseboard_type == 'Hot Water')
|
|
842
|
+
hw_loop_needed = true if baseboard_type == 'Hot Water'
|
|
838
843
|
end
|
|
839
844
|
end
|
|
840
845
|
if hw_loop_needed
|
|
841
846
|
# just need one true condition to need a boiler.
|
|
842
847
|
break
|
|
843
848
|
end
|
|
844
|
-
|
|
845
|
-
|
|
849
|
+
# each
|
|
850
|
+
end
|
|
851
|
+
# create hw_loop as needed.. Assuming one loop per model.
|
|
846
852
|
if hw_loop_needed
|
|
847
853
|
@hw_loop = OpenStudio::Model::PlantLoop.new(model)
|
|
848
854
|
always_on = model.alwaysOnDiscreteSchedule
|
|
@@ -874,16 +880,16 @@ class NECB2011
|
|
|
874
880
|
system_zones_hash[get_necb_thermal_zone_system_selection(zone)] = [] if system_zones_hash[get_necb_thermal_zone_system_selection(zone)].nil?
|
|
875
881
|
system_zones_hash[get_necb_thermal_zone_system_selection(zone)] << zone
|
|
876
882
|
end
|
|
877
|
-
#puts JSON.pretty_generate(system_zones_hash)
|
|
883
|
+
# puts JSON.pretty_generate(system_zones_hash)
|
|
878
884
|
# go through each system and zones pairs to
|
|
879
|
-
system_zones_hash.each_pair do |system,
|
|
885
|
+
system_zones_hash.each_pair do |system, sys_zones|
|
|
880
886
|
case system
|
|
881
887
|
when 0, nil
|
|
882
888
|
# Do nothing no system assigned to zone. Used for Unconditioned spaces
|
|
883
889
|
when 1
|
|
884
|
-
group_similar_zones_together(
|
|
890
|
+
group_similar_zones_together(sys_zones).each do |curr_zones|
|
|
885
891
|
mau_air_loop = add_sys1_unitary_ac_baseboard_heating(model: model,
|
|
886
|
-
zones:
|
|
892
|
+
zones: curr_zones,
|
|
887
893
|
mau_type: mau_type,
|
|
888
894
|
mau_heating_coil_type: mau_heating_coil_type,
|
|
889
895
|
baseboard_type: baseboard_type,
|
|
@@ -891,41 +897,41 @@ class NECB2011
|
|
|
891
897
|
multispeed: false)
|
|
892
898
|
end
|
|
893
899
|
when 2
|
|
894
|
-
group_similar_zones_together(
|
|
900
|
+
group_similar_zones_together(sys_zones).each do |curr_zones|
|
|
895
901
|
add_sys2_FPFC_sys5_TPFC(model: model,
|
|
896
|
-
zones:
|
|
902
|
+
zones: curr_zones,
|
|
897
903
|
chiller_type: chiller_type,
|
|
898
904
|
mau_cooling_type: mau_cooling_type,
|
|
899
905
|
fan_coil_type: 'FPFC',
|
|
900
906
|
hw_loop: @hw_loop)
|
|
901
907
|
end
|
|
902
908
|
when 3
|
|
903
|
-
group_similar_zones_together(
|
|
909
|
+
group_similar_zones_together(sys_zones).each do |curr_zones|
|
|
904
910
|
add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model: model,
|
|
905
|
-
zones:
|
|
911
|
+
zones: curr_zones,
|
|
906
912
|
heating_coil_type: heating_coil_type_sys3,
|
|
907
913
|
baseboard_type: baseboard_type,
|
|
908
914
|
hw_loop: @hw_loop,
|
|
909
915
|
multispeed: false)
|
|
910
916
|
end
|
|
911
917
|
when 4
|
|
912
|
-
group_similar_zones_together(
|
|
918
|
+
group_similar_zones_together(sys_zones).each do |curr_zones|
|
|
913
919
|
add_sys4_single_zone_make_up_air_unit_with_baseboard_heating(model: model,
|
|
914
|
-
zones:
|
|
920
|
+
zones: curr_zones,
|
|
915
921
|
heating_coil_type: heating_coil_type_sys4,
|
|
916
922
|
baseboard_type: baseboard_type,
|
|
917
923
|
hw_loop: @hw_loop)
|
|
918
|
-
# add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model: model,
|
|
919
|
-
# zones: zones,
|
|
920
|
-
# heating_coil_type: heating_coil_type_sys4,
|
|
921
|
-
# baseboard_type: baseboard_type,
|
|
922
|
-
# hw_loop: @hw_loop,
|
|
923
|
-
# multispeed: false)
|
|
924
|
+
# add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model: model,
|
|
925
|
+
# zones: zones,
|
|
926
|
+
# heating_coil_type: heating_coil_type_sys4,
|
|
927
|
+
# baseboard_type: baseboard_type,
|
|
928
|
+
# hw_loop: @hw_loop,
|
|
929
|
+
# multispeed: false)
|
|
924
930
|
end
|
|
925
931
|
when 5
|
|
926
|
-
group_similar_zones_together(
|
|
932
|
+
group_similar_zones_together(sys_zones).each do |curr_zones|
|
|
927
933
|
add_sys2_FPFC_sys5_TPFC(model: model,
|
|
928
|
-
zones:
|
|
934
|
+
zones: curr_zones,
|
|
929
935
|
chiller_type: chiller_type,
|
|
930
936
|
mau_cooling_type: mau_cooling_type,
|
|
931
937
|
fan_coil_type: 'TPFC',
|
|
@@ -933,7 +939,7 @@ class NECB2011
|
|
|
933
939
|
end
|
|
934
940
|
when 6
|
|
935
941
|
add_sys6_multi_zone_built_up_system_with_baseboard_heating(model: model,
|
|
936
|
-
zones:
|
|
942
|
+
zones: sys_zones,
|
|
937
943
|
heating_coil_type: heating_coil_type_sys6,
|
|
938
944
|
baseboard_type: baseboard_type,
|
|
939
945
|
chiller_type: chiller_type,
|
|
@@ -941,9 +947,9 @@ class NECB2011
|
|
|
941
947
|
hw_loop: @hw_loop)
|
|
942
948
|
|
|
943
949
|
when 7
|
|
944
|
-
group_similar_zones_together(
|
|
950
|
+
group_similar_zones_together(sys_zones).each do |curr_zones|
|
|
945
951
|
add_sys2_FPFC_sys5_TPFC(model: model,
|
|
946
|
-
zones:
|
|
952
|
+
zones: curr_zones,
|
|
947
953
|
chiller_type: chiller_type,
|
|
948
954
|
fan_coil_type: 'FPFC',
|
|
949
955
|
mau_cooling_type: mau_cooling_type,
|
|
@@ -965,21 +971,20 @@ class NECB2011
|
|
|
965
971
|
mau_cooling_type:,
|
|
966
972
|
mau_heating_coil_type:,
|
|
967
973
|
mau_type:,
|
|
968
|
-
model:
|
|
969
|
-
)
|
|
974
|
+
model:)
|
|
970
975
|
|
|
971
976
|
zones = []
|
|
972
977
|
other_spaces = model.getSpaces.select do |space|
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
978
|
+
!is_a_necb_dwelling_unit?(space) &&
|
|
979
|
+
!is_an_necb_wildcard_space?(space) &&
|
|
980
|
+
!is_an_necb_storage_space?(space)
|
|
976
981
|
end
|
|
977
982
|
other_spaces.each do |space|
|
|
978
983
|
zones << space.thermalZone.get
|
|
979
984
|
end
|
|
980
985
|
zones.uniq!
|
|
981
986
|
|
|
982
|
-
#since dwelling units are all zoned 1:1 to space:zone we simply add the zone to the appropriate btap system.
|
|
987
|
+
# since dwelling units are all zoned 1:1 to space:zone we simply add the zone to the appropriate btap system.
|
|
983
988
|
create_necb_system(baseboard_type: baseboard_type,
|
|
984
989
|
boiler_fueltype: boiler_fueltype,
|
|
985
990
|
chiller_type: chiller_type,
|
|
@@ -1009,40 +1014,39 @@ class NECB2011
|
|
|
1009
1014
|
mau_cooling_type:,
|
|
1010
1015
|
mau_heating_coil_type:,
|
|
1011
1016
|
mau_type:,
|
|
1012
|
-
model:
|
|
1013
|
-
)
|
|
1017
|
+
model:)
|
|
1014
1018
|
|
|
1015
1019
|
system_zones_hash = {}
|
|
1016
1020
|
# Detemine if dwelling units have a shared AHU. If user entered building stories > 4 then set to true.
|
|
1017
1021
|
dwelling_shared_ahu = model.getBuilding.standardsNumberOfAboveGroundStories.get > 4
|
|
1018
1022
|
# store dwelling zones into array
|
|
1019
1023
|
zones = []
|
|
1020
|
-
model.getSpaces.select {|space| is_a_necb_dwelling_unit?(space)}.each do |space|
|
|
1024
|
+
model.getSpaces.select { |space| is_a_necb_dwelling_unit?(space) }.each do |space|
|
|
1021
1025
|
zones << space.thermalZone.get
|
|
1022
1026
|
end
|
|
1023
1027
|
zones.uniq!
|
|
1024
1028
|
|
|
1025
|
-
#sort system 1 or 3 used for each dwelling unit as per T8.4.4.8.A NECB 2011-17
|
|
1029
|
+
# sort system 1 or 3 used for each dwelling unit as per T8.4.4.8.A NECB 2011-17
|
|
1026
1030
|
zones.each do |zone|
|
|
1027
1031
|
system_zones_hash[get_necb_thermal_zone_system_selection(zone)] = [] if system_zones_hash[get_necb_thermal_zone_system_selection(zone)].nil?
|
|
1028
1032
|
system_zones_hash[get_necb_thermal_zone_system_selection(zone)] << zone
|
|
1029
1033
|
end
|
|
1030
1034
|
|
|
1031
1035
|
# go through each system and zones pairs to
|
|
1032
|
-
system_zones_hash.each_pair do |system,
|
|
1036
|
+
system_zones_hash.each_pair do |system, sys_zones|
|
|
1033
1037
|
case system
|
|
1034
1038
|
when 1
|
|
1035
1039
|
if dwelling_shared_ahu
|
|
1036
1040
|
add_sys1_unitary_ac_baseboard_heating(model: model,
|
|
1037
|
-
zones:
|
|
1041
|
+
zones: sys_zones,
|
|
1038
1042
|
mau_type: mau_type,
|
|
1039
1043
|
mau_heating_coil_type: mau_heating_coil_type,
|
|
1040
1044
|
baseboard_type: baseboard_type,
|
|
1041
1045
|
hw_loop: @hw_loop,
|
|
1042
1046
|
multispeed: false)
|
|
1043
1047
|
else
|
|
1044
|
-
#Create a separate air loop for each unit.
|
|
1045
|
-
|
|
1048
|
+
# Create a separate air loop for each unit.
|
|
1049
|
+
sys_zones.each do |zone|
|
|
1046
1050
|
add_sys1_unitary_ac_baseboard_heating(model: model,
|
|
1047
1051
|
zones: [zone],
|
|
1048
1052
|
mau_type: mau_type,
|
|
@@ -1050,21 +1054,20 @@ class NECB2011
|
|
|
1050
1054
|
baseboard_type: baseboard_type,
|
|
1051
1055
|
hw_loop: @hw_loop,
|
|
1052
1056
|
multispeed: false)
|
|
1053
|
-
|
|
1054
1057
|
end
|
|
1055
1058
|
end
|
|
1056
1059
|
|
|
1057
1060
|
when 3
|
|
1058
1061
|
if dwelling_shared_ahu
|
|
1059
1062
|
add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model: model,
|
|
1060
|
-
zones:
|
|
1063
|
+
zones: sys_zones,
|
|
1061
1064
|
heating_coil_type: heating_coil_type_sys3,
|
|
1062
1065
|
baseboard_type: baseboard_type,
|
|
1063
1066
|
hw_loop: @hw_loop,
|
|
1064
1067
|
multispeed: false)
|
|
1065
1068
|
else
|
|
1066
|
-
#Create a separate air loop for each unit.
|
|
1067
|
-
|
|
1069
|
+
# Create a separate air loop for each unit.
|
|
1070
|
+
sys_zones.each do |zone|
|
|
1068
1071
|
add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model: model,
|
|
1069
1072
|
zones: [zone],
|
|
1070
1073
|
heating_coil_type: heating_coil_type_sys3,
|
|
@@ -1082,94 +1085,87 @@ class NECB2011
|
|
|
1082
1085
|
boiler_fueltype:,
|
|
1083
1086
|
heating_coil_type_sys4:,
|
|
1084
1087
|
model:)
|
|
1085
|
-
#Determine what zones are wet zones.
|
|
1088
|
+
# Determine what zones are wet zones.
|
|
1086
1089
|
wet_tz = []
|
|
1087
|
-
model.getSpaces.select {|space|
|
|
1088
|
-
|
|
1089
|
-
wet_tz << space.thermalZone.get
|
|
1090
|
-
end
|
|
1090
|
+
wet_spaces = model.getSpaces.select { |space| is_an_necb_wet_space?(space) }
|
|
1091
|
+
wet_spaces.each { |space| wet_tz << space.thermalZone.get }
|
|
1091
1092
|
wet_tz.uniq!
|
|
1092
|
-
#create a system 4 for the wet zones.
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
#
|
|
1101
|
-
#
|
|
1102
|
-
#
|
|
1103
|
-
#
|
|
1104
|
-
#
|
|
1105
|
-
|
|
1093
|
+
# create a system 4 for the wet zones.
|
|
1094
|
+
return if wet_tz.empty?
|
|
1095
|
+
|
|
1096
|
+
add_sys4_single_zone_make_up_air_unit_with_baseboard_heating(model: model,
|
|
1097
|
+
zones: wet_tz,
|
|
1098
|
+
heating_coil_type: heating_coil_type_sys4,
|
|
1099
|
+
baseboard_type: baseboard_type,
|
|
1100
|
+
hw_loop: @hw_loop)
|
|
1101
|
+
# add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model: model,
|
|
1102
|
+
# zones: wet_tz,
|
|
1103
|
+
# heating_coil_type: heating_coil_type_sys4,
|
|
1104
|
+
# baseboard_type: baseboard_type,
|
|
1105
|
+
# hw_loop: @hw_loop,
|
|
1106
|
+
# multispeed: false)
|
|
1106
1107
|
end
|
|
1107
1108
|
|
|
1108
|
-
|
|
1109
1109
|
# All wet spaces will be on their own system 4 AHU.
|
|
1110
1110
|
def auto_system_storage_spaces(baseboard_type:,
|
|
1111
1111
|
boiler_fueltype:,
|
|
1112
1112
|
heating_coil_type_sys4:,
|
|
1113
1113
|
model:)
|
|
1114
|
-
#Determine what zones are
|
|
1114
|
+
# Determine what zones are storage zones.
|
|
1115
1115
|
tz = []
|
|
1116
|
-
model.getSpaces.select {|space|
|
|
1117
|
-
|
|
1118
|
-
tz << space.thermalZone.get
|
|
1119
|
-
end
|
|
1116
|
+
storage_spaces = model.getSpaces.select { |space| is_an_necb_storage_space?(space) }
|
|
1117
|
+
storage_spaces.each { |space| tz << space.thermalZone.get }
|
|
1120
1118
|
tz.uniq!
|
|
1121
|
-
#create a system 4 for the zones.
|
|
1122
|
-
unless tz.empty?
|
|
1123
|
-
add_sys4_single_zone_make_up_air_unit_with_baseboard_heating(model: model,
|
|
1124
|
-
zones: tz,
|
|
1125
|
-
heating_coil_type: heating_coil_type_sys4,
|
|
1126
|
-
baseboard_type: baseboard_type,
|
|
1127
|
-
hw_loop: @hw_loop)
|
|
1128
|
-
# add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model: model,
|
|
1129
|
-
# zones: tz,
|
|
1130
|
-
# heating_coil_type: heating_coil_type_sys4,
|
|
1131
|
-
# baseboard_type: baseboard_type,
|
|
1132
|
-
# hw_loop: @hw_loop,
|
|
1133
|
-
# multispeed: true)
|
|
1134
|
-
end
|
|
1135
|
-
end
|
|
1136
1119
|
|
|
1120
|
+
return if tz.empty?
|
|
1121
|
+
|
|
1122
|
+
# create a system 4 for the zones.
|
|
1123
|
+
add_sys4_single_zone_make_up_air_unit_with_baseboard_heating(model: model,
|
|
1124
|
+
zones: tz,
|
|
1125
|
+
heating_coil_type: heating_coil_type_sys4,
|
|
1126
|
+
baseboard_type: baseboard_type,
|
|
1127
|
+
hw_loop: @hw_loop)
|
|
1128
|
+
# add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model: model,
|
|
1129
|
+
# zones: tz,
|
|
1130
|
+
# heating_coil_type: heating_coil_type_sys4,
|
|
1131
|
+
# baseboard_type: baseboard_type,
|
|
1132
|
+
# hw_loop: @hw_loop,
|
|
1133
|
+
# multispeed: true)
|
|
1134
|
+
end
|
|
1137
1135
|
|
|
1138
1136
|
# All wild spaces will be on a single system 4 ahu with the largests heating load zone being the control zone.
|
|
1139
1137
|
def auto_system_wild_spaces(baseboard_type:,
|
|
1140
1138
|
heating_coil_type_sys4:,
|
|
1141
|
-
model:
|
|
1142
|
-
)
|
|
1139
|
+
model:)
|
|
1143
1140
|
|
|
1144
1141
|
zones = []
|
|
1145
|
-
model.getSpaces.select {|space|
|
|
1146
|
-
|
|
1147
|
-
zones << space.thermalZone.get
|
|
1148
|
-
end
|
|
1142
|
+
wild_spaces = model.getSpaces.select { |space| !is_an_necb_wet_space?(space) && is_an_necb_wildcard_space?(space) }
|
|
1143
|
+
wild_spaces.each { |space| zones << space.thermalZone.get }
|
|
1149
1144
|
zones.uniq!
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
#
|
|
1160
|
-
#
|
|
1161
|
-
#
|
|
1162
|
-
#
|
|
1163
|
-
|
|
1145
|
+
|
|
1146
|
+
return if zones.empty?
|
|
1147
|
+
|
|
1148
|
+
# create a system 4 for the wild zones.
|
|
1149
|
+
add_sys4_single_zone_make_up_air_unit_with_baseboard_heating(model: model,
|
|
1150
|
+
zones: zones,
|
|
1151
|
+
heating_coil_type: heating_coil_type_sys4,
|
|
1152
|
+
baseboard_type: baseboard_type,
|
|
1153
|
+
hw_loop: @hw_loop)
|
|
1154
|
+
# add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model: model,
|
|
1155
|
+
# zones: zones,
|
|
1156
|
+
# heating_coil_type: heating_coil_type_sys4,
|
|
1157
|
+
# baseboard_type: baseboard_type,
|
|
1158
|
+
# hw_loop: @hw_loop,
|
|
1159
|
+
# multispeed: true)
|
|
1164
1160
|
end
|
|
1165
1161
|
|
|
1166
|
-
#This method will determine the control zone from the last sizing run space loads.
|
|
1162
|
+
# This method will determine the control zone from the last sizing run space loads.
|
|
1167
1163
|
def determine_control_zone(zones)
|
|
1168
1164
|
# In this case the control zone is the load with the largest heating loads. This may cause overheating of some zones.
|
|
1169
1165
|
# but this is preferred to unmet heating.
|
|
1170
|
-
#Iterate through zones.
|
|
1166
|
+
# Iterate through zones.
|
|
1171
1167
|
zone_heating_load_hash = {}
|
|
1172
|
-
zones.each {|zone| zone_heating_load_hash[zone] =
|
|
1168
|
+
zones.each { |zone| zone_heating_load_hash[zone] = stored_zone_heating_load(zone) }
|
|
1173
1169
|
return zone_heating_load_hash.max_by(&:last).first
|
|
1174
1170
|
end
|
|
1175
1171
|
|
|
@@ -1182,6 +1178,7 @@ class NECB2011
|
|
|
1182
1178
|
zones.each do |zone|
|
|
1183
1179
|
similar_array_of_zones = []
|
|
1184
1180
|
next if accounted_for.include?(zone.name.to_s)
|
|
1181
|
+
|
|
1185
1182
|
similar_array_of_zones << zone
|
|
1186
1183
|
accounted_for << zone.name.to_s
|
|
1187
1184
|
zones.each do |zone_target|
|
|
@@ -1196,17 +1193,18 @@ class NECB2011
|
|
|
1196
1193
|
array_of_array_of_zones << similar_array_of_zones
|
|
1197
1194
|
end
|
|
1198
1195
|
total_zones_output = 0
|
|
1199
|
-
array_of_array_of_zones.each do |
|
|
1200
|
-
total_zones_output +=
|
|
1196
|
+
array_of_array_of_zones.each do |curr_zones|
|
|
1197
|
+
total_zones_output += curr_zones.size
|
|
1201
1198
|
end
|
|
1202
|
-
#puts total_zones_output
|
|
1203
|
-
#puts accounted_for.sort
|
|
1204
|
-
#sanity check.
|
|
1199
|
+
# puts total_zones_output
|
|
1200
|
+
# puts accounted_for.sort
|
|
1201
|
+
# sanity check.
|
|
1205
1202
|
if total_zones_output != total_zones_input
|
|
1206
|
-
#puts JSON.pretty_generate(array_of_array_of_zones)
|
|
1207
|
-
#puts JSON.pretty_generate(accounted_for.sort)
|
|
1208
|
-
raise(
|
|
1203
|
+
# puts JSON.pretty_generate(array_of_array_of_zones)
|
|
1204
|
+
# puts JSON.pretty_generate(accounted_for.sort)
|
|
1205
|
+
raise('')
|
|
1209
1206
|
end
|
|
1207
|
+
|
|
1210
1208
|
return array_of_array_of_zones
|
|
1211
1209
|
end
|
|
1212
1210
|
|