如何获取OpenMDAO Group的未连接外部输入列表?
OpenMDAO:如何列出Group需外部提供的输入?
假设有如下OpenMDAO Group定义:
import openmdao.api as om class Sys(om.Group): def setup(self): self.add_subsystem('sys1', om.ExecComp('v1 = a + b'), promotes=['*']) self.add_subsystem('sys2', om.ExecComp('v2 = v1 + c'), promotes=['*']) if __name__ == '__main__': prob = om.Problem() model = prob.model comp = model.add_subsystem('comp', Sys(), promotes=['*']) prob.setup() prob.run_model() comp.list_inputs()
调用comp.list_inputs()后输出如下:
4 Input(s) in 'comp' varname val ------- ---- sys1 a [1.] b [1.] sys2 c [1.] v1 [2.]
可以看到,输出里包含了内部变量v1——这个变量是Group内部由sys1生成并传递给sys2的,不需要外部提供。我们需要的是只列出必须由外部提供的未连接输入的方法。
解决方案
你可以使用list_inputs方法的connected=False参数,该参数会过滤掉已经在内部连接的输入,只保留未连接的、需要外部提供的变量:
修改代码中的comp.list_inputs()为:
comp.list_inputs(connected=False)
此时输出会变成:
3 Input(s) in 'comp' varname val ------- ---- sys1 a [1.] b [1.] sys2 c [1.]
如果想要更简洁的、以Group顶层视角展示的输出,可以加上prom_name=True参数,显示变量的提升名称:
comp.list_inputs(connected=False, prom_name=True)
输出会变成:
3 Input(s) in 'comp' prom_name val --------- ---- a [1.] b [1.] c [1.]
这样就能清晰看到所有需要外部提供的输入变量了。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

