连接到OpenMDAO 2中的输入变量片吗?

时间:2019-06-24 19:40:17

标签: openmdao

我正在尝试将一个组件的较小尺寸的输出变量连接到另一组件的输入变量的特定切片。可以通过src_indices关键字进行相反的操作(将较大的输出的片段连接到较小的输入),例如下面的示例。

import numpy as np

import openmdao.api as om

p = om.Problem()

p.model.add_subsystem('C1', om.AddSubtractComp('y', 'x', vec_size=3,
                                               units=None, desc='', var_set=''))
p.model.add_subsystem('C2', om.AddSubtractComp('y', 'x', vec_size=2,
                                               units=None, desc='', var_set=''))

p.model.connect('C1.y', 'C2.x', src_indices=[0, 1])

p.setup()
p.run_model()

print(p['C2.y'])

但是,如果我想将C2.y连接到C1.x [0:2],该怎么办?似乎应该有一个“目标索引”关键字来镜像src_indices,但是我还没有发现任何东西。我已经尝试过了:

p.model.connect('C2.y', 'C1.x', src_indices=[0, 1, 0])

它可以工作,但是现在我已经将y [0]连接到x [2]了,这是不需要的。是否有可能做到这一点?

1 个答案:

答案 0 :(得分:0)

不幸的是,OpenMDAO 2不支持将输出连接到输入的某些子集。解决方法是,您可以创建一个“适配器”组件,该组件将较小的数组作为输入并输出较大的数组。例如:

import numpy as np

import openmdao.api as om

p = om.Problem()

p.model.add_subsystem('C2', om.AddSubtractComp('y', 'x', vec_size=2, units=None, desc=''))
p.model.add_subsystem('Adapter', om.ExecComp('y[:2]=x', x=np.zeros(2), y=np.zeros(3)))
p.model.add_subsystem('C1', om.AddSubtractComp('y', 'x', vec_size=3, units=None, desc=''))

p.model.connect('C2.y', 'Adapter.x')
p.model.connect('Adapter.y', 'C1.x')

p.setup()

p['C2.x'] = 5.

p.run_model()

print(p['C2.y'])
print(p['C1.y'])