近日有人哭诉:我前几天做了个仿真,一共花了一周,却有5天时间都在画网格!是不是哪里搞错了?

画网格是技术活,也是体力活。在一个完整的仿真流程中,生成网格这一步经常会占据工程师大部分时间和精力。
正因为此,江湖上一直都活跃着很多靠画网格赚零花钱的野生仿真工程师,俗称“网格民工”。
今天就聊聊让仿真新手头大,让仿真老手头秃的“网格”。
一、什么是网格?
仿真的本质是将物理世界搬运到数字世界,用数学计算代替物理实验。
而搬运的载体,就是物理公式。
对于流体,最著名的是纳维-斯托克斯方程,即N-S方程,基于动量守恒和质量守恒推导出的描述流体运动状态的一组偏微分方程。

对于结构,最著名的当属弹性力学方程,基于胡克定律和平衡方程推导出的描述材料在弹性范围内变形行为的偏微分方程。
解方程是每个学生的噩梦,但好在我们考试接触的方程还都是有解析解的,也就是能写出来未知数的表达式。比如对一元二次方程:

它的解析解就是:

但让人绝望的是,有解析解的方程是极少数。
比如对一元五次方程,它就没有解析解,你也列不出来x的表达式。

尽管没有解析解,但对于特定的一元五次方程,例如下面这个:

我们通过数值方法,比如二分法,还是可以“凑”出来几个近似解。这些解,就是数值解。

你没看错,有两个解是约等于,不是等于。
那我问你了:
这两个解准确吗?
理论上来说不准。
能用吗?
大部分情况下能用。
解析解是理想,数值解是现实,理想往往只能无限接近而无法到达。虽然不完美,但日子总要过下去。
理想化为现实是特例,方程有解析解也是特例。尤其对前面提到的偏微分方程,它们通常都只有数值解。
既然只有数值解,那如何找到这些数值解,就有讲究了。
目前应用最广的方法有三种:有限元法(Finite Element Method, FEM)、有限体积法(Finite Volume Method, FVM)和有限差分法(Finite Difference Method, FDM)。
比如著名的结构仿真软件AIFEM就基于有限元法、流体仿真软件AICFD基于有限体积法。
这三种方法都需要将连续的偏微分方程离散为代数方程组。
体现在仿真过程,就是都需要把计算区域离散化,拆分成一个个小单元,也就是画网格。AIFEM和AICFD也都具备画网格的功能。

AIFEM划分网格
明白了吧,画网格的根本原因是描述我们所要模拟的物理现象的偏微分方程没有解析解,在找数值解的过程中不得不将空间离散化。
网格民工画的不是网格,而是在用鼠标对抗这个连续的世界。
那有没有不需要画网格的仿真方法?
有,但非主流。
在网格法之外,还有数十种无网格法。虽然也要做空间离散,但离散时不再依赖网格,而是通过在计算域内布置有限个离散点来求解。
无网格法在特大变形场景中有独特优势,可作为网格法的一种补充。目前基于无网格法的成熟仿真软件还很少,也尚未在工程领域广泛应用。
二、网格有哪些类型?
拆开这个连续的世界,有不同的方法。根据离散后的形状,网格单元可分为四面体、六面体或其它更复杂的类型。
从计算角度看,纯六面体网格计算效率通常更高。
但从人力角度看,划分纯六面体网格相当费时费力。对简单的几何还好,但对于复杂的结构,想生成纯六面体网格甚至都不可能实现。
工程界更常用的做法,是根据几何特征判断网格类型,适合六面体的区域生成六面体,适合四面体的生成四面体,或者输出一套混合网格。
AICFD 和 AIFEM 均可根据几何形状,一键生成高质量网格。
近几年在仿真领域出现了多面体网格,即网格单元至少一个表面是多边形,且多边形的边至少是五边形。
由于其网格划分且求解效率高的优点,多面体网格在流体仿真领域得到了越来越广泛的应用。AICFD的2025版也将支持生成多面体网格,敬请期待。
从左到右:六面体、四面体和多面体网格
三、画网格咋这么费劲?
既然现在很多软件都支持一键生成网格,那为什么画网格还这么费时费力?
好问题。
我觉得原因主要有三:模型简化、确定计算域以及确定几何尺寸,这三部分在现阶段还很难摆脱人工。
1. 模型清理简化
开头说了,仿真的本质是将物理世界搬运到数字世界,用数学计算代替物理实验。
在搬运过程中,就不得不做出取舍,只搬运自己关心的部分。
其实在现实世界做实验,我们也要有取舍有简化,毕竟资源是有限的。
比如汽车碰撞实验,通常只选正面和侧面碰撞这些典型工况。做飞机的风洞实验,通常只做静态测试,很少模拟动态变化。
仿真更是如此。
做汽车外气动仿真时,不得不简化轮毂结构、删除轮胎表面花纹、删除雨刮器、删除门把手甚至后视镜等结构。
做飞机机翼的强度仿真时,不得不删除上表面的涡流发生器、后面的放电针、传感器的安装孔等结构。
如果来者不拒全部将其离散,生成的网格量之多,会让你绝望,让电脑崩溃。
但删除哪些保留哪些,需要一定的经验判断——只有那些“不重要”的才应被删除。因此几何清理简化这一步,需要花费大量精力。
2. 计算域选择
除了几何简化,计算域的选取也很讲究。类似做物理实验,你的实验区域不可能做到无限大,仿真也一样。
比如做电子散热仿真,除了保留固体部分,周围空气保留多大范围?范围太大,网格量又让你绝望,让电脑崩溃。范围太小,降低计算准确性。
计算域范围的选择需要经验判断,不同场景区别非常大,经常需要多次尝试。
这个问题在流体仿真领域尤其明显,毕竟结构强度计算无需考虑周围空气,固体就是计算域。因此流体仿真的网格量往往比结构仿真大,甚至差几个数量级。
对强度仿真来说,百万级的网格量已经很大。但对流体仿真来说,百万只是入门,千万甚至上亿都是常态。
例如AICFD就支持10亿规模网格的计算,结构仿真工程师听到这个数会当场昏过去的。
3. 网格尺寸
模型简化和计算域选择都完成了,终于到正式的网格划分步骤。
你又懵了,网格应该分多细呢?
尺寸太小,网格量让人绝望让电脑崩溃。尺寸太大,降低计算准确性。
确定合适的网格尺寸,通常要做网格无关性验证,即逐步加密网格,一直到物理场几乎不变为止,确定最终网格尺寸。
除了总体尺寸,网格划分还讲究“该密的地方密,该疏的地方疏”,即在物理场变化较为剧烈的区域加密网格。
对结构仿真来说,在应力集中、大变形等区域往往需要加密网格,以捕捉更细微的变化,提高精度。
对流体仿真来说,最经典的就是边界层区域,即靠近壁面的一个内部速度、温度场剧烈变化的薄层。
因此在壁面附近,通常要画几层很薄的边界层网格,以捕捉其内部的剧烈变化。
边界层网格应该画多薄呢?有一个无量纲值y+可供参考,其定义为:

对于标准湍流模型(如k-ε、k-ω),y+值应保持在30到300之间。
对于大涡模拟,y+值应尽量小,通常小于1。
听懂掌声。
除了边界层,在其它区域,比如汽车后面的尾流,也有物理场的剧烈变化,尽管它远离壁面。
若想捕捉此处的流动细节,就也要加密网格。AICFD在划分网格时,可通过辅助几何选定区域,对区域内网格进行加密,欢迎尝试。
然而有个尴尬的情况:除了壁面边界层这种事前知道需要加密的区域,在计算结果出来之前我不知道哪里的物理场变化剧烈,那如何在画网格时加密该加密的区域?
好问题。
AICFD的2025版将支持AI网格,你只需要提供几何,软件在计算过程中会根据得到的物理场,自动调整相应区域的网格尺寸。实现网格和求解的双向促进,双向奔赴,敬请期待。

总之,网格划分的确是当前仿真中最耗费人力的工作。希望我们的工具能逐步降低仿真过程的人工干预,让人不再绝望,机器不再崩溃。