openstudio-common-measures 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -0
  3. data/lib/openstudio/common_measures/version.rb +1 -1
  4. metadata +3 -63
  5. data/lib/measures/AddDaylightSensors/LICENSE.md +0 -27
  6. data/lib/measures/AddDaylightSensors/README.md +0 -136
  7. data/lib/measures/AddDaylightSensors/README.md.erb +0 -42
  8. data/lib/measures/AddDaylightSensors/measure.rb +0 -521
  9. data/lib/measures/AddDaylightSensors/measure.xml +0 -233
  10. data/lib/measures/EnableDemandControlledVentilation/LICENSE.md +0 -27
  11. data/lib/measures/EnableDemandControlledVentilation/README.md +0 -32
  12. data/lib/measures/EnableDemandControlledVentilation/README.md.erb +0 -42
  13. data/lib/measures/EnableDemandControlledVentilation/measure.rb +0 -154
  14. data/lib/measures/EnableDemandControlledVentilation/measure.xml +0 -99
  15. data/lib/measures/EnableEconomizerControl/LICENSE.md +0 -27
  16. data/lib/measures/EnableEconomizerControl/README.md +0 -48
  17. data/lib/measures/EnableEconomizerControl/README.md.erb +0 -42
  18. data/lib/measures/EnableEconomizerControl/measure.rb +0 -172
  19. data/lib/measures/EnableEconomizerControl/measure.xml +0 -124
  20. data/lib/measures/IncreaseInsulationRValueForExteriorWalls/LICENSE.md +0 -27
  21. data/lib/measures/IncreaseInsulationRValueForExteriorWalls/README.md +0 -64
  22. data/lib/measures/IncreaseInsulationRValueForExteriorWalls/README.md.erb +0 -42
  23. data/lib/measures/IncreaseInsulationRValueForExteriorWalls/measure.rb +0 -422
  24. data/lib/measures/IncreaseInsulationRValueForExteriorWalls/measure.xml +0 -150
  25. data/lib/measures/IncreaseInsulationRValueForExteriorWallsByPercentage/LICENSE.md +0 -27
  26. data/lib/measures/IncreaseInsulationRValueForExteriorWallsByPercentage/README.md +0 -32
  27. data/lib/measures/IncreaseInsulationRValueForExteriorWallsByPercentage/README.md.erb +0 -42
  28. data/lib/measures/IncreaseInsulationRValueForExteriorWallsByPercentage/measure.rb +0 -328
  29. data/lib/measures/IncreaseInsulationRValueForExteriorWallsByPercentage/measure.xml +0 -98
  30. data/lib/measures/IncreaseInsulationRValueForRoofs/LICENSE.md +0 -27
  31. data/lib/measures/IncreaseInsulationRValueForRoofs/README.md +0 -64
  32. data/lib/measures/IncreaseInsulationRValueForRoofs/README.md.erb +0 -42
  33. data/lib/measures/IncreaseInsulationRValueForRoofs/measure.rb +0 -422
  34. data/lib/measures/IncreaseInsulationRValueForRoofs/measure.xml +0 -143
  35. data/lib/measures/IncreaseInsulationRValueForRoofsByPercentage/LICENSE.md +0 -27
  36. data/lib/measures/IncreaseInsulationRValueForRoofsByPercentage/README.md +0 -32
  37. data/lib/measures/IncreaseInsulationRValueForRoofsByPercentage/README.md.erb +0 -42
  38. data/lib/measures/IncreaseInsulationRValueForRoofsByPercentage/measure.rb +0 -328
  39. data/lib/measures/IncreaseInsulationRValueForRoofsByPercentage/measure.xml +0 -98
  40. data/lib/measures/ReduceElectricEquipmentLoadsByPercentage/LICENSE.md +0 -27
  41. data/lib/measures/ReduceElectricEquipmentLoadsByPercentage/README.md +0 -97
  42. data/lib/measures/ReduceElectricEquipmentLoadsByPercentage/README.md.erb +0 -42
  43. data/lib/measures/ReduceElectricEquipmentLoadsByPercentage/measure.rb +0 -450
  44. data/lib/measures/ReduceElectricEquipmentLoadsByPercentage/measure.xml +0 -186
  45. data/lib/measures/ReduceLightingLoadsByPercentage/LICENSE.md +0 -27
  46. data/lib/measures/ReduceLightingLoadsByPercentage/README.md +0 -96
  47. data/lib/measures/ReduceLightingLoadsByPercentage/README.md.erb +0 -42
  48. data/lib/measures/ReduceLightingLoadsByPercentage/measure.rb +0 -513
  49. data/lib/measures/ReduceLightingLoadsByPercentage/measure.xml +0 -191
  50. data/lib/measures/ReduceSpaceInfiltrationByPercentage/LICENSE.md +0 -27
  51. data/lib/measures/ReduceSpaceInfiltrationByPercentage/README.md +0 -104
  52. data/lib/measures/ReduceSpaceInfiltrationByPercentage/README.md.erb +0 -42
  53. data/lib/measures/ReduceSpaceInfiltrationByPercentage/measure.rb +0 -349
  54. data/lib/measures/ReduceSpaceInfiltrationByPercentage/measure.xml +0 -181
  55. data/lib/measures/ReduceVentilationByPercentage/LICENSE.md +0 -27
  56. data/lib/measures/ReduceVentilationByPercentage/README.md +0 -40
  57. data/lib/measures/ReduceVentilationByPercentage/README.md.erb +0 -42
  58. data/lib/measures/ReduceVentilationByPercentage/measure.rb +0 -291
  59. data/lib/measures/ReduceVentilationByPercentage/measure.xml +0 -96
  60. data/lib/measures/create_variable_speed_rtu/LICENSE.md +0 -27
  61. data/lib/measures/create_variable_speed_rtu/README.md +0 -120
  62. data/lib/measures/create_variable_speed_rtu/README.md.erb +0 -42
  63. data/lib/measures/create_variable_speed_rtu/measure.rb +0 -539
  64. data/lib/measures/create_variable_speed_rtu/measure.xml +0 -207
@@ -1,191 +0,0 @@
1
- <measure>
2
- <schema_version>3.0</schema_version>
3
- <name>reduce_lighting_loads_by_percentage</name>
4
- <uid>791f3404-a28b-4a80-ba3f-e15b339e39ea</uid>
5
- <version_id>01e31b73-acc4-47cd-b6cb-8c54238964fc</version_id>
6
- <version_modified>20200229T024320Z</version_modified>
7
- <xml_checksum>293730A7</xml_checksum>
8
- <class_name>ReduceLightingLoadsByPercentage</class_name>
9
- <display_name>Reduce Lighting Loads by Percentage</display_name>
10
- <description>The lighting system in this building uses more power per area than is required with the latest lighting technologies. Replace the lighting system with a newer, more efficient lighting technology. Newer technologies provide the same amount of light but use less energy in the process.</description>
11
- <modeler_description>This measure supports models which have a mixture of lighting assigned to spaces and space types. The lighting may be specified as individual luminaires, lighting equipment level, lighting power per area, or lighting power per person. Loop through all lights and luminaires in the specified space type or the entire building. Clone the definition if it is shared by other lights, rename and adjust the power based on the specified percentage. Link the new definition to the existing lights or luminaire instance. Adjust the power for lighting equipment assigned to a particular space but only if that space is part of the selected space type by looping through the objects first in space types and then in spaces, but again only for spaces that are in the specified space type (unless the entire building has been chosen). Material and installation cost increases will be applied to all costs related to both the definition and instance of the lighting object. If this measure includes baseline costs, then the material and installation costs of the lighting objects in the baseline model will be summed together and added as a capital cost on the building object.</modeler_description>
12
- <arguments>
13
- <argument>
14
- <name>space_type</name>
15
- <display_name>Apply the Measure to a Specific Space Type or to the Entire Model</display_name>
16
- <type>Choice</type>
17
- <required>true</required>
18
- <model_dependent>false</model_dependent>
19
- <default_value>*Entire Building*</default_value>
20
- <choices>
21
- <choice>
22
- <value>{ba5b25d6-8c19-43e3-abc8-bb5666d4cc52}</value>
23
- <display_name>*Entire Building*</display_name>
24
- </choice>
25
- </choices>
26
- </argument>
27
- <argument>
28
- <name>lighting_power_reduction_percent</name>
29
- <display_name>Lighting Power Reduction</display_name>
30
- <type>Double</type>
31
- <units>%</units>
32
- <required>true</required>
33
- <model_dependent>false</model_dependent>
34
- <default_value>30</default_value>
35
- </argument>
36
- <argument>
37
- <name>material_and_installation_cost</name>
38
- <display_name>Increase in Material and Installation Cost for Lighting per Floor Area</display_name>
39
- <type>Double</type>
40
- <units>%</units>
41
- <required>true</required>
42
- <model_dependent>false</model_dependent>
43
- <default_value>0</default_value>
44
- </argument>
45
- <argument>
46
- <name>demolition_cost</name>
47
- <display_name>Increase in Demolition Costs for Lighting per Floor Area</display_name>
48
- <type>Double</type>
49
- <units>%</units>
50
- <required>true</required>
51
- <model_dependent>false</model_dependent>
52
- <default_value>0</default_value>
53
- </argument>
54
- <argument>
55
- <name>years_until_costs_start</name>
56
- <display_name>Years Until Costs Start</display_name>
57
- <type>Integer</type>
58
- <units>whole years</units>
59
- <required>true</required>
60
- <model_dependent>false</model_dependent>
61
- <default_value>0</default_value>
62
- </argument>
63
- <argument>
64
- <name>demo_cost_initial_const</name>
65
- <display_name>Demolition Costs Occur During Initial Construction</display_name>
66
- <type>Boolean</type>
67
- <required>true</required>
68
- <model_dependent>false</model_dependent>
69
- <default_value>false</default_value>
70
- <choices>
71
- <choice>
72
- <value>true</value>
73
- <display_name>true</display_name>
74
- </choice>
75
- <choice>
76
- <value>false</value>
77
- <display_name>false</display_name>
78
- </choice>
79
- </choices>
80
- </argument>
81
- <argument>
82
- <name>expected_life</name>
83
- <display_name>Expected Life</display_name>
84
- <type>Integer</type>
85
- <units>whole years</units>
86
- <required>true</required>
87
- <model_dependent>false</model_dependent>
88
- <default_value>15</default_value>
89
- </argument>
90
- <argument>
91
- <name>om_cost</name>
92
- <display_name>Increase O &amp; M Costs for Lighting per Floor Area</display_name>
93
- <type>Double</type>
94
- <units>%</units>
95
- <required>true</required>
96
- <model_dependent>false</model_dependent>
97
- <default_value>0</default_value>
98
- </argument>
99
- <argument>
100
- <name>om_frequency</name>
101
- <display_name>O &amp; M Frequency</display_name>
102
- <type>Integer</type>
103
- <units>whole years</units>
104
- <required>true</required>
105
- <model_dependent>false</model_dependent>
106
- <default_value>1</default_value>
107
- </argument>
108
- </arguments>
109
- <outputs/>
110
- <provenances/>
111
- <tags>
112
- <tag>Electric Lighting.Lighting Equipment</tag>
113
- </tags>
114
- <attributes>
115
- <attribute>
116
- <name>Measure Type</name>
117
- <value>ModelMeasure</value>
118
- <datatype>string</datatype>
119
- </attribute>
120
- <attribute>
121
- <name>Measure Function</name>
122
- <value>Measure</value>
123
- <datatype>string</datatype>
124
- </attribute>
125
- <attribute>
126
- <name>Requires EnergyPlus Results</name>
127
- <value>false</value>
128
- <datatype>boolean</datatype>
129
- </attribute>
130
- <attribute>
131
- <name>Uses SketchUp API</name>
132
- <value>false</value>
133
- <datatype>boolean</datatype>
134
- </attribute>
135
- </attributes>
136
- <files>
137
- <file>
138
- <filename>EC_QAQC.osm</filename>
139
- <filetype>osm</filetype>
140
- <usage_type>test</usage_type>
141
- <checksum>A0F6342F</checksum>
142
- </file>
143
- <file>
144
- <filename>EnvelopeAndLoadTestModel_01.osm</filename>
145
- <filetype>osm</filetype>
146
- <usage_type>test</usage_type>
147
- <checksum>10AA8866</checksum>
148
- </file>
149
- <file>
150
- <filename>EnvelopeAndLoadTestModel_01_FullyCosted.osm</filename>
151
- <filetype>osm</filetype>
152
- <usage_type>test</usage_type>
153
- <checksum>824A4C53</checksum>
154
- </file>
155
- <file>
156
- <filename>README.md.erb</filename>
157
- <filetype>erb</filetype>
158
- <usage_type>readmeerb</usage_type>
159
- <checksum>703C9964</checksum>
160
- </file>
161
- <file>
162
- <filename>README.md</filename>
163
- <filetype>md</filetype>
164
- <usage_type>readme</usage_type>
165
- <checksum>9169535E</checksum>
166
- </file>
167
- <file>
168
- <filename>ReduceLightingLoadsByPercentage_Test.rb</filename>
169
- <filetype>rb</filetype>
170
- <usage_type>test</usage_type>
171
- <checksum>F5BAA5CC</checksum>
172
- </file>
173
- <file>
174
- <filename>LICENSE.md</filename>
175
- <filetype>md</filetype>
176
- <usage_type>license</usage_type>
177
- <checksum>E0468DD6</checksum>
178
- </file>
179
- <file>
180
- <version>
181
- <software_program>OpenStudio</software_program>
182
- <identifier>2.0.0</identifier>
183
- <min_compatible>2.0.0</min_compatible>
184
- </version>
185
- <filename>measure.rb</filename>
186
- <filetype>rb</filetype>
187
- <usage_type>script</usage_type>
188
- <checksum>BD37BF51</checksum>
189
- </file>
190
- </files>
191
- </measure>
@@ -1,27 +0,0 @@
1
- OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC. All rights reserved.
2
-
3
- Redistribution and use in source and binary forms, with or without modification, are permitted
4
- provided that the following conditions are met:
5
-
6
- (1) Redistributions of source code must retain the above copyright notice, this list of conditions
7
- and the following disclaimer.
8
-
9
- (2) Redistributions in binary form must reproduce the above copyright notice, this list of conditions
10
- and the following disclaimer in the documentation and/or other materials provided with the distribution.
11
-
12
- (3) Neither the name of the copyright holder nor the names of any contributors may be used to endorse
13
- or promote products derived from this software without specific prior written permission from the
14
- respective party.
15
-
16
- (4) Other than as required in clauses (1) and (2), distributions in any form of modifications or other
17
- derivative works may not use the "OpenStudio" trademark, "OS", "os", or any other confusingly similar
18
- designation without specific prior written permission from Alliance for Sustainable Energy, LLC.
19
-
20
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
21
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
22
- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER, THE UNITED STATES GOVERNMENT,
23
- OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
25
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26
- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -1,104 +0,0 @@
1
-
2
-
3
- ###### (Automatically generated documentation)
4
-
5
- # ReduceSpaceInfiltrationByPercentage
6
-
7
- ## Description
8
- This measure will reduce space infiltration rates by the requested percentage. A cost per square foot of building area can be added to the model.
9
-
10
- ## Modeler Description
11
- This can be run across a space type or the entire building. Costs will be associated with the building. If infiltration objects are removed at a later date, the costs will remain.
12
-
13
- ## Measure Type
14
- ModelMeasure
15
-
16
- ## Taxonomy
17
-
18
-
19
- ## Arguments
20
-
21
-
22
- ### Apply the Measure to a Specific Space Type or to the Entire Model.
23
-
24
- **Name:** space_type,
25
- **Type:** Choice,
26
- **Units:** ,
27
- **Required:** true,
28
- **Model Dependent:** false
29
-
30
- ### Space Infiltration Power Reduction
31
-
32
- **Name:** space_infiltration_reduction_percent,
33
- **Type:** Double,
34
- **Units:** %,
35
- **Required:** true,
36
- **Model Dependent:** false
37
-
38
- ### Constant Coefficient
39
-
40
- **Name:** constant_coefficient,
41
- **Type:** Double,
42
- **Units:** ,
43
- **Required:** true,
44
- **Model Dependent:** false
45
-
46
- ### Temperature Coefficient
47
-
48
- **Name:** temperature_coefficient,
49
- **Type:** Double,
50
- **Units:** ,
51
- **Required:** true,
52
- **Model Dependent:** false
53
-
54
- ### Wind Speed Coefficient
55
-
56
- **Name:** wind_speed_coefficient,
57
- **Type:** Double,
58
- **Units:** ,
59
- **Required:** true,
60
- **Model Dependent:** false
61
-
62
- ### Wind Speed Squared Coefficient
63
-
64
- **Name:** wind_speed_squared_coefficient,
65
- **Type:** Double,
66
- **Units:** ,
67
- **Required:** true,
68
- **Model Dependent:** false
69
-
70
- ### Alter constant temperature and wind speed coefficients.
71
- Setting this to false will result in infiltration objects that maintain the coefficients from the initial model. Setting this to true replaces the existing coefficients with the values entered for the coefficient arguments in this measure
72
- **Name:** alter_coef,
73
- **Type:** Boolean,
74
- **Units:** ,
75
- **Required:** true,
76
- **Model Dependent:** false
77
-
78
- ### Increase in Material and Installation Costs for Building per Affected Floor Area
79
-
80
- **Name:** material_and_installation_cost,
81
- **Type:** Double,
82
- **Units:** $/ft^2,
83
- **Required:** true,
84
- **Model Dependent:** false
85
-
86
- ### O & M Costs for Construction per Affected Floor Area
87
-
88
- **Name:** om_cost,
89
- **Type:** Double,
90
- **Units:** $/ft^2,
91
- **Required:** true,
92
- **Model Dependent:** false
93
-
94
- ### O & M Frequency
95
-
96
- **Name:** om_frequency,
97
- **Type:** Integer,
98
- **Units:** whole years,
99
- **Required:** true,
100
- **Model Dependent:** false
101
-
102
-
103
-
104
-
@@ -1,42 +0,0 @@
1
- <%#= README.md.erb is used to auto-generate README.md. %>
2
- <%#= To manually maintain README.md throw away README.md.erb and manually edit README.md %>
3
- ###### (Automatically generated documentation)
4
-
5
- # <%= name %>
6
-
7
- ## Description
8
- <%= description %>
9
-
10
- ## Modeler Description
11
- <%= modelerDescription %>
12
-
13
- ## Measure Type
14
- <%= measureType %>
15
-
16
- ## Taxonomy
17
- <%= taxonomy %>
18
-
19
- ## Arguments
20
-
21
- <% arguments.each do |argument| %>
22
- ### <%= argument[:display_name] %>
23
- <%= argument[:description] %>
24
- **Name:** <%= argument[:name] %>,
25
- **Type:** <%= argument[:type] %>,
26
- **Units:** <%= argument[:units] %>,
27
- **Required:** <%= argument[:required] %>,
28
- **Model Dependent:** <%= argument[:model_dependent] %>
29
- <% end %>
30
-
31
- <% if arguments.size == 0 %>
32
- <%= "This measure does not have any user arguments" %>
33
- <% end %>
34
-
35
- <% if outputs.size > 0 %>
36
- ## Outputs
37
- <% output_names = [] %>
38
- <% outputs.each do |output| %>
39
- <% output_names << output[:display_name] %>
40
- <% end %>
41
- <%= output_names.join(", ") %>
42
- <% end %>
@@ -1,349 +0,0 @@
1
- # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
3
- # All rights reserved.
4
- # Redistribution and use in source and binary forms, with or without
5
- # modification, are permitted provided that the following conditions are met:
6
- #
7
- # (1) Redistributions of source code must retain the above copyright notice,
8
- # this list of conditions and the following disclaimer.
9
- #
10
- # (2) Redistributions in binary form must reproduce the above copyright notice,
11
- # this list of conditions and the following disclaimer in the documentation
12
- # and/or other materials provided with the distribution.
13
- #
14
- # (3) Neither the name of the copyright holder nor the names of any contributors
15
- # may be used to endorse or promote products derived from this software without
16
- # specific prior written permission from the respective party.
17
- #
18
- # (4) Other than as required in clauses (1) and (2), distributions in any form
19
- # of modifications or other derivative works may not use the "OpenStudio"
20
- # trademark, "OS", "os", or any other confusingly similar designation without
21
- # specific prior written permission from Alliance for Sustainable Energy, LLC.
22
- #
23
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
24
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
25
- # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
27
- # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
28
- # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
29
- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
30
- # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
32
- # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33
- # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
- # *******************************************************************************
35
-
36
- # see the URL below for information on how to write OpenStudio measures
37
- # http://openstudio.nrel.gov/openstudio-measure-writing-guide
38
-
39
- # see the URL below for information on using life cycle cost objects in OpenStudio
40
- # http://openstudio.nrel.gov/openstudio-life-cycle-examples
41
-
42
- # see the URL below for access to C++ documentation on model objects (click on "model" in the main window to view model objects)
43
- # http://openstudio.nrel.gov/sites/openstudio.nrel.gov/files/nv_data/cpp_documentation_it/model/html/namespaces.html
44
-
45
- # start the measure
46
- class ReduceSpaceInfiltrationByPercentage < OpenStudio::Measure::ModelMeasure
47
- # define the name that a user will see, this method may be deprecated as
48
- # the display name in PAT comes from the name field in measure.xml
49
- def name
50
- return 'ReduceSpaceInfiltrationByPercentage'
51
- end
52
-
53
- # human readable description
54
- def description
55
- return 'This measure will reduce space infiltration rates by the requested percentage. A cost per square foot of building area can be added to the model.'
56
- end
57
-
58
- # human readable description of modeling approach
59
- def modeler_description
60
- return 'This can be run across a space type or the entire building. Costs will be associated with the building. If infiltration objects are removed at a later date, the costs will remain.'
61
- end
62
-
63
- # define the arguments that the user will input
64
- def arguments(model)
65
- args = OpenStudio::Measure::OSArgumentVector.new
66
-
67
- # make a choice argument for model objects
68
- space_type_handles = OpenStudio::StringVector.new
69
- space_type_display_names = OpenStudio::StringVector.new
70
-
71
- # putting model object and names into hash
72
- space_type_args = model.getSpaceTypes
73
- space_type_args_hash = {}
74
- space_type_args.each do |space_type_arg|
75
- space_type_args_hash[space_type_arg.name.to_s] = space_type_arg
76
- end
77
-
78
- # looping through sorted hash of model objects
79
- space_type_args_hash.sort.map do |key, value|
80
- # only include if space type is used in the model
81
- if !value.spaces.empty?
82
- space_type_handles << value.handle.to_s
83
- space_type_display_names << key
84
- end
85
- end
86
-
87
- # add building to string vector with space type
88
- building = model.getBuilding
89
- space_type_handles << building.handle.to_s
90
- space_type_display_names << '*Entire Building*'
91
-
92
- # make a choice argument for space type
93
- space_type = OpenStudio::Measure::OSArgument.makeChoiceArgument('space_type', space_type_handles, space_type_display_names)
94
- space_type.setDisplayName('Apply the Measure to a Specific Space Type or to the Entire Model.')
95
- space_type.setDefaultValue('*Entire Building*') # if no space type is chosen this will run on the entire building
96
- args << space_type
97
-
98
- # make an argument for reduction percentage
99
- space_infiltration_reduction_percent = OpenStudio::Measure::OSArgument.makeDoubleArgument('space_infiltration_reduction_percent', true)
100
- space_infiltration_reduction_percent.setDisplayName('Space Infiltration Power Reduction')
101
- space_infiltration_reduction_percent.setDefaultValue(30.0)
102
- space_infiltration_reduction_percent.setUnits('%')
103
- args << space_infiltration_reduction_percent
104
-
105
- # make an argument for constant_coefficient
106
- constant_coefficient = OpenStudio::Measure::OSArgument.makeDoubleArgument('constant_coefficient', true)
107
- constant_coefficient.setDisplayName('Constant Coefficient')
108
- constant_coefficient.setDefaultValue(1.0)
109
- args << constant_coefficient
110
-
111
- # make an argument for temperature_coefficient
112
- temperature_coefficient = OpenStudio::Measure::OSArgument.makeDoubleArgument('temperature_coefficient', true)
113
- temperature_coefficient.setDisplayName('Temperature Coefficient')
114
- temperature_coefficient.setDefaultValue(0.0)
115
- args << temperature_coefficient
116
-
117
- # make an argument for wind_speed_coefficient
118
- wind_speed_coefficient = OpenStudio::Measure::OSArgument.makeDoubleArgument('wind_speed_coefficient', true)
119
- wind_speed_coefficient.setDisplayName('Wind Speed Coefficient')
120
- wind_speed_coefficient.setDefaultValue(0.0)
121
- args << wind_speed_coefficient
122
-
123
- # make an argument for wind_speed_squared_coefficient
124
- wind_speed_squared_coefficient = OpenStudio::Measure::OSArgument.makeDoubleArgument('wind_speed_squared_coefficient', true)
125
- wind_speed_squared_coefficient.setDisplayName('Wind Speed Squared Coefficient')
126
- wind_speed_squared_coefficient.setDefaultValue(0.0)
127
- args << wind_speed_squared_coefficient
128
-
129
- # make an argument for alter_coef
130
- alter_coef = OpenStudio::Measure::OSArgument.makeBoolArgument('alter_coef', true)
131
- alter_coef.setDisplayName('Alter constant temperature and wind speed coefficients.')
132
- alter_coef.setDescription('Setting this to false will result in infiltration objects that maintain the coefficients from the initial model. Setting this to true replaces the existing coefficients with the values entered for the coefficient arguments in this measure')
133
- alter_coef.setDefaultValue(true)
134
- args << alter_coef
135
-
136
- # make an argument for material and installation cost
137
- material_and_installation_cost = OpenStudio::Measure::OSArgument.makeDoubleArgument('material_and_installation_cost', true)
138
- material_and_installation_cost.setDisplayName('Increase in Material and Installation Costs for Building per Affected Floor Area')
139
- material_and_installation_cost.setDefaultValue(0.0)
140
- material_and_installation_cost.setUnits('$/ft^2')
141
- args << material_and_installation_cost
142
-
143
- # make an argument for O & M cost
144
- om_cost = OpenStudio::Measure::OSArgument.makeDoubleArgument('om_cost', true)
145
- om_cost.setDisplayName('O & M Costs for Construction per Affected Floor Area')
146
- om_cost.setDefaultValue(0.0)
147
- om_cost.setUnits('$/ft^2')
148
- args << om_cost
149
-
150
- # make an argument for O & M frequency
151
- om_frequency = OpenStudio::Measure::OSArgument.makeIntegerArgument('om_frequency', true)
152
- om_frequency.setDisplayName('O & M Frequency')
153
- om_frequency.setDefaultValue(1)
154
- om_frequency.setUnits('whole years')
155
- args << om_frequency
156
-
157
- return args
158
- end
159
-
160
- # define what happens when the measure is run
161
- def run(model, runner, user_arguments)
162
- super(model, runner, user_arguments)
163
-
164
- # use the built-in error checking
165
- if !runner.validateUserArguments(arguments(model), user_arguments)
166
- return false
167
- end
168
-
169
- # assign the user inputs to variables
170
- object = runner.getOptionalWorkspaceObjectChoiceValue('space_type', user_arguments, model)
171
- space_infiltration_reduction_percent = runner.getDoubleArgumentValue('space_infiltration_reduction_percent', user_arguments)
172
- constant_coefficient = runner.getDoubleArgumentValue('constant_coefficient', user_arguments)
173
- temperature_coefficient = runner.getDoubleArgumentValue('temperature_coefficient', user_arguments)
174
- wind_speed_coefficient = runner.getDoubleArgumentValue('wind_speed_coefficient', user_arguments)
175
- wind_speed_squared_coefficient = runner.getDoubleArgumentValue('wind_speed_squared_coefficient', user_arguments)
176
- alter_coef = runner.getBoolArgumentValue('alter_coef', user_arguments)
177
- material_and_installation_cost = runner.getDoubleArgumentValue('material_and_installation_cost', user_arguments)
178
- om_cost = runner.getDoubleArgumentValue('om_cost', user_arguments)
179
- om_frequency = runner.getIntegerArgumentValue('om_frequency', user_arguments)
180
-
181
- # check the space_type for reasonableness and see if measure should run on space type or on the entire building
182
- apply_to_building = false
183
- space_type = nil
184
- if object.empty?
185
- handle = runner.getStringArgumentValue('space_type', user_arguments)
186
- if handle.empty?
187
- runner.registerError('No space type was chosen.')
188
- else
189
- runner.registerError("The selected space type with handle '#{handle}' was not found in the model. It may have been removed by another measure.")
190
- end
191
- return false
192
- else
193
- if !object.get.to_SpaceType.empty?
194
- space_type = object.get.to_SpaceType.get
195
- elsif !object.get.to_Building.empty?
196
- apply_to_building = true
197
- else
198
- runner.registerError('Script Error - argument not showing up as space type or building.')
199
- return false
200
- end
201
- end
202
-
203
- # check the space_infiltration_reduction_percent and for reasonableness
204
- if space_infiltration_reduction_percent > 100
205
- runner.registerError('Please enter a value less than or equal to 100 for the Space Infiltration reduction percentage.')
206
- return false
207
- elsif space_infiltration_reduction_percent == 0
208
- runner.registerInfo('No Space Infiltration adjustment requested, but infiltration coefficients or life cycle costs may still be affected.')
209
- elsif (space_infiltration_reduction_percent < 1) && (space_infiltration_reduction_percent > -1)
210
- runner.registerWarning("A Space Infiltration reduction percentage of #{space_infiltration_reduction_percent} percent is abnormally low.")
211
- elsif space_infiltration_reduction_percent > 90
212
- runner.registerWarning("A Space Infiltration reduction percentage of #{space_infiltration_reduction_percent} percent is abnormally high.")
213
- elsif space_infiltration_reduction_percent < 0
214
- runner.registerInfo('The requested value for Space Infiltration reduction percentage was negative. This will result in an increase in Space Infiltration.')
215
- end
216
-
217
- # TODO: - currently not checking for negative $/ft^2 for material_and_installation_cost and om_cost, confirm if E+ will allow negative cost
218
-
219
- if om_frequency < 1
220
- runner.registerError('Choose an integer greater than 0 for O & M Frequency.')
221
- end
222
-
223
- # helper to make numbers pretty (converts 4125001.25641 to 4,125,001.26 or 4,125,001). The definition be called through this measure.
224
- def neat_numbers(number, roundto = 2) # round to 0 or 2)
225
- if roundto == 2
226
- number = format '%.2f', number
227
- else
228
- number = number.round
229
- end
230
- # regex to add commas
231
- number.to_s.reverse.gsub(/([0-9]{3}(?=([0-9])))/, '\\1,').reverse
232
- end
233
-
234
- # get space infiltration objects used in the model
235
- space_infiltration_objects = model.getSpaceInfiltrationDesignFlowRates
236
- # TODO: - it would be nice to give ranges for different calculation methods but would take some work.
237
-
238
- # counters needed for measure
239
- altered_instances = 0
240
- affected_area_si = 0
241
-
242
- # reporting initial condition of model
243
- if !space_infiltration_objects.empty?
244
- runner.registerInitialCondition("The initial model contained #{space_infiltration_objects.size} space infiltration objects.")
245
- else
246
- runner.registerInitialCondition('The initial model did not contain any space infiltration objects.')
247
- end
248
-
249
- # get space types in model
250
- building = model.building.get
251
- if apply_to_building
252
- space_types = model.getSpaceTypes
253
- affected_area_si = building.floorArea
254
- else
255
- space_types = []
256
- space_types << space_type # only run on a single space type
257
- affected_area_si = space_type.floorArea
258
- end
259
-
260
- # def to alter performance and life cycle costs of objects
261
- def alter_performance(object, space_infiltration_reduction_percent, constant_coefficient, temperature_coefficient, wind_speed_coefficient, wind_speed_squared_coefficient, alter_coef, runner)
262
- # edit instance based on percentage reduction
263
- instance = object
264
- if !instance.designFlowRate.empty?
265
- new_infiltration_design_flow_rate = instance.setDesignFlowRate(instance.designFlowRate.get - instance.designFlowRate.get * space_infiltration_reduction_percent * 0.01)
266
- elsif !instance.flowperSpaceFloorArea.empty?
267
- new_infiltration_flow_floor_area = instance.setFlowperSpaceFloorArea(instance.flowperSpaceFloorArea.get - instance.flowperSpaceFloorArea.get * space_infiltration_reduction_percent * 0.01)
268
- elsif !instance.flowperExteriorSurfaceArea.empty?
269
- new_infiltration_flow_ext_area = instance.setFlowperExteriorSurfaceArea(instance.flowperExteriorSurfaceArea.get - instance.flowperExteriorSurfaceArea.get * space_infiltration_reduction_percent * 0.01)
270
- elsif !instance.flowperExteriorWallArea.empty?
271
- new_infiltration_flow_ext_area = instance.setFlowperExteriorWallArea(instance.flowperExteriorWallArea.get - instance.flowperExteriorWallArea.get * space_infiltration_reduction_percent * 0.01)
272
- elsif !instance.airChangesperHour.empty?
273
- new_infiltration_ach = instance.setAirChangesperHour(instance.airChangesperHour.get - instance.airChangesperHour.get * space_infiltration_reduction_percent * 0.01)
274
- else
275
- runner.registerWarning("'#{instance.name}' is used by one or more instances and has no load values.")
276
- end
277
-
278
- # only alter coefficients if requested
279
- if alter_coef
280
- instance.setConstantTermCoefficient(constant_coefficient)
281
- instance.setTemperatureTermCoefficient(temperature_coefficient)
282
- instance.setVelocityTermCoefficient(wind_speed_coefficient)
283
- instance.setVelocitySquaredTermCoefficient(wind_speed_squared_coefficient)
284
- end
285
- end
286
-
287
- # loop through space types
288
- space_types.each do |space_type|
289
- next if space_type.spaces.size <= 0
290
- space_type_infiltration_objects = space_type.spaceInfiltrationDesignFlowRates
291
- space_type_infiltration_objects.each do |space_type_infiltration_object|
292
- # call def to alter performance and life cycle costs
293
- alter_performance(space_type_infiltration_object, space_infiltration_reduction_percent, constant_coefficient, temperature_coefficient, wind_speed_coefficient, wind_speed_squared_coefficient, alter_coef, runner)
294
-
295
- # rename
296
- updated_instance_name = space_type_infiltration_object.setName("#{space_type_infiltration_object.name} #{space_infiltration_reduction_percent} percent reduction")
297
- altered_instances += 1
298
- end
299
- end
300
-
301
- # getting spaces in the model
302
- spaces = model.getSpaces
303
-
304
- # get space types in model
305
- if apply_to_building
306
- spaces = model.getSpaces
307
- else
308
- if !space_type.spaces.empty?
309
- spaces = space_type.spaces # only run on a single space type
310
- end
311
- end
312
-
313
- spaces.each do |space|
314
- space_infiltration_objects = space.spaceInfiltrationDesignFlowRates
315
- space_infiltration_objects.each do |space_infiltration_object|
316
- # call def to alter performance and life cycle costs
317
- alter_performance(space_infiltration_object, space_infiltration_reduction_percent, constant_coefficient, temperature_coefficient, wind_speed_coefficient, wind_speed_squared_coefficient, alter_coef, runner)
318
-
319
- # rename
320
- updated_instance_name = space_infiltration_object.setName("#{space_infiltration_object.name} #{space_infiltration_reduction_percent} percent reduction")
321
- altered_instances += 1
322
- end
323
- end
324
-
325
- if (altered_instances == 0) && (material_and_installation_cost == 0) && (om_cost == 0)
326
- runner.registerAsNotApplicable('No space infiltration objects were found in the specified space type(s) and no life cycle costs were requested.')
327
- end
328
-
329
- # only add LifeCyCyleCostItem if the user entered some non 0 cost values
330
- affected_area_ip = OpenStudio.convert(affected_area_si, 'm^2', 'ft^2').get
331
- if (material_and_installation_cost != 0) || (om_cost != 0)
332
- lcc_mat = OpenStudio::Model::LifeCycleCost.createLifeCycleCost('LCC_Mat - Cost to Adjust Infiltration', building, affected_area_ip * material_and_installation_cost, 'CostPerEach', 'Construction', 0, 0) # 0 for expected life will result infinite expected life
333
- lcc_om = OpenStudio::Model::LifeCycleCost.createLifeCycleCost('LCC_OM - Cost to Adjust Infiltration', building, affected_area_ip * om_cost, 'CostPerEach', 'Maintenance', om_frequency, 0) # o&m costs start after at sane time that material and installation costs occur
334
- runner.registerInfo("Costs related to the change in infiltration are attached to the building object. Any subsequent measures that may affect infiltration won't affect these costs.")
335
- final_cost = lcc_mat.get.totalCost
336
- else
337
- runner.registerInfo('Cost arguments were not provided, no cost objects were added to the model.')
338
- final_cost = 0
339
- end
340
-
341
- # report final condition
342
- runner.registerFinalCondition("#{altered_instances} space infiltration objects in the model were altered affecting #{neat_numbers(affected_area_ip, 0)}(ft^2) at a total cost of $#{neat_numbers(final_cost, 0)}.")
343
-
344
- return true
345
- end
346
- end
347
-
348
- # this allows the measure to be use by the application
349
- ReduceSpaceInfiltrationByPercentage.new.registerWithApplication