0

我在 OpenMDAO 中有一个没有输出的组件,用于为组的其他成员提供输入。尽管该组件的输出未连接,但仍调用该组件中的 apply_linear 。OpenMDAO 1.x 中的相关性降低算法不应该确定永远不需要调用此方法的 apply_linear 吗?

4

2 回答 2

2

事实证明,默认情况下不会启用基于每个变量的相关性降低。您可以通过以下方式打开它:

    prob.root.ln_solver = LinearGaussSeidel()
    prob.root.ln_solver.options['single_voi_relevance_reduction'] = True

此选项默认设置为 False,因为它通过为每个感兴趣的数量分配单独的向量来使用更多内存(尽管每个向量较小,因为它只包含相关变量,但总大小可能更大。)此外,相关性减少仅在使用 Linear Gauss Seidel 作为顶级线性求解器时才适用。

于 2015-11-20T20:38:03.243 回答
2

我的声誉还不够高,无法发表评论,所以我只是添加另一个答案。我只想提一下,如果您不是在 MPI 下运行,那么激活 single_voi_relevance_reduction 基本上是免费的。内存使用的真正增加不是由于向量本身,而是由于我们存储的索引数组,以便将数据从源数组传输到目标数组。我们被迫在 MPI 下使用索引数组,因为 PETSc 需要它,但是当我们不使用 MPI 时,我们使用 python 切片对象来进行数据传输。切片对象需要很少的内存。

于 2015-11-21T20:21:17.173 回答