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
@@ -4,6 +4,9 @@ class Standard
|
|
4
4
|
attr_accessor :space_multiplier_map
|
5
5
|
attr_accessor :standards_data
|
6
6
|
|
7
|
+
# returns the space multiplier map
|
8
|
+
|
9
|
+
# @return [Hash] space multiplier map
|
7
10
|
def define_space_multiplier
|
8
11
|
return @space_multiplier_map
|
9
12
|
end
|
@@ -12,12 +15,13 @@ class Standard
|
|
12
15
|
|
13
16
|
# Creates a Performance Rating Method (aka Appendix G aka LEED) baseline building model
|
14
17
|
# based on the inputs currently in the model.
|
15
|
-
# the current model with this model.
|
16
18
|
#
|
17
19
|
# @note Per 90.1, the Performance Rating Method "does NOT offer an alternative compliance path for minimum standard compliance."
|
18
|
-
#
|
20
|
+
# This means you can't use this method for code compliance to get a permit.
|
21
|
+
#
|
22
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
19
23
|
# @param building_type [String] the building type
|
20
|
-
# @param climate_zone [String]
|
24
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
21
25
|
# @param custom [String] the custom logic that will be applied during baseline creation. Valid choices are 'Xcel Energy CO EDA' or '90.1-2007 with addenda dn'.
|
22
26
|
# If nothing is specified, no custom logic will be applied; the process will follow the template logic explicitly.
|
23
27
|
# @param sizing_run_dir [String] the directory where the sizing runs will be performed
|
@@ -221,7 +225,7 @@ class Standard
|
|
221
225
|
# Delete all the unused resource objects
|
222
226
|
model_remove_unused_resource_objects(model)
|
223
227
|
|
224
|
-
#
|
228
|
+
# @todo turn off self shading
|
225
229
|
# Set Solar Distribution to MinimalShadowing... problem is when you also have detached shading such as surrounding buildings etc
|
226
230
|
# It won't be taken into account, while it should: only self shading from the building itself should be turned off but to my knowledge there isn't a way to do this in E+
|
227
231
|
|
@@ -240,6 +244,9 @@ class Standard
|
|
240
244
|
# Determine if there needs to be a sizing run after constructions are added
|
241
245
|
# so that EnergyPlus can calculate the VLTs of layer-by-layer glazing constructions.
|
242
246
|
# These VLT values are needed for the daylighting controls logic for some templates.
|
247
|
+
#
|
248
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
249
|
+
# @return [Bool] returns true if required, false if not
|
243
250
|
def model_create_prm_baseline_building_requires_vlt_sizing_run(model)
|
244
251
|
return false # Not required for most templates
|
245
252
|
end
|
@@ -247,6 +254,7 @@ class Standard
|
|
247
254
|
# Determine the residential and nonresidential floor areas based on the space type properties for each space.
|
248
255
|
# For spaces with no space type, assume nonresidential.
|
249
256
|
#
|
257
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
250
258
|
# @return [Hash] keys are 'residential' and 'nonresidential', units are m^2
|
251
259
|
def model_residential_and_nonresidential_floor_areas(model)
|
252
260
|
res_area_m2 = 0
|
@@ -263,10 +271,11 @@ class Standard
|
|
263
271
|
end
|
264
272
|
|
265
273
|
# Determine the number of stories spanned by the supplied zones.
|
266
|
-
# If all zones on one of the stories have an
|
274
|
+
# If all zones on one of the stories have an identical multiplier,
|
267
275
|
# assume that the multiplier is a floor multiplier and increase the number of stories accordingly.
|
268
276
|
# Stories do not have to be contiguous.
|
269
277
|
#
|
278
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
270
279
|
# @param zones [Array<OpenStudio::Model::ThermalZone>] an array of zones
|
271
280
|
# @return [Integer] the number of stories spanned
|
272
281
|
def model_num_stories_spanned(model, zones)
|
@@ -295,7 +304,10 @@ class Standard
|
|
295
304
|
|
296
305
|
# Categorize zones by occupancy type and fuel type, where the types depend on the standard.
|
297
306
|
#
|
298
|
-
# @
|
307
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
308
|
+
# @param custom [String] custom fuel type
|
309
|
+
# @return [Array<Hash>] an array of hashes, one for each zone,
|
310
|
+
# with the keys 'zone', 'type' (occ type), 'fuel', and 'area'
|
299
311
|
def model_zones_with_occ_and_fuel_type(model, custom)
|
300
312
|
zones = []
|
301
313
|
|
@@ -337,11 +349,12 @@ class Standard
|
|
337
349
|
return zones
|
338
350
|
end
|
339
351
|
|
340
|
-
# Determine the dominant and exceptional areas of the
|
341
|
-
# building based on fuel types and occupancy types.
|
352
|
+
# Determine the dominant and exceptional areas of the building based on fuel types and occupancy types.
|
342
353
|
#
|
354
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
355
|
+
# @param custom [String] custom fuel type
|
343
356
|
# @return [Array<Hash>] an array of hashes of area information,
|
344
|
-
#
|
357
|
+
# with keys area_ft2, type, fuel, and zones (an array of zones)
|
345
358
|
def model_prm_baseline_system_groups(model, custom)
|
346
359
|
# Define the minimum area for the
|
347
360
|
# exception that allows a different
|
@@ -534,7 +547,7 @@ class Standard
|
|
534
547
|
gp['zones'] = gp_zns
|
535
548
|
end
|
536
549
|
|
537
|
-
#
|
550
|
+
# @todo Remove the secondary zones before
|
538
551
|
# determining the area used to pick the HVAC system, per PNNL PRM RM
|
539
552
|
|
540
553
|
# If there is any district heating or district cooling in the proposed building, the heating and cooling
|
@@ -600,6 +613,9 @@ class Standard
|
|
600
613
|
|
601
614
|
# Determines the area of the building above which point
|
602
615
|
# the non-dominant area type gets it's own HVAC system type.
|
616
|
+
#
|
617
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
618
|
+
# @param custom [String] custom fuel type
|
603
619
|
# @return [Double] the minimum area (m^2)
|
604
620
|
def model_prm_baseline_system_group_minimum_area(model, custom)
|
605
621
|
exception_min_area_ft2 = 20_000
|
@@ -610,14 +626,18 @@ class Standard
|
|
610
626
|
# Determine the baseline system type given the inputs. Logic is different for different standards.
|
611
627
|
#
|
612
628
|
# 90.1-2007, 90.1-2010, 90.1-2013
|
629
|
+
#
|
630
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
631
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
613
632
|
# @param area_type [String] Valid choices are residential, nonresidential, and heatedonly
|
614
633
|
# @param fuel_type [String] Valid choices are electric, fossil, fossilandelectric,
|
615
634
|
# purchasedheat, purchasedcooling, purchasedheatandcooling
|
616
635
|
# @param area_ft2 [Double] Area in ft^2
|
617
636
|
# @param num_stories [Integer] Number of stories
|
637
|
+
# @param custom [String] custom fuel type
|
618
638
|
# @return [String] The system type. Possibilities are PTHP, PTAC, PSZ_AC, PSZ_HP, PVAV_Reheat, PVAV_PFP_Boxes,
|
619
639
|
# VAV_Reheat, VAV_PFP_Boxes, Gas_Furnace, Electric_Furnace
|
620
|
-
#
|
640
|
+
# @todo add 90.1-2013 systems 11-13
|
621
641
|
def model_prm_baseline_system_type(model, climate_zone, area_type, fuel_type, area_ft2, num_stories, custom)
|
622
642
|
# [type, central_heating_fuel, zone_heating_fuel, cooling_fuel]
|
623
643
|
system_type = [nil, nil, nil, nil]
|
@@ -681,6 +701,15 @@ class Standard
|
|
681
701
|
end
|
682
702
|
|
683
703
|
# Determines which system number is used for the baseline system. Default is 90.1-2004 approach.
|
704
|
+
#
|
705
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
706
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
707
|
+
# @param area_type [String] Valid choices are residential, nonresidential, and heatedonly
|
708
|
+
# @param fuel_type [String] Valid choices are electric, fossil, fossilandelectric,
|
709
|
+
# purchasedheat, purchasedcooling, purchasedheatandcooling
|
710
|
+
# @param area_ft2 [Double] Area in ft^2
|
711
|
+
# @param num_stories [Integer] Number of stories
|
712
|
+
# @param custom [String] custom fuel type
|
684
713
|
# @return [String] the system number: 1_or_2, 3_or_4, 5_or_6, 7_or_8, 9_or_10
|
685
714
|
def model_prm_baseline_system_number(model, climate_zone, area_type, fuel_type, area_ft2, num_stories, custom)
|
686
715
|
sys_num = nil
|
@@ -712,6 +741,12 @@ class Standard
|
|
712
741
|
end
|
713
742
|
|
714
743
|
# Change the fuel type based on climate zone, depending on the standard. Defaults to no change.
|
744
|
+
#
|
745
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
746
|
+
# @param fuel_type [String] Valid choices are electric, fossil, fossilandelectric,
|
747
|
+
# purchasedheat, purchasedcooling, purchasedheatandcooling
|
748
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
749
|
+
# @param custom [String] custom fuel type
|
715
750
|
# @return [String] the revised fuel type
|
716
751
|
def model_prm_baseline_system_change_fuel_type(model, fuel_type, climate_zone, custom = nil)
|
717
752
|
return fuel_type # Don't change fuel type for most templates
|
@@ -721,13 +756,16 @@ class Standard
|
|
721
756
|
# For some multi-zone system types, the standards require identifying zones whose loads or schedules
|
722
757
|
# are outliers and putting these systems on separate single-zone systems. This method does that.
|
723
758
|
#
|
759
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
724
760
|
# @param system_type [String] The system type. Valid choices are PTHP, PTAC, PSZ_AC, PSZ_HP, PVAV_Reheat,
|
725
761
|
# PVAV_PFP_Boxes, VAV_Reheat, VAV_PFP_Boxes, Gas_Furnace, Electric_Furnace,
|
726
762
|
# which are also returned by the method OpenStudio::Model::Model.prm_baseline_system_type.
|
727
763
|
# @param main_heat_fuel [String] main heating fuel. Valid choices are Electricity, NaturalGas, DistrictHeating
|
728
764
|
# @param zone_heat_fuel [String] zone heating/reheat fuel. Valid choices are Electricity, NaturalGas, DistrictHeating
|
729
765
|
# @param cool_fuel [String] cooling fuel. Valid choices are Electricity, DistrictCooling
|
730
|
-
#
|
766
|
+
# @param zones [Array<OpenStudio::Model::ThermalZone>] an array of zones
|
767
|
+
# @return [Bool] returns true if successful, false if not
|
768
|
+
# @todo Add 90.1-2013 systems 11-13
|
731
769
|
def model_add_prm_baseline_system(model, system_type, main_heat_fuel, zone_heat_fuel, cool_fuel, zones)
|
732
770
|
case system_type
|
733
771
|
when 'PTAC' # System 1
|
@@ -1108,6 +1146,8 @@ class Standard
|
|
1108
1146
|
|
1109
1147
|
# Determines the fan type used by VAV_Reheat and VAV_PFP_Boxes systems.
|
1110
1148
|
# Defaults to two speed fan.
|
1149
|
+
#
|
1150
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
1111
1151
|
# @return [String] the fan type: TwoSpeed Fan, Variable Speed Fan
|
1112
1152
|
def model_baseline_system_vav_fan_type(model)
|
1113
1153
|
fan_type = 'TwoSpeed Fan'
|
@@ -1116,9 +1156,12 @@ class Standard
|
|
1116
1156
|
|
1117
1157
|
# Looks through the model and creates an hash of what the baseline system type should be for each zone.
|
1118
1158
|
#
|
1159
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
1160
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
1161
|
+
# @param custom [String] custom fuel type
|
1119
1162
|
# @return [Hash] keys are zones, values are system type strings
|
1120
|
-
#
|
1121
|
-
#
|
1163
|
+
# PTHP, PTAC, PSZ_AC, PSZ_HP, PVAV_Reheat, PVAV_PFP_Boxes,
|
1164
|
+
# VAV_Reheat, VAV_PFP_Boxes, Gas_Furnace, Electric_Furnace
|
1122
1165
|
def model_get_baseline_system_type_by_zone(model, climate_zone, custom = nil)
|
1123
1166
|
zone_to_sys_type = {}
|
1124
1167
|
|
@@ -1187,7 +1230,15 @@ class Standard
|
|
1187
1230
|
return zone_to_sys_type
|
1188
1231
|
end
|
1189
1232
|
|
1190
|
-
#
|
1233
|
+
# elimates outlier zones based on a set of keys
|
1234
|
+
#
|
1235
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
1236
|
+
# @param array_of_zones [Array] an array of Hashes for each zone, with the keys 'zone'
|
1237
|
+
# @param key_to_inspect [String] hash key to inspect in array of zones
|
1238
|
+
# @param tolerance [Double] tolerance
|
1239
|
+
# @param field_name [String] field name to inspect
|
1240
|
+
# @param units [String] units
|
1241
|
+
# @return [Array] an array of Hashes for each zone
|
1191
1242
|
def model_eliminate_outlier_zones(model, array_of_zones, key_to_inspect, tolerance, field_name, units)
|
1192
1243
|
# Sort the zones by the desired key
|
1193
1244
|
begin
|
@@ -1264,8 +1315,10 @@ class Standard
|
|
1264
1315
|
# Second, eliminate zones whose design internal loads differ from the area-weighted average of all other zones
|
1265
1316
|
# on the system by more than 10 Btu/hr*ft^2.
|
1266
1317
|
#
|
1318
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
1319
|
+
# @param zones [Array<OpenStudio::Model::ThermalZone>] an array of zones
|
1267
1320
|
# @return [Hash] A hash of two arrays of ThermalZones,
|
1268
|
-
#
|
1321
|
+
# where the keys are 'primary' and 'secondary'
|
1269
1322
|
def model_differentiate_primary_secondary_thermal_zones(model, zones)
|
1270
1323
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', 'Determining which zones are served by the primary vs. secondary HVAC system.')
|
1271
1324
|
|
@@ -1384,6 +1437,9 @@ class Standard
|
|
1384
1437
|
# Group an array of zones into multiple arrays, one for each story in the building.
|
1385
1438
|
# Zones with spaces on multiple stories will be assigned to only one of the stories.
|
1386
1439
|
# Removes empty array (when the story doesn't contain any of the zones)
|
1440
|
+
#
|
1441
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
1442
|
+
# @param zones [Array<OpenStudio::Model::ThermalZone>] an array of zones
|
1387
1443
|
# @return [Array<Array<OpenStudio::Model::ThermalZone>>] array of arrays of zones
|
1388
1444
|
def model_group_zones_by_story(model, zones)
|
1389
1445
|
story_zone_lists = []
|
@@ -1428,7 +1484,8 @@ class Standard
|
|
1428
1484
|
# If no story object is found for a particular height, create a new one and assign it to the space.
|
1429
1485
|
# Does not assign a story to plenum spaces.
|
1430
1486
|
#
|
1431
|
-
# @
|
1487
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
1488
|
+
# @return [Bool] returns true if successful, false if not
|
1432
1489
|
def model_assign_spaces_to_stories(model)
|
1433
1490
|
# Make hash of spaces and minz values
|
1434
1491
|
sorted_spaces = {}
|
@@ -1464,10 +1521,11 @@ class Standard
|
|
1464
1521
|
return true
|
1465
1522
|
end
|
1466
1523
|
|
1467
|
-
# Applies the multi-zone VAV outdoor air sizing requirements
|
1468
|
-
# to all applicable air loops in the model.
|
1469
|
-
#
|
1524
|
+
# Applies the multi-zone VAV outdoor air sizing requirements to all applicable air loops in the model.
|
1470
1525
|
# @note This must be performed before the sizing run because it impacts component sizes, which in turn impact efficiencies.
|
1526
|
+
#
|
1527
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
1528
|
+
# @return [Bool] returns true if successful, false if not
|
1471
1529
|
def model_apply_multizone_vav_outdoor_air_sizing(model)
|
1472
1530
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Started applying multizone vav OA sizing.')
|
1473
1531
|
|
@@ -1478,6 +1536,12 @@ class Standard
|
|
1478
1536
|
end
|
1479
1537
|
|
1480
1538
|
# Applies the HVAC parts of the template to all objects in the model using the the template specified in the model.
|
1539
|
+
#
|
1540
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
1541
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
1542
|
+
# @param apply_controls [Bool] toggle whether to apply air loop and plant loop controls
|
1543
|
+
# @param sql_db_vars_map [Hash] hash map
|
1544
|
+
# @return [Bool] returns true if successful, false if not
|
1481
1545
|
def model_apply_hvac_efficiency_standard(model, climate_zone, apply_controls: true, sql_db_vars_map: nil)
|
1482
1546
|
sql_db_vars_map = {} if sql_db_vars_map.nil?
|
1483
1547
|
|
@@ -1548,7 +1612,7 @@ class Standard
|
|
1548
1612
|
model.getEvaporativeFluidCoolerTwoSpeeds.sort.each { |obj| fluid_cooler_apply_minimum_power_per_flow(obj, equipment_type: 'Closed Cooling Tower') }
|
1549
1613
|
|
1550
1614
|
# ERVs
|
1551
|
-
model.getHeatExchangerAirToAirSensibleAndLatents.each { |obj|
|
1615
|
+
model.getHeatExchangerAirToAirSensibleAndLatents.each { |obj| heat_exchanger_air_to_air_sensible_and_latent_apply_effectiveness(obj) }
|
1552
1616
|
|
1553
1617
|
# Gas Heaters
|
1554
1618
|
model.getCoilHeatingGass.sort.each { |obj| coil_heating_gas_apply_efficiency_and_curves(obj) }
|
@@ -1559,6 +1623,9 @@ class Standard
|
|
1559
1623
|
end
|
1560
1624
|
|
1561
1625
|
# Applies daylighting controls to each space in the model per the standard.
|
1626
|
+
#
|
1627
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
1628
|
+
# @return [Bool] returns true if successful, false if not
|
1562
1629
|
def model_add_daylighting_controls(model)
|
1563
1630
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Started adding daylighting controls.')
|
1564
1631
|
|
@@ -1568,17 +1635,16 @@ class Standard
|
|
1568
1635
|
end
|
1569
1636
|
|
1570
1637
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Finished adding daylighting controls.')
|
1638
|
+
return true
|
1571
1639
|
end
|
1572
1640
|
|
1573
|
-
# Apply the air leakage requirements to the model,
|
1574
|
-
#
|
1575
|
-
# creates customized infiltration objects for each space
|
1641
|
+
# Apply the air leakage requirements to the model, as described in PNNL section 5.2.1.6.
|
1642
|
+
# This method creates customized infiltration objects for each space
|
1576
1643
|
# and removes the SpaceType-level infiltration objects.
|
1577
1644
|
#
|
1578
|
-
#
|
1579
|
-
# @return [Bool] true if successful, false if not
|
1580
|
-
# @todo This infiltration method is not used by the Reference
|
1581
|
-
# buildings, fix this inconsistency.
|
1645
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
1646
|
+
# @return [Bool] returns true if successful, false if not
|
1647
|
+
# @todo This infiltration method is not used by the Reference buildings, fix this inconsistency.
|
1582
1648
|
def model_apply_infiltration_standard(model)
|
1583
1649
|
# Set the infiltration rate at each space
|
1584
1650
|
model.getSpaces.sort.each do |space|
|
@@ -1778,13 +1844,11 @@ class Standard
|
|
1778
1844
|
# needed for NRCan data structure compatibility. We keep all tables in a 'tables' hash in @standards_data and the table
|
1779
1845
|
# itself is in the 'table' hash index.
|
1780
1846
|
if hash_of_objects.nil?
|
1781
|
-
|
1782
|
-
|
1783
|
-
|
1784
|
-
|
1785
|
-
|
1786
|
-
hash_of_objects = table
|
1787
|
-
end
|
1847
|
+
# Format of @standards_data is not NRCan-style and table simply doesn't exist.
|
1848
|
+
return matching_objects if @standards_data['tables'].nil?
|
1849
|
+
|
1850
|
+
table = @standards_data['tables'][table_name]['table']
|
1851
|
+
hash_of_objects = table
|
1788
1852
|
end
|
1789
1853
|
|
1790
1854
|
# Compare each of the objects against the search criteria
|
@@ -1899,10 +1963,6 @@ class Standard
|
|
1899
1963
|
# the objects will only be returned if the specified capacity is between the minimum_capacity and maximum_capacity values.
|
1900
1964
|
# @param date [<OpenStudio::Date>] date of the object in question. If date is supplied,
|
1901
1965
|
# the objects will only be returned if the specified date is between the start_date and end_date.
|
1902
|
-
# @param area [Double] area of the object in question. If area is supplied,
|
1903
|
-
# the objects will only be returned if the specified area is between the minimum_area and maximum_area values.
|
1904
|
-
# @param num_floors [Double] capacity of the object in question. If num_floors is supplied,
|
1905
|
-
# the objects will only be returned if the specified num_floors is between the minimum_floors and maximum_floors values.
|
1906
1966
|
# @return [Hash] Return tbe first matching object hash if successful, nil if not.
|
1907
1967
|
# @example Find the motor that meets these size criteria
|
1908
1968
|
# search_criteria = {
|
@@ -1934,11 +1994,12 @@ class Standard
|
|
1934
1994
|
|
1935
1995
|
# Create constant ScheduleRuleset
|
1936
1996
|
#
|
1937
|
-
# @param
|
1938
|
-
# @param
|
1939
|
-
# @param
|
1997
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
1998
|
+
# @param value [Double] the value to use, 24-7, 365
|
1999
|
+
# @param name [String] the name of the schedule
|
2000
|
+
# @param sch_type_limit [String] the name of a schedule type limit
|
1940
2001
|
# options are Temperature, Humidity Ratio, Fractional, OnOff, and Activity
|
1941
|
-
# @return schedule
|
2002
|
+
# @return [OpenStudio::Model::ScheduleRuleset] schedule ruleset object
|
1942
2003
|
def model_add_constant_schedule_ruleset(model,
|
1943
2004
|
value,
|
1944
2005
|
name = nil,
|
@@ -1972,14 +2033,15 @@ class Standard
|
|
1972
2033
|
|
1973
2034
|
# Create ScheduleTypeLimits
|
1974
2035
|
#
|
1975
|
-
# @param
|
2036
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
2037
|
+
# @param standard_sch_type_limit [String] the name of a standard schedule type limit with predefined limits
|
1976
2038
|
# options are Temperature, Humidity Ratio, Fractional, OnOff, and Activity
|
1977
|
-
# @param name[
|
2039
|
+
# @param name [String] the name of the schedule type limits
|
1978
2040
|
# @param lower_limit_value [double] the lower limit value for the schedule type
|
1979
2041
|
# @param upper_limit_value [double] the upper limit value for the schedule type
|
1980
|
-
# @param numeric_type [
|
1981
|
-
# @param unit_type [
|
1982
|
-
# @return [
|
2042
|
+
# @param numeric_type [String] the numeric type, options are Continuous or Discrete
|
2043
|
+
# @param unit_type [String] the unit type, options are defined in EnergyPlus I/O reference
|
2044
|
+
# @return [OpenStudio::Model::ScheduleTypeLimits] schedule type limits
|
1983
2045
|
def model_add_schedule_type_limits(model,
|
1984
2046
|
standard_sch_type_limit: nil,
|
1985
2047
|
name: nil,
|
@@ -2058,9 +2120,9 @@ class Standard
|
|
2058
2120
|
return schedule_type_limits
|
2059
2121
|
end
|
2060
2122
|
|
2061
|
-
# Create a schedule from the openstudio standards dataset and
|
2062
|
-
# add it to the model.
|
2123
|
+
# Create a schedule from the openstudio standards dataset and add it to the model.
|
2063
2124
|
#
|
2125
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
2064
2126
|
# @param schedule_name [String} name of the schedule
|
2065
2127
|
# @return [ScheduleRuleset] the resulting schedule ruleset
|
2066
2128
|
# @todo make return an OptionalScheduleRuleset
|
@@ -2168,11 +2230,15 @@ class Standard
|
|
2168
2230
|
sch_rule.setApplySaturday(true) if day_types.include?('Sat')
|
2169
2231
|
sch_rule.setApplySunday(true) if day_types.include?('Sun')
|
2170
2232
|
end
|
2171
|
-
end
|
2233
|
+
end
|
2172
2234
|
return sch_ruleset
|
2173
2235
|
end
|
2174
2236
|
|
2175
2237
|
# Create a material from the openstudio standards dataset.
|
2238
|
+
#
|
2239
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
2240
|
+
# @param material_name [String] name of the material
|
2241
|
+
# @return [OpenStudio::Model::Material] material object
|
2176
2242
|
# @todo make return an OptionalMaterial
|
2177
2243
|
def model_add_material(model, material_name)
|
2178
2244
|
# First check model and return material if it already exists
|
@@ -2189,7 +2255,8 @@ class Standard
|
|
2189
2255
|
data = model_find_object(standards_data['materials'], 'name' => material_name)
|
2190
2256
|
unless data
|
2191
2257
|
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Model', "Cannot find data for material: #{material_name}, will not be created.")
|
2192
|
-
return false
|
2258
|
+
return false
|
2259
|
+
# @todo change to return empty optional material
|
2193
2260
|
end
|
2194
2261
|
|
2195
2262
|
material = nil
|
@@ -2271,6 +2338,11 @@ class Standard
|
|
2271
2338
|
|
2272
2339
|
# Create a construction from the openstudio standards dataset.
|
2273
2340
|
# If construction_props are specified, modifies the insulation layer accordingly.
|
2341
|
+
#
|
2342
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
2343
|
+
# @param construction_name [String] name of the construction
|
2344
|
+
# @param construction_props [Hash] hash of construction properties
|
2345
|
+
# @return [OpenStudio::Model::Construction] construction object
|
2274
2346
|
# @todo make return an OptionalConstruction
|
2275
2347
|
def model_add_construction(model, construction_name, construction_props = nil)
|
2276
2348
|
# First check model and return construction if it already exists
|
@@ -2303,7 +2375,7 @@ class Standard
|
|
2303
2375
|
standards_construction_type ||= ''
|
2304
2376
|
standards_info.setStandardsConstructionType(standards_construction_type)
|
2305
2377
|
|
2306
|
-
#
|
2378
|
+
# @todo could put construction rendering color in the spreadsheet
|
2307
2379
|
|
2308
2380
|
# Add the material layers to the construction
|
2309
2381
|
layers = OpenStudio::Model::MaterialVector.new
|
@@ -2345,14 +2417,14 @@ class Standard
|
|
2345
2417
|
elsif target_f_factor_ip && data['intended_surface_type'] == 'GroundContactFloor'
|
2346
2418
|
|
2347
2419
|
# Set the F-Factor (only applies to slabs on grade)
|
2348
|
-
#
|
2420
|
+
# @todo figure out what the prototype buildings did about ground heat transfer
|
2349
2421
|
# construction_set_slab_f_factor(construction, target_f_factor_ip.to_f, data['insulation_layer'])
|
2350
2422
|
construction_set_u_value(construction, 0.0, data['insulation_layer'], data['intended_surface_type'], u_includes_int_film, u_includes_ext_film)
|
2351
2423
|
|
2352
2424
|
elsif target_c_factor_ip && data['intended_surface_type'] == 'GroundContactWall'
|
2353
2425
|
|
2354
2426
|
# Set the C-Factor (only applies to underground walls)
|
2355
|
-
#
|
2427
|
+
# @todo figure out what the prototype buildings did about ground heat transfer
|
2356
2428
|
# construction_set_underground_wall_c_factor(construction, target_c_factor_ip.to_f, data['insulation_layer'])
|
2357
2429
|
construction_set_u_value(construction, 0.0, data['insulation_layer'], data['intended_surface_type'], u_includes_int_film, u_includes_ext_film)
|
2358
2430
|
|
@@ -2390,7 +2462,7 @@ class Standard
|
|
2390
2462
|
model.getSubSurfaces.each do |sub_surface|
|
2391
2463
|
next unless sub_surface.outsideBoundaryCondition == 'Outdoors' && sub_surface.subSurfaceType == 'Skylight'
|
2392
2464
|
|
2393
|
-
#
|
2465
|
+
# @todo enable proper window frame setting after https://github.com/NREL/OpenStudio/issues/2895 is fixed
|
2394
2466
|
sub_surface.setString(8, frame.name.get.to_s)
|
2395
2467
|
skylights_frame_added += 1
|
2396
2468
|
# if sub_surface.allowWindowPropertyFrameAndDivider
|
@@ -2403,7 +2475,8 @@ class Standard
|
|
2403
2475
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "Adding #{frame.name} to #{skylights_frame_added} skylights.") if skylights_frame_added > 0
|
2404
2476
|
else
|
2405
2477
|
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Model', "Cannot find skylight framing data for: #{framing_name}, will not be created.")
|
2406
|
-
return false
|
2478
|
+
return false
|
2479
|
+
# @todo change to return empty optional material
|
2407
2480
|
end
|
2408
2481
|
end
|
2409
2482
|
|
@@ -2439,6 +2512,13 @@ class Standard
|
|
2439
2512
|
end
|
2440
2513
|
|
2441
2514
|
# Helper method to find a particular construction and add it to the model after modifying the insulation value if necessary.
|
2515
|
+
#
|
2516
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
2517
|
+
# @param climate_zone_set [String] climate zone set
|
2518
|
+
# @param intended_surface_type [String] intended surface type
|
2519
|
+
# @param standards_construction_type [String] standards construction type
|
2520
|
+
# @param building_category [String] building category
|
2521
|
+
# @return [OpenStudio::Model::Construction] construction object
|
2442
2522
|
def model_find_and_add_construction(model, climate_zone_set, intended_surface_type, standards_construction_type, building_category)
|
2443
2523
|
# Get the construction properties,
|
2444
2524
|
# which specifies properties by construction category by climate zone set.
|
@@ -2459,7 +2539,7 @@ class Standard
|
|
2459
2539
|
almost_adiabatic = OpenStudio::Model::MasslessOpaqueMaterial.new(model, 'Smooth', 500)
|
2460
2540
|
construction.insertLayer(0, almost_adiabatic)
|
2461
2541
|
return construction
|
2462
|
-
|
2542
|
+
# else
|
2463
2543
|
# OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "Construction properties for: #{template}-#{climate_zone_set}-#{intended_surface_type}-#{standards_construction_type}-#{building_category} = #{props}.")
|
2464
2544
|
end
|
2465
2545
|
|
@@ -2479,12 +2559,18 @@ class Standard
|
|
2479
2559
|
end
|
2480
2560
|
|
2481
2561
|
# Create a construction set from the openstudio standards dataset.
|
2482
|
-
#
|
2483
|
-
|
2562
|
+
#
|
2563
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
2564
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
2565
|
+
# @param building_type [String] the building type
|
2566
|
+
# @param spc_type [String] the space type
|
2567
|
+
# @param is_residential [Bool] true if the building is residential
|
2568
|
+
# @return [OpenStudio::Model::OptionalDefaultConstructionSet] an optional default construction set
|
2569
|
+
def model_add_construction_set(model, climate_zone, building_type, spc_type, is_residential)
|
2484
2570
|
construction_set = OpenStudio::Model::OptionalDefaultConstructionSet.new
|
2485
2571
|
|
2486
2572
|
# Find the climate zone set that this climate zone falls into
|
2487
|
-
climate_zone_set = model_find_climate_zone_set(model,
|
2573
|
+
climate_zone_set = model_find_climate_zone_set(model, climate_zone)
|
2488
2574
|
unless climate_zone_set
|
2489
2575
|
return construction_set
|
2490
2576
|
end
|
@@ -2501,9 +2587,9 @@ class Standard
|
|
2501
2587
|
end
|
2502
2588
|
end
|
2503
2589
|
|
2504
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "Adding construction set: #{template}-#{
|
2590
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "Adding construction set: #{template}-#{climate_zone}-#{building_type}-#{spc_type}-is_residential#{is_residential}")
|
2505
2591
|
|
2506
|
-
name = model_make_name(model,
|
2592
|
+
name = model_make_name(model, climate_zone, building_type, spc_type)
|
2507
2593
|
|
2508
2594
|
# Create a new construction set and name it
|
2509
2595
|
construction_set = OpenStudio::Model::DefaultConstructionSet.new(model)
|
@@ -2685,8 +2771,11 @@ class Standard
|
|
2685
2771
|
return OpenStudio::Model::OptionalDefaultConstructionSet.new(construction_set)
|
2686
2772
|
end
|
2687
2773
|
|
2688
|
-
# Adds a curve from the OpenStudio-Standards dataset to the model
|
2689
|
-
#
|
2774
|
+
# Adds a curve from the OpenStudio-Standards dataset to the model based on the curve name.
|
2775
|
+
#
|
2776
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
2777
|
+
# @param curve_name [String] name of the curve
|
2778
|
+
# @return [OpenStudio::Model::Curve] curve object, nil if not found
|
2690
2779
|
def model_add_curve(model, curve_name)
|
2691
2780
|
# First check model and return curve if it already exists
|
2692
2781
|
existing_curves = []
|
@@ -2829,7 +2918,9 @@ class Standard
|
|
2829
2918
|
end
|
2830
2919
|
|
2831
2920
|
# Get the full path to the weather file that is specified in the model
|
2832
|
-
#
|
2921
|
+
#
|
2922
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
2923
|
+
# @return [OpenStudio::OptionalPath] path to weather file
|
2833
2924
|
def model_get_full_weather_file_path(model)
|
2834
2925
|
full_epw_path = OpenStudio::OptionalPath.new
|
2835
2926
|
|
@@ -2860,10 +2951,14 @@ class Standard
|
|
2860
2951
|
|
2861
2952
|
# Find the legacy simulation results from a CSV of previously created results.
|
2862
2953
|
#
|
2954
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
2955
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
2956
|
+
# @param building_type [String] the building type
|
2957
|
+
# @param run_type [String] design day is dd-only, otherwise annual run
|
2863
2958
|
# @return [Hash] a hash of results for each fuel, where the keys are in the form 'End Use|Fuel Type',
|
2864
|
-
#
|
2865
|
-
# values of 0.0 if none of this end use/fuel type combo was used by the simulation.
|
2866
|
-
# if the legacy results couldn't be found.
|
2959
|
+
# e.g. Heating|Electricity, Exterior Equipment|Water. All end use/fuel type combos are present,
|
2960
|
+
# with values of 0.0 if none of this end use/fuel type combo was used by the simulation.
|
2961
|
+
# Returns nil if the legacy results couldn't be found.
|
2867
2962
|
def model_legacy_results_by_end_use_and_fuel_type(model, climate_zone, building_type, run_type)
|
2868
2963
|
# Load the legacy idf results CSV file into a ruby hash
|
2869
2964
|
top_dir = File.expand_path('../../..', File.dirname(__FILE__))
|
@@ -2905,9 +3000,11 @@ class Standard
|
|
2905
3000
|
|
2906
3001
|
# Method to gather prototype simulation results for a specific climate zone, building type, and template
|
2907
3002
|
#
|
2908
|
-
# @param
|
2909
|
-
# @param
|
2910
|
-
# @
|
3003
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
3004
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
3005
|
+
# @param building_type [String] the building type
|
3006
|
+
# @return [Hash] Returns a hash with data presented in various bins.
|
3007
|
+
# Returns nil if no search results
|
2911
3008
|
def model_process_results_for_datapoint(model, climate_zone, building_type)
|
2912
3009
|
# Hash to store the legacy results by fuel and by end use
|
2913
3010
|
legacy_results_hash = {}
|
@@ -2979,8 +3076,10 @@ class Standard
|
|
2979
3076
|
# This is used to calculate EUI's to compare against non prototype buildings
|
2980
3077
|
# Areas taken from scorecard Excel Files
|
2981
3078
|
#
|
3079
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
2982
3080
|
# @param building_type [String] the building type
|
2983
|
-
# @return [Double] floor area (m^2) of prototype building for building type passed in.
|
3081
|
+
# @return [Double] floor area (m^2) of prototype building for building type passed in.
|
3082
|
+
# Returns nil if unexpected building type
|
2984
3083
|
def model_find_prototype_floor_area(model, building_type)
|
2985
3084
|
if building_type == 'FullServiceRestaurant' # 5502 ft^2
|
2986
3085
|
result = 511
|
@@ -3000,7 +3099,7 @@ class Standard
|
|
3000
3099
|
result = 3135
|
3001
3100
|
elsif building_type == 'Office'
|
3002
3101
|
result = nil
|
3003
|
-
#
|
3102
|
+
# @todo there shouldn't be a prototype building for this
|
3004
3103
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', 'Measures calling this should choose between SmallOffice, MediumOffice, and LargeOffice')
|
3005
3104
|
elsif building_type == 'Outpatient' # 40.950 ft^2
|
3006
3105
|
result = 3804
|
@@ -3038,8 +3137,11 @@ class Standard
|
|
3038
3137
|
return result
|
3039
3138
|
end
|
3040
3139
|
|
3041
|
-
#
|
3042
|
-
#
|
3140
|
+
# This is used by other methods to get the climate zone and building type from a model.
|
3141
|
+
# It has logic to break office into small,
|
3142
|
+
# medium or large based on building area that can be turned off
|
3143
|
+
#
|
3144
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
3043
3145
|
# @param remap_office [bool] re-map small office or leave it alone
|
3044
3146
|
# @return [hash] key for climate zone and building type, both values are strings
|
3045
3147
|
def model_get_building_climate_zone_and_building_type(model, remap_office = true)
|
@@ -3065,7 +3167,9 @@ class Standard
|
|
3065
3167
|
return results
|
3066
3168
|
end
|
3067
3169
|
|
3068
|
-
# remap office to one of the
|
3170
|
+
# remap office to one of the prototype buildings
|
3171
|
+
#
|
3172
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
3069
3173
|
# @param floor_area [Double] floor area (m^2)
|
3070
3174
|
# @return [String] SmallOffice, MediumOffice, LargeOffice
|
3071
3175
|
def model_remap_office(model, floor_area)
|
@@ -3082,10 +3186,12 @@ class Standard
|
|
3082
3186
|
end
|
3083
3187
|
end
|
3084
3188
|
|
3085
|
-
#
|
3189
|
+
# User needs to pass in template as string.
|
3190
|
+
# The building type and climate zone will come from the model.
|
3086
3191
|
# If the building type or ASHRAE climate zone is not set in the model this will return nil
|
3087
3192
|
# If the lookup doesn't find matching simulation results this wil return nil
|
3088
3193
|
#
|
3194
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
3089
3195
|
# @return [Double] EUI (MJ/m^2) for target template for given OSM. Returns nil if can't calculate EUI
|
3090
3196
|
def model_find_target_eui(model)
|
3091
3197
|
building_data = model_get_building_climate_zone_and_building_type(model)
|
@@ -3113,10 +3219,12 @@ class Standard
|
|
3113
3219
|
return result
|
3114
3220
|
end
|
3115
3221
|
|
3116
|
-
#
|
3222
|
+
# User needs to pass in template as string.
|
3223
|
+
# The building type and climate zone will come from the model.
|
3117
3224
|
# If the building type or ASHRAE climate zone is not set in the model this will return nil
|
3118
3225
|
# If the lookup doesn't find matching simulation results this wil return nil
|
3119
3226
|
#
|
3227
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
3120
3228
|
# @return [Hash] EUI (MJ/m^2) This will return a hash of end uses. key is end use, value is eui
|
3121
3229
|
def model_find_target_eui_by_end_use(model)
|
3122
3230
|
building_data = model_get_building_climate_zone_and_building_type(model)
|
@@ -3150,41 +3258,39 @@ class Standard
|
|
3150
3258
|
# Get a unique list of constructions with given boundary condition and a given type of surface.
|
3151
3259
|
# Pulls from both default construction sets and hard-assigned constructions.
|
3152
3260
|
#
|
3153
|
-
# @param
|
3154
|
-
# valid choices are:
|
3155
|
-
#
|
3156
|
-
#
|
3157
|
-
#
|
3158
|
-
#
|
3159
|
-
# @param type [String] the type of surface to find
|
3160
|
-
#
|
3161
|
-
#
|
3162
|
-
#
|
3163
|
-
#
|
3164
|
-
#
|
3165
|
-
#
|
3166
|
-
#
|
3167
|
-
#
|
3168
|
-
#
|
3169
|
-
#
|
3170
|
-
#
|
3171
|
-
#
|
3172
|
-
#
|
3173
|
-
#
|
3174
|
-
#
|
3175
|
-
#
|
3176
|
-
#
|
3177
|
-
#
|
3178
|
-
#
|
3179
|
-
#
|
3180
|
-
#
|
3181
|
-
#
|
3182
|
-
#
|
3183
|
-
#
|
3184
|
-
#
|
3185
|
-
#
|
3186
|
-
# return [Array<OpenStudio::Model::ConstructionBase>]
|
3187
|
-
# an array of all constructions.
|
3261
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
3262
|
+
# @param boundary_condition [String] the desired boundary condition. valid choices are:
|
3263
|
+
# Adiabatic
|
3264
|
+
# Surface
|
3265
|
+
# Outdoors
|
3266
|
+
# Ground
|
3267
|
+
# @param type [String] the type of surface to find. valid choices are:
|
3268
|
+
# AtticFloor
|
3269
|
+
# AtticWall
|
3270
|
+
# AtticRoof
|
3271
|
+
# DemisingFloor
|
3272
|
+
# DemisingWall
|
3273
|
+
# DemisingRoof
|
3274
|
+
# ExteriorFloor
|
3275
|
+
# ExteriorWall
|
3276
|
+
# ExteriorRoof
|
3277
|
+
# ExteriorWindow
|
3278
|
+
# ExteriorDoor
|
3279
|
+
# GlassDoor
|
3280
|
+
# GroundContactFloor
|
3281
|
+
# GroundContactWall
|
3282
|
+
# GroundContactRoof
|
3283
|
+
# InteriorFloor
|
3284
|
+
# InteriorWall
|
3285
|
+
# InteriorCeiling
|
3286
|
+
# InteriorPartition
|
3287
|
+
# InteriorWindow
|
3288
|
+
# InteriorDoor
|
3289
|
+
# OverheadDoor
|
3290
|
+
# Skylight
|
3291
|
+
# TubularDaylightDome
|
3292
|
+
# TubularDaylightDiffuser
|
3293
|
+
# return [Array<OpenStudio::Model::ConstructionBase>] an array of all constructions.
|
3188
3294
|
def model_find_constructions(model, boundary_condition, type)
|
3189
3295
|
constructions = []
|
3190
3296
|
|
@@ -3310,6 +3416,7 @@ class Standard
|
|
3310
3416
|
# For some standards, this will involve making modifications. For others, it will not.
|
3311
3417
|
#
|
3312
3418
|
# 90.1-2007, 90.1-2010, 90.1-2013
|
3419
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
3313
3420
|
# @return [Bool] returns true if successful, false if not
|
3314
3421
|
def model_apply_prm_construction_types(model)
|
3315
3422
|
types_to_modify = []
|
@@ -3394,7 +3501,9 @@ class Standard
|
|
3394
3501
|
|
3395
3502
|
# Apply the standard construction to each surface in the model, based on the construction type currently assigned.
|
3396
3503
|
#
|
3397
|
-
# @
|
3504
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
3505
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
3506
|
+
# @return [Bool] returns true if successful, false if not
|
3398
3507
|
def model_apply_standard_constructions(model, climate_zone)
|
3399
3508
|
types_to_modify = []
|
3400
3509
|
|
@@ -3470,11 +3579,12 @@ class Standard
|
|
3470
3579
|
|
3471
3580
|
# Returns standards data for selected construction
|
3472
3581
|
#
|
3473
|
-
# @param
|
3474
|
-
# @param
|
3475
|
-
# @param
|
3476
|
-
# @param
|
3477
|
-
# @
|
3582
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
3583
|
+
# @param intended_surface_type [String] the surface type
|
3584
|
+
# @param standards_construction_type [String] the type of construction
|
3585
|
+
# @param building_category [String] the type of building
|
3586
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
3587
|
+
# @return [Hash] hash of construction properties
|
3478
3588
|
def model_get_construction_properties(model, intended_surface_type, standards_construction_type, building_category, climate_zone = nil)
|
3479
3589
|
# get climate_zone_set
|
3480
3590
|
climate_zone = model_get_building_climate_zone_and_building_type(model)['climate_zone'] if climate_zone.nil?
|
@@ -3497,9 +3607,9 @@ class Standard
|
|
3497
3607
|
|
3498
3608
|
# Returns standards data for selected construction set
|
3499
3609
|
#
|
3500
|
-
# @param
|
3501
|
-
# @param space_type [
|
3502
|
-
# @return [
|
3610
|
+
# @param building_type [String] the type of building
|
3611
|
+
# @param space_type [String] space type within the building type. Typically nil.
|
3612
|
+
# @return [Hash] hash of construction set data
|
3503
3613
|
def model_get_construction_set(building_type, space_type = nil)
|
3504
3614
|
# populate search hash
|
3505
3615
|
search_criteria = {
|
@@ -3518,9 +3628,12 @@ class Standard
|
|
3518
3628
|
# WWR reduction will be done by moving vertices inward toward centroid.
|
3519
3629
|
# This causes the least impact on the daylighting area calculations and controls placement.
|
3520
3630
|
#
|
3631
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
3632
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
3633
|
+
# @return [Bool] returns true if successful, false if not
|
3521
3634
|
# @todo add proper support for 90.1-2013 with all those building type specific values
|
3522
3635
|
# @todo support 90.1-2004 requirement that windows be modeled as horizontal bands.
|
3523
|
-
#
|
3636
|
+
# Currently just using existing window geometry, and shrinking as necessary if WWR is above limit.
|
3524
3637
|
# @todo support semiheated spaces as a separate WWR category
|
3525
3638
|
# @todo add window frame area to calculation of WWR
|
3526
3639
|
def model_apply_prm_baseline_window_to_wall_ratio(model, climate_zone)
|
@@ -3559,7 +3672,7 @@ class Standard
|
|
3559
3672
|
end
|
3560
3673
|
|
3561
3674
|
# Determine the space category
|
3562
|
-
#
|
3675
|
+
# @todo This should really use the heating/cooling loads from the proposed building.
|
3563
3676
|
# However, in an attempt to avoid another sizing run just for this purpose,
|
3564
3677
|
# conditioned status is based on heating/cooling setpoints.
|
3565
3678
|
# If heated-only, will be assumed Semiheated.
|
@@ -3690,6 +3803,8 @@ class Standard
|
|
3690
3803
|
|
3691
3804
|
# Reduces the SRR to the values specified by the PRM. SRR reduction will be done by shrinking vertices toward the centroid.
|
3692
3805
|
#
|
3806
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
3807
|
+
# @return [Bool] returns true if successful, false if not
|
3693
3808
|
# @todo support semiheated spaces as a separate SRR category
|
3694
3809
|
# @todo add skylight frame area to calculation of SRR
|
3695
3810
|
def model_apply_prm_baseline_skylight_to_roof_ratio(model)
|
@@ -3823,8 +3938,9 @@ class Standard
|
|
3823
3938
|
end
|
3824
3939
|
|
3825
3940
|
# Determines the skylight to roof ratio limit for a given standard
|
3826
|
-
#
|
3827
|
-
#
|
3941
|
+
#
|
3942
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
3943
|
+
# @return [Double] the skylight to roof ratio, as a percent: 5.0 = 5%. 5% by default.
|
3828
3944
|
def model_prm_skylight_to_roof_ratio_limit(model)
|
3829
3945
|
srr_lim = 5.0
|
3830
3946
|
return srr_lim
|
@@ -3833,7 +3949,8 @@ class Standard
|
|
3833
3949
|
# Remove all HVAC that will be replaced during the performance rating method baseline generation.
|
3834
3950
|
# This does not include plant loops that serve WaterUse:Equipment or Fan:ZoneExhaust
|
3835
3951
|
#
|
3836
|
-
# @
|
3952
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
3953
|
+
# @return [Bool] returns true if successful, false if not
|
3837
3954
|
def model_remove_prm_hvac(model)
|
3838
3955
|
# Plant loops
|
3839
3956
|
model.getPlantLoops.sort.each do |loop|
|
@@ -3863,7 +3980,8 @@ class Standard
|
|
3863
3980
|
|
3864
3981
|
# Remove EMS objects that may be orphaned from removing HVAC
|
3865
3982
|
#
|
3866
|
-
# @
|
3983
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
3984
|
+
# @return [Bool] returns true if successful, false if not
|
3867
3985
|
def model_remove_prm_ems_objects(model)
|
3868
3986
|
model.getEnergyManagementSystemActuators.each(&:remove)
|
3869
3987
|
model.getEnergyManagementSystemConstructionIndexVariables.each(&:remove)
|
@@ -3882,7 +4000,9 @@ class Standard
|
|
3882
4000
|
end
|
3883
4001
|
|
3884
4002
|
# Remove external shading devices. Site shading will not be impacted.
|
3885
|
-
#
|
4003
|
+
#
|
4004
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
4005
|
+
# @return [Bool] returns true if successful, false if not
|
3886
4006
|
def model_remove_external_shading_devices(model)
|
3887
4007
|
shading_surfaces_removed = 0
|
3888
4008
|
model.getShadingSurfaceGroups.sort.each do |shade_group|
|
@@ -3900,6 +4020,9 @@ class Standard
|
|
3900
4020
|
end
|
3901
4021
|
|
3902
4022
|
# Changes the sizing parameters to the PRM specifications.
|
4023
|
+
#
|
4024
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
4025
|
+
# @return [Bool] returns true if successful, false if not
|
3903
4026
|
def model_apply_prm_sizing_parameters(model)
|
3904
4027
|
clg = 1.15
|
3905
4028
|
htg = 1.25
|
@@ -3909,12 +4032,13 @@ class Standard
|
|
3909
4032
|
sizing_params.setCoolingSizingFactor(clg)
|
3910
4033
|
|
3911
4034
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.prototype.Model', "Set sizing factors to #{htg} for heating and #{clg} for cooling.")
|
4035
|
+
return true
|
3912
4036
|
end
|
3913
4037
|
|
3914
4038
|
# Helper method to get the story object that corresponds to a specific minimum z value.
|
3915
4039
|
# Makes a new story if none found at this height.
|
3916
4040
|
#
|
3917
|
-
#
|
4041
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
3918
4042
|
# @param minz [Double] the z value (height) of the desired story, in meters.
|
3919
4043
|
# @param tolerance [Double] tolerance for comparison, in m. Default is 0.3 m ~1ft
|
3920
4044
|
# @return [OpenStudio::Model::BuildingStory] the story
|
@@ -3942,10 +4066,11 @@ class Standard
|
|
3942
4066
|
# Will return an array of hashes. Many may have one array entry.
|
3943
4067
|
# all values other than block size are gallons.
|
3944
4068
|
#
|
4069
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
3945
4070
|
# @return [Array] array of hashes. Each array entry based on different capacity
|
3946
|
-
#
|
4071
|
+
# specific to building type. Array will be empty for some building types.
|
3947
4072
|
def model_find_ashrae_hot_water_demand(model)
|
3948
|
-
#
|
4073
|
+
# @todo for types not in table use standards area normalized swh values
|
3949
4074
|
|
3950
4075
|
# get building type
|
3951
4076
|
building_data = model_get_building_climate_zone_and_building_type(model)
|
@@ -3997,6 +4122,9 @@ class Standard
|
|
3997
4122
|
# gal/day from ICC IECC 2015 Residential Standard Reference Design
|
3998
4123
|
# from Table R405.5.2(1)
|
3999
4124
|
#
|
4125
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
4126
|
+
# @param units_per_bldg [Double] number of units in the building
|
4127
|
+
# @param bedrooms_per_unit [Double] number of bedrooms per unit
|
4000
4128
|
# @return [Double] gal/day
|
4001
4129
|
def model_find_icc_iecc_2015_hot_water_demand(model, units_per_bldg, bedrooms_per_unit)
|
4002
4130
|
swh_gal_per_day = units_per_bldg * (30.0 + (10.0 * bedrooms_per_unit))
|
@@ -4006,6 +4134,9 @@ class Standard
|
|
4006
4134
|
|
4007
4135
|
# Returns average daily internal loads for residential buildings from Table R405.5.2(1)
|
4008
4136
|
#
|
4137
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
4138
|
+
# @param units_per_bldg [Double] number of units in the building
|
4139
|
+
# @param bedrooms_per_unit [Double] number of bedrooms per unit
|
4009
4140
|
# @return [Hash] mech_vent_cfm, infiltration_ach, igain_btu_per_day, internal_mass_lbs
|
4010
4141
|
def model_find_icc_iecc_2015_internal_loads(model, units_per_bldg, bedrooms_per_unit)
|
4011
4142
|
# get total and conditioned floor area
|
@@ -4034,10 +4165,16 @@ class Standard
|
|
4034
4165
|
end
|
4035
4166
|
|
4036
4167
|
# Helper method to make a shortened version of a name that will be readable in a GUI.
|
4037
|
-
|
4038
|
-
|
4039
|
-
|
4040
|
-
|
4168
|
+
#
|
4169
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
4170
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
4171
|
+
# @param building_type [String] the building type
|
4172
|
+
# @param spc_type [String] the space type
|
4173
|
+
# @return [String] string of the model name
|
4174
|
+
def model_make_name(model, climate_zone, building_type, spc_type)
|
4175
|
+
climate_zone = climate_zone.gsub('ClimateZone ', 'CZ')
|
4176
|
+
if climate_zone == 'CZ1-8'
|
4177
|
+
climate_zone = ''
|
4041
4178
|
end
|
4042
4179
|
|
4043
4180
|
if building_type == 'FullServiceRestaurant'
|
@@ -4102,8 +4239,8 @@ class Standard
|
|
4102
4239
|
parts << spc_type
|
4103
4240
|
end
|
4104
4241
|
|
4105
|
-
unless
|
4106
|
-
parts <<
|
4242
|
+
unless climate_zone.empty?
|
4243
|
+
parts << climate_zone
|
4107
4244
|
end
|
4108
4245
|
|
4109
4246
|
result = parts.join(' - ')
|
@@ -4113,21 +4250,25 @@ class Standard
|
|
4113
4250
|
|
4114
4251
|
# Helper method to find out which climate zone set contains a specific climate zone.
|
4115
4252
|
# Returns climate zone set name as String if success, nil if not found.
|
4116
|
-
|
4253
|
+
#
|
4254
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
4255
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
4256
|
+
# @return [String] climate zone set
|
4257
|
+
def model_find_climate_zone_set(model, climate_zone)
|
4117
4258
|
result = nil
|
4118
4259
|
|
4119
4260
|
possible_climate_zone_sets = []
|
4120
4261
|
standards_data['climate_zone_sets'].each do |climate_zone_set|
|
4121
|
-
if climate_zone_set['climate_zones'].include?(
|
4262
|
+
if climate_zone_set['climate_zones'].include?(climate_zone)
|
4122
4263
|
possible_climate_zone_sets << climate_zone_set['name']
|
4123
4264
|
end
|
4124
4265
|
end
|
4125
4266
|
|
4126
4267
|
# Check the results
|
4127
4268
|
if possible_climate_zone_sets.size.zero?
|
4128
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Cannot find a climate zone set containing #{
|
4269
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Cannot find a climate zone set containing #{climate_zone}. Make sure to use ASHRAE standards with ASHRAE climate zones and DEER or CA Title 24 standards with CEC climate zones.")
|
4129
4270
|
elsif possible_climate_zone_sets.size > 2
|
4130
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Found more than 2 climate zone sets containing #{
|
4271
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Found more than 2 climate zone sets containing #{climate_zone}; will return last matching climate zone set.")
|
4131
4272
|
end
|
4132
4273
|
|
4133
4274
|
# Get the climate zone from the possible set
|
@@ -4144,6 +4285,10 @@ class Standard
|
|
4144
4285
|
# Determine which climate zone to use.
|
4145
4286
|
# Defaults to the least specific climate zone set.
|
4146
4287
|
# For example, 2A and 2 both contain 2A, so use 2.
|
4288
|
+
#
|
4289
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
4290
|
+
# @param possible_climate_zone_sets [Array] climate zone sets
|
4291
|
+
# @return [String] climate zone ses
|
4147
4292
|
def model_get_climate_zone_set_from_list(model, possible_climate_zone_sets)
|
4148
4293
|
climate_zone_set = possible_climate_zone_sets.min
|
4149
4294
|
return climate_zone_set
|
@@ -4152,6 +4297,9 @@ class Standard
|
|
4152
4297
|
# This method ensures that all spaces with spacetypes defined contain at least a standardSpaceType appropriate for the template.
|
4153
4298
|
# So, if any space with a space type defined does not have a Stnadard spacetype, or is undefined, an error will stop
|
4154
4299
|
# with information that the spacetype needs to be defined.
|
4300
|
+
#
|
4301
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
4302
|
+
# @return [Bool] returns true if successful, false if not
|
4155
4303
|
def model_validate_standards_spacetypes_in_model(model)
|
4156
4304
|
error_string = ''
|
4157
4305
|
# populate search hash
|
@@ -4175,18 +4323,18 @@ class Standard
|
|
4175
4323
|
end
|
4176
4324
|
end
|
4177
4325
|
end
|
4178
|
-
if error_string == ''
|
4179
|
-
|
4180
|
-
else
|
4181
|
-
|
4182
|
-
|
4183
|
-
end
|
4326
|
+
return true if error_string == ''
|
4327
|
+
|
4328
|
+
# else
|
4329
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', error_string)
|
4330
|
+
return false
|
4184
4331
|
end
|
4185
4332
|
|
4186
4333
|
# Create sorted hash of stories with data need to determine effective number of stories above and below grade
|
4187
4334
|
# the key should be the story object, which would allow other measures the ability to for example loop through spaces of the bottom story
|
4188
4335
|
#
|
4189
|
-
# @
|
4336
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
4337
|
+
# @return [Hash] hash of space types with data in value necessary to determine effective number of stories above and below grade
|
4190
4338
|
def model_create_story_hash(model)
|
4191
4339
|
story_hash = {}
|
4192
4340
|
|
@@ -4229,7 +4377,8 @@ class Standard
|
|
4229
4377
|
|
4230
4378
|
# update count of ground wall areas
|
4231
4379
|
next if surface.surfaceType != 'Wall'
|
4232
|
-
next if surface.outsideBoundaryCondition != 'Ground'
|
4380
|
+
next if surface.outsideBoundaryCondition != 'Ground'
|
4381
|
+
# @todo make more flexible for slab/basement model.modeling
|
4233
4382
|
|
4234
4383
|
story_ground_wall_area += surface.grossArea
|
4235
4384
|
end
|
@@ -4269,7 +4418,8 @@ class Standard
|
|
4269
4418
|
# populate this method
|
4270
4419
|
# Determine the effective number of stories above and below grade
|
4271
4420
|
#
|
4272
|
-
# @
|
4421
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
4422
|
+
# @return [Hash] hash with effective_num_stories_below_grade and effective_num_stories_above_grade
|
4273
4423
|
def model_effective_num_stories(model)
|
4274
4424
|
below_grade = 0
|
4275
4425
|
above_grade = 0
|
@@ -4300,8 +4450,9 @@ class Standard
|
|
4300
4450
|
|
4301
4451
|
# create space_type_hash with info such as effective_num_spaces, num_units, num_meds, num_meals
|
4302
4452
|
#
|
4453
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
4303
4454
|
# @param trust_effective_num_spaces [Bool] defaults to false - set to true if modeled every space as a real rpp, vs. space as collection of rooms
|
4304
|
-
# @return [
|
4455
|
+
# @return [Hash] hash of space types with misc information
|
4305
4456
|
# @todo - add code when determining number of units to makeuse of trust_effective_num_spaces arg
|
4306
4457
|
def model_create_space_type_hash(model, trust_effective_num_spaces = false)
|
4307
4458
|
# assumed class size to deduct teachers from occupant count for classrooms
|
@@ -4405,58 +4556,13 @@ class Standard
|
|
4405
4556
|
return space_type_hash.sort.to_h
|
4406
4557
|
end
|
4407
4558
|
|
4408
|
-
# This method will apply the a FDWR to a model. It will remove any existing windows and doors and use the
|
4409
|
-
# Default contruction to set to apply the window construction. Sill height is in meters
|
4410
|
-
def apply_max_fdwr(model, runner, sillHeight_si, wwr)
|
4411
|
-
empty_const_warning = false
|
4412
|
-
model.getSpaces.sort.each do |space|
|
4413
|
-
space.surfaces.sort.each do |surface|
|
4414
|
-
zone = surface.space.get.thermalZone
|
4415
|
-
zone_multiplier = nil
|
4416
|
-
next if zone.empty?
|
4417
|
-
|
4418
|
-
if (surface.outsideBoundaryCondition == 'Outdoors') && (surface.surfaceType == 'Wall')
|
4419
|
-
surface.subSurfaces.each(&:remove)
|
4420
|
-
new_window = surface.setWindowToWallRatio(wwr, sillHeight_si, true)
|
4421
|
-
raise "#{surface.name.get} did not get set to #{wwr}. The size of the surface is #{surface.grossArea}" unless surface.windowToWallRatio.round(3) == wwr.round(3)
|
4422
|
-
|
4423
|
-
if new_window.empty?
|
4424
|
-
runner.registerWarning("The requested window to wall ratio for surface '#{surface.name}' was too large. Fenestration was not altered for this surface.")
|
4425
|
-
else
|
4426
|
-
windows_added = true
|
4427
|
-
# warn user if resulting window doesn't have a construction, as it will result in failed simulation. In the future may use logic from starting windows to apply construction to new window.
|
4428
|
-
if new_window.get.construction.empty? && (empty_const_warning == false)
|
4429
|
-
runner.registerWarning('one or more resulting windows do not have constructions. This script is intended to be used with models using construction sets versus hard assigned constructions.')
|
4430
|
-
empty_const_warning = true
|
4431
|
-
end
|
4432
|
-
end
|
4433
|
-
end
|
4434
|
-
end
|
4435
|
-
end
|
4436
|
-
end
|
4437
|
-
|
4438
|
-
# This method will apply the a SRR to a model. It will remove any existing skylights and use the
|
4439
|
-
# Default contruction to set to apply the skylight construction. A default skylight square area of 0.25^2 is used.
|
4440
|
-
def apply_max_srr(model, runner, srr, skylight_area = 0.25 * 0.25)
|
4441
|
-
spaces = []
|
4442
|
-
surface_type = 'RoofCeiling'
|
4443
|
-
model.getSpaces.sort.each do |space|
|
4444
|
-
space.surfaces.sort.each do |surface|
|
4445
|
-
if (surface.outsideBoundaryCondition == 'Outdoors') && (surface.surfaceType == surface_type)
|
4446
|
-
spaces << space
|
4447
|
-
break
|
4448
|
-
end
|
4449
|
-
end
|
4450
|
-
end
|
4451
|
-
pattern = OpenStudio::Model.generateSkylightPattern(spaces, spaces[0].directionofRelativeNorth, srr, Math.sqrt(skylight_area), Math.sqrt(skylight_area)) # ratio, x value, y value
|
4452
|
-
# applying skylight pattern
|
4453
|
-
skylights = OpenStudio::Model.applySkylightPattern(pattern, spaces, OpenStudio::Model::OptionalConstructionBase.new)
|
4454
|
-
spacenames = spaces.map { |space| space.name.get }
|
4455
|
-
runner.registerInfo("Adding #{skylights.size} skylights to #{spacenames}")
|
4456
|
-
end
|
4457
|
-
|
4458
4559
|
# This method will limit the subsurface of a given surface_type ("Wall" or "RoofCeiling") to the ratio for the building.
|
4459
4560
|
# This method only reduces subsurface sizes at most.
|
4561
|
+
#
|
4562
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
4563
|
+
# @param ratio [Double] ratio
|
4564
|
+
# @param surface_type [String] surface type
|
4565
|
+
# @return [Bool] returns true if successful, false if not
|
4460
4566
|
def apply_limit_to_subsurface_ratio(model, ratio, surface_type = 'Wall')
|
4461
4567
|
fdwr = get_outdoor_subsurface_ratio(model, surface_type)
|
4462
4568
|
if fdwr <= ratio
|
@@ -4486,14 +4592,14 @@ class Standard
|
|
4486
4592
|
return true
|
4487
4593
|
end
|
4488
4594
|
|
4489
|
-
# Converts the climate zone in the model into the format used
|
4490
|
-
#
|
4491
|
-
#
|
4492
|
-
#
|
4595
|
+
# Converts the climate zone in the model into the format used by the openstudio-standards lookup tables.
|
4596
|
+
# For example,
|
4597
|
+
# institution: ASHRAE, value: 6A becomes: ASHRAE 169-2013-6A.
|
4598
|
+
# institution: CEC, value: 3 becomes: CEC T24-CEC3.
|
4493
4599
|
#
|
4494
4600
|
# @param model [OpenStudio::Model::Model] the model
|
4495
4601
|
# @return [String] the string representation of the climate zone,
|
4496
|
-
#
|
4602
|
+
# empty string if no climate zone is present in the model.
|
4497
4603
|
def model_standards_climate_zone(model)
|
4498
4604
|
climate_zone = ''
|
4499
4605
|
model.getClimateZones.climateZones.each do |cz|
|
@@ -4520,9 +4626,8 @@ class Standard
|
|
4520
4626
|
# Clears out any climate zones previously added to the model.
|
4521
4627
|
#
|
4522
4628
|
# @param model [OpenStudio::Model::Model] the model
|
4523
|
-
# @param climate_zone [String]
|
4524
|
-
#
|
4525
|
-
# @return [Boolean] returns true if successful, false if not
|
4629
|
+
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
4630
|
+
# @return [Bool] returns true if successful, false if not
|
4526
4631
|
def model_set_climate_zone(model, climate_zone)
|
4527
4632
|
# Remove previous climate zones from the model
|
4528
4633
|
model.getClimateZones.clear
|
@@ -4538,7 +4643,12 @@ class Standard
|
|
4538
4643
|
return true
|
4539
4644
|
end
|
4540
4645
|
|
4541
|
-
# This method return the building ratio of subsurface_area / surface_type_area
|
4646
|
+
# This method return the building ratio of subsurface_area / surface_type_area
|
4647
|
+
# where surface_type can be "Wall" or "RoofCeiling"
|
4648
|
+
#
|
4649
|
+
# @param model [OpenStudio::Model::Model] the model
|
4650
|
+
# @param surface_type [String] surface type
|
4651
|
+
# @return [Double] surface ratio
|
4542
4652
|
def get_outdoor_subsurface_ratio(model, surface_type = 'Wall')
|
4543
4653
|
surface_area = 0.0
|
4544
4654
|
sub_surface_area = 0
|
@@ -4564,6 +4674,7 @@ class Standard
|
|
4564
4674
|
|
4565
4675
|
# Loads a osm as a starting point.
|
4566
4676
|
#
|
4677
|
+
# @param osm_file [String] path to the .osm file, relative to the /data folder
|
4567
4678
|
# @return [Bool] returns true if successful, false if not
|
4568
4679
|
def load_initial_osm(osm_file)
|
4569
4680
|
# Load the geometry .osm
|
@@ -4579,6 +4690,10 @@ class Standard
|
|
4579
4690
|
return model
|
4580
4691
|
end
|
4581
4692
|
|
4693
|
+
# validate that model contains objects
|
4694
|
+
#
|
4695
|
+
# @param model [OpenStudio::Model::Model] the model
|
4696
|
+
# @return [Bool] returns true if valid, false if not
|
4582
4697
|
def validate_initial_model(model)
|
4583
4698
|
is_valid = true
|
4584
4699
|
if model.getBuildingStorys.empty?
|
@@ -4644,6 +4759,7 @@ class Standard
|
|
4644
4759
|
# Removes all of the unused ResourceObjects
|
4645
4760
|
# (Curves, ScheduleDay, Material, etc.) from the model.
|
4646
4761
|
#
|
4762
|
+
# @param model [OpenStudio::Model::Model] the model
|
4647
4763
|
# @return [Bool] returns true if successful, false if not
|
4648
4764
|
def model_remove_unused_resource_objects(model)
|
4649
4765
|
start_size = model.objects.size
|
@@ -4668,7 +4784,7 @@ class Standard
|
|
4668
4784
|
# Future new schedules should be designed as paramtric from the start and would not need to run through this inference process
|
4669
4785
|
#
|
4670
4786
|
# @author David Goldwasser
|
4671
|
-
# @param model [Model]
|
4787
|
+
# @param model [OpenStudio::Model::Model] the model
|
4672
4788
|
# @param fraction_of_daily_occ_range [Double] fraction above/below daily min range required to start and end hours of operation
|
4673
4789
|
# @param invert_res [Bool] if true will reverse hours of operation for residential space types
|
4674
4790
|
# @param gen_occ_profile [Bool] if true creates a merged occupancy schedule for diagnostic purposes. This schedule is added to the model but no specifically returned by this method
|
@@ -4822,11 +4938,11 @@ class Standard
|
|
4822
4938
|
# should be traced back to a space or spaces.
|
4823
4939
|
#
|
4824
4940
|
# @author David Goldwasser
|
4825
|
-
# @param model [Model]
|
4826
|
-
# @param step_ramp_logic [String]
|
4827
|
-
# @param infer_hoo_for_non_assigned_objects [Bool]
|
4828
|
-
# @param gather_data_only
|
4829
|
-
# @param [
|
4941
|
+
# @param model [OpenStudio::Model::Model] the model
|
4942
|
+
# @param step_ramp_logic [String] type of step logic to use
|
4943
|
+
# @param infer_hoo_for_non_assigned_objects [Bool] attempt to get hoo for objects like swh with and exterior lighting
|
4944
|
+
# @param gather_data_only [Bool] false (stops method before changes made if true)
|
4945
|
+
# @param hoo_var_method [String] accepts hours and fractional. Any other value value will result in hoo variables not being applied
|
4830
4946
|
# @return [Hash] schedule is key, value is hash of number of objects
|
4831
4947
|
def model_setup_parametric_schedules(model, step_ramp_logic: nil, infer_hoo_for_non_assigned_objects: true, gather_data_only: false, hoo_var_method: 'hours')
|
4832
4948
|
parametric_inputs = {}
|
@@ -4880,7 +4996,7 @@ class Standard
|
|
4880
4996
|
end
|
4881
4997
|
avail_mgrs = air_loop.availabilityManagers
|
4882
4998
|
avail_mgrs.sort.each do |avail_mgr|
|
4883
|
-
#
|
4999
|
+
# @todo I'm finding availability mangers, but not any resources for them, even if I use OpenStudio::Model.getRecursiveChildren(avail_mgr)
|
4884
5000
|
resources = avail_mgr.resources
|
4885
5001
|
resources = OpenStudio::Model.getRecursiveResources(avail_mgr)
|
4886
5002
|
resources.sort.each do |resource|
|
@@ -4948,11 +5064,11 @@ class Standard
|
|
4948
5064
|
end
|
4949
5065
|
end
|
4950
5066
|
|
4951
|
-
#
|
4952
|
-
# todo
|
5067
|
+
# @todo Service Water Heating supply side (may or may not be associated with a space)
|
5068
|
+
# @todo water use equipment definitions (temperature, sensible, latent) may be in multiple spaces, need to identify hoo, but typically constant schedules
|
4953
5069
|
|
4954
5070
|
# water use equipment (flow rate fraction)
|
4955
|
-
# todo
|
5071
|
+
# @todo address common schedules used across multiple instances
|
4956
5072
|
model.getWaterUseEquipments.sort.each do |water_use_equipment|
|
4957
5073
|
if water_use_equipment.flowRateFractionSchedule.is_initialized && water_use_equipment.flowRateFractionSchedule.get.to_ScheduleRuleset.is_initialized
|
4958
5074
|
schedule = water_use_equipment.flowRateFractionSchedule.get.to_ScheduleRuleset.get
|
@@ -4972,8 +5088,8 @@ class Standard
|
|
4972
5088
|
|
4973
5089
|
end
|
4974
5090
|
end
|
4975
|
-
#
|
4976
|
-
# todo
|
5091
|
+
# @todo Refrigeration (will be associated with thermal zone)
|
5092
|
+
# @todo exterior lights (will be astronomical, but like AEDG's may have reduction later at night)
|
4977
5093
|
|
4978
5094
|
return parametric_inputs
|
4979
5095
|
end
|
@@ -4985,7 +5101,7 @@ class Standard
|
|
4985
5101
|
# @note This measure will replace any prior chagnes made to ScheduleRule objects with new ScheduleRule values from
|
4986
5102
|
# profile formulas
|
4987
5103
|
# @author David Goldwasser
|
4988
|
-
# @param model [Model]
|
5104
|
+
# @param model [OpenStudio::Model::Model] the model
|
4989
5105
|
# @param ramp_frequency [Double] ramp frequency in minutes. If nil method will match simulation timestep
|
4990
5106
|
# @param infer_hoo_for_non_assigned_objects [Bool] # attempt to get hoo for objects like swh with and exterior lighting
|
4991
5107
|
# @param error_on_out_of_order [Bool] true will error if applying formula creates out of order values
|
@@ -5010,7 +5126,7 @@ class Standard
|
|
5010
5126
|
# for now don't look at schedules without targets, in future can alter these by looking at building level hours of operation
|
5011
5127
|
next if sch.directUseCount <= 0 # won't catch if used for space type load instance, but that space type isn't used
|
5012
5128
|
|
5013
|
-
#
|
5129
|
+
# @todo address schedules that fall into this category, if they are used in the model
|
5014
5130
|
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Model', "For #{sch.sources.first.name}, #{sch.name} is not setup as parametric schedule. It has #{sch.sources.size} sources.")
|
5015
5131
|
next
|
5016
5132
|
end
|
@@ -5028,6 +5144,12 @@ class Standard
|
|
5028
5144
|
private
|
5029
5145
|
|
5030
5146
|
# Helper method to fill in hourly values
|
5147
|
+
#
|
5148
|
+
# @param model [OpenStudio::Model::Model] the model
|
5149
|
+
# @param day_sch [OpenStudio::Model::ScheduleDay] schedule day object
|
5150
|
+
# @param sch_type [String] Constant or Hourly
|
5151
|
+
# @param values [Array<Double>]
|
5152
|
+
# @return [Bool] returns true if successful, false if not
|
5031
5153
|
def model_add_vals_to_sch(model, day_sch, sch_type, values)
|
5032
5154
|
if sch_type == 'Constant'
|
5033
5155
|
day_sch.addValue(OpenStudio::Time.new(0, 24, 0, 0), values[0])
|
@@ -5043,7 +5165,10 @@ class Standard
|
|
5043
5165
|
end
|
5044
5166
|
|
5045
5167
|
# Modify the existing service water heating loops to match the baseline required heating type.
|
5046
|
-
#
|
5168
|
+
#
|
5169
|
+
# @param model [OpenStudio::Model::Model] the model
|
5170
|
+
# @param building_type [String] the building type
|
5171
|
+
# @return [Bool] returns true if successful, false if not
|
5047
5172
|
# @author Julien Marrec
|
5048
5173
|
def model_apply_baseline_swh_loops(model, building_type)
|
5049
5174
|
model.getPlantLoops.sort.each do |plant_loop|
|
@@ -5091,7 +5216,7 @@ class Standard
|
|
5091
5216
|
water_heater.setHeaterFuelType('Electricity')
|
5092
5217
|
water_heater.setHeaterThermalEfficiency(1.0)
|
5093
5218
|
else
|
5094
|
-
#
|
5219
|
+
# @todo for now, just get the first fuel that isn't Electricity
|
5095
5220
|
# A better way would be to count the capacities associated
|
5096
5221
|
# with each fuel type and use the preponderant one
|
5097
5222
|
fuels = htg_fuels - ['Electricity']
|
@@ -5128,7 +5253,9 @@ class Standard
|
|
5128
5253
|
# This should be done by the forward translator, and this code should be removed after this bug is fixed:
|
5129
5254
|
# https://github.com/NREL/OpenStudio/issues/2598
|
5130
5255
|
#
|
5131
|
-
#
|
5256
|
+
# @param model [OpenStudio::Model::Model] the model
|
5257
|
+
# @return [Bool] returns true if successful, false if not
|
5258
|
+
# @todo remove this method after OpenStudio issue #2598 is fixed.
|
5132
5259
|
def model_temp_fix_ems_references(model)
|
5133
5260
|
# Internal Variables
|
5134
5261
|
model.getEnergyManagementSystemInternalVariables.sort.each do |var|
|
@@ -5147,6 +5274,10 @@ class Standard
|
|
5147
5274
|
return true
|
5148
5275
|
end
|
5149
5276
|
|
5277
|
+
# Loads a geometry osm as a starting point.
|
5278
|
+
#
|
5279
|
+
# @param osm_model_path [String] path to the .osm file, relative to the /data folder
|
5280
|
+
# @return [OpenStudio::Model::Model] model object
|
5150
5281
|
def load_user_geometry_osm(osm_model_path:)
|
5151
5282
|
version_translator = OpenStudio::OSVersion::VersionTranslator.new
|
5152
5283
|
model = version_translator.loadModel(osm_model_path)
|
@@ -5187,7 +5318,7 @@ class Standard
|
|
5187
5318
|
# Loads a osm as a starting point.
|
5188
5319
|
#
|
5189
5320
|
# @param osm_file [String] path to the .osm file, relative to the /data folder
|
5190
|
-
# @return [
|
5321
|
+
# @return [OpenStudio::Model::Model] model object, false if not
|
5191
5322
|
def load_geometry_osm(osm_file)
|
5192
5323
|
# Load the geometry .osm from relative to the data folder
|
5193
5324
|
osm_model_path = "../../../data/#{osm_file}"
|
@@ -5241,8 +5372,10 @@ class Standard
|
|
5241
5372
|
# pass array of space types or spaces
|
5242
5373
|
#
|
5243
5374
|
# @author David Goldwasser
|
5244
|
-
# @param array of spaces or space types
|
5245
|
-
# @
|
5375
|
+
# @param space_space_types [Array] array of spaces or space types
|
5376
|
+
# @param parametric_inputs [Hash]
|
5377
|
+
# @param gather_data_only [Bool]
|
5378
|
+
# @return [Hash]
|
5246
5379
|
def gather_inputs_parametric_space_space_type_schedules(space_space_types, parametric_inputs, gather_data_only)
|
5247
5380
|
space_space_types.each do |space_type|
|
5248
5381
|
# get hours of operation for space type once
|
@@ -5297,8 +5430,11 @@ class Standard
|
|
5297
5430
|
# method to process load instance schedules for model_setup_parametric_schedules
|
5298
5431
|
#
|
5299
5432
|
# @author David Goldwasser
|
5300
|
-
# @param
|
5301
|
-
# @
|
5433
|
+
# @param load_inst [OpenStudio::Model::SpaceLoadInstance]
|
5434
|
+
# @param parametric_inputs [Hash]
|
5435
|
+
# @param hours_of_operation [Hash]
|
5436
|
+
# @param gather_data_only [Bool]
|
5437
|
+
# @return [Hash]
|
5302
5438
|
def gather_inputs_parametric_load_inst_schedules(load_inst, parametric_inputs, hours_of_operation, gather_data_only)
|
5303
5439
|
if load_inst.class.to_s == 'OpenStudio::Model::People'
|
5304
5440
|
opt_sch = load_inst.numberofPeopleSchedule
|
@@ -5319,9 +5455,15 @@ class Standard
|
|
5319
5455
|
# method to process load instance schedules for model_setup_parametric_schedules
|
5320
5456
|
#
|
5321
5457
|
# @author David Goldwasser
|
5322
|
-
# @param [
|
5323
|
-
# @param [
|
5324
|
-
# @
|
5458
|
+
# @param sch [OpenStudio::Model::Schedule]
|
5459
|
+
# @param load_inst [OpenStudio::Model::SpaceLoadInstance]
|
5460
|
+
# @param parametric_inputs [Hash]
|
5461
|
+
# @param hours_of_operation [Hash]
|
5462
|
+
# @param ramp [Bool]
|
5463
|
+
# @param min_ramp_dur_hr [Double]
|
5464
|
+
# @param gather_data_only [Bool]
|
5465
|
+
# @param hoo_var_method [String] accepts hours and fractional. Any other value value will result in hoo variables not being applied
|
5466
|
+
# @return [Hash]
|
5325
5467
|
def gather_inputs_parametric_schedules(sch, load_inst, parametric_inputs, hours_of_operation, ramp: true, min_ramp_dur_hr: 2.0, gather_data_only: false, hoo_var_method: 'hours')
|
5326
5468
|
if parametric_inputs.key?(sch)
|
5327
5469
|
if hours_of_operation != parametric_inputs[sch][:hoo_inputs] # don't warn if the hours of operation between old and new schedule are equivalent
|
@@ -5389,7 +5531,7 @@ class Standard
|
|
5389
5531
|
hoo_end = nil
|
5390
5532
|
occ = nil
|
5391
5533
|
vac = nil
|
5392
|
-
#
|
5534
|
+
# @todo issue warning when this happens on any profile that isn't a constant value
|
5393
5535
|
else
|
5394
5536
|
# get hours of operation for this specific profile
|
5395
5537
|
hoo_start = hours_of_operation[hoo_target_index][:hoo_start]
|
@@ -5472,7 +5614,7 @@ class Standard
|
|
5472
5614
|
daily_flh = day_schedule_equivalent_full_load_hrs(schedule_day)
|
5473
5615
|
percent_change = ((daily_flh - est_daily_flh) / daily_flh) * 100.0
|
5474
5616
|
if percent_change.abs > 0.05
|
5475
|
-
#
|
5617
|
+
# @todo this estimation can have flaws. Fix or remove it, make sure to update for secondary logic (if we implement that here)
|
5476
5618
|
# post application checks compares against actual instead of estimated values
|
5477
5619
|
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Model', "For day schedule #{schedule_day.name} in #{sch.name} there was a #{percent_change.round(4)}% change. Expected full load hours is #{daily_flh.round(4)}, but estimated value is #{est_daily_flh.round(4)}")
|
5478
5620
|
end
|
@@ -5575,7 +5717,7 @@ class Standard
|
|
5575
5717
|
time = "hoo_start - vac * #{min_value_vac_fract.round(3)}"
|
5576
5718
|
end
|
5577
5719
|
elsif min_key == 'mid'
|
5578
|
-
#
|
5720
|
+
# @todo see what is going wrong with after mid in formula
|
5579
5721
|
if min_value == 0
|
5580
5722
|
time = 'mid'
|
5581
5723
|
# converted to variable for simplicity but could also be described like this
|
@@ -5610,10 +5752,10 @@ class Standard
|
|
5610
5752
|
# store profile formula with hoo and value variables
|
5611
5753
|
props.setFeature('param_day_profile', raw_string.join(' | '))
|
5612
5754
|
|
5613
|
-
#
|
5614
|
-
# todo
|
5615
|
-
# todo
|
5616
|
-
# todo
|
5755
|
+
# @todo not used yet, but will add methods described below and others
|
5756
|
+
# @todo lower infiltration based on air loop hours of operation if air loop has outdoor air object
|
5757
|
+
# @todo lower lighting or plug loads based on occupancy at given time steps in a space
|
5758
|
+
# @todo set elevator fraction based multiple factors such as trips, occupants per trip, and elevator type to determine floor consumption when not in use.
|
5617
5759
|
props.setFeature('param_day_secondary_logic', '') # secondary logic method such as occupancy impacting schedule values
|
5618
5760
|
props.setFeature('param_day_secondary_logic_arg_val', '') # optional argument used for some secondary logic applied to values
|
5619
5761
|
|
@@ -5639,7 +5781,7 @@ class Standard
|
|
5639
5781
|
|
5640
5782
|
# Default SAT reset type
|
5641
5783
|
#
|
5642
|
-
# @param air_loop_hvac [OpenStudio::
|
5784
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
5643
5785
|
# @return [String] Returns type of SAT reset
|
5644
5786
|
def air_loop_hvac_supply_air_temperature_reset_type(air_loop_hvac)
|
5645
5787
|
return 'warmest_zone'
|