我尝试使用没有参数且没有未知数的组件用OpenMDAO包装三个外部代码。这是因为三个代码只接受输入文件和输出文件,并且不需要将输入变量“连接”到输出变量。但是,代码不按顺序运行(因为很明显,它们没有依赖信息)。然后我看到正确的方法是使用ExternalCodeComponent,但即使这样,我们仍然必须通过connect调用将输入连接到输出。
这是通过在一个组件输出和另一个输入上使用connect方法来指定依赖关系的唯一方法吗?当输出已经在输入文件中到下一个组件时,必须将输出传递给第二个组件似乎是多余的。如果它是强制性的,那么只是在其他组件上发送从未使用过的虚拟值,只是为了定义依赖项吗?
干杯。
答案 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不会将此部分模型排除在衍生计算中。