Class: SetExtWallToGroundBoundaryConditionByStory

Inherits:
OpenStudio::Measure::ModelMeasure
  • Object
show all
Defined in:
lib/measures/SetExtWallToGroundBoundaryConditionByStory/measure.rb

Overview

start the measure

Instance Method Summary collapse

Instance Method Details

#arguments(model) ⇒ Object

define the arguments that the user will input



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
# File 'lib/measures/SetExtWallToGroundBoundaryConditionByStory/measure.rb', line 21

def arguments(model)
  args = OpenStudio::Measure::OSArgumentVector.new

  # populate choice argument for storys that are applied to surfaces in the model
  storyBasement_handles = OpenStudio::StringVector.new
  storyBasement_display_names = OpenStudio::StringVector.new

  # putting stories and names into hash
  storyBasement_args = model.getBuildingStorys
  storyBasement_args_hash = {}
  storyBasement_args.each do |storyBasement_arg|
    storyBasement_args_hash[storyBasement_arg.name.to_s] = storyBasement_arg
  end

  # looping through sorted hash of storys
  storyBasement_args_hash.sort.map do |key, value|
    storyBasement_handles << value.handle.to_s
    storyBasement_display_names << key
  end

  # make an argument for storyBasement
  # todo - warn user if surface has any sub-surfaces.
  storyBasement = OpenStudio::Measure::OSArgument.makeChoiceArgument('storyBasement', storyBasement_handles, storyBasement_display_names, true)
  storyBasement.setDisplayName('Choose a Story to Change Wall Boundary Conditions For.')
  args << storyBasement

  return args
end

#nameObject

define the name that a user will see, this method may be deprecated as the display name in PAT comes from the name field in measure.xml



16
17
18
# File 'lib/measures/SetExtWallToGroundBoundaryConditionByStory/measure.rb', line 16

def name
  return 'SetExtWallToGroundBoundaryConditionByStory'
end

#run(model, runner, user_arguments) ⇒ Object

define what happens when the measure is run



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/measures/SetExtWallToGroundBoundaryConditionByStory/measure.rb', line 51

def run(model, runner, user_arguments)
  super(model, runner, user_arguments)

  # use the built-in error checking
  if !runner.validateUserArguments(arguments(model), user_arguments)
    return false
  end

  # assign the user inputs to variables
  storyBasement = runner.getOptionalWorkspaceObjectChoiceValue('storyBasement', user_arguments, model) # model is passed in because of argument type

  # check the storyBasement for reasonableness
  if storyBasement.empty?
    handle = runner.getStringArgumentValue('storyBasement', user_arguments)
    if handle.empty?
      runner.registerError('No storyBasement was chosen.')
    else
      runner.registerError("The selected storyBasement with handle '#{handle}' was not found in the model. It may have been removed by another measure.")
    end
    return false
  else
    if !storyBasement.get.to_BuildingStory.empty?
      storyBasement = storyBasement.get.to_BuildingStory.get
    else
      runner.registerError('Script Error - argument not showing up as storyBasement.')
      return false
    end
  end

  stories = model.getBuildingStorys

  # reporting initial condition of model
  runner.registerInitialCondition("The building has #{stories.size} stories.")

  affectedSpaces = storyBasement.spaces
  affectedSpaces.each do |story|
    surfaces = story.surfaces
    surfaces.each do |surface|
      if (surface.surfaceType == 'Wall') && (surface.outsideBoundaryCondition == 'Outdoors')
        surface.setOutsideBoundaryCondition('Ground')
      end
    end
  end

  # reporting final condition of model
  runner.registerFinalCondition("Exterior walls on #{storyBasement.name} now have a ground boundary condition.")

  return true
end