网格是求解域物理离散的结果,是求解域数值离散的具体表现,更是偏微分方程求解的前提。网格是求解域离散化的表现形式,可以说它是另外一种求解域,在有些时候你可以理解为它是附着在求解域上的一层皮肤。通常它是由许多小格子彼此之间相互衔接在一起的,可以说它是单元的一个集。因为整个区域形状或者工况复杂,想要一次求解出整个域是十分困难的,甚至是不可能的。而将整个区域划分成有限多个小格子组成,单独的看每一个格子它又是简单的,在每个小格子上一次求解又变得相对容易,然后由所有的小格子得到整个区域的解。可见,在整个求解过程中,网格是由大到小,又是由小到大,始终作为求解的基础条件。上面图示为一个平面区域离散化以后的结果,每一个小格子称为一个单元,每个单元有四条边、四个顶点,称为单元的边界和节点。外部条件作用在物理区域上,实际上就作用到了单元的边界之上。单元之间边界是衔接在一起的,仅仅通过节点产生作用,故此需要将单元边界上的条件转化到节点之上,称为节点等效载荷。为什么说网格是偏微分方程数值计算的前提呢?因为前面提到偏微分方程的复杂性使获得解析解极其困难,甚至是不可能实现,故此采用数值计算。在方程数值计算过程中,诸如采用有限差分法,有限体积法以及有限元法,根本就是需要生成一组覆盖连续域的离散点和单元。有限差分法就是用差分方程代替偏微分方程,而差分方程就是在离散点上建立的,PDE的离散通常是在点附近以泰勒级数展开,它不关心离散点之间如何变化。有限元法是使用积分法建立代数方程组,必须考虑数值在网格节点之间的变化规律。有限体积法是必须考虑数值在网格之间的变化规律,是基于离散单元求积分。三种数值方法都是基于离散化的点或者单元建立方程,所以离散是求解的前提条件。谈到网格的类型的时候,很多人(包括我自己)特别容易与单元混淆,毕竟网格下一级就是单元嘛。网格是从离散域整体角度描述求解域,单元是从离散域局部角度描述求解域。网格主要分成两类:结构化网格和非结构化网格。可能刚听到这个很迷糊,啥是结构化,特征是啥。平时我们听到较多的一个有关联的词汇叫做“结构化面试”,它是指一轮一轮的去面,按照预定的顺序去做就可以。从这里可以大致知道结构化,它是指“很有规律”的一个东西,或者表述为“规律”。结构化网格的一个重要特征就是网格的排列很有规律,就是你看着网格它很整齐划一。 网格包含许多的单元和节点,这些都是数据。计算机要记住这些数据,就需要编排它们的位置等信息。结构化网格在坐标系下是十分有规律的排列的,只要知道单元相邻的关系,列举临近的单元就十分容易。可以十分方便的将网格元素(单元和节点)映射称为数组或者向量,计算机编程和计算将会变得更容易。说白了,就是网格排列很规则,所有单元在坐标下的位置服从同一套排列法则,局部与全局有一个明确的对应关系。 结构化网格对求解域的几何形状有一定的要求,不是所有几何都可以直接划分成结构化网格模型。通常要求求解域的形状满足一定的要求,如平面几何仅能用三角形或者四边形,如果用三角形单元划分,要求三条边都为偶数,如果是四边形要求对边划分数目满足一定的条件等等。 非结构化网格可以适应更复杂的求解域几何形状,可以在生成的网格区域包含各种不同的单元,即混合使用不同形状的单元。如在结构化网格中,三维仅仅采用四面体与六面体单元,但非结构化网格可以包含金字塔单元和楔形单元。在有限体积法中(通常是流场分析)单元更加灵活,甚至可以使用多面体和多边形单元。单元是不是在任何时候都可以混合使用,或者说混合使用有没有什么限制条件,这个在以后会学习到。这里只需要记住这么几件事:软件喜欢结构化网格,但结构化网格应用局限性大;复杂的求解域喜欢非结构化网格,它几何适应性强,且可以包括混合单元使用,但也是有使用条件的,目前条件未知。前面的叙述我们可以得出这么一个结论:网格在整个分析过程中十分重要。它主要体现在:求解域的离散(更深层是表述求解域多项式的数值离散),偏微分方程的离散。这两个环节网格都是至关重要的,那么网格到底怎么样才算是一个比较好的状态呢,这里从“文字”的角度可以做一些简单的分析,粗略得出一些指导性的想法。网格要合适,而不是最好。求解域的离散如果没有足够的网格就无法较准确的用简单区域表达复杂区域,例如用多边形在圆的内部去近似一个圆,你可以用正方形去表示,不过显然是不够的,正方形的外则与圆之间的弧形区域被你无视了,这种差距称为几何离散误差,最终反应到数值上。你也可以用五边形,甚至六边形,它肯定比正方形好很多,因为边角的余料越来越少。所以单元越是精细,越是能够准确表达求解域几何。但并不是越精细越好!也许你可以轻松在100分试卷上拿到80分,但是要拿到95分以上你可能需要付出极大的代价。网格剖分亦是如此,完美是有代价的。越是精细的网格越是能够减小几何离散误差,但是数据计算的舍入误差是在增大的。因为计算机对于数据的存储有一个舍入误差,并且网格划分算法也是有误差的,网格越多,这种数据舍入误差就越大(误差是在积累的,目前还没有想到它这种误差有没有可能在某种条件下被抵消)。网格包含的单元和节点,单元与节点需要存储的是信息,如节点自由度、节点解、节点位置等,单元越多组建的方程组就越多,要求解的刚度矩阵越是庞大,需要储存的数据就越多,计算和储存资源要求越大。说白了,你要更多的计算硬件投入,消耗更多的计算周期。 网格布置要疏密有别。是不是所有地方一样多的网格比较好?可能仅仅是比较好看而已,计算还得是要有用的。考虑这个一个情况,在一个求解域当中有立方体,有孔和圆角(换成平面就是四边形、圆弧、圆角),如果网格的布置比较稀疏,那么方方正正的几何可能没有明显的离散误差,但是孔与圆角处就有可能直接用直边替代了圆弧边,几何离散误差十分明显了。而如果网格布置的比较细致,精细化的尺寸覆盖到了所有几何,此时离散误差是很小,但是假如只有一小部分区域是圆弧,为了这么一小部分的精确逼近,致使整个区域单元节点数据急剧攀高,整体算下来划算吗?也许你就是想要要知道这些圆弧处的结果,这样的做法可能还是值得的,不过代价仍然很大。更好的做法是疏密有别,在几何复杂一点的区域或者想要知道结果的区域,你可以多布置一些单元,而其余位置少布置一些单元,这样几何的求解精度与计算资源达到了一个较好的折衷,即我们要用尽可能少的计算资源获得想对理想的求解精度。网格的细化,我们前面提到过的H-Method就是其中一种。如下图所示的疏密有别:网格疏密有别的理论基础是圣维南原理。改变局部布局仅影响局部,不会对远处产生重要影响。所以这里有个距离问题,到底需要多远才合适。如果距离太近会影响远处;如果距离太远,会造成细密网格分布过远,浪费。这样想来就衍生出网格疏密分布距离(过渡的远近)的问题(老爷子当年咋没有继续搞搞,直接给出一个指导性的建议呢😂),局部网格与远处网格有些时候采用混合网格,就算是同一类网格,它们的密度也是不同的,那么请问如何合理过度才是比较合适,或者说过度有没有一个大致的准则呢。这是个十分重要的问题,今后将重点学习这块内容。
如果我们的目标很明确,如想要知道结构当中哪里应力最大,结构会不会坏掉,如果结构几何相对简单,根据基本力学就可以判断。锁定你关心的区域,查看该区域几何特征,首先就需要保证该区域几何离散误差要小,你总不至于用一条直线替代了圆弧吧。可能有的时候结构太复杂,亦或者结构受到的载荷太复杂,甚至是个人的经验比较有限,难以根据基础力学直接判断整个结构可能的高应力区域。此时就难以事先对关键区域施以较好的网格,没有办法用较少的模拟次数直接获得结果。如果结构太复杂,可以考虑多次模拟。初次可以控制全局网格,使单元及节点数目适中,较粗略的计算下整个结构,从计算结果初步判定有没有找到关键区域,也可以尝试逐步精细网格找对高应力区域。找准位置以后再更合理的布置网格,以得到想要的结果。如果受到的载荷条件太复杂,可以考虑多次模拟。初次可以选择稍单一的载荷,进行分析,保证获得相对准确的结果。再次逐步增加其余载荷,查看模拟结果的变化情况。逐步拆分载荷模拟,以实现整体加载的效果。最后一种处理办法,将载荷一部分条件转化为预定义条件。我们可以挑选出一部分边界条件直接分析,保证这部分是相对准确,将计算结果作为一种预条件,如结构中可以将温度的变化转化为结构的预应力,再在这种条件下进行后续其余载荷的施加。第三种方法区别于第二种,第二种方法实际上是眼睛多次观察而已,本质还是一次施加一次计算。第三种是多次施加多次计算。关于网格还有其它一些问题,诸如网格自适应,流体里面的动网格。限于篇幅,这些问题以后慢慢学习。尽管一再强调网格与单元的区别,在后面关于“怎么样的网格比较好”还是有所混淆,实在是忍不住。只要心中确实是已经知道它们之间的区别就行,不赘述了。总结:本篇小短文根据学习过程记录下有限元分析过程中的关于网格的问题,其中主要记录了“网格是什么”、“网格有哪些类型”、“网格什么样比较好”。其中关于【有限差分法】、【有限元法】、【有限体积法】三种方法在网格上的体现没有列举详细例子,一来篇幅有限,二来一般书都有提及,自行查阅即可。
|