openstudio-analysis 0.4.2 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/README.md +6 -1
  4. data/lib/openstudio-analysis.rb +4 -0
  5. data/lib/openstudio/analysis.rb +16 -0
  6. data/lib/openstudio/analysis/algorithm_attributes.rb +4 -0
  7. data/lib/openstudio/analysis/formulation.rb +115 -49
  8. data/lib/openstudio/analysis/server_api.rb +151 -12
  9. data/lib/openstudio/analysis/support_files.rb +21 -3
  10. data/lib/openstudio/analysis/translator/excel.rb +84 -299
  11. data/lib/openstudio/analysis/version.rb +1 -1
  12. data/lib/openstudio/analysis/workflow.rb +79 -33
  13. data/lib/openstudio/analysis/workflow_step.rb +165 -39
  14. data/lib/openstudio/helpers/string.rb +1 -1
  15. data/lib/openstudio/weather/epw.rb +193 -0
  16. data/spec/files/0_1_09_outputvars.xlsx +0 -0
  17. data/spec/files/0_1_09_setup_version_2.xlsx +0 -0
  18. data/spec/files/0_3_0_dynamic_uuids.xlsx +0 -0
  19. data/spec/files/0_3_0_outputs.xlsx +0 -0
  20. data/spec/files/0_3_3_short_names.xlsx +0 -0
  21. data/spec/files/0_3_5_multiple_measure_paths.xlsx +0 -0
  22. data/spec/files/0_3_7_unique_measure_names.xlsx +0 -0
  23. data/spec/files/0_3_7_worker_init_final.xlsx +0 -0
  24. data/spec/files/0_4_0_multiple_seeds.xlsx +0 -0
  25. data/spec/files/0_4_0_pivot_test.xlsx +0 -0
  26. data/spec/files/analysis/examples/medium_office_workflow.json +1298 -0
  27. data/spec/files/analysis/medium_office.json +666 -603
  28. data/spec/files/analysis/medium_office.zip +0 -0
  29. data/spec/files/analysis/name_goes_here.json +1752 -0
  30. data/spec/files/{export/analysis/small_seed.zip → analysis/name_goes_here.zip} +0 -0
  31. data/spec/files/export/analysis/0_1_09_outputvars.json +265 -230
  32. data/spec/files/export/analysis/0_1_09_outputvars.zip +0 -0
  33. data/spec/files/export/analysis/{71bebb0a-34b7-404b-b430-0ee7dab962ff.json → 0_3_0_dynamic_uuids.json} +684 -590
  34. data/spec/files/export/analysis/{67e3ba4a-2660-41b6-a7c5-d4457a4275c4.zip → 0_3_0_dynamic_uuids.zip} +0 -0
  35. data/spec/files/export/analysis/0_3_0_outputs.json +684 -590
  36. data/spec/files/export/analysis/0_3_0_outputs.zip +0 -0
  37. data/spec/files/export/analysis/{5b5264db-a31e-4bab-931b-94101bd23b80.json → 0_3_3_short_names.json} +697 -622
  38. data/spec/files/export/analysis/{1d8d62bb-f058-4c38-893b-8eaa7ceea254.zip → 0_3_3_short_names.zip} +0 -0
  39. data/spec/files/export/analysis/{1d8d62bb-f058-4c38-893b-8eaa7ceea254.json → 0_3_5_multiple_measure_paths.json} +717 -602
  40. data/spec/files/export/analysis/{5b5264db-a31e-4bab-931b-94101bd23b80.zip → 0_3_5_multiple_measure_paths.zip} +0 -0
  41. data/spec/files/export/analysis/{67e3ba4a-2660-41b6-a7c5-d4457a4275c4.json → 0_3_7_worker_init_final.json} +708 -613
  42. data/spec/files/export/analysis/{71bebb0a-34b7-404b-b430-0ee7dab962ff.zip → 0_3_7_worker_init_final.zip} +0 -0
  43. data/spec/files/export/analysis/{0_1_11_discrete_variables.json → example_analysis.json} +279 -214
  44. data/spec/files/export/analysis/{0_1_11_discrete_variables.zip → example_analysis.zip} +0 -0
  45. data/spec/files/export/analysis/{discrete_lhs_example.json → lhs_discrete_and_continuous_variables.json} +549 -436
  46. data/spec/files/export/analysis/{discrete_lhs_example.zip → lhs_discrete_and_continuous_variables.zip} +0 -0
  47. data/spec/files/export/analysis/lhs_discrete_and_continuous_variables_f4a73fc4-0514-4033-b54d-d1c58c77c724.json +1298 -0
  48. data/spec/files/export/analysis/lhs_discrete_and_continuous_variables_f4a73fc4-0514-4033-b54d-d1c58c77c724.zip +0 -0
  49. data/spec/files/export/analysis/lhs_discrete_and_continuous_variables_model_-_1.json +1298 -0
  50. data/spec/files/export/analysis/lhs_discrete_and_continuous_variables_model_-_1.zip +0 -0
  51. data/spec/files/export/analysis/lhs_discrete_and_continuous_variables_something_else.json +1298 -0
  52. data/spec/files/export/analysis/lhs_discrete_and_continuous_variables_something_else.zip +0 -0
  53. data/spec/files/export/analysis/pivot_test.json +1323 -0
  54. data/spec/files/export/analysis/pivot_test.zip +0 -0
  55. data/spec/files/export/analysis/{0_2_0_template_simpletest.json → simple_test.json} +201 -178
  56. data/spec/files/export/analysis/{0_2_0_template_simpletest.zip → simple_test.zip} +0 -0
  57. data/spec/files/export/analysis/{0_1_12_discrete_dynamic_columns.json → test_model.json} +189 -167
  58. data/spec/files/export/analysis/{0_1_12_discrete_dynamic_columns.zip → test_model.zip} +0 -0
  59. data/spec/files/export/weather/weather_out.epw +32 -0
  60. data/spec/files/export/weather/weather_out_appended.epw +56 -0
  61. data/spec/files/export/workflow/analysis.json +0 -1
  62. data/spec/files/measures/reduce_space_infiltration_by_percentage/measure.rb +5 -0
  63. data/spec/files/measures/reduce_space_infiltration_by_percentage/measure.xml +1 -0
  64. data/spec/files/measures/rotate_building/measure.rb +5 -0
  65. data/spec/files/measures/rotate_building/measure.xml +1 -0
  66. data/spec/files/measures/set_window_to_wall_ratio_by_facade/measure.rb +5 -0
  67. data/spec/files/measures/set_window_to_wall_ratio_by_facade/measure.xml +1 -0
  68. data/spec/files/partial_weather.epw +32 -32
  69. data/spec/openstudio/excel_spec.rb +103 -69
  70. data/spec/openstudio/formulation_spec.rb +28 -14
  71. data/spec/openstudio/support_files_spec.rb +2 -2
  72. data/spec/openstudio/weather_spec.rb +45 -0
  73. data/spec/openstudio/workflow_spec.rb +2 -1
  74. data/spec/openstudio/workflow_step_spec.rb +24 -22
  75. data/spec/reports/SPEC-OpenStudio-Analysis-Formulation.xml +59 -10
  76. data/spec/reports/SPEC-OpenStudio-Analysis-ServerApi-create-a-new-object-instance.xml +2 -2
  77. data/spec/reports/SPEC-OpenStudio-Analysis-ServerApi-test-not-localhost.xml +2 -2
  78. data/spec/reports/SPEC-OpenStudio-Analysis-ServerApi.xml +1 -1
  79. data/spec/reports/SPEC-OpenStudio-Analysis-SupportFiles.xml +6 -6
  80. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-discrete-variables.xml +25 -7
  81. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-discrete-with-dynamic-columns.xml +18 -5
  82. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-no-variables-defined.xml +5 -8
  83. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-proxy-setup-with-user.xml +2 -2
  84. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-proxy-setup.xml +2 -2
  85. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-setup-output-variables.xml +29 -12
  86. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-setup-version-0-1-9.xml +5 -5
  87. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-small-list-of-incomplete-variables.xml +2 -2
  88. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-small-list-of-variables-should-not-validate.xml +2 -2
  89. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-small-list-of-variables.xml +26 -9
  90. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-small-list-with-with-repeated-variable-names.xml +2 -2
  91. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-version-0-1-10.xml +3 -7
  92. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-version-0-2-0-simple.xml +20 -9
  93. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-version-0-2-0.xml +35 -10
  94. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-version-0-3-0-dynamic-uuid-assignments.xml +47 -5
  95. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-version-0-3-0-measure-existence-checks.xml +3 -6
  96. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-version-0-3-0-objective-functions.xml +48 -10
  97. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-version-0-3-3-and-short-display-names.xml +48 -6
  98. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-version-0-3-5-and-measure-paths.xml +48 -8
  99. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-version-0-3-7-and-worker-init-final-scripts.0.xml +55 -6
  100. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-version-0-3-7-and-worker-init-final-scripts.xml +51 -8
  101. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-version-0-4-0-multiple-seed-models.xml +165 -0
  102. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel-version-0-4-0-pivot-test.xml +60 -0
  103. data/spec/reports/SPEC-OpenStudio-Analysis-Translator-Excel.xml +1 -1
  104. data/spec/reports/SPEC-OpenStudio-Analysis-Workflow.xml +7 -7
  105. data/spec/reports/SPEC-OpenStudio-Analysis-WorkflowStep.xml +8 -14
  106. data/spec/reports/SPEC-OpenStudio-Weather-Epw.xml +9 -0
  107. metadata +97 -50
  108. data/spec/files/export/analysis/small_seed.json +0 -593
@@ -10,7 +10,7 @@ class String
10
10
  end
11
11
 
12
12
  def snake_case
13
- gsub(' ', '_').downcase
13
+ return gsub(/\s/, '_').squeeze('_').downcase
14
14
  end
15
15
 
16
16
  def to_bool
@@ -0,0 +1,193 @@
1
+ ######################################################################
2
+ # Copyright (c) 2008-2013, Alliance for Sustainable Energy.
3
+ # All rights reserved.
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License as published by the Free Software Foundation; either
8
+ # version 2.1 of the License, or (at your option) any later version.
9
+ #
10
+ # This library is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with this library; if not, write to the Free Software
17
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ ######################################################################
19
+
20
+ # TODO: this should its own gem because this file may be useful in various workflows
21
+ module OpenStudio
22
+ module Weather
23
+ class Epw
24
+ attr_accessor :filename
25
+ attr_reader :city
26
+ attr_reader :state
27
+ attr_reader :country
28
+ attr_accessor :data_type
29
+ attr_reader :wmo
30
+ attr_reader :lat
31
+ attr_reader :lon
32
+ attr_reader :gmt
33
+ attr_reader :elevation
34
+ attr_accessor :data_period
35
+
36
+ # access to all the weather data in array of arrays
37
+ attr_reader :header_data
38
+ attr_accessor :weather_data
39
+
40
+ def initialize(filename)
41
+ @filename = filename
42
+ @city = ''
43
+ @state = ''
44
+ @country = ''
45
+ @data_type = ''
46
+ @wmo = ''
47
+ @lat = ''
48
+ @lon = ''
49
+ @gmt = ''
50
+ @elevation = ''
51
+ @valid = false
52
+
53
+ @header_data = []
54
+ @weather_data = []
55
+ process_header
56
+ end
57
+
58
+ def self.load(filename)
59
+ fail "EPW file does not exist: #{filename}" unless File.exist?(filename)
60
+ f = OpenStudio::Weather::Epw.new(filename)
61
+ end
62
+
63
+ def to_kml(xml_builder_obj, url)
64
+ xml_builder_obj.Placemark do
65
+ xml_builder_obj.name @city
66
+ xml_builder_obj.visibility '0'
67
+ xml_builder_obj.description do
68
+ xml_builder_obj.cdata!("<img src=\"kml/ep_header8.png\" width=180 align=right><br><table><tr><td colspan=\"2\">"\
69
+ "<b>#{@city}</b></href></td></tr>\n" +
70
+ # "<tr><td></td><td><b>Data Type</td></tr>\n"+
71
+ "<tr><td></td><td>WMO <b>#{@wmo}</b></td></tr>\n" +
72
+ # "<tr><td></td><td>E 3� 15' N 36� 43'</td></tr>\n"+
73
+ # "<tr><td></td><td><b>25</b> m</td></tr>\n"+
74
+ "<tr><td></td><td>Time Zone GMT <b>#{@gmt}</b> hours</td></tr>\n" +
75
+ # "<tr><td></td><td>ASHRAE Std 169 Climate Zone <b>4A - Mixed - Humid</b></td></tr>\n"+
76
+ # "<tr><td></td><td>99% Heating DB=<b>3.1</b>, 1% Cooling DB=<b>33.2</b></td></tr>\n"+
77
+ # "<tr><td></td><td>HDD18 <b>1019</b>, CDD10 <b>2849</b></td></tr>\n"+
78
+ "<tr><td></td><td>URL #{url}</td></tr></table>")
79
+ end
80
+ xml_builder_obj.styleUrl '#weatherlocation'
81
+ xml_builder_obj.Point do
82
+ xml_builder_obj.altitudeMode 'absolute'
83
+ xml_builder_obj.coordinates "#{@lon},#{@lat},#{elevation}"
84
+ end
85
+ end
86
+ end
87
+
88
+ def valid?
89
+ return @valid
90
+ end
91
+
92
+ def save_as(filename)
93
+ File.delete filename if File.exist? filename
94
+ FileUtils.mkdir_p(File.dirname(filename)) unless Dir.exist?(File.dirname(filename))
95
+
96
+ CSV.open(filename, 'wb') do |csv|
97
+ @header_data.each { |r| csv << r }
98
+ csv << [
99
+ 'DATA PERIODS', @data_period[:count], @data_period[:records_per_hour], @data_period[:name],
100
+ @data_period[:start_day_of_week], @data_period[:start_date], @data_period[:end_date]
101
+ ]
102
+ @weather_data.each { |r| csv << r }
103
+ end
104
+
105
+ true
106
+ end
107
+
108
+ # Append the weather data (after data periods) to the end of the weather file. This allows
109
+ # for the creation of multiyear weather files. Note that the date/order is not checked. It assumes
110
+ # that the data are being added at the end is the more recent data
111
+ #
112
+ # @param filename [String] Path to the file that will be appended
113
+ def append_weather_data(filename)
114
+ to_append = OpenStudio::Weather::Epw.load(filename)
115
+
116
+ prev_length = @weather_data.size
117
+ @weather_data += to_append.weather_data
118
+
119
+ prev_length + to_append.weather_data.size == @weather_data.size
120
+ end
121
+
122
+ def metadata_to_hash
123
+ {
124
+ city: @city,
125
+ state: @state,
126
+ country: @country,
127
+ data_type: @data_type,
128
+ wmo: @wmo,
129
+ latitude: @lat,
130
+ longitude: @lon,
131
+ elevation: @elevation
132
+ }
133
+ end
134
+
135
+ private
136
+
137
+ # initialize
138
+ def process_header
139
+ header_section = true
140
+ row_count = 0
141
+
142
+ CSV.foreach(@filename, 'r') do |row|
143
+ row_count += 1
144
+
145
+ if header_section
146
+ if row[0] =~ /data.periods/i
147
+ @data_period = {
148
+ count: row[1].to_i,
149
+ records_per_hour: row[2].to_i,
150
+ name: row[3],
151
+ start_day_of_week: row[4],
152
+ start_date: row[5],
153
+ end_date: row[6]
154
+ }
155
+
156
+ header_section = false
157
+
158
+ next
159
+ else
160
+ @header_data << row
161
+ end
162
+ else
163
+ @weather_data << row
164
+ end
165
+
166
+ # process only header row
167
+ # LOCATION,Adak Nas,AK,USA,TMY3,704540,51.88,-176.65,-10.0,5.0
168
+ if row_count == 1
169
+ @valid = true
170
+
171
+ @city = row[1].gsub('/', '-')
172
+ @state = row[2]
173
+ @country = row[3]
174
+ @data_type = row[4]
175
+ if @data_type =~ /TMY3/i
176
+ @data_type = 'TMY3'
177
+ elsif @data_type =~ /TMY2/i
178
+ @data_type = 'TMY2'
179
+ elsif @data_type =~ /TMY/i
180
+ @data_type = 'TMY'
181
+ end
182
+ @wmo = row[5]
183
+ @wmo.nil? ? @wmo = 'wmoundefined' : @wmo = @wmo.to_i
184
+ @lat = row[6].to_f
185
+ @lon = row[7].to_f
186
+ @gmt = row[8].to_f
187
+ @elevation = row[9].to_f
188
+ end
189
+ end
190
+ end
191
+ end
192
+ end
193
+ end
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,1298 @@
1
+ {
2
+ "workflow": [
3
+ {
4
+ "measure_definition_class_name": "ReduceLightingLoadsByPercentage",
5
+ "measure_definition_directory": "./measures/ReduceLightingLoadsByPercentage",
6
+ "measure_definition_display_name": "ReduceLightingLoadsByPercentage",
7
+ "measure_definition_uuid": "1f94e8e3-7a47-441b-ab9e-981ff411918c",
8
+ "measure_definition_version_uuid": "cfde8804-bb7b-4070-9c7e-5ac710db9611",
9
+ "measure_type": "RubyMeasure",
10
+ "arguments": [
11
+ {
12
+ "display_name": "Apply the Measure to a Specific Space Type or to the Entire Model.",
13
+ "display_name_short": "Apply the Measure to a Specific Space Type or to the Entire Model.",
14
+ "name": "space_type",
15
+ "value": "*Entire Building*",
16
+ "value_type": "choice"
17
+ },
18
+ {
19
+ "display_name": "Increase in Material and Installation Cost for Lighting per Floor Area (%).",
20
+ "display_name_short": "Increase in Material and Installation Cost for Lighting per Floor Area (%).",
21
+ "name": "material_and_installation_cost",
22
+ "value": 0.0,
23
+ "value_type": "double"
24
+ },
25
+ {
26
+ "display_name": "Increase in Demolition Costs for Lighting per Floor Area (%).",
27
+ "display_name_short": "Increase in Demolition Costs for Lighting per Floor Area (%).",
28
+ "name": "demolition_cost",
29
+ "value": 0.0,
30
+ "value_type": "double"
31
+ },
32
+ {
33
+ "display_name": "Years Until Costs Start (whole years).",
34
+ "display_name_short": "Years Until Costs Start (whole years).",
35
+ "name": "years_until_costs_start",
36
+ "value": 0,
37
+ "value_type": "integer"
38
+ },
39
+ {
40
+ "display_name": "Demolition Costs Occur During Initial Construction?",
41
+ "display_name_short": "Demolition Costs Occur During Initial Construction?",
42
+ "name": "demo_cost_initial_const",
43
+ "value": true,
44
+ "value_type": "bool"
45
+ },
46
+ {
47
+ "display_name": "Expected Life (whole years).",
48
+ "display_name_short": "Expected Life (whole years).",
49
+ "name": "expected_life",
50
+ "value": 15,
51
+ "value_type": "integer"
52
+ },
53
+ {
54
+ "display_name": "Increase O & M Costs for Lighting per Floor Area (%).",
55
+ "display_name_short": "Increase O & M Costs for Lighting per Floor Area (%).",
56
+ "name": "om_cost",
57
+ "value": 0.0,
58
+ "value_type": "double"
59
+ },
60
+ {
61
+ "display_name": "O & M Frequency (whole years).",
62
+ "display_name_short": "O & M Frequency (whole years).",
63
+ "name": "om_frequency",
64
+ "value": 1,
65
+ "value_type": "integer"
66
+ }
67
+ ],
68
+ "display_name": "Reduce Lighting Loads by Percentage",
69
+ "name": "reduce_lighting_loads_by_percentage",
70
+ "variables": [
71
+ {
72
+ "argument": {
73
+ "display_name": "Lighting Power Reduction",
74
+ "display_name_short": "Lighting Power Reduction",
75
+ "name": "lighting_power_reduction_percent",
76
+ "value_type": "double"
77
+ },
78
+ "display_name": "Lighting Power Reduction",
79
+ "display_name_short": "Lighting Power Reduction",
80
+ "maximum": 20.0,
81
+ "minimum": -20.0,
82
+ "relation_to_output": "",
83
+ "static_value": 0.0,
84
+ "uncertainty_description": {
85
+ "attributes": [
86
+ {
87
+ "name": "lower_bounds",
88
+ "value": -20.0
89
+ },
90
+ {
91
+ "name": "upper_bounds",
92
+ "value": 20.0
93
+ },
94
+ {
95
+ "name": "stddev",
96
+ "value": 6.666666666666667
97
+ },
98
+ {
99
+ "name": "delta_x",
100
+ "value": null
101
+ },
102
+ {
103
+ "name": "modes",
104
+ "value": -1.0
105
+ }
106
+ ],
107
+ "type": "triangle_uncertain"
108
+ },
109
+ "units": "",
110
+ "value_type": "double",
111
+ "variable": true,
112
+ "variable_type": "RubyContinuousVariable",
113
+ "uuid": "a36c2136-ced9-4d04-b18b-79aa1519fc47",
114
+ "version_uuid": "c1b21219-0c61-4fa2-9672-d98c9eaf8901"
115
+ }
116
+ ],
117
+ "workflow_index": 0,
118
+ "workflow_step_type": "Measure",
119
+ "uuid": "f5dbe06a-87c8-4617-8b2c-1ff2378dbf09",
120
+ "version_uuid": "3d7ffd00-26ff-4f49-a27c-f8ff4a53a842"
121
+ },
122
+ {
123
+ "measure_definition_class_name": "ReduceElectricEquipmentLoadsByPercentage",
124
+ "measure_definition_directory": "./measures/ExampleMeasure",
125
+ "measure_definition_display_name": "ReduceElectricEquipmentLoadsByPercentage",
126
+ "measure_definition_uuid": "8ccd35ad-2442-4861-9c8e-57248d1012a4",
127
+ "measure_definition_version_uuid": "9b299c5a-4fa0-4343-a5fc-27e806e4934e",
128
+ "measure_type": "RubyMeasure",
129
+ "arguments": [
130
+ {
131
+ "display_name": "Apply the Measure to a Specific Space Type or to the Entire Model.",
132
+ "display_name_short": "Apply the Measure to a Specific Space Type or to the Entire Model.",
133
+ "name": "space_type",
134
+ "value": "*Entire Building*",
135
+ "value_type": "choice"
136
+ },
137
+ {
138
+ "display_name": "Increase in Material and Installation Cost for Electric Equipment per Floor Area (%).",
139
+ "display_name_short": "Increase in Material and Installation Cost for Electric Equipment per Floor Area (%).",
140
+ "name": "material_and_installation_cost",
141
+ "value": 0.0,
142
+ "value_type": "double"
143
+ },
144
+ {
145
+ "display_name": "Increase in Demolition Costs for Electric Equipment per Floor Area (%).",
146
+ "display_name_short": "Increase in Demolition Costs for Electric Equipment per Floor Area (%).",
147
+ "name": "demolition_cost",
148
+ "value": 0.0,
149
+ "value_type": "double"
150
+ },
151
+ {
152
+ "display_name": "Years Until Costs Start (whole years).",
153
+ "display_name_short": "Years Until Costs Start (whole years).",
154
+ "name": "years_until_costs_start",
155
+ "value": 0,
156
+ "value_type": "integer"
157
+ },
158
+ {
159
+ "display_name": "Demolition Costs Occur During Initial Construction?",
160
+ "display_name_short": "Demolition Costs Occur During Initial Construction?",
161
+ "name": "demo_cost_initial_const",
162
+ "value": false,
163
+ "value_type": "bool"
164
+ },
165
+ {
166
+ "display_name": "Expected Life (whole years).",
167
+ "display_name_short": "Expected Life (whole years).",
168
+ "name": "expected_life",
169
+ "value": 15,
170
+ "value_type": "integer"
171
+ },
172
+ {
173
+ "display_name": "Increase O & M Costs for Electric Equipment per Floor Area (%).",
174
+ "display_name_short": "Increase O & M Costs for Electric Equipment per Floor Area (%).",
175
+ "name": "om_cost",
176
+ "value": 0.0,
177
+ "value_type": "double"
178
+ },
179
+ {
180
+ "display_name": "O & M Frequency (whole years).",
181
+ "display_name_short": "O & M Frequency (whole years).",
182
+ "name": "om_frequency",
183
+ "value": 1,
184
+ "value_type": "integer"
185
+ }
186
+ ],
187
+ "display_name": "Reduce Electric Equipment Loads by Percentage",
188
+ "name": "reduce_electric_equipment_loads_by_percentage",
189
+ "variables": [
190
+ {
191
+ "argument": {
192
+ "display_name": "Electric Equipment Power Reduction (%).",
193
+ "display_name_short": "Electric Equipment Power Reduction (%).",
194
+ "name": "elecequip_power_reduction_percent",
195
+ "value_type": "double"
196
+ },
197
+ "display_name": "Electric Equipment Power Reduction (%).",
198
+ "display_name_short": "Electric Equipment Power Reduction (%).",
199
+ "maximum": 30.0,
200
+ "minimum": -20.0,
201
+ "relation_to_output": "",
202
+ "static_value": 0.0,
203
+ "uncertainty_description": {
204
+ "attributes": [
205
+ {
206
+ "name": "lower_bounds",
207
+ "value": -20.0
208
+ },
209
+ {
210
+ "name": "upper_bounds",
211
+ "value": 30.0
212
+ },
213
+ {
214
+ "name": "stddev",
215
+ "value": 8.333333333333334
216
+ },
217
+ {
218
+ "name": "delta_x",
219
+ "value": null
220
+ },
221
+ {
222
+ "name": "modes",
223
+ "value": 0.0
224
+ }
225
+ ],
226
+ "type": "triangle_uncertain"
227
+ },
228
+ "units": "",
229
+ "value_type": "double",
230
+ "variable": true,
231
+ "variable_type": "RubyContinuousVariable",
232
+ "uuid": "0bcf3526-7376-43a7-ae5a-3855d9d11f25",
233
+ "version_uuid": "6d3807c3-e0a4-4953-89dd-8a289da4b025"
234
+ }
235
+ ],
236
+ "workflow_index": 1,
237
+ "workflow_step_type": "Measure",
238
+ "uuid": "e1e9a1e8-65df-426e-b9b1-f372660f0a28",
239
+ "version_uuid": "e0108fdb-2c6c-4471-8beb-e20a4dd17c1b"
240
+ },
241
+ {
242
+ "measure_definition_class_name": "ReduceSpaceInfiltrationByPercentage",
243
+ "measure_definition_directory": "./measures/ExampleMeasure",
244
+ "measure_definition_display_name": "ReduceSpaceInfiltrationByPercentage",
245
+ "measure_definition_uuid": "4d300b6b-f25e-4bc0-8965-5e4bd2e231dd",
246
+ "measure_definition_version_uuid": "c272ff8a-c277-456e-8e1a-afd4b6a447b7",
247
+ "measure_type": "RubyMeasure",
248
+ "arguments": [
249
+ {
250
+ "display_name": "Apply the Measure to a Specific Space Type or to the Entire Model.",
251
+ "display_name_short": "Apply the Measure to a Specific Space Type or to the Entire Model.",
252
+ "name": "space_type",
253
+ "value": "*Entire Building*",
254
+ "value_type": "choice"
255
+ },
256
+ {
257
+ "display_name": "Increase in Material and Installation Costs for Building per Affected Floor Area ($/ft^2).",
258
+ "display_name_short": "Increase in Material and Installation Costs for Building per Affected Floor Area ($/ft^2).",
259
+ "name": "material_and_installation_cost",
260
+ "value": 0.0,
261
+ "value_type": "double"
262
+ },
263
+ {
264
+ "display_name": "O & M Costs for Construction per Affected Floor Area ($/ft^2).",
265
+ "display_name_short": "O & M Costs for Construction per Affected Floor Area ($/ft^2).",
266
+ "name": "om_cost",
267
+ "value": 0.0,
268
+ "value_type": "double"
269
+ },
270
+ {
271
+ "display_name": "O & M Frequency (whole years).",
272
+ "display_name_short": "O & M Frequency (whole years).",
273
+ "name": "om_frequency",
274
+ "value": 1,
275
+ "value_type": "integer"
276
+ }
277
+ ],
278
+ "display_name": "ReduceSpaceInfiltrationByPercentage",
279
+ "name": "reducespaceinfiltrationbypercentage",
280
+ "variables": [
281
+ {
282
+ "argument": {
283
+ "display_name": "Space Infiltration Power Reduction",
284
+ "display_name_short": "Space Infiltration Power Reduction",
285
+ "name": "space_infiltration_reduction_percent",
286
+ "value_type": "double"
287
+ },
288
+ "display_name": "Space Infiltration Power Reduction",
289
+ "display_name_short": "Space Infiltration Power Reduction",
290
+ "maximum": 1.0,
291
+ "minimum": -100.0,
292
+ "relation_to_output": "",
293
+ "static_value": 0.0,
294
+ "uncertainty_description": {
295
+ "attributes": [
296
+ {
297
+ "name": "lower_bounds",
298
+ "value": -100.0
299
+ },
300
+ {
301
+ "name": "upper_bounds",
302
+ "value": 1.0
303
+ },
304
+ {
305
+ "name": "stddev",
306
+ "value": 16.833333333333332
307
+ },
308
+ {
309
+ "name": "delta_x",
310
+ "value": null
311
+ },
312
+ {
313
+ "name": "modes",
314
+ "value": -50.0
315
+ }
316
+ ],
317
+ "type": "uniform_uncertain"
318
+ },
319
+ "units": "",
320
+ "value_type": "double",
321
+ "variable": true,
322
+ "variable_type": "RubyContinuousVariable",
323
+ "uuid": "57db25e9-efa6-4b23-81b7-8843159a98ba",
324
+ "version_uuid": "3c3cdc0d-1f08-42e0-b599-3f02d79df10c"
325
+ }
326
+ ],
327
+ "workflow_index": 2,
328
+ "workflow_step_type": "Measure",
329
+ "uuid": "92649f03-347d-4d18-b80a-14ab54a42cbf",
330
+ "version_uuid": "23ab069d-cef9-48b3-a753-4c8e2d9d1bcf"
331
+ },
332
+ {
333
+ "measure_definition_class_name": "AdjustTheromstatSetpointsByDegrees",
334
+ "measure_definition_directory": "./measures/ExampleMeasure",
335
+ "measure_definition_display_name": "AdjustTheromstatSetpointsByDegrees",
336
+ "measure_definition_uuid": "98f04acd-6353-4812-bb41-87eb0cdef9aa",
337
+ "measure_definition_version_uuid": "74467764-bec4-4b43-bed1-eec9849781eb",
338
+ "measure_type": "RubyMeasure",
339
+ "arguments": [
340
+ {
341
+ "display_name": "Alter Design Day Thermostats?",
342
+ "display_name_short": "Alter Design Day Thermostats?",
343
+ "name": "alter_design_days",
344
+ "value": false,
345
+ "value_type": "bool"
346
+ }
347
+ ],
348
+ "display_name": "Adjust Thermostat Setpoints by Degrees",
349
+ "name": "adjust_thermostat_setpoints_by_degrees",
350
+ "variables": [
351
+ {
352
+ "argument": {
353
+ "display_name": "Degrees Fahrenheit to Adjust Cooling Setpoint By.",
354
+ "display_name_short": "Degrees Fahrenheit to Adjust Cooling Setpoint By.",
355
+ "name": "cooling_adjustment",
356
+ "value_type": "double"
357
+ },
358
+ "display_name": "Degrees Fahrenheit to Adjust Cooling Setpoint By.",
359
+ "display_name_short": "Degrees Fahrenheit to Adjust Cooling Setpoint By.",
360
+ "maximum": 2.0,
361
+ "minimum": -2.0,
362
+ "relation_to_output": "",
363
+ "static_value": 1.0,
364
+ "uncertainty_description": {
365
+ "attributes": [
366
+ {
367
+ "name": "lower_bounds",
368
+ "value": -2.0
369
+ },
370
+ {
371
+ "name": "upper_bounds",
372
+ "value": 2.0
373
+ },
374
+ {
375
+ "name": "stddev",
376
+ "value": 0.6666666666666666
377
+ },
378
+ {
379
+ "name": "delta_x",
380
+ "value": null
381
+ },
382
+ {
383
+ "name": "modes",
384
+ "value": 0.0
385
+ }
386
+ ],
387
+ "type": "uniform_uncertain"
388
+ },
389
+ "units": "",
390
+ "value_type": "double",
391
+ "variable": true,
392
+ "variable_type": "RubyContinuousVariable",
393
+ "uuid": "9fb8e6a8-d4e4-460a-81a8-7c82adaf3796",
394
+ "version_uuid": "89a84e90-5f3e-4296-80d0-c8d631d847c2"
395
+ },
396
+ {
397
+ "argument": {
398
+ "display_name": "Degrees Fahrenheit to Adjust heating Setpoint By.",
399
+ "display_name_short": "Degrees Fahrenheit to Adjust heating Setpoint By.",
400
+ "name": "heating_adjustment",
401
+ "value_type": "double"
402
+ },
403
+ "display_name": "Degrees Fahrenheit to Adjust heating Setpoint By.",
404
+ "display_name_short": "Degrees Fahrenheit to Adjust heating Setpoint By.",
405
+ "maximum": 2.0,
406
+ "minimum": -2.0,
407
+ "relation_to_output": "",
408
+ "static_value": -1.0,
409
+ "uncertainty_description": {
410
+ "attributes": [
411
+ {
412
+ "name": "lower_bounds",
413
+ "value": -2.0
414
+ },
415
+ {
416
+ "name": "upper_bounds",
417
+ "value": 2.0
418
+ },
419
+ {
420
+ "name": "stddev",
421
+ "value": 0.6666666666666666
422
+ },
423
+ {
424
+ "name": "delta_x",
425
+ "value": null
426
+ },
427
+ {
428
+ "name": "modes",
429
+ "value": 0.0
430
+ }
431
+ ],
432
+ "type": "uniform_uncertain"
433
+ },
434
+ "units": "",
435
+ "value_type": "double",
436
+ "variable": true,
437
+ "variable_type": "RubyContinuousVariable",
438
+ "uuid": "a27a863e-0358-4901-8128-5000f8f01fc1",
439
+ "version_uuid": "b873208d-fe8a-4e59-8e5f-24d72df55da7"
440
+ }
441
+ ],
442
+ "workflow_index": 3,
443
+ "workflow_step_type": "Measure",
444
+ "uuid": "a9c283b5-2629-46fd-ad84-ddcdf8f88623",
445
+ "version_uuid": "6bbd5bb2-ae7c-4870-b6c1-43f0b36949b8"
446
+ },
447
+ {
448
+ "measure_definition_class_name": "ReduceVentilationByPercentage",
449
+ "measure_definition_directory": "./measures/ExampleMeasure",
450
+ "measure_definition_display_name": "ReduceVentilationByPercentage",
451
+ "measure_definition_uuid": "02e71f48-0733-4310-8b62-03b32e5b6605",
452
+ "measure_definition_version_uuid": "b5e1b7a9-4913-4b22-bb89-0b1db97c5115",
453
+ "measure_type": "RubyMeasure",
454
+ "arguments": [
455
+ {
456
+ "display_name": "Apply the Measure to a Specific Space Type or to the Entire Model.",
457
+ "display_name_short": "Apply the Measure to a Specific Space Type or to the Entire Model.",
458
+ "name": "space_type",
459
+ "value": "*Entire Building*",
460
+ "value_type": "choice"
461
+ }
462
+ ],
463
+ "display_name": "Reduce Ventilation By Percentage",
464
+ "name": "reduce_ventilation_by_percentage",
465
+ "variables": [
466
+ {
467
+ "argument": {
468
+ "display_name": "Design Specification Outdoor Air Reduction (%).",
469
+ "display_name_short": "Design Specification Outdoor Air Reduction (%).",
470
+ "name": "design_spec_outdoor_air_reduction_percent",
471
+ "value_type": "double"
472
+ },
473
+ "display_name": "Design Specification Outdoor Air Reduction (%).",
474
+ "display_name_short": "Design Specification Outdoor Air Reduction (%).",
475
+ "maximum": 90.0,
476
+ "minimum": -90.0,
477
+ "relation_to_output": "",
478
+ "static_value": 0.0,
479
+ "uncertainty_description": {
480
+ "attributes": [
481
+ {
482
+ "name": "lower_bounds",
483
+ "value": -90.0
484
+ },
485
+ {
486
+ "name": "upper_bounds",
487
+ "value": 90.0
488
+ },
489
+ {
490
+ "name": "stddev",
491
+ "value": 30.0
492
+ },
493
+ {
494
+ "name": "delta_x",
495
+ "value": null
496
+ },
497
+ {
498
+ "name": "modes",
499
+ "value": -1.0
500
+ }
501
+ ],
502
+ "type": "triangle_uncertain"
503
+ },
504
+ "units": "",
505
+ "value_type": "double",
506
+ "variable": true,
507
+ "variable_type": "RubyContinuousVariable",
508
+ "uuid": "e4cf8bd4-28bd-4fd1-9a81-347323fc0ae7",
509
+ "version_uuid": "8ccd36a8-ae3a-4791-8947-92b3c625cb67"
510
+ }
511
+ ],
512
+ "workflow_index": 4,
513
+ "workflow_step_type": "Measure",
514
+ "uuid": "d4f5a0d2-17db-476d-8e58-4acc94be4275",
515
+ "version_uuid": "77afb120-1e8d-40d6-9bf6-58ef6dd0f647"
516
+ },
517
+ {
518
+ "measure_definition_class_name": "EnableEconomizerControl",
519
+ "measure_definition_directory": "./measures/ExampleMeasure",
520
+ "measure_definition_display_name": "EnableEconomizerControl",
521
+ "measure_definition_uuid": "efba115e-2fc9-46f2-bb4b-feac58a774a9",
522
+ "measure_definition_version_uuid": "aafc0236-a519-4100-b1d4-2e43bc1ed5eb",
523
+ "measure_type": "RubyMeasure",
524
+ "arguments": [
525
+ {
526
+ "display_name": "Choose an Air Loop to Alter.",
527
+ "display_name_short": "Choose an Air Loop to Alter.",
528
+ "name": "object",
529
+ "value": "*All Air Loops*",
530
+ "value_type": "choice"
531
+ },
532
+ {
533
+ "display_name": "Economizer Control Type.",
534
+ "display_name_short": "Economizer Control Type.",
535
+ "name": "economizer_type",
536
+ "value": "FixedDryBulb",
537
+ "value_type": "choice"
538
+ },
539
+ {
540
+ "display_name": "Economizer Maximum Enthalpy (Btu/lb).",
541
+ "display_name_short": "Economizer Maximum Enthalpy (Btu/lb).",
542
+ "name": "econoMaxEnthalpy",
543
+ "value": 28.0,
544
+ "value_type": "double"
545
+ },
546
+ {
547
+ "display_name": "Economizer Maximum Limit Dewpoint Temperature (F).",
548
+ "display_name_short": "Economizer Maximum Limit Dewpoint Temperature (F).",
549
+ "name": "econoMaxDewpointTemp",
550
+ "value": 55.0,
551
+ "value_type": "double"
552
+ },
553
+ {
554
+ "display_name": "Economizer Minimum Limit Dry-Bulb Temperature (F).",
555
+ "display_name_short": "Economizer Minimum Limit Dry-Bulb Temperature (F).",
556
+ "name": "econoMinDryBulbTemp",
557
+ "value": -148.0,
558
+ "value_type": "double"
559
+ },
560
+ {
561
+ "display_name": "Remove Baseline Costs From Effected AirLoopHVACOutdoorAirSystems?",
562
+ "display_name_short": "Remove Baseline Costs From Effected AirLoopHVACOutdoorAirSystems?",
563
+ "name": "remove_costs",
564
+ "value": false,
565
+ "value_type": "bool"
566
+ },
567
+ {
568
+ "display_name": "Material and Installation Costs per Air Loop to Enable Economizer ($).",
569
+ "display_name_short": "Material and Installation Costs per Air Loop to Enable Economizer ($).",
570
+ "name": "material_cost",
571
+ "value": 0.0,
572
+ "value_type": "double"
573
+ },
574
+ {
575
+ "display_name": "Demolition Costs per Air Loop to Enable Economizer ($).",
576
+ "display_name_short": "Demolition Costs per Air Loop to Enable Economizer ($).",
577
+ "name": "demolition_cost",
578
+ "value": 0.0,
579
+ "value_type": "double"
580
+ },
581
+ {
582
+ "display_name": "Years Until Costs Start (whole years).",
583
+ "display_name_short": "Years Until Costs Start (whole years).",
584
+ "name": "years_until_costs_start",
585
+ "value": 0,
586
+ "value_type": "integer"
587
+ },
588
+ {
589
+ "display_name": "Demolition Costs Occur During Initial Construction?",
590
+ "display_name_short": "Demolition Costs Occur During Initial Construction?",
591
+ "name": "demo_cost_initial_const",
592
+ "value": false,
593
+ "value_type": "bool"
594
+ },
595
+ {
596
+ "display_name": "Expected Life (whole years).",
597
+ "display_name_short": "Expected Life (whole years).",
598
+ "name": "expected_life",
599
+ "value": 20,
600
+ "value_type": "integer"
601
+ },
602
+ {
603
+ "display_name": "O & M Costs per Air Loop for Economizer ($).",
604
+ "display_name_short": "O & M Costs per Air Loop for Economizer ($).",
605
+ "name": "om_cost",
606
+ "value": 0.0,
607
+ "value_type": "double"
608
+ },
609
+ {
610
+ "display_name": "O & M Frequency (whole years).",
611
+ "display_name_short": "O & M Frequency (whole years).",
612
+ "name": "om_frequency",
613
+ "value": 1,
614
+ "value_type": "integer"
615
+ }
616
+ ],
617
+ "display_name": "Enable Economizer Control",
618
+ "name": "enable_economizer_control",
619
+ "variables": [
620
+ {
621
+ "argument": {
622
+ "display_name": "Economizer Maximum Limit Dry-Bulb Temperature (F).",
623
+ "display_name_short": "Economizer Maximum Limit Dry-Bulb Temperature (F).",
624
+ "name": "econoMaxDryBulbTemp",
625
+ "value_type": "double"
626
+ },
627
+ "display_name": "Economizer Maximum Limit Dry-Bulb Temperature (F).",
628
+ "display_name_short": "Economizer Maximum Limit Dry-Bulb Temperature (F).",
629
+ "maximum": 80.0,
630
+ "minimum": 76.0,
631
+ "relation_to_output": "",
632
+ "static_value": 79.0,
633
+ "uncertainty_description": {
634
+ "attributes": [
635
+ {
636
+ "name": "lower_bounds",
637
+ "value": 76.0
638
+ },
639
+ {
640
+ "name": "upper_bounds",
641
+ "value": 80.0
642
+ },
643
+ {
644
+ "name": "stddev",
645
+ "value": 0.6666666666666666
646
+ },
647
+ {
648
+ "name": "delta_x",
649
+ "value": null
650
+ },
651
+ {
652
+ "name": "modes",
653
+ "value": 78.0
654
+ }
655
+ ],
656
+ "type": "triangle_uncertain"
657
+ },
658
+ "units": "",
659
+ "value_type": "double",
660
+ "variable": true,
661
+ "variable_type": "RubyContinuousVariable",
662
+ "uuid": "c4b775dd-2b6b-4242-8e3c-274344153377",
663
+ "version_uuid": "b52d2194-b65b-456b-96e3-037c8fa89d99"
664
+ }
665
+ ],
666
+ "workflow_index": 5,
667
+ "workflow_step_type": "Measure",
668
+ "uuid": "2b596bed-b3f9-42ec-b2b6-3fe380ab63b9",
669
+ "version_uuid": "85f13786-7d25-4dcd-bb56-c45b302e9ef4"
670
+ },
671
+ {
672
+ "measure_definition_class_name": "SetBoilerThermalEfficiency",
673
+ "measure_definition_directory": "./measures/ExampleMeasure",
674
+ "measure_definition_display_name": "SetBoilerThermalEfficiency",
675
+ "measure_definition_uuid": "ee772275-3fe4-4033-a77f-1f0e25ed0c50",
676
+ "measure_definition_version_uuid": "8a76a465-1f38-4557-a0e7-1f5bc82b8016",
677
+ "measure_type": "RubyMeasure",
678
+ "arguments": [
679
+ {
680
+ "display_name": "Apply the measure to",
681
+ "display_name_short": "Apply the measure to",
682
+ "name": "boiler_widget",
683
+ "value": "*All boilers*",
684
+ "value_type": "choice"
685
+ },
686
+ {
687
+ "display_name": "Option 1, set boiler nominal thermal efficiency to a user defined value",
688
+ "display_name_short": "Option 1, set boiler nominal thermal efficiency to a user defined value",
689
+ "name": "input_option_manual",
690
+ "value": true,
691
+ "value_type": "bool"
692
+ },
693
+ {
694
+ "display_name": "Option 2, set boiler nominal thermal efficiency based on ASHRAE Standard 90.1 requirement",
695
+ "display_name_short": "Option 2, set boiler nominal thermal efficiency based on ASHRAE Standard 90.1 requirement",
696
+ "name": "input_option_standard",
697
+ "value": false,
698
+ "value_type": "bool"
699
+ },
700
+ {
701
+ "display_name": "Boiler nominal capacity [W]",
702
+ "display_name_short": "Boiler nominal capacity [W]",
703
+ "name": "nominal_capacity",
704
+ "value": 0.0,
705
+ "value_type": "double"
706
+ },
707
+ {
708
+ "display_name": "Fuel type",
709
+ "display_name_short": "Fuel type",
710
+ "name": "fuel_type_widget",
711
+ "value": "0.0",
712
+ "value_type": "choice"
713
+ },
714
+ {
715
+ "display_name": "ASHRAE Standards 90.1",
716
+ "display_name_short": "ASHRAE Standards 90.1",
717
+ "name": "standards_widget",
718
+ "value": "0.0",
719
+ "value_type": "choice"
720
+ }
721
+ ],
722
+ "display_name": "Set Boiler Thermal Efficiency",
723
+ "name": "set_boiler_thermal_efficiency",
724
+ "variables": [
725
+ {
726
+ "argument": {
727
+ "display_name": "Boiler nominal thermal efficiency (between 0 and 1)",
728
+ "display_name_short": "Boiler nominal thermal efficiency (between 0 and 1)",
729
+ "name": "boiler_thermal_efficiency",
730
+ "value_type": "double"
731
+ },
732
+ "display_name": "Boiler nominal thermal efficiency (between 0 and 1)",
733
+ "display_name_short": "Boiler nominal thermal efficiency (between 0 and 1)",
734
+ "maximum": 0.9,
735
+ "minimum": 0.5,
736
+ "relation_to_output": "",
737
+ "static_value": 0.8,
738
+ "uncertainty_description": {
739
+ "attributes": [
740
+ {
741
+ "name": "lower_bounds",
742
+ "value": 0.5
743
+ },
744
+ {
745
+ "name": "upper_bounds",
746
+ "value": 0.9
747
+ },
748
+ {
749
+ "name": "stddev",
750
+ "value": 0.06666666666666667
751
+ },
752
+ {
753
+ "name": "delta_x",
754
+ "value": null
755
+ },
756
+ {
757
+ "name": "modes",
758
+ "value": 0.75
759
+ }
760
+ ],
761
+ "type": "triangle_uncertain"
762
+ },
763
+ "units": "",
764
+ "value_type": "double",
765
+ "variable": true,
766
+ "variable_type": "RubyContinuousVariable",
767
+ "uuid": "4b76bd7c-dd0b-47d3-a4c3-43944b6b1075",
768
+ "version_uuid": "886d3b65-b08b-4e8f-9066-aa3f5fe4f15c"
769
+ }
770
+ ],
771
+ "workflow_index": 6,
772
+ "workflow_step_type": "Measure",
773
+ "uuid": "a194ec5f-8f0d-4ce0-9083-0569a9065f0f",
774
+ "version_uuid": "651daad9-8840-4d72-af65-f2f8b4ee444a"
775
+ },
776
+ {
777
+ "measure_definition_class_name": "IncreaseInsulationRValueForExteriorWalls",
778
+ "measure_definition_directory": "./measures/ExampleMeasure",
779
+ "measure_definition_display_name": "IncreaseInsulationRValueForExteriorWalls",
780
+ "measure_definition_uuid": "de84aba1-5f75-4438-ae03-08ffd9c12954",
781
+ "measure_definition_version_uuid": "8bf5a2de-c73a-4b5f-80d3-41715ef2f9c4",
782
+ "measure_type": "RubyMeasure",
783
+ "arguments": [
784
+ {
785
+ "display_name": "Allow both increase and decrease in R-value to reach requested target?",
786
+ "display_name_short": "Allow both increase and decrease in R-value to reach requested target?",
787
+ "name": "allow_reduction",
788
+ "value": true,
789
+ "value_type": "bool"
790
+ },
791
+ {
792
+ "display_name": "Increase in Material and Installation Costs for Construction per Area Used ($/ft^2).",
793
+ "display_name_short": "Increase in Material and Installation Costs for Construction per Area Used ($/ft^2).",
794
+ "name": "material_cost_increase_ip",
795
+ "value": 0.0,
796
+ "value_type": "double"
797
+ },
798
+ {
799
+ "display_name": "One Time Retrofit Cost to Add Insulation to Construction ($/ft^2).",
800
+ "display_name_short": "One Time Retrofit Cost to Add Insulation to Construction ($/ft^2).",
801
+ "name": "one_time_retrofit_cost_ip",
802
+ "value": 0.0,
803
+ "value_type": "double"
804
+ },
805
+ {
806
+ "display_name": "Year to Incur One Time Retrofit Cost (whole years).",
807
+ "display_name_short": "Year to Incur One Time Retrofit Cost (whole years).",
808
+ "name": "years_until_retrofit_cost",
809
+ "value": 0,
810
+ "value_type": "integer"
811
+ }
812
+ ],
813
+ "display_name": "Set R-value of Insulation for Exterior Walls to a Specific Value",
814
+ "name": "set_r_value_of_insulation_for_exterior_walls_to_a_specific_value",
815
+ "variables": [
816
+ {
817
+ "argument": {
818
+ "display_name": "Insulation R-value (ft^2*h*R/Btu).",
819
+ "display_name_short": "Insulation R-value (ft^2*h*R/Btu).",
820
+ "name": "r_value",
821
+ "value_type": "double"
822
+ },
823
+ "display_name": "Insulation R-value (ft^2*h*R/Btu).",
824
+ "display_name_short": "Insulation R-value (ft^2*h*R/Btu).",
825
+ "maximum": 5.0,
826
+ "minimum": 1.0,
827
+ "relation_to_output": "",
828
+ "static_value": 5.0,
829
+ "uncertainty_description": {
830
+ "attributes": [
831
+ {
832
+ "name": "lower_bounds",
833
+ "value": 1.0
834
+ },
835
+ {
836
+ "name": "upper_bounds",
837
+ "value": 5.0
838
+ },
839
+ {
840
+ "name": "stddev",
841
+ "value": 0.6666666666666666
842
+ },
843
+ {
844
+ "name": "delta_x",
845
+ "value": null
846
+ },
847
+ {
848
+ "name": "modes",
849
+ "value": 2.5
850
+ }
851
+ ],
852
+ "type": "triangle_uncertain"
853
+ },
854
+ "units": "",
855
+ "value_type": "double",
856
+ "variable": true,
857
+ "variable_type": "RubyContinuousVariable",
858
+ "uuid": "539774fe-5468-4517-b0a5-dcf3fb524e0c",
859
+ "version_uuid": "47dde188-b93d-4d77-a806-546f47ef11e6"
860
+ }
861
+ ],
862
+ "workflow_index": 7,
863
+ "workflow_step_type": "Measure",
864
+ "uuid": "729b7975-6dd2-4a53-8ca5-373247a9bcdd",
865
+ "version_uuid": "30a3f0a4-1dd0-4ea0-9e56-7989230c7390"
866
+ },
867
+ {
868
+ "measure_definition_class_name": "SetChillerCOP",
869
+ "measure_definition_directory": "./measures/ExampleMeasure",
870
+ "measure_definition_display_name": "SetChillerCOP",
871
+ "measure_definition_uuid": "02c5f4d2-58b8-4723-b55a-dc74efab6b7c",
872
+ "measure_definition_version_uuid": "b4cf324d-af0d-4923-81ec-8808910be926",
873
+ "measure_type": "RubyMeasure",
874
+ "arguments": [
875
+ {
876
+ "display_name": "Apply the measure to",
877
+ "display_name_short": "Apply the measure to",
878
+ "name": "chiller_widget",
879
+ "value": "*All chillers*",
880
+ "value_type": "choice"
881
+ }
882
+ ],
883
+ "display_name": "SetChillerCOP",
884
+ "name": "setchillercop",
885
+ "variables": [
886
+ {
887
+ "argument": {
888
+ "display_name": "Chiller Rated COP (more than 0)",
889
+ "display_name_short": "Chiller Rated COP (more than 0)",
890
+ "name": "chiller_thermal_efficiency",
891
+ "value_type": "double"
892
+ },
893
+ "display_name": "Chiller Rated COP (more than 0)",
894
+ "display_name_short": "Chiller Rated COP (more than 0)",
895
+ "maximum": 5.5,
896
+ "minimum": 2.5,
897
+ "relation_to_output": "",
898
+ "static_value": 3.0,
899
+ "uncertainty_description": {
900
+ "attributes": [
901
+ {
902
+ "name": "lower_bounds",
903
+ "value": 2.5
904
+ },
905
+ {
906
+ "name": "upper_bounds",
907
+ "value": 5.5
908
+ },
909
+ {
910
+ "name": "stddev",
911
+ "value": 0.5
912
+ },
913
+ {
914
+ "name": "delta_x",
915
+ "value": null
916
+ },
917
+ {
918
+ "name": "modes",
919
+ "value": 3.5
920
+ }
921
+ ],
922
+ "type": "triangle_uncertain"
923
+ },
924
+ "units": "",
925
+ "value_type": "double",
926
+ "variable": true,
927
+ "variable_type": "RubyContinuousVariable",
928
+ "uuid": "c4f7e5be-4893-434a-95f5-494d5b0bd927",
929
+ "version_uuid": "c636f5ad-6f1d-4cb1-b1e7-3585125cda00"
930
+ }
931
+ ],
932
+ "workflow_index": 8,
933
+ "workflow_step_type": "Measure",
934
+ "uuid": "6ad2752c-56b9-4342-9d11-9fb8123dc686",
935
+ "version_uuid": "ed80b633-4a56-4136-81ef-6bbf897a4343"
936
+ },
937
+ {
938
+ "measure_definition_class_name": "SetHeatingandCoolingSizingFactors",
939
+ "measure_definition_directory": "./measures/ExampleMeasure",
940
+ "measure_definition_display_name": "SetHeatingandCoolingSizingFactors",
941
+ "measure_definition_uuid": "3b5adf5e-86b2-427d-b6af-f169c1ddf6bd",
942
+ "measure_definition_version_uuid": "9628e7a3-16f8-4520-88f5-ce53f11e93c6",
943
+ "measure_type": "RubyMeasure",
944
+ "arguments": [
945
+ ],
946
+ "display_name": "Set Heating and Cooling Sizing Factors",
947
+ "name": "set_heating_and_cooling_sizing_factors",
948
+ "variables": [
949
+ {
950
+ "argument": {
951
+ "display_name": "Heating Sizing Factor (eg 1.25 = 125% of required heating capacity.",
952
+ "display_name_short": "Heating Sizing Factor (eg 1.25 = 125% of required heating capacity.",
953
+ "name": "htg_sz_factor",
954
+ "value_type": "double"
955
+ },
956
+ "display_name": "Heating Sizing Factor (eg 1.25 = 125% of required heating capacity.",
957
+ "display_name_short": "Heating Sizing Factor (eg 1.25 = 125% of required heating capacity.",
958
+ "maximum": 1.5,
959
+ "minimum": 1.0,
960
+ "relation_to_output": "",
961
+ "static_value": 1.25,
962
+ "uncertainty_description": {
963
+ "attributes": [
964
+ {
965
+ "name": "lower_bounds",
966
+ "value": 1.0
967
+ },
968
+ {
969
+ "name": "upper_bounds",
970
+ "value": 1.5
971
+ },
972
+ {
973
+ "name": "stddev",
974
+ "value": 0.08333333333333333
975
+ },
976
+ {
977
+ "name": "delta_x",
978
+ "value": null
979
+ },
980
+ {
981
+ "name": "modes",
982
+ "value": 1.25
983
+ }
984
+ ],
985
+ "type": "triangle_uncertain"
986
+ },
987
+ "units": "",
988
+ "value_type": "double",
989
+ "variable": true,
990
+ "variable_type": "RubyContinuousVariable",
991
+ "uuid": "640893ee-47f1-41dc-8766-83eeef8513ff",
992
+ "version_uuid": "787a6e37-911d-4266-ba20-33b5bc5b793f"
993
+ },
994
+ {
995
+ "argument": {
996
+ "display_name": "Coolinig Sizing Factor (eg 1.15 = 115% of required cooling capacity.",
997
+ "display_name_short": "Coolinig Sizing Factor (eg 1.15 = 115% of required cooling capacity.",
998
+ "name": "clg_sz_factor",
999
+ "value_type": "double"
1000
+ },
1001
+ "display_name": "Coolinig Sizing Factor (eg 1.15 = 115% of required cooling capacity.",
1002
+ "display_name_short": "Coolinig Sizing Factor (eg 1.15 = 115% of required cooling capacity.",
1003
+ "maximum": 1.5,
1004
+ "minimum": 1.0,
1005
+ "relation_to_output": "",
1006
+ "static_value": 1.15,
1007
+ "uncertainty_description": {
1008
+ "attributes": [
1009
+ {
1010
+ "name": "lower_bounds",
1011
+ "value": 1.0
1012
+ },
1013
+ {
1014
+ "name": "upper_bounds",
1015
+ "value": 1.5
1016
+ },
1017
+ {
1018
+ "name": "stddev",
1019
+ "value": 0.08333333333333333
1020
+ },
1021
+ {
1022
+ "name": "delta_x",
1023
+ "value": null
1024
+ },
1025
+ {
1026
+ "name": "modes",
1027
+ "value": 1.15
1028
+ }
1029
+ ],
1030
+ "type": "triangle_uncertain"
1031
+ },
1032
+ "units": "",
1033
+ "value_type": "double",
1034
+ "variable": true,
1035
+ "variable_type": "RubyContinuousVariable",
1036
+ "uuid": "0656bd9f-c3c7-44e4-85c4-c6b1f84c1f60",
1037
+ "version_uuid": "080d3152-31b0-4c63-b0cd-60f525a31dd8"
1038
+ }
1039
+ ],
1040
+ "workflow_index": 9,
1041
+ "workflow_step_type": "Measure",
1042
+ "uuid": "f30a1787-d861-4ba2-9a15-1dbac1133806",
1043
+ "version_uuid": "1aded70c-811b-4eb0-ba5a-88f63fa76ece"
1044
+ },
1045
+ {
1046
+ "measure_definition_class_name": "SetChilledWaterLoopTemperature",
1047
+ "measure_definition_directory": "./measures/ExampleMeasure",
1048
+ "measure_definition_display_name": "SetChilledWaterLoopTemperature",
1049
+ "measure_definition_uuid": "fae758d9-7fea-42ab-ae7a-0a5fc00e9295",
1050
+ "measure_definition_version_uuid": "b9478c40-19e1-4a2a-90f3-0bd881ebea4c",
1051
+ "measure_type": "RubyMeasure",
1052
+ "arguments": [
1053
+ ],
1054
+ "display_name": "Set Chilled Water Loop Temperature",
1055
+ "name": "set_chilled_water_loop_temperature",
1056
+ "variables": [
1057
+ {
1058
+ "argument": {
1059
+ "display_name": "Desired chilled water setpoint (F)",
1060
+ "display_name_short": "Desired chilled water setpoint (F)",
1061
+ "name": "cw_temp_f",
1062
+ "value_type": "double"
1063
+ },
1064
+ "display_name": "Desired chilled water setpoint (F)",
1065
+ "display_name_short": "Desired chilled water setpoint (F)",
1066
+ "maximum": 46.0,
1067
+ "minimum": 42.0,
1068
+ "relation_to_output": "",
1069
+ "static_value": 44.0,
1070
+ "uncertainty_description": {
1071
+ "attributes": [
1072
+ {
1073
+ "name": "lower_bounds",
1074
+ "value": 42.0
1075
+ },
1076
+ {
1077
+ "name": "upper_bounds",
1078
+ "value": 46.0
1079
+ },
1080
+ {
1081
+ "name": "stddev",
1082
+ "value": 0.6666666666666666
1083
+ },
1084
+ {
1085
+ "name": "delta_x",
1086
+ "value": null
1087
+ },
1088
+ {
1089
+ "name": "modes",
1090
+ "value": 44.0
1091
+ }
1092
+ ],
1093
+ "type": "triangle_uncertain"
1094
+ },
1095
+ "units": "",
1096
+ "value_type": "double",
1097
+ "variable": true,
1098
+ "variable_type": "RubyContinuousVariable",
1099
+ "uuid": "d5a838ba-6371-4402-96cf-e0aefe42083a",
1100
+ "version_uuid": "6ee18afc-92c9-485a-861e-5e37a897a085"
1101
+ }
1102
+ ],
1103
+ "workflow_index": 10,
1104
+ "workflow_step_type": "Measure",
1105
+ "uuid": "38263a9a-25dd-4d3f-bb70-8fcb9d0d0d71",
1106
+ "version_uuid": "427b4a13-bb80-499e-af8a-d9ec0623bd37"
1107
+ },
1108
+ {
1109
+ "measure_definition_class_name": "SetHotWaterLoopTemperature",
1110
+ "measure_definition_directory": "./measures/ExampleMeasure",
1111
+ "measure_definition_display_name": "SetHotWaterLoopTemperature",
1112
+ "measure_definition_uuid": "a97acd58-bf40-41e7-937b-0967dd118a00",
1113
+ "measure_definition_version_uuid": "1a80c759-1ec0-4f5f-ae15-d5c53e08336c",
1114
+ "measure_type": "RubyMeasure",
1115
+ "arguments": [
1116
+ ],
1117
+ "display_name": "Set Hot Water Loop Temperature",
1118
+ "name": "set_hot_water_loop_temperature",
1119
+ "variables": [
1120
+ {
1121
+ "argument": {
1122
+ "display_name": "Desired hot water setpoint (F)",
1123
+ "display_name_short": "Desired hot water setpoint (F)",
1124
+ "name": "hw_temp_f",
1125
+ "value_type": "double"
1126
+ },
1127
+ "display_name": "Desired hot water setpoint (F)",
1128
+ "display_name_short": "Desired hot water setpoint (F)",
1129
+ "maximum": 122.0,
1130
+ "minimum": 118.0,
1131
+ "relation_to_output": "",
1132
+ "static_value": 120.0,
1133
+ "uncertainty_description": {
1134
+ "attributes": [
1135
+ {
1136
+ "name": "lower_bounds",
1137
+ "value": 118.0
1138
+ },
1139
+ {
1140
+ "name": "upper_bounds",
1141
+ "value": 122.0
1142
+ },
1143
+ {
1144
+ "name": "stddev",
1145
+ "value": 0.6666666666666666
1146
+ },
1147
+ {
1148
+ "name": "delta_x",
1149
+ "value": null
1150
+ },
1151
+ {
1152
+ "name": "modes",
1153
+ "value": 120.0
1154
+ }
1155
+ ],
1156
+ "type": "triangle_uncertain"
1157
+ },
1158
+ "units": "",
1159
+ "value_type": "double",
1160
+ "variable": true,
1161
+ "variable_type": "RubyContinuousVariable",
1162
+ "uuid": "f2c42cf6-5355-40d9-8a91-e2da0e4b43c7",
1163
+ "version_uuid": "fece63c3-a96d-4258-8bcd-dee0778b5031"
1164
+ }
1165
+ ],
1166
+ "workflow_index": 11,
1167
+ "workflow_step_type": "Measure",
1168
+ "uuid": "17bf0aab-a38f-4a1c-99ea-bce47bb6a0d1",
1169
+ "version_uuid": "d63d1cfe-79ce-40b9-af92-84dcea33d5f2"
1170
+ },
1171
+ {
1172
+ "measure_definition_class_name": "SetMinimumVAVTerminalFlowFraction",
1173
+ "measure_definition_directory": "./measures/ExampleMeasure",
1174
+ "measure_definition_display_name": "SetMinimumVAVTerminalFlowFraction",
1175
+ "measure_definition_uuid": "42c4422c-512b-4e69-8f0f-c829eb1f16e0",
1176
+ "measure_definition_version_uuid": "e134d04e-76f6-490c-bc5b-4eb1d26ecc25",
1177
+ "measure_type": "RubyMeasure",
1178
+ "arguments": [
1179
+ ],
1180
+ "display_name": "Set Minimum VAV Terminal Flow Fraction",
1181
+ "name": "set_minimum_vav_terminal_flow_fraction",
1182
+ "variables": [
1183
+ {
1184
+ "argument": {
1185
+ "display_name": "Minimum VAV Terminal Flow Fraction (%)",
1186
+ "display_name_short": "Minimum VAV Terminal Flow Fraction (%)",
1187
+ "name": "min_vav_frac",
1188
+ "value_type": "double"
1189
+ },
1190
+ "display_name": "Minimum VAV Terminal Flow Fraction (%)",
1191
+ "display_name_short": "Minimum VAV Terminal Flow Fraction (%)",
1192
+ "maximum": 60.0,
1193
+ "minimum": 0.0,
1194
+ "relation_to_output": "",
1195
+ "static_value": 30.0,
1196
+ "uncertainty_description": {
1197
+ "attributes": [
1198
+ {
1199
+ "name": "lower_bounds",
1200
+ "value": 0.0
1201
+ },
1202
+ {
1203
+ "name": "upper_bounds",
1204
+ "value": 60.0
1205
+ },
1206
+ {
1207
+ "name": "stddev",
1208
+ "value": 10.0
1209
+ },
1210
+ {
1211
+ "name": "delta_x",
1212
+ "value": null
1213
+ },
1214
+ {
1215
+ "name": "modes",
1216
+ "value": 30.0
1217
+ }
1218
+ ],
1219
+ "type": "triangle_uncertain"
1220
+ },
1221
+ "units": "",
1222
+ "value_type": "double",
1223
+ "variable": true,
1224
+ "variable_type": "RubyContinuousVariable",
1225
+ "uuid": "807a8596-1aef-46b0-8d40-41d443bde9bf",
1226
+ "version_uuid": "3bd36020-161a-4e8f-a799-bf5f75dfe4b5"
1227
+ }
1228
+ ],
1229
+ "workflow_index": 12,
1230
+ "workflow_step_type": "Measure",
1231
+ "uuid": "d44e1c1c-be8c-4728-b055-3a9c8a4de558",
1232
+ "version_uuid": "6d8c8536-95cf-4483-9702-c439bfee173c"
1233
+ },
1234
+ {
1235
+ "measure_definition_class_name": "ModifyEnergyPlusFanVariableVolumeObjects",
1236
+ "measure_definition_directory": "./measures/ExampleMeasure",
1237
+ "measure_definition_display_name": "ModifyEnergyPlusFanVariableVolumeObjects",
1238
+ "measure_definition_uuid": "9fdfea68-43ca-44c0-a97c-a27db07f6435",
1239
+ "measure_definition_version_uuid": "cd876ad7-5cd0-4932-9340-206aefef44fa",
1240
+ "measure_type": "EnergyPlusMeasure",
1241
+ "arguments": [
1242
+ ],
1243
+ "display_name": "Modify EnergyPlus Fan Varaible Volume Objects",
1244
+ "name": "modify_energyplus_fan_varaible_volume_objects",
1245
+ "variables": [
1246
+ {
1247
+ "argument": {
1248
+ "display_name": "Pressure Rise (Pa).",
1249
+ "display_name_short": "Pressure Rise (Pa).",
1250
+ "name": "pressureRise",
1251
+ "value_type": "double"
1252
+ },
1253
+ "display_name": "Pressure Rise (Pa).",
1254
+ "display_name_short": "Pressure Rise (Pa).",
1255
+ "maximum": 700.0,
1256
+ "minimum": 400.0,
1257
+ "relation_to_output": "",
1258
+ "static_value": 500.0,
1259
+ "uncertainty_description": {
1260
+ "attributes": [
1261
+ {
1262
+ "name": "lower_bounds",
1263
+ "value": 400.0
1264
+ },
1265
+ {
1266
+ "name": "upper_bounds",
1267
+ "value": 700.0
1268
+ },
1269
+ {
1270
+ "name": "stddev",
1271
+ "value": 50.0
1272
+ },
1273
+ {
1274
+ "name": "delta_x",
1275
+ "value": 5.0
1276
+ },
1277
+ {
1278
+ "name": "modes",
1279
+ "value": 500.0
1280
+ }
1281
+ ],
1282
+ "type": "triangle_uncertain"
1283
+ },
1284
+ "units": "",
1285
+ "value_type": "double",
1286
+ "variable": true,
1287
+ "variable_type": "RubyContinuousVariable",
1288
+ "uuid": "31ac4d3b-97ea-4aab-bae4-b88bf73cdebf",
1289
+ "version_uuid": "4dbca1d1-09f0-4808-b652-fc5803c3b5df"
1290
+ }
1291
+ ],
1292
+ "workflow_index": 13,
1293
+ "workflow_step_type": "Measure",
1294
+ "uuid": "d92eca35-ca8e-464f-a2bc-842dfb2fecc6",
1295
+ "version_uuid": "480be4ef-bff8-49ff-98b3-2eeac8c0099a"
1296
+ }
1297
+ ]
1298
+ }