多重网格法简介(Multi Grid)
多重网格法是一种用于求解方程组的方法,可用于插值、解微分方程等。
从专业角度讲多重网格法实际上是一种多分辨率的算法,由于直接在高分辨率(用于求解的间隔小)上进行求解时对于低频部分收敛较慢,与间隔的平方成反比。就想到先在低分辨率(间隔较大)上进行求解,因为此时,间隔小,数据量小,进行松弛时的时空耗费小,而且收敛快,而且一个很重要的优点是在低分辨率上对初值的敏感度显然要低于对高分辨率的初值的要求。这一点是显而易见的,例如我们平时看一个很复杂的物体,在很远的地方,你可能就觉得它是一个点或一个球,但是在近处你就不能这么近似,或许发明多重网格法的人就是从这一基本生活常识发现的吧。
多重网格法可以直接在低分辨率上以一个随意的初值进行计算,然后再进行插值,提高其分辨率,再在更高分辨率进行计算;也可以现在高分辨率以随意初值进行计算,得到一个结果,再将其限制(插值)到低分辨率去,再在低分辨率上进行解算,最终再从低分辨率经插值计算达到高分辨率。
有关多重网格法的资料可以到这里下载: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
多重网格法简介(Multi Grid)的更多相关文章
- Selenium Grid分布式测试入门详解
本文对Selenium Grid进行了完整的介绍,从环境准备到使用Selenium Grid进行一次完整的多节点分布式测试. 运行环境为Windows 10,Selenium版本为 3.5.0,Chr ...
- CSS Grid 布局完全指南(图解 Grid 详细教程)
CSS Grid 布局是 CSS 中最强大的布局系统.与 flexbox 的一维布局系统不同,CSS Grid 布局是一个二维布局系统,也就意味着它可以同时处理列和行.通过将 CSS 规则应用于 父元 ...
- 配置selenium grid
本文对Selenium Grid进行了完整的介绍,从环境准备到使用Selenium Grid进行一次完整的多节点分布式测试. 运行环境为Windows 10,Selenium版本为 3.5.0,Chr ...
- CSS Grid 布局
CSS Grid 布局是 CSS 中最强大的布局系统.与 flexbox 的一维布局系统不同,CSS Grid 布局是一个二维布局系统,也就意味着它可以同时处理列和行.通过将 CSS 规则应用于 父元 ...
- Bootstrap 3之美02-Grid简介和应用
本篇主要包括: ■ Grid简介■ 应用Grid■ Multiple Grids Grid简介 Bootstrap中,把页面分成12等份,这就是所谓的Grid. 在Bootstrap中,用类名控 ...
- CSS Grid布局指南
简介 CSS Grid布局 (又名"网格"),是一个基于二维网格布局的系统,主要目的是改变我们基于网格设计的用户接口方式.如我们所知,CSS 总是用于网页的样式设置,但它并没有起到 ...
- selenium grid 环境搭建
一.selenium grid简介 selenium grid可以同时在不同机器上测试不同浏览器,包含一个hub和多个node.node会发送配置信息到hub,hub记录并跟踪每一个node的配置信息 ...
- Selenium Grid分布式测试环境搭建
Selenium Grid简介 Selenium Grid实际上是基于Selenium RC的,而所谓的分布式结构就是由一个hub节点和若干个node代理节点组成.Hub用来管理各个代理节点的注册信息 ...
- css:display:grid布局
简介 CSS Grid布局 (又名"网格"),是一个基于二维网格布局的系统,主要目的是改变我们基于网格设计的用户接口方式.如我们所知,CSS 总是用于网页的样式设置,但它并没有起到 ...
随机推荐
- 学UNITY的基础
先看线性代数教材 再看计算机图形学第三章-几何造型技术 和第五章的法向量高等数学教材 的基础 就没有任何疑问了
- Chrome 控制台console的用法(转)
下面我们来看看console里面具体提供了哪些方法可以供我们平时调试时使用. 目前控制台方法和属性有: ["$$", "$x", "dir" ...
- SSH整合 遇到的头疼的BUGs
折腾了7个小时,一个项目重新的拷贝.编译.部署.运行.测试,我终于知道了产生问题的所在. 问题一:项目编码没有问题,访问会报404 资源不可用 没有进行重新编译,编译完就好了,可能是拷贝项目的时候,没 ...
- 【原】Learning Spark (Python版) 学习笔记(二)----键值对、数据读取与保存、共享特性
本来应该上周更新的,结果碰上五一,懒癌发作,就推迟了 = =.以后还是要按时完成任务.废话不多说,第四章-第六章主要讲了三个内容:键值对.数据读取与保存与Spark的两个共享特性(累加器和广播变量). ...
- 【好玩的前端知识】 Kube
Kube javascript tools
- 在c#中使用指针
如果想在c#中使用指针,首先对项目进行配置:在解决方案资源管理器中右击项目名选择属性(或在项目菜单中选择consoleApplication属性(consoleApplication为项名)),在生成 ...
- jQuery之Ajax--全局Ajax事件处理器
1.这些方法用于注册事件处理器,用来处理页面上的任何 Ajax 请求,当某些事件触发后,这些事件处理器被调用.如果jQuery.ajaxSteup()中的 global 属性被设置为 true (这也 ...
- c# Newtonsoft.Json序列化和反序列 js解析
Newtonsoft.Json下载地址:http://www.newtonsoft.com/products/json/ 参考: http://www.cnblogs.com/yanweid ...
- 最为简易的yii 教程(一)
了解目录的框架结构 framework主要有 base 框架核心组件 caching 缓存组件 db 数据库组件 gii ...
- 软件开发学习笔记 <二>软件开发模型、Up、Rup、敏捷Up
软件开发过程(process) 是一个将用户需求转化为软件系统所需要的活动的集合. 软件生命周期(SDLC,Software Devlopment Life Cycle) 软件从孕育.诞生.成长.成熟 ...