lib/openstudio-standards/standards/Standards.BoilerHotWater.rb in openstudio-standards-0.1.15 vs lib/openstudio-standards/standards/Standards.BoilerHotWater.rb in openstudio-standards-0.2.0.rc1

- old
+ new

@@ -1,29 +1,29 @@ -# Reopen the OpenStudio class to add methods to apply standards to this object -class OpenStudio::Model::BoilerHotWater +class Standard + # @!group BoilerHotWater + # find search criteria # - # @param template [String] valid choices: 'DOE Ref Pre-1980', 'DOE Ref 1980-2004', '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013' - # @return [Hash] used for find_object - def find_search_criteria(template) + # @return [Hash] used for model_find_object(model) + def boiler_hot_water_find_search_criteria(boiler_hot_water) # Define the criteria to find the boiler properties # in the hvac standards data set. search_criteria = {} search_criteria['template'] = template # Get fuel type fuel_type = nil - case fuelType + case boiler_hot_water.fuelType when 'NaturalGas' fuel_type = 'Gas' when 'Electricity' fuel_type = 'Electric' when 'FuelOil#1', 'FuelOil#2' fuel_type = 'Oil' else - OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.BoilerHotWater', "For #{name}, a fuel type of #{fuelType} is not yet supported. Assuming 'Gas.'") + OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.BoilerHotWater', "For #{boiler_hot_water.name}, a fuel type of #{fuelType} is not yet supported. Assuming 'Gas.'") fuel_type = 'Gas' end search_criteria['fuel_type'] = fuel_type @@ -35,44 +35,42 @@ end # Find capacity in W # # @return [Double] capacity in W - def find_capacity + def boiler_hot_water_find_capacity(boiler_hot_water) capacity_w = nil - if nominalCapacity.is_initialized - capacity_w = nominalCapacity.get - elsif autosizedNominalCapacity.is_initialized - capacity_w = autosizedNominalCapacity.get + if boiler_hot_water.nominalCapacity.is_initialized + capacity_w = boiler_hot_water.nominalCapacity.get + elsif boiler_hot_water.autosizedNominalCapacity.is_initialized + capacity_w = boiler_hot_water.autosizedNominalCapacity.get else - OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.BoilerHotWater', "For #{name} capacity is not available, cannot apply efficiency standard.") + OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.BoilerHotWater', "For #{boiler_hot_water.name} capacity is not available, cannot apply efficiency standard.") successfully_set_all_properties = false return successfully_set_all_properties end return capacity_w end # Finds lookup object in standards and return minimum thermal efficiency # - # @param template [String] valid choices: 'DOE Ref Pre-1980', 'DOE Ref 1980-2004', '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013' - # @param standards [Hash] the OpenStudio_Standards spreadsheet in hash format # @return [Double] minimum thermal efficiency - def standard_minimum_thermal_efficiency(template, rename=false) + def boiler_hot_water_standard_minimum_thermal_efficiency(boiler_hot_water, rename = false) # Get the boiler properties - search_criteria = find_search_criteria(template) - capacity_w = find_capacity + search_criteria = boiler_hot_water_find_search_criteria(boiler_hot_water) + capacity_w = boiler_hot_water_find_capacity(boiler_hot_water) 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 minimum efficiency standards thermal_eff = nil # Get the boiler properties - blr_props = model.find_object($os_standards['boilers'], search_criteria, capacity_btu_per_hr) + blr_props = model_find_object(standards_data['boilers'], search_criteria, capacity_btu_per_hr) unless blr_props - OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.BoilerHotWater', "For #{name}, cannot find boiler properties, cannot apply efficiency standard.") + OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.BoilerHotWater', "For #{boiler_hot_water.name}, cannot find boiler properties, cannot apply efficiency standard.") successfully_set_all_properties = false return successfully_set_all_properties end fuel_type = blr_props['fuel_type'] @@ -80,133 +78,107 @@ # If specified as AFUE unless blr_props['minimum_annual_fuel_utilization_efficiency'].nil? min_afue = blr_props['minimum_annual_fuel_utilization_efficiency'] thermal_eff = afue_to_thermal_eff(min_afue) - new_comp_name = "#{name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_afue} AFUE" - OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{name}: #{fuel_type} #{fluid_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; AFUE = #{min_afue}") + new_comp_name = "#{boiler_hot_water.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_afue} AFUE" + OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{boiler_hot_water.name}: #{fuel_type} #{fluid_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; AFUE = #{min_afue}") end # If specified as thermal efficiency unless blr_props['minimum_thermal_efficiency'].nil? thermal_eff = blr_props['minimum_thermal_efficiency'] - new_comp_name = "#{name} #{capacity_kbtu_per_hr.round}kBtu/hr #{thermal_eff} Thermal Eff" - OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{name}: #{fuel_type} #{fluid_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; Thermal Efficiency = #{thermal_eff}") + new_comp_name = "#{boiler_hot_water.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{thermal_eff} Thermal Eff" + OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{boiler_hot_water.name}: #{fuel_type} #{fluid_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; Thermal Efficiency = #{thermal_eff}") end # If specified as combustion efficiency unless blr_props['minimum_combustion_efficiency'].nil? min_comb_eff = blr_props['minimum_combustion_efficiency'] thermal_eff = combustion_eff_to_thermal_eff(min_comb_eff) - new_comp_name = "#{name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_comb_eff} Combustion Eff" - OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{name}: #{fuel_type} #{fluid_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; Combustion Efficiency = #{min_comb_eff}") + new_comp_name = "#{boiler_hot_water.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_comb_eff} Combustion Eff" + OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{boiler_hot_water.name}: #{fuel_type} #{fluid_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; Combustion Efficiency = #{min_comb_eff}") end # Rename if rename - setName(new_comp_name) + boiler_hot_water.setName(new_comp_name) end return thermal_eff end # Applies the standard efficiency ratings and typical performance curves to this object. # - # @param template [String] valid choices: 'DOE Ref Pre-1980', 'DOE Ref 1980-2004', '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013', 'NECB2011' - # @param standards [Hash] the OpenStudio_Standards spreadsheet in hash format + # @param boiler_hot_water [OpenStudio::Model::BoilerHotWater] the object to modify # @return [Bool] true if successful, false if not - def apply_efficiency_and_curves(template) - successfully_set_all_properties = false + def boiler_hot_water_apply_efficiency_and_curves(boiler_hot_water) + successfully_set_all_properties = false # Define the criteria to find the boiler properties # in the hvac standards data set. - search_criteria = find_search_criteria(template) + search_criteria = boiler_hot_water_find_search_criteria(boiler_hot_water) fuel_type = search_criteria['fuel_type'] fluid_type = search_criteria['fluid_type'] # Get the capacity - capacity_w = find_capacity + capacity_w = boiler_hot_water_find_capacity(boiler_hot_water) - # for NECB, check if secondary and/or modulating boiler required - if template == 'NECB 2011' - if capacity_w / 1000.0 >= 352.0 - if name.to_s.include?('Primary Boiler') - boiler_capacity = capacity_w - setBoilerFlowMode('LeavingSetpointModulated') - setMinimumPartLoadRatio(0.25) - elsif name.to_s.include?('Secondary Boiler') - boiler_capacity = 0.001 - end - elsif ((capacity_w / 1000.0) >= 176.0) && ((capacity_w / 1000.0) < 352.0) - boiler_capacity = capacity_w / 2 - elsif (capacity_w / 1000.0) <= 176.0 - if name.to_s.include?('Primary Boiler') - boiler_capacity = capacity_w - elsif name.to_s.include?('Secondary Boiler') - boiler_capacity = 0.001 - end - end - setNominalCapacity(boiler_capacity) - end # NECB 2011 - # Convert capacity to Btu/hr - if template == 'NECB 2011' - capacity_btu_per_hr = OpenStudio.convert(boiler_capacity, 'W', 'Btu/hr').get - capacity_kbtu_per_hr = OpenStudio.convert(boiler_capacity, 'W', 'kBtu/hr').get - else - capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get - capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get - end + 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 - blr_props = model.find_object($os_standards['boilers'], search_criteria, capacity_btu_per_hr) + blr_props = model_find_object(standards_data['boilers'], search_criteria, capacity_btu_per_hr) unless blr_props - OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.BoilerHotWater', "For #{name}, cannot find boiler properties, cannot apply efficiency standard.") + OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.BoilerHotWater', "For #{boiler_hot_water.name}, cannot find boiler properties, cannot apply efficiency standard.") successfully_set_all_properties = false return successfully_set_all_properties end - # Make the EFFFPLR curve - eff_fplr = model.add_curve(blr_props['efffplr']) - if eff_fplr - setNormalizedBoilerEfficiencyCurve(eff_fplr) - else - OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.BoilerHotWater', "For #{name}, cannot find eff_fplr curve, will not be set.") - successfully_set_all_properties = false + # Make the EFFFPLR curve (not all boilers will have one) + if blr_props['efffplr'] + eff_fplr = model_add_curve(boiler_hot_water.model, blr_props['efffplr']) + if eff_fplr + boiler_hot_water.setNormalizedBoilerEfficiencyCurve(eff_fplr) + else + OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.BoilerHotWater', "For #{boiler_hot_water.name}, cannot find eff_fplr curve, will not be set.") + successfully_set_all_properties = false + end end # Get the minimum efficiency standards thermal_eff = nil # If specified as AFUE unless blr_props['minimum_annual_fuel_utilization_efficiency'].nil? min_afue = blr_props['minimum_annual_fuel_utilization_efficiency'] thermal_eff = afue_to_thermal_eff(min_afue) - new_comp_name = "#{name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_afue} AFUE" - OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{name}: #{fuel_type} #{fluid_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; AFUE = #{min_afue}") + new_comp_name = "#{boiler_hot_water.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_afue} AFUE" + OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{boiler_hot_water.name}: #{fuel_type} #{fluid_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; AFUE = #{min_afue}") end # If specified as thermal efficiency unless blr_props['minimum_thermal_efficiency'].nil? thermal_eff = blr_props['minimum_thermal_efficiency'] - new_comp_name = "#{name} #{capacity_kbtu_per_hr.round}kBtu/hr #{thermal_eff} Thermal Eff" - OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{name}: #{fuel_type} #{fluid_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; Thermal Efficiency = #{thermal_eff}") + new_comp_name = "#{boiler_hot_water.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{thermal_eff} Thermal Eff" + OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{boiler_hot_water.name}: #{fuel_type} #{fluid_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; Thermal Efficiency = #{thermal_eff}") end # If specified as combustion efficiency unless blr_props['minimum_combustion_efficiency'].nil? min_comb_eff = blr_props['minimum_combustion_efficiency'] thermal_eff = combustion_eff_to_thermal_eff(min_comb_eff) - new_comp_name = "#{name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_comb_eff} Combustion Eff" - OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{name}: #{fuel_type} #{fluid_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; Combustion Efficiency = #{min_comb_eff}") + new_comp_name = "#{boiler_hot_water.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_comb_eff} Combustion Eff" + OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{boiler_hot_water.name}: #{fuel_type} #{fluid_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; Combustion Efficiency = #{min_comb_eff}") end # Set the name - setName(new_comp_name) + boiler_hot_water.setName(new_comp_name) # Set the efficiency values unless thermal_eff.nil? - setNominalThermalEfficiency(thermal_eff) + boiler_hot_water.setNominalThermalEfficiency(thermal_eff) end return successfully_set_all_properties end end