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

问题描述

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

这实际上根本就不是MuxComp的工作吗?我可以简单地构建一个“从头”构建数组的 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',cols=[0],val=1.0)
self.declare_partials(of='n',wrt='nB',rows=[1],wrt='nC',rows=[2],val=1.0)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...