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
# File lib/openstudio-standards/standards/cbes/cbes.rb, line 7 def initialize load_standards_database end
Public Instance Methods
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
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
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
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
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
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
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
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
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
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
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
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
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
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