class CBES

This abstract class holds methods that many versions of CBES share. If a method in this class is redefined by a subclass, the implementation in the subclass is used. @abstract @ref [References::CBES]

Public Class Methods

new() click to toggle source
# File lib/openstudio-standards/standards/cbes/cbes.rb, line 7
def initialize
  load_standards_database
end

Public Instance Methods

air_loop_hvac_apply_multizone_vav_outdoor_air_sizing(air_loop_hvac) click to toggle source

Apply multizone vav outdoor air method and adjust multizone VAV damper positions. Does nothing for CBES.

@param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop return [Boolean] returns true if successful, false if not @todo enable damper position adjustment for legacy IDFS

# File lib/openstudio-standards/standards/cbes/cbes.AirLoopHVAC.rb, line 10
def air_loop_hvac_apply_multizone_vav_outdoor_air_sizing(air_loop_hvac)
  # Do nothing
  return true
end
air_loop_hvac_apply_single_zone_controls(air_loop_hvac, climate_zone) click to toggle source

Add code required single zone controls. No controls required by CBES.

@param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop @param climate_zone [String] ASHRAE climate zone, e.g. ‘ASHRAE 169-2013-4A’ @return [Boolean] returns true if successful, false if not

# File lib/openstudio-standards/standards/cbes/cbes.AirLoopHVAC.rb, line 53
def air_loop_hvac_apply_single_zone_controls(air_loop_hvac, climate_zone)
  # Do nothing
  return true
end
air_loop_hvac_demand_control_ventilation_required?(air_loop_hvac, climate_zone) click to toggle source

Determine if demand control ventilation (DCV) is for this air loop. Not required for CBES.

@param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop @param climate_zone [String] ASHRAE climate zone, e.g. ‘ASHRAE 169-2013-4A’ @return [Boolean] returns true if required, false if not

# File lib/openstudio-standards/standards/cbes/cbes.AirLoopHVAC.rb, line 42
def air_loop_hvac_demand_control_ventilation_required?(air_loop_hvac, climate_zone)
  dcv_required = false
  return dcv_required
end
air_loop_hvac_static_pressure_reset_required?(air_loop_hvac, has_ddc) click to toggle source

Determine if static pressure reset is required for this system. Not required by CBES.

@param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop @param has_ddc [Boolean] whether or not the system has DDC control over VAV terminals. return [Boolean] returns true if static pressure reset is required, false if not

# File lib/openstudio-standards/standards/cbes/cbes.AirLoopHVAC.rb, line 21
def air_loop_hvac_static_pressure_reset_required?(air_loop_hvac, has_ddc)
  sp_reset_required = false
  return sp_reset_required
end
air_loop_hvac_vav_damper_action(air_loop_hvac) click to toggle source

Determine whether the VAV damper control is single maximum or dual maximum control. Single Maximum for CBES.

@param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop @return [String] the damper control type: Single Maximum, Dual Maximum

# File lib/openstudio-standards/standards/cbes/cbes.AirLoopHVAC.rb, line 31
def air_loop_hvac_vav_damper_action(air_loop_hvac)
  damper_action = 'Single Maximum'
  return damper_action
end
load_standards_database(data_directories = []) click to toggle source

Loads the openstudio standards dataset for this standard.

@param data_directories [Array<String>] array of file paths that contain standards data @return [Hash] a hash of standards data

Calls superclass method Standard#load_standards_database
# File lib/openstudio-standards/standards/cbes/cbes.rb, line 15
def load_standards_database(data_directories = [])
  super([__dir__] + data_directories)
end
model_add_elevator(model, space, number_of_elevators, elevator_type, elevator_schedule, elevator_fan_schedule, elevator_lights_schedule, building_type = nil) click to toggle source

Add an elevator the the specified space

@param space [OpenStudio::Model::Space] the space to assign the elevators to. @param number_of_elevators [Integer] the number of elevators @param elevator_type [String] valid choices are Traction, Hydraulic @param elevator_schedule [String] the name of the elevator schedule @param elevator_fan_schedule [String] the name of the elevator fan schedule @param elevator_lights_schedule [String] the name of the elevator lights schedule @param building_type [String] the building type @return [OpenStudio::Model::ElectricEquipment] the resulting elevator @todo Inconsistency. Older vintages don’t have lights or fans in elevators, which is not realistic.

# File lib/openstudio-standards/prototypes/cbes/cbes.Model.elevators.rb, line 15
def model_add_elevator(model,
                       space,
                       number_of_elevators,
                       elevator_type,
                       elevator_schedule,
                       elevator_fan_schedule,
                       elevator_lights_schedule,
                       building_type = nil)

  # Lift motor assumptions
  lift_pwr_w = model_elevator_lift_power(model, elevator_type, building_type)

  # Size assumptions
  length_ft = 6.66
  width_ft = 4.25
  height_ft = 8.0
  area_ft2 = length_ft * width_ft
  volume_ft3 = area_ft2 * height_ft

  # Ventilation assumptions
  vent_rate_acm = 1 # air changes per minute
  vent_rate_cfm = volume_ft3 / vent_rate_acm
  vent_pwr_w = model_elevator_fan_pwr(model, vent_rate_cfm)

  # Heating fraction radiant assumptions
  elec_equip_frac_radiant = 0.5

  # Lighting assumptions
  design_ltg_lm_per_ft2 = 30
  light_loss_factor = 0.75
  pct_incandescent = model_elevator_lighting_pct_incandescent(model)
  pct_led = 1.0 - pct_incandescent

  incandescent_efficacy_lm_per_w = 10.0
  led_efficacy_lm_per_w = 35.0
  target_ltg_lm_per_ft2 = design_ltg_lm_per_ft2 / light_loss_factor # 40
  target_ltg_lm = target_ltg_lm_per_ft2 * area_ft2 # 1132.2
  lm_incandescent = target_ltg_lm * pct_incandescent # 792.54
  lm_led = target_ltg_lm * pct_led # 339.66
  w_incandescent = lm_incandescent / incandescent_efficacy_lm_per_w # 79.254
  w_led = lm_led / led_efficacy_lm_per_w # 9.7
  lighting_pwr_w = w_incandescent + w_led

  # Elevator lift motor
  elevator_definition = OpenStudio::Model::ElectricEquipmentDefinition.new(model)
  elevator_definition.setName('Elevator Lift Motor')
  elevator_definition.setDesignLevel(lift_pwr_w)
  elevator_definition.setFractionRadiant(elec_equip_frac_radiant)

  elevator_equipment = OpenStudio::Model::ElectricEquipment.new(elevator_definition)
  elevator_equipment.setName("#{number_of_elevators.round} Elevator Lift Motors")
  elevator_equipment.setEndUseSubcategory('Elevators')
  elevator_sch = model_add_schedule(model, elevator_schedule)
  elevator_equipment.setSchedule(elevator_sch)
  elevator_equipment.setSpace(space)
  elevator_equipment.setMultiplier(number_of_elevators)

  return elevator_equipment
end
model_elevator_lift_power(model, elevator_type, building_type) click to toggle source

Determines the power required by an individual elevator of a given type. Values used by the older vintages are slightly higher than those used by the DOE prototypes. @param elevator_type [String] valid choices are Traction, Hydraulic

# File lib/openstudio-standards/prototypes/cbes/cbes.Model.elevators.rb, line 80
def model_elevator_lift_power(model, elevator_type, building_type)
  lift_pwr_w = 0
  if elevator_type == 'Traction'
    lift_pwr_w = 18_537.0
  elsif elevator_type == 'Hydraulic'
    lift_pwr_w = if building_type == 'MidriseApartment'
                   16_055.0
                 else
                   14_610.0
                 end
  else
    lift_pwr_w = 14_610.0
    OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Model', "Elevator type '#{elevator_type}', not recognized, will assume Hydraulic elevator, #{lift_pwr_w} W.")
  end

  return lift_pwr_w
end
model_get_climate_zone_set_from_list(model, possible_climate_zone_sets) click to toggle source

Determine which climate zone to use. Uses the most specific climate zone set.

# File lib/openstudio-standards/standards/cbes/cbes.Model.rb, line 6
def model_get_climate_zone_set_from_list(model, possible_climate_zone_sets)
  climate_zone_set = possible_climate_zone_sets.max
  return climate_zone_set
end
model_ventilation_method(model) click to toggle source

Determines how ventilation for the standard is specified. When ‘Sum’, all min OA flow rates are added up. Commonly used by 90.1. When ‘Maximum’, only the biggest OA flow rate. Used by T24.

@param model [OpenStudio::Model::Model] OpenStudio model object @return [String] the ventilation method, either Sum or Maximum

# File lib/openstudio-standards/standards/cbes/cbes.Model.rb, line 17
def model_ventilation_method(model)
  ventilation_method = 'Maximum'
  return ventilation_method
end
model_walkin_freezer_latent_case_credit_curve(model) click to toggle source

Determine the latent case credit curve to use for walkins. @todo Should probably use the model_add_refrigeration_walkin and lookups from the spreadsheet instead of hard-coded values.

@param model [OpenStudio::Model::Model] OpenStudio model object @return [String] curve name

# File lib/openstudio-standards/prototypes/cbes/cbes.refrigeration.rb, line 9
def model_walkin_freezer_latent_case_credit_curve(model)
  latent_case_credit_curve_name = 'Single Shelf Horizontal Latent Energy Multiplier_Pre2004'
  return latent_case_credit_curve_name
end
plant_loop_supply_water_temperature_reset_required?(plant_loop) click to toggle source

Determine if temperature reset is required. Not required for CBES.

@param plant_loop [OpenStudio::Model::PlantLoop] plant loop @return [Boolean] returns true if required, false if not

# File lib/openstudio-standards/standards/cbes/cbes.PlantLoop.rb, line 9
def plant_loop_supply_water_temperature_reset_required?(plant_loop)
  reset_required = false
  return reset_required
end
space_infiltration_rate_75_pa(space = nil) click to toggle source

Baseline infiltration rate

@return [Double] the baseline infiltration rate, in cfm/ft^2 exterior above grade wall area at 75 Pa

# File lib/openstudio-standards/standards/cbes/cbes.Space.rb, line 7
def space_infiltration_rate_75_pa(space = nil)
  basic_infil_rate_cfm_per_ft2 = 1.8
  return basic_infil_rate_cfm_per_ft2
end