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
@@ -983,7 +983,11 @@ class Standard
|
|
983
983
|
sizing_system.setAllOutdoorAirinCooling(true)
|
984
984
|
sizing_system.setAllOutdoorAirinHeating(true)
|
985
985
|
# set minimum airflow ratio to 1.0 to avoid under-sizing heating coil
|
986
|
-
|
986
|
+
if model.version < OpenStudio::VersionString.new('2.7.0')
|
987
|
+
sizing_system.setMinimumSystemAirFlowRatio(1.0)
|
988
|
+
else
|
989
|
+
sizing_system.setCentralHeatingMaximumSystemAirFlowRatio(1.0)
|
990
|
+
end
|
987
991
|
sizing_system.setSizingOption('Coincident')
|
988
992
|
sizing_system.setCentralCoolingDesignSupplyAirTemperature(clg_dsgn_sup_air_temp_c)
|
989
993
|
sizing_system.setCentralHeatingDesignSupplyAirTemperature(htg_dsgn_sup_air_temp_c)
|
@@ -1143,7 +1147,6 @@ class Standard
|
|
1143
1147
|
# @param econo_ctrl_mthd [String] economizer control type, default is Fixed Dry Bulb
|
1144
1148
|
# If enabled, the DOAS will be sized for twice the ventilation minimum to allow economizing
|
1145
1149
|
# @param include_exhaust_fan [Bool] if true, include an exhaust fan
|
1146
|
-
# @param energy_recovery [Bool] if true, an ERV will be added to the system
|
1147
1150
|
# @param clg_dsgn_sup_air_temp [Double] design cooling supply air temperature in degrees Fahrenheit, default 65F
|
1148
1151
|
# @param htg_dsgn_sup_air_temp [Double] design heating supply air temperature in degrees Fahrenheit, default 75F
|
1149
1152
|
# @return [OpenStudio::Model::AirLoopHVAC] the resulting DOAS air loop
|
@@ -1159,7 +1162,6 @@ class Standard
|
|
1159
1162
|
fan_maximum_flow_rate: nil,
|
1160
1163
|
econo_ctrl_mthd: 'NoEconomizer',
|
1161
1164
|
include_exhaust_fan: true,
|
1162
|
-
energy_recovery: true,
|
1163
1165
|
demand_control_ventilation: false,
|
1164
1166
|
doas_control_strategy: 'NeutralSupplyAir',
|
1165
1167
|
clg_dsgn_sup_air_temp: 60.0,
|
@@ -1212,7 +1214,11 @@ class Standard
|
|
1212
1214
|
sizing_system.setAllOutdoorAirinCooling(true)
|
1213
1215
|
sizing_system.setAllOutdoorAirinHeating(true)
|
1214
1216
|
# set minimum airflow ratio to 1.0 to avoid under-sizing heating coil
|
1215
|
-
|
1217
|
+
if model.version < OpenStudio::VersionString.new('2.7.0')
|
1218
|
+
sizing_system.setMinimumSystemAirFlowRatio(1.0)
|
1219
|
+
else
|
1220
|
+
sizing_system.setCentralHeatingMaximumSystemAirFlowRatio(1.0)
|
1221
|
+
end
|
1216
1222
|
sizing_system.setSizingOption('Coincident')
|
1217
1223
|
sizing_system.setCentralCoolingDesignSupplyAirTemperature(clg_dsgn_sup_air_temp_c)
|
1218
1224
|
sizing_system.setCentralHeatingDesignSupplyAirTemperature(htg_dsgn_sup_air_temp_c)
|
@@ -1323,9 +1329,9 @@ class Standard
|
|
1323
1329
|
fan_name: 'DOAS Exhaust Fan',
|
1324
1330
|
end_use_subcategory: 'DOAS Fans')
|
1325
1331
|
end
|
1326
|
-
# set pressure rise 0
|
1327
|
-
exhaust_fan_pressure_rise = supply_fan.pressureRise - OpenStudio.convert(0
|
1328
|
-
exhaust_fan_pressure_rise = OpenStudio.convert(0
|
1332
|
+
# set pressure rise 1.0 inH2O lower than supply fan, 1.0 inH2O minimum
|
1333
|
+
exhaust_fan_pressure_rise = supply_fan.pressureRise - OpenStudio.convert(1.0, 'inH_{2}O', 'Pa').get
|
1334
|
+
exhaust_fan_pressure_rise = OpenStudio.convert(1.0, 'inH_{2}O', 'Pa').get if exhaust_fan_pressure_rise < OpenStudio.convert(1.0, 'inH_{2}O', 'Pa').get
|
1329
1335
|
exhaust_fan.setPressureRise(exhaust_fan_pressure_rise)
|
1330
1336
|
exhaust_fan.addToNode(air_loop.supplyInletNode)
|
1331
1337
|
end
|
@@ -1344,40 +1350,6 @@ class Standard
|
|
1344
1350
|
air_loop.setAvailabilitySchedule(hvac_op_sch)
|
1345
1351
|
air_loop.setNightCycleControlType('CycleOnAnyZoneFansOnly')
|
1346
1352
|
|
1347
|
-
# add energy recovery if requested
|
1348
|
-
if energy_recovery
|
1349
|
-
# Get the OA system and its outboard OA node
|
1350
|
-
oa_system = air_loop.airLoopHVACOutdoorAirSystem.get
|
1351
|
-
|
1352
|
-
# create the ERV and set its properties
|
1353
|
-
erv = OpenStudio::Model::HeatExchangerAirToAirSensibleAndLatent.new(model)
|
1354
|
-
erv.setName("#{air_loop.name} Heat Exchanger")
|
1355
|
-
erv.addToNode(oa_system.outboardOANode.get)
|
1356
|
-
erv.setHeatExchangerType('Rotary')
|
1357
|
-
erv.setSupplyAirOutletTemperatureControl(false)
|
1358
|
-
erv.setSensibleEffectivenessat100HeatingAirFlow(0.76)
|
1359
|
-
erv.setSensibleEffectivenessat75HeatingAirFlow(0.81)
|
1360
|
-
erv.setLatentEffectivenessat100HeatingAirFlow(0.68)
|
1361
|
-
erv.setLatentEffectivenessat75HeatingAirFlow(0.73)
|
1362
|
-
erv.setSensibleEffectivenessat100CoolingAirFlow(0.76)
|
1363
|
-
erv.setSensibleEffectivenessat75CoolingAirFlow(0.81)
|
1364
|
-
erv.setLatentEffectivenessat100CoolingAirFlow(0.68)
|
1365
|
-
erv.setLatentEffectivenessat75CoolingAirFlow(0.73)
|
1366
|
-
erv.setEconomizerLockout(true)
|
1367
|
-
# TODO: estimate ERV motor power which might require knowing airflow (like prototype buildings do)
|
1368
|
-
# erv.setNominalElectricPower(value_new)
|
1369
|
-
# TODO: set erv defrost control
|
1370
|
-
|
1371
|
-
# increase fan static pressure to account for ERV
|
1372
|
-
erv_pressure_rise = OpenStudio.convert(1.0, 'inH_{2}O', 'Pa').get
|
1373
|
-
supply_fan_new_pressure_rise = supply_fan.pressureRise + erv_pressure_rise
|
1374
|
-
supply_fan.setPressureRise(supply_fan_new_pressure_rise)
|
1375
|
-
if include_exhaust_fan
|
1376
|
-
exhaust_fan_new_pressure_rise = exhaust_fan.pressureRise + erv_pressure_rise
|
1377
|
-
supply_fan.setPressureRise(exhaust_fan_new_pressure_rise)
|
1378
|
-
end
|
1379
|
-
end
|
1380
|
-
|
1381
1353
|
# add thermal zones to airloop
|
1382
1354
|
thermal_zones.each do |zone|
|
1383
1355
|
# skip zones with no outdoor air flow rate
|
@@ -1401,18 +1373,46 @@ class Standard
|
|
1401
1373
|
# VAV reheat terminal
|
1402
1374
|
air_terminal = OpenStudio::Model::AirTerminalSingleDuctVAVReheat.new(model, model.alwaysOnDiscreteSchedule, rht_coil)
|
1403
1375
|
air_terminal.setZoneMinimumAirFlowMethod('Constant')
|
1404
|
-
air_terminal.setControlForOutdoorAir(true) if demand_control_ventilation
|
1405
|
-
else
|
1376
|
+
air_terminal.setControlForOutdoorAir(true) if demand_control_ventilation
|
1377
|
+
else # 'DOASVAV'
|
1406
1378
|
air_terminal = OpenStudio::Model::AirTerminalSingleDuctVAVNoReheat.new(model, model.alwaysOnDiscreteSchedule)
|
1407
1379
|
air_terminal.setZoneMinimumAirFlowInputMethod('Constant')
|
1408
1380
|
air_terminal.setConstantMinimumAirFlowFraction(0.1)
|
1409
|
-
air_terminal.setControlForOutdoorAir(true) if demand_control_ventilation
|
1381
|
+
air_terminal.setControlForOutdoorAir(true) if demand_control_ventilation
|
1410
1382
|
end
|
1411
1383
|
air_terminal.setName("#{zone.name} Air Terminal")
|
1412
1384
|
|
1413
1385
|
# attach new terminal to the zone and to the airloop
|
1414
1386
|
air_loop.multiAddBranchForZone(zone, air_terminal.to_HVACComponent.get)
|
1415
1387
|
|
1388
|
+
# ensure the DOAS takes priority, so ventilation load is included when treated by other zonal systems
|
1389
|
+
# From EnergyPlus I/O reference:
|
1390
|
+
# "For situations where one or more equipment types has limited capacity or limited control capability, order the
|
1391
|
+
# sequence so that the most controllable piece of equipment runs last. For example, with a dedicated outdoor air
|
1392
|
+
# system (DOAS), the air terminal for the DOAS should be assigned Heating Sequence = 1 and Cooling Sequence = 1.
|
1393
|
+
# Any other equipment should be assigned sequence 2 or higher so that it will see the net load after the DOAS air
|
1394
|
+
# is added to the zone."
|
1395
|
+
zone.setCoolingPriority(air_terminal.to_ModelObject.get, 1)
|
1396
|
+
zone.setHeatingPriority(air_terminal.to_ModelObject.get, 1)
|
1397
|
+
|
1398
|
+
# set the cooling and heating fraction to zero so that if DCV is enabled,
|
1399
|
+
# the system will lower the ventilation rate rather than trying to meet the heating or cooling load.
|
1400
|
+
if model.version < OpenStudio::VersionString.new('2.8.0')
|
1401
|
+
if demand_control_ventilation
|
1402
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.Model.Model', 'Unable to add DOAS with DCV to model because the setSequentialCoolingFraction method is not available in OpenStudio versions less than 2.8.0.')
|
1403
|
+
else
|
1404
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.Model.Model', 'OpenStudio version is less than 2.8.0. The DOAS system will not be able to have DCV if changed at a later date.')
|
1405
|
+
end
|
1406
|
+
else
|
1407
|
+
zone.setSequentialCoolingFraction(air_terminal.to_ModelObject.get, 0.0)
|
1408
|
+
zone.setSequentialHeatingFraction(air_terminal.to_ModelObject.get, 0.0)
|
1409
|
+
|
1410
|
+
# if economizing, override to meet cooling load first with doas supply
|
1411
|
+
unless econo_ctrl_mthd == 'NoEconomizer'
|
1412
|
+
zone.setSequentialCoolingFraction(air_terminal.to_ModelObject.get, 1.0)
|
1413
|
+
end
|
1414
|
+
end
|
1415
|
+
|
1416
1416
|
# DOAS sizing
|
1417
1417
|
sizing_zone = zone.sizingZone
|
1418
1418
|
sizing_zone.setAccountforDedicatedOutdoorAirSystem(true)
|
@@ -1484,7 +1484,13 @@ class Standard
|
|
1484
1484
|
# default design temperatures and settings used across all air loops
|
1485
1485
|
dsgn_temps = standard_design_sizing_temperatures
|
1486
1486
|
sizing_system = adjust_sizing_system(air_loop, dsgn_temps)
|
1487
|
-
|
1487
|
+
if !min_sys_airflow_ratio.nil?
|
1488
|
+
if model.version < OpenStudio::VersionString.new('2.7.0')
|
1489
|
+
sizing_system.setMinimumSystemAirFlowRatio(min_sys_airflow_ratio)
|
1490
|
+
else
|
1491
|
+
sizing_system.setCentralHeatingMaximumSystemAirFlowRatio(min_sys_airflow_ratio)
|
1492
|
+
end
|
1493
|
+
end
|
1488
1494
|
sizing_system.setSizingOption(vav_sizing_option) unless vav_sizing_option.nil?
|
1489
1495
|
unless hot_water_loop.nil?
|
1490
1496
|
hw_temp_c = hot_water_loop.sizingPlant.designLoopExitTemperature
|
@@ -1610,10 +1616,10 @@ class Standard
|
|
1610
1616
|
terminal = OpenStudio::Model::AirTerminalSingleDuctVAVReheat.new(model, model.alwaysOnDiscreteSchedule, rht_coil)
|
1611
1617
|
terminal.setName("#{zone.name} VAV Terminal")
|
1612
1618
|
terminal.setZoneMinimumAirFlowMethod('Constant')
|
1613
|
-
air_terminal_single_duct_vav_reheat_apply_initial_prototype_damper_position(terminal, thermal_zone_outdoor_airflow_rate_per_area(zone))
|
1614
1619
|
terminal.setMaximumFlowFractionDuringReheat(0.5)
|
1615
1620
|
terminal.setMaximumReheatAirTemperature(dsgn_temps['zn_htg_dsgn_sup_air_temp_c'])
|
1616
1621
|
air_loop.multiAddBranchForZone(zone, terminal.to_HVACComponent.get)
|
1622
|
+
air_terminal_single_duct_vav_reheat_apply_initial_prototype_damper_position(terminal, thermal_zone_outdoor_airflow_rate_per_area(zone))
|
1617
1623
|
|
1618
1624
|
# zone sizing
|
1619
1625
|
sizing_zone = zone.sizingZone
|
@@ -1627,8 +1633,8 @@ class Standard
|
|
1627
1633
|
terminal = OpenStudio::Model::AirTerminalSingleDuctVAVNoReheat.new(model, model.alwaysOnDiscreteSchedule)
|
1628
1634
|
terminal.setName("#{zone.name} VAV Terminal")
|
1629
1635
|
terminal.setZoneMinimumAirFlowInputMethod('Constant')
|
1630
|
-
air_terminal_single_duct_vav_reheat_apply_initial_prototype_damper_position(terminal, thermal_zone_outdoor_airflow_rate_per_area(zone))
|
1631
1636
|
air_loop.multiAddBranchForZone(zone, terminal.to_HVACComponent.get)
|
1637
|
+
air_terminal_single_duct_vav_reheat_apply_initial_prototype_damper_position(terminal, thermal_zone_outdoor_airflow_rate_per_area(zone))
|
1632
1638
|
|
1633
1639
|
# zone sizing
|
1634
1640
|
sizing_zone = zone.sizingZone
|
@@ -1641,6 +1647,9 @@ class Standard
|
|
1641
1647
|
end
|
1642
1648
|
end
|
1643
1649
|
|
1650
|
+
# Design outdoor air calculation based on VRP if applicable (prototypes maintained by PNNL)
|
1651
|
+
model_system_outdoor_air_sizing_vrp_method(air_loop)
|
1652
|
+
|
1644
1653
|
# set the damper action based on the template
|
1645
1654
|
air_loop_hvac_apply_vav_damper_action(air_loop)
|
1646
1655
|
|
@@ -1939,8 +1948,8 @@ class Standard
|
|
1939
1948
|
terminal.setName("#{zone.name} VAV Terminal")
|
1940
1949
|
terminal.setZoneMinimumAirFlowMethod('Constant')
|
1941
1950
|
terminal.setMaximumReheatAirTemperature(dsgn_temps['zn_htg_dsgn_sup_air_temp_c'])
|
1942
|
-
air_terminal_single_duct_vav_reheat_apply_initial_prototype_damper_position(terminal, thermal_zone_outdoor_airflow_rate_per_area(zone))
|
1943
1951
|
air_loop.multiAddBranchForZone(zone, terminal.to_HVACComponent.get)
|
1952
|
+
air_terminal_single_duct_vav_reheat_apply_initial_prototype_damper_position(terminal, thermal_zone_outdoor_airflow_rate_per_area(zone))
|
1944
1953
|
|
1945
1954
|
unless return_plenum.nil?
|
1946
1955
|
zone.setReturnPlenum(return_plenum)
|
@@ -1952,6 +1961,9 @@ class Standard
|
|
1952
1961
|
sizing_zone.setZoneHeatingDesignSupplyAirTemperature(dsgn_temps['zn_htg_dsgn_sup_air_temp_c'])
|
1953
1962
|
end
|
1954
1963
|
|
1964
|
+
# Design outdoor air calculation based on VRP if applicable (prototypes maintained by PNNL)
|
1965
|
+
model_system_outdoor_air_sizing_vrp_method(air_loop)
|
1966
|
+
|
1955
1967
|
# set the damper action based on the template
|
1956
1968
|
air_loop_hvac_apply_vav_damper_action(air_loop)
|
1957
1969
|
|
@@ -2234,11 +2246,11 @@ class Standard
|
|
2234
2246
|
terminal = OpenStudio::Model::AirTerminalSingleDuctVAVReheat.new(model, model.alwaysOnDiscreteSchedule, rht_coil)
|
2235
2247
|
terminal.setName("#{zone.name} VAV Terminal")
|
2236
2248
|
terminal.setZoneMinimumAirFlowMethod('Constant')
|
2237
|
-
air_terminal_single_duct_vav_reheat_apply_initial_prototype_damper_position(terminal, thermal_zone_outdoor_airflow_rate_per_area(zone))
|
2238
2249
|
terminal.setMaximumFlowPerZoneFloorAreaDuringReheat(0.0)
|
2239
2250
|
terminal.setMaximumFlowFractionDuringReheat(0.5)
|
2240
2251
|
terminal.setMaximumReheatAirTemperature(dsgn_temps['zn_htg_dsgn_sup_air_temp_c'])
|
2241
2252
|
air_loop.multiAddBranchForZone(zone, terminal.to_HVACComponent.get)
|
2253
|
+
air_terminal_single_duct_vav_reheat_apply_initial_prototype_damper_position(terminal, thermal_zone_outdoor_airflow_rate_per_area(zone))
|
2242
2254
|
|
2243
2255
|
# zone sizing
|
2244
2256
|
sizing_zone = zone.sizingZone
|
@@ -3422,11 +3434,26 @@ class Standard
|
|
3422
3434
|
hvac_op_sch = model_add_schedule(model, hvac_op_sch)
|
3423
3435
|
end
|
3424
3436
|
|
3437
|
+
# default design temperatures across all air loops
|
3438
|
+
dsgn_temps = standard_design_sizing_temperatures
|
3439
|
+
|
3440
|
+
# adjusted temperatures for minisplit
|
3441
|
+
dsgn_temps['zn_htg_dsgn_sup_air_temp_f'] = 122.0
|
3442
|
+
dsgn_temps['zn_htg_dsgn_sup_air_temp_c'] = OpenStudio.convert(dsgn_temps['zn_htg_dsgn_sup_air_temp_f'], 'F', 'C').get
|
3443
|
+
dsgn_temps['htg_dsgn_sup_air_temp_f'] = dsgn_temps['zn_htg_dsgn_sup_air_temp_f']
|
3444
|
+
dsgn_temps['htg_dsgn_sup_air_temp_c'] = dsgn_temps['zn_htg_dsgn_sup_air_temp_c']
|
3445
|
+
|
3446
|
+
minisplit_hps = []
|
3425
3447
|
thermal_zones.each do |zone|
|
3426
3448
|
air_loop = OpenStudio::Model::AirLoopHVAC.new(model)
|
3427
3449
|
air_loop.setName("#{zone.name} Minisplit Heat Pump")
|
3428
3450
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.Model.Model', "Adding minisplit HP for #{zone.name}.")
|
3429
3451
|
|
3452
|
+
# default design settings used across all air loops
|
3453
|
+
sizing_system = adjust_sizing_system(air_loop, dsgn_temps, sizing_option: 'NonCoincident')
|
3454
|
+
sizing_system.setAllOutdoorAirinCooling(false)
|
3455
|
+
sizing_system.setAllOutdoorAirinHeating(false)
|
3456
|
+
|
3430
3457
|
# create heating coil
|
3431
3458
|
case heating_type
|
3432
3459
|
when 'Single Speed DX'
|
@@ -3440,15 +3467,20 @@ class Standard
|
|
3440
3467
|
htg_coil.setDefrostControl('OnDemand')
|
3441
3468
|
htg_coil.resetDefrostTimePeriodFraction
|
3442
3469
|
else
|
3443
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.Model.Model', "No
|
3470
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.Model.Model', "No heating coil type selected for minisplit HP for #{zone.name}.")
|
3444
3471
|
htg_coil = nil
|
3445
3472
|
end
|
3446
3473
|
|
3474
|
+
# create backup heating coil
|
3475
|
+
supplemental_htg_coil = create_coil_heating_electric(model,
|
3476
|
+
name: "#{air_loop.name} Electric Backup Htg Coil")
|
3477
|
+
|
3447
3478
|
# create cooling coil
|
3448
3479
|
case cooling_type
|
3449
3480
|
when 'Two Speed DX AC'
|
3450
3481
|
clg_coil = create_coil_cooling_dx_two_speed(model,
|
3451
|
-
name: "#{air_loop.name} 2spd DX AC Clg Coil"
|
3482
|
+
name: "#{air_loop.name} 2spd DX AC Clg Coil",
|
3483
|
+
type: 'Residential Minisplit HP')
|
3452
3484
|
when 'Single Speed DX AC'
|
3453
3485
|
clg_coil = create_coil_cooling_dx_single_speed(model,
|
3454
3486
|
name: "#{air_loop.name} 1spd DX AC Clg Coil", type: 'Split AC')
|
@@ -3464,13 +3496,9 @@ class Standard
|
|
3464
3496
|
fan = create_fan_by_name(model,
|
3465
3497
|
'Minisplit_HP_Fan',
|
3466
3498
|
fan_name: "#{air_loop.name} Fan",
|
3467
|
-
end_use_subcategory: '
|
3499
|
+
end_use_subcategory: 'Minisplit HP Fans')
|
3468
3500
|
fan.setAvailabilitySchedule(hvac_op_sch)
|
3469
3501
|
|
3470
|
-
# create backup heating coil
|
3471
|
-
supplemental_htg_coil = create_coil_heating_electric(model,
|
3472
|
-
name: "#{air_loop.name} Electric Backup Htg Coil")
|
3473
|
-
|
3474
3502
|
# create unitary system (holds the coils and fan)
|
3475
3503
|
unitary = OpenStudio::Model::AirLoopHVACUnitarySystem.new(model)
|
3476
3504
|
unitary.setName("#{air_loop.name} Unitary System")
|
@@ -3479,7 +3507,6 @@ class Standard
|
|
3479
3507
|
unitary.setMaximumOutdoorDryBulbTemperatureforSupplementalHeaterOperation(OpenStudio.convert(40.0, 'F', 'C').get)
|
3480
3508
|
unitary.setControllingZoneorThermostatLocation(zone)
|
3481
3509
|
unitary.addToNode(air_loop.supplyInletNode)
|
3482
|
-
unitary.setControllingZoneorThermostatLocation(zone)
|
3483
3510
|
unitary.setSupplyAirFlowRateWhenNoCoolingorHeatingisRequired(0.0)
|
3484
3511
|
|
3485
3512
|
# attach the coils and fan
|
@@ -3494,9 +3521,11 @@ class Standard
|
|
3494
3521
|
diffuser = OpenStudio::Model::AirTerminalSingleDuctUncontrolled.new(model, model.alwaysOnDiscreteSchedule)
|
3495
3522
|
diffuser.setName(" #{zone.name} Direct Air")
|
3496
3523
|
air_loop.multiAddBranchForZone(zone, diffuser.to_HVACComponent.get)
|
3524
|
+
|
3525
|
+
minisplit_hps << air_loop
|
3497
3526
|
end
|
3498
3527
|
|
3499
|
-
return
|
3528
|
+
return minisplit_hps
|
3500
3529
|
end
|
3501
3530
|
|
3502
3531
|
# Creates a PTAC system for each zone and adds it to the model.
|
@@ -3506,13 +3535,16 @@ class Standard
|
|
3506
3535
|
# @param heating_type [String] valid choices are NaturalGas, Electricity, Water, nil (no heat)
|
3507
3536
|
# @param hot_water_loop [OpenStudio::Model::PlantLoop] hot water loop to connect heating coil to. Set to nil for heating types besides water
|
3508
3537
|
# @param fan_type [String] valid choices are ConstantVolume, Cycling
|
3538
|
+
# @param ventilation [Bool] If true, ventilation will be supplied through the unit. If false,
|
3539
|
+
# no ventilation will be supplied through the unit, with the expectation that it will be provided by a DOAS or separate system.
|
3509
3540
|
# @return [Array<OpenStudio::Model::ZoneHVACPackagedTerminalAirConditioner>] an array of the resulting PTACs
|
3510
3541
|
def model_add_ptac(model,
|
3511
3542
|
thermal_zones,
|
3512
3543
|
cooling_type: 'Two Speed DX AC',
|
3513
3544
|
heating_type: 'Gas',
|
3514
3545
|
hot_water_loop: nil,
|
3515
|
-
fan_type: 'ConstantVolume'
|
3546
|
+
fan_type: 'ConstantVolume',
|
3547
|
+
ventilation: true)
|
3516
3548
|
|
3517
3549
|
# default design temperatures used across all air loops
|
3518
3550
|
dsgn_temps = standard_design_sizing_temperatures
|
@@ -3606,6 +3638,11 @@ class Standard
|
|
3606
3638
|
elsif fan_type == 'Cycling'
|
3607
3639
|
ptac_system.setSupplyAirFanOperatingModeSchedule(model.alwaysOffDiscreteSchedule)
|
3608
3640
|
end
|
3641
|
+
unless ventilation
|
3642
|
+
ptac_system.setOutdoorAirFlowRateDuringCoolingOperation(0.0)
|
3643
|
+
ptac_system.setOutdoorAirFlowRateDuringHeatingOperation(0.0)
|
3644
|
+
ptac_system.setOutdoorAirFlowRateWhenNoCoolingorHeatingisNeeded(0.0)
|
3645
|
+
end
|
3609
3646
|
ptac_system.addToThermalZone(zone)
|
3610
3647
|
ptacs << ptac_system
|
3611
3648
|
end
|
@@ -3617,10 +3654,13 @@ class Standard
|
|
3617
3654
|
#
|
3618
3655
|
# @param thermal_zones [Array<OpenStudio::Model::ThermalZone>] array of zones to connect to this system
|
3619
3656
|
# @param fan_type [String] valid choices are ConstantVolume, Cycling
|
3657
|
+
# @param ventilation [Bool] If true, ventilation will be supplied through the unit. If false,
|
3658
|
+
# no ventilation will be supplied through the unit, with the expectation that it will be provided by a DOAS or separate system.
|
3620
3659
|
# @return [Array<OpenStudio::Model::ZoneHVACPackagedTerminalAirConditioner>] an array of the resulting PTACs.
|
3621
3660
|
def model_add_pthp(model,
|
3622
3661
|
thermal_zones,
|
3623
|
-
fan_type: 'Cycling'
|
3662
|
+
fan_type: 'Cycling',
|
3663
|
+
ventilation: true)
|
3624
3664
|
|
3625
3665
|
# default design temperatures used across all air loops
|
3626
3666
|
dsgn_temps = standard_design_sizing_temperatures
|
@@ -3683,6 +3723,11 @@ class Standard
|
|
3683
3723
|
elsif fan_type == 'Cycling'
|
3684
3724
|
pthp_system.setSupplyAirFanOperatingModeSchedule(model.alwaysOffDiscreteSchedule)
|
3685
3725
|
end
|
3726
|
+
unless ventilation
|
3727
|
+
pthp_system.setOutdoorAirFlowRateDuringCoolingOperation(0.0)
|
3728
|
+
pthp_system.setOutdoorAirFlowRateDuringHeatingOperation(0.0)
|
3729
|
+
pthp_system.setOutdoorAirFlowRateWhenNoCoolingorHeatingisNeeded(0.0)
|
3730
|
+
end
|
3686
3731
|
pthp_system.addToThermalZone(zone)
|
3687
3732
|
pthps << pthp_system
|
3688
3733
|
end
|
@@ -3811,27 +3856,29 @@ class Standard
|
|
3811
3856
|
# @param thermal_zones [Array<OpenStudio::Model::ThermalZone>] array of zones to connect to this system
|
3812
3857
|
# @param heating_type [String] valid choices are Gas, Electric
|
3813
3858
|
# @param combustion_efficiency [Double] combustion efficiency as decimal
|
3859
|
+
# @param control_type [String] control type
|
3814
3860
|
# @return [Array<OpenStudio::Model::ZoneHVACHighTemperatureRadiant>] an
|
3815
3861
|
# array of the resulting radiant heaters.
|
3816
3862
|
def model_add_high_temp_radiant(model,
|
3817
3863
|
thermal_zones,
|
3818
|
-
heating_type: '
|
3819
|
-
combustion_efficiency: 0.8
|
3864
|
+
heating_type: 'NaturalGas',
|
3865
|
+
combustion_efficiency: 0.8,
|
3866
|
+
control_type: 'MeanAirTemperature')
|
3820
3867
|
|
3821
|
-
#
|
3868
|
+
# make a high temp radiant heater for each zone
|
3822
3869
|
radiant_heaters = []
|
3823
3870
|
thermal_zones.each do |zone|
|
3824
3871
|
high_temp_radiant = OpenStudio::Model::ZoneHVACHighTemperatureRadiant.new(model)
|
3825
3872
|
high_temp_radiant.setName("#{zone.name} High Temp Radiant")
|
3826
3873
|
|
3827
|
-
if heating_type.nil?
|
3828
|
-
high_temp_radiant.setFuelType('
|
3874
|
+
if heating_type.nil? || heating_type == 'Gas'
|
3875
|
+
high_temp_radiant.setFuelType('NaturalGas')
|
3829
3876
|
else
|
3830
3877
|
high_temp_radiant.setFuelType(heating_type)
|
3831
3878
|
end
|
3832
3879
|
|
3833
3880
|
if combustion_efficiency.nil?
|
3834
|
-
if heating_type == 'Gas'
|
3881
|
+
if heating_type == 'NaturalGas' || heating_type == 'Gas'
|
3835
3882
|
high_temp_radiant.setCombustionEfficiency(0.8)
|
3836
3883
|
elsif heating_type == 'Electric'
|
3837
3884
|
high_temp_radiant.setCombustionEfficiency(1.0)
|
@@ -3840,7 +3887,17 @@ class Standard
|
|
3840
3887
|
high_temp_radiant.setCombustionEfficiency(combustion_efficiency)
|
3841
3888
|
end
|
3842
3889
|
|
3890
|
+
# set heating setpoint schedule
|
3891
|
+
tstat = zone.thermostatSetpointDualSetpoint.get
|
3892
|
+
if tstat.heatingSetpointTemperatureSchedule.is_initialized
|
3893
|
+
htg_sch = tstat.heatingSetpointTemperatureSchedule.get
|
3894
|
+
else
|
3895
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.Model.Model', "For #{zone.name}: Cannot find a heating setpoint schedule for this zone, cannot apply high temp radiant system.")
|
3896
|
+
return false
|
3897
|
+
end
|
3898
|
+
|
3843
3899
|
# set defaults
|
3900
|
+
high_temp_radiant.setHeatingSetpointTemperatureSchedule(htg_sch)
|
3844
3901
|
high_temp_radiant.setTemperatureControlType(control_type)
|
3845
3902
|
high_temp_radiant.setFractionofInputConvertedtoRadiantEnergy(0.8)
|
3846
3903
|
high_temp_radiant.setHeatingThrottlingRange(2)
|
@@ -4104,12 +4161,15 @@ class Standard
|
|
4104
4161
|
# If nil, a zero-capacity, electric heating coil set to Always-Off will be included in the unit.
|
4105
4162
|
# @param ventilation [Bool] If true, ventilation will be supplied through the unit. If false,
|
4106
4163
|
# no ventilation will be supplied through the unit, with the expectation that it will be provided by a DOAS or separate system.
|
4164
|
+
# @param capacity_control_method [String] Capacity control method for the fan coil. Options are ConstantFanVariableFlow,
|
4165
|
+
# CyclingFan, VariableFanVariableFlow, and VariableFanConstantFlow. If VariableFan, the fan will be VariableVolume.
|
4107
4166
|
# @return [Array<OpenStudio::Model::ZoneHVACFourPipeFanCoil>] array of fan coil units.
|
4108
4167
|
def model_add_four_pipe_fan_coil(model,
|
4109
4168
|
thermal_zones,
|
4110
4169
|
chilled_water_loop,
|
4111
4170
|
hot_water_loop: nil,
|
4112
|
-
ventilation: false
|
4171
|
+
ventilation: false,
|
4172
|
+
capacity_control_method: 'CyclingFan')
|
4113
4173
|
|
4114
4174
|
# default design temperatures used across all air loops
|
4115
4175
|
dsgn_temps = standard_design_sizing_temperatures
|
@@ -4144,10 +4204,18 @@ class Standard
|
|
4144
4204
|
nominal_capacity: 0.0)
|
4145
4205
|
end
|
4146
4206
|
|
4147
|
-
|
4148
|
-
|
4149
|
-
|
4150
|
-
|
4207
|
+
case capacity_control_method
|
4208
|
+
when 'VariableFanVariableFlow', 'VariableFanConstantFlow'
|
4209
|
+
fcu_fan = create_fan_by_name(model,
|
4210
|
+
'Fan_Coil_VarSpeed_Fan',
|
4211
|
+
fan_name: "#{zone.name} Fan Coil Variable Fan",
|
4212
|
+
end_use_subcategory: 'FCU Fans')
|
4213
|
+
else
|
4214
|
+
fcu_fan = create_fan_by_name(model,
|
4215
|
+
'Fan_Coil_Fan',
|
4216
|
+
fan_name: "#{zone.name} Fan Coil fan",
|
4217
|
+
end_use_subcategory: 'FCU Fans')
|
4218
|
+
end
|
4151
4219
|
fcu_fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
4152
4220
|
fcu_fan.autosizeMaximumFlowRate
|
4153
4221
|
|
@@ -4157,7 +4225,7 @@ class Standard
|
|
4157
4225
|
fcu_clg_coil,
|
4158
4226
|
fcu_htg_coil)
|
4159
4227
|
fcu.setName("#{zone.name} FCU")
|
4160
|
-
fcu.setCapacityControlMethod(
|
4228
|
+
fcu.setCapacityControlMethod(capacity_control_method)
|
4161
4229
|
fcu.autosizeMaximumSupplyAirFlowRate
|
4162
4230
|
unless ventilation
|
4163
4231
|
fcu.setMaximumOutdoorAirFlowRate(0.0)
|
@@ -4222,7 +4290,7 @@ class Standard
|
|
4222
4290
|
radiant_htg_dsgn_sup_wtr_temp_f = 110
|
4223
4291
|
else
|
4224
4292
|
climate_zone_set = model_find_climate_zone_set(model, climate_zone)
|
4225
|
-
case climate_zone_set.gsub('ClimateZone ', '')
|
4293
|
+
case climate_zone_set.gsub('ClimateZone ', '').gsub('CEC T24 ', '')
|
4226
4294
|
when '1'
|
4227
4295
|
cz_mult = 2
|
4228
4296
|
radiant_htg_dsgn_sup_wtr_temp_f = 90
|
@@ -4429,6 +4497,9 @@ class Standard
|
|
4429
4497
|
radiant_loops = []
|
4430
4498
|
thermal_zones.each do |zone|
|
4431
4499
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.Model.Model', "Adding radiant loop for #{zone.name}.")
|
4500
|
+
if zone.name.to_s.include? ':'
|
4501
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.Model.Model', "Thermal zone '#{zone.name}' has a restricted character ':' in the name and will not work with some EMS and output reporting objects. Please rename the zone.")
|
4502
|
+
end
|
4432
4503
|
|
4433
4504
|
# create radiant coils
|
4434
4505
|
if hot_water_loop
|
@@ -4727,6 +4798,15 @@ class Standard
|
|
4727
4798
|
crank_case_heat_w = 0.0
|
4728
4799
|
crank_case_max_temp_f = 55
|
4729
4800
|
|
4801
|
+
# default design temperatures across all air loops
|
4802
|
+
dsgn_temps = standard_design_sizing_temperatures
|
4803
|
+
|
4804
|
+
# adjusted temperatures for furnace_central_ac
|
4805
|
+
dsgn_temps['zn_htg_dsgn_sup_air_temp_f'] = 122.0
|
4806
|
+
dsgn_temps['zn_htg_dsgn_sup_air_temp_c'] = OpenStudio.convert(dsgn_temps['zn_htg_dsgn_sup_air_temp_f'], 'F', 'C').get
|
4807
|
+
dsgn_temps['htg_dsgn_sup_air_temp_f'] = dsgn_temps['zn_htg_dsgn_sup_air_temp_f']
|
4808
|
+
dsgn_temps['htg_dsgn_sup_air_temp_c'] = dsgn_temps['zn_htg_dsgn_sup_air_temp_c']
|
4809
|
+
|
4730
4810
|
hps = []
|
4731
4811
|
thermal_zones.each do |zone|
|
4732
4812
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.Model.Model', "Adding Central Air Source HP for #{zone.name}.")
|
@@ -4734,15 +4814,6 @@ class Standard
|
|
4734
4814
|
air_loop = OpenStudio::Model::AirLoopHVAC.new(model)
|
4735
4815
|
air_loop.setName("#{zone.name} Central Air Source HP")
|
4736
4816
|
|
4737
|
-
# default design temperatures across all air loops
|
4738
|
-
dsgn_temps = standard_design_sizing_temperatures
|
4739
|
-
|
4740
|
-
# adjusted temperatures for furnace_central_ac
|
4741
|
-
dsgn_temps['zn_htg_dsgn_sup_air_temp_f'] = 122.0
|
4742
|
-
dsgn_temps['zn_htg_dsgn_sup_air_temp_c'] = OpenStudio.convert(dsgn_temps['zn_htg_dsgn_sup_air_temp_f'], 'F', 'C').get
|
4743
|
-
dsgn_temps['htg_dsgn_sup_air_temp_f'] = dsgn_temps['zn_htg_dsgn_sup_air_temp_f']
|
4744
|
-
dsgn_temps['htg_dsgn_sup_air_temp_c'] = dsgn_temps['zn_htg_dsgn_sup_air_temp_c']
|
4745
|
-
|
4746
4817
|
# default design settings used across all air loops
|
4747
4818
|
sizing_system = adjust_sizing_system(air_loop, dsgn_temps, sizing_option: 'NonCoincident')
|
4748
4819
|
sizing_system.setAllOutdoorAirinCooling(true)
|
@@ -4950,6 +5021,14 @@ class Standard
|
|
4950
5021
|
zone.setCoolingPriority(zone_hvac.to_ModelObject.get, 1)
|
4951
5022
|
zone.setHeatingPriority(zone_hvac.to_ModelObject.get, 1)
|
4952
5023
|
|
5024
|
+
# set the cooling and heating fraction to zero so that the ERV does not try to meet the heating or cooling load.
|
5025
|
+
if model.version < OpenStudio::VersionString.new('2.8.0')
|
5026
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.Model.Model', 'OpenStudio version is less than 2.8.0; ERV will attempt to meet heating and cooling load up to ventilation rate. If this is not intended, use a newer version of OpenStudio.')
|
5027
|
+
else
|
5028
|
+
zone.setSequentialCoolingFraction(zone_hvac.to_ModelObject.get, 0.0)
|
5029
|
+
zone.setSequentialHeatingFraction(zone_hvac.to_ModelObject.get, 0.0)
|
5030
|
+
end
|
5031
|
+
|
4953
5032
|
# Calculate ERV SAT during sizing periods
|
4954
5033
|
# Standard rating conditions based on AHRI Std 1060 - 2013
|
4955
5034
|
# heating design
|
@@ -5578,6 +5657,9 @@ class Standard
|
|
5578
5657
|
# @param air_loop_cooling_type [String] type of cooling coil serving main air loop, options are DX or Water
|
5579
5658
|
# @param zone_equipment_ventilation [Bool] toggle whether to include outdoor air ventilation on zone equipment
|
5580
5659
|
# including as fan coil units, VRF terminals, or water source heat pumps.
|
5660
|
+
# @param fan_coil_capacity_control_method [String] Only applicable to Fan Coil system type.
|
5661
|
+
# Capacity control method for the fan coil. Options are ConstantFanVariableFlow, CyclingFan, VariableFanVariableFlow,
|
5662
|
+
# and VariableFanConstantFlow. If VariableFan, the fan will be VariableVolume.
|
5581
5663
|
# @return [Bool] returns true if successful, false if not
|
5582
5664
|
def model_add_hvac_system(model,
|
5583
5665
|
system_type,
|
@@ -5590,7 +5672,8 @@ class Standard
|
|
5590
5672
|
heat_pump_loop_cooling_type: 'EvaporativeFluidCooler',
|
5591
5673
|
air_loop_heating_type: 'Water',
|
5592
5674
|
air_loop_cooling_type: 'Water',
|
5593
|
-
zone_equipment_ventilation: true
|
5675
|
+
zone_equipment_ventilation: true,
|
5676
|
+
fan_coil_capacity_control_method: 'CyclingFan')
|
5594
5677
|
|
5595
5678
|
# don't do anything if there are no zones
|
5596
5679
|
return true if zones.empty?
|
@@ -5619,12 +5702,14 @@ class Standard
|
|
5619
5702
|
cooling_type: 'Single Speed DX AC',
|
5620
5703
|
heating_type: heating_type,
|
5621
5704
|
hot_water_loop: hot_water_loop,
|
5622
|
-
fan_type: 'ConstantVolume'
|
5705
|
+
fan_type: 'ConstantVolume',
|
5706
|
+
ventilation: zone_equipment_ventilation)
|
5623
5707
|
|
5624
5708
|
when 'PTHP'
|
5625
5709
|
model_add_pthp(model,
|
5626
5710
|
zones,
|
5627
|
-
fan_type: 'ConstantVolume'
|
5711
|
+
fan_type: 'ConstantVolume',
|
5712
|
+
ventilation: zone_equipment_ventilation)
|
5628
5713
|
|
5629
5714
|
when 'PSZ-AC'
|
5630
5715
|
case main_heat_fuel
|
@@ -5728,7 +5813,8 @@ class Standard
|
|
5728
5813
|
zones,
|
5729
5814
|
chilled_water_loop,
|
5730
5815
|
hot_water_loop: hot_water_loop,
|
5731
|
-
ventilation: zone_equipment_ventilation
|
5816
|
+
ventilation: zone_equipment_ventilation,
|
5817
|
+
capacity_control_method: fan_coil_capacity_control_method)
|
5732
5818
|
|
5733
5819
|
when 'Radiant Slab'
|
5734
5820
|
case main_heat_fuel
|
@@ -5781,6 +5867,12 @@ class Standard
|
|
5781
5867
|
fan_pressure_rise: 0.2,
|
5782
5868
|
heating_type: main_heat_fuel)
|
5783
5869
|
|
5870
|
+
when 'High Temp Radiant'
|
5871
|
+
model_add_high_temp_radiant(model,
|
5872
|
+
zones,
|
5873
|
+
heating_type: main_heat_fuel,
|
5874
|
+
combustion_efficiency: 0.8)
|
5875
|
+
|
5784
5876
|
when 'Window AC'
|
5785
5877
|
model_add_window_ac(model,
|
5786
5878
|
zones)
|
@@ -5793,6 +5885,7 @@ class Standard
|
|
5793
5885
|
ventilation: false)
|
5794
5886
|
|
5795
5887
|
when 'Forced Air Furnace'
|
5888
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.Model.Model', 'If a Forced Air Furnace with ventilation serves a core zone, make sure the outdoor air is included in design sizing for the systems (typically occupancy, and therefore ventilation is zero during winter sizing), otherwise it may not be sized large enough to meet the heating load in some situations.')
|
5796
5889
|
model_add_furnace_central_ac(model,
|
5797
5890
|
zones,
|
5798
5891
|
heating: true,
|
@@ -5926,8 +6019,12 @@ class Standard
|
|
5926
6019
|
hot_water_loop = model_get_or_add_hot_water_loop(model, main_heat_fuel,
|
5927
6020
|
hot_water_loop_type: 'LowTemperature')
|
5928
6021
|
else
|
5929
|
-
|
5930
|
-
|
6022
|
+
if air_loop_heating_type == 'Water'
|
6023
|
+
hot_water_loop = model_get_or_add_hot_water_loop(model, main_heat_fuel,
|
6024
|
+
hot_water_loop_type: hot_water_loop_type)
|
6025
|
+
else
|
6026
|
+
heating_type = main_heat_fuel
|
6027
|
+
end
|
5931
6028
|
end
|
5932
6029
|
|
5933
6030
|
case cool_fuel
|
@@ -5948,6 +6045,7 @@ class Standard
|
|
5948
6045
|
zones,
|
5949
6046
|
hot_water_loop: hot_water_loop,
|
5950
6047
|
chilled_water_loop: chilled_water_loop,
|
6048
|
+
heating_type: heating_type,
|
5951
6049
|
electric_reheat: electric_reheat)
|
5952
6050
|
|
5953
6051
|
when 'PVAV PFP Boxes'
|
@@ -6087,33 +6185,6 @@ class Standard
|
|
6087
6185
|
doas_type: 'DOASVAV',
|
6088
6186
|
econo_ctrl_mthd: 'FixedDryBulb')
|
6089
6187
|
|
6090
|
-
when 'DOAS with DCV and Economizing'
|
6091
|
-
if air_loop_heating_type == 'Water'
|
6092
|
-
case main_heat_fuel
|
6093
|
-
when 'AirSourceHeatPump'
|
6094
|
-
hot_water_loop = model_get_or_add_hot_water_loop(model, main_heat_fuel,
|
6095
|
-
hot_water_loop_type: 'LowTemperature')
|
6096
|
-
else
|
6097
|
-
hot_water_loop = model_get_or_add_hot_water_loop(model, main_heat_fuel,
|
6098
|
-
hot_water_loop_type: hot_water_loop_type)
|
6099
|
-
end
|
6100
|
-
else
|
6101
|
-
hot_water_loop = nil
|
6102
|
-
end
|
6103
|
-
if air_loop_cooling_type == 'Water'
|
6104
|
-
chilled_water_loop = model_get_or_add_chilled_water_loop(model, cool_fuel,
|
6105
|
-
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type)
|
6106
|
-
else
|
6107
|
-
chilled_water_loop = nil
|
6108
|
-
end
|
6109
|
-
model_add_doas(model,
|
6110
|
-
zones,
|
6111
|
-
hot_water_loop: hot_water_loop,
|
6112
|
-
chilled_water_loop: chilled_water_loop,
|
6113
|
-
doas_type: 'DOASVAV',
|
6114
|
-
demand_control_ventilation: true,
|
6115
|
-
econo_ctrl_mthd: 'FixedDryBulb')
|
6116
|
-
|
6117
6188
|
when 'ERVs'
|
6118
6189
|
model_add_zone_erv(model, zones)
|
6119
6190
|
|
@@ -6123,256 +6194,72 @@ class Standard
|
|
6123
6194
|
when 'Ideal Air Loads'
|
6124
6195
|
model_add_ideal_air_loads(model, zones)
|
6125
6196
|
|
6126
|
-
### Combination Systems ###
|
6127
|
-
when 'Water Source Heat Pumps with ERVs'
|
6128
|
-
model_add_hvac_system(model,
|
6129
|
-
system_type = 'ERVs',
|
6130
|
-
main_heat_fuel,
|
6131
|
-
zone_heat_fuel,
|
6132
|
-
cool_fuel,
|
6133
|
-
zones)
|
6134
|
-
|
6135
|
-
model_add_hvac_system(model,
|
6136
|
-
system_type = 'Water Source Heat Pumps',
|
6137
|
-
main_heat_fuel,
|
6138
|
-
zone_heat_fuel,
|
6139
|
-
cool_fuel,
|
6140
|
-
zones,
|
6141
|
-
heat_pump_loop_cooling_type: heat_pump_loop_cooling_type,
|
6142
|
-
zone_equipment_ventilation: false)
|
6143
|
-
|
6144
|
-
when 'Water Source Heat Pumps with DOAS'
|
6145
|
-
model_add_hvac_system(model,
|
6146
|
-
system_type = 'DOAS',
|
6147
|
-
main_heat_fuel,
|
6148
|
-
zone_heat_fuel,
|
6149
|
-
cool_fuel,
|
6150
|
-
zones,
|
6151
|
-
hot_water_loop_type: hot_water_loop_type,
|
6152
|
-
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6153
|
-
air_loop_heating_type: air_loop_heating_type,
|
6154
|
-
air_loop_cooling_type: air_loop_cooling_type)
|
6155
|
-
|
6156
|
-
model_add_hvac_system(model,
|
6157
|
-
system_type = 'Water Source Heat Pumps',
|
6158
|
-
main_heat_fuel,
|
6159
|
-
zone_heat_fuel,
|
6160
|
-
cool_fuel,
|
6161
|
-
zones,
|
6162
|
-
hot_water_loop_type: hot_water_loop_type,
|
6163
|
-
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6164
|
-
heat_pump_loop_cooling_type: heat_pump_loop_cooling_type,
|
6165
|
-
zone_equipment_ventilation: false)
|
6166
|
-
|
6167
|
-
when 'Water Source Heat Pumps with DOAS with DCV'
|
6168
|
-
model_add_hvac_system(model,
|
6169
|
-
system_type = 'DOAS with DCV',
|
6170
|
-
main_heat_fuel,
|
6171
|
-
zone_heat_fuel,
|
6172
|
-
cool_fuel,
|
6173
|
-
zones,
|
6174
|
-
hot_water_loop_type: hot_water_loop_type,
|
6175
|
-
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6176
|
-
heat_pump_loop_cooling_type: heat_pump_loop_cooling_type,
|
6177
|
-
air_loop_heating_type: air_loop_heating_type,
|
6178
|
-
air_loop_cooling_type: air_loop_cooling_type)
|
6179
|
-
|
6180
|
-
model_add_hvac_system(model,
|
6181
|
-
system_type = 'Water Source Heat Pumps',
|
6182
|
-
main_heat_fuel,
|
6183
|
-
zone_heat_fuel,
|
6184
|
-
cool_fuel,
|
6185
|
-
zones,
|
6186
|
-
hot_water_loop_type: hot_water_loop_type,
|
6187
|
-
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6188
|
-
zone_equipment_ventilation: false)
|
6189
|
-
|
6190
|
-
when 'Ground Source Heat Pumps with ERVs'
|
6191
|
-
model_add_hvac_system(model,
|
6192
|
-
system_type = 'ERVs',
|
6193
|
-
main_heat_fuel,
|
6194
|
-
zone_heat_fuel,
|
6195
|
-
cool_fuel,
|
6196
|
-
zones)
|
6197
|
-
|
6198
|
-
model_add_hvac_system(model,
|
6199
|
-
system_type = 'Ground Source Heat Pumps',
|
6200
|
-
main_heat_fuel,
|
6201
|
-
zone_heat_fuel,
|
6202
|
-
cool_fuel,
|
6203
|
-
zones,
|
6204
|
-
zone_equipment_ventilation: false)
|
6205
|
-
|
6206
|
-
when 'Ground Source Heat Pumps with DOAS'
|
6207
|
-
model_add_hvac_system(model,
|
6208
|
-
system_type = 'DOAS',
|
6209
|
-
main_heat_fuel,
|
6210
|
-
zone_heat_fuel,
|
6211
|
-
cool_fuel,
|
6212
|
-
zones,
|
6213
|
-
hot_water_loop_type: hot_water_loop_type,
|
6214
|
-
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6215
|
-
air_loop_heating_type: air_loop_heating_type,
|
6216
|
-
air_loop_cooling_type: air_loop_cooling_type)
|
6217
|
-
|
6218
|
-
model_add_hvac_system(model,
|
6219
|
-
system_type = 'Ground Source Heat Pumps',
|
6220
|
-
main_heat_fuel,
|
6221
|
-
zone_heat_fuel,
|
6222
|
-
cool_fuel,
|
6223
|
-
zones,
|
6224
|
-
zone_equipment_ventilation: false)
|
6225
|
-
|
6226
|
-
when 'Ground Source Heat Pumps with DOAS with DCV'
|
6227
|
-
model_add_hvac_system(model,
|
6228
|
-
system_type = 'DOAS with DCV',
|
6229
|
-
main_heat_fuel,
|
6230
|
-
zone_heat_fuel,
|
6231
|
-
cool_fuel,
|
6232
|
-
zones,
|
6233
|
-
hot_water_loop_type: hot_water_loop_type,
|
6234
|
-
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6235
|
-
air_loop_heating_type: air_loop_heating_type,
|
6236
|
-
air_loop_cooling_type: air_loop_cooling_type)
|
6237
|
-
|
6238
|
-
model_add_hvac_system(model,
|
6239
|
-
system_type = 'Ground Source Heat Pumps',
|
6240
|
-
main_heat_fuel,
|
6241
|
-
zone_heat_fuel,
|
6242
|
-
cool_fuel,
|
6243
|
-
zones,
|
6244
|
-
zone_equipment_ventilation: false)
|
6245
|
-
|
6246
|
-
when 'Fan Coil with DOAS'
|
6247
|
-
model_add_hvac_system(model,
|
6248
|
-
system_type = 'DOAS',
|
6249
|
-
main_heat_fuel,
|
6250
|
-
zone_heat_fuel,
|
6251
|
-
cool_fuel,
|
6252
|
-
zones,
|
6253
|
-
hot_water_loop_type: hot_water_loop_type,
|
6254
|
-
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6255
|
-
air_loop_heating_type: 'Water',
|
6256
|
-
air_loop_cooling_type: 'Water')
|
6257
|
-
|
6258
|
-
model_add_hvac_system(model,
|
6259
|
-
system_type = 'Fan Coil',
|
6260
|
-
main_heat_fuel,
|
6261
|
-
zone_heat_fuel,
|
6262
|
-
cool_fuel,
|
6263
|
-
zones,
|
6264
|
-
hot_water_loop_type: hot_water_loop_type,
|
6265
|
-
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6266
|
-
zone_equipment_ventilation: false)
|
6267
|
-
|
6268
|
-
when 'Fan Coil with DOAS with DCV'
|
6269
|
-
model_add_hvac_system(model,
|
6270
|
-
system_type = 'DOAS with DCV',
|
6271
|
-
main_heat_fuel,
|
6272
|
-
zone_heat_fuel,
|
6273
|
-
cool_fuel,
|
6274
|
-
zones,
|
6275
|
-
hot_water_loop_type: hot_water_loop_type,
|
6276
|
-
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6277
|
-
air_loop_heating_type: 'Water',
|
6278
|
-
air_loop_cooling_type: 'Water')
|
6279
|
-
|
6280
|
-
model_add_hvac_system(model,
|
6281
|
-
system_type = 'Fan Coil',
|
6282
|
-
main_heat_fuel,
|
6283
|
-
zone_heat_fuel,
|
6284
|
-
cool_fuel,
|
6285
|
-
zones,
|
6286
|
-
hot_water_loop_type: hot_water_loop_type,
|
6287
|
-
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6288
|
-
zone_equipment_ventilation: false)
|
6289
|
-
|
6290
|
-
when 'Fan Coil with ERVs'
|
6291
|
-
model_add_hvac_system(model,
|
6292
|
-
system_type = 'ERVs',
|
6293
|
-
main_heat_fuel,
|
6294
|
-
zone_heat_fuel,
|
6295
|
-
cool_fuel,
|
6296
|
-
zones)
|
6297
|
-
|
6298
|
-
model_add_hvac_system(model,
|
6299
|
-
system_type = 'Fan Coil',
|
6300
|
-
main_heat_fuel,
|
6301
|
-
zone_heat_fuel,
|
6302
|
-
cool_fuel,
|
6303
|
-
zones,
|
6304
|
-
hot_water_loop_type: hot_water_loop_type,
|
6305
|
-
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6306
|
-
zone_equipment_ventilation: false)
|
6307
|
-
|
6308
|
-
when 'VRF with DOAS'
|
6309
|
-
model_add_hvac_system(model,
|
6310
|
-
system_type = 'DOAS',
|
6311
|
-
main_heat_fuel,
|
6312
|
-
zone_heat_fuel,
|
6313
|
-
cool_fuel,
|
6314
|
-
zones,
|
6315
|
-
hot_water_loop_type: hot_water_loop_type,
|
6316
|
-
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6317
|
-
air_loop_heating_type: 'DX',
|
6318
|
-
air_loop_cooling_type: 'DX')
|
6319
|
-
|
6320
|
-
model_add_hvac_system(model,
|
6321
|
-
system_type = 'VRF',
|
6322
|
-
main_heat_fuel,
|
6323
|
-
zone_heat_fuel,
|
6324
|
-
cool_fuel,
|
6325
|
-
zones,
|
6326
|
-
zone_equipment_ventilation: false)
|
6327
|
-
|
6328
|
-
when 'VRF with DOAS with DCV'
|
6329
|
-
model_add_hvac_system(model,
|
6330
|
-
system_type = 'DOAS with DCV',
|
6331
|
-
main_heat_fuel,
|
6332
|
-
zone_heat_fuel,
|
6333
|
-
cool_fuel,
|
6334
|
-
zones,
|
6335
|
-
hot_water_loop_type: hot_water_loop_type,
|
6336
|
-
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6337
|
-
air_loop_heating_type: 'DX',
|
6338
|
-
air_loop_cooling_type: 'DX')
|
6339
|
-
|
6340
|
-
model_add_hvac_system(model,
|
6341
|
-
system_type = 'VRF',
|
6342
|
-
main_heat_fuel,
|
6343
|
-
zone_heat_fuel,
|
6344
|
-
cool_fuel,
|
6345
|
-
zones,
|
6346
|
-
zone_equipment_ventilation: false)
|
6347
|
-
|
6348
|
-
when 'Radiant Slab with DOAS'
|
6349
|
-
model_add_hvac_system(model,
|
6350
|
-
system_type = 'Radiant Slab',
|
6351
|
-
main_heat_fuel,
|
6352
|
-
zone_heat_fuel,
|
6353
|
-
cool_fuel,
|
6354
|
-
zones,
|
6355
|
-
hot_water_loop_type: hot_water_loop_type,
|
6356
|
-
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6357
|
-
rad_lock_str: rad_lock_str,
|
6358
|
-
rad_lock_end: rad_lock_end)
|
6359
|
-
|
6360
|
-
model_add_hvac_system(model,
|
6361
|
-
system_type = 'DOAS',
|
6362
|
-
main_heat_fuel,
|
6363
|
-
zone_heat_fuel,
|
6364
|
-
cool_fuel,
|
6365
|
-
zones,
|
6366
|
-
hot_water_loop_type: hot_water_loop_type,
|
6367
|
-
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6368
|
-
air_loop_heating_type: 'Water',
|
6369
|
-
air_loop_cooling_type: 'Water')
|
6370
|
-
|
6371
6197
|
else
|
6372
|
-
|
6373
|
-
|
6374
|
-
|
6375
|
-
|
6198
|
+
# Combination Systems
|
6199
|
+
if system_type.include? 'with DOAS with DCV'
|
6200
|
+
# add DOAS DCV system
|
6201
|
+
model_add_hvac_system(model, 'DOAS with DCV', main_heat_fuel, zone_heat_fuel, cool_fuel, zones,
|
6202
|
+
hot_water_loop_type: hot_water_loop_type,
|
6203
|
+
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6204
|
+
heat_pump_loop_cooling_type: heat_pump_loop_cooling_type,
|
6205
|
+
air_loop_heating_type: air_loop_heating_type,
|
6206
|
+
air_loop_cooling_type: air_loop_cooling_type,
|
6207
|
+
zone_equipment_ventilation: false,
|
6208
|
+
fan_coil_capacity_control_method: fan_coil_capacity_control_method)
|
6209
|
+
# add paired system type
|
6210
|
+
paired_system_type = system_type.gsub(' with DOAS with DCV', '')
|
6211
|
+
model_add_hvac_system(model, paired_system_type, main_heat_fuel, zone_heat_fuel, cool_fuel, zones,
|
6212
|
+
hot_water_loop_type: hot_water_loop_type,
|
6213
|
+
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6214
|
+
heat_pump_loop_cooling_type: heat_pump_loop_cooling_type,
|
6215
|
+
air_loop_heating_type: air_loop_heating_type,
|
6216
|
+
air_loop_cooling_type: air_loop_cooling_type,
|
6217
|
+
zone_equipment_ventilation: false,
|
6218
|
+
fan_coil_capacity_control_method: fan_coil_capacity_control_method)
|
6219
|
+
elsif system_type.include? 'with DOAS'
|
6220
|
+
# add DOAS system
|
6221
|
+
model_add_hvac_system(model, 'DOAS', main_heat_fuel, zone_heat_fuel, cool_fuel, zones,
|
6222
|
+
hot_water_loop_type: hot_water_loop_type,
|
6223
|
+
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6224
|
+
heat_pump_loop_cooling_type: heat_pump_loop_cooling_type,
|
6225
|
+
air_loop_heating_type: air_loop_heating_type,
|
6226
|
+
air_loop_cooling_type: air_loop_cooling_type,
|
6227
|
+
zone_equipment_ventilation: false,
|
6228
|
+
fan_coil_capacity_control_method: fan_coil_capacity_control_method)
|
6229
|
+
# add paired system type
|
6230
|
+
paired_system_type = system_type.gsub(' with DOAS', '')
|
6231
|
+
model_add_hvac_system(model, paired_system_type, main_heat_fuel, zone_heat_fuel, cool_fuel, zones,
|
6232
|
+
hot_water_loop_type: hot_water_loop_type,
|
6233
|
+
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6234
|
+
heat_pump_loop_cooling_type: heat_pump_loop_cooling_type,
|
6235
|
+
air_loop_heating_type: air_loop_heating_type,
|
6236
|
+
air_loop_cooling_type: air_loop_cooling_type,
|
6237
|
+
zone_equipment_ventilation: false,
|
6238
|
+
fan_coil_capacity_control_method: fan_coil_capacity_control_method)
|
6239
|
+
elsif system_type.include? 'with ERVs'
|
6240
|
+
# add DOAS system
|
6241
|
+
model_add_hvac_system(model, 'ERVs', main_heat_fuel, zone_heat_fuel, cool_fuel, zones,
|
6242
|
+
hot_water_loop_type: hot_water_loop_type,
|
6243
|
+
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6244
|
+
heat_pump_loop_cooling_type: heat_pump_loop_cooling_type,
|
6245
|
+
air_loop_heating_type: air_loop_heating_type,
|
6246
|
+
air_loop_cooling_type: air_loop_cooling_type,
|
6247
|
+
zone_equipment_ventilation: false,
|
6248
|
+
fan_coil_capacity_control_method: fan_coil_capacity_control_method)
|
6249
|
+
# add paired system type
|
6250
|
+
paired_system_type = system_type.gsub(' with ERVs', '')
|
6251
|
+
model_add_hvac_system(model, paired_system_type, main_heat_fuel, zone_heat_fuel, cool_fuel, zones,
|
6252
|
+
hot_water_loop_type: hot_water_loop_type,
|
6253
|
+
chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
|
6254
|
+
heat_pump_loop_cooling_type: heat_pump_loop_cooling_type,
|
6255
|
+
air_loop_heating_type: air_loop_heating_type,
|
6256
|
+
air_loop_cooling_type: air_loop_cooling_type,
|
6257
|
+
zone_equipment_ventilation: false,
|
6258
|
+
fan_coil_capacity_control_method: fan_coil_capacity_control_method)
|
6259
|
+
else
|
6260
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "HVAC system type '#{system_type}' not recognized")
|
6261
|
+
return false
|
6262
|
+
end
|
6376
6263
|
end
|
6377
6264
|
|
6378
6265
|
# rename air loop and plant loop nodes for readability
|