Skip to content

Commit

Permalink
Merge pull request #1840 from NREL/data_update_bea47dc
Browse files Browse the repository at this point in the history
Building Energy Standards Economizers Data Update
  • Loading branch information
mdahlhausen authored Dec 20, 2024
2 parents 9165476 + f7cb97d commit 52b5e22
Show file tree
Hide file tree
Showing 22 changed files with 10,587 additions and 5,554 deletions.
4 changes: 1 addition & 3 deletions data/standards/manage_OpenStudio_Standards.rb
Original file line number Diff line number Diff line change
Expand Up @@ -131,9 +131,7 @@ def unique_properties(sheet_name)
when 'refrigeration_compressors'
['template', 'compressor_name', 'compressor_type']
when 'economizers'
['template', 'climate_zone', 'data_center']
when 'prm_economizers'
['template', 'climate_ID']
['climate_zone', 'data_center', 'minimum_capacity', 'fan_cooling_application', 'minimum_water_cooled_chilled_water_capacity_no_fan_cooling', 'minimum_air_cooled_chilled_water_or_district_chilled_water_capacity_no_fan_cooling', 'fixed_dry_bulb_is_allowed', 'differential_dry_bulb_is_allowed', 'electronic_enthalpy_is_allowed', 'differential_enthalpy_is_allowed', 'dew_point_dry_bulb_is_allowed', 'fixed_enthalpy_is_allowed', 'fixed_enthalpy_fixed_dry_bulb_is_allowed', 'differential_enthalpy_fixed_dry_bulb_is_allowed', 'fixed_dry_bulb_high_limit_shutoff_temp', 'fixed_enthalpy_high_limit_shutoff_enthalpy', 'dew_point_dry_bulb_high_limit_shutoff_dew_point_temp', 'dew_point_dry_bulb_high_limit_shutoff_dry_bulb_temp', 'fixed_enthalpy_fixed_dry_bulb_high_limit_shutoff_enthalpy', 'fixed_enthalpy_fixed_dry_bulb_high_limit_shutoff_dry_bulb_temp', 'differential_enthalpy_fixed_dry_bulb_high_limit_shutoff_dry_bulb_temp', 'percent_increase_cooling_efficiency_eliminate_requirement', 'heat_recovery_exempted']
when 'motors'
['template', 'number_of_poles', 'type', 'synchronous_speed', 'minimum_capacity', 'maximum_capacity']
when 'ground_temperatures'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2019,6 +2019,9 @@ def apply_economizers(climate_zone, model)
econ_max_70_pct_oa_sch.defaultDaySchedule.setName('Economizer Max OA Fraction 70 pct Default')
econ_max_70_pct_oa_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0.7)

# Store original climate zones
climate_zone_code = climate_zone

# Check each airloop
model.getAirLoopHVACs.sort.each do |air_loop|
economizer_required = false
Expand Down Expand Up @@ -2050,14 +2053,19 @@ def apply_economizers(climate_zone, model)
# specified, economizer requirements were aimed at comfort
# cooling, not computer room cooling (as per input from the MSC).

# Process climate zone:
# Moisture regime is not needed for climate zone 8
climate_zone = climate_zone.split('-')[-1]
climate_zone = '8' if climate_zone.include?('8')

# Get the size threshold requirement
search_criteria = {
'template' => template,
'climate_zone' => climate_zone,
'data_center' => true
}
econ_limits = model_find_object(standards_data['economizers'], search_criteria)
minimum_capacity_btu_per_hr = econ_limits['capacity_limit']
minimum_capacity_btu_per_hr = econ_limits['minimum_capacity']
economizer_required = !minimum_capacity_btu_per_hr.nil?
elsif @instvarbuilding_type == 'LargeOffice' && air_loop_hvac_include_wshp?(air_loop)
# WSHP serving the IT closets are assumed to always be too
Expand All @@ -2070,7 +2078,7 @@ def apply_economizers(climate_zone, model)
if economizer_required
# If an economizer is required, determine the economizer type
# in the prototype buildings, which depends on climate zone.
economizer_type = model_economizer_type(model, climate_zone)
economizer_type = model_economizer_type(model, climate_zone_code)

# Set the economizer type
# Get the OA system and OA controller
Expand All @@ -2087,7 +2095,7 @@ def apply_economizers(climate_zone, model)

# Check that the economizer type set by the prototypes
# is not prohibited by code. If it is, change to no economizer.
unless air_loop_hvac_economizer_type_allowable?(air_loop, climate_zone)
unless air_loop_hvac_economizer_type_allowable?(air_loop, climate_zone_code)
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.prototype.Model', "#{air_loop.name} is required to have an economizer, but the type chosen, #{economizer_type} is prohibited by code for climate zone #{climate_zone}. Economizer type will be switched to No Economizer.")
oa_control.setEconomizerControlType('NoEconomizer')
end
Expand Down
18 changes: 14 additions & 4 deletions lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb
Original file line number Diff line number Diff line change
Expand Up @@ -965,6 +965,11 @@ def air_loop_hvac_economizer_required?(air_loop_hvac, climate_zone)
is_dc = true
end

# Process climate zone:
# Moisture regime is not needed for climate zone 8
climate_zone = climate_zone.split('-')[-1]
climate_zone = '8' if climate_zone.include?('8')

# Retrieve economizer limits from JSON
search_criteria = {
'template' => template,
Expand All @@ -978,7 +983,7 @@ def air_loop_hvac_economizer_required?(air_loop_hvac, climate_zone)
end

# Determine the minimum capacity and whether or not it is a data center
minimum_capacity_btu_per_hr = econ_limits['capacity_limit']
minimum_capacity_btu_per_hr = econ_limits['minimum_capacity']

# A big number of btu per hr as the minimum requirement if nil in spreadsheet
infinity_btu_per_hr = 999_999_999_999
Expand Down Expand Up @@ -1115,17 +1120,22 @@ def air_loop_hvac_economizer_limits(air_loop_hvac, climate_zone)
when 'NoEconomizer'
return [nil, nil, nil]
when 'FixedDryBulb'
# Process climate zone:
# Moisture regime is not needed for climate zone 8
climate_zone = climate_zone.split('-')[-1]
climate_zone = '8' if climate_zone.include?('8')

search_criteria = {
'template' => template,
'climate_zone' => climate_zone
}
econ_limits = model_find_object(standards_data['economizers'], search_criteria)
drybulb_limit_f = econ_limits['fixed_dry_bulb_high_limit_shutoff_temp']
when 'FixedEnthalpy'
enthalpy_limit_btu_per_lb = 28
enthalpy_limit_btu_per_lb = 28.0
when 'FixedDewPointAndDryBulb'
drybulb_limit_f = 75
dewpoint_limit_f = 55
drybulb_limit_f = 75.0
dewpoint_limit_f = 55.0
end

return [drybulb_limit_f, enthalpy_limit_btu_per_lb, dewpoint_limit_f]
Expand Down
Loading

0 comments on commit 52b5e22

Please sign in to comment.