openstudio-calibration 0.1.3 → 0.3.0

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 (48) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +5 -0
  4. data/CHANGELOG.md +23 -8
  5. data/Gemfile +0 -3
  6. data/Jenkinsfile +6 -2
  7. data/README.md +2 -2
  8. data/Rakefile +5 -5
  9. data/lib/measures/TimeseriesObjectiveFunction/README.md +5 -171
  10. data/lib/measures/TimeseriesObjectiveFunction/measure.rb +2 -6
  11. data/lib/measures/TimeseriesObjectiveFunction/measure.xml +89 -13
  12. data/lib/measures/TimeseriesObjectiveFunction/resources/report.html.erb +2 -0
  13. data/lib/measures/TimeseriesPlot/README.md +5 -35
  14. data/lib/measures/TimeseriesPlot/measure.xml +27 -11
  15. data/lib/measures/TimeseriesPlot/resources/report.html.erb +2 -0
  16. data/lib/measures/zone_report/README.md +2 -2
  17. data/lib/measures/zone_report/measure.rb +1 -1
  18. data/lib/measures/zone_report/measure.xml +14 -12
  19. data/lib/{openstudio-calibration-measures.rb → openstudio-calibration.rb} +1 -1
  20. data/lib/openstudio/{calibration_measures.rb → calibration.rb} +2 -2
  21. data/lib/openstudio/{calibration_measures → calibration}/extension.rb +1 -1
  22. data/lib/openstudio/{calibration_measures → calibration}/version.rb +2 -2
  23. data/openstudio-calibration.gemspec +38 -0
  24. metadata +37 -54
  25. data/lib/measures/AddMonthlyUtilityData/tests/AddMonthlyUtilityData_Test.rb +0 -88
  26. data/lib/measures/AddMonthlyUtilityData/tests/electric_billed_usages.json +0 -198
  27. data/lib/measures/AddMonthlyUtilityData/tests/gas_billed_usages.json +0 -198
  28. data/lib/measures/CalibrationReports/tests/CalibrationReports_Test.rb +0 -523
  29. data/lib/measures/CalibrationReports/tests/ExampleModel.osm +0 -10497
  30. data/lib/measures/CalibrationReports/tests/ExampleModelNoDemandInput.osm +0 -10560
  31. data/lib/measures/CalibrationReports/tests/ExampleModelNoGasInput.osm +0 -10456
  32. data/lib/measures/CalibrationReports/tests/USA_CO_Golden-NREL.724666_TMY3.epw +0 -8768
  33. data/lib/measures/CalibrationReportsEnhanced/tests/CalibrationReportsEnhanced_Test.rb +0 -734
  34. data/lib/measures/CalibrationReportsEnhanced/tests/ExampleModel.osm +0 -10497
  35. data/lib/measures/CalibrationReportsEnhanced/tests/ExampleModel_FuelOil.osm +0 -12740
  36. data/lib/measures/CalibrationReportsEnhanced/tests/USA_CO_Golden-NREL.724666_TMY3.epw +0 -8768
  37. data/lib/measures/CalibrationReportsEnhanced21/LICENSE.md +0 -27
  38. data/lib/measures/CalibrationReportsEnhanced21/README.md +0 -109
  39. data/lib/measures/CalibrationReportsEnhanced21/README.md.erb +0 -42
  40. data/lib/measures/CalibrationReportsEnhanced21/measure.rb +0 -690
  41. data/lib/measures/CalibrationReportsEnhanced21/measure.xml +0 -269
  42. data/lib/measures/CalibrationReportsEnhanced21/resources/report.html.in +0 -380
  43. data/lib/measures/MaalkaMonthlyJSONUtilityData/LICENSE.md +0 -27
  44. data/lib/measures/MaalkaMonthlyJSONUtilityData/README.md +0 -104
  45. data/lib/measures/MaalkaMonthlyJSONUtilityData/README.md.erb +0 -42
  46. data/lib/measures/MaalkaMonthlyJSONUtilityData/measure.rb +0 -304
  47. data/lib/measures/MaalkaMonthlyJSONUtilityData/measure.xml +0 -216
  48. data/openstudio-calibration-measures.gemspec +0 -30
@@ -1,523 +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
- require 'openstudio'
37
- require 'openstudio/measure/ShowRunnerOutput'
38
- require 'fileutils'
39
-
40
- require_relative '../measure.rb'
41
- require 'minitest/autorun'
42
-
43
- class CalibrationReports_Test < Minitest::Test
44
- def is_openstudio_2?
45
- begin
46
- workflow = OpenStudio::WorkflowJSON.new
47
- rescue StandardError
48
- return false
49
- end
50
- true
51
- end
52
-
53
- def model_in_path_default
54
- "#{File.dirname(__FILE__)}/ExampleModel.osm"
55
- end
56
-
57
- def epw_path_default
58
- # make sure we have a weather data location
59
- epw = nil
60
- epw = OpenStudio::Path.new("#{File.dirname(__FILE__)}/USA_CO_Golden-NREL.724666_TMY3.epw")
61
- assert(File.exist?(epw.to_s))
62
- epw.to_s
63
- end
64
-
65
- def run_dir(test_name)
66
- # always generate test output in specially named 'output' directory so result files are not made part of the measure
67
- "#{File.dirname(__FILE__)}/output/#{test_name}"
68
- end
69
-
70
- def model_out_path(test_name)
71
- "#{run_dir(test_name)}/TestOutput.osm"
72
- end
73
-
74
- def workspace_path(test_name)
75
- if is_openstudio_2?
76
- "#{run_dir(test_name)}/run/in.idf"
77
- else
78
- "#{run_dir(test_name)}/ModelToIdf/in.idf"
79
- end
80
- end
81
-
82
- def sql_path(test_name)
83
- if is_openstudio_2?
84
- "#{run_dir(test_name)}/run/eplusout.sql"
85
- else
86
- "#{run_dir(test_name)}/ModelToIdf/EnergyPlusPreProcess-0/EnergyPlus-0/eplusout.sql"
87
- end
88
- end
89
-
90
- def report_path(test_name)
91
- "#{run_dir(test_name)}/report.html"
92
- end
93
-
94
- # method for running the test simulation using OpenStudio 1.x API
95
- def setup_test_1(test_name, epw_path)
96
- co = OpenStudio::Runmanager::ConfigOptions.new(true)
97
- co.findTools(false, true, false, true)
98
-
99
- unless File.exist?(sql_path(test_name))
100
- puts 'Running EnergyPlus'
101
-
102
- wf = OpenStudio::Runmanager::Workflow.new('modeltoidf->energypluspreprocess->energyplus')
103
- wf.add(co.getTools)
104
- job = wf.create(OpenStudio::Path.new(run_dir(test_name)), OpenStudio::Path.new(model_out_path(test_name)), OpenStudio::Path.new(epw_path))
105
-
106
- rm = OpenStudio::Runmanager::RunManager.new
107
- rm.enqueue(job, true)
108
- rm.waitForFinished
109
- end
110
- end
111
-
112
- # method for running the test simulation using OpenStudio 2.x API
113
- def setup_test_2(test_name, epw_path)
114
- osw_path = File.join(run_dir(test_name), 'in.osw')
115
- osw_path = File.absolute_path(osw_path)
116
-
117
- workflow = OpenStudio::WorkflowJSON.new
118
- workflow.setSeedFile(File.absolute_path(model_out_path(test_name)))
119
- workflow.setWeatherFile(File.absolute_path(epw_path))
120
- workflow.saveAs(osw_path)
121
-
122
- cli_path = OpenStudio.getOpenStudioCLI
123
- cmd = "\"#{cli_path}\" run -w \"#{osw_path}\""
124
- puts cmd
125
- system(cmd)
126
- end
127
-
128
- # create test files if they do not exist when the test first runs
129
- def setup_test(test_name, idf_output_requests, model_in_path = model_in_path_default, epw_path = epw_path_default)
130
- FileUtils.mkdir_p(run_dir(test_name)) unless File.exist?(run_dir(test_name))
131
- assert(File.exist?(run_dir(test_name)))
132
-
133
- FileUtils.rm(report_path(test_name)) if File.exist?(report_path(test_name))
134
-
135
- assert(File.exist?(model_in_path))
136
-
137
- if File.exist?(model_out_path(test_name))
138
- FileUtils.rm(model_out_path(test_name))
139
- end
140
-
141
- # convert output requests to OSM for testing, OS App and PAT will add these to the E+ Idf
142
- workspace = OpenStudio::Workspace.new('Draft'.to_StrictnessLevel, 'EnergyPlus'.to_IddFileType)
143
- workspace.addObjects(idf_output_requests)
144
- rt = OpenStudio::EnergyPlus::ReverseTranslator.new
145
- request_model = rt.translateWorkspace(workspace)
146
-
147
- translator = OpenStudio::OSVersion::VersionTranslator.new
148
- model = translator.loadModel(model_in_path)
149
- assert(!model.empty?)
150
- model = model.get
151
- model.addObjects(request_model.objects)
152
- model.save(model_out_path(test_name), true)
153
-
154
- if ENV['OPENSTUDIO_TEST_NO_CACHE_SQLFILE']
155
- FileUtils.rm_f(sql_path(test_name)) if File.exist?(sql_path(test_name))
156
- end
157
-
158
- if is_openstudio_2?
159
- setup_test_2(test_name, epw_path)
160
- else
161
- setup_test_1(test_name, epw_path)
162
- end
163
- end
164
-
165
- # calibration_reports
166
- def test_CalibrationReports
167
- test_name = 'calibration_reports'
168
- model_in_path = "#{File.dirname(__FILE__)}/ExampleModel.osm"
169
-
170
- # create an instance of the measure
171
- measure = CalibrationReports.new
172
-
173
- # create an instance of a runner
174
- runner = OpenStudio::Measure::OSRunner.new(OpenStudio::WorkflowJSON.new)
175
-
176
- # get arguments
177
- arguments = measure.arguments
178
- argument_map = OpenStudio::Measure.convertOSArgumentVectorToMap(arguments)
179
-
180
- # create hash of argument values
181
- args_hash = {}
182
-
183
- # populate argument with specified hash value if specified
184
- arguments.each do |arg|
185
- temp_arg_var = arg.clone
186
- assert(temp_arg_var.setValue(args_hash[arg.name])) if args_hash[arg.name]
187
- argument_map[arg.name] = temp_arg_var
188
- end
189
-
190
- # get the energyplus output requests, this will be done automatically by OS App and PAT
191
- idf_output_requests = measure.energyPlusOutputRequests(runner, argument_map)
192
- assert_equal(0, idf_output_requests.size)
193
-
194
- # mimic the process of running this measure in OS App or PAT. Optionally set custom model_in_path and custom epw_path.
195
- epw_path = epw_path_default
196
- setup_test(test_name, idf_output_requests)
197
-
198
- assert(File.exist?(model_out_path(test_name)))
199
- assert(File.exist?(sql_path(test_name)))
200
- assert(File.exist?(epw_path))
201
-
202
- # set up runner, this will happen automatically when measure is run in PAT or OpenStudio
203
- runner.setLastOpenStudioModelPath(OpenStudio::Path.new(model_out_path(test_name)))
204
- runner.setLastEnergyPlusWorkspacePath(OpenStudio::Path.new(workspace_path(test_name)))
205
- runner.setLastEpwFilePath(epw_path)
206
- runner.setLastEnergyPlusSqlFilePath(OpenStudio::Path.new(sql_path(test_name)))
207
-
208
- # delete the output if it exists
209
- FileUtils.rm(report_path(test_name)) if File.exist?(report_path(test_name))
210
- assert(!File.exist?(report_path(test_name)))
211
-
212
- # temporarily change directory to the run directory and run the measure
213
- start_dir = Dir.pwd
214
- begin
215
- Dir.chdir(run_dir(test_name))
216
-
217
- # run the measure
218
- measure.run(runner, argument_map)
219
- result = runner.result
220
- show_output(result)
221
- assert_equal('Success', result.value.valueName)
222
- assert(result.warnings.empty?)
223
- ensure
224
- Dir.chdir(start_dir)
225
- end
226
-
227
- model = runner.lastOpenStudioModel
228
- assert(!model.empty?)
229
- model = model.get
230
-
231
- sqlFile = runner.lastEnergyPlusSqlFile
232
- assert(!sqlFile.empty?)
233
- sqlFile = sqlFile.get
234
-
235
- model.setSqlFile(sqlFile)
236
-
237
- # must have a runPeriod
238
- runPeriod = model.runPeriod
239
- assert(!runPeriod.empty?)
240
-
241
- # must have a calendarYear
242
- yearDescription = model.yearDescription
243
- assert(!yearDescription.empty?)
244
- calendarYear = yearDescription.get.calendarYear
245
- assert(!calendarYear.empty?)
246
-
247
- # check for varying demand
248
- model.getUtilityBills.each do |utilityBill|
249
- next if utilityBill.peakDemandUnitConversionFactor.empty?
250
- hasVaryingDemand = false
251
- modelPeakDemand = 0.0
252
- count = 0
253
- utilityBill.billingPeriods.each do |billingPeriod|
254
- peakDemand = billingPeriod.modelPeakDemand
255
- next if peakDemand.empty?
256
- temp = peakDemand.get
257
- if count == 0
258
- modelPeakDemand = temp
259
- else
260
- if modelPeakDemand != temp
261
- hasVaryingDemand = true
262
- break
263
- end
264
- end
265
- count += 1
266
- end
267
- assert(hasVaryingDemand) if count > 1
268
- end
269
-
270
- # make sure the report file exists
271
- assert(File.exist?(report_path(test_name)))
272
- end
273
-
274
- # calibration_reports_no_gas
275
- def test_CalibrationReports_NoGas
276
- test_name = 'calibration_reports_no_gas'
277
-
278
- # # load model, remove gas bills, save to new file
279
- # raw_model_path = "#{File.dirname(__FILE__)}/ExampleModel.osm"
280
- # vt = OpenStudio::OSVersion::VersionTranslator.new
281
- # model = vt.loadModel(raw_model_path)
282
- # assert(!model.empty?)
283
- # model = model.get
284
- # utilityBills = model.getUtilityBills
285
- # assert_equal(2, utilityBills.size)
286
- # utilityBills.each do |utilityBill|
287
- # if utilityBill.fuelType == 'Gas'.to_FuelType
288
- # utilityBill.remove
289
- # end
290
- # end
291
- # utilityBills = model.getUtilityBills
292
- # assert_equal(1, utilityBills.size)
293
- # altered_model_path = OpenStudio::Path.new("#{run_dir(test_name)}/ExampleModelNoGasInput.osm")
294
- # model.save(altered_model_path, true)
295
- #
296
- # # set model_in_path to new altered copy of model
297
- # model_in_path = altered_model_path
298
-
299
- # dynamically generated test model creating issues on CI, so using pre-made test model for now.
300
- model_in_path = "#{File.dirname(__FILE__)}/ExampleModelNoGasInput.osm"
301
-
302
- # create an instance of the measure
303
- measure = CalibrationReports.new
304
-
305
- # create an instance of a runner
306
- runner = OpenStudio::Measure::OSRunner.new(OpenStudio::WorkflowJSON.new)
307
-
308
- # get arguments
309
- arguments = measure.arguments
310
- argument_map = OpenStudio::Measure.convertOSArgumentVectorToMap(arguments)
311
-
312
- # create hash of argument values
313
- args_hash = {}
314
-
315
- # populate argument with specified hash value if specified
316
- arguments.each do |arg|
317
- temp_arg_var = arg.clone
318
- assert(temp_arg_var.setValue(args_hash[arg.name])) if args_hash[arg.name]
319
- argument_map[arg.name] = temp_arg_var
320
- end
321
-
322
- # get the energyplus output requests, this will be done automatically by OS App and PAT
323
- idf_output_requests = measure.energyPlusOutputRequests(runner, argument_map)
324
- assert_equal(0, idf_output_requests.size)
325
-
326
- # mimic the process of running this measure in OS App or PAT. Optionally set custom model_in_path and custom epw_path.
327
- epw_path = epw_path_default
328
- sleep = 4 # try adding sleep for stability when test model is being created within test fails inconsistently
329
- setup_test(test_name, idf_output_requests, model_in_path.to_s)
330
-
331
- assert(File.exist?(model_out_path(test_name)))
332
- assert(File.exist?(sql_path(test_name)))
333
- assert(File.exist?(epw_path))
334
-
335
- # set up runner, this will happen automatically when measure is run in PAT or OpenStudio
336
- runner.setLastOpenStudioModelPath(OpenStudio::Path.new(model_out_path(test_name)))
337
- runner.setLastEnergyPlusWorkspacePath(OpenStudio::Path.new(workspace_path(test_name)))
338
- runner.setLastEpwFilePath(epw_path)
339
- runner.setLastEnergyPlusSqlFilePath(OpenStudio::Path.new(sql_path(test_name)))
340
-
341
- # delete the output if it exists
342
- FileUtils.rm(report_path(test_name)) if File.exist?(report_path(test_name))
343
- assert(!File.exist?(report_path(test_name)))
344
-
345
- # temporarily change directory to the run directory and run the measure
346
- start_dir = Dir.pwd
347
- begin
348
- Dir.chdir(run_dir(test_name))
349
-
350
- # run the measure
351
- measure.run(runner, argument_map)
352
- result = runner.result
353
- show_output(result)
354
- assert_equal('Success', result.value.valueName)
355
- assert(result.warnings.empty?)
356
- ensure
357
- Dir.chdir(start_dir)
358
- end
359
-
360
- model = runner.lastOpenStudioModel
361
- assert(!model.empty?)
362
- model = model.get
363
-
364
- sqlFile = runner.lastEnergyPlusSqlFile
365
- assert(!sqlFile.empty?)
366
- sqlFile = sqlFile.get
367
-
368
- model.setSqlFile(sqlFile)
369
-
370
- # must have a runPeriod
371
- runPeriod = model.runPeriod
372
- assert(!runPeriod.empty?)
373
-
374
- # must have a calendarYear
375
- yearDescription = model.yearDescription
376
- assert(!yearDescription.empty?)
377
- calendarYear = yearDescription.get.calendarYear
378
- assert(!calendarYear.empty?)
379
-
380
- # check for varying demand
381
- model.getUtilityBills.each do |utilityBill|
382
- next if utilityBill.peakDemandUnitConversionFactor.empty?
383
- hasVaryingDemand = false
384
- modelPeakDemand = 0.0
385
- count = 0
386
- utilityBill.billingPeriods.each do |billingPeriod|
387
- peakDemand = billingPeriod.modelPeakDemand
388
- next if peakDemand.empty?
389
- temp = peakDemand.get
390
- if count == 0
391
- modelPeakDemand = temp
392
- else
393
- if modelPeakDemand != temp
394
- hasVaryingDemand = true
395
- break
396
- end
397
- end
398
- count += 1
399
- end
400
- assert(hasVaryingDemand) if count > 1
401
- end
402
-
403
- # make sure the report file exists
404
- assert(File.exist?(report_path(test_name)))
405
- end
406
-
407
- # calibration_reports_no_gas
408
- def test_CalibrationReports_NoDemand
409
- test_name = 'calibration_reports_no_demand'
410
-
411
- # # load model, remove gas bills, save to new file
412
- # raw_model_path = "#{File.dirname(__FILE__)}/ExampleModel.osm"
413
- # vt = OpenStudio::OSVersion::VersionTranslator.new
414
- # model = vt.loadModel(raw_model_path)
415
- # assert(!model.empty?)
416
- # model = model.get
417
- # utilityBills = model.getUtilityBills
418
- # assert_equal(2, utilityBills.size)
419
- # utilityBills.each do |utilityBill|
420
- # if utilityBill.fuelType == 'Electricity'.to_FuelType
421
- # utilityBill.billingPeriods.each(&:resetPeakDemand)
422
- # end
423
- # end
424
- # utilityBills = model.getUtilityBills
425
- # assert_equal(2, utilityBills.size)
426
- # altered_model_path = OpenStudio::Path.new("#{run_dir(test_name)}/ExampleModelNoDemandInput.osm")
427
- # model.save(altered_model_path, true)
428
- #
429
- # # set model_in_path to new altered copy of model
430
- # model_in_path = altered_model_path
431
-
432
- # dynamically generated test model creating issues on CI, so using pre-made test model for now.
433
- model_in_path = "#{File.dirname(__FILE__)}/ExampleModelNoDemandInput.osm"
434
-
435
- # create an instance of the measure
436
- measure = CalibrationReports.new
437
-
438
- # create an instance of a runner
439
- runner = OpenStudio::Measure::OSRunner.new(OpenStudio::WorkflowJSON.new)
440
-
441
- # get arguments
442
- arguments = measure.arguments
443
- argument_map = OpenStudio::Measure.convertOSArgumentVectorToMap(arguments)
444
-
445
- # create hash of argument values
446
- args_hash = {}
447
-
448
- # populate argument with specified hash value if specified
449
- arguments.each do |arg|
450
- temp_arg_var = arg.clone
451
- assert(temp_arg_var.setValue(args_hash[arg.name])) if args_hash[arg.name]
452
- argument_map[arg.name] = temp_arg_var
453
- end
454
-
455
- # get the energyplus output requests, this will be done automatically by OS App and PAT
456
- idf_output_requests = measure.energyPlusOutputRequests(runner, argument_map)
457
- assert_equal(0, idf_output_requests.size)
458
-
459
- # mimic the process of running this measure in OS App or PAT. Optionally set custom model_in_path and custom epw_path.
460
- epw_path = epw_path_default
461
- sleep = 4 # try adding sleep for stability when test model is being created within test fails inconsistently
462
- setup_test(test_name, idf_output_requests, model_in_path.to_s)
463
-
464
- assert(File.exist?(model_out_path(test_name)))
465
- assert(File.exist?(sql_path(test_name)))
466
- assert(File.exist?(epw_path))
467
-
468
- # set up runner, this will happen automatically when measure is run in PAT or OpenStudio
469
- runner.setLastOpenStudioModelPath(OpenStudio::Path.new(model_out_path(test_name)))
470
- runner.setLastEnergyPlusWorkspacePath(OpenStudio::Path.new(workspace_path(test_name)))
471
- runner.setLastEpwFilePath(epw_path)
472
- runner.setLastEnergyPlusSqlFilePath(OpenStudio::Path.new(sql_path(test_name)))
473
-
474
- # delete the output if it exists
475
- FileUtils.rm(report_path(test_name)) if File.exist?(report_path(test_name))
476
- assert(!File.exist?(report_path(test_name)))
477
-
478
- # temporarily change directory to the run directory and run the measure
479
- start_dir = Dir.pwd
480
- begin
481
- Dir.chdir(run_dir(test_name))
482
-
483
- # run the measure
484
- measure.run(runner, argument_map)
485
- result = runner.result
486
- show_output(result)
487
- assert_equal('Success', result.value.valueName)
488
- assert(result.warnings.empty?)
489
- ensure
490
- Dir.chdir(start_dir)
491
- end
492
-
493
- model = runner.lastOpenStudioModel
494
- assert(!model.empty?)
495
- model = model.get
496
-
497
- sqlFile = runner.lastEnergyPlusSqlFile
498
- assert(!sqlFile.empty?)
499
- sqlFile = sqlFile.get
500
-
501
- model.setSqlFile(sqlFile)
502
-
503
- # must have a runPeriod
504
- runPeriod = model.runPeriod
505
- assert(!runPeriod.empty?)
506
-
507
- # must have a calendarYear
508
- yearDescription = model.yearDescription
509
- assert(!yearDescription.empty?)
510
- calendarYear = yearDescription.get.calendarYear
511
- assert(!calendarYear.empty?)
512
-
513
- # check for no demand
514
- model.getUtilityBills.each do |utilityBill|
515
- utilityBill.billingPeriods.each do |billingPeriod|
516
- assert(billingPeriod.peakDemand.empty?)
517
- end
518
- end
519
-
520
- # make sure the report file exists
521
- assert(File.exist?(report_path(test_name)))
522
- end
523
- end