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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +89 -77
- data/README.md +67 -93
- data/Rakefile +36 -36
- data/lib/openstudio-workflow.rb +65 -65
- data/lib/openstudio/workflow/adapters/input/local.rb +311 -324
- data/lib/openstudio/workflow/adapters/output/local.rb +158 -161
- data/lib/openstudio/workflow/adapters/output/socket.rb +106 -107
- data/lib/openstudio/workflow/adapters/output/web.rb +82 -82
- data/lib/openstudio/workflow/adapters/output_adapter.rb +163 -163
- data/lib/openstudio/workflow/job.rb +57 -57
- data/lib/openstudio/workflow/jobs/resources/monthly_report.idf +222 -222
- data/lib/openstudio/workflow/jobs/run_energyplus.rb +70 -70
- data/lib/openstudio/workflow/jobs/run_ep_measures.rb +73 -73
- data/lib/openstudio/workflow/jobs/run_initialization.rb +203 -203
- data/lib/openstudio/workflow/jobs/run_os_measures.rb +89 -89
- data/lib/openstudio/workflow/jobs/run_postprocess.rb +73 -73
- data/lib/openstudio/workflow/jobs/run_preprocess.rb +104 -104
- data/lib/openstudio/workflow/jobs/run_reporting_measures.rb +118 -118
- data/lib/openstudio/workflow/jobs/run_translation.rb +84 -84
- data/lib/openstudio/workflow/multi_delegator.rb +62 -62
- data/lib/openstudio/workflow/registry.rb +172 -172
- data/lib/openstudio/workflow/run.rb +342 -328
- data/lib/openstudio/workflow/time_logger.rb +96 -96
- data/lib/openstudio/workflow/util.rb +49 -49
- data/lib/openstudio/workflow/util/energyplus.rb +575 -605
- data/lib/openstudio/workflow/util/io.rb +68 -68
- data/lib/openstudio/workflow/util/measure.rb +658 -650
- data/lib/openstudio/workflow/util/model.rb +151 -151
- data/lib/openstudio/workflow/util/post_process.rb +235 -238
- data/lib/openstudio/workflow/util/weather_file.rb +143 -143
- data/lib/openstudio/workflow/version.rb +40 -40
- data/lib/openstudio/workflow_json.rb +475 -476
- data/lib/openstudio/workflow_runner.rb +263 -268
- metadata +24 -24
@@ -1,118 +1,118 @@
|
|
1
|
-
# *******************************************************************************
|
2
|
-
# OpenStudio(R), Copyright (c) 2008-
|
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
|
-
# Run reporting measures and execute scripts to post-process objective functions and results on the filesystem
|
37
|
-
class RunReportingMeasures < OpenStudio::Workflow::Job
|
38
|
-
require 'csv'
|
39
|
-
require 'ostruct'
|
40
|
-
require 'openstudio/workflow/util'
|
41
|
-
include OpenStudio::Workflow::Util::Model
|
42
|
-
include OpenStudio::Workflow::Util::Measure
|
43
|
-
include OpenStudio::Workflow::Util::PostProcess
|
44
|
-
|
45
|
-
def initialize(input_adapter, output_adapter, registry, options = {})
|
46
|
-
defaults = {
|
47
|
-
load_simulation_osm: false,
|
48
|
-
load_simulation_idf: false,
|
49
|
-
load_simulation_sql: false
|
50
|
-
}
|
51
|
-
options = defaults.merge(options)
|
52
|
-
super
|
53
|
-
end
|
54
|
-
|
55
|
-
def perform
|
56
|
-
@logger.debug "Calling #{__method__} in the #{self.class} class"
|
57
|
-
@logger.debug 'RunPostProcess Retrieving datapoint and problem'
|
58
|
-
|
59
|
-
# halted workflow is handled in apply_measures
|
60
|
-
|
61
|
-
# Ensure output_attributes is initialized in the registry
|
62
|
-
@registry.register(:output_attributes) { {} } unless @registry[:output_attributes]
|
63
|
-
|
64
|
-
# Load simulation files as required
|
65
|
-
unless @registry[:runner].halted
|
66
|
-
if @registry[:model].nil?
|
67
|
-
osm_path = File.absolute_path(File.join(@registry[:run_dir], 'in.osm'))
|
68
|
-
@logger.debug "Attempting to load #{osm_path}"
|
69
|
-
@registry.register(:model) { load_osm('.', osm_path) }
|
70
|
-
raise "Unable to load #{osm_path}" unless @registry[:model]
|
71
|
-
@logger.debug "Successfully loaded #{osm_path}"
|
72
|
-
end
|
73
|
-
if @registry[:model_idf].nil?
|
74
|
-
idf_path = File.absolute_path(File.join(@registry[:run_dir], 'in.idf'))
|
75
|
-
@logger.debug "Attempting to load #{idf_path}"
|
76
|
-
@registry.register(:model_idf) { load_idf(idf_path, @logger) }
|
77
|
-
raise "Unable to load #{idf_path}" unless @registry[:model_idf]
|
78
|
-
@logger.debug "Successfully loaded #{idf_path}"
|
79
|
-
end
|
80
|
-
if @registry[:sql].nil?
|
81
|
-
sql_path = File.absolute_path(File.join(@registry[:run_dir], 'eplusout.sql'))
|
82
|
-
if File.
|
83
|
-
@registry.register(:sql) { sql_path }
|
84
|
-
@logger.debug "Registered the sql filepath as #{@registry[:sql]}"
|
85
|
-
end
|
86
|
-
#raise "Unable to load #{sql_path}" unless @registry[:sql]
|
87
|
-
end
|
88
|
-
if @registry[:wf].nil?
|
89
|
-
epw_path = File.absolute_path(File.join(@registry[:run_dir], 'in.epw'))
|
90
|
-
if File.
|
91
|
-
@registry.register(:wf) { epw_path }
|
92
|
-
@logger.debug "Registered the wf filepath as #{@registry[:wf]}"
|
93
|
-
end
|
94
|
-
#raise "Unable to load #{epw_path}" unless @registry[:wf]
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
# Apply reporting measures
|
99
|
-
@options[:output_adapter] = @output_adapter
|
100
|
-
@logger.info 'Beginning to execute Reporting measures.'
|
101
|
-
apply_measures('ReportingMeasure'.to_MeasureType, @registry, @options)
|
102
|
-
@logger.info('Finished applying Reporting measures.')
|
103
|
-
|
104
|
-
# Send the updated measure_attributes to the output adapter
|
105
|
-
@logger.debug 'Communicating measures output attributes to the output adapter'
|
106
|
-
@output_adapter.communicate_measure_attributes @registry[:output_attributes]
|
107
|
-
|
108
|
-
# Parse the files generated by the local output adapter
|
109
|
-
results, objective_functions = run_extract_inputs_and_outputs @registry[:run_dir], @logger
|
110
|
-
@registry.register(:results) { results }
|
111
|
-
|
112
|
-
# Send the objective function results to the output adapter
|
113
|
-
@logger.debug "Objective Function JSON is #{objective_functions}"
|
114
|
-
@output_adapter.communicate_objective_function objective_functions
|
115
|
-
|
116
|
-
nil
|
117
|
-
end
|
118
|
-
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
|
+
# Run reporting measures and execute scripts to post-process objective functions and results on the filesystem
|
37
|
+
class RunReportingMeasures < OpenStudio::Workflow::Job
|
38
|
+
require 'csv'
|
39
|
+
require 'ostruct'
|
40
|
+
require 'openstudio/workflow/util'
|
41
|
+
include OpenStudio::Workflow::Util::Model
|
42
|
+
include OpenStudio::Workflow::Util::Measure
|
43
|
+
include OpenStudio::Workflow::Util::PostProcess
|
44
|
+
|
45
|
+
def initialize(input_adapter, output_adapter, registry, options = {})
|
46
|
+
defaults = {
|
47
|
+
load_simulation_osm: false,
|
48
|
+
load_simulation_idf: false,
|
49
|
+
load_simulation_sql: false
|
50
|
+
}
|
51
|
+
options = defaults.merge(options)
|
52
|
+
super
|
53
|
+
end
|
54
|
+
|
55
|
+
def perform
|
56
|
+
@logger.debug "Calling #{__method__} in the #{self.class} class"
|
57
|
+
@logger.debug 'RunPostProcess Retrieving datapoint and problem'
|
58
|
+
|
59
|
+
# halted workflow is handled in apply_measures
|
60
|
+
|
61
|
+
# Ensure output_attributes is initialized in the registry
|
62
|
+
@registry.register(:output_attributes) { {} } unless @registry[:output_attributes]
|
63
|
+
|
64
|
+
# Load simulation files as required
|
65
|
+
unless @registry[:runner].halted
|
66
|
+
if @registry[:model].nil?
|
67
|
+
osm_path = File.absolute_path(File.join(@registry[:run_dir], 'in.osm'))
|
68
|
+
@logger.debug "Attempting to load #{osm_path}"
|
69
|
+
@registry.register(:model) { load_osm('.', osm_path) }
|
70
|
+
raise "Unable to load #{osm_path}" unless @registry[:model]
|
71
|
+
@logger.debug "Successfully loaded #{osm_path}"
|
72
|
+
end
|
73
|
+
if @registry[:model_idf].nil?
|
74
|
+
idf_path = File.absolute_path(File.join(@registry[:run_dir], 'in.idf'))
|
75
|
+
@logger.debug "Attempting to load #{idf_path}"
|
76
|
+
@registry.register(:model_idf) { load_idf(idf_path, @logger) }
|
77
|
+
raise "Unable to load #{idf_path}" unless @registry[:model_idf]
|
78
|
+
@logger.debug "Successfully loaded #{idf_path}"
|
79
|
+
end
|
80
|
+
if @registry[:sql].nil?
|
81
|
+
sql_path = File.absolute_path(File.join(@registry[:run_dir], 'eplusout.sql'))
|
82
|
+
if File.exist?(sql_path)
|
83
|
+
@registry.register(:sql) { sql_path }
|
84
|
+
@logger.debug "Registered the sql filepath as #{@registry[:sql]}"
|
85
|
+
end
|
86
|
+
# raise "Unable to load #{sql_path}" unless @registry[:sql]
|
87
|
+
end
|
88
|
+
if @registry[:wf].nil?
|
89
|
+
epw_path = File.absolute_path(File.join(@registry[:run_dir], 'in.epw'))
|
90
|
+
if File.exist?(epw_path)
|
91
|
+
@registry.register(:wf) { epw_path }
|
92
|
+
@logger.debug "Registered the wf filepath as #{@registry[:wf]}"
|
93
|
+
end
|
94
|
+
# raise "Unable to load #{epw_path}" unless @registry[:wf]
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# Apply reporting measures
|
99
|
+
@options[:output_adapter] = @output_adapter
|
100
|
+
@logger.info 'Beginning to execute Reporting measures.'
|
101
|
+
apply_measures('ReportingMeasure'.to_MeasureType, @registry, @options)
|
102
|
+
@logger.info('Finished applying Reporting measures.')
|
103
|
+
|
104
|
+
# Send the updated measure_attributes to the output adapter
|
105
|
+
@logger.debug 'Communicating measures output attributes to the output adapter'
|
106
|
+
@output_adapter.communicate_measure_attributes @registry[:output_attributes]
|
107
|
+
|
108
|
+
# Parse the files generated by the local output adapter
|
109
|
+
results, objective_functions = run_extract_inputs_and_outputs @registry[:run_dir], @logger
|
110
|
+
@registry.register(:results) { results }
|
111
|
+
|
112
|
+
# Send the objective function results to the output adapter
|
113
|
+
@logger.debug "Objective Function JSON is #{objective_functions}"
|
114
|
+
@output_adapter.communicate_objective_function objective_functions
|
115
|
+
|
116
|
+
nil
|
117
|
+
end
|
118
|
+
end
|
@@ -1,84 +1,84 @@
|
|
1
|
-
# *******************************************************************************
|
2
|
-
# OpenStudio(R), Copyright (c) 2008-
|
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
|
-
# Run the initialization job to validate the directory and initialize the adapters.
|
37
|
-
class RunTranslation < OpenStudio::Workflow::Job
|
38
|
-
require 'openstudio/workflow/util/model'
|
39
|
-
include OpenStudio::Workflow::Util::Model
|
40
|
-
|
41
|
-
def initialize(input_adapter, output_adapter, registry, options = {})
|
42
|
-
super
|
43
|
-
end
|
44
|
-
|
45
|
-
def perform
|
46
|
-
@logger.debug "Calling #{__method__} in the #{self.class} class"
|
47
|
-
|
48
|
-
# skip if halted
|
49
|
-
if @registry[:runner].halted
|
50
|
-
@logger.info 'Workflow halted, skipping OSM to IDF translation'
|
51
|
-
@registry.register(:model_idf) { OpenStudio::Workspace.new } # This allows model arguments to still be calculated
|
52
|
-
return nil
|
53
|
-
end
|
54
|
-
|
55
|
-
# Ensure that the run directory is created
|
56
|
-
FileUtils.mkdir_p(@registry[:run_dir])
|
57
|
-
|
58
|
-
# Copy in the weather file defined in the registry, or alternately in the options
|
59
|
-
if @registry[:wf]
|
60
|
-
@logger.info "Weather file for EnergyPlus simulation is #{@registry[:wf]}"
|
61
|
-
FileUtils.copy(@registry[:wf], "#{@registry[:run_dir]}/in.epw")
|
62
|
-
@registry.register(:wf) { "#{@registry[:run_dir]}/in.epw" }
|
63
|
-
else
|
64
|
-
@logger.warn "EPW file not found or not sent to #{self.class}"
|
65
|
-
end
|
66
|
-
|
67
|
-
# Translate the OSM to an IDF
|
68
|
-
@logger.info 'Beginning the translation to IDF'
|
69
|
-
@registry[:time_logger].start('Translating to EnergyPlus') if @registry[:time_logger]
|
70
|
-
model_idf = translate_to_energyplus @registry[:model], @logger
|
71
|
-
@registry[:time_logger].stop('Translating to EnergyPlus') if @registry[:time_logger]
|
72
|
-
@registry.register(:model_idf) { model_idf }
|
73
|
-
@logger.info 'Successfully translated to IDF'
|
74
|
-
|
75
|
-
# Save the generated IDF file if the :debug option is true
|
76
|
-
return nil unless @options[:debug]
|
77
|
-
@registry[:time_logger].start('Saving IDF') if @registry[:time_logger]
|
78
|
-
idf_name = save_idf(@registry[:model_idf], @registry[:root_dir])
|
79
|
-
@registry[:time_logger].stop('Saving IDF') if @registry[:time_logger]
|
80
|
-
@logger.debug "Saved IDF as #{idf_name}"
|
81
|
-
|
82
|
-
nil
|
83
|
-
end
|
84
|
-
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
|
+
# Run the initialization job to validate the directory and initialize the adapters.
|
37
|
+
class RunTranslation < OpenStudio::Workflow::Job
|
38
|
+
require 'openstudio/workflow/util/model'
|
39
|
+
include OpenStudio::Workflow::Util::Model
|
40
|
+
|
41
|
+
def initialize(input_adapter, output_adapter, registry, options = {})
|
42
|
+
super
|
43
|
+
end
|
44
|
+
|
45
|
+
def perform
|
46
|
+
@logger.debug "Calling #{__method__} in the #{self.class} class"
|
47
|
+
|
48
|
+
# skip if halted
|
49
|
+
if @registry[:runner].halted
|
50
|
+
@logger.info 'Workflow halted, skipping OSM to IDF translation'
|
51
|
+
@registry.register(:model_idf) { OpenStudio::Workspace.new } # This allows model arguments to still be calculated
|
52
|
+
return nil
|
53
|
+
end
|
54
|
+
|
55
|
+
# Ensure that the run directory is created
|
56
|
+
FileUtils.mkdir_p(@registry[:run_dir])
|
57
|
+
|
58
|
+
# Copy in the weather file defined in the registry, or alternately in the options
|
59
|
+
if @registry[:wf]
|
60
|
+
@logger.info "Weather file for EnergyPlus simulation is #{@registry[:wf]}"
|
61
|
+
FileUtils.copy(@registry[:wf], "#{@registry[:run_dir]}/in.epw")
|
62
|
+
@registry.register(:wf) { "#{@registry[:run_dir]}/in.epw" }
|
63
|
+
else
|
64
|
+
@logger.warn "EPW file not found or not sent to #{self.class}"
|
65
|
+
end
|
66
|
+
|
67
|
+
# Translate the OSM to an IDF
|
68
|
+
@logger.info 'Beginning the translation to IDF'
|
69
|
+
@registry[:time_logger].start('Translating to EnergyPlus') if @registry[:time_logger]
|
70
|
+
model_idf = translate_to_energyplus @registry[:model], @logger
|
71
|
+
@registry[:time_logger].stop('Translating to EnergyPlus') if @registry[:time_logger]
|
72
|
+
@registry.register(:model_idf) { model_idf }
|
73
|
+
@logger.info 'Successfully translated to IDF'
|
74
|
+
|
75
|
+
# Save the generated IDF file if the :debug option is true
|
76
|
+
return nil unless @options[:debug]
|
77
|
+
@registry[:time_logger].start('Saving IDF') if @registry[:time_logger]
|
78
|
+
idf_name = save_idf(@registry[:model_idf], @registry[:root_dir])
|
79
|
+
@registry[:time_logger].stop('Saving IDF') if @registry[:time_logger]
|
80
|
+
@logger.debug "Saved IDF as #{idf_name}"
|
81
|
+
|
82
|
+
nil
|
83
|
+
end
|
84
|
+
end
|
@@ -1,62 +1,62 @@
|
|
1
|
-
# *******************************************************************************
|
2
|
-
# OpenStudio(R), Copyright (c) 2008-
|
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 'logger'
|
37
|
-
|
38
|
-
class Logger
|
39
|
-
def format_message(severity, datetime, _progname, msg)
|
40
|
-
"[%s %s] %s\n"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
# Class to allow multiple logging paths
|
45
|
-
class MultiDelegator
|
46
|
-
def initialize(*targets)
|
47
|
-
@targets = targets
|
48
|
-
end
|
49
|
-
|
50
|
-
def self.delegate(*methods)
|
51
|
-
methods.each do |m|
|
52
|
-
define_method(m) do |*args|
|
53
|
-
@targets.map { |t| t.send(m, *args) }
|
54
|
-
end
|
55
|
-
end
|
56
|
-
self
|
57
|
-
end
|
58
|
-
|
59
|
-
class <<self
|
60
|
-
alias to new
|
61
|
-
end
|
62
|
-
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 'logger'
|
37
|
+
|
38
|
+
class Logger
|
39
|
+
def format_message(severity, datetime, _progname, msg)
|
40
|
+
format("[%s %s] %s\n", datetime.strftime('%H:%M:%S.%6N'), severity, msg)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Class to allow multiple logging paths
|
45
|
+
class MultiDelegator
|
46
|
+
def initialize(*targets)
|
47
|
+
@targets = targets
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.delegate(*methods)
|
51
|
+
methods.each do |m|
|
52
|
+
define_method(m) do |*args|
|
53
|
+
@targets.map { |t| t.send(m, *args) }
|
54
|
+
end
|
55
|
+
end
|
56
|
+
self
|
57
|
+
end
|
58
|
+
|
59
|
+
class <<self
|
60
|
+
alias to new
|
61
|
+
end
|
62
|
+
end
|