如何构建一个使用 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 ExplicitComponent
s,它们有自己的输入和输出,然后可以提升它们,这样看起来组本身就有这些输入或输出。
我不确定如何在没有组的子组件的情况下提升命名输入,也不确定如何设置 OpenMDAO 数组的各个索引。
这实际上根本不是 MuxComp
的工作吗?我是否可以简单地构建一个构建数组 'from scratch'?
的 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', 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)
我想创建一个 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 ExplicitComponent
s,它们有自己的输入和输出,然后可以提升它们,这样看起来组本身就有这些输入或输出。
我不确定如何在没有组的子组件的情况下提升命名输入,也不确定如何设置 OpenMDAO 数组的各个索引。
这实际上根本不是 MuxComp
的工作吗?我是否可以简单地构建一个构建数组 'from scratch'?
这目前不在 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', 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)