如何构建使用MuxComp将单个变量组合到数组中的OpenMDAO组?
我想创建一个OpenMDAO如何构建使用MuxComp将单个变量组合到数组中的OpenMDAO组?,openmdao,Openmdao,我想创建一个OpenMDAOom.Group,它将一些标量变量重新排列到数组中。我希望它有一组指定的输入和输出,比如 class IonMixMux(om.Group): r"""Multiplex ion data into arrays Inputs ------ nA : float m**-3, Species A density nB : float m**-3, Species B
om.Group
,它将一些标量变量重新排列到数组中。我希望它有一组指定的输入和输出,比如
class IonMixMux(om.Group):
r"""Multiplex ion data into arrays
Inputs
------
nA : float
m**-3, Species A density
nB : float
m**-3, Species B density
nC : float
m**-3, Species C density
AC : float
kg, Mass of species C
Outputs
-------
n : array
m**-3, Species densities
A : array
kg, Species masses
"""
输出n
应等于[nA,nB,nC]
,输出A
应等于[1,2,AC]
,因为物种A和B的质量始终分别为1和2
据我所知,使用MuxComp
可以(仅?)将值合并到一个数组中。然而,我不知道如何建立一个这样的团队。通常,我会创建一个组
,该组由ExplicitComponent
s组成,这些组件具有自己的输入和输出,然后可以对其进行升级,使其看起来像该组本身具有这些输入或输出。
我不知道如何在没有组的子组件的情况下提升命名输入,也不知道如何设置OpenMDAO数组的单个索引
这实际上根本不是MuxComp的工作吗?我可以简单地构建一个“从头开始”构建阵列的显式组件吗?这目前不在MuxComp的能力范围内,MuxComp假设阵列输出
n
具有一些名为n\u 0
,n\u 1
,n\u 2
我们可以考虑将这个能力添加到API中,如果这是一个非常常见的用例,但是很容易为这个案例构建一个显式组件,并在计算中构建输出数组。本例中的部分都是线性的,因此可以在设置中使用
declare\u partials
指定:
self.declare_partials(of='A', wrt='AC', rows=[0], cols=[2], val=1.0)
self.declare_partials(of='n', wrt='nA', rows=[0], cols=[0], val=1.0)
self.declare_partials(of='n', wrt='nB', rows=[1], cols=[0], val=1.0)
self.declare_partials(of='n', wrt='nC', rows=[2], cols=[0], val=1.0)
在这种情况下,将是行=[0]。。。[2] cols=[0],如果n被定义为具有一个形状=(3,)?否则它会抛出一个错误。是的,我倒过来了。谢谢你抓住它,我会修正答案,这样我们就不会传播错误的信息。