Class: OpenStudio::Model::FanVariableVolume
- Inherits:
-
Object
- Object
- OpenStudio::Model::FanVariableVolume
- 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
-
#applySizingValues ⇒ Object
Takes the values calculated by the EnergyPlus sizing routines and puts them into this object model in place of the autosized fields.
-
#autosize ⇒ Object
Sets all auto-sizeable fields to autosize.
-
#autosizedMaximumFlowRate ⇒ Object
returns the autosized maximum flow rate as an optional double.
- #set_control_type(control_type) ⇒ Object
-
#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.
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
#applySizingValues ⇒ Object
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 |
#autosize ⇒ Object
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 |
#autosizedMaximumFlowRate ⇒ Object
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 |