Class: OpenStudio::Model::AirTerminalSingleDuctParallelPIUReheat

Inherits:
Object
  • Object
show all
Defined in:
lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb,
lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctParallelPIUReheat.rb

Overview

open the class to add methods to return sizing values

Instance Method Summary collapse

Instance Method Details

#apply_prm_baseline_fan_power(template) ⇒ Bool

Sets the fan power of a PIU fan based on the W/cfm specified in the standard.

Parameters:

  • template (String)

    the template base requirements on

Returns:

  • (Bool)

    returns true if successful, false if not



9
10
11
12
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb', line 9

def apply_prm_baseline_fan_power(template)
  OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.AirTerminalSingleDuctParallelPIUReheat', "Setting PIU fan power for #{name}.")

  # Determine the fan sizing flow rate, min flow rate,
  # and W/cfm
  sec_flow_frac = 0.5
  min_flow_frac = 0.3
  fan_efficacy_w_per_cfm = 0.35

  # Convert efficacy to metric
  # 1 cfm = 0.0004719 m^3/s
  fan_efficacy_w_per_m3_per_s = fan_efficacy_w_per_cfm / 0.0004719

  # Get the maximum flow rate through the terminal
  max_primary_air_flow_rate = nil
  if autosizedMaximumPrimaryAirFlowRate.is_initialized
    max_primary_air_flow_rate = autosizedMaximumPrimaryAirFlowRate.get
  elsif maximumPrimaryAirFlowRate.is_initialized
    max_primary_air_flow_rate = maximumPrimaryAirFlowRate.get
  end

  # Set the max secondary air flow rate
  max_sec_flow_rate_m3_per_s = max_primary_air_flow_rate * sec_flow_frac
  setMaximumSecondaryAirFlowRate(max_sec_flow_rate_m3_per_s)
  max_sec_flow_rate_cfm = OpenStudio.convert(max_sec_flow_rate_m3_per_s, 'm^3/s', 'ft^3/min').get

  # Set the minimum flow fraction
  # TODO Also compare to min OA requirement
  setMinimumPrimaryAirFlowFraction(min_flow_frac)

  # Get the fan
  fan = self.fan.to_FanConstantVolume.get

  # Set the impeller efficiency
  fan.change_impeller_efficiency(fan.baseline_impeller_efficiency(template))

  # Set the motor efficiency, preserving the impeller efficency.
  # For terminal fans, a bhp lookup of 0.5bhp is always used because
  # they are assumed to represent a series of small fans in reality.
  fan.apply_standard_minimum_motor_efficiency(template, fan.brake_horsepower)

  # Calculate a new pressure rise to hit the target W/cfm
  fan_tot_eff = fan.fanEfficiency
  fan_rise_new_pa = fan_efficacy_w_per_m3_per_s * fan_tot_eff
  fan.setPressureRise(fan_rise_new_pa)

  # Calculate the newly set efficacy
  fan_power_new_w = fan_rise_new_pa * max_sec_flow_rate_m3_per_s / fan_tot_eff
  fan_efficacy_new_w_per_cfm = fan_power_new_w / max_sec_flow_rate_cfm
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.AirTerminalSingleDuctParallelPIUReheat', "For #{name}: fan efficacy set to #{fan_efficacy_new_w_per_cfm.round(2)} W/cfm.")

  return true
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
# File 'lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctParallelPIUReheat.rb', line 13

def applySizingValues

  maximum_primary_air_flow_rate = self.autosizedMaximumPrimaryAirFlowRate
  if maximum_primary_air_flow_rate.is_initialized
    self.setMaximumPrimaryAirFlowRate(maximum_primary_air_flow_rate.get) 
  end
  
  maximum_secondary_air_flow_rate = self.autosizedMaximumSecondaryAirFlowRate
  if maximum_secondary_air_flow_rate.is_initialized
    self.setMaximumSecondaryAirFlowRate(maximum_secondary_air_flow_rate.get)
  end
  
  minimum_primary_air_flow_fraction = self.autosizedMinimumPrimaryAirFlowFraction
  if minimum_primary_air_flow_fraction.is_initialized
    self.setMinimumPrimaryAirFlowFraction(minimum_primary_air_flow_fraction.get) 
  end
  
  fan_on_flow_fraction = self.autosizedFanOnFlowFraction
  if fan_on_flow_fraction.is_initialized
    self.setFanOnFlowFraction(fan_on_flow_fraction.get)
  end

  
end

#autosizeObject

Sets all auto-sizeable fields to autosize



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

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

#autosizedFanOnFlowFractionObject

returns the autosized fan on flow fraction as an optional double



60
61
62
63
64
# File 'lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctParallelPIUReheat.rb', line 60

def autosizedFanOnFlowFraction

  return self.model.getAutosizedValue(self, 'Design Size Fan On Flow Fraction', '')
     
end

#autosizedMaximumPrimaryAirFlowRateObject

returns the autosized maximum primary air flow rate as an optional double



39
40
41
42
43
# File 'lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctParallelPIUReheat.rb', line 39

def autosizedMaximumPrimaryAirFlowRate

  return self.model.getAutosizedValue(self, 'Design Size Maximum Primary Air Flow Rate', 'm3/s')
  
end

#autosizedMaximumSecondaryAirFlowRateObject

returns the autosized maximum secondary air flow rate as an optional double



46
47
48
49
50
# File 'lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctParallelPIUReheat.rb', line 46

def autosizedMaximumSecondaryAirFlowRate

  return self.model.getAutosizedValue(self, 'Design Size Maximum Secondary Air Flow Rate', 'm3/s')
  
end

#autosizedMinimumPrimaryAirFlowFractionObject

returns the autosized minimum primary air flow fraction as an optional double



53
54
55
56
57
# File 'lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctParallelPIUReheat.rb', line 53

def autosizedMinimumPrimaryAirFlowFraction

  return self.model.getAutosizedValue(self, 'Design Size Minimum Primary Air Flow Fraction', '')
    
end