Skip to content

Commit

Permalink
Merge pull request #1555 from NREL/fix/economizers
Browse files Browse the repository at this point in the history
economizer implementation changes
  • Loading branch information
mdahlhausen authored Aug 8, 2023
2 parents 19db3eb + 5d55410 commit d2b5e28
Show file tree
Hide file tree
Showing 33 changed files with 5,427 additions and 238 deletions.
1 change: 0 additions & 1 deletion lib/openstudio-standards.rb
Original file line number Diff line number Diff line change
Expand Up @@ -497,7 +497,6 @@ module OpenstudioStandards
require_relative "#{proto}/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.FanOnOff"
require_relative "#{proto}/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.FanVariableVolume"
require_relative "#{proto}/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.HeatExchangerAirToAirSensibleAndLatent"
require_relative "#{proto}/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model"
require_relative "#{proto}/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.elevators"
require_relative "#{proto}/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.hvac_systems"
# ZE AEDG Multifamily
Expand Down
Original file line number Diff line number Diff line change
@@ -1,38 +1,6 @@
class ASHRAE9012016 < ASHRAE901
# @!group Model

# Determine the prototypical economizer type for the model.
#
# @param model [OpenStudio::Model::Model] OpenStudio model object
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
# @return [String] the economizer type. Possible values are:
# 'NoEconomizer'
# 'FixedDryBulb'
# 'FixedEnthalpy'
# 'DifferentialDryBulb'
# 'DifferentialEnthalpy'
# 'FixedDewPointAndDryBulb'
# 'ElectronicEnthalpy'
# 'DifferentialDryBulbAndEnthalpy'
def model_economizer_type(model, climate_zone)
economizer_type = case climate_zone
when 'ASHRAE 169-2006-0A',
'ASHRAE 169-2006-1A',
'ASHRAE 169-2006-2A',
'ASHRAE 169-2006-3A',
'ASHRAE 169-2006-4A',
'ASHRAE 169-2013-0A',
'ASHRAE 169-2013-1A',
'ASHRAE 169-2013-2A',
'ASHRAE 169-2013-3A',
'ASHRAE 169-2013-4A'
'DifferentialEnthalpy'
else
'DifferentialDryBulb'
end
return economizer_type
end

# Adjust model to comply with fenestration orientation requirements
# @note code_sections [90.1-2013_5.5.4.5]
#
Expand Down Expand Up @@ -299,7 +267,7 @@ def model_add_lights_shutoff(model)
end

# guard clause to skip space with no lights
next if space_lights.empty?
next if space_lights.empty?

# if lights are defined at the space type level, clone each lights object and make it individual to the space
new_space_lights = []
Expand Down
Original file line number Diff line number Diff line change
@@ -1,38 +1,6 @@
class ASHRAE9012019 < ASHRAE901
# @!group Model

# Determine the prototypical economizer type for the model.
#
# @param model [OpenStudio::Model::Model] OpenStudio model object
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
# @return [String] the economizer type. Possible values are:
# 'NoEconomizer'
# 'FixedDryBulb'
# 'FixedEnthalpy'
# 'DifferentialDryBulb'
# 'DifferentialEnthalpy'
# 'FixedDewPointAndDryBulb'
# 'ElectronicEnthalpy'
# 'DifferentialDryBulbAndEnthalpy'
def model_economizer_type(model, climate_zone)
economizer_type = case climate_zone
when 'ASHRAE 169-2006-0A',
'ASHRAE 169-2006-1A',
'ASHRAE 169-2006-2A',
'ASHRAE 169-2006-3A',
'ASHRAE 169-2006-4A',
'ASHRAE 169-2013-0A',
'ASHRAE 169-2013-1A',
'ASHRAE 169-2013-2A',
'ASHRAE 169-2013-3A',
'ASHRAE 169-2013-4A'
'DifferentialEnthalpy'
else
'DifferentialDryBulb'
end
return economizer_type
end

# Adjust model to comply with fenestration orientation requirements
# @note code_sections [90.1-2013_5.5.4.5]
#
Expand Down Expand Up @@ -299,7 +267,7 @@ def model_add_lights_shutoff(model)
end

# guard clause to skip space with no lights
next if space_lights.empty?
next if space_lights.empty?

# if lights are defined at the space type level, clone each lights object and make it individual to the space
new_space_lights = []
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2474,7 +2474,13 @@ def model_multiply_schedule(model, day_sch, multiplier, limit)
# end reduce schedule

# Determine the prototypical economizer type for the model.
# Defaults to the pre-90.1-2010 assumption of DifferentialDryBulb.
# Defaults to FixedDryBulb based on anecdotal evidence of this being
# the most common type encountered in the field, combined
# with this being the default option for many equipment manufacturers,
# and being the strategy recommended in the 2010 ASHRAE journal article
# "Economizer High Limit Devices and Why Enthalpy Economizers Don't Work"
# by Steven Taylor and Hwakong Cheng.
# https://tayloreng.egnyte.com/dl/mN0c9t4WSO/ASHRAE_Journal_-_Economizer_High_Limit_Devices_and_Why_Enthalpy_Economizers_Dont_Work.pdf_
#
# @param model [OpenStudio::Model::Model] the model
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
Expand All @@ -2488,7 +2494,7 @@ def model_multiply_schedule(model, day_sch, multiplier, limit)
# 'ElectronicEnthalpy'
# 'DifferentialDryBulbAndEnthalpy'
def model_economizer_type(model, climate_zone)
economizer_type = 'DifferentialDryBulb'
economizer_type = 'FixedDryBulb'
return economizer_type
end

Expand Down
6 changes: 6 additions & 0 deletions lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1060,6 +1060,12 @@ def air_loop_hvac_apply_economizer_limits(air_loop_hvac, climate_zone)
oa_control.setEconomizerMaximumLimitDryBulbTemperature(drybulb_limit_c)
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}: Economizer type = #{economizer_type}, dry bulb limit = #{drybulb_limit_f}F")
end
# Some templates include fixed enthalpy limits in addition to fixed dry bulb limits
if enthalpy_limit_btu_per_lb
enthalpy_limit_j_per_kg = OpenStudio.convert(enthalpy_limit_btu_per_lb, 'Btu/lb', 'J/kg').get
oa_control.setEconomizerMaximumLimitEnthalpy(enthalpy_limit_j_per_kg)
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}: additional economizer enthalpy limit = #{enthalpy_limit_btu_per_lb}Btu/lb")
end
when 'FixedEnthalpy'
if enthalpy_limit_btu_per_lb
enthalpy_limit_j_per_kg = OpenStudio.convert(enthalpy_limit_btu_per_lb, 'Btu/lb', 'J/kg').get
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,38 @@
class ASHRAE9012016 < ASHRAE901
# @!group AirLoopHVAC

# Determine the prototypical economizer type for the model.
#
# @param model [OpenStudio::Model::Model] OpenStudio model object
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
# @return [String] the economizer type. Possible values are:
# 'NoEconomizer'
# 'FixedDryBulb'
# 'FixedEnthalpy'
# 'DifferentialDryBulb'
# 'DifferentialEnthalpy'
# 'FixedDewPointAndDryBulb'
# 'ElectronicEnthalpy'
# 'DifferentialDryBulbAndEnthalpy'
def model_economizer_type(model, climate_zone)
economizer_type = case climate_zone
when 'ASHRAE 169-2006-0A',
'ASHRAE 169-2006-1A',
'ASHRAE 169-2006-2A',
'ASHRAE 169-2006-3A',
'ASHRAE 169-2006-4A',
'ASHRAE 169-2013-0A',
'ASHRAE 169-2013-1A',
'ASHRAE 169-2013-2A',
'ASHRAE 169-2013-3A',
'ASHRAE 169-2013-4A'
'DifferentialEnthalpy'
else
'DifferentialDryBulb'
end
return economizer_type
end

# Determine the limits for the type of economizer present on the AirLoopHVAC, if any.
#
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
class ComStockASHRAE9012016 < ASHRAE9012016
# Determine the prototypical economizer type for the model.
# Defaults to FixedDryBulb based on anecdotal evidence of this being
# the most common type encountered in the field, combined
# with this being the default option for many equipment manufacturers,
# and being the strategy recommended in the 2010 ASHRAE journal article
# "Economizer High Limit Devices and Why Enthalpy Economizers Don't Work"
# by Steven Taylor and Hwakong Cheng.
# https://tayloreng.egnyte.com/dl/mN0c9t4WSO/ASHRAE_Journal_-_Economizer_High_Limit_Devices_and_Why_Enthalpy_Economizers_Dont_Work.pdf_
#
# @param model [OpenStudio::Model::Model] the model
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
# @return [String] the economizer type. Possible values are:
# 'NoEconomizer'
# 'FixedDryBulb'
# 'FixedEnthalpy'
# 'DifferentialDryBulb'
# 'DifferentialEnthalpy'
# 'FixedDewPointAndDryBulb'
# 'ElectronicEnthalpy'
# 'DifferentialDryBulbAndEnthalpy'
def model_economizer_type(model, climate_zone)
economizer_type = 'FixedDryBulb'
return economizer_type
end
end
Original file line number Diff line number Diff line change
@@ -1,6 +1,38 @@
class ASHRAE9012019 < ASHRAE901
# @!group AirLoopHVAC

# Determine the prototypical economizer type for the model.
#
# @param model [OpenStudio::Model::Model] OpenStudio model object
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
# @return [String] the economizer type. Possible values are:
# 'NoEconomizer'
# 'FixedDryBulb'
# 'FixedEnthalpy'
# 'DifferentialDryBulb'
# 'DifferentialEnthalpy'
# 'FixedDewPointAndDryBulb'
# 'ElectronicEnthalpy'
# 'DifferentialDryBulbAndEnthalpy'
def model_economizer_type(model, climate_zone)
economizer_type = case climate_zone
when 'ASHRAE 169-2006-0A',
'ASHRAE 169-2006-1A',
'ASHRAE 169-2006-2A',
'ASHRAE 169-2006-3A',
'ASHRAE 169-2006-4A',
'ASHRAE 169-2013-0A',
'ASHRAE 169-2013-1A',
'ASHRAE 169-2013-2A',
'ASHRAE 169-2013-3A',
'ASHRAE 169-2013-4A'
'DifferentialEnthalpy'
else
'DifferentialDryBulb'
end
return economizer_type
end

# Determine the limits for the type of economizer present on the AirLoopHVAC, if any.
#
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
class ComStockASHRAE9012019 < ASHRAE9012019
# Determine the prototypical economizer type for the model.
# Defaults to FixedDryBulb based on anecdotal evidence of this being
# the most common type encountered in the field, combined
# with this being the default option for many equipment manufacturers,
# and being the strategy recommended in the 2010 ASHRAE journal article
# "Economizer High Limit Devices and Why Enthalpy Economizers Don't Work"
# by Steven Taylor and Hwakong Cheng.
# https://tayloreng.egnyte.com/dl/mN0c9t4WSO/ASHRAE_Journal_-_Economizer_High_Limit_Devices_and_Why_Enthalpy_Economizers_Dont_Work.pdf_
#
# @param model [OpenStudio::Model::Model] the model
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
# @return [String] the economizer type. Possible values are:
# 'NoEconomizer'
# 'FixedDryBulb'
# 'FixedEnthalpy'
# 'DifferentialDryBulb'
# 'DifferentialEnthalpy'
# 'FixedDewPointAndDryBulb'
# 'ElectronicEnthalpy'
# 'DifferentialDryBulbAndEnthalpy'
def model_economizer_type(model, climate_zone)
economizer_type = 'FixedDryBulb'
return economizer_type
end
end
Loading

0 comments on commit d2b5e28

Please sign in to comment.