避免分析中的奇异性 - OpenMDAO 是否会自动启用“完全同时”的解决方案?

问题描述

当以指定的边界层边缘速度 ue 求解时,湍流边界层计算会在流动分离点分解,称为直接方法

Direct method

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

Fully-simultaneous method

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

这是否意味着,如果我将我的两个分析(同样,纯粹由显式组件组成)结合起来,并将组设置为使用 Newton 求解器求解,我将“免费”获得一个完全同时的解决方案?这似乎好得令人难以置信,因为最终对边界层方程进行积分的组件必须将某些规定的 ue 作为输入,然后在执行其计算时遇到奇点() 方法

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

解决方法

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

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

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

这可能有点不稳定(虽然它可能工作得很好,所以试试吧!)。您可能需要弱形式和强形式之间的混合,这可以通过 solve_subsystems option on the NewtonSolver 实现。这种方法称为Hierarchical Newton Method in section 5.1.2 of the OpenMDAO paper。它将为每个顶级牛顿迭代执行 NLBGS 的子迭代。这是一种非线性预处理器,可以帮助稳定强形式。您可以限制完成的子迭代次数,在您的情况下,由于存在奇异性风险,您可能只想使用 2 或 3 个。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...