【问题标题】:OpenMDAO: finite difference flag for Component.solve_nonlinearOpenMDAO:Component.solve_nonlinear 的有限差分标志
【发布时间】:2016-07-12 20:13:12
【问题描述】:

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

【问题讨论】:

    标签: openmdao


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我们目前没有这种能力,但其他人也要求在为复杂步骤运行 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 都需要知道这些信息。但是其他方法都没有。所以让它成为一个组件属性似乎有点不合适。

      【讨论】:

      • 我认为我们可以集思广益,提出一些不需要更改 API 的想法。
      • 我们确实也希望在使用复杂步骤时也具备这种能力。对于是否使用params 或作为由父类设置/取消设置的类属性,我没有偏好。提前感谢您查看此内容!
      猜你喜欢
      • 2016-03-25
      • 2015-08-24
      • 1970-01-01
      • 2013-09-30
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-02
      相关资源
      最近更新 更多