Class: OpenStudio::Model::CoilCoolingDXTwoSpeed

Inherits:
Object
  • Object
show all
Includes:
CoilDX
Defined in:
lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb,
lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXTwoSpeed.rb

Overview

open the class to add methods to return sizing values

Instance Method Summary collapse

Methods included from CoilDX

#find_search_criteria, #heat_pump?, #heating_type, #subcategory

Instance Method Details

#apply_efficiency_and_curves(template, sql_db_vars_map) ⇒ Bool

Applies the standard efficiency ratings and typical performance curves to this object.

Parameters:

  • template (String)

    valid choices: ‘DOE Ref Pre-1980’, ‘DOE Ref 1980-2004’, ‘90.1-2004’, ‘90.1-2007’, ‘90.1-2010’, ‘90.1-2013’

  • standards (Hash)

    the OpenStudio_Standards spreadsheet in hash format

Returns:

  • (Bool)

    true if successful, false if not



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
# File 'lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb', line 106

def apply_efficiency_and_curves(template, sql_db_vars_map)
  successfully_set_all_properties = true

  # Get the search criteria
  search_criteria = find_search_criteria(template)

  # Get the capacity
  capacity_w = find_capacity
  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
  ac_props = nil
  ac_props = if heat_pump?
               model.find_object($os_standards['heat_pumps'], search_criteria, capacity_btu_per_hr, Date.today)
             else
               model.find_object($os_standards['unitary_acs'], search_criteria, capacity_btu_per_hr, Date.today)
             end

  # Check to make sure properties were found
  if ac_props.nil?
    OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{name}, cannot find efficiency info, cannot apply efficiency standard.")
    successfully_set_all_properties = false
    return sql_db_vars_map
  end

  # Make the total COOL-CAP-FT curve
  tot_cool_cap_ft = model.add_curve(ac_props['cool_cap_ft'])
  if tot_cool_cap_ft
    setTotalCoolingCapacityFunctionOfTemperatureCurve(tot_cool_cap_ft)
  else
    OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{name}, cannot find cool_cap_ft curve, will not be set.")
    successfully_set_all_properties = false
  end

  # Make the total COOL-CAP-FFLOW curve
  tot_cool_cap_fflow = model.add_curve(ac_props['cool_cap_fflow'])
  if tot_cool_cap_fflow
    setTotalCoolingCapacityFunctionOfFlowFractionCurve(tot_cool_cap_fflow)
  else
    OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{name}, cannot find cool_cap_fflow curve, will not be set.")
    successfully_set_all_properties = false
  end

  # Make the COOL-EIR-FT curve
  cool_eir_ft = model.add_curve(ac_props['cool_eir_ft'])
  if cool_eir_ft
    setEnergyInputRatioFunctionOfTemperatureCurve(cool_eir_ft)
  else
    OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{name}, cannot find cool_eir_ft curve, will not be set.")
    successfully_set_all_properties = false
  end

  # Make the COOL-EIR-FFLOW curve
  cool_eir_fflow = model.add_curve(ac_props['cool_eir_fflow'])
  if cool_eir_fflow
    setEnergyInputRatioFunctionOfFlowFractionCurve(cool_eir_fflow)
  else
    OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{name}, cannot find cool_eir_fflow curve, will not be set.")
    successfully_set_all_properties = false
  end

  # Make the COOL-PLF-FPLR curve
  cool_plf_fplr = model.add_curve(ac_props['cool_plf_fplr'])
  if cool_plf_fplr
    setPartLoadFractionCorrelationCurve(cool_plf_fplr)
  else
    OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{name}, cannot find cool_plf_fplr curve, will not be set.")
    successfully_set_all_properties = false
  end

  # Make the low speed COOL-CAP-FT curve
  low_speed_cool_cap_ft = model.add_curve(ac_props['cool_cap_ft'])
  if low_speed_cool_cap_ft
    setLowSpeedTotalCoolingCapacityFunctionOfTemperatureCurve(low_speed_cool_cap_ft)
  else
    OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{name}, cannot find cool_cap_ft curve, will not be set.")
    successfully_set_all_properties = false
  end

  # Make the low speed COOL-EIR-FT curve
  low_speed_cool_eir_ft = model.add_curve(ac_props['cool_eir_ft'])
  if low_speed_cool_eir_ft
    setLowSpeedEnergyInputRatioFunctionOfTemperatureCurve(low_speed_cool_eir_ft)
  else
    OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{name}, cannot find cool_eir_ft curve, will not be set.")
    successfully_set_all_properties = false
  end

  # Preserve the original name
  orig_name = name.to_s

  # Find the minimum COP and rename with efficiency rating
  cop = standard_minimum_cop(template, true)

  # Map the original name to the new name
  sql_db_vars_map[name.to_s] = orig_name

  # Set the efficiency values
  unless cop.nil?
    setRatedHighSpeedCOP(cop)
    setRatedLowSpeedCOP(cop)
  end

  return sql_db_vars_map
end

#applySizingValuesObject

Takes the values calculated by the EnergyPlus sizing routines and puts them into this object model in place of the autosized fields. Must have previously completed a run with sql output for this to work.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXTwoSpeed.rb', line 13

def applySizingValues

  rated_high_speed_air_flow_rate = self.autosizedRatedHighSpeedAirFlowRate
  if rated_high_speed_air_flow_rate.is_initialized
    self.setRatedHighSpeedAirFlowRate(rated_high_speed_air_flow_rate) 
  end

  rated_high_speed_total_cooling_capacity = self.autosizedRatedHighSpeedTotalCoolingCapacity
  if rated_high_speed_total_cooling_capacity.is_initialized
    self.setRatedHighSpeedTotalCoolingCapacity(rated_high_speed_total_cooling_capacity) 
  end    

  rated_high_speed_sensible_heat_ratio = self.autosizedRatedHighSpeedSensibleHeatRatio
  if rated_high_speed_sensible_heat_ratio.is_initialized
    self.setRatedHighSpeedSensibleHeatRatio(rated_high_speed_sensible_heat_ratio) 
  end     
  
  rated_low_speed_air_flow_rate = self.autosizedRatedLowSpeedAirFlowRate
  if rated_low_speed_air_flow_rate.is_initialized
    self.setRatedLowSpeedAirFlowRate(rated_low_speed_air_flow_rate) 
  end  

  rated_low_speed_total_cooling_capacity = self.autosizedRatedLowSpeedTotalCoolingCapacity
  if rated_low_speed_total_cooling_capacity.is_initialized
    self.setRatedLowSpeedTotalCoolingCapacity(rated_low_speed_total_cooling_capacity) 
  end  

  rated_low_speed_sensible_heat_ratio = self.autosizedRatedLowSpeedSensibleHeatRatio
  if rated_low_speed_sensible_heat_ratio.is_initialized
    self.setRatedLowSpeedSensibleHeatRatio(rated_low_speed_sensible_heat_ratio)
  end
  
end

#autosizeObject

Sets all auto-sizeable fields to autosize



6
7
8
# File 'lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXTwoSpeed.rb', line 6

def autosize
  OpenStudio::logFree(OpenStudio::Warn, "openstudio.sizing.CoilCoolingDXTwoSpeed", ".autosize not yet implemented for #{self.iddObject.type.valueDescription}.")
end

#autosizedRatedHighSpeedAirFlowRateObject

returns the autosized rated high speed air flow rate as an optional double



48
49
50
51
52
# File 'lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXTwoSpeed.rb', line 48

def autosizedRatedHighSpeedAirFlowRate

  return self.model.getAutosizedValue(self, 'Design Size High Speed Rated Air Flow Rate', 'm3/s')   
  
end

#autosizedRatedHighSpeedSensibleHeatRatioObject

returns the autosized rated high speed sensible heat ratio as an optional double



62
63
64
65
66
# File 'lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXTwoSpeed.rb', line 62

def autosizedRatedHighSpeedSensibleHeatRatio

  return self.model.getAutosizedValue(self, 'Design Size High Speed Rated Sensible Heat Ratio', '')
  
end

#autosizedRatedHighSpeedTotalCoolingCapacityObject

returns the autosized rated high speed total cooling capacity as an optional double



55
56
57
58
59
# File 'lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXTwoSpeed.rb', line 55

def autosizedRatedHighSpeedTotalCoolingCapacity

  return self.model.getAutosizedValue(self, 'Design Size High Speed Gross Rated Total Cooling Capacity', 'W')
  
end

#autosizedRatedLowSpeedAirFlowRateObject

returns the autosized rated low speed air flow rate as an optional double



69
70
71
72
73
# File 'lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXTwoSpeed.rb', line 69

def autosizedRatedLowSpeedAirFlowRate

  return self.model.getAutosizedValue(self, 'Design Size Low Speed Rated Air Flow Rate', 'm3/s')
  
end

#autosizedRatedLowSpeedSensibleHeatRatioObject

returns the autosized rated low speed sensible heat ratio as an optional double



83
84
85
86
87
# File 'lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXTwoSpeed.rb', line 83

def autosizedRatedLowSpeedSensibleHeatRatio

  return self.model.getAutosizedValue(self, 'Design Size Low Speed Gross Rated Sensible Heat Ratio', '')

end

#autosizedRatedLowSpeedTotalCoolingCapacityObject

returns the autosized rated low speed total cooling capacity as an optional double



76
77
78
79
80
# File 'lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXTwoSpeed.rb', line 76

def autosizedRatedLowSpeedTotalCoolingCapacity

  return self.model.getAutosizedValue(self, 'Design Size Low Speed Gross Rated Total Cooling Capacity', 'W')
  
end

#find_capacityDouble

Finds capacity in W

Returns:

  • (Double)

    capacity in W to be used for find object



9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb', line 9

def find_capacity
  capacity_w = nil
  if ratedHighSpeedTotalCoolingCapacity.is_initialized
    capacity_w = ratedHighSpeedTotalCoolingCapacity.get
  elsif autosizedRatedHighSpeedTotalCoolingCapacity.is_initialized
    capacity_w = autosizedRatedHighSpeedTotalCoolingCapacity.get
  else
    OpenStudio::logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{self.name} capacity is not available, cannot apply efficiency standard.")
    return 0.0
  end

  return capacity_w
end

#standard_minimum_cop(template, rename = false) ⇒ Double

Finds lookup object in standards and return efficiency

Parameters:

  • template (String)

    valid choices: ‘DOE Ref Pre-1980’, ‘DOE Ref 1980-2004’, ‘90.1-2004’, ‘90.1-2007’, ‘90.1-2010’, ‘90.1-2013’

  • standards (Hash)

    the OpenStudio_Standards spreadsheet in hash format

Returns:

  • (Double)

    full load efficiency (COP)



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb', line 28

def standard_minimum_cop(template, rename=false)
  search_criteria = find_search_criteria(template)
  cooling_type = search_criteria['cooling_type']
  heating_type = search_criteria['heating_type']
  sub_category = search_criteria['subcategory']
  capacity_w = find_capacity
  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
  ac_props = nil
  ac_props = if heat_pump?
               model.find_object($os_standards['heat_pumps'], search_criteria, capacity_btu_per_hr, Date.today)
             else
               model.find_object($os_standards['unitary_acs'], search_criteria, capacity_btu_per_hr, Date.today)
             end

  # Check to make sure properties were found
  if ac_props.nil?
    OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{name}, cannot find efficiency info, cannot apply efficiency standard.")
    successfully_set_all_properties = false
    return successfully_set_all_properties
  end

  # Get the minimum efficiency standards
  cop = nil

  # Check to make sure properties were found
  if ac_props.nil?
    OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXTwoSpeed', "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_cooling_no_fan(min_seer)
    new_comp_name = "#{name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
    OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
  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.convert(capacity_kbtu_per_hr, 'kBtu/hr', 'W').get)
    new_comp_name = "#{name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
    OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
  end

  # if specified as SEER (heat pump)
  unless ac_props['minimum_seasonal_efficiency'].nil?
    min_seer = ac_props['minimum_seasonal_efficiency']
    cop = seer_to_cop_cooling_no_fan(min_seer)
    new_comp_name = "#{name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
    OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
  end

  # If specified as EER (heat pump)
  unless ac_props['minimum_full_load_efficiency'].nil?
    min_eer = ac_props['minimum_full_load_efficiency']
    cop = eer_to_cop(min_eer, OpenStudio.convert(capacity_kbtu_per_hr, 'kBtu/hr', 'W').get)
    new_comp_name = "#{name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
    OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
  end

  # Rename
  if rename
    setName(new_comp_name)
  end

  return cop
end