class DOERefPre1980
This class holds methods that apply the “standard” assumptions used in the DOE Pre-1980 Reference Buildings to a given model. @ref [References::USDOEReferenceBuildings]
Attributes
Public Class Methods
ASHRAE901::new
# File lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.rb, line 8 def initialize super() @template = 'DOE Ref Pre-1980' load_standards_database end
Public Instance Methods
Apply multizone vav outdoor air method and adjust multizone VAV damper positions. Currently doesn’t do anything for the DOE prototype buildings.
@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/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirLoopHVAC.rb, line 10 def air_loop_hvac_apply_multizone_vav_outdoor_air_sizing(air_loop_hvac) OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', 'Damper positions not modified for DOE Ref Pre-1980 or DOE Ref 1980-2004 vintages.') return true end
Determine minimum ventilation efficiency for zones. For DOE Ref Pre-1980, assume that VAV system designers did not care about decreasing system OA flow rates and therefore did not adjust minimum damper positions to achieve any specific ventilation efficiency.
# File lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirLoopHVAC.rb, line 56 def air_loop_hvac_minimum_zone_ventilation_efficiency(air_loop_hvac) min_ventilation_efficiency = 0 return min_ventilation_efficiency end
Determines if optimum start control is required. Not required by DOE Pre-1980.
@param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop @return [Boolean] returns true if required, false if not
# File lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirLoopHVAC.rb, line 36 def air_loop_hvac_optimum_start_required?(air_loop_hvac) opt_start_required = false return opt_start_required end
Determine if static pressure reset is required for this system. Not required by DOE Pre-1980.
@todo Instead of requiring the input of whether a system
has DDC control of VAV terminals or not, determine this from the system itself. This may require additional information be added to the OpenStudio data model.
@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/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirLoopHVAC.rb, line 26 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 DOE Ref Pre-1980.
@param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop @return [String] the damper control type: Single Maximum, Dual Maximum
# File lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirLoopHVAC.rb, line 46 def air_loop_hvac_vav_damper_action(air_loop_hvac) damper_action = 'Single Maximum' return damper_action end
@!group AirTerminalSingleDuctVAVReheat 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
@param air_terminal_single_duct_vav_reheat [OpenStudio::Model::AirTerminalSingleDuctVAVReheat] the air terminal object @param zone_oa_per_area [Double] the zone outdoor air per area in m^3/s*m^2 @return [Boolean] returns true if successful, false if not
# File lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirTerminalSingleDuctVAVReheat.rb, line 10 def air_terminal_single_duct_vav_reheat_apply_initial_prototype_damper_position(air_terminal_single_duct_vav_reheat, zone_oa_per_area) # Set the minimum flow fraction min_damper_position = 0.3 air_terminal_single_duct_vav_reheat.setConstantMinimumAirFlowFraction(min_damper_position) return true end
Updates the efficiency of some gas heating coils per the prototype assumptions. Sets heating coils inside PSZ-AC systems to 78% efficiency per the older vintages. @todo Refactor: remove inconsistency in logic; all coils should be lower efficiency
@param coil_heating_gas [OpenStudio::Model::CoilHeatingGas] a gas heating coil @return [Boolean] returns true if successful, false if not
# File lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.CoilHeatingGas.rb, line 10 def coil_heating_gas_apply_prototype_efficiency(coil_heating_gas) # Only modify coils in PSZ-AC units name_patterns = ['PSZ-AC Gas Htg Coil', 'ZN HVAC_', 'PSZ-AC_2-7 Gas Htg', 'PSZ-AC_2-5 Gas Htg', 'PSZ-AC_1-6 Gas Htg', 'PSZ-AC-1 Gas Htg', 'PSZ-AC-2 Gas Htg', 'PSZ-AC-3 Gas Htg', 'PSZ-AC-4 Gas Htg', 'PSZ-AC-5 Gas Htg', 'PSZ-AC_3-7 Gas Htg', 'PSZ-AC_2-6 Gas Htg', 'PSZ-AC_5-9 Gas Htg', 'PSZ-AC_1-5 Gas Htg', 'PSZ-AC_4-8 Gas Htg', 'PSZ-AC_1 Gas Htg', 'PSZ-AC_2 Gas Htg', 'PSZ-AC_3 Gas Htg', 'PSZ-AC_4 Gas Htg', 'PSZ-AC_5 Gas Htg', 'PSZ-AC_6 Gas Htg', 'PSZ-AC_7 Gas Htg', 'PSZ-AC_8 Gas Htg', 'PSZ-AC_9 Gas Htg', 'PSZ-AC_10 Gas Htg'] name_patterns.each do |pattern| if coil_heating_gas.name.get.include?(pattern) coil_heating_gas.setGasBurnerEfficiency(0.78) end end return true 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
ASHRAE901#load_standards_database
# File lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.rb, line 18 def load_standards_database(data_directories = []) super([__dir__] + data_directories) end
Add an elevator the the specified space
@param model [OpenStudio::Model::Model] OpenStudio model object @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/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.elevators.rb, line 16 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
Apply the air leakage requirements to the model. “For ‘DOE Ref Pre-1980’ and ‘DOE Ref 1980-2004’, infiltration rates are not defined using this method, no changes are actually made to the model.
base infiltration rates off of. @return [Boolean] returns true if successful, false if not @todo This infiltration method is not used by the Reference buildings, fix this inconsistency.
# File lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.rb, line 13 def model_apply_infiltration_standard(model) # Set the infiltration rate at each space model.getSpaces.sort.each do |space| space_apply_infiltration_rate(space) end return true 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 model [OpenStudio::Model::Model] OpenStudio model object @param elevator_type [String] valid choices are Traction, Hydraulic @param building_type [String] the building type @return [Double] elevator lift power in watts
# File lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.elevators.rb, line 83 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. For Pre-1980 and 1980-2004, use the most specific climate zone set. For example, 2A and 2 both contain 2A, so use 2A. The exceptions are climate zones 1, 7, and 8, which combine 1A/1B, 7A/7B, and 8A/8B into 1, 7, and 8.
# File lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.rb, line 27 def model_get_climate_zone_set_from_list(model, possible_climate_zone_sets) climate_zone_set = if possible_climate_zone_sets.include? 'ClimateZone 1' possible_climate_zone_sets.min elsif possible_climate_zone_sets.include? 'ClimateZone 7' possible_climate_zone_sets.min elsif possible_climate_zone_sets.include? 'ClimateZone 8' possible_climate_zone_sets.min else possible_climate_zone_sets.max end return climate_zone_set 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/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.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 the older DOE buildings.
@param plant_loop [OpenStudio::Model::PlantLoop] plant loop @return [Boolean] returns true if required, false if not
# File lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.PlantLoop.rb, line 9 def plant_loop_supply_water_temperature_reset_required?(plant_loop) reset_required = false return reset_required end