ANSYS Fluent求解器包含两种形式的多重网格:代数多重网格(AMG)和全近似存储(FAS)。AMG是基于压力和基于密度的隐式求解器的基本组成部分,而FAS是基于密度的显式求解器的重要但可选的组成部分。(请注意,当使用基于密度的显式求解器时,也会使用AMG,因为标量方程(例如,湍流)是使用《通用标量输运方程:离散化和求解》(第964页)中描述的方法求解的。)
本节描述了多重网格方法的数学基础。首先介绍了AMG和FAS的共同特点,然后分别提供了每种方法独有的详细信息。
信息组织如下:
- 23.7.1. 方法
- 23.7.2. 多重网格循环
- 23.7.3. 代数多重网格(AMG)
- 23.7.4. 全近似存储(FAS)多重网格
有关多重网格求解器的用户输入和控制信息,请参阅《用户指南》中的“修改代数多重网格参数”和“设置FAS多重网格参数”。
23.7.1 方法
ANSYS Fluent使用多重网格方案来加速求解器的收敛,通过在一系列粗网格级别上计算修正。使用这种多重网格方案可以大大减少获得收敛解所需的迭代次数和CPU时间,特别是在模型包含大量控制体积时。
23.7.1.1 多重网格的需求
非结构网格上线性化方程组的隐式求解因缺乏与结构网格上常用的线迭代方法相媲美的技术而变得复杂。鉴于直接矩阵求逆对于实际问题而言不切实际,且依赖共轭梯度(CG)方法的“全场”求解器存在与之相关的鲁棒性问题,首选的方法是诸如高斯-赛德尔和不完全LU分解(ILU)这样的点隐式求解器。尽管高斯-赛德尔和ILU方案能迅速消除解中的局部(高频)误差,但全局(低频)误差的减少速度与网格尺寸成反比。因此,对于大量节点,求解器会“停滞”,残差减少率变得极低。
密度基显式求解器中采用的多级方案同样能有效消除局部(高频)误差。也就是说,一个单元内的解效果能相对迅速地传递给相邻单元。然而,该方案在减少全局(低频)误差——即存在于大量控制体积中的误差——方面效果较差。因此,跨大量控制体积的全局修正会在多次迭代中缓慢进行。这意味着随着控制体积数量的增加,多级方案的性能将下降。
多重网格技术通过使用一系列逐渐粗化的网格来处理全局误差。这一方法基于以下原理:在细网格上存在的全局(低频)误差可以在粗网格上表示,此时它再次变为可访问的局部(高频)误差:由于总体上粗网格单元较少,全局校正可以在相邻单元之间更快地传递。由于在粗网格上进行计算时,CPU时间和内存存储的开销呈指数级衰减,因此有可能非常高效地消除全局误差。在这种情况下,细网格松弛方案或“平滑器”,无论是点隐式线性求解器(耦合和标量AMG求解器(第1016页))还是显式多级方案,都不需要特别有效地减少全局误差,而是可以针对高效减少局部误差进行调整。
23.7.1.2 多重网格的基本概念
考虑由以下离散化线性(或线性化)方程组给定的情况:
其中 是精确解。在解尚未收敛之前,近似解 会存在一个缺陷 :
我们寻求一个对的修正,使得精确解由以下表达式给出:
将方程23.117(第1008页)代入方程23.115(第1008页)得到
现在利用公式23.116(第1008页)和公式23.118(第1009页),我们得到
这是一个关于原始细层算子和缺陷的校正方程。假设细层上的局部(高频)误差已经通过松弛方案得到充分抑制,那么校正将会是平滑的,因此更有效地在下一个更粗的层级上求解。
23.7.1.3 限制与延拓
在粗层上求解校正需要将缺陷从细层下传(限制),计算校正,然后将校正从粗层上传(延拓)。我们可以写出粗层校正的方程为:
其中, 表示粗水平算子,而 则是负责将细水平缺陷传递至粗水平的限制算子。在求解方程 23.121(第 1009 页)之后,随之进行的是由以下公式给出的细水平解的更新:
其中, 是延拓算子,用于将粗网格级别的修正传递到细网格级别。
23.7.1.4 非结构化多重网格
在非结构化网格上使用多重网格的主要难点在于粗网格层次的创建和使用。在结构化网格上,粗网格可以通过简单地从细网格中移除每隔一个网格线来形成,并且延拓和限制算子的制定也很简单(例如,注入和双线性插值)。
非结构化网格上应用多重网格的困难通过两种多重网格方法在 Ansys Fluent 中分别以不同的方式克服。虽然到目前为止讨论的基本原则和多重网格循环中描述的循环策略是相同的,但限制、延拓和粗网格算子的构建技术是不同的,正如在代数多重网格(AMG)(第 1013 页)和全近似存储(FAS)多重网格(第 1018 页)中分别针对 AMG 和 FAS 方法所讨论的那样。
23.7.2 多重网格循环
多重网格循环可以定义为一种递归过程,在遍历网格层次结构时在每个网格级别上应用。Ansys Fluent 提供了四种多重网格循环:V 循环、W 循环、F 循环和灵活("flex")循环。V 循环和 W 循环在 AMG 和 FAS 中都可用,而 F 循环和Flexible循环仅限于 AMG 方法。(由于所需的计算量,W 循环和灵活 AMG 循环不适用于求解耦合方程组。)
23.7.2.1 V 循环和 W 循环
图23.9:V-Cycle多重网格(第1010页)和图23.10:W-Cycle多重网格(第1011页)展示了V和W多重网格循环(如下定义)。在每个图中,多重网格循环由一个正方形表示,然后递归展开以显示循环内执行的各个步骤。各个步骤由一个圆圈、一个或多个正方形和一个三角形表示,由线条连接:V循环为圆圈-正方形-三角形,或W循环为圆圈-正方形-正方形-三角形。这一组中的正方形再次展开,形成圆圈-正方形-三角形或圆圈-正方形-正方形-三角形,依此类推。在阅读以下步骤时,您可能希望参考图示。
图23.9:V-Cycle多重网格
图23.10:W-Cycle多重网格
对于V和W循环,层次结构的遍历由三个参数、和控制,如下所示:
- 首先,在当前网格级别上执行迭代,以减少误差的高频分量(局部误差)。对于AMG,一次迭代包括一次前向和一次后向的Gauss-Seidel扫描。对于FAS,一次迭代包括多阶段方案的一次传递(在显式公式(第1000页)中描述)。
这些迭代称为预松弛扫描,因为它们在移动到下一个更粗网格级别之前执行。预松弛扫描的次数由指定。
在图23.9:V-Cycle多重网格(第1010页)和图23.10:W-Cycle多重网格(第1011页)中,这一步骤由一个圆圈表示,并标志着多重网格循环的开始。误差的高波数分量应被减少,直到剩余误差在下一个较粗网格上表示而不会产生显著的混叠。如果这是最粗的网格级别,那么该级别上的多重网格循环即告完成。(因此,代表第3级多重网格循环的方块等同于一个圆圈,如图中每个图的最终图示所示。)
重要提示:在AMG方法中,的默认值为零(即不执行预松弛扫描)。
- 接下来,使用公式23.121(第1009页)将问题“限制”到下一个较粗的网格级别。
在图23.9:V-Cycle多重网格(第1010页)和图23.10:W-Cycle多重网格(第1011页)中,从细网格级别到粗网格级别的限制由一条向下倾斜的线表示。
-
通过执行指定次数的多重网格循环(在图23.9:V-Cycle多重网格(第1010页)和图23.10:W-Cycle多重网格(第1011页)中用方块表示)来减少粗网格上的误差。通常,对于固定的多重网格策略,为1或2,分别对应于V-Cycle和W-Cycle多重网格。
-
接下来,使用公式23.122(第1009页)将粗网格上计算的累积修正“插值”回细网格,并添加到细网格解中。在FAS方法中,这一步骤还会使用隐式残差平滑(第1000页)中讨论的拉普拉斯平滑算子对修正进行额外平滑。
在图23.9:V-Cycle多重网格(第1010页)和图23.10:W-Cycle多重网格(第1011页)中,延长由一条向上倾斜的线表示。
当前存在于细网格级别的高频误差是由于用于传输校正的延长过程所导致的。
- 在最后一步中,在细网格上执行迭代以消除由多重网格循环在粗网格上引入的高频误差。这些迭代被称为后松弛扫描,因为它们是在从下一个更粗的网格级别返回后执行的。后松弛扫描的次数由 指定。
在图23.9:V-循环多重网格(第1010页)和图23.10:W-循环多重网格(第1011页)中,这一松弛过程用一个三角形表示。
对于AMG, 的默认值为1。
重要提示:然而,请注意,如果您正在使用AMG与V-循环来解决具有各向异性或非常高导热系数的固体导热模型的能量方程,可能会出现默认后松弛扫描为1时的发散情况。在这种情况下,您应该在AMG部分增加后松弛扫描次数(例如,增加到2)以获得更好的收敛性,或者将循环类型更改为F-循环或W-循环,并将下松弛因子设置为1。这在计算纯热传导或共轭热传递时特别有效。在使用F-循环或W-循环时观察到的任何不稳定性,可以通过将预松弛扫描次数增加到1来解决。尽管默认值0对于大多数情况是最优的,但将预松弛扫描值增加到1或2可以改善收敛性。
由于 的默认值为0(即不执行预松弛扫描),这一过程大致相当于使用粗级别的解作为细级别解的初始猜测。
对于FAS方法, 的默认值为零(即不执行后松弛扫描);在最细网格级别的循环结束时,无论 的值如何,都不会执行后松弛扫描。这是因为对于FAS方法,在细级别上的后松弛扫描等同于下一循环中的预松弛扫描。
23.7.3 代数多重网格(AMG)
该算法被称为“代数”多重网格方案,因为正如我们将看到的,粗级别方程的生成不依赖于任何几何信息或在粗级别上的重新离散化;这一特性使得AMG特别适用于非结构化网格。其优势在于无需构建或存储粗网格,也无需在粗级别上评估通量或源项。这种方法与FAS(有时称为“几何”)多重网格形成对比,后者需要一系列网格层次,并在每个级别上评估离散方程。理论上,FAS相对于AMG的优势在于前者应能更好地处理非线性问题,因为系统的非线性通过重新离散化传递到粗级别;而使用AMG时,一旦系统线性化,非线性在细级别操作符下一次更新之前不会被求解器“感知”。
23.7.3.1 AMG限制和延拓算子
此处所用的限制与延拓算子基于Hutchinson和Raithby[265](第1072页)针对结构化网格描述的加性校正(AC)策略。层级间的传递通过分段常数插值和延拓实现。粗网格单元中的缺陷由其包含的细网格单元缺陷之和给出,而细网格的修正则通过注入粗网格的值获得。如此一来,延拓算子即为限制算子的转置。
限制算子通过将细网格单元“分组”为粗网格单元来定义。在此过程中,每个细网格单元与其一个或多个“最强”邻居分组,优先选择当前未分组的邻居。算法尝试将单元收集到固定大小的组中,通常是两个或四个,但可以指定任何数量。
默认情况下,“最强”邻居被评估为当前单元 的邻居 ,其中系数 最大。对于一组耦合方程, 是一个块矩阵,其大小的度量简单地取其第一个元素的大小。此外,给定单元的耦合方程集一起处理,不在不同的粗网格单元之间划分。这导致系统中每个方程的粗化相同。
您可以选择启用基于系数强度和分区的多重网格粗化调整的保守粗化方案,以及针对更高粗化率优化的激进粗化方案。或者,您可以启用 Laplace 粗化,以便 Ansys Fluent 在确定粗化时使用 Laplace 系数作为强度因子。有关详细信息,请参阅 Fluent 用户指南中的粗化参数。
23.7.3.2 AMG 粗网格层算子
粗网格层算子 使用 Galerkin 方法构建。这里我们要求与修正的细网格层解相关的缺陷在转移回粗网格层时必须消失。因此我们可以写
将方程23.116(第1008页)和方程23.122(第1009页)代入和,我们得到:
重新整理并再次使用公式 23.116(第 1008 页),得到
将方程 23.126(第 1014 页)与方程 23.121(第 1009 页)进行比较,可以得到粗化层级算子的如下表达式:
因此,构建粗级别算子简化为对组内所有细级别单元进行对角块及其相应非对角块的求和,以形成该组粗单元的对角块。
23.7.3.3 F 循环
多重网格 F 循环本质上是 V 循环和 W 循环的组合,如 V 循环和 W 循环(第 1010 页)所述。
请记住,多重网格循环是一个递归过程。该过程通过在当前级别执行一次多重网格循环扩展到下一个更粗的网格级别。参见图 23.9:V 循环多重网格(第 1010 页)和图 23.10:W 循环多重网格(第 1011 页),这意味着将当前级别的正方形(代表一个循环)替换为 0-1 级别循环所示的过程(每个图中的第二个图)。我们看到 V 循环包括:
以及一个W周期:
一个F循环由一个W循环紧接着一个V循环构成:
正如预期,F循环所需的计算量比V循环多,但比W循环少。然而,它的收敛性能却优于V循环,且大致与W循环相当。F循环是耦合方程组和标量能量方程的默认AMG循环类型。
23.7.3.4 Flexible循环
对于Flexible循环,粗网格修正的计算和使用在多重网格过程中由图23.11所示的逻辑控制:控制灵活多重网格循环的逻辑(第1015页)。这一逻辑确保当当前网格层上的残差减少速率过慢时,会调用更粗网格的计算。此外,多重网格控制决定当前粗网格层上的修正迭代何时足够收敛,因此应应用于下一个更细网格的解。这两个决策由图23.11所示的参数和控制,具体描述如下。请注意,多重网格过程的逻辑是这样的:在一个方程的单次全局迭代中,可能会多次访问各个网格层。对于一组4个多重网格层,分别称为和,解决给定输运方程的Flexible循环多重网格过程可能包括按0-1-2-3-2-3-2-1-0-1-2-1-0的顺序访问网格层。
图23.11:控制灵活多重网格循环的逻辑
Flexible循环与V循环和W循环的主要区别在于,Flexible循环中残差减少容差和终止标准的满足决定了何时以及多频繁地访问每个层级,而在V和W循环中,遍历模式是明确规定的。
23.7.3.4.1 残差减少率准则
多重网格法在当前级别的误差减少率不足以满足定义的条件时,会调用下一级较粗网格上的计算。
这里, 是在当前网格层级经过第 次松弛后计算得到的残差(缺陷)的绝对和。上述方程表明,如果在经过 次松弛后的迭代解中存在的残差大于在经过第 次松弛后存在的残差的某个分数 (介于 0 和 1 之间),则应访问下一个更粗的网格层级。因此, 被称为残差缩减容差,并决定了何时在当前网格层级上“放弃”迭代解,转而在下一个更粗的网格层级上求解修正方程。 的值控制了访问更粗网格层级的频率。默认值为 0.7。较大的值会导致访问频率降低,而较小的值会导致访问频率增加。
23.7.3.4.2 终止准则
如果残差缩减速率足够快,则当前网格层级上的修正方程将收敛,并将结果应用于下一个更细网格层级上的解场。
当修正解中的误差被缩减到当前网格层级上原始误差的某个分数 (介于 0 和 1 之间)时,当前网格层级上的修正方程被认为足够收敛:
在这里, 表示在当前网格层级上进行第 次迭代后的残差,而 则是在当前全局迭代开始时,在此网格层级上最初获得的残差。参数 ,被称为终止准则,其默认值为 0.1。请注意,上述方程同样用于在多重网格过程中终止最底层(最精细层级)的计算。因此,在每个网格层级(包括最精细层级)上,松弛操作会持续进行,直到满足该方程的准则为止(或者在达到最大松弛次数的情况下,如果指定的准则始终未被满足)。
23.7.3.5 耦合与标量 AMG 求解器
标量 AMG 求解器用于求解由单独输运方程离散化得到的线性系统。
上述方程中包含标量变量。
耦合式代数多重网格(AMG)求解器用于求解线性输运方程,这些方程采用隐式离散化方法从耦合系统中获得,例如基于密度的求解器中的流动变量、基于耦合压力的方案中的压力-速度变量,以及欧拉多相流中的相间耦合单个方程。
细胞对细胞的影响形式为
未知向量和源向量具有以下形式:
上述方程组系统在Ansys Fluent中采用高斯-赛德尔平滑器或不完全下上分解(ILU)平滑器进行求解。若需解标量方程组,则使用点方法(高斯-赛德尔或ILU)平滑器;而对于耦合方程组,则采用块方法(高斯-赛德尔或ILU)平滑器。
23.7.3.5.1 高斯-赛德尔方法
高斯-赛德尔方法是一种逐个、按顺序求解线性方程组的技术。它一旦获得先前计算的结果,便立即使用。该方法对未知数进行前后两次扫描。Ansys Fluent中提供了点方法或块方法的高斯-赛德尔平滑器,用于求解标量AMG方程组或耦合AMG方程组。
高斯-赛德尔过程可通过标量系统(公式23.133,第1016页)来说明。前向扫描可表示为:
其中, 表示未知数的数量。正向扫描之后是反向扫描,可以表示为:
根据公式23.138(第1017页)和公式23.139(第1017页),对称高斯-赛德尔法可以用矩阵形式表示为系统的两步递归求解过程。
其中,、 和 分别表示矩阵 的对角部分、下三对角部分和上三对角部分。
对称高斯-赛德尔(Symmetric Gauss-Seidel)在 AMG 层次间的残差平滑速率有一定限制,除非粗化因子设为 2。
23.7.3.5.2 不完全下三角-上三角(ILU)
一种更有效的 AMG 平滑器基于 ILU 分解技术。通常,任何迭代方法都可以表示为
矩阵 是原始矩阵 的某种近似。
应接近 ,且计算 的操作次数应较少。我们将 视为矩阵 的不完全下上分解,以满足这一要求。
其中,和分别是矩阵A的下三对角和上三对角部分。对角矩阵以一种特殊方式计算,以满足矩阵M的对角线的如下条件:
在这种情况下, 的对角线上第 个元素将通过以下方式计算:
新的解 的计算通过两个对称的递归扫描来执行,类似于Gauss-Seidel扫描。ILU分解的对角元素 在构建层次时计算并存储在内存中。与Gauss-Seidel相比,ILU平滑器略显昂贵,但具有更好的平滑特性,特别是对于通过耦合AMG求解的块耦合系统。在这种情况下,可以使用介于8和12之间的粗化因子对3D问题进行更积极的粗化,而Gauss-Seidel为2。
重要提示:在求解耦合系统时,通过使用默认的ILU平滑器(而不是标量系统的默认平滑器Gauss-Seidel)可以获得更短的求解时间和更稳健的性能。建议在任何使用耦合AMG求解器的情况下使用ILU。它默认用于耦合方程,并且在选择伪时间方法时用于标量方程。
23.7.4 全近似存储(FAS)多重网格
Ansys Fluent 形成 FAS 多重网格层次结构的方法是将细网格上的一组单元合并以形成粗网格单元。粗网格单元是通过聚合围绕节点的单元创建的,如图23.12所示:节点聚合形成粗网格单元(第1019页)。根据网格拓扑结构,这可能导致具有不规则形状和不同面数的单元。然而,网格层次结构易于构建并且嵌套,从而产生简单的延展和平滑操作符。
图23.12:节点聚合形成粗网格单元
值得注意的是,尽管粗网格单元看起来非常不规则,但离散化过程无法“察觉”到单元面上的锯齿状细节。离散化仅使用单元面的面积投影,因此每一组分隔两个不规则形状单元的“锯齿状”单元面相当于一条连接锯齿段端点的直线(在二维情况下)。(在三维情况下,面积投影形成一个不规则但连续的几何形状。)这种优化降低了内存需求和计算时间。
23.7.4.1 FAS限制和延拓算子
FAS要求对细网格解及其残差(缺陷)进行限制。用于将解传递到下一个更粗网格级别的限制算子采用全近似方案[75](第1061页)形成。也就是说,粗网格单元的解是通过对嵌入的细网格单元中的解值进行体积平均得到的。粗网格单元的残差是通过对嵌入的细网格单元中的残差求和得到的。
用于将修正传递到细网格级别的延拓算子构造为简单地将细网格修正设置为相关的粗网格值。
从粗网格级别提升并应用于细网格解的粗网格修正,是从粗网格级别计算的解与限制到粗网格级别的初始解之间的差异计算得到的。因此,细网格解的修正变为
23.7.4.2 FAS 粗化层级算子
FAS 粗网格算子 就是将控制方程在粗化层级网格上重新离散化后的结果。由于在离散化(第 966 页)和基于密度的求解器(第 994 页)中介绍的离散方程对构成一个单元的面的数量没有任何限制,因此在由不规则形状的单元组成的粗网格上进行这种重新离散化没有任何问题。
当在形状不规则的粗网格单元上使用有限体积法时,会有一定的精度损失,但多重网格解的精度完全由最细网格决定,因此不会受到粗网格离散化的影响。
为了保持细网格解的精度,粗化层级方程被修改以包括源项 [276](第 1073 页),这些源项确保如果在细网格 上的残差也为零,那么在粗网格 上计算的修正将为零。因此,粗网格方程被表述为
这里, 是从当前粗网格解 计算得到的粗网格残差,而 是从限制后的细网格解 计算得到的粗网格残差。最初,这两个项是相同的(因为最初我们有 ),并从方程中消去,留下
因此,当细网格残差 为零时,不会进行粗层次的校正。