如何构建一个使用 MuxComp 将单个变量组合成数组的 OpenMDAO 组?

How do I build an OpenMDAO group that uses MuxComp to combine individual variables into an array?

我想创建一个 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 将值连接到一个数组中。但是,我不确定如何建立一个执行此操作的组。通常我会制作一个 Group of ExplicitComponents,它们有自己的输入和输出,然后可以提升它们,这样看起来组本身就有这些输入或输出。 我不确定如何在没有组的子组件的情况下提升命名输入,也不确定如何设置 OpenMDAO 数组的各个索引。

这实际上根本不是 MuxComp 的工作吗?我是否可以简单地构建一个构建数组 'from scratch'?

的 ExplicitComponent

这目前不在 MuxComp 的能力范围内,它假设数组输出 n 有一些名为 n_0n_1n_2 的输入, ...

如果这是一个非常常见的用例,我们可以考虑将此功能添加到 API,但是为这种情况构建 ExplicitComponent 并在计算中构建输出数组非常容易。这种情况下的部分都是线性的,因此可以在设置中指定 declare_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)