asm.connect('mycomp1.y', 'mycomp2.x[5]') 在 OpenMDAO 1.x.x
asm.connect('mycomp1.y', 'mycomp2.x[5]') in OpenMDAO 1.x.x
我是 OpenMDAO 的新手,我想构建一个 OpenMDAO 模型,该模型由一个包含多个风力涡轮机(组件)的风电场(组)组成。当计算所有涡轮机时,应根据所有涡轮机(风电场)的结果进行一些进一步的计算。例如:每个风力涡轮机组件计算其比功率输出,最后总功率应计算为涡轮机比功率的总和。
如转换指南中所述,新的 OpenMDAO 不支持以下功能:
asm.connect('windfarm.windturbine5.power', 'windfarm.eval.power[5]')
是否有任何变通方法可以实现 same/similar 结果?
谢谢,
杰罗姆
编辑:
以下示例现在有效:
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: 是否有一种简单的方法来遍历变量树(例如 params['summand'])?
您必须为每个风远输出单独输入。我建议如下:
asm.connect('windfarm.windturbine0.power', 'windfarm.eval.power:0')
asm.connect('windfarm.windturbine1.power', 'windfarm.eval.power:1')
我是 OpenMDAO 的新手,我想构建一个 OpenMDAO 模型,该模型由一个包含多个风力涡轮机(组件)的风电场(组)组成。当计算所有涡轮机时,应根据所有涡轮机(风电场)的结果进行一些进一步的计算。例如:每个风力涡轮机组件计算其比功率输出,最后总功率应计算为涡轮机比功率的总和。
如转换指南中所述,新的 OpenMDAO 不支持以下功能:
asm.connect('windfarm.windturbine5.power', 'windfarm.eval.power[5]')
是否有任何变通方法可以实现 same/similar 结果?
谢谢, 杰罗姆
编辑: 以下示例现在有效:
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: 是否有一种简单的方法来遍历变量树(例如 params['summand'])?
您必须为每个风远输出单独输入。我建议如下:
asm.connect('windfarm.windturbine0.power', 'windfarm.eval.power:0')
asm.connect('windfarm.windturbine1.power', 'windfarm.eval.power:1')