Class: URBANopt::Scenario::ScenarioRunnerOSW
- Inherits:
-
ScenarioRunnerBase
- Object
- ScenarioRunnerBase
- URBANopt::Scenario::ScenarioRunnerOSW
- Defined in:
- lib/urbanopt/scenario/scenario_runner_osw.rb
Instance Method Summary collapse
-
#create_simulation_files(scenario, force_clear = false) ⇒ Object
Create all OSWs for Scenario.
-
#initialize ⇒ ScenarioRunnerOSW
constructor
ScenarioRunnerOSW is a class to create and run SimulationFileOSWs.
-
#run(scenario, force_clear = false) ⇒ Object
Create and run all SimulationFileOSW for Scenario.
Constructor Details
#initialize ⇒ ScenarioRunnerOSW
ScenarioRunnerOSW is a class to create and run SimulationFileOSWs
43 |
# File 'lib/urbanopt/scenario/scenario_runner_osw.rb', line 43 def initialize; end |
Instance Method Details
#create_simulation_files(scenario, force_clear = false) ⇒ Object
Create all OSWs for Scenario.
- parameters:
-
scenario- ScenarioBase - Scenario to create simulation input files for.force_clear- Bool - Clear Scenario before creating simulation input files.- return:
-
Array Returns array of all SimulationDirs, even those created previously, for Scenario.
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/urbanopt/scenario/scenario_runner_osw.rb', line 52 def create_simulation_files(scenario, force_clear = false) if force_clear scenario.clear end FileUtils.mkdir_p(scenario.run_dir) if !File.exist?(scenario.run_dir) simulation_dirs = scenario.simulation_dirs simulation_dirs.each do |simulation_dir| if simulation_dir.out_of_date? puts "simulation_dir #{simulation_dir.run_dir} is out of date, regenerating input files" simulation_dir.create_input_files end end return simulation_dirs end |
#run(scenario, force_clear = false) ⇒ Object
Create and run all SimulationFileOSW for Scenario. A staged runner is implented to run buildings, then transformers then district systems.
-
instantiate openstudio runner to run .osw files.
-
create simulation files for this scenario.
-
get feature_type value from in.osw files
-
cretae 3 groups to store .osw files (
building_osws,transformer_osws,district_system_osws) -
add each osw file to its corresponding group id
simulation_diris out_of_date -
Run osw file groups in order and store simulation failure in a array.
- parameters:
-
scenario- ScenarioBase - Scenario to create and run SimulationFiles for.force_clear- Bool - Clear Scenario before creating SimulationFiles.- return:
-
Array Returns array of all SimulationFiles, even those created previously, for Scenario.
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/urbanopt/scenario/scenario_runner_osw.rb', line 84 def run(scenario, force_clear = false) # instantiate openstudio runner - use the defaults for now. If need to change then create # the runner.conf file (i.e. run `rake openstudio:runner:init`) runner = OpenStudio::Extension::Runner.new(scenario.root_dir) # create simulation files simulation_dirs = create_simulation_files(scenario, force_clear) # osws = [] # simulation_dirs.each do |simulation_dir| # if !simulation_dir.is_a?(SimulationDirOSW) # raise "ScenarioRunnerOSW does not know how to run #{simulation_dir.class}" # end # if simulation_dir.out_of_date? # osws << simulation_dir.in_osw_path # end # end # cretae 3 groups to store .osw files (+building_osws+ , +transformer_osws+ , +district_system_osws+) building_osws = [] transformer_osws = [] district_system_osws = [] simulation_dirs.each do |simulation_dir| in_osw = File.read(simulation_dir.in_osw_path) in_osw_hash = JSON.parse(in_osw, symbolize_names: true) if !simulation_dir.is_a?(SimulationDirOSW) raise "ScenarioRunnerOSW does not know how to run #{simulation_dir.class}" end # get feature_type value from in.osw files feature_type = nil in_osw_hash[:steps].each { |x| feature_type = x[:arguments][:feature_type] if x[:arguments][:feature_type] } # add each osw file to its corresponding group id +simulation_dir+ is out_of_date if simulation_dir.out_of_date? if feature_type == 'Building' building_osws << simulation_dir.in_osw_path elsif feature_type == 'District System' district_system_osws << simulation_dir.in_osw_path elsif feature_type == 'Transformer' transformer_osws << simulation_dir.in_osw_path else raise "ScenarioRunnerOSW does not know how to run a #{feature_type} feature" end end end # Run osw groups in order and store simulation failure in a array. # Return simulation_dirs after running all simulations. # failures failures = [] # run building_osws # building_failures = runner.run_osws(building_osws, num_parallel = Extension::NUM_PARALLEL, max_to_run = Extension::MAX_DATAPOINTS) building_failures = runner.run_osws(building_osws) failures << building_failures # run district_system_osws # district_system_failures = runner.run_osws(district_system_osws, num_parallel = Extension::NUM_PARALLEL, max_to_run = Extension::MAX_DATAPOINTS) district_system_failures = runner.run_osws(district_system_osws) failures << district_system_failures # run transformer_osws # transformer_failures = runner.run_osws(transformer_osws, num_parallel = Extension::NUM_PARALLEL, max_to_run = Extension::MAX_DATAPOINTS) transformer_failures = runner.run_osws(transformer_osws) failures << transformer_failures # puts "failures = #{failures}" return simulation_dirs end |