0

对于我们的某些组件,了解它是否作为有限差分计算的一部分执行会很有用。一个例子可能是一个网格组件,我们希望在 FD 期间保持相同的节点数和分布函数,并允许在主要迭代步骤期间重新划分网格。在旧的 OpenMDAO 中,我们可以从组件的itername. 是否有可能重新引入这一点,或者该信息是否已经可用于 Component 类?

4

2 回答 2

0

我想不出任何当前的方法来确定在调用 solve_nonlinear 时您是否在 FD 内,但由于您提到的原因,这是一个好主意。

于 2016-07-12T12:05:45.987 回答
0

我们目前没有这种能力,但其他人也要求在 solve_nonlinear 运行复杂步骤时得到通知。

做到这一点的一种方法是将 optional_argument 引入 solve_nonlinear ,例如call_mode="fd"orcall_mode="cs"call_mode="solve"。这种方法的唯一问题是它非常向后不兼容。

另一种方法是向组件添加一个常规的 python 属性,您可以检查诸如self.call_mode="solve"等。这将是一个非常容易的更改,我认为它可以达到目的。

最后一种可能的方法是将标志放入未知数/参数向量中。所以你会检查params.call_mode看看是什么模式。这有点明智,因为当您要进行复杂步骤时,它的参数值会发生变化。

我想我最喜欢最后一个选项。solve_nonlinear 和 apply_nonlinear 都需要知道这些信息。但是其他方法都没有。所以让它成为一个组件属性似乎有点不合适。

于 2016-07-12T12:07:12.993 回答