Module: Laboratory

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

Overview

Custom changes for the Laboratory 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



38
39
40
41
42
43
44
45
46
# File 'lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb', line 38

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



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

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



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

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
  # # 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')

  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



68
69
70
# File 'lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb', line 68

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



58
59
60
61
62
63
64
65
66
# File 'lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb', line 58

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



28
29
30
31
32
33
34
35
36
# File 'lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb', line 28

def reset_fume_hood_oa(model)
  fume_hood_spaces = []
  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



48
49
50
51
52
53
54
55
# File 'lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb', line 48

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