openstudio-standards 0.2.14 → 0.2.15.pre.rc1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|