/
measure.rb
90 lines (72 loc) · 3.47 KB
/
measure.rb
1
2
3
4
5
6
7
8
9
10
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
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
# *******************************************************************************
# OpenStudio(R), Copyright (c) Alliance for Sustainable Energy, LLC.
# See also https://openstudio.net/license
# *******************************************************************************
# see the URL below for information on how to write OpenStudio measures
# http://openstudio.nrel.gov/openstudio-measure-writing-guide
# see the URL below for information on using life cycle cost objects in OpenStudio
# http://openstudio.nrel.gov/openstudio-life-cycle-examples
# see the URL below for access to C++ documentation on model objects (click on "model" in the main window to view model objects)
# http://openstudio.nrel.gov/sites/openstudio.nrel.gov/files/nv_data/cpp_documentation_it/model/html/namespaces.html
# start the measure
class RemoveHardAssignedConstructions < OpenStudio::Measure::ModelMeasure
# 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
def name
return 'RemoveHardAssignedConstructions'
end
# define the arguments that the user will input
def arguments(model)
args = OpenStudio::Measure::OSArgumentVector.new
# make an argument to skip removal of hard assigned constructions on adiabatic surfaces
preserve_adiabatic = OpenStudio::Measure::OSArgument.makeBoolArgument('preserve_adiabatic', true)
preserve_adiabatic.setDisplayName('Preserve Hard Assigned Constructions for Adiabatic Surfaces.')
preserve_adiabatic.setDefaultValue(true)
args << preserve_adiabatic
return args
end
# define what happens when the measure is run
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
preserve_adiabatic = runner.getBoolArgumentValue('preserve_adiabatic', user_arguments)
# setup counter for initial condition
numberOfDefaultedSurfaces = 0
# surfaces to skip if preserve_adiabatic
adiabaticArray = []
model.getSurfaces.each do |surface|
if surface.outsideBoundaryCondition == 'Adiabatic'
adiabaticArray << surface
end
end
# reset all planar surfaces
planar_surfaces = model.getPlanarSurfaces
planar_surfaces.each do |planar_surface|
if planar_surface.isConstructionDefaulted
numberOfDefaultedSurfaces += 1
end
if !(preserve_adiabatic && adiabaticArray.include?(planar_surface))
planar_surface.resetConstruction
end
end
# reporting initial condition of model
runner.registerInitialCondition("The building has #{planar_surfaces.size} planar surfaces. Initially #{planar_surfaces.size - numberOfDefaultedSurfaces} surfaces have hard assigned constructions.")
# check how many surfaces are defaulted in final model
finalNumberOfDefaultedSurfaces = 0
planar_surfaces.each do |planar_surface|
if planar_surface.isConstructionDefaulted
finalNumberOfDefaultedSurfaces += 1
end
end
# reporting final condition of model
finishing_spaces = model.getSpaces
runner.registerFinalCondition("The final model has #{planar_surfaces.size - finalNumberOfDefaultedSurfaces} surfaces with hard assigned constructions.")
return true
end
end
# this allows the measure to be use by the application
RemoveHardAssignedConstructions.new.registerWithApplication