Module: ASHRAEPRMCoolingTower
- Included in:
- ASHRAE901PRM
- Defined in:
- lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoolingTower.rb
Overview
A variety of cooling tower methods that are the same regardless of type. These methods are available to CoolingTowerSingleSpeed, CoolingTowerTwoSpeed, and CoolingTowerVariableSpeed
CoolingTower collapse
-
#cooling_tower_apply_minimum_power_per_flow(cooling_tower) ⇒ Bool
Set the cooling tower fan power such that the tower hits the minimum performance (gpm/hp) specified by the standard.
Instance Method Details
#cooling_tower_apply_minimum_power_per_flow(cooling_tower) ⇒ Bool
Set the cooling tower fan power such that the tower hits the minimum performance (gpm/hp) specified by the standard. Note that in this case hp is motor nameplate hp, per 90.1. This method assumes that the fan brake horsepower is 90% of the motor nameplate hp. This method determines the minimum motor efficiency for the nameplate motor hp and sets the actual fan power by multiplying the brake horsepower by the efficiency. Thus the fan power used as an input to the simulation divided by the design flow rate will not (and should not) exactly equal the minimum tower performance.
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 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 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoolingTower.rb', line 22 def cooling_tower_apply_minimum_power_per_flow(cooling_tower) # Get the design water flow rate design_water_flow_m3_per_s = nil if cooling_tower.designWaterFlowRate.is_initialized design_water_flow_m3_per_s = cooling_tower.designWaterFlowRate.get elsif cooling_tower.autosizedDesignWaterFlowRate.is_initialized design_water_flow_m3_per_s = cooling_tower.autosizedDesignWaterFlowRate.get else OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoolingTower', "For #{cooling_tower.name} design water flow rate is not available, cannot apply efficiency standard.") return false end design_water_flow_gpm = OpenStudio.convert(design_water_flow_m3_per_s, 'm^3/s', 'gal/min').get # Get the table of cooling tower efficiencies heat_rejection = standards_data['heat_rejection'] # Define the criteria to find the cooling tower properties # in the hvac standards data set. search_criteria = {} search_criteria['template'] = template # By definition cooling towers in E+ are open. # Closed cooling towers are the fluidcooler objects. search_criteria['equipment_type'] = 'Open Cooling Tower' # Define the criteria to find the fan type search_criteria['fan_type'] = 'Axial' # Get the cooling tower properties ct_props = model_find_object(heat_rejection, search_criteria) unless ct_props OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoolingTower', "For #{cooling_tower.name}, cannot find heat rejection properties, cannot apply standard efficiencies or curves.") return false end # Get cooling tower efficiency min_gpm_per_hp = ct_props['minimum_performance'] OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoolingTower', "For #{cooling_tower.name}, design water flow = #{design_water_flow_gpm.round} gpm, minimum performance = #{min_gpm_per_hp} gpm/hp (nameplate).") # Calculate the allowed fan brake horsepower # per method used in PNNL prototype buildings. # Assumes that the fan brake horsepower is 90% # of the fan nameplate rated motor power. fan_motor_nameplate_hp = design_water_flow_gpm / min_gpm_per_hp fan_bhp = 0.9 * fan_motor_nameplate_hp # Lookup the minimum motor efficiency fan_motor_eff = 0.85 motors = standards_data['motors'] # Assuming all fan motors are 4-pole Enclosed search_criteria = { 'template' => template, 'number_of_poles' => 'Any', 'type' => 'Any' } motor_properties = model_find_object(motors, search_criteria, fan_motor_nameplate_hp) if motor_properties.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.CoolingTower', "For #{cooling_tower.name}, could not find motor properties using search criteria: #{search_criteria}, motor_hp = #{fan_motor_nameplate_hp} hp.") return false end fan_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 # Calculate the fan motor power fan_motor_actual_power_hp = fan_bhp / fan_motor_eff # Convert to W fan_motor_actual_power_w = fan_motor_actual_power_hp * 745.7 # 745.7 W/HP OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoolingTower', "For #{cooling_tower.name}, allowed fan motor nameplate hp = #{fan_motor_nameplate_hp.round(1)} hp, fan brake horsepower = #{fan_bhp.round(1)}, and fan motor actual power = #{fan_motor_actual_power_hp.round(1)} hp (#{fan_motor_actual_power_w.round} W) at #{fan_motor_eff} motor efficiency.") # Append the efficiency to the name cooling_tower.setName("#{cooling_tower.name} #{min_gpm_per_hp.round(1)} gpm/hp") # Hard size the design fan power. # Leave the water flow and air flow autosized. if cooling_tower.to_CoolingTowerVariableSpeed.is_initialized cooling_tower.setDesignFanPower(fan_motor_actual_power_w) end return true end |