避免分析中的奇异性——OpenMDAO 是不是自动启用“完全同步”解决方案?
Posted
技术标签:
【中文标题】避免分析中的奇异性——OpenMDAO 是不是自动启用“完全同步”解决方案?【英文标题】:Avoiding singularity in analysis - does OpenMDAO automatically enable 'fully-simultaneous' solution?避免分析中的奇异性——OpenMDAO 是否自动启用“完全同步”解决方案? 【发布时间】:2021-05-12 15:03:39 【问题描述】:当使用规定的边界层边缘速度 ue 求解时,湍流边界层计算会在流动分离点失效,即所谓的直接法。
这可以通过以完全同时或准同时的方式求解系统来缓解。有关这两种方法的详细信息,请点击此处 (https://www.rug.nl/research/portal/files/14407586/root.pdf),从第 38 页开始。本质上,全同时法将非粘性方程和粘性方程组合成一个大型方程组,并通过牛顿迭代求解。
我目前已经完全在 ExplicitComponents 中实现了一个无粘性面板求解器。我打算也完全使用 ExplicitComponents 来实现边界层求解器。我不确定这两个组的耦合是否会导致像直接方法一样的执行过程,或者它是否会像完全同时的方法一样工作。我注意到在 OpenMDAO 论文中,声明组件是“作为单个非线性方程组”求解的,并且从显式组件到隐式系统的重新表述由 OpenMDAO 自动处理。
这是否意味着如果我将我的两个分析(再次,纯粹由 ExplicitComponents 组成)并设置组以使用牛顿求解器求解,我将“免费”获得一个完全同步的解决方案?这似乎好得令人难以置信,因为最终集成边界层方程的组件必须将一些规定的 ue 作为输入,然后在执行其计算时会遇到奇点() 方法。
如果执行上述操作会使其像直接方法一样执行并导致奇点,(简要地)我需要进行哪些更改来避免它?是否需要隐式定义边界层组件?
【问题讨论】:
【参考方案1】:尽管看起来好得令人难以置信,但实际上您可以通过更改***求解器来更改系统的结构。
如果您在顶部使用NonlinearBlockGS 求解器,它将以弱形式求解。如果您在顶部使用NewtonSolver,它将作为一个大型单片系统解决。这个属性确实源自 OpenMDAO 存储事物的独特结构。
有一些注意事项。我猜您的面板代码是作为一组中间计算实现的,这些计算被分解为多个组件。如果是这种情况,那么 NewtonSolver 将把每个中间变量视为它自己的状态变量。换句话说,您不仅有delta
和u_e
作为状态,还有所有中间计算。
这可能有点不稳定(尽管它可能工作得很好,所以试试吧!)。您可能需要弱形式和强形式之间的混合,这可以通过solve_subsystems
option on the NewtonSolver 实现。这种方法称为Hierarchical Newton Method in section 5.1.2 of the OpenMDAO paper。它将为每个***牛顿迭代进行 NLBGS 的子迭代。这充当了一种非线性预条件子,可以帮助稳定强形式。您可以限制完成多少次子迭代,在您的情况下,您可能只想使用 2 或 3 次,因为存在奇异性的风险。
【讨论】:
如果组件在 compute() 方法中遇到奇点,这到底是怎么可能的?它(大致)接受边缘速度和距离数组的输入,然后沿着距离推进微分方程。据我了解,这个过程在分离点达到了奇点。 OpenMDAO 是否以某种方式回避了 compute() 函数,还是我让它看起来好像我的组件工作方式不同? 我可能没有完全理解。我假设这两种方法的方程是相同的。但是,您对“一次行军而另一次行军”的描述意味着工作中的集成有不同的数学公式。换句话说,控制方程的提出方式不同。如果是这样的话,那么 OpenMDAO 就不会变魔术。它可以改变给定方程组的求解方式,但不能改变方程本身 我认为如果我隐式定义组件,您所说的是正确的 - 我会在某个时候用我的隐式公式更新这个问题,看看是否有可能用一个显式公式。以上是关于避免分析中的奇异性——OpenMDAO 是不是自动启用“完全同步”解决方案?的主要内容,如果未能解决你的问题,请参考以下文章