首页/文章/ 详情

一篇文章入门多重网格方法

3年前浏览2297

很多人第一次看到“多重网格”的时候,可能认为是有限元方法的网格划分方法。实际上多重网格方法是一种求解大规模线性方程组的数值计算方法,和有限元方法里的网格是两码事。


求解线性方程组通常有直接法和迭代法,直接法主要以求解逆矩阵为主,精确解,在小规模(自由度小于10万)比较常用,而大规模的方程组(自由度100万-1000万)通常适用迭代方法,一般给出一个初始值和迭代矩阵,在此基础上进行迭代计算,达到收敛标准为止。而对于超大规模(自由度1000万以上)的方程组,对硬件要求较高,普遍使用模型降阶方法,目前工程领域主要使用Krylov子空间方法(之前有过介绍)和多重网格方法,尤其是Krylov方法很容易进行并行和分布式计算。


多重网格方法属于迭代方法,具有迭代方法的一系列特点,在求解大规模稀疏对称正定线性方程组时,效率要高出普通迭代方法很多。


之所以叫多重网格,是因为该方法最初应用在有限差分方法上,有限元和有限差分在网格上的区别在于:有限差分的网格是结构化网格,即横平竖直的均匀网格,网格是平铺在对象上;而有限元方法则是把对象进行离散化。所以缩小线性方程组规模时,简单跨过中点,恢复时插值取其两点之间点即可,这也是多重网格的最初由来。这种最初的取点方法由于依赖于几何空间数据,所以又叫几何多重网格(Geometrical Multi Grid, GMG),后来发展起来的无需几何空间数据,即纯粹求解线性方程组的方法,又叫代数多重网格(Algebraic Multi Grid, AMG),很明显AMG在处理线性方程组迭代矩阵时要比GMG复杂。


多重网格方法理论基础复杂,翻遍网络,找不出一个实际应用的例子。后面有空拿一个具体求解例子来说明问题。


在笔者看来,解决工程领域的性能问题简单归结两个原则:二八原则和分治原则。即性能瓶颈普遍存在20%的地方,而解决方法即将问题分开,集中处理这20%的问题。


在一篇文章入门仿真软件性能优化一文中介绍过改进工业软件性能的方法和思想,多重网格方法属于其中的分治法,或者也属于模型降解的一种。其核心思想是在原有的线性方程组基础上构造迭代矩阵,缩小线性方程组的规模,其目的是加快某些区域的收敛速度,收敛到一定程度后再插值恢复到原有的规模。


开源工具推荐两个:

AMGCL

https://github.com/ddemidov/amgcl.git


HYPRE:

https://computing.llnl.gov/projects/hypre-scalable-linear-solvers-multigrid-methods

声明:原创文章,欢迎留言与我讨论,如需转载留言

理论科普网格处理代码&命令其他软件
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2021-04-30
最近编辑:3年前
多物理场仿真技术
www.cae-sim.com
获赞 126粉丝 323文章 220课程 0
点赞
收藏
未登录
1条评论
啊哈
签名征集中
2年前
博主好,有关于多重网格的具体求解的实例吗
回复
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈