Class: OpenStudio::Model::FanVariableVolume

Inherits:
Object
  • Object
show all
Includes:
Fan
Defined in:
lib/openstudio-standards/hvac_sizing/HVACSizing.FanVariableVolume.rb,
lib/openstudio-standards/prototypes/Prototype.FanVariableVolume.rb,
lib/openstudio-standards/standards/Standards.FanVariableVolume.rb

Overview

Reopen the OpenStudio class to add methods to apply standards to this object

Instance Method Summary collapse

Methods included from Fan

#adjust_pressure_rise_to_meet_fan_power, #baselineImpellerEfficiency, #brakeHorsepower, #changeImpellerEfficiency, #changeMotorEfficiency, #fanPower, #is_small_fan, #motorHorsepower, #rated_w_per_cfm, #setStandardEfficiency, #set_standard_minimum_motor_efficiency, #standard_minimum_motor_efficiency_and_size

Instance Method Details

#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
# File 'lib/openstudio-standards/hvac_sizing/HVACSizing.FanVariableVolume.rb', line 13

def applySizingValues
  
  maximum_flow_rate = self.autosizedMaximumFlowRate
  if maximum_flow_rate.is_initialized
    self.setMaximumFlowRate(maximum_flow_rate.get)
  end
  
end

#autosizeObject

Sets all auto-sizeable fields to autosize



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

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

#autosizedMaximumFlowRateObject

returns the autosized maximum flow rate as an optional double



23
24
25
26
27
# File 'lib/openstudio-standards/hvac_sizing/HVACSizing.FanVariableVolume.rb', line 23

def autosizedMaximumFlowRate

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

#set_control_type(control_type) ⇒ Object



7
8
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/openstudio-standards/standards/Standards.FanVariableVolume.rb', line 7

def set_control_type(control_type)
  
  # Determine the coefficients
  coeff_a = nil
  coeff_b = nil
  coeff_c = nil
  coeff_d = nil
  min_pct_pwr = nil
  case control_type
  when 'Multi Zone VAV with AF or BI Riding Curve'
    coeff_a = 0.1631
    coeff_b = 1.5901
    coeff_c = -0.8817
    coeff_d = 0.1281
    min_pct_pwr = 0.7
  when 'Multi Zone VAV with AF or BI with Inlet Vanes'
    coeff_a = 0.9977
    coeff_b = -0.659
    coeff_c = 0.9547
    coeff_d = -0.2936
    min_pct_pwr = 0.5
  when 'Multi Zone VAV with FC Riding Curve'
    coeff_a = 0.1224
    coeff_b = 0.612
    coeff_c = 0.5983
    coeff_d = -0.3334
    min_pct_pwr = 0.3
  when 'Multi Zone VAV with FC with Inlet Vanes'
    coeff_a = 0.3038
    coeff_b = -0.7608
    coeff_c = 2.2729
    coeff_d = -0.8169
    min_pct_pwr = 0.3
  when 'Multi Zone VAV with Vane-axial with Variable Pitch Blades'
    coeff_a = 0.1639
    coeff_b = -0.4016
    coeff_c = 1.9909
    coeff_d = -0.7541
    min_pct_pwr = 0.2
  when 'Multi Zone VAV with VSD and Fixed SP Setpoint'
    coeff_a = 0.0013
    coeff_b = 0.1470
    coeff_c = 0.9506
    coeff_d = -0.0998
    min_pct_pwr = 0.2
  when 'Multi Zone VAV with Static Pressure Reset'
    coeff_a = 0.04076
    coeff_b = 0.0881
    coeff_c = -0.0729
    coeff_d = 0.9437
    min_pct_pwr = 0.1
  when 'Single Zone VAV Fan'
    coeff_a = 0.027828
    coeff_b = 0.026583
    coeff_c = -0.087069
    coeff_d = 1.030920
    min_pct_pwr = 0.1
  else
    OpenStudio::logFree(OpenStudio::Warn, 'openstudio.standards.FanVariableVolume', "Fan control type '#{control_type}' not recognized, fan power coefficients will not be changed.")
    return false
  end
  
  # Set the coefficients
  self.setFanPowerCoefficient1(coeff_a)
  self.setFanPowerCoefficient2(coeff_b)
  self.setFanPowerCoefficient3(coeff_c)
  self.setFanPowerCoefficient4(coeff_d)
  
  # Set the fan minimum power
  self.setFanPowerMinimumFlowRateInputMethod('Fraction')
  self.setFanPowerMinimumFlowFraction(min_pct_pwr)

  # Append the control type to the fan name
  #self.setName("#{self.name} #{control_type}")

end

#setPrototypeFanPressureRise(building_type, building_vintage, climate_zone) ⇒ Object

Sets the fan pressure rise based on the Prototype buildings inputs which are governed by the flow rate coming through the fan and whether the fan lives inside a unit heater, PTAC, etc.



8
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
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
# File 'lib/openstudio-standards/prototypes/Prototype.FanVariableVolume.rb', line 8

def setPrototypeFanPressureRise(building_type, building_vintage, climate_zone)
  
  # NECB
  if building_vintage == 'NECB 2011' then
    pressure_rise_pa = 1000.0
    self.setPressureRise(pressure_rise_pa)
    return true
  end    
  
  # Get the max flow rate from the fan.
  maximum_flow_rate_m3_per_s = nil
  if self.maximumFlowRate.is_initialized
    maximum_flow_rate_m3_per_s = self.maximumFlowRate.get
  elsif self.autosizedMaximumFlowRate.is_initialized
    maximum_flow_rate_m3_per_s = self.autosizedMaximumFlowRate.get
  else
    OpenStudio::logFree(OpenStudio::Warn, "openstudio.prototype.FanVariableVolume", "For #{self.name} max flow rate is not available, cannot apply prototype assumptions.")
    return false
  end
  
  # Convert max flow rate to cfm
  maximum_flow_rate_cfm = OpenStudio.convert(maximum_flow_rate_m3_per_s, 'm^3/s', 'cfm').get
  
  # Pressure rise will be determined based on the 
  # following logic.
  pressure_rise_in_h2o = 0.0  
  
  # If the fan lives inside of a zone hvac equipment
  if self.containingZoneHVACComponent.is_initialized
    zone_hvac = self.ZoneHVACComponent.get
    if zone_hvac.to_ZoneHVACPackagedTerminalAirConditioner.is_initialized
      pressure_rise_in_h2o = 1.33
    elsif zone_hvac.to_ZoneHVACFourPipeFanCoil.is_initialized
      pressure_rise_in_h2o = 1.33
    elsif zone_hvac.to_ZoneHVACUnitHeater.is_initialized
      pressure_rise_in_h2o = 0.2
    else # This type of fan should not exist in the prototype models
      return false
    end
  end
  
  # TODO Inconsistency - Primary School uses CAV pressure rises
  # even thought it has a VAV system.  CAV system is listed in document,
  # so assume the system type was updated but forgot to update pressure rises.
  if building_type == 'PrimarySchool' && (building_vintage == 'DOE Ref Pre-1980' || building_vintage == 'DOE Ref 1980-2004')
    
    # If the fan lives on an airloop (From Prototype.FanConstantVolume)
    if self.airLoopHVAC.is_initialized
      if maximum_flow_rate_cfm < 7487
        pressure_rise_in_h2o = 2.5
      elsif maximum_flow_rate_cfm >= 7487 && maximum_flow_rate_cfm < 20000
        pressure_rise_in_h2o = 4.46
      else # Over 20,000 cfm
        pressure_rise_in_h2o = 4.09
      end
    end
  
  else
    
    # If the fan lives on an airloop
    if self.airLoopHVAC.is_initialized
      case building_vintage
      when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004', '90.1-2004'
        if maximum_flow_rate_cfm < 4648
          pressure_rise_in_h2o = 4.0
        elsif maximum_flow_rate_cfm >= 4648 && maximum_flow_rate_cfm < 20000
          pressure_rise_in_h2o = 6.32
        else # Over 20,000 cfm
          pressure_rise_in_h2o = 5.58
        end
      when '90.1-2007', '90.1-2010', '90.1-2013'
        if maximum_flow_rate_cfm < 4648
          pressure_rise_in_h2o = 4.0
        else # Over 7,437 cfm
          pressure_rise_in_h2o = 5.58
        end
      end
    end
    
  end
  
  # Set the fan pressure rise
  pressure_rise_pa = OpenStudio.convert(pressure_rise_in_h2o, 'inH_{2}O','Pa').get
  self.setPressureRise(pressure_rise_pa)  
  
  OpenStudio::logFree(OpenStudio::Info, 'openstudio.model.FanVariableVolume', "For Prototype: #{self.name}: #{maximum_flow_rate_cfm.round}cfm; Pressure Rise = #{pressure_rise_in_h2o}in w.c.")
  
  return true
  
end