Setting the Order of Subsystems in a Group
Contents
Setting the Order of Subsystems in a Group¶
By default, subsystems are executed in the same order in which they were added to
their parent Group. In order to change this order, use the set_order
method.
- Group.set_order(new_order)[source]
Specify a new execution order for this system.
- Parameters
- new_orderlist of str
List of system names in desired new execution order.
The list of names provided to set_order
must contain every subsystem that has
been added to the Group.
Note
Use caution when setting the order of execution of your subsystems, whether
by just calling add_subsystem
in a specific order, or by later changing
the order using set_order
. If you choose an order that doesn’t follow
the natural data flow order of your subsystems, your model may take longer
to converge.
Usage¶
Change the execution order of components C1 and C3.
import openmdao.api as om
class ReportOrderComp(om.ExplicitComponent):
"""Adds name to list."""
def __init__(self, order_list):
super().__init__()
self._order_list = order_list
def compute(self, inputs, outputs):
self._order_list.append(self.pathname)
# this list will record the execution order of our C1, C2, and C3 components
order_list = []
prob = om.Problem()
model = prob.model
model.add_subsystem('C1', ReportOrderComp(order_list))
model.add_subsystem('C2', ReportOrderComp(order_list))
model.add_subsystem('C3', ReportOrderComp(order_list))
prob.setup()
prob.run_model()
print(order_list)
['C1', 'C2', 'C3']
# reset the shared order list
order_list[:] = []
prob.setup()
# now swap C2 and C1 in the order
model.set_order(['C2', 'C1', 'C3'])
# after changing the order, we must call setup again
prob.setup()
prob.run_model()
print(order_list)
['C2', 'C1', 'C3']