是否需要连接操作来强制执行openMDAO中的执行顺序?

时间:2016-10-12 21:02:17

标签: openmdao

我尝试使用没有参数且没有未知数的组件用OpenMDAO包装三个外部代码。这是因为三个代码只接受输入文件和输出文件,并且不需要将输入变量“连接”到输出变量。但是,代码不按顺序运行(因为很明显,它们没有依赖信息)。然后我看到正确的方法是使用ExternalCodeComponent,但即使这样,我们仍然必须通过connect调用将输入连接到输出。

这是通过在一个组件输出和另一个输入上使用connect方法来指定依赖关系的唯一方法吗?当输出已经在输入文件中到下一个组件时,必须将输出传递给第二个组件似乎是多余的。如果它是强制性的,那么只是在其他组件上发送从未使用过的虚拟值,只是为了定义依赖项吗?

干杯。

1 个答案:

答案 0 :(得分:0)

您可以使用设置顺序方法设置组中子系统的执行顺序。

def set_order(self, new_order):
    """ Specifies a new execution order for this system. This should only
    be called after all subsystems have been added.

    Args
    ----
    new_order : list of str
        List of system names in desired new execution order.
    """

如果您想查看该系统的当前订单,可以致电:

my_system.list_order()

您必须要小心,因为您可以使用set_order来使数据流按顺序运行。

请注意,这是您问题的快速解决方案,但我认为OpenMDAO通常可以更好地了解底层数据流,以便其他功能(如数据流查看器)正确显示内容。显然,你可以通过名义上传入和传出隔离组件来完成这项工作。此外,如果您正在进行梯度优化,那么连接也将使OpenMDAO不会将此部分模型排除在衍生计算中。