如何构建使用MuxComp将单个变量组合到数组中的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

我想创建一个OpenMDAO
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,)?否则它会抛出一个错误。是的,我倒过来了。谢谢你抓住它,我会修正答案,这样我们就不会传播错误的信息。