首页 > 解决方案 > 避免分析中的奇异性——OpenMDAO 是否自动启用“完全同步”解决方案?

问题描述

当以规定的边界层边缘速度 u e求解时,湍流边界层计算在流动分离点处失效,即所谓的直接法。

直接法

这可以通过以完全同时或准同时的方式求解系统来缓解。有关这两种方法的详细信息,请参见此处 ( https://www.rug.nl/research/portal/files/14407586/root.pdf ),第 38 页起。本质上,全同时法将无粘性和粘性方程组合成一个大型方程组,并用牛顿迭代法求解它们。

全同时法

我目前完全在 ExplicitComponents 中实现了一个无粘性面板求解器。我打算也完全使用 ExplicitComponents 来实现边界层求解器。我不确定这两个组的耦合是否会导致像直接方法一样的执行过程,或者它是否会像完全同时的方法一样工作。我注意到在 OpenMDAO 论文中,声明组件是“作为单个非线性方程组”求解的,并且从显式组件到隐式系统的重新表述由 OpenMDAO 自动处理。

这是否意味着如果我结合我的两个分析(再次,纯粹由 ExplicitComponents 组成)并将组设置为使用牛顿求解器求解,我将“免费”获得一个完全同步的解决方案?这似乎好得令人难以置信,因为最终集成边界层方程的组件将不得不将一些规定的 u e作为输入,然后在执行其 compute() 方法时会遇到奇点。

如果执行上述操作会使它像直接方法一样执行并导致奇点,(简要地)我需要进行哪些更改来避免它?是否需要隐式定义边界层组件?

标签: openmdaosimultaneouscoupling

解决方案


尽管看起来好得令人难以置信,但实际上您可以通过更改顶级求解器来更改系统的结构。

如果您在顶部使用NonlinearBlockGS求解器,它将以弱形式求解。如果您在顶部使用NewtonSolver,它将作为一个大型单片系统求解。这个属性确实源自 OpenMDAO 存储事物的独特结构。

有一些警告。我猜您的面板代码是作为一组中间计算实现的,这些计算被分解为多个组件。如果是这种情况,那么 NewtonSolver 将把每个中间变量视为它自己的状态变量。换句话说,您将不仅拥有状态,delta而且u_e还拥有所有中间计算。

这可能有点不稳定(尽管它可能工作得很好,所以试试吧!)。您可能需要弱形式和强形式之间的混合,这可以通过solve_subsystemsNewtonSolver 上的选项来实现。这种方法在 OpenMDAO 论文的第 5.1.2 节中称为分层牛顿法。它将为每个顶级牛顿迭代进行 NLBGS 的子迭代。这充当了一种非线性预条件子,可以帮助稳定强形式。您可以限制完成多少次子迭代,在您的情况下,由于存在奇异性的风险,您可能只想使用 2 或 3 次。


推荐阅读