-
Notifications
You must be signed in to change notification settings - Fork 58
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update furnace and boiler efficiency to match values from ASHRAE 90.1-2004 through 2019 #1171
Conversation
…l-heating_gas_apply_efficiency_and_curves function to correctly set the furnace efficiency.
…on to remain consistent with its original usage.
when 'furnaces' | ||
['template', 'minimum_capacity', 'maximum_capacity', 'start_date', 'end_date'] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added to accommodate new furnace JSONs
furnaces,template, | ||
furnaces,minimum_capacity,Btu/hr | ||
furnaces,maximum_capacity,Btu/hr | ||
furnaces,start_date, | ||
furnaces,end_date, | ||
furnaces,minimum_annual_fuel_utilization_efficiency,AFUE | ||
furnaces,minimum_thermal_efficiency,% | ||
furnaces,minimum_combustion_efficiency,% | ||
furnaces,notes, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added to accommodate adding standardized furnace JSONs
successfully_set_all_properties = false | ||
|
||
# Initialize search criteria | ||
search_criteria = {} | ||
search_criteria['template'] = template | ||
|
||
# Get the capacity, but return false if not available | ||
capacity_w = coil_heating_gas_find_capacity(coil_heating_gas) | ||
|
||
# Return false if the coil does not have a heating capacity associated with it. Cannot apply the standard if without | ||
# it. | ||
return successfully_set_all_properties if capacity_w == false | ||
|
||
# Convert capacity to Btu/hr | ||
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get | ||
capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get | ||
|
||
# Get the boiler properties | ||
furnace_props = model_find_object(standards_data['furnaces'], search_criteria, capacity_btu_per_hr) | ||
unless furnace_props | ||
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingGas', "For #{coil_heating_gas.name}, cannot find furnace properties with search criteria #{search_criteria}, cannot apply efficiency standard.") | ||
successfully_set_all_properties = false | ||
return successfully_set_all_properties | ||
end | ||
|
||
# Get the minimum efficiency standards | ||
thermal_eff = nil | ||
|
||
# If specified as thermal efficiency, this takes precedent | ||
if not furnace_props['minimum_thermal_efficiency'].nil? | ||
thermal_eff = furnace_props['minimum_thermal_efficiency'] | ||
new_comp_name = "#{coil_heating_gas.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{thermal_eff} Thermal Eff" | ||
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingGas', "For #{template}: #{coil_heating_gas.name}: = #{capacity_kbtu_per_hr.round}kBtu/hr; Thermal Efficiency = #{thermal_eff}") | ||
|
||
else # If not thermal efficiency, check other parameters | ||
|
||
# If specified as AFUE | ||
unless furnace_props['minimum_annual_fuel_utilization_efficiency'].nil? | ||
min_afue = furnace_props['minimum_annual_fuel_utilization_efficiency'] | ||
thermal_eff = afue_to_thermal_eff(min_afue) | ||
new_comp_name = "#{coil_heating_gas.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_afue} AFUE" | ||
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingGas', "For #{template}: #{coil_heating_gas.name}: = #{capacity_kbtu_per_hr.round}kBtu/hr; AFUE = #{min_afue}") | ||
end | ||
|
||
# If specified as combustion efficiency | ||
unless furnace_props['minimum_combustion_efficiency'].nil? | ||
min_comb_eff = furnace_props['minimum_combustion_efficiency'] | ||
thermal_eff = combustion_eff_to_thermal_eff(min_comb_eff) | ||
new_comp_name = "#{coil_heating_gas.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_comb_eff} Combustion Eff" | ||
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingGas', "For #{template}: #{coil_heating_gas.name}: = #{capacity_kbtu_per_hr.round}kBtu/hr; Combustion Efficiency = #{min_comb_eff}") | ||
end | ||
|
||
end | ||
|
||
# Set the efficiency values | ||
unless thermal_eff.nil? | ||
|
||
# Set the name | ||
coil_heating_gas.setName(new_comp_name) | ||
coil_heating_gas.setGasBurnerEfficiency(thermal_eff) | ||
successfully_set_all_properties = true | ||
end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated existing coil_heating_gas_apply_efficiency_and_curves function to actually set the thermal efficiency based on standard and capacity. Includes many checks for cases where defaults don't exist (e.g., for templates outside 90.1 2004-2019) so that the no default efficiency value is set.
# Find capacity in W | ||
# | ||
# @return [Double] capacity in W | ||
def coil_heating_gas_find_capacity(coil_heating_gas) | ||
capacity_w = nil | ||
if coil_heating_gas.nominalCapacity.is_initialized | ||
capacity_w = coil_heating_gas.nominalCapacity.get | ||
elsif coil_heating_gas.autosizedNominalCapacity.is_initialized | ||
capacity_w = coil_heating_gas.autosizedNominalCapacity.get | ||
else | ||
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingGas', "For #{coil_heating_gas.name} capacity is not available, cannot apply efficiency standard.") | ||
successfully_set_all_properties = false | ||
return successfully_set_all_properties | ||
end | ||
|
||
return capacity_w | ||
end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added a function for finding a coil heating gas's capacity with consideration for autosized vs hardsized coils.
{ | ||
"furnaces": [ | ||
{ | ||
"template": "90.1-2004", | ||
"minimum_capacity": 0.0, | ||
"maximum_capacity": 224999.0, | ||
"start_date": "1919-09-09T00:00:00+00:00", | ||
"end_date": "2999-09-09T00:00:00+00:00", | ||
"minimum_annual_fuel_utilization_efficiency": 0.78, | ||
"minimum_thermal_efficiency": 0.8, | ||
"minimum_combustion_efficiency": null, | ||
"notes": "Table 6.8.1E page 49\n" | ||
}, | ||
{ | ||
"template": "90.1-2004", | ||
"minimum_capacity": 225000.0, | ||
"maximum_capacity": 249999999.0, | ||
"start_date": "1919-09-09T00:00:00+00:00", | ||
"end_date": "2999-09-09T00:00:00+00:00", | ||
"minimum_annual_fuel_utilization_efficiency": null, | ||
"minimum_thermal_efficiency": null, | ||
"minimum_combustion_efficiency": 0.8, | ||
"notes": "Table 6.8.1E page 49\n" | ||
} | ||
] | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You will see many JSON files similar to this. These are the updated JSON files for furnaces that were missing from the repository.
"minimum_annual_fuel_utilization_efficiency": 0.82, | ||
"minimum_annual_fuel_utilization_efficiency": 0.84, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The value in the existing 2019 boiler JSON was incorrect.
… that was incomplete/incorrect.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This commit is almost ready. I added thermal efficiency data for the doe ref and AEDG standards. Please rebuild the furnaces.json files (2 ref buildings, 2 AEDG jsons that will be new).
…EDG, and NREL ZNE
Hi Matt. I updated the JSONs with the changes you made to the standards spreadsheet. |
…mplates that don't have a 'furnaces' table
The proposed changes includes two changes:
For more information regarding the motivation for this update, consider looking into Addendum 90.1-2019 BP and Addendum 90.1-2019 BO.