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

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

geometry adjustments specific to the prototype model

Parameters:

  • model (OpenStudio::Model::Model)

    OpenStudio model object

  • building_type (String)

    the building type

  • climate_zone (String)

    ASHRAE climate zone, e.g. ‘ASHRAE 169-2013-4A’

  • prototype_input (Hash)

    hash of prototype inputs

Returns:

  • (Boolean)

    returns true if successful, false if not



92
93
94
# File 'lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb', line 92

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

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

hvac adjustments specific to the prototype model

Parameters:

  • model (OpenStudio::Model::Model)

    OpenStudio model object

  • building_type (String)

    the building type

  • climate_zone (String)

    ASHRAE climate zone, e.g. ‘ASHRAE 169-2013-4A’

  • prototype_input (Hash)

    hash of prototype inputs

Returns:

  • (Boolean)

    returns true if successful, false if not



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb', line 11

def model_custom_hvac_tweaks(model, building_type, climate_zone, prototype_input)
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Started building type specific adjustments')

  # get the fume hood space type and exhaust ACH
  fume_hood_exhaust_ach = nil
  model.getSpaceTypes.each do |spc_type|
    next unless spc_type.name.get.to_s.downcase.include? 'fume hood'

    spc_type_properties = space_type_get_standards_data(spc_type)
    fume_hood_exhaust_ach = spc_type_properties['ventilation_air_changes'].to_f
  end

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

    # add exhaust fan to fume hood zone
    fume_hood_zone_volume = space.volume
    flow_rate_fume_hood = fume_hood_zone_volume * fume_hood_exhaust_ach / 3600.0
    model_add_exhaust_fan(model, [space.thermalZone.get], flow_rate: flow_rate_fume_hood, flow_fraction_schedule_name: 'Lab_FumeHood_Sch')
  end

  # adjust doas sizing
  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

  # control lab air terminals for outdoor air
  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

  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) ⇒ Boolean

swh adjustments specific to the prototype model

Parameters:

  • model (OpenStudio::Model::Model)

    OpenStudio model object

  • building_type (String)

    the building type

  • climate_zone (String)

    ASHRAE climate zone, e.g. ‘ASHRAE 169-2013-4A’

  • prototype_input (Hash)

    hash of prototype inputs

Returns:

  • (Boolean)

    returns true if successful, false if not



81
82
83
# File 'lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb', line 81

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

#model_modify_oa_controller(model) ⇒ Boolean

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

Parameters:

  • model (OpenStudio::Model::Model)

    OpenStudio model object

Returns:

  • (Boolean)

    returns true if successful, false if not



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

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
  return true
end