Module: Pump
- Defined in:
- lib/openstudio-standards/standards/Standards.Pump.rb
Overview
A variety of pump calculation methods that are the same regardless of pump type. These methods are available to PumpConstantSpeed, PumpVariableSpeed
Instance Method Summary collapse
-
#brakeHorsepower ⇒ Double
Determines the brake horsepower of the pump based on flow rate, pressure rise, and impeller efficiency.
-
#motorHorsepower ⇒ Double
Determines the horsepower of the pump motor, including motor efficiency and pump impeller efficiency.
-
#pumpPower ⇒ Double
Determines the pump power (W) based on flow rate, pressure rise, and total pump efficiency(impeller eff * motor eff).
-
#rated_w_per_gpm ⇒ Double
Determines the rated watts per GPM of the pump.
-
#set_performance_rating_method_pressure_rise_and_motor_efficiency(target_w_per_gpm, template) ⇒ Bool
Set the pressure rise that cooresponds to the target power per flow number, given the standard pump efficiency and the default EnergyPlus pump impeller efficiency of 0.78.
- #set_standard_minimum_motor_efficiency(template) ⇒ Object
-
#standard_minimum_motor_efficiency_and_size(template, motor_bhp) ⇒ Double
Determines the minimum pump motor efficiency for a given motor bhp.
Instance Method Details
#brakeHorsepower ⇒ Double
Determines the brake horsepower of the pump based on flow rate, pressure rise, and impeller efficiency.
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 |
# File 'lib/openstudio-standards/standards/Standards.Pump.rb', line 167 def brakeHorsepower() # Get flow rate (whether autosized or hard-sized) flow_m3_per_s = 0 if self.autosizedRatedFlowRate.is_initialized flow_m3_per_s = self.autosizedRatedFlowRate.get else flow_m3_per_s = self.ratedFlowRate.get end # E+ default impeller efficiency #http://bigladdersoftware.com/epx/docs/8-4/engineering-reference/component-sizing.html#pump-sizing impeller_eff = 0.78 # Get the pressure rise (Pa) pressure_rise_pa = self.ratedPumpHead # Calculate the pump power (W) pump_power_w = pressure_rise_pa * flow_m3_per_s / impeller_eff # Convert to HP pump_power_hp = pump_power_w / 745.7 # 745.7 W/HP return pump_power_hp end |
#motorHorsepower ⇒ Double
Determines the horsepower of the pump motor, including motor efficiency and pump impeller efficiency.
199 200 201 202 203 204 205 206 207 208 209 |
# File 'lib/openstudio-standards/standards/Standards.Pump.rb', line 199 def motorHorsepower() # Get the pump power pump_power_w = self.pumpPower # Convert to HP pump_hp = pump_power_w / 745.7 # 745.7 W/HP return pump_hp end |
#pumpPower ⇒ Double
Determines the pump power (W) based on flow rate, pressure rise, and total pump efficiency(impeller eff * motor eff). Uses the E+ default assumption of 0.78 impeller efficiency.
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 |
# File 'lib/openstudio-standards/standards/Standards.Pump.rb', line 130 def pumpPower() # Get flow rate (whether autosized or hard-sized) flow_m3_per_s = 0 if self.autosizedRatedFlowRate.is_initialized flow_m3_per_s = self.autosizedRatedFlowRate.get else flow_m3_per_s = self.ratedFlowRate.get end # E+ default impeller efficiency #http://bigladdersoftware.com/epx/docs/8-4/engineering-reference/component-sizing.html#pump-sizing impeller_eff = 0.78 # Get the motor efficiency motor_eff = self.motorEfficiency # Calculate the total efficiency # which includes both motor and # impeller efficiency. pump_total_eff = impeller_eff * motor_eff # Get the pressure rise (Pa) pressure_rise_pa = self.ratedPumpHead # Calculate the pump power (W) pump_power_w = pressure_rise_pa * flow_m3_per_s / pump_total_eff return pump_power_w end |
#rated_w_per_gpm ⇒ Double
Determines the rated watts per GPM of the pump
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 |
# File 'lib/openstudio-standards/standards/Standards.Pump.rb', line 215 def rated_w_per_gpm() # Get design power (whether autosized or hard-sized) rated_power_w = 0 if self.autosizedRatedPowerConsumption.is_initialized rated_power_w = self.autosizedRatedPowerConsumption.get elsif self.ratedPowerConsumption.is_initialized rated_power_w = self.ratedPowerConsumption.get else OpenStudio::logFree(OpenStudio::Error, "openstudio.standards.Pump", "For #{self.name}, could not find rated pump power consumption, cannot determine w per gpm correctly.") return 0.0 end rated_m3_per_s = 0 if self.autosizedRatedFlowRate.is_initialized rated_m3_per_s = self.autosizedRatedFlowRate.get elsif self.ratedFlowRate.is_initialized rated_m3_per_s = self.ratedFlowRate.get else OpenStudio::logFree(OpenStudio::Error, "openstudio.standards.Pump", "For #{self.name}, could not find rated pump Flow Rate, cannot determine w per gpm correctly.") return 0.0 end rated_w_per_m3s = rated_power_w / rated_m3_per_s rated_w_per_gpm = OpenStudio::convert(rated_w_per_m3s, 'W*s/m^3', 'W*min/gal').get return rated_w_per_gpm end |
#set_performance_rating_method_pressure_rise_and_motor_efficiency(target_w_per_gpm, template) ⇒ Bool
Set the pressure rise that cooresponds to the target power per flow number, given the standard pump efficiency and the default EnergyPlus pump impeller efficiency of 0.78.
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/openstudio-standards/standards/Standards.Pump.rb', line 14 def (target_w_per_gpm, template) # Eplus assumes an impeller efficiency of 0.78 to determine the total efficiency # http://bigladdersoftware.com/epx/docs/8-4/engineering-reference/component-sizing.html#pump-sizing # Rated_Power_Use = Rated_Volume_Flow_Rate * Rated_Pump_Head / Total_Efficiency # Rated_Power_Use / Rated_Volume_Flow_Rate = Rated_Pump_Head / Total_Efficiency # Total_Efficiency = Motor_Efficiency * Impeler_Efficiency impeller_efficiency = 0.78 # Get the brake horsepower brake_hp = self.brakeHorsepower # Find the motor efficiency motor_efficiency, nominal_hp = self.standard_minimum_motor_efficiency_and_size(template, brake_hp) # Change the motor efficiency self.setMotorEfficiency(motor_efficiency) total_efficiency = impeller_efficiency * motor_efficiency desired_power_per_m3_s = OpenStudio::convert(target_w_per_gpm,'W*min/gal', 'W*s/m^3').get pressure_rise_pa = desired_power_per_m3_s * total_efficiency pressure_rise_ft_h2O = OpenStudio::convert(pressure_rise_pa,'Pa','ftH_{2}O').get # Change pressure rise self.setRatedPumpHead(pressure_rise_pa) # Report OpenStudio::logFree(OpenStudio::Info, 'openstudio.standards.Pump', "For #{self.name}: brake hp = #{brake_hp.round(2)}HP; motor nameplate = #{nominal_hp}HP, motor eff = #{(motor_efficiency*100).round(2)}%; #{target_w_per_gpm.round} W/gpm translates to a pressure rise of #{pressure_rise_pa.round(0)} Pa // #{pressure_rise_ft_h2O.round(2)} ftH2O.") # Calculate the W/gpm for verification calculated_w = self.pumpPower # Get flow rate (whether autosized or hard-sized) flow_m3_per_s = 0 if self.autosizedRatedFlowRate.is_initialized flow_m3_per_s = self.autosizedRatedFlowRate.get else flow_m3_per_s = self.ratedFlowRate.get end flow_gpm = OpenStudio.convert(flow_m3_per_s, 'm^3/s', 'gal/min').get calculated_w_per_gpm = calculated_w/flow_gpm OpenStudio::logFree(OpenStudio::Info, 'openstudio.standards.Pump', "For #{self.name}: calculated W/gpm = #{calculated_w_per_gpm.round(1)}.") return true end |
#set_standard_minimum_motor_efficiency(template) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/openstudio-standards/standards/Standards.Pump.rb', line 64 def set_standard_minimum_motor_efficiency(template) # Get the horsepower hp = self.horsepower # Find the motor efficiency motor_eff, nominal_hp = standard_minimum_motor_efficiency_and_size(template, hp) # Change the motor efficiency self.setMotorEfficiency(motor_eff) OpenStudio::logFree(OpenStudio::Info, 'openstudio.standards.Pump', "For #{self.name}: motor nameplate = #{nominal_hp}HP, motor eff = #{(motor_eff*100).round(2)}%.") return true end |
#standard_minimum_motor_efficiency_and_size(template, motor_bhp) ⇒ Double
Determines the minimum pump motor efficiency for a given motor bhp. This should be the total brake horsepower with any desired safety factor already included.
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/openstudio-standards/standards/Standards.Pump.rb', line 87 def standard_minimum_motor_efficiency_and_size(template, motor_bhp) motor_eff = 0.85 nominal_hp = motor_bhp # Don't attempt to look up motor efficiency # for zero-hp pumps (required for circulation-pump-free # service water heating systems). return [1.0, 0] if motor_bhp == 0.0 # Lookup the minimum motor efficiency motors = $os_standards["motors"] # Assuming all pump motors are 4-pole ODP search_criteria = { "template" => template, "number_of_poles" => 4.0, "type" => "Enclosed", } motor_properties = self.model.find_object(motors, search_criteria, motor_bhp) if motor_properties.nil? OpenStudio::logFree(OpenStudio::Error, "openstudio.standards.Pump", "For #{self.name}, could not find motor properties using search criteria: #{search_criteria}, motor_bhp = #{motor_bhp} hp.") return [motor_eff, nominal_hp] end motor_eff = motor_properties["nominal_full_load_efficiency"] nominal_hp = motor_properties["maximum_capacity"].to_f.round(1) # Round to nearest whole HP for niceness if nominal_hp >= 2 nominal_hp = nominal_hp.round end return [motor_eff, nominal_hp] end |