Skip to content

Commit

Permalink
Improve scripts comments
Browse files Browse the repository at this point in the history
  • Loading branch information
relf committed Nov 10, 2022
1 parent a13a09e commit fda9d5d
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 17 deletions.
10 changes: 10 additions & 0 deletions app/lib/whats_opt/templates/recorder_partial.py.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Recording options
case_recorder_filename = '<%= @sqlite_filename %>'
recorder = om.SqliteRecorder(case_recorder_filename)
pb.driver.add_recorder(recorder)

# By default we record everything, but when dealing with 'big' matrices
# which can impair post processing performances (wop upload, visualization, etc.)
# you mai select which variables are included or excluded.
pb.driver.recording_options['includes'] = ['*']
pb.driver.recording_options['excludes'] = []
10 changes: 6 additions & 4 deletions app/lib/whats_opt/templates/run_doe.py.erb
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ from <%= @pkg_prefix %><%= @mda.py_modulename %> import <%= @mda.py_classname %>
<%- end -%>
from mda_init import initialize

# Command options
parser = OptionParser()
parser.add_option("--plot",
action="store_true", dest="plot", default=False,
Expand All @@ -31,6 +32,7 @@ parser.add_option("--parallel", default=False,
<%- end -%>
(options, args) = parser.parse_args()

# Problem definition
<%- if @egmdo -%>
<%- if @remote -%>
pb = om.Problem(<%= @mda.py_classname %>(discipline_factory=<%= @mda.py_classname %>Proxy(), plot=options.plot))
Expand All @@ -51,11 +53,9 @@ pb.driver = SmtDOEDriver(sampling_method_name='LHS', n_cases=options.n_cases,
pb.driver.options['run_parallel'] = options.parallel
<%- end -%>
case_recorder_filename = '<%= @sqlite_filename %>'
recorder = om.SqliteRecorder(case_recorder_filename)
pb.driver.add_recorder(recorder)
pb.driver.recording_options['includes'] = ['*']
<%= @generator.render_partial('recorder_partial.py.erb') %>

# Design variables
<%- if @mda.design_variables.empty? -%>
print("Error: You have to specify some design variables then update the run_doe.py script and retry.")
exit(-1)
Expand All @@ -68,12 +68,14 @@ exit(-1)
pb.model.add_design_var('<%= dv.name %>', lower=<%= dv.lower_py_value %>, upper=<%= dv.upper_py_value %><%= @impl.use_units && !dv.units.blank? ? ", units='#{dv.units}'":"" %>)
<%- end -%>

# Run DOE
pb.setup()
initialize(pb)

pb.run_driver()

<%- if (@mda.response_dim * @mda.design_var_dim) < 10 -%>
# Scatter plots
if options.plot:
reader = om.CaseReader(case_recorder_filename)
cases = reader.list_cases('driver')
Expand Down
30 changes: 17 additions & 13 deletions app/lib/whats_opt/templates/run_mdo.py.erb
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ from <%= @pkg_prefix %><%= @mda.py_modulename %> import <%= @mda.py_classname %>
<%- end -%>
from mda_init import initialize

# Problem definition
<%- if @egmdo %>
<%- if @remote -%>
pb = om.Problem(<%= @mda.py_classname %>(discipline_factory=<%= @mda.py_classname %>Proxy()))
Expand All @@ -37,6 +38,8 @@ pb = om.Problem(<%= @mda.py_classname %>())
<%- end -%>
<%- if @driver.pyoptsparse? -%>
# Subclass to give a well-formed name (i.e. '<lib>_optimizer_<algo>')
# used to manage results afterwards in WhatsOpt
class NamedPyOptSparseDriver(om.pyOptSparseDriver):
def _get_name(self):
return '<%= "pyoptsparse_optimizer_#{@driver.algo_option.downcase}" %>'
Expand All @@ -47,12 +50,15 @@ pb.driver = OneraSegoDriver()
<%- elsif @driver.egobox? -%>
pb.driver = EgoboxEgorDriver()
<%- else -%>
# Subclass to give a well-formed name (i.e. '<lib>_optimizer_<algo>')
# used to manage results afterwards in WhatsOpt
class NamedScipyOptimizeDriver(om.ScipyOptimizeDriver):
def _get_name(self):
return '<%= "scipy_optimizer_#{@driver.algo_option.downcase}" %>'
pb.driver = NamedScipyOptimizeDriver()
<%- end -%>

# Optimizer options
pb.driver.options['optimizer'] = '<%= @driver.algo_option %>'
<%- @driver.options.each do |k, v| -%>
pb.driver.options['<%= k %>'] = <%= v %>
Expand All @@ -64,11 +70,9 @@ pb.driver.opt_settings['<%= k %>'] = <%= v %>
# pb.driver.options['debug_print'] = ['desvars','ln_cons','nl_cons','objs', 'totals']
pb.driver.options['debug_print'] = []

case_recorder_filename = '<%= @sqlite_filename %>'
recorder = om.SqliteRecorder(case_recorder_filename)
pb.driver.add_recorder(recorder)
pb.driver.recording_options['includes'] = ['*']
<%= @generator.render_partial('recorder_partial.py.erb') %>

# Design variables
<%- if @mda.design_variables.empty? -%>
print("Error: You have to specify some design variables then update the run_<%= @egmdo ? "eg" : "" %>mdo.py script and retry.")
exit(-1)
Expand All @@ -81,6 +85,7 @@ exit(-1)
pb.model.add_design_var('<%= dv.name %>', lower=<%= dv.lower_py_value %>, upper=<%= dv.upper_py_value %><%= @impl.use_units && !dv.units.blank? ? ", units='#{dv.units}'":"" %>)
<%- end -%>

# Objective definition
<%- if @mda.objective_variables.empty? -%>
print("Error: You have to specify an optimization objective then update the run_<%= @egmdo ? "eg" : "" %>mdo.py script and retry.")
exit(-1)
Expand All @@ -104,11 +109,13 @@ pb.model.add_constraint('<%= voi.name %>', equals=<%= voi.cstr_init_py_value %><
pb.model.add_constraint('<%= voi.name %>', lower=<%= voi.cstr_lower_py_value %>, upper=<%= voi.cstr_upper_py_value %><%= @impl.use_units && !voi.units.blank? ? ", units='#{voi.units}'":"" %>)
<%- end -%>

# Run optimizer
pb.setup()
initialize(pb)

pb.run_driver()

# Print results
<%- if @egmdo -%>
if not MPI or (MPI and MPI.COMM_WORLD.rank == 0):
<%- @mda.design_variables.each do |dv| -%>
Expand All @@ -118,13 +125,10 @@ if not MPI or (MPI and MPI.COMM_WORLD.rank == 0):
<%- @mda.design_variables.each do |dv| %>
print("<%= dv.name %>= {}".format(pb['<%= dv.name %>']))<% end %>
<%- end %>
# Code snippet to read result data back from recorded file
# cr = om.CaseReader(case_recorder_filename)
# sources = cr.list_sources()
# print(sources)

# cases = cr.list_cases("driver")
# print(cases)

# for i in range(len(cases)):
# obj = cases[i]
# print(obj)
# cases = cr.get_cases()
# for case in cases:
# print(case.name, sorted(case.outputs))
# for name in case.outputs:
# print(f"{name}={case.outputs[name]}")

0 comments on commit fda9d5d

Please sign in to comment.