问题描述
我想创建一个 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
的 ExplicitComponent
,它们有自己的输入和输出,然后可能会被提升,这样看起来组本身就有这些输入或输出。
我不确定如何在没有组子组件的情况下提升命名输入,也不确定如何设置 OpenMDAO 数组的各个索引。
这实际上根本就不是MuxComp
的工作吗?我可以简单地构建一个“从头”构建数组的 ExplicitComponent 吗?
解决方法
这目前不在 MuxComp 的能力范围内,它假设数组输出 n
有一些名为 n_0
、n_1
、n_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)