Module: Laboratory

Defined in:
lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb

Overview

Custom changes for the QuickServiceRestaurant prototype. These are changes that are inconsistent with other prototype building types.

Instance Method Summary collapse

Instance Method Details

#adjust_doas_sizing_system(model) ⇒ Object



41
42
43
44
45
46
47
48
49
# File 'lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb', line 41

def adjust_doas_sizing_system(model)
  model.getAirLoopHVACs.each do |air_loop|
    if air_loop.name.to_s.include? 'OA'
      # system sizing
      sizing_system = air_loop.sizingSystem
      sizing_system.setTypeofLoadtoSizeOn('Sensible')
    end
  end
end

#model_custom_geometry_tweaks(building_type, climate_zone, prototype_input, model) ⇒ Object



75
76
77
# File 'lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb', line 75

def model_custom_geometry_tweaks(building_type, climate_zone, prototype_input, model)
  return true
end

#model_custom_hvac_tweaks(building_type, climate_zone, prototype_input, model) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb', line 6

def model_custom_hvac_tweaks(building_type, climate_zone, prototype_input, model)

  OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Started building type specific adjustments')

  reset_fume_hood_oa(model)
  adjust_doas_sizing_system(model)
  set_oa_control_for_lab_terminals(model)

  # TODO
=begin
  # Add exhaust fan to fume hood zone
  search_criteria = ...
  fume_hood_space = model_find_object(standards_data['Space Types'], search_criteria)
  fume_hood_zone_volume = fume_hood_space.getVolume...
  flow_rate_fume_hood = fume_hood_zone_volume * fume_hood_space['Ventilation_Air_Changes...']
  model_add_exhaust_fan(model, thermal_zones, flow_rate=flow_rate_fume_hood,  flow_fraction_schedule_name='Lab_FumeHood_Sch')
=end

  OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Finished building type specific adjustments')

  return true
end

#model_custom_swh_tweaks(model, building_type, climate_zone, prototype_input) ⇒ Object



71
72
73
# File 'lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb', line 71

def model_custom_swh_tweaks(model, building_type, climate_zone, prototype_input)
  return true
end

#model_modify_oa_controller(model) ⇒ Object

lab zones don’t have economizer, the air flow rate is determined by the ventilation requirement



61
62
63
64
65
66
67
68
69
# File 'lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb', line 61

def model_modify_oa_controller(model)
  model.getAirLoopHVACs.sort.each do |air_loop|
    oa_sys = air_loop.airLoopHVACOutdoorAirSystem.get
    oa_control = oa_sys.getControllerOutdoorAir
    if air_loop.name.get.include?('DOAS')
      oa_control.setEconomizerControlType('NoEconomizer')
    end
  end
end

#reset_fume_hood_oa(model) ⇒ Object

For fume hood, the OA rate varies with the fume hood schedule So add “Proportional Control Minimum Outdoor Air Flow Rate Schedule” at the mean time, modify “Outdoor Air Method” to “ProportionalControlBasedOnDesignOARate” in Controller:MechanicalVentilation of the DOAS



32
33
34
35
36
37
38
39
# File 'lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb', line 32

def reset_fume_hood_oa(model)
  fume_hood_spaces = Array.new
  model.getSpaces.each do |space|
    next unless space.name.get.to_s.include? 'fumehood'
    ventilation = space.designSpecificationOutdoorAir.get
    ventilation.setOutdoorAirFlowRateFractionSchedule(model_add_schedule(model, 'Lab_FumeHood_Sch'))
  end
end

#set_oa_control_for_lab_terminals(model) ⇒ Object



51
52
53
54
55
56
57
58
# File 'lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb', line 51

def set_oa_control_for_lab_terminals(model)
  model.getAirTerminalSingleDuctVAVReheats.sort.each do |air_terminal|
    air_terminal_name = air_terminal.name.get
    if air_terminal_name.include?('Lab')
      air_terminal.setControlForOutdoorAir(true)
    end
  end
end