这个系列是GAMES302-等几何分析(GAMES 302: Iso-Geometric Analysis)的同步课程笔记。课程内容涉及等几何分析的几何建模理论与方法、等几何分析数值求解器研发基础、基于等几何分析的形状/拓扑优化理论与方法、等几何分析与细分造型、深度学习的交叉融合等内容,并对等几何分析的研究趋势及应用前景进行分析展望。本节课主要介绍有限元分析的相关理论。
有限元分析
等几何分析(iso-geometric analysis, IGA)可以看做是有限元分析(finite element analysis, FEA)的一种推广,因此在具体介绍IGA之前我们先回顾一下FEA的相关理论。
物理仿真边值问题的一般描述
在工程实践中很多问题可以归结为两类,其一是一系列已知单元体的组合称为离散系统。以平面桁架为例,求解复杂桁架系统的内力往往需要使用计算机来进行处理。
![](https://search.pstatic.net/common?src=https://i.imgur.com/ENUVhAg.png)
而第二类问题则涉及求解给定边界条件的PDE,这类问题称为连续系统或场问题。在绝大多数情况下我们都无法解析地求解场问题。
![](https://search.pstatic.net/common?src=https://i.imgur.com/ukXQk7x.png)
场问题等价于微分方程加边界条件,它可以表示为如下形式:
\[\begin{cases} A(u) = 0, & u \in \Omega \\ B(u) = 0, & u \ \text{on} \ \Gamma \end{cases}\]其中微分算子\(A\)和\(B\)由相应的物理方程给出。
![](https://search.pstatic.net/common?src=https://i.imgur.com/GoaHTWf.png)
目前求解场问题的常见方法包括差分法、等效积分法以及有限元法等。
![](https://search.pstatic.net/common?src=https://i.imgur.com/IEkejdV.png)
有限元法基本思想
目前FEA是工程中最常用的计算方法,它的基本思想是把计算域离散为有限个互不重叠的单元,然后在每个单元上使用分片函数来近似待求场函数\(u\),通过求解每个单元上插值函数的系数来得到场函数\(u\)的一个线性近似。
![](https://search.pstatic.net/common?src=https://i.imgur.com/p7lw4yt.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/GXaq9aj.png)
不难发现对求解域进行离散的过程是FEA的核心步骤之一。和差分法相比FEA对单元的形状和大小没有划分的限制,因此更适合各种复杂的几何形状。
![](https://search.pstatic.net/common?src=https://i.imgur.com/fjKpIbp.png)
分片近似式FEA最重要的思想,我们需要在每个单元上通过一个试探函数(test function)来近似真实解函数的形态。对于形状比较简单的单元,使用低阶多项式作为试探函数是合理的。
![](https://search.pstatic.net/common?src=https://i.imgur.com/jB3oyPQ.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/1rG0wHP.png)
在具体求解层面上,FEA会把原始的PDE转换为一个巨大的线性方程组进行处理。
![](https://search.pstatic.net/common?src=https://i.imgur.com/UFePd91.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/oV3u2W0.png)
整个FEA的过程可以抽象如下:
![](https://search.pstatic.net/common?src=https://i.imgur.com/Kjezqj9.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/tE7tVUm.png)
以二维桁架的离散系统为例,FEA的分析步骤如下:
![](https://search.pstatic.net/common?src=https://i.imgur.com/squepE2.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/myW0UP1.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/lUlTv9A.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/FsR4Y4c.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/lTggFis.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/Ref3sTl.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/U7zKxPT.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/rADMk7B.png)
而连续系统的FEA分析步骤可参考如下:
![](https://search.pstatic.net/common?src=https://i.imgur.com/G6tzWSl.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/D5iSlDk.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/OpbPVm8.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/7OR37Bh.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/bCPltUq.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/IOvBllh.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/gKeyyHx.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/ZB226aW.png)
有限元法的基本步骤与相关概念
![](https://search.pstatic.net/common?src=https://i.imgur.com/HIyOsYO.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/39MYFyj.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/vZnup7V.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/fpB50lE.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/d5f8mA2.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/xjzmMFF.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/hspQmkr.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/6lntEZX.png)
有限元法的形成与发展
![](https://search.pstatic.net/common?src=https://i.imgur.com/5I4CvPa.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/eR1fhoB.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/TUnEsFJ.png)
网格生成
对计算域进行离散得到的网格对于FEA的最终结果有着重要的影响。
![](https://search.pstatic.net/common?src=https://i.imgur.com/maKbdxU.png)
网格生成算法的一般流程可以参考如下。
![](https://search.pstatic.net/common?src=https://i.imgur.com/vY0HdVD.png)
目前常用的网格生成算法可以分为结构化网格和非结构化网格生成两大类。
![](https://search.pstatic.net/common?src=https://i.imgur.com/x2hV9AZ.png)
非结构化网格
对于三角形网格,advancing front的思想是先对边界进行离散然后在内部逐步推进构造出一系列单元。
![](https://search.pstatic.net/common?src=https://i.imgur.com/EcIgFS5.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/lPxbQaq.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/GfxVkCj.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/DPAE9p5.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/JM3hNa5.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/WoSyNJe.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/zcOkfFI.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/6l8gAA6.png)
另一种常见的非结构化网格生成方法的Delaunay三角化,它在图形学和计算几何中有着大量的应用。
![](https://search.pstatic.net/common?src=https://i.imgur.com/HUUyLPy.png)
而对于四面体网格还可以通过插值的方式来生成网格。
![](https://search.pstatic.net/common?src=https://i.imgur.com/HUv5ZZF.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/Nl822PK.png)
结构化网格
在制造业中很多产品有着较为规范的几何形状,此时结构化网格往往更适合进行分析计算。
![](https://search.pstatic.net/common?src=https://i.imgur.com/SXD266l.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/qczJnhd.png)
同时结构化网格也有比较规范的生成方法。
![](https://search.pstatic.net/common?src=https://i.imgur.com/TxGXXbR.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/7FBtEDw.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/Ll9NXY9.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/dYcdekE.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/qzHzUOH.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/A2OpfkN.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/IOnuNJb.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/8U4Da8f.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/FfX32iq.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/6yEE2mL.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/2NHPrXy.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/7k9Kp6Z.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/DiTyDDl.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/OLsXMMk.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/OMtpGHf.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/N78v5En.png)
我们还可以对非结构化网格通过合并来生成较为规则的网格。
![](https://search.pstatic.net/common?src=https://i.imgur.com/eK93LyB.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/bF0c0X9.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/lCHYSiy.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/tKiPcBA.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/U9Iw0l3.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/scjPbu0.png)
总结一下,在FEA中我们希望网格生成算法能够给出全自动、鲁棒性好而且质量高的网格。
![](https://search.pstatic.net/common?src=https://i.imgur.com/fMYhrrS.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/7u86wDZ.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/ncveEeI.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/VCCYJUV.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/T8KvSfX.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/FYREs6G.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/HL9fBNr.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/LJ8D4xn.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/KCyZOV7.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/vwvcLah.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/Vrb8rVY.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/vvor7oH.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/wP1De9m.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/0tbgaTu.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/EI74Xy6.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/lo6wTuS.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/kAYh7lG.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/0AgcCja.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/JTh2UaI.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/1JF8OWE.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/gsSX1vP.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/O7uBt4D.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/UQWDmK1.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/h6zmSgH.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/FyGNEQQ.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/ggtipWb.png)