OpenMDAO 1.x.x中的asm.connect(';mycop1.y';,';mycop2.x[5]';)

OpenMDAO 1.x.x中的asm.connect(';mycop1.y';,';mycop2.x[5]';),openmdao,Openmdao,我是OpenMDAO的新手,我想构建一个OpenMDAO模型,包括一个包含多个风力涡轮机(组件)的风电场(组)。计算所有涡轮机时,应根据所有涡轮机(风电场)的结果进行进一步计算。例如:每个风力涡轮机部件计算其比功率输出,最终总功率应计算为涡轮机比功率之和 正如转换指南中所述,新OpenMDAO不支持以下功能: asm.connect('windfarm.windturbine5.power', 'windfarm.eval.power[5]') 是否有任何方法可以达到相同/类似的结果 谢谢,,

我是OpenMDAO的新手,我想构建一个OpenMDAO模型,包括一个包含多个风力涡轮机(组件)的风电场(组)。计算所有涡轮机时,应根据所有涡轮机(风电场)的结果进行进一步计算。例如:每个风力涡轮机部件计算其比功率输出,最终总功率应计算为涡轮机比功率之和

正如转换指南中所述,新OpenMDAO不支持以下功能:

asm.connect('windfarm.windturbine5.power', 'windfarm.eval.power[5]')
是否有任何方法可以达到相同/类似的结果

谢谢,, 杰罗姆


编辑: 以下示例现在起作用:

from openmdao.api import IndepVarComp, Component, Problem, Group


class Summer(Component):

    def __init__(self):
        super(Summer, self).__init__()
        self.add_param('summand:x0', val=0.0)
        self.add_param('summand:x1', val=0.0)
        self.add_output('sum', shape=1)

    def solve_nonlinear(self, params, unknowns, resids):
        x0 = params['summand:x0']
        x1 = params['summand:x1']
        unknowns['sum'] = x0 + x1


if __name__ == "__main__":
    top = Problem()
    root = top.root = Group()
    root.add('wt0', IndepVarComp('power', 1000.0))
    root.add('wt1', IndepVarComp('power', 2000.0))
    root.add('eval', Summer())
    root.connect('wt0.power', 'eval.summand:x0')
    root.connect('wt1.power', 'eval.summand:x1')
    top.setup()
    top.run()
    print(top['eval.sum'])

PS:是否有一种简单的方法来循环变量树(例如参数['summand'])?

您必须为每个风远输出单独输入。我建议如下:

asm.connect('windfarm.windturbine0.power', 'windfarm.eval.power:0')
asm.connect('windfarm.windturbine1.power', 'windfarm.eval.power:1')

您好,Justin,仅用数字命名变量树中的变量会导致错误:
NameError::“summand:0”不是有效的变量名。
但其工作原理与我添加到问题中的示例类似。非常感谢。