lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb in openstudio-standards-0.1.4 vs lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb in openstudio-standards-0.1.5
- old
+ new
@@ -1,189 +1,189 @@
# open the class to add methods to return sizing values
class OpenStudio::Model::CoilHeatingDXSingleSpeed
-
# Finds the 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] has for search criteria to be used for find object
def find_search_criteria(template)
-
# Define the criteria to find the chiller properties
# in the hvac standards data set.
search_criteria = {}
search_criteria['template'] = template
- # TODO Standards - add split system vs single package to model
+ # TODO: Standards - add split system vs single package to model
# For now, assume single package
subcategory = 'Single Package'
search_criteria['subcategory'] = subcategory
return search_criteria
-
end
# Finds capacity in Btu/hr
#
# @return [Double] capacity in Btu/hr to be used for find object
- def find_capacity()
-
+ def find_capacity
# Get the coil capacity
capacity_w = nil
- if self.ratedTotalHeatingCapacity.is_initialized
- capacity_w = self.ratedTotalHeatingCapacity.get
- elsif self.autosizedRatedTotalHeatingCapacity.is_initialized
- capacity_w = self.autosizedRatedTotalHeatingCapacity.get
+ if ratedTotalHeatingCapacity.is_initialized
+ capacity_w = ratedTotalHeatingCapacity.get
+ elsif autosizedRatedTotalHeatingCapacity.is_initialized
+ capacity_w = autosizedRatedTotalHeatingCapacity.get
else
- OpenStudio::logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{self.name} capacity is not available, cannot apply efficiency standard.")
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{name} capacity is not available, cannot apply efficiency standard.")
return false
end
# Convert capacity to Btu/hr
- capacity_btu_per_hr = OpenStudio.convert(capacity_w, "W", "Btu/hr").get
+ capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
return capacity_btu_per_hr
-
end
# Finds lookup object in standards and return 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] full load efficiency (COP)
- def standard_minimum_cop(template,standards)
-
+ def standard_minimum_cop(template, standards)
# find ac properties
- search_criteria = self.find_search_criteria(template)
- subcategory = search_criteria["subcategory"]
- capacity_btu_per_hr = self.find_capacity
- capacity_kbtu_per_hr = OpenStudio.convert(capacity_btu_per_hr, "Btu/hr", "kBtu/hr").get
+ search_criteria = find_search_criteria(template)
+ subcategory = search_criteria['subcategory']
+ capacity_btu_per_hr = find_capacity
+ capacity_kbtu_per_hr = OpenStudio.convert(capacity_btu_per_hr, 'Btu/hr', 'kBtu/hr').get
# Determine supplemental heating type if unitary
heat_pump = false
- if self.airLoopHVAC.empty?
- if self.containingHVACComponent.is_initialized
+ if airLoopHVAC.empty?
+ if containingHVACComponent.is_initialized
containing_comp = containingHVACComponent.get
if containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAir.is_initialized
heat_pump = true
end
end
end
# find object
- ac_props = nil
- if heat_pump == true
- ac_props = self.model.find_object(standards['heat_pumps_heating'], search_criteria, capacity_btu_per_hr)
- else
- ac_props = self.model.find_object(standards['heat_pumps'], search_criteria, capacity_btu_per_hr)
- end
+ ac_props = model.find_object(standards['heat_pumps_heating'], search_criteria, capacity_btu_per_hr, Date.today)
# Get the minimum efficiency standards
cop = nil
# Check to make sure properties were found
if ac_props.nil?
- OpenStudio::logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{self.name}, cannot find efficiency info, cannot apply efficiency standard.")
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{name}, cannot find efficiency info, cannot apply efficiency standard.")
return cop # value of nil
end
- # If specified as SEER
- unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil?
- min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio']
- cop = seer_to_cop(min_seer)
- OpenStudio::logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{self.name}: #{suppl_heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
+ # If specified as HSPF
+ unless ac_props['minimum_heating_seasonal_performance_factor'].nil?
+ min_hspf = ac_props['minimum_heating_seasonal_performance_factor']
+ cop = hspf_to_cop_heating_no_fan(min_hspf)
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{name}: #{suppl_heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; HSPF = #{min_hspf}")
end
+ # If specified as COPH
+ unless ac_props['minimum_coefficient_of_performance_heating'].nil?
+ min_coph = ac_props['minimum_coefficient_of_performance_heating']
+ cop = cop_heating_to_cop_heating_no_fan(min_coph, OpenStudio.convert(capacity_kbtu_per_hr, 'kBtu/hr', 'W').get)
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{name}: #{suppl_heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; COPH = #{min_coph}")
+ end
+
# If specified as EER
unless ac_props['minimum_energy_efficiency_ratio'].nil?
min_eer = ac_props['minimum_energy_efficiency_ratio']
- cop = eer_to_cop(min_eer)
- OpenStudio::logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{self.name}: #{suppl_heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
+ cop = eer_to_cop(min_eer, OpenStudio.convert(capacity_kbtu_per_hr, 'kBtu/hr', 'W').get)
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{name}: #{suppl_heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
end
return cop
-
end
- def setStandardEfficiencyAndCurves(template, sql_db_vars_map)
-
+ def apply_efficiency_and_curves(template, sql_db_vars_map)
successfully_set_all_properties = true
-
+
unitary_hps = $os_standards['heat_pumps']
heat_pumps = $os_standards['heat_pumps_heating']
-
+
# Define the criteria to find the unitary properties
# in the hvac standards data set.
search_criteria = {}
search_criteria['template'] = template
- # TODO Standards - add split system vs single package to model
+ # TODO: Standards - add split system vs single package to model
# For now, assume single package
subcategory = 'Single Package'
- search_criteria['subcategory'] = subcategory
+ # Assume they are all aircooled for now
+ search_criteria['cooling_type'] = 'AirCooled'
+
# Determine supplemental heating type if unitary
- heat_pump = false
+ unitary = false
suppl_heating_type = nil
- if self.airLoopHVAC.empty?
- if self.containingHVACComponent.is_initialized
+ if airLoopHVAC.empty?
+ if containingHVACComponent.is_initialized
containing_comp = containingHVACComponent.get
if containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAir.is_initialized
- heat_pump = true
+ unitary = true
htg_coil = containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.supplementalHeatingCoil
- if htg_coil.to_CoilHeatingElectric.is_initialized
- suppl_heating_type = 'Electric Resistance or None'
- else
- suppl_heating_type = 'All Other'
- end
- end # TODO Add other unitary systems
- elsif self.containingZoneHVACComponent.is_initialized
- containing_comp = self.containingZoneHVACComponent.get
+ suppl_heating_type = if htg_coil.to_CoilHeatingElectric.is_initialized
+ 'Electric Resistance or None'
+ else
+ 'All Other'
+ end
+ end # TODO: Add other unitary systems
+ elsif containingZoneHVACComponent.is_initialized
+ containing_comp = containingZoneHVACComponent.get
# PTHP
if containing_comp.to_ZoneHVACPackagedTerminalHeatPump.is_initialized
pthp = containing_comp.to_ZoneHVACPackagedTerminalHeatPump.get
- #heat_pump = true?
- # Todo: Should we implement a subcategory for PTHP like there is one for PTAC?
- # Because for PTHP the COP has two coefficients two (eg 90.1-2007: COP = 3.2 - 0.000026*Cap)
subcategory = 'PTHP'
htg_coil = containing_comp.to_ZoneHVACPackagedTerminalHeatPump.get.supplementalHeatingCoil
- if htg_coil.to_CoilHeatingElectric.is_initialized
- suppl_heating_type = 'Electric Resistance or None'
- else
- suppl_heating_type = 'All Other'
- end
+ suppl_heating_type = if htg_coil.to_CoilHeatingElectric.is_initialized
+ 'Electric Resistance or None'
+ else
+ 'All Other'
+ end
end
end
end
+ # Add the subcategory to the search criteria
+ search_criteria['subcategory'] = subcategory
+
# Determine the supplemental heating type if on an airloop
- if self.airLoopHVAC.is_initialized
- air_loop = self.airLoopHVAC.get
- if air_loop.supplyComponents('Coil:Heating:Electric'.to_IddObjectType).size > 0
- suppl_heating_type = 'Electric Resistance or None'
- elsif air_loop.supplyComponents('Coil:Heating:Gas'.to_IddObjectType).size > 0
- suppl_heating_type = 'All Other'
- elsif air_loop.supplyComponents('Coil:Heating:Water'.to_IddObjectType).size > 0
- suppl_heating_type = 'All Other'
- elsif air_loop.supplyComponents('Coil:Heating:DX:SingleSpeed'.to_IddObjectType).size > 0
- suppl_heating_type = 'All Other'
- elsif air_loop.supplyComponents('Coil:Heating:Gas:MultiStage'.to_IddObjectType).size > 0
- suppl_heating_type = 'All Other'
- elsif air_loop.supplyComponents('Coil:Heating:Desuperheater'.to_IddObjectType).size > 0
- suppl_heating_type = 'All Other'
- elsif air_loop.supplyComponents('Coil:Heating:WaterToAirHeatPump:EquationFit'.to_IddObjectType).size > 0
- suppl_heating_type = 'All Other'
- else
- suppl_heating_type = 'Electric Resistance or None'
- end
+ if airLoopHVAC.is_initialized
+ air_loop = airLoopHVAC.get
+ suppl_heating_type = if !air_loop.supplyComponents('OS:Coil:Heating:Electric'.to_IddObjectType).empty?
+ 'Electric Resistance or None'
+ elsif !air_loop.supplyComponents('OS:Coil:Heating:Gas'.to_IddObjectType).empty?
+ 'All Other'
+ elsif !air_loop.supplyComponents('OS:Coil:Heating:Water'.to_IddObjectType).empty?
+ 'All Other'
+ elsif !air_loop.supplyComponents('OS:Coil:Heating:DX:SingleSpeed'.to_IddObjectType).empty?
+ 'All Other'
+ elsif !air_loop.supplyComponents('OS:Coil:Heating:Gas:MultiStage'.to_IddObjectType).empty?
+ 'All Other'
+ elsif !air_loop.supplyComponents('OS:Coil:Heating:Desuperheater'.to_IddObjectType).empty?
+ 'All Other'
+ elsif !air_loop.supplyComponents('OS:Coil:Heating:WaterToAirHeatPump:EquationFit'.to_IddObjectType).empty?
+ 'All Other'
+ else
+ 'Electric Resistance or None'
+ end
end
+ # Add the heating type to the search criteria
+ unless suppl_heating_type.nil?
+ search_criteria['heating_type'] = suppl_heating_type
+ end
# Get the coil capacity
capacity_w = nil
- if(heat_pump == true)
- containing_comp = self.containingHVACComponent.get
+ if unitary
+ containing_comp = containingHVACComponent.get
heat_pump_comp = containing_comp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get
ccoil = heat_pump_comp.coolingCoil
dxcoil = ccoil.to_CoilCoolingDXSingleSpeed.get
dxcoil_name = dxcoil.name.to_s
if sql_db_vars_map
@@ -194,143 +194,133 @@
if dxcoil.ratedTotalCoolingCapacity.is_initialized
capacity_w = dxcoil.ratedTotalCoolingCapacity.get
elsif dxcoil.autosizedRatedTotalCoolingCapacity.is_initialized
capacity_w = dxcoil.autosizedRatedTotalCoolingCapacity.get
else
- OpenStudio::logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{self.name} capacity is not available, cannot apply efficiency standard.")
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{name} capacity is not available, cannot apply efficiency standard.")
successfully_set_all_properties = false
- return successfully_set_all_properties
+ return successfully_set_all_properties
end
dxcoil.setName(dxcoil_name)
else
- if self.ratedTotalHeatingCapacity.is_initialized
- capacity_w = self.ratedTotalHeatingCapacity.get
- elsif self.autosizedRatedTotalHeatingCapacity.is_initialized
- capacity_w = self.autosizedRatedTotalHeatingCapacity.get
+ if ratedTotalHeatingCapacity.is_initialized
+ capacity_w = ratedTotalHeatingCapacity.get
+ elsif autosizedRatedTotalHeatingCapacity.is_initialized
+ capacity_w = autosizedRatedTotalHeatingCapacity.get
else
- OpenStudio::logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{self.name} capacity is not available, cannot apply efficiency standard.")
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{name} capacity is not available, cannot apply efficiency standard.")
successfully_set_all_properties = false
return successfully_set_all_properties
- end
+ end
end
# 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
+ capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
+ capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
- # Lookup efficiencies depending on whether it is a unitary AC or a heat pump
+ # Lookup efficiencies depending on whether it is a unitary HP or a heat pump
ac_props = nil
- if heat_pump == true
- ac_props = self.model.find_object(heat_pumps, search_criteria, capacity_btu_per_hr)
- else
- ac_props = self.model.find_object(unitary_hps, search_criteria, capacity_btu_per_hr)
- end
+ ac_props = if unitary == true
+ model.find_object(unitary_hps, search_criteria, capacity_btu_per_hr, Date.today)
+ else
+ model.find_object(heat_pumps, search_criteria, capacity_btu_per_hr, Date.today)
+ end
- # TODO: REMOVE THIS, TEMPORARY HACK ONLY
- if subcategory == 'PTHP'
- case template
- when '90.1-2007'
- pthp_cop_coeff_1 = 3.2
- pthp_cop_coeff_2 = -0.000026
- when '90.1-2010'
- # As of 10/08/2012
- pthp_cop_coeff_1 = 3.7
- pthp_cop_coeff_2 = -0.000052
- end
-
- # TABLE 6.8.1D
- # COP = pthp_cop_coeff_1 + pthp_cop_coeff_2 * Cap
- # Note c: Cap means the rated cooling capacity of the product in Btu/h.
- # If the unit’s capacity is less than 7000 Btu/h, use 7000 Btu/h in the calculation.
- # If the unit’s capacity is greater than 15,000 Btu/h, use 15,000 Btu/h in the calculation.
- capacity_btu_per_hr = 7000 if capacity_btu_per_hr < 7000
- capacity_btu_per_hr = 15000 if capacity_btu_per_hr > 15000
- pthp_cop = pthp_cop_coeff_1 + (pthp_cop_coeff_2 * capacity_btu_per_hr)
- new_comp_name = "#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{pthp_cop.round(1)}COP"
- self.setName(new_comp_name)
- self.setRatedCOP(pthp_cop)
- OpenStudio::logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "HACK: For #{template}: #{self.name}: #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr #{pthp_cop.round(2)}COP")
- end
- # TODO: END OF REMOVE THIS TEMPORARY HACK ONLY
-
# Check to make sure properties were found
if ac_props.nil?
- OpenStudio::logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{self.name}, cannot find efficiency info, cannot apply efficiency standard.")
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{name}, cannot find efficiency info, cannot apply efficiency standard.")
successfully_set_all_properties = false
return successfully_set_all_properties
end
# Make the HEAT-CAP-FT curve
- heat_cap_ft = self.model.add_curve(ac_props["heat_cap_ft"])
+ heat_cap_ft = model.add_curve(ac_props['heat_cap_ft'])
if heat_cap_ft
- self.setTotalHeatingCapacityFunctionofTemperatureCurve(heat_cap_ft)
+ setTotalHeatingCapacityFunctionofTemperatureCurve(heat_cap_ft)
else
- OpenStudio::logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{self.name}, cannot find heat_cap_ft curve, will not be set.")
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{name}, cannot find heat_cap_ft curve, will not be set.")
successfully_set_all_properties = false
end
# Make the HEAT-CAP-FFLOW curve
- heat_cap_fflow = self.model.add_curve(ac_props["heat_cap_fflow"])
+ heat_cap_fflow = model.add_curve(ac_props['heat_cap_fflow'])
if heat_cap_fflow
- self.setTotalHeatingCapacityFunctionofFlowFractionCurve(heat_cap_fflow)
+ setTotalHeatingCapacityFunctionofFlowFractionCurve(heat_cap_fflow)
else
- OpenStudio::logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{self.name}, cannot find heat_cap_fflow curve, will not be set.")
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{name}, cannot find heat_cap_fflow curve, will not be set.")
successfully_set_all_properties = false
end
-
+
# Make the HEAT-EIR-FT curve
- heat_eir_ft = self.model.add_curve(ac_props["heat_eir_ft"])
+ heat_eir_ft = model.add_curve(ac_props['heat_eir_ft'])
if heat_eir_ft
- self.setEnergyInputRatioFunctionofTemperatureCurve(heat_eir_ft)
+ setEnergyInputRatioFunctionofTemperatureCurve(heat_eir_ft)
else
- OpenStudio::logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{self.name}, cannot find heat_eir_ft curve, will not be set.")
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{name}, cannot find heat_eir_ft curve, will not be set.")
successfully_set_all_properties = false
end
# Make the HEAT-EIR-FFLOW curve
- heat_eir_fflow = self.model.add_curve(ac_props["heat_eir_fflow"])
+ heat_eir_fflow = model.add_curve(ac_props['heat_eir_fflow'])
if heat_eir_fflow
- self.setEnergyInputRatioFunctionofFlowFractionCurve(heat_eir_fflow)
+ setEnergyInputRatioFunctionofFlowFractionCurve(heat_eir_fflow)
else
- OpenStudio::logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{self.name}, cannot find heat_eir_fflow curve, will not be set.")
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{name}, cannot find heat_eir_fflow curve, will not be set.")
successfully_set_all_properties = false
end
-
+
# Make the HEAT-PLF-FPLR curve
- heat_plf_fplr = self.model.add_curve(ac_props["heat_plf_fplr"])
+ heat_plf_fplr = model.add_curve(ac_props['heat_plf_fplr'])
if heat_plf_fplr
- self.setPartLoadFractionCorrelationCurve(heat_plf_fplr)
+ setPartLoadFractionCorrelationCurve(heat_plf_fplr)
else
- OpenStudio::logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{self.name}, cannot find heat_plf_fplr curve, will not be set.")
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{name}, cannot find heat_plf_fplr curve, will not be set.")
successfully_set_all_properties = false
- end
-
+ end
+
# Get the minimum efficiency standards
cop = nil
-
- # If specified as SEER
- unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil?
- min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio']
- cop = seer_to_cop(min_seer)
- self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER")
- OpenStudio::logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{self.name}: #{suppl_heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
+
+ # If PTHP, use equations
+ if subcategory == 'PTHP'
+ pthp_cop_coeff_1 = ac_props['pthp_cop_coefficient_1']
+ pthp_cop_coeff_2 = ac_props['pthp_cop_coefficient_2']
+ # TABLE 6.8.1D
+ # COP = pthp_cop_coeff_1 - (pthp_cop_coeff_2 * Cap / 1000)
+ # Note c: Cap means the rated cooling capacity of the product in Btu/h.
+ # If the unit's capacity is less than 7000 Btu/h, use 7000 Btu/h in the calculation.
+ # If the unit's capacity is greater than 15,000 Btu/h, use 15,000 Btu/h in the calculation.
+ capacity_btu_per_hr = 7000 if capacity_btu_per_hr < 7000
+ capacity_btu_per_hr = 15_000 if capacity_btu_per_hr > 15_000
+ cop = pthp_cop_coeff_1 - (pthp_cop_coeff_2 * capacity_btu_per_hr / 1000.0)
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{name}: #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; COPH = #{cop.round(2)}")
end
-
+
+ # If specified as HSPF
+ unless ac_props['minimum_heating_seasonal_performance_factor'].nil?
+ min_hspf = ac_props['minimum_heating_seasonal_performance_factor']
+ cop = hspf_to_cop_heating_no_fan(min_hspf)
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{name}: #{suppl_heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; HSPF = #{min_hspf}")
+ end
+
+ # If specified as COPH
+ unless ac_props['minimum_coefficient_of_performance_heating'].nil?
+ min_coph = ac_props['minimum_coefficient_of_performance_heating']
+ cop = cop_heating_to_cop_heating_no_fan(min_coph, OpenStudio.convert(capacity_kbtu_per_hr, 'kBtu/hr', 'W').get)
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{name}: #{suppl_heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; COPH = #{min_coph}")
+ end
+
# If specified as EER
unless ac_props['minimum_energy_efficiency_ratio'].nil?
min_eer = ac_props['minimum_energy_efficiency_ratio']
- cop = eer_to_cop(min_eer)
- self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER")
- OpenStudio::logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{self.name}: #{suppl_heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
+ cop = eer_to_cop(min_eer, OpenStudio.convert(capacity_kbtu_per_hr, 'kBtu/hr', 'W').get)
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{name}: #{suppl_heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
end
-
# Set the efficiency values
unless cop.nil?
- self.setRatedCOP(cop)
+ setRatedCOP(cop)
end
return sql_db_vars_map
-
end
-
end