openstudio-workflow 1.3.4 → 1.3.5

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 (35) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +89 -77
  3. data/README.md +67 -93
  4. data/Rakefile +36 -36
  5. data/lib/openstudio-workflow.rb +65 -65
  6. data/lib/openstudio/workflow/adapters/input/local.rb +311 -324
  7. data/lib/openstudio/workflow/adapters/output/local.rb +158 -161
  8. data/lib/openstudio/workflow/adapters/output/socket.rb +106 -107
  9. data/lib/openstudio/workflow/adapters/output/web.rb +82 -82
  10. data/lib/openstudio/workflow/adapters/output_adapter.rb +163 -163
  11. data/lib/openstudio/workflow/job.rb +57 -57
  12. data/lib/openstudio/workflow/jobs/resources/monthly_report.idf +222 -222
  13. data/lib/openstudio/workflow/jobs/run_energyplus.rb +70 -70
  14. data/lib/openstudio/workflow/jobs/run_ep_measures.rb +73 -73
  15. data/lib/openstudio/workflow/jobs/run_initialization.rb +203 -203
  16. data/lib/openstudio/workflow/jobs/run_os_measures.rb +89 -89
  17. data/lib/openstudio/workflow/jobs/run_postprocess.rb +73 -73
  18. data/lib/openstudio/workflow/jobs/run_preprocess.rb +104 -104
  19. data/lib/openstudio/workflow/jobs/run_reporting_measures.rb +118 -118
  20. data/lib/openstudio/workflow/jobs/run_translation.rb +84 -84
  21. data/lib/openstudio/workflow/multi_delegator.rb +62 -62
  22. data/lib/openstudio/workflow/registry.rb +172 -172
  23. data/lib/openstudio/workflow/run.rb +342 -328
  24. data/lib/openstudio/workflow/time_logger.rb +96 -96
  25. data/lib/openstudio/workflow/util.rb +49 -49
  26. data/lib/openstudio/workflow/util/energyplus.rb +575 -605
  27. data/lib/openstudio/workflow/util/io.rb +68 -68
  28. data/lib/openstudio/workflow/util/measure.rb +658 -650
  29. data/lib/openstudio/workflow/util/model.rb +151 -151
  30. data/lib/openstudio/workflow/util/post_process.rb +235 -238
  31. data/lib/openstudio/workflow/util/weather_file.rb +143 -143
  32. data/lib/openstudio/workflow/version.rb +40 -40
  33. data/lib/openstudio/workflow_json.rb +475 -476
  34. data/lib/openstudio/workflow_runner.rb +263 -268
  35. metadata +24 -24
@@ -1,82 +1,82 @@
1
- # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) 2008-2018, 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 HOLDERS AND CONTRIBUTORS "AS IS"
24
- # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25
- # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26
- # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER, THE UNITED STATES
27
- # GOVERNMENT, OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28
- # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29
- # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30
- # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
31
- # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32
- # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
33
- # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
- # *******************************************************************************
35
-
36
- require_relative 'local'
37
-
38
- # Local file based workflow
39
- module OpenStudio
40
- module Workflow
41
- module OutputAdapter
42
- class Web < Local
43
- def initialize(options = {})
44
- super
45
- raise 'The required :url option was not passed to the web output adapter' unless options[:url]
46
- end
47
-
48
- def communicate_started
49
- super
50
- end
51
-
52
- def communicate_results(directory, results)
53
- super
54
- end
55
-
56
- def communicate_complete
57
- super
58
- end
59
-
60
- def communicate_failure
61
- super
62
- end
63
-
64
- def communicate_objective_function(objectives, options = {})
65
- super
66
- end
67
-
68
- def communicate_transition(message, type, options = {})
69
- super
70
- end
71
-
72
- def communicate_energyplus_stdout(line, options = {})
73
- super
74
- end
75
-
76
- def communicate_measure_result(result, options = {})
77
- super
78
- end
79
- end
80
- end
81
- end
82
- end
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 HOLDERS AND CONTRIBUTORS "AS IS"
24
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER, THE UNITED STATES
27
+ # GOVERNMENT, OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28
+ # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29
+ # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30
+ # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
31
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
33
+ # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
+ # *******************************************************************************
35
+
36
+ require_relative 'local'
37
+
38
+ # Local file based workflow
39
+ module OpenStudio
40
+ module Workflow
41
+ module OutputAdapter
42
+ class Web < Local
43
+ def initialize(options = {})
44
+ super
45
+ raise 'The required :url option was not passed to the web output adapter' unless options[:url]
46
+ end
47
+
48
+ def communicate_started
49
+ super
50
+ end
51
+
52
+ def communicate_results(directory, results)
53
+ super
54
+ end
55
+
56
+ def communicate_complete
57
+ super
58
+ end
59
+
60
+ def communicate_failure
61
+ super
62
+ end
63
+
64
+ def communicate_objective_function(objectives, options = {})
65
+ super
66
+ end
67
+
68
+ def communicate_transition(message, type, options = {})
69
+ super
70
+ end
71
+
72
+ def communicate_energyplus_stdout(line, options = {})
73
+ super
74
+ end
75
+
76
+ def communicate_measure_result(result, options = {})
77
+ super
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -1,163 +1,163 @@
1
- # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) 2008-2018, 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 HOLDERS AND CONTRIBUTORS "AS IS"
24
- # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25
- # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26
- # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER, THE UNITED STATES
27
- # GOVERNMENT, OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28
- # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29
- # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30
- # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
31
- # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32
- # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
33
- # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
- # *******************************************************************************
35
-
36
- module OpenStudio
37
- module Workflow
38
- # Base class for all output adapters. These methods define the expected return behavior of the adapter instance
39
- class OutputAdapters
40
- attr_accessor :options
41
-
42
- def initialize(options = {})
43
- @options = options
44
- end
45
-
46
- def communicate_started
47
- instance.communicate_started
48
- end
49
-
50
- def communicate_transition(message, type, options = {})
51
- instance.communicate_transition message, type, options
52
- end
53
-
54
- def communicate_energyplus_stdout(line, options = {})
55
- instance.communicate_energyplus_stdout line, options
56
- end
57
-
58
- def communicate_measure_result(result, options = {})
59
- instance.communicate_measure_result result, options
60
- end
61
-
62
- def communicate_measure_attributes(measure_attributes, options = {})
63
- instance.communicate_measure_attributes measure_attributes, options
64
- end
65
-
66
- def communicate_objective_function(objectives, options = {})
67
- instance.communicate_objective_function objectives, options
68
- end
69
-
70
- def communicate_results(directory, results)
71
- instance.communicate_results directory, results
72
- end
73
-
74
- def communicate_complete
75
- instance.communicate_complete
76
- end
77
-
78
- def communicate_failure
79
- instance.communicate_failure
80
- end
81
-
82
- protected
83
-
84
- # Zip up a folder and it's contents
85
- def zip_directory(directory, zip_filename, pattern = '*')
86
- # Submethod for adding the directory to the zip folder.
87
- def add_directory_to_zip(zip_file, local_directory, root_directory)
88
- Dir[File.join(local_directory.to_s, '**', '**')].each do |file|
89
- # remove the base directory from the zip file
90
- rel_dir = local_directory.sub("#{root_directory}/", '')
91
- zip_file_to_add = file.gsub(local_directory.to_s, rel_dir.to_s)
92
- if File.directory?(file)
93
- zip_file.addDirectory(file, zip_file_to_add)
94
- else
95
- zip_file.addFile(file, zip_file_to_add)
96
- end
97
- end
98
-
99
- zip_file
100
- end
101
-
102
- FileUtils.rm_f(zip_filename) if File.exist?(zip_filename)
103
-
104
- zf = OpenStudio::ZipFile.new(zip_filename, false)
105
-
106
- Dir[File.join(directory, pattern)].each do |file|
107
- if File.directory?(file)
108
- # skip a few directory that should not be zipped as they are inputs
109
- if File.basename(file) =~ /seed|measures|weather/
110
- next
111
- end
112
- # skip x-large directory
113
- if File.size?(file)
114
- next if File.size?(file) >= 15000000
115
- end
116
- add_directory_to_zip(zf, file, directory)
117
- else
118
- next if File.extname(file) =~ /\.rb.*/
119
- next if File.extname(file) =~ /\.zip.*/
120
- # skip large non-osm/idf files
121
- if File.size(file)
122
- if File.size(file) >= 100000000
123
- next unless File.extname(file) == '.osm' || File.extname(file) == '.idf'
124
- end
125
- end
126
-
127
- zip_file_to_add = file.gsub("#{directory}/", '')
128
- zf.addFile(file, zip_file_to_add)
129
- end
130
- end
131
-
132
- zf = nil
133
- GC.start
134
-
135
- File.chmod(0o664, zip_filename)
136
- end
137
-
138
- # Main method to zip up the results of the simulation results. This will append the UUID of the data point
139
- # if it exists. This method will create two zip files. One for the reports and one for the entire data point. The
140
- # Data Point ZIP will also contain the reports.
141
- #
142
- # @param directory [String] The data point directory to zip up.
143
- # @return nil
144
- #
145
- def zip_results(directory)
146
- # create zip file using a system call
147
- if Dir.exist?(directory) && File.directory?(directory)
148
- zip_filename = @datapoint ? "data_point_#{@datapoint.uuid}.zip" : 'data_point.zip'
149
- zip_filename = File.join(directory, zip_filename)
150
- zip_directory directory, zip_filename
151
- end
152
-
153
- # zip up only the reports folder
154
- report_dir = File.join(directory, 'reports')
155
- if Dir.exist?(report_dir) && File.directory?(report_dir)
156
- zip_filename = @datapoint ? "data_point_#{@datapoint.uuid}_reports.zip" : 'data_point_reports.zip'
157
- zip_filename = File.join(directory, zip_filename)
158
- zip_directory directory, zip_filename, 'reports'
159
- end
160
- end
161
- end
162
- end
163
- end
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 HOLDERS AND CONTRIBUTORS "AS IS"
24
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER, THE UNITED STATES
27
+ # GOVERNMENT, OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28
+ # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29
+ # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30
+ # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
31
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
33
+ # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
+ # *******************************************************************************
35
+
36
+ module OpenStudio
37
+ module Workflow
38
+ # Base class for all output adapters. These methods define the expected return behavior of the adapter instance
39
+ class OutputAdapters
40
+ attr_accessor :options
41
+
42
+ def initialize(options = {})
43
+ @options = options
44
+ end
45
+
46
+ def communicate_started
47
+ instance.communicate_started
48
+ end
49
+
50
+ def communicate_transition(message, type, options = {})
51
+ instance.communicate_transition message, type, options
52
+ end
53
+
54
+ def communicate_energyplus_stdout(line, options = {})
55
+ instance.communicate_energyplus_stdout line, options
56
+ end
57
+
58
+ def communicate_measure_result(result, options = {})
59
+ instance.communicate_measure_result result, options
60
+ end
61
+
62
+ def communicate_measure_attributes(measure_attributes, options = {})
63
+ instance.communicate_measure_attributes measure_attributes, options
64
+ end
65
+
66
+ def communicate_objective_function(objectives, options = {})
67
+ instance.communicate_objective_function objectives, options
68
+ end
69
+
70
+ def communicate_results(directory, results)
71
+ instance.communicate_results directory, results
72
+ end
73
+
74
+ def communicate_complete
75
+ instance.communicate_complete
76
+ end
77
+
78
+ def communicate_failure
79
+ instance.communicate_failure
80
+ end
81
+
82
+ protected
83
+
84
+ # Zip up a folder and it's contents
85
+ def zip_directory(directory, zip_filename, pattern = '*')
86
+ # Submethod for adding the directory to the zip folder.
87
+ def add_directory_to_zip(zip_file, local_directory, root_directory)
88
+ Dir[File.join(local_directory.to_s, '**', '**')].each do |file|
89
+ # remove the base directory from the zip file
90
+ rel_dir = local_directory.sub("#{root_directory}/", '')
91
+ zip_file_to_add = file.gsub(local_directory.to_s, rel_dir.to_s)
92
+ if File.directory?(file)
93
+ zip_file.addDirectory(file, zip_file_to_add)
94
+ else
95
+ zip_file.addFile(file, zip_file_to_add)
96
+ end
97
+ end
98
+
99
+ zip_file
100
+ end
101
+
102
+ FileUtils.rm_f(zip_filename) if File.exist?(zip_filename)
103
+
104
+ zf = OpenStudio::ZipFile.new(zip_filename, false)
105
+
106
+ Dir[File.join(directory, pattern)].each do |file|
107
+ if File.directory?(file)
108
+ # skip a few directory that should not be zipped as they are inputs
109
+ if File.basename(file) =~ /seed|measures|weather/
110
+ next
111
+ end
112
+ # skip x-large directory
113
+ if File.size?(file)
114
+ next if File.size?(file) >= 15000000
115
+ end
116
+ add_directory_to_zip(zf, file, directory)
117
+ else
118
+ next if File.extname(file) =~ /\.rb.*/
119
+ next if File.extname(file) =~ /\.zip.*/
120
+ # skip large non-osm/idf files
121
+ if File.size(file)
122
+ if File.size(file) >= 100000000
123
+ next unless File.extname(file) == '.osm' || File.extname(file) == '.idf'
124
+ end
125
+ end
126
+
127
+ zip_file_to_add = file.gsub("#{directory}/", '')
128
+ zf.addFile(file, zip_file_to_add)
129
+ end
130
+ end
131
+
132
+ zf = nil
133
+ GC.start
134
+
135
+ File.chmod(0o664, zip_filename)
136
+ end
137
+
138
+ # Main method to zip up the results of the simulation results. This will append the UUID of the data point
139
+ # if it exists. This method will create two zip files. One for the reports and one for the entire data point. The
140
+ # Data Point ZIP will also contain the reports.
141
+ #
142
+ # @param directory [String] The data point directory to zip up.
143
+ # @return nil
144
+ #
145
+ def zip_results(directory)
146
+ # create zip file using a system call
147
+ if Dir.exist?(directory) && File.directory?(directory)
148
+ zip_filename = @datapoint ? "data_point_#{@datapoint.uuid}.zip" : 'data_point.zip'
149
+ zip_filename = File.join(directory, zip_filename)
150
+ zip_directory directory, zip_filename
151
+ end
152
+
153
+ # zip up only the reports folder
154
+ report_dir = File.join(directory, 'reports')
155
+ if Dir.exist?(report_dir) && File.directory?(report_dir)
156
+ zip_filename = @datapoint ? "data_point_#{@datapoint.uuid}_reports.zip" : 'data_point_reports.zip'
157
+ zip_filename = File.join(directory, zip_filename)
158
+ zip_directory directory, zip_filename, 'reports'
159
+ end
160
+ end
161
+ end
162
+ end
163
+ end