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