【发布时间】:2016-07-12 20:13:12
【问题描述】:
对于我们的某些组件,了解它是否作为有限差分计算的一部分执行会很有用。一个例子可能是一个网格组件,我们希望在 FD 期间保持相同的节点数和分布函数,并允许在主要迭代步骤期间重新划分网格。在旧的 OpenMDAO 中,我们可以从组件的itername 中检测到这一点。是否有可能重新引入此信息,或者该信息是否已可用于 Component 类?
【问题讨论】:
标签: openmdao
对于我们的某些组件,了解它是否作为有限差分计算的一部分执行会很有用。一个例子可能是一个网格组件,我们希望在 FD 期间保持相同的节点数和分布函数,并允许在主要迭代步骤期间重新划分网格。在旧的 OpenMDAO 中,我们可以从组件的itername 中检测到这一点。是否有可能重新引入此信息,或者该信息是否已可用于 Component 类?
【问题讨论】:
标签: openmdao
我想不出任何当前的方法来确定在调用 solve_nonlinear 时您是否在 FD 中,但由于您提到的原因,这是一个好主意。
【讨论】:
我们目前没有这种能力,但其他人也要求在为复杂步骤运行 solve_nonlinear 时得到通知。
一种方法是向solve_nonlinear 引入一个可选参数,例如call_mode="fd" 或call_mode="cs" 或call_mode="solve"。这种方法的唯一问题是它非常向后不兼容。
另一种方法是向组件添加一个常规的 python 属性,您可以检查它,例如self.call_mode="solve" 等。这将是一个非常简单的更改,我认为它可以达到目的。
最后一种可能的方法是将标志放入未知数/参数向量中。所以你会检查params.call_mode 看看是什么模式。这有点明智,因为当您要进行复杂步骤时,它的参数值会发生变化。
我认为我最喜欢最后一个选项。 solve_nonlinear 和 apply_nonlinear 都需要知道这些信息。但是其他方法都没有。所以让它成为一个组件属性似乎有点不合适。
【讨论】:
params 或作为由父类设置/取消设置的类属性,我没有偏好。提前感谢您查看此内容!