撰稿:CFD界
编辑:Y.M.Z
简介:这个简介可真难写,全文其实就是个简介,这个简介只能是简介的简介? soga
简要的历史
网格的历史基本上就是数值计算的历史。
1928年Courant,Friedrichs和Lewy发表的文章被认为是有限差分法(FDM)的起点,在这篇文章中提出了大名鼎鼎的CFL标准。
从历史角度来讲,最早的笛卡尔网格和有限差分有直接关系,笛卡尔网格最方便支出就在于变量的导数在笛卡尔网格上计算非常方便。
但是,比较奇葩的有限元法(FEM)则可以用于各种奇葩网格单元类型,同时使得非结构网格成为可能。
网格的杂七杂八
数值求解偏微分方程组的第一步是对方程进行离散。把连续的方程变为离散的方程。
连续方程的精确求解是不可能的。因此我们需要把整个计算域分为非常小块小块来求解。
具体的离散又分为各种不同的方法如前面提及的FDM,有限体积法(FVM),以及FEM。这些不同的方法可以将偏微分方程组演变为代数方程组。
网格的定义,可以理解为是一系列的点或者小区域,所有这些小区域连接形成的整个的网格体系就是我们的求解计算域。
一个简单的网格演示
在计算流体力学中,通常采用有限体积法。在有限体积法中,离散的网格单元代表一个非常小的控制体积。在这些控制体积中,通量是互相平衡的。
有限体积法最重要的特性在于方程离散本身的过程中保证了通量的守恒。然而这也导致有限体积法的精度存在限制。
网格通常进一步分为结构网格和非结构网格。前面我们已经表示结构网格最开始主要用于FDM,因此,FVM以及FEM在本质上可以使用更加复杂的网格单元类型。
结构网格(Structured Meshes)在英文中也通常称之为grids。结构网格的主要特点是其标识统一易于检索,并且结构网格的标识和离散后的矩阵系数对应关系统一。
从计算编程的角度来看,结构网格这种网格单元编号有矩可循的特性非常有利与编程。
结构网格编号
比如在上面这个图中,很明显要获任意一个网格单元的编号非常容易。例如如果获得某网格单元右边毗连的网格单元编号,只需要在网格单元编号上加1即可。如果获得某网格单元上边毗连的网格单元编号,只需要在网格单元编号上加9即可。
这种网格也非常有利于进行坐标映射,如下图所示。这也表示了,从编程角度来讲,只要是结构网格,不管是笛卡尔网格还是贴体网格,难度都是一样的。
笛卡尔网格-帖体网格变换
在进行坐标变化的时候,需要定义并计算节点的行列式,这也是网格质量的一个重要参考标准,也是某些商软的默认评估质量标准。
在结构网格的前提下考虑非结构网格就可以很清楚的看出,非结构网格的标识非常复杂并且没有统一规律。
非结构网格节点排布
在上面这个图中,可以看出每个节点毗连的节点毫无规律可循。
但是在大部分的情况下对复杂几何生成结构网格是非常困难的。在这种情况下,非结构网格就派上了用场。非结构网格的网格单元类型任意并且可以全自动的生成。
比如ICEM中的advancing front、gambit pave、Octree网格全自动生成方法。OpenFOAM中的Voronoi多边形自动生成算法。
非结构网格单元类型进一步可以分为2维和3维的。比如下图中左边的两个2维三角形和四边形就可以作为2维非结构网格单元的主体。右边的四面体、六面体、金字塔以及楔形是3维非结构网格单元的主体。
网格单元类型
非结构网格这种标识混乱的特性也不一定是个坏事,因为这也就意味着非结构网格中可以任意的进行网格单元的死亡和生成。基于这个过程我们有了中外闻名的网格自适应技术以及湮灭。
网格自适应主要用于局部细化网格,同时使得整体的网格数量尽可能的低,同时保证需要致密的区域网格致密。
一般情况下,网格自适应算法主要取决于变量的某些特性如梯度、误差等。因此在那些较高误差或者较高梯度的区域可能会存在非常多的网格。
当然了,允许网格细化的同时也可以反向操作,也即网格糙化的过程。
另外一种有关网格的技术也即为动网格。在动网格中,网格单元的位置发生变化。
网格边界运动过程
比如上图就是动网格的典型过程,其网格单元的大小以及位置发生移动,但是整体的数量保持不变。这种非常简单的动网格操作可以用来验证求解器的准确性。
拓展阅读:
CFD志:
满地爬的鼻涕虫
英文原文引自simscale官网