openstudio-standards 0.2.10 → 0.2.11.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/data/geometry/ASHRAE90120042007LargeHotel.osm +101 -0
- data/data/geometry/ASHRAE90120042007RetailStandalone.osm +220 -0
- data/data/geometry/ASHRAE9012010LargeHotel.osm +101 -0
- data/data/geometry/ASHRAE9012010RetailStandalone.osm +218 -32
- data/data/geometry/ASHRAE9012013FullServiceRestaurant.osm +17 -0
- data/data/geometry/ASHRAE9012013Hospital.osm +288 -0
- data/data/geometry/ASHRAE9012013LargeHotel.osm +113 -12
- data/data/geometry/ASHRAE9012013LargeOffice.osm +205 -1
- data/data/geometry/ASHRAE9012013MediumOffice.osm +103 -1
- data/data/geometry/ASHRAE9012013Outpatient.osm +390 -102
- data/data/geometry/ASHRAE9012013PrimarySchool.osm +424 -0
- data/data/geometry/ASHRAE9012013QuickServiceRestaurant.osm +16 -0
- data/data/geometry/ASHRAE9012013RetailStandalone.osm +220 -0
- data/data/geometry/ASHRAE9012013SecondarySchool.osm +543 -0
- data/data/geometry/ASHRAE9012013SmallHotel.osm +50 -0
- data/data/geometry/ASHRAE9012013SmallOffice.osm +33 -0
- data/data/geometry/ASHRAE9012013Warehouse.osm +475 -238
- data/data/geometry/ASHRAEFullServiceRestaurant.osm +16 -0
- data/data/geometry/ASHRAEHospital.osm +288 -0
- data/data/geometry/ASHRAELargeOffice.osm +205 -1
- data/data/geometry/ASHRAELargeOfficeDetailed.osm +32 -32
- data/data/geometry/ASHRAEMediumOffice.osm +103 -1
- data/data/geometry/ASHRAEOutpatient.osm +390 -102
- data/data/geometry/ASHRAEPrimarySchool.osm +424 -0
- data/data/geometry/ASHRAEQuickServiceRestaurant.osm +16 -0
- data/data/geometry/ASHRAESecondarySchool.osm +1011 -162
- data/data/geometry/ASHRAESmallHotel.osm +50 -0
- data/data/geometry/ASHRAESmallOffice.osm +33 -0
- data/data/geometry/ASHRAEWarehouse.osm +476 -238
- data/data/standards/manage_OpenStudio_Standards.rb +1 -1
- data/data/standards/openstudio_standards_duplicates_log.csv +16 -0
- data/data/standards/test_performance_expected_dd_results.csv +1216 -1216
- data/data/weather/ARE_Abu.Dhabi.412170_IWEC.ddy +536 -0
- data/data/weather/ARE_Abu.Dhabi.412170_IWEC.epw +8768 -0
- data/data/weather/ARE_Abu.Dhabi.412170_IWEC.stat +544 -0
- data/data/weather/ARE_Dubai.Intl.AP.411940_IWEC2.ddy +533 -0
- data/data/weather/ARE_Dubai.Intl.AP.411940_IWEC2.epw +8768 -0
- data/data/weather/ARE_Dubai.Intl.AP.411940_IWEC2.stat +553 -0
- data/data/weather/VNM_Hanoi.488200_IWEC.ddy +533 -0
- data/data/weather/VNM_Hanoi.488200_IWEC.epw +8768 -0
- data/data/weather/VNM_Hanoi.488200_IWEC.stat +544 -0
- data/data/weather/VNM_Ho.Chi.Minh.City-Tan.Son.Nhat.AP.489000_IWEC2.ddy +533 -0
- data/data/weather/VNM_Ho.Chi.Minh.City-Tan.Son.Nhat.AP.489000_IWEC2.epw +8768 -0
- data/data/weather/VNM_Ho.Chi.Minh.City-Tan.Son.Nhat.AP.489000_IWEC2.stat +546 -0
- data/lib/openstudio-standards.rb +27 -0
- data/lib/openstudio-standards/btap/btap.model.rb +4 -4
- data/lib/openstudio-standards/btap/btap_result.rb +8 -8
- data/lib/openstudio-standards/btap/economics.rb +11 -11
- data/lib/openstudio-standards/btap/envelope.rb +5 -5
- data/lib/openstudio-standards/btap/hvac.rb +55 -11
- data/lib/openstudio-standards/btap/measures.rb +7 -7
- data/lib/openstudio-standards/btap/spaceloads.rb +4 -4
- data/lib/openstudio-standards/hvac_sizing/Siz.AirLoopHVAC.rb +105 -1
- data/lib/openstudio-standards/hvac_sizing/Siz.ControllerOutdoorAir.rb +2 -2
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirTerminalSingleDuctVAVReheat.rb +0 -8
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirTerminalSingleDuctVAVReheat.rb +0 -8
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +0 -8
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +0 -8
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +6 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.HeatExchangerAirToAirSensibleAndLatent.rb +9 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.rb +3 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +22 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanConstantVolume.rb +32 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanOnOff.rb +33 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanVariableVolume.rb +32 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerAirToAirSensibleAndLatent.rb +9 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.elevators.rb +25 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +35 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.hvac_systems.rb +11 -0
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +17 -3
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +9 -0
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +9 -0
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOfficeDetailed.rb +22 -3
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +9 -0
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOfficeDetailed.rb +9 -0
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +107 -5
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +9 -0
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStandalone.rb +3 -0
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +9 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +0 -8
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +2 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +2 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +15 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +2 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +45 -5
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.SizingSystem.rb +21 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +251 -364
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +4 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +4 -5
- data/lib/openstudio-standards/refs/references.rb +4 -0
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +283 -97
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.BuildingStory.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +5 -5
- data/lib/openstudio-standards/standards/Standards.CoilDX.rb +3 -1
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.Construction.rb +53 -45
- data/lib/openstudio-standards/standards/Standards.Fan.rb +10 -2
- data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +4 -4
- data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.Model.rb +39 -18
- data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +8 -8
- data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +12 -12
- data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.Space.rb +190 -181
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +36 -59
- data/lib/openstudio-standards/standards/Standards.SubSurface.rb +3 -3
- data/lib/openstudio-standards/standards/Standards.Surface.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +16 -12
- data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +16 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/ashrae_90_1.schedules.json +159 -8
- 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 +1354 -1075
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +557 -17
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.economizers.json +28 -28
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ground_temperatures.json +36 -36
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +233 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/ashrae_90_1.schedules.json +159 -8
- 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 +1356 -1077
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +480 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.economizers.json +28 -28
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ground_temperatures.json +36 -36
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +241 -14
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirLoopHVAC.rb +0 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Space.rb +12 -7
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/ashrae_90_1.schedules.json +159 -8
- 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 +1367 -1087
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +480 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ground_temperatures.json +36 -36
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +233 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC.rb +20 -27
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Space.rb +8 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/ashrae_90_1.schedules.json +159 -8
- 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 +1432 -1138
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +480 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ground_temperatures.json +36 -36
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +241 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.climate_zone_sets.json +37 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.climate_zones.json +39 -15
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +489 -7
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +250 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.fans.json +12 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.materials.json +1920 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +5265 -9
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/ashrae_90_1.schedules.json +159 -8
- 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 +2441 -1925
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.construction_properties.json +16658 -2578
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +212 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.rb +11 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/ashrae_90_1.schedules.json +159 -8
- 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 +2403 -1889
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.construction_properties.json +16664 -2584
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +209 -7
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.rb +11 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.construction_properties.json +4113 -513
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.construction_sets.json +40 -40
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.elevators.json +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.ground_temperatures.json +650 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.heat_pumps.json +90 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.heat_pumps_heating.json +25 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.spc_typ.json +1909 -32
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.water_heaters.json +8 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +147 -155
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.HeatExchangerSensLat.rb +29 -10
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Model.rb +4 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +45 -73
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.ZoneHVACComponent.rb +4 -72
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.boilers.json +20 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.chillers.json +400 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.construction_properties.json +4444 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.construction_sets.json +391 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.economizers.json +536 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.elevators.json +36 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.ext_ltg.json +169 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.ground_temperatures.json +650 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.heat_pumps.json +290 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.heat_pumps_heating.json +164 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.heat_rejection.json +40 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.motors.json +274 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.prototype_inputs.json +704 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.refrigeration_compressors.json +22 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.spc_typ.json +6424 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.unitary_acs.json +142 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.water_heaters.json +72 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.water_source_heat_pumps.json +31 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.water_source_heat_pumps_heating.json +13 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirLoopHVAC.rb +829 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +24 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTower.rb +19 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerSingleSpeed.rb +5 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerTwoSpeed.rb +5 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerVariableSpeed.rb +16 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanVariableVolume.rb +37 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerSensLat.rb +34 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +80 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +68 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Space.rb +146 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.ThermalZone.rb +23 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.ZoneHVACComponent.rb +8 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.rb +16 -0
- data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.heat_pumps_heating.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.economizers.json +18 -0
- data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.heat_pumps_heating.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.heat_pumps_heating.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.heat_pumps_heating.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.heat_pumps_heating.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.heat_pumps_heating.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.heat_pumps_heating.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.heat_pumps_heating.json +1 -1
- data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.heat_pumps_heating.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.heat_pumps_heating.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.heat_pumps_heating.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.heat_pumps_heating.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.heat_pumps_heating.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.heat_pumps_heating.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.heat_pumps_heating.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.heat_pumps_heating.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.heat_pumps_heating.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.heat_pumps_heating.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.heat_pumps_heating.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.heat_pumps_heating.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.heat_pumps_heating.json +5 -5
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +5 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +5 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +5 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +8 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +12 -12
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards/weather/Weather.Model.rb +4 -0
- metadata +102 -18
- data/data/standards/OpenStudio_Standards-ashrae_90_1(space_types).xlsx +0 -0
- data/data/standards/OpenStudio_Standards-ashrae_90_1-ALL-comstock(space_types).xlsx +0 -0
- data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
- data/data/standards/OpenStudio_Standards-cbes(space_types).xlsx +0 -0
- data/data/standards/OpenStudio_Standards-cbes.xlsx +0 -0
- data/data/standards/OpenStudio_Standards-deer(space_types).xlsx +0 -0
- data/data/standards/OpenStudio_Standards-deer-ALL-comstock(space_types).xlsx +0 -0
- data/data/standards/OpenStudio_Standards-deer.xlsx +0 -0
- data/data/standards/OpenStudio_Standards_LA100.xlsx +0 -0
- data/data/standards/junk/legacy_dd_results - Copy.csv +0 -960
- data/data/standards/junk/legacy_dd_results.csv +0 -960
- data/data/standards/junk/legacy_dd_results_new - Copy.csv +0 -960
- data/data/standards/junk/legacy_dd_results_new.csv +0 -960
- data/data/standards/junk/legacy_dd_results_original.csv +0 -960
- data/lib/openstudio-standards/standards/necb/NECB2011/newway.json +0 -8102
@@ -6,7 +6,7 @@ class Standard
|
|
6
6
|
#
|
7
7
|
# @return [Bool] returns true if successful, false if not
|
8
8
|
def air_terminal_single_duct_parallel_piu_reheat_apply_prm_baseline_fan_power(air_terminal_single_duct_parallel_piu_reheat)
|
9
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.
|
9
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.AirTerminalSingleDuctParallelPIUReheat', "Setting PIU fan power for #{air_terminal_single_duct_parallel_piu_reheat.name}.")
|
10
10
|
|
11
11
|
# Determine the fan sizing flow rate, min flow rate,
|
12
12
|
# and W/cfm
|
@@ -54,7 +54,7 @@ class Standard
|
|
54
54
|
# Calculate the newly set efficacy
|
55
55
|
fan_power_new_w = fan_rise_new_pa * max_sec_flow_rate_m3_per_s / fan_tot_eff
|
56
56
|
fan_efficacy_new_w_per_cfm = fan_power_new_w / max_sec_flow_rate_cfm
|
57
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.
|
57
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirTerminalSingleDuctParallelPIUReheat', "For #{air_terminal_single_duct_parallel_piu_reheat.name}: fan efficacy set to #{fan_efficacy_new_w_per_cfm.round(2)} W/cfm.")
|
58
58
|
|
59
59
|
return true
|
60
60
|
end
|
@@ -67,7 +67,7 @@ class Standard
|
|
67
67
|
if !z_heights.empty?
|
68
68
|
z = z_heights.min
|
69
69
|
else
|
70
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.
|
70
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.BuildingStory', "For #{building_story.name} could not find the minimum_z_value, which means the story has no spaces assigned or the spaces have no surfaces.")
|
71
71
|
end
|
72
72
|
|
73
73
|
return z
|
@@ -162,7 +162,7 @@ class Standard
|
|
162
162
|
|
163
163
|
# Append the name with size and kw/ton
|
164
164
|
chiller_electric_eir.setName("#{chiller_electric_eir.name} #{capacity_tons.round}tons #{kw_per_ton.round(1)}kW/ton")
|
165
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.
|
165
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.ChillerElectricEIR', "For #{template}: #{chiller_electric_eir.name}: #{cooling_type} #{condenser_type} #{compressor_type} Capacity = #{capacity_tons.round}tons; COP = #{cop.round(1)} (#{kw_per_ton.round(1)}kW/ton)")
|
166
166
|
|
167
167
|
return successfully_set_all_properties
|
168
168
|
end
|
@@ -118,7 +118,7 @@ class Standard
|
|
118
118
|
#sensible heat ratio can't be pre-assigned as 1 because it should be the value at conditions defined in ASHRAE Standard 127 => 26.7 °C drybulb/19.4 °C wetbulb.
|
119
119
|
crac_sensible_heat_ratio = coil_cooling_dx_single_speed.autosizedRatedSensibleHeatRatio.get
|
120
120
|
else
|
121
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.
|
121
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.CoilCoolingDXSingleSpeed', 'Failed to get autosized sensible heat ratio')
|
122
122
|
end
|
123
123
|
cop = crac_minimum_scop/crac_sensible_heat_ratio
|
124
124
|
cop = cop.round(2)
|
@@ -14,7 +14,7 @@ class Standard
|
|
14
14
|
elsif coil_cooling_dx_two_speed.autosizedRatedHighSpeedTotalCoolingCapacity.is_initialized
|
15
15
|
capacity_w = coil_cooling_dx_two_speed.autosizedRatedHighSpeedTotalCoolingCapacity.get
|
16
16
|
else
|
17
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.
|
17
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{coil_cooling_dx_two_speed.name} capacity is not available, cannot apply efficiency standard.")
|
18
18
|
return 0.0
|
19
19
|
end
|
20
20
|
|
@@ -62,7 +62,7 @@ class Standard
|
|
62
62
|
min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio']
|
63
63
|
cop = seer_to_cop_cooling_with_fan(min_seer)
|
64
64
|
new_comp_name = "#{coil_cooling_dx_two_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
|
65
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.
|
65
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{template}: #{coil_cooling_dx_two_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
|
66
66
|
end
|
67
67
|
|
68
68
|
# If specified as EER
|
@@ -70,7 +70,7 @@ class Standard
|
|
70
70
|
min_eer = ac_props['minimum_energy_efficiency_ratio']
|
71
71
|
cop = eer_to_cop(min_eer)
|
72
72
|
new_comp_name = "#{coil_cooling_dx_two_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
|
73
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.
|
73
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{template}: #{coil_cooling_dx_two_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
|
74
74
|
end
|
75
75
|
|
76
76
|
# if specified as SEER (heat pump)
|
@@ -78,7 +78,7 @@ class Standard
|
|
78
78
|
min_seer = ac_props['minimum_seasonal_efficiency']
|
79
79
|
cop = seer_to_cop_cooling_with_fan(min_seer)
|
80
80
|
new_comp_name = "#{coil_cooling_dx_two_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
|
81
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.
|
81
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{template}: #{coil_cooling_dx_two_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
|
82
82
|
end
|
83
83
|
|
84
84
|
# If specified as EER (heat pump)
|
@@ -86,7 +86,7 @@ class Standard
|
|
86
86
|
min_eer = ac_props['minimum_full_load_efficiency']
|
87
87
|
cop = eer_to_cop(min_eer)
|
88
88
|
new_comp_name = "#{coil_cooling_dx_two_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
|
89
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.
|
89
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{template}: #{coil_cooling_dx_two_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
|
90
90
|
end
|
91
91
|
|
92
92
|
# Rename
|
@@ -18,8 +18,10 @@ module CoilDX
|
|
18
18
|
sub_category = 'Single Package'
|
19
19
|
elsif coil_dx.name.get.to_s.include?('Split System')
|
20
20
|
sub_category = 'Split System'
|
21
|
-
elsif coil_dx.name.get.to_s.include?('
|
21
|
+
elsif coil_dx.name.get.to_s.include?('Central Air Source HP')
|
22
22
|
sub_category = 'Split System'
|
23
|
+
elsif coil_dx.name.get.to_s.include?('Minisplit HP')
|
24
|
+
sub_category = 'Minisplit System'
|
23
25
|
elsif coil_dx.name.get.to_s.include?('CRAC')
|
24
26
|
sub_category = 'CRAC'
|
25
27
|
end
|
@@ -16,7 +16,7 @@ class Standard
|
|
16
16
|
elsif coil_heating_gas_multi_stage.autosizedStage4NominalCapacity.is_initialized
|
17
17
|
capacity_w = coil_heating_gas_multi_stage.autosizedStage4NominalCapacity.get
|
18
18
|
else
|
19
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.
|
19
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingGasMultiStage', "For #{coil_heating_gas_multi_stage.name} capacity is not available, cannot apply efficiency standard.")
|
20
20
|
successfully_set_all_properties = false
|
21
21
|
return successfully_set_all_properties
|
22
22
|
end
|
@@ -19,11 +19,11 @@ class Standard
|
|
19
19
|
# @return [Bool] returns true if successful, false if not
|
20
20
|
# @todo Put in Phlyroy's logic for inferring the insulation layer of a construction
|
21
21
|
def construction_set_u_value(construction, target_u_value_ip, insulation_layer_name = nil, intended_surface_type = 'ExteriorWall', target_includes_int_film_coefficients, target_includes_ext_film_coefficients)
|
22
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
22
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "Setting U-Value for #{construction.name}.")
|
23
23
|
|
24
24
|
# Skip layer-by-layer fenestration constructions
|
25
25
|
if construction.isFenestration
|
26
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.
|
26
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "Can only set the u-value of opaque constructions or simple glazing. #{construction.name} is not opaque or simple glazing.")
|
27
27
|
return false
|
28
28
|
end
|
29
29
|
|
@@ -45,6 +45,14 @@ class Standard
|
|
45
45
|
return true
|
46
46
|
end
|
47
47
|
|
48
|
+
min_r_value_si = film_coefficients_r_value(intended_surface_type, target_includes_int_film_coefficients, target_includes_ext_film_coefficients)
|
49
|
+
max_u_value_si = 1.0 / min_r_value_si
|
50
|
+
max_u_value_ip = OpenStudio.convert(max_u_value_si, 'W/m^2*K', 'Btu/ft^2*hr*R').get
|
51
|
+
if target_u_value_ip >= max_u_value_ip
|
52
|
+
target_u_value_ip = 1.0 / OpenStudio.convert(min_r_value_si + 0.001, 'm^2*K/W', 'ft^2*hr*R/Btu').get
|
53
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "Requested U-value of #{target_u_value_ip} for #{construction.name} is greater than the sum of the inside and outside resistance, and the max U-value (6.636 SI) is used instead.")
|
54
|
+
end
|
55
|
+
|
48
56
|
# Convert the target U-value to SI
|
49
57
|
target_u_value_ip = target_u_value_ip.to_f
|
50
58
|
target_r_value_ip = 1.0 / target_u_value_ip
|
@@ -52,11 +60,11 @@ class Standard
|
|
52
60
|
target_u_value_si = OpenStudio.convert(target_u_value_ip, 'Btu/ft^2*hr*R', 'W/m^2*K').get
|
53
61
|
target_r_value_si = 1.0 / target_u_value_si
|
54
62
|
|
55
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
56
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
57
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
58
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
59
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
63
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "#{construction.name}.")
|
64
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---target_u_value_ip = #{target_u_value_ip.round(3)} for #{construction.name}.")
|
65
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---target_r_value_ip = #{target_r_value_ip.round(2)} for #{construction.name}.")
|
66
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---target_u_value_si = #{target_u_value_si.round(3)} for #{construction.name}.")
|
67
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---target_r_value_si = #{target_r_value_si.round(2)} for #{construction.name}.")
|
60
68
|
|
61
69
|
# Determine the R-value of the non-insulation layers
|
62
70
|
other_layer_r_value_si = 0.0
|
@@ -74,7 +82,7 @@ class Standard
|
|
74
82
|
# This is the desired R-value of the insulation.
|
75
83
|
ins_r_value_si = target_r_value_si - other_layer_r_value_si
|
76
84
|
if ins_r_value_si <= 0.0
|
77
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.
|
85
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "Requested U-value of #{target_u_value_ip} for #{construction.name} is too low given the other materials in the construction; insulation layer will not be modified.")
|
78
86
|
return false
|
79
87
|
end
|
80
88
|
ins_r_value_ip = OpenStudio.convert(ins_r_value_si, 'm^2*K/W', 'ft^2*h*R/Btu').get
|
@@ -84,7 +92,7 @@ class Standard
|
|
84
92
|
next unless layer.name.get == insulation_layer_name
|
85
93
|
if layer.to_StandardOpaqueMaterial.is_initialized
|
86
94
|
layer = layer.to_StandardOpaqueMaterial.get
|
87
|
-
layer.setThickness(ins_r_value_si * layer.
|
95
|
+
layer.setThickness(ins_r_value_si * layer.conductivity)
|
88
96
|
layer.setName("#{layer.name} R-#{ins_r_value_ip.round(2)}")
|
89
97
|
break # Stop looking for the insulation layer once found
|
90
98
|
elsif layer.to_MasslessOpaqueMaterial.is_initialized
|
@@ -123,16 +131,16 @@ class Standard
|
|
123
131
|
# target_u_value before modifying insulation thickness. Film values from 90.1-2010 A9.4.1 Air Films
|
124
132
|
# @return [Bool] returns true if successful, false if not
|
125
133
|
def construction_set_glazing_u_value(construction, target_u_value_ip, intended_surface_type = 'ExteriorWall', target_includes_int_film_coefficients, target_includes_ext_film_coefficients)
|
126
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
134
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "Setting U-Value for #{construction.name}.")
|
127
135
|
|
128
136
|
# Skip layer-by-layer fenestration constructions
|
129
137
|
unless construction_simple_glazing?(construction)
|
130
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.
|
138
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "Can only set the u-value of simple glazing. #{construction.name} is not simple glazing.")
|
131
139
|
return false
|
132
140
|
end
|
133
141
|
|
134
142
|
glass_layer = construction.layers.first.to_SimpleGlazing.get
|
135
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
143
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---glass_layer = #{glass_layer.name} u_factor_si = #{glass_layer.uFactor.round(2)}.")
|
136
144
|
|
137
145
|
# Convert the target U-value to SI
|
138
146
|
target_u_value_ip = target_u_value_ip.to_f
|
@@ -141,11 +149,11 @@ class Standard
|
|
141
149
|
target_u_value_si = OpenStudio.convert(target_u_value_ip, 'Btu/ft^2*hr*R', 'W/m^2*K').get
|
142
150
|
target_r_value_si = 1.0 / target_u_value_si
|
143
151
|
|
144
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
145
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
146
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
147
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
148
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
152
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "#{construction.name}.")
|
153
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---target_u_value_ip = #{target_u_value_ip.round(3)} for #{construction.name}.")
|
154
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---target_r_value_ip = #{target_r_value_ip.round(2)} for #{construction.name}.")
|
155
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---target_u_value_si = #{target_u_value_si.round(3)} for #{construction.name}.")
|
156
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---target_r_value_si = #{target_r_value_si.round(2)} for #{construction.name}.")
|
149
157
|
|
150
158
|
# Determine the R-value of the air films, if requested
|
151
159
|
film_coeff_r_value_si = 0.0
|
@@ -154,23 +162,23 @@ class Standard
|
|
154
162
|
film_coeff_u_value_ip = OpenStudio.convert(film_coeff_u_value_si, 'W/m^2*K', 'Btu/ft^2*hr*R').get
|
155
163
|
film_coeff_r_value_ip = 1.0 / film_coeff_u_value_ip
|
156
164
|
|
157
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
158
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
159
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
160
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
165
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---film_coeff_r_value_si = #{film_coeff_r_value_si.round(2)} for #{construction.name}.")
|
166
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---film_coeff_u_value_si = #{film_coeff_u_value_si.round(2)} for #{construction.name}.")
|
167
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---film_coeff_u_value_ip = #{film_coeff_u_value_ip.round(2)} for #{construction.name}.")
|
168
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---film_coeff_r_value_ip = #{film_coeff_r_value_ip.round(2)} for #{construction.name}.")
|
161
169
|
|
162
170
|
# Determine the difference between the desired R-value
|
163
171
|
# and the R-value of the and air films.
|
164
172
|
# This is the desired R-value of the insulation.
|
165
173
|
ins_r_value_si = target_r_value_si - film_coeff_r_value_si
|
166
174
|
if ins_r_value_si <= 0.0
|
167
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.
|
175
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "Requested U-value of #{target_u_value_ip} Btu/ft^2*hr*R for #{construction.name} is too high given the film coefficients of U-#{film_coeff_u_value_ip.round(2)} Btu/ft^2*hr*R; U-value will not be modified.")
|
168
176
|
return false
|
169
177
|
end
|
170
178
|
ins_u_value_si = 1.0 / ins_r_value_si
|
171
179
|
|
172
180
|
if ins_u_value_si > 7.0
|
173
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.
|
181
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "Requested U-value of #{target_u_value_ip} for #{construction.name} is too high given the film coefficients of U-#{film_coeff_u_value_ip.round(2)}; setting U-value to EnergyPlus limit of 7.0 W/m^2*K (1.23 Btu/ft^2*hr*R).")
|
174
182
|
ins_u_value_si = 7.0
|
175
183
|
end
|
176
184
|
|
@@ -182,10 +190,10 @@ class Standard
|
|
182
190
|
glass_layer.setUFactor(ins_u_value_si)
|
183
191
|
glass_layer.setName("#{glass_layer.name} U-#{ins_u_value_ip.round(2)}")
|
184
192
|
|
185
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
186
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
187
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
188
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
193
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---ins_r_value_ip = #{ins_r_value_ip.round(2)} for #{construction.name}.")
|
194
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---ins_u_value_ip = #{ins_u_value_ip.round(2)} for #{construction.name}.")
|
195
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---ins_u_value_si = #{ins_u_value_si.round(2)} for #{construction.name}.")
|
196
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "---glass_layer = #{glass_layer.name} u_factor_si = #{glass_layer.uFactor.round(2)}.")
|
189
197
|
|
190
198
|
# Modify the construction name
|
191
199
|
construction.setName("#{construction.name} U-#{target_u_value_ip.round(2)}")
|
@@ -199,11 +207,11 @@ class Standard
|
|
199
207
|
# @param target_shgc [Double] Solar Heat Gain Coefficient
|
200
208
|
# @return [Bool] returns true if successful, false if not
|
201
209
|
def construction_set_glazing_shgc(construction, target_shgc)
|
202
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
210
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "Setting SHGC for #{construction.name}.")
|
203
211
|
|
204
212
|
# Skip layer-by-layer fenestration constructions
|
205
213
|
unless construction_simple_glazing?(construction)
|
206
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.
|
214
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "Can only set the SHGC of simple glazing. #{construction.name} is not simple glazing.")
|
207
215
|
return false
|
208
216
|
end
|
209
217
|
|
@@ -305,7 +313,7 @@ class Standard
|
|
305
313
|
if row_id.is_initialized
|
306
314
|
row_id = row_id.get
|
307
315
|
else
|
308
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.
|
316
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "SHGC row ID not found for construction: #{construction_name}.")
|
309
317
|
row_id = 9999
|
310
318
|
end
|
311
319
|
|
@@ -355,7 +363,7 @@ class Standard
|
|
355
363
|
if row_id.is_initialized
|
356
364
|
row_id = row_id.get
|
357
365
|
else
|
358
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.
|
366
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "VT row ID not found for construction: #{construction_name}.")
|
359
367
|
row_id = 9999
|
360
368
|
end
|
361
369
|
|
@@ -374,7 +382,7 @@ class Standard
|
|
374
382
|
end
|
375
383
|
|
376
384
|
else
|
377
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.
|
385
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Construction', 'Model has no sql file containing results, cannot lookup data.')
|
378
386
|
end
|
379
387
|
|
380
388
|
return vt
|
@@ -405,7 +413,7 @@ class Standard
|
|
405
413
|
if row_id.is_initialized
|
406
414
|
row_id = row_id.get
|
407
415
|
else
|
408
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.
|
416
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "U-Factor row ID not found for construction: #{construction_name}.")
|
409
417
|
row_id = 9999
|
410
418
|
end
|
411
419
|
|
@@ -456,7 +464,7 @@ class Standard
|
|
456
464
|
end
|
457
465
|
if construction.insulation.empty? and construction.isOpaque
|
458
466
|
raise ()
|
459
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.
|
467
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Construction', "This construction has no insulation layer specified. Construction #{construction.name.get.to_s} insulation layer could not be set!. This occurs when a insulation layer is duplicated in the construction.")
|
460
468
|
end
|
461
469
|
else
|
462
470
|
return construction.insulation.get
|
@@ -518,21 +526,21 @@ class Standard
|
|
518
526
|
end
|
519
527
|
|
520
528
|
def apply_changes_to_surface_construction(model, surface, conductance = nil, shgc = nil, tvis = nil, is_percentage = false)
|
521
|
-
#If user has no changes...do nothing and return true.
|
529
|
+
# If user has no changes...do nothing and return true.
|
522
530
|
return true if conductance.nil? and shgc.nil? and tvis.nil?
|
523
531
|
standard = Standard.new()
|
524
532
|
construction = OpenStudio::Model::getConstructionByName(surface.model, surface.construction.get.name.to_s).get
|
525
533
|
|
526
|
-
#set initial targets
|
534
|
+
# set initial targets
|
527
535
|
target_u_value_si = conductance
|
528
536
|
target_shgc = shgc
|
529
537
|
target_tvis = tvis
|
530
|
-
#Mulitply by percentages if required.
|
531
|
-
if
|
532
|
-
target_u_value_si = target_u_value_si / 100.0
|
533
|
-
if
|
534
|
-
target_shgc = target_shgc / 100.0 * construction.layers.first.to_SimpleGlazing.get.
|
535
|
-
target_tvis = target_tvis / 100.0 * construction.layers.first.to_SimpleGlazing.get.setVisibleTransmittance
|
538
|
+
# Mulitply by percentages if required.
|
539
|
+
if is_percentage
|
540
|
+
target_u_value_si = target_u_value_si / 100.0 * BTAP::Resources::Envelope::Constructions.get_conductance(construction) unless conductance.nil?
|
541
|
+
if standard.construction_simple_glazing?(construction)
|
542
|
+
target_shgc = target_shgc / 100.0 * construction.layers.first.to_SimpleGlazing.get.solarHeatGainCoefficient unless target_shgc.nil?
|
543
|
+
target_tvis = target_tvis / 100.0 * construction.layers.first.to_SimpleGlazing.get.setVisibleTransmittance unless target_tvis.nil?
|
536
544
|
end
|
537
545
|
end
|
538
546
|
|
@@ -645,15 +653,15 @@ class Standard
|
|
645
653
|
# @return [Bool] returns true if successful, false if not
|
646
654
|
def construction_set_glazing_tvis(construction, target_tvis)
|
647
655
|
if target_tvis >= 1.0
|
648
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.
|
656
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Construction', "Can only set the Tvis can only be set to less than 1.0. #{target_tvis} is greater than 1.0")
|
649
657
|
return false
|
650
658
|
end
|
651
659
|
|
652
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
660
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Construction', "Setting TVis for #{construction.name} to #{target_tvis}")
|
653
661
|
standard = Standard.new()
|
654
662
|
# Skip layer-by-layer fenestration constructions
|
655
663
|
unless standard.construction_simple_glazing?(construction)
|
656
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.
|
664
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Construction', "Can only set the Tvis of simple glazing. #{construction.name} is not simple glazing.")
|
657
665
|
return false
|
658
666
|
end
|
659
667
|
|
@@ -22,7 +22,7 @@ module Fan
|
|
22
22
|
# zone exhaust, fan coil, and fan powered terminals.
|
23
23
|
# In this case, 0.5 HP is used for the lookup.
|
24
24
|
if fan_small_fan?(fan)
|
25
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Fan', "For #{fan.name}: motor eff = #{(motor_eff * 100).round(2)}%; assumed to represent several
|
25
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Fan', "For #{fan.name}: motor eff = #{(motor_eff * 100).round(2)}%; assumed to represent several less than 1 HP motors.")
|
26
26
|
else
|
27
27
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Fan', "For #{fan.name}: motor nameplate = #{nominal_hp}HP, motor eff = #{(motor_eff * 100).round(2)}%.")
|
28
28
|
end
|
@@ -282,15 +282,23 @@ module Fan
|
|
282
282
|
# Exhaust fan
|
283
283
|
if fan.to_FanZoneExhaust.is_initialized
|
284
284
|
is_small = true
|
285
|
-
# Fan coil unit, unit heater, PTAC, PTHP
|
285
|
+
# Fan coil unit, unit heater, PTAC, PTHP, VRF terminals, WSHP, ERV
|
286
286
|
elsif fan.containingZoneHVACComponent.is_initialized
|
287
287
|
zone_hvac = fan.containingZoneHVACComponent.get
|
288
288
|
if zone_hvac.to_ZoneHVACFourPipeFanCoil.is_initialized
|
289
289
|
is_small = true
|
290
|
+
# elsif zone_hvac.to_ZoneHVACUnitHeater.is_initialized
|
291
|
+
# is_small = true
|
290
292
|
elsif zone_hvac.to_ZoneHVACPackagedTerminalAirConditioner.is_initialized
|
291
293
|
is_small = true
|
292
294
|
elsif zone_hvac.to_ZoneHVACPackagedTerminalHeatPump.is_initialized
|
293
295
|
is_small = true
|
296
|
+
elsif zone_hvac.to_ZoneHVACTerminalUnitVariableRefrigerantFlow.is_initialized
|
297
|
+
is_small = true
|
298
|
+
elsif zone_hvac.to_ZoneHVACWaterToAirHeatPump.is_initialized
|
299
|
+
is_small = true
|
300
|
+
elsif zone_hvac.to_ZoneHVACEnergyRecoveryVentilator.is_initialized
|
301
|
+
is_small = true
|
294
302
|
end
|
295
303
|
# Powered VAV terminal
|
296
304
|
elsif fan.containingHVACComponent.is_initialized
|
@@ -136,7 +136,7 @@ class Standard
|
|
136
136
|
if hp_limit && cap_limit_btu_per_hr
|
137
137
|
air_loop = fan_variable_volume.airLoopHVAC
|
138
138
|
unless air_loop.is_initialized
|
139
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.
|
139
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.FanVariableVolume', "For #{fan_variable_volume.name}: Could not find the air loop to get cooling capacity for determining part load fan power control requirement.")
|
140
140
|
return part_load_control_required
|
141
141
|
end
|
142
142
|
air_loop = air_loop.get
|
@@ -144,13 +144,13 @@ class Standard
|
|
144
144
|
clg_cap_btu_per_hr = OpenStudio.convert(clg_cap_w, 'W', 'Btu/hr').get
|
145
145
|
fan_hp = fan_motor_horsepower(fan_variable_volume)
|
146
146
|
if fan_hp >= hp_limit && clg_cap_btu_per_hr >= cap_limit_btu_per_hr
|
147
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.
|
147
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.FanVariableVolume', "For #{fan_variable_volume.name}: part load fan power control is required for #{fan_hp.round(1)} HP fan, #{clg_cap_btu_per_hr.round} Btu/hr cooling capacity.")
|
148
148
|
part_load_control_required = true
|
149
149
|
end
|
150
150
|
elsif hp_limit
|
151
151
|
fan_hp = fan_motor_horsepower(fan_variable_volume)
|
152
152
|
if fan_hp >= hp_limit
|
153
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.
|
153
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.FanVariableVolume', "For #{fan_variable_volume.name}: Part load fan power control is required for #{fan_hp.round(1)} HP fan.")
|
154
154
|
part_load_control_required = true
|
155
155
|
end
|
156
156
|
end
|
@@ -252,7 +252,7 @@ class Standard
|
|
252
252
|
sc.to_AirLoopHVACUnitaryHeatCoolVAVChangeoverBypass.is_initialized ||
|
253
253
|
sc.to_AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed.is_initialized ||
|
254
254
|
sc.to_AirLoopHVACUnitarySystem.is_initialized
|
255
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.
|
255
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.FanVariableVolume', "#{air_loop.name} has a cooling coil named #{sc.name}, whose type is not yet covered by cooling system type checks.")
|
256
256
|
end
|
257
257
|
end
|
258
258
|
|
@@ -16,7 +16,7 @@ class Standard
|
|
16
16
|
heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(min_effct)
|
17
17
|
heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(min_effct)
|
18
18
|
|
19
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.
|
19
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.HeatExchangerSensLat', "For #{heat_exchanger_air_to_air_sensible_and_latent.name}: Set sensible and latent effectiveness to #{(min_effct * 100).round}%.")
|
20
20
|
|
21
21
|
return true
|
22
22
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
require 'csv'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
3
|
class Standard
|
6
4
|
attr_accessor :space_multiplier_map
|
7
5
|
attr_accessor :standards_data
|
@@ -90,6 +88,9 @@ class Standard
|
|
90
88
|
# Remove all HVAC from model, excluding service water heating
|
91
89
|
model_remove_prm_hvac(model)
|
92
90
|
|
91
|
+
# Remove all EMS objects from the model
|
92
|
+
model_remove_prm_ems_objects(model)
|
93
|
+
|
93
94
|
# Modify the service water heating loops per the baseline rules
|
94
95
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', '*** Cleaning up Service Water Heating Loops ***')
|
95
96
|
model_apply_baseline_swh_loops(model, building_type)
|
@@ -1245,7 +1246,7 @@ class Standard
|
|
1245
1246
|
array_of_zones = model_eliminate_outlier_zones(model, array_of_zones, key_to_inspect, tolerance, field_name, units)
|
1246
1247
|
else
|
1247
1248
|
zn_name = array_of_zones[biggest_delta_i]['zone'].name.get.to_s
|
1248
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "For zone #{zn_name}, the #{field_name} #{worst.round(2)} #{units} - average #{field_name} #{avg.round(2)} #{units} = #{biggest_delta.round(2)} #{units}
|
1249
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "For zone #{zn_name}, the #{field_name} #{worst.round(2)} #{units} - average #{field_name} #{avg.round(2)} #{units} = #{biggest_delta.round(2)} #{units} less than the tolerance of #{tolerance} #{units}, stopping elimination process.")
|
1249
1250
|
end
|
1250
1251
|
|
1251
1252
|
return array_of_zones
|
@@ -1261,7 +1262,7 @@ class Standard
|
|
1261
1262
|
# @return [Hash] A hash of two arrays of ThermalZones,
|
1262
1263
|
# where the keys are 'primary' and 'secondary'
|
1263
1264
|
def model_differentiate_primary_secondary_thermal_zones(model, zones)
|
1264
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.
|
1265
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', 'Determining which zones are served by the primary vs. secondary HVAC system.')
|
1265
1266
|
|
1266
1267
|
# Determine the operational hours (proxy is annual
|
1267
1268
|
# full load lighting hours) for all zones
|
@@ -1365,10 +1366,10 @@ class Standard
|
|
1365
1366
|
|
1366
1367
|
# Report out the primary vs. secondary zones
|
1367
1368
|
unless pri_zone_names.empty?
|
1368
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.
|
1369
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "Primary system zones = #{pri_zone_names.join(', ')}.")
|
1369
1370
|
end
|
1370
1371
|
unless sec_zone_names.empty?
|
1371
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.
|
1372
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "Secondary system zones = #{sec_zone_names.join(', ')}.")
|
1372
1373
|
end
|
1373
1374
|
|
1374
1375
|
return { 'primary' => pri_zones, 'secondary' => sec_zones }
|
@@ -1391,7 +1392,7 @@ class Standard
|
|
1391
1392
|
if space.thermalZone.is_initialized
|
1392
1393
|
all_zones_on_story << space.thermalZone.get
|
1393
1394
|
else
|
1394
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.
|
1395
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Model', "Space #{space.name} has no thermal zone, it is not included in the simulation.")
|
1395
1396
|
end
|
1396
1397
|
end
|
1397
1398
|
|
@@ -1449,7 +1450,7 @@ class Standard
|
|
1449
1450
|
if space_obj.buildingStory.empty?
|
1450
1451
|
story = model_get_story_for_nominal_z_coordinate(model, space_minz)
|
1451
1452
|
space_obj.setBuildingStory(story)
|
1452
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.
|
1453
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Model', "Space #{space[0].name} was not assigned to a story by the user. It has been assigned to #{story.name}.")
|
1453
1454
|
end
|
1454
1455
|
end
|
1455
1456
|
|
@@ -1473,7 +1474,7 @@ class Standard
|
|
1473
1474
|
def model_apply_hvac_efficiency_standard(model, climate_zone, apply_controls: true)
|
1474
1475
|
sql_db_vars_map = {}
|
1475
1476
|
|
1476
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model',
|
1477
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', "Started applying HVAC efficiency standards for #{template} template.")
|
1477
1478
|
|
1478
1479
|
# Air Loop Controls
|
1479
1480
|
if apply_controls.nil? || apply_controls == true
|
@@ -1503,7 +1504,7 @@ class Standard
|
|
1503
1504
|
|
1504
1505
|
# Unitary HPs
|
1505
1506
|
# set DX HP coils before DX clg coils because when DX HP coils need to first
|
1506
|
-
# pull the capacities of their
|
1507
|
+
# pull the capacities of their paired DX clg coils, and this does not work
|
1507
1508
|
# correctly if the DX clg coil efficiencies have been set because they are renamed.
|
1508
1509
|
model.getCoilHeatingDXSingleSpeeds.sort.each { |obj| sql_db_vars_map = coil_heating_dx_single_speed_apply_efficiency_and_curves(obj, sql_db_vars_map) }
|
1509
1510
|
|
@@ -3160,7 +3161,7 @@ class Standard
|
|
3160
3161
|
ext_subsurfs.empty? ||
|
3161
3162
|
int_subsurfs.empty?
|
3162
3163
|
|
3163
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Space', "Default construction set #{const_set.name} is incomplete;
|
3164
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Space', "Default construction set #{const_set.name} is incomplete; constructions from this set will not be reported.")
|
3164
3165
|
next
|
3165
3166
|
end
|
3166
3167
|
|
@@ -3778,6 +3779,26 @@ class Standard
|
|
3778
3779
|
return true
|
3779
3780
|
end
|
3780
3781
|
|
3782
|
+
# Remove EMS objects that may be orphaned from removing HVAC
|
3783
|
+
#
|
3784
|
+
# @return [Bool] true if successful, false if not
|
3785
|
+
def model_remove_prm_ems_objects(model)
|
3786
|
+
model.getEnergyManagementSystemActuators(&:remove)
|
3787
|
+
model.getEnergyManagementSystemConstructionIndexVariables(&:remove)
|
3788
|
+
model.getEnergyManagementSystemCurveOrTableIndexVariables(&:remove)
|
3789
|
+
model.getEnergyManagementSystemGlobalVariables(&:remove)
|
3790
|
+
model.getEnergyManagementSystemInternalVariables(&:remove)
|
3791
|
+
model.getEnergyManagementSystemMeteredOutputVariables(&:remove)
|
3792
|
+
model.getEnergyManagementSystemOutputVariables(&:remove)
|
3793
|
+
model.getEnergyManagementSystemPrograms(&:remove)
|
3794
|
+
model.getEnergyManagementSystemProgramCallingManagers(&:remove)
|
3795
|
+
model.getEnergyManagementSystemSensors(&:remove)
|
3796
|
+
model.getEnergyManagementSystemSubroutines(&:remove)
|
3797
|
+
model.getEnergyManagementSystemTrendVariables(&:remove)
|
3798
|
+
|
3799
|
+
return true
|
3800
|
+
end
|
3801
|
+
|
3781
3802
|
# Remove external shading devices. Site shading will not be impacted.
|
3782
3803
|
# @return [Bool] returns true if successful, false if not.
|
3783
3804
|
def model_remove_external_shading_devices(model)
|
@@ -4017,9 +4038,9 @@ class Standard
|
|
4017
4038
|
|
4018
4039
|
# Check the results
|
4019
4040
|
if possible_climate_zone_sets.size.zero?
|
4020
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Cannot find a climate zone set containing #{clim}")
|
4041
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Cannot find a climate zone set containing #{clim}. Make sure to use ASHRAE standards with ASHRAE climate zones and DEER or CA Title 24 standards with CEC climate zones.")
|
4021
4042
|
elsif possible_climate_zone_sets.size > 2
|
4022
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Found more than 2 climate zone sets containing #{clim}; will return last matching
|
4043
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Found more than 2 climate zone sets containing #{clim}; will return last matching climate zone set.")
|
4023
4044
|
end
|
4024
4045
|
|
4025
4046
|
# Get the climate zone from the possible set
|
@@ -4027,7 +4048,7 @@ class Standard
|
|
4027
4048
|
|
4028
4049
|
# Check that a climate zone set was found
|
4029
4050
|
if climate_zone_set.nil?
|
4030
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Cannot find a climate zone set
|
4051
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Cannot find a climate zone set in standard #{template}")
|
4031
4052
|
end
|
4032
4053
|
|
4033
4054
|
return climate_zone_set
|
@@ -4288,7 +4309,7 @@ class Standard
|
|
4288
4309
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "For #{space_type.name}, number of meals = #{num_meals}.") unless num_meals.nil?
|
4289
4310
|
|
4290
4311
|
else
|
4291
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "Cannot identify standards
|
4312
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "Cannot identify standards building type and space type for #{space_type.name}, it won't be added to space_type_hash.")
|
4292
4313
|
end
|
4293
4314
|
end
|
4294
4315
|
|
@@ -4503,7 +4524,7 @@ class Standard
|
|
4503
4524
|
end
|
4504
4525
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Finished adding geometry')
|
4505
4526
|
unless @space_multiplier_map.empty?
|
4506
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', "Found
|
4527
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', "Found multipliers for space #{@space_multiplier_map}")
|
4507
4528
|
end
|
4508
4529
|
return is_valid
|
4509
4530
|
end
|
@@ -4897,7 +4918,7 @@ class Standard
|
|
4897
4918
|
# for now don't look at schedules without targets, in future can alter these by looking at building level hours of operation
|
4898
4919
|
next if not sch.directUseCount > 0 # won't catch if used for space type load instance, but that space type isn't used
|
4899
4920
|
# todo - address schedules that fall into this category, if they are used in the model
|
4900
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.
|
4921
|
+
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.")
|
4901
4922
|
next
|
4902
4923
|
end
|
4903
4924
|
|
@@ -5370,7 +5391,7 @@ class Standard
|
|
5370
5391
|
if percent_change.abs > 0.05
|
5371
5392
|
# todo - this estimation can have flaws. Fix or remove it, make sure to update for secondary logic (if we implement that here)
|
5372
5393
|
# post application checks compares against actual instead of estimated values
|
5373
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.
|
5394
|
+
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)}")
|
5374
5395
|
end
|
5375
5396
|
|
5376
5397
|
raw_string = []
|