多重网格法简介(Multi Grid)

时间:2021-04-19 13:58:50

原文链接

多重网格法是一种用于求解方程组的方法,可用于插值、解微分方程等。

从专业角度讲多重网格法实际上是一种多分辨率的算法,由于直接在高分辨率(用于求解的间隔小)上进行求解时对于低频部分收敛较慢,与间隔的平方成反比。就想到先在低分辨率(间隔较大)上进行求解,因为此时,间隔小,数据量小,进行松弛时的时空耗费小,而且收敛快,而且一个很重要的优点是在低分辨率上对初值的敏感度显然要低于对高分辨率的初值的要求。这一点是显而易见的,例如我们平时看一个很复杂的物体,在很远的地方,你可能就觉得它是一个点或一个球,但是在近处你就不能这么近似,或许发明多重网格法的人就是从这一基本生活常识发现的吧。

多重网格法可以直接在低分辨率上以一个随意的初值进行计算,然后再进行插值,提高其分辨率,再在更高分辨率进行计算;也可以现在高分辨率以随意初值进行计算,得到一个结果,再将其限制(插值)到低分辨率去,再在低分辨率上进行解算,最终再从低分辨率经插值计算达到高分辨率。

有关多重网格法的资料可以到这里下载:https://computation.llnl.gov/casc/people/henson/mgtut/ps/mgtut.pdf

多重网格技术(multigrid solver)

微分方程的误差分量可以分为两大类,一类是频率变化较缓慢的低频分量;另一类是频率高,摆动快的高频分量。一般的迭代方法可以迅速地将摆动误差衰减,但对那些低频分量,迭代法的效果不是很显著。高频分量和低频分量是相对的,与网格尺度有关,在细网格上被视为低频的分量,在粗网格上可能为高频分量。

多重网格方法作为一种快速计算方法,迭代求解由偏微分方程组离散以后组成的代数方程组,其基本原理在于一定的网格最容易消除波长与网格步长相对应的误差分量。该方法采用不同尺度的网格,不同疏密的网格消除不同波长的误差分量,首先在细网格上采用迭代法,当收敛速度变缓慢时暗示误差已经光滑,则转移到较粗的网格上消除与该层网格上相对应的较易消除的那些误差分量,这样逐层进行下去直到消除各种误差分量,再逐层返回到细网格上。

目前两层网格方法从理论上已证明是收敛的,并且其收敛速度与网格尺度无关[哈克布思,1988]。多重网格法是迭代法与粗网格修正的组合,经过证明,迭代法可迅速地将那些高频分量去掉,粗网格修正则可以帮助消除那些光滑了的低频分量,而对那些高频分量基本不起作用。

在多重网格计算中,需要一些媒介把细网格上的信息传递到粗网格上去,同时还需要一些媒介把粗网格上的信息传递到细网格上去。限制算子Iih(i-1)h是把细网格i-1层上的残余限制到粗网格i层上的算子,最简单的算子是平凡单射,另外还有特殊加权限制;插值算子Iih(i-1)h是把粗网格i层上的结果插值到细网格i-1层上的算子,一般采用线性插值或完全加权限制算子。
需要说明的是在多重网格迭代方法中,粗网格修正之前,细网格必须进行光滑迭代,以消除高频误差,使粗网格修正最有效地发挥其作用;在粗网格修正之后,不可避免的引入高频误差,所以也必须进行光滑迭代,不过高频误差能很快的通过光滑迭代消除。

多重网格,最开始是用来求解椭圆型方程的。其原理为:数值求解的误差可以展开成级数的形式,从级数的的形式我们可以看出误差的振动分量有很多频段,只要消除了这些频段的误差,整个解也就收敛了。而网格,我们则可以看成一种滤波器,不同尺度的网格可以滤掉不同频段上的误差。如果网格一定,那么对于某些误差来说,可以很快滤掉,对于与其频段不匹配的误差来说,这种网格可能完全失败而根本无法滤掉。于是,人们开始采用多重网格技术进行数值求解,这样可以很快的滤掉各个频段上的误差,从而加速求解。上面所说的是多重网格理论上的技术,而实行多重网格技术却还有很多困难,首要的困难粗糙网格的生成,对于结构网格来说这是比较容易的,只需要进行相应的采样即可,对于非结构网格,粗网格的构造要麻烦的多,所以我说多重网格技术也是一种网格生成技术。对于我们自己编程序来说,非结构网格是一个难点,生成了非结构网格,再形成多重网格更是一个难点,与其相比,数值格式的确很简单。对于双曲型方程的多重网格方法大家见到过没有?其实,这方面的资料特别的少,这主要是有双曲型方程的本性和多重网格法的原理决定的。目前来说,双曲型方程的多重网格法,在理论上还有很多问题要解决,与实际的工程应用还有很大距离。

多重网格对于椭圆型方程有比较完备的理论,尤其是对于线性椭圆型方程,其理论收敛速度为每步下降一个量级。对于双曲型方程,至今没有很完备的理论,最早是Brandtl,后来Ni应用于Euler方程求解,Jameson把该方法应用于他的Runge-Kutta显式推进技术,效率非常高。非结构网格,法国人走的比较快,采用聚合体技术,使得粗网格可以比较容易得到,收敛效果比较好。

对于euler方程这种双曲方程,虽然没有完备的multigrid收敛理论,但是却已经应用比较长时间了(从Jamson算起)。好像做CFD的暂时先实用化了,不管理论上如何。Fluent里面对于非结构网格叶实现了凝聚式的多重网格。刘超群的那本多重网格书里面就有一个multigrid用于叶栅跨音速无粘计算的例子,记得是4层网格,FVM,Roe格式配合四阶龙格库塔推进。一般来说,似乎都用多重网格加速显示推进的,因为显示步长受限制,少而有隐格式配合多重网格的。记得好像在王保国的叶栅计算的书里面,提到了隐式推进的多重网格,不记得他实现了没有。不过SIMPLE算法配合多重网格其实就是一种隐格式的多重网格了。

Multi-grid是一种加速收敛技术,多为译‘多重网格’Multi-block是网格生成技术,多为译‘多块网格’。

AMG(代数多重网格) 直接根据离散后的Matrix生成"COARSER" MATRIX, 和网格不发生直接关系。上面讨论的是几何为基础的多重网格法。几何多重网格法一般在粗网格上直接构造守恒方程,对合适的问题,收敛会很快。缺点是对复杂几何形状,粗网格很难生成。AMG 收敛也很好而且不受网格限制。AMG已经被很多CFD商用软件采用。好象FLUENT就一直用AMG作为主求解器。谁用过FLUENT的几何多重网格法?

一种新的并行代数多重网格粗化算法

<<计算数学 >>2005年03期 徐小文,莫则尧

近年来,受实际应用领域中大规模科学计算问题的驱动,在大规模并行机上实现代数多重网格(AMG)算法成为数值计算领域的研究热点。本文针对经典AMG方法,提出一种新的并行网格粗化算法--多阶段并行RS算法(MPRS)。我们将新算法集成到了高性能预条件子软件包Hypre中。大量数值实验结果显示,新算法适合更广泛的问题,相对其他并行粗化算法,明显地改善了AMG并行计算的可扩展性。对三维27点格式有限差分离散的Poisson方程,在64个处理机上并行AMG求解,含8百万个未知量,新算法比RS3算法减少了近60的三维Poisson方程,近32万个未知量,在16个处理机上并行AMG-GMRES求解,新算法所需的迭代步数大约为其他粗化算法的一半,显示了很好的算法可扩展性。

参考资料:http://www.ilib.cn/Abstract.aspx?A=jssx200503011