Class: OpenStudio::Model::AirTerminalSingleDuctVAVReheat

Inherits:
Object
  • Object
show all
Defined in:
lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctVAVNoReheat.rb,
lib/openstudio-standards/prototypes/Prototype.AirTerminalSingleDuctVAVReheat.rb,
lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb,
lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctVAVReheat.rb

Overview

open the class to add methods to return sizing values

Instance Method Summary collapse

Instance Method Details

#apply_initial_prototype_damper_position(building_type, template, zone_oa_per_area) ⇒ Bool

TODO:

remove exception where older vintages don’t have minimum positions adjusted.

Set the initial minimum damper position based on OA rate of the space and the template. Zones with low OA per area get lower initial guesses. Final position will be adjusted upward as necessary by Standards.AirLoopHVAC.apply_minimum_vav_damper_positions

Parameters:

  • template (String)

    the template

  • zone_oa_per_area (Double)

    the zone outdoor air per area, m^3/s

Returns:

  • (Bool)

    returns true if successful, false if not



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

def apply_initial_prototype_damper_position(building_type, template, zone_oa_per_area)
  # Minimum damper position is based on prototype
  # assumptions, which are not clearly documented.
  min_damper_position = nil
  vav_name = name.get
  case template
  when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
    min_damper_position = if building_type == 'Outpatient' && vav_name.include?('Floor 1')
                            1
                          elsif building_type == 'Hospital' && vav_name.include?('PatRoom')
                            1
                          elsif building_type == 'Hospital' && vav_name.include?('OR')
                            1
                          elsif building_type == 'Hospital' && vav_name.include?('ICU')
                            1
                          elsif building_type == 'Hospital' && vav_name.include?('Lab')
                            1
                          elsif building_type == 'Hospital' && vav_name.include?('ER')
                            1
                          elsif building_type == 'Hospital' && vav_name.include?('Kitchen')
                            1
                          elsif building_type == 'Hospital' && vav_name.include?('NurseStn')
                            0.3
                          else
                            0.3
                          end
  when '90.1-2004', '90.1-2007'
    min_damper_position = 0.3
  when '90.1-2010', '90.1-2013'
    min_damper_position = 0.2
  end

  # TODO: remove the template conditional; doesn't make sense
  # Determine whether or not to use the high minimum guess.
  # Cutoff was determined by correlating apparent minimum guesses
  # to OA rates in prototypes since not well documented in papers.
  if zone_oa_per_area > 0.001 # 0.001 m^3/s*m^2 = .196 cfm/ft2
    case template
    when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
      setConstantMinimumAirFlowFraction(min_damper_position)
    else
      # High OA zones
      if building_type == 'Outpatient'
        setConstantMinimumAirFlowFraction(1)
      elsif building_type == 'Hospital'
        case template
        when '90.1-2010', '90.1-2013'
          if vav_name.include? 'PatRoom'
            setConstantMinimumAirFlowFraction(0.5)
          else
            setConstantMinimumAirFlowFraction(1)
          end
        when '90.1-2004', '90.1-2007'
          setConstantMinimumAirFlowFraction(1)
        end
      else
        setConstantMinimumAirFlowFraction(0.7)
      end
    end
  else
    # Low OA zones
    setConstantMinimumAirFlowFraction(min_damper_position)
  end

  return true
end

#apply_minimum_damper_position(template, zone_min_oa = nil, has_ddc = true) ⇒ Bool

TODO:

remove exception where older vintages don’t have minimum positions adjusted.

Set the minimum damper position based on OA rate of the space and the template. Zones with low OA per area get lower initial guesses. Final position will be adjusted upward as necessary by Standards.AirLoopHVAC.adjust_minimum_vav_damper_positions If supplied, this will be set as a minimum limit in addition to the minimum damper position. EnergyPlus will use the larger of the two values during sizing. which impacts the minimum damper position requirement.

Parameters:

  • template (String)

    the template

  • zone_min_oa (Double) (defaults to: nil)

    the zone outdoor air flow rate, in m^3/s.

  • has_ddc (Bool) (defaults to: true)

    whether or not there is DDC control of the VAV terminal,

Returns:

  • (Bool)

    returns true if successful, false if not



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
# File 'lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb', line 16

def apply_minimum_damper_position(template, zone_min_oa = nil, has_ddc = true)
  # Minimum damper position
  min_damper_position = nil
  case template
  when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004', '90.1-2004'
    min_damper_position = 0.3
  when '90.1-2007'
    min_damper_position = 0.3
  when '90.1-2010', '90.1-2013'
    min_damper_position = if has_ddc
                            0.2
                          else
                            0.3
                          end
  end
  setConstantMinimumAirFlowFraction(min_damper_position)

  # Minimum OA flow rate
  # If specified, will also add this limit
  # and the larger of the two will be used
  # for sizing.
  unless zone_min_oa.nil?
    setFixedMinimumAirFlowRate(zone_min_oa)
  end

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

def applySizingValues
     
  rated_flow_rate = self.autosizedMaximumAirFlowRate
  if rated_flow_rate.is_initialized
    self.setMaximumAirFlowRate(rated_flow_rate.get) 
  end
  
  maximum_hot_water_or_steam_flow_rate = self.autosizedMaximumHotWaterOrSteamFlowRate
  if maximum_hot_water_or_steam_flow_rate.is_initialized
    self.setMaximumHotWaterOrSteamFlowRate(maximum_hot_water_or_steam_flow_rate.get)
  end
  
  maximum_flow_per_zone_floor_area_during_reheat = self.autosizedMaximumFlowPerZoneFloorAreaDuringReheat
  if maximum_flow_per_zone_floor_area_during_reheat.is_initialized
    self.setMaximumFlowPerZoneFloorAreaDuringReheat(maximum_flow_per_zone_floor_area_during_reheat.get) 
  end
  
  maximum_flow_fraction_during_reheat = self.autosizedMaximumFlowFractionDuringReheat
  if maximum_flow_fraction_during_reheat.is_initialized
    self.setMaximumFlowFractionDuringReheat(maximum_flow_fraction_during_reheat.get)
  end

end

#autosizeObject

Sets all auto-sizeable fields to autosize



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

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

#autosizedMaximumAirFlowRateObject

returns the autosized maximum air flow rate as an optional double



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

def autosizedMaximumAirFlowRate

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

#autosizedMaximumFlowFractionDuringReheatObject

returns the autosized maximum flow fraction during reheat as an optional double



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

def autosizedMaximumFlowFractionDuringReheat

  return self.model.getAutosizedValue(self, 'Design Size Maximum Flow Fraction during Reheat', '')
  
end

#autosizedMaximumFlowPerZoneFloorAreaDuringReheatObject

returns the autosized maximum flow per zone floor area during reheat as an optional double



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

def autosizedMaximumFlowPerZoneFloorAreaDuringReheat

  return self.model.getAutosizedValue(self, 'Design Size Maximum Flow per Zone Floor Area during Reheat', 'm3/s-m2')
     
end

#autosizedMaximumHotWaterOrSteamFlowRateObject

returns the autosized rated power consumption as an optional double



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

def autosizedMaximumHotWaterOrSteamFlowRate

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