我对有限元的理解
----《论语》
这里只讨论基于位移(注1)的有限元方法,它最终建立的是关于位移为未知量的方程组。也就是说,在推导过程中涉及到的其他未知物理量都要转化为位移的表达。
推导过程中用到的关键物理定律,虚功原理或最小势能原理。由于这两者在某些情形下是等价的,这里只以虚功原理为例进行说明。所谓的虚功原理,是说对于静态平衡的系统,力(注2)在虚位移上所做的功等于应力在虚应变上所作的功[1]。
本段来具体分解虚功原理中涉及到的概念及由之建立的方程。先来看功。在标量的情形下,功等于力和其作用距离的乘积,而在向量的情形下,功为力与物体位移(这两者都是向量)的内积,标量的结果可以看作它的一种特殊情形。值得一提的是,由于体力,面力以及外力和物体的具体形状都给定,所以虚功原理中的力可以看作是已知的。再来看应力和应变。直观地理解,应力可以看作物体的内力(鲍老师语),应变是在应力作用下引起的变形的一种描述,它包括物体内一点邻域内变形前后长度和角度的变化量[2]。在弹性力学中给出了应力和应变之间的关系,称为本构关系,它是有限元推导过程中一个必要的关系;由于讨论的是基于位移的有限元,如果能够给出应变与位移之间的函数关系(称为几何关系,推导过程中另一个必要的关系),加上刚提到的本构关系,那么应力在虚应变上所作的功就可以表述为位移的函数。最后来看“虚”这个概念,虚位移指的是符合约束条件的任意的无穷小位移。
根据虚功原理列出相应的方程组后,经过移项等处理后,得到关于位移的函数乘以虚位移等于零的结果。注意到虚位移的任意性,得到关于位移的函数为零(这一点可以给出证明[3],它也是数学分析中一个经典的证明,有兴趣的同学可以自己证明下)。这就是有限元要建立的最终结果。
细心的童鞋可能会发现,上面的叙述只是一个理论上的框架,其中某个未知变量关于位移的函数只是一笔带过。那么,具体到编程实现上,该如何给出相应的函数呢?首先,给出整个物体上关于位移(它是一个连续量)的函数在绝大部分情况下是不可行的。退而居其次,在离散的空间中进行定义,如果离散的程度很小,就可以近似连续情形下的结果。这是数值求解实际问题的一个通用的步骤,称之为连续问题离散化。具体到有限元中,就是将一个连续区域划分成彼此不相交的区域(二维情形下是三角形或者四边形,三维情形下是四面体或者六面体),称之为单元或者网格,单元之间通过节点相连,有限元最终建立的就是关于单元节点处位移的方程组。而单元中除了节点外其他的点处的位移,可以基于节点处的位移值进行插值得到。其次,即便将问题域离散化,那么采用什么样的函数(称之为形函数)来拟合单元内某点处的位移呢?最容易想到的,自然是多项式函数[4],主要是因为它容易理解,计算简单,逼近的精度也能达到要求。当然,函数系的选取要结合具体的问题。如果边界条件是周期边界条件,经常使用三角函数来进行逼近。现在有了单元内任一点的位移表达式,那么相应的应变和应力也就可以表达出来,自然地,应力在虚位移上所作的功也可以表示出来。注意的是,这里要使用积分的表达式,而且最终的结果中是关于位移的二次项表达。
再来看等式的另一端,目的是将之表达为节点处位移的函数,再根据虚位移的任意性,就可以将问题转化为关于位移的线性方程组。仅以体力为例进行说明,给定单元内任一点处的位移表达式,根据等功原理,即体力在单元上所作的功将其等价为集中力力在单元节点处所作的功,就将体力的功转化到单元节点处的表达。
主体框架搭建完毕,简言之,最终建立了一个关于单元节点处位移的线性方程组。剩下的一些关键问题,比如从单元刚度矩阵到总体刚度矩阵的构建,坐标系的旋转变换,线性方程组的求解,积分的运算等等,其中第一个问题是编程时必须考虑的问题,最后的结果使用稀疏矩阵来存储,第二个问题是计算机图形学的必内容,最后两个问题是数值计算研究的主要内容。也就是说,具体的实现就成了一个数学问题。不较真地可以这样认为,上述问题在数学上都是可解的。
注1:假设通过求解线性方程组得到位移的结果,那么根据几何关系,就可以得到应变的分布,再根据本构关系,能够得到应力的分布。
注2:这里的力包括体力和面力。体力,指的是分布在物体体积上的力,如重力等,它在有限元中对应于体积载荷,推导过程中要将其转化为对应的单元节点力,文中有述;面力,即作用在物体表面上的力,在有限元中对应于边界分布的情形,和体力一样,推导时也要将其转化为对应的单元节点力。
参考文献:
[1] http://zh.wikipedia.org/wiki/%E8%99%9B%E5%8A%9F#.E8.99.9B.E5.8A.9F.E5.8E.9F.E7.90.86
[2] 《物理学与偏微分方程第二版(上册)》,第五章:弹性力学,李大潜等著,北京:高等教育出版社,2006年
[3] 《微分方程数值解法(第四版)》,李荣华等著,北京:高等教育出版社,2009年
[4] http://zh.wikipedia.org/wiki/%E9%80%BC%E8%BF%91%E7%90%86%E8%AE%BA
posted on 2015-05-13 09:07 caicailiu 阅读(1148) 评论(0) 编辑 收藏 举报