有限元法边界条件的处理
边界上的节点通常有两种情况,
1. 一种边界上的节点可自由变形,此时节点上的载荷等于0,或者节点上作用某种外载荷,可以令该点的节点载荷等于规定的载荷Q。这种情况的处理是比较简单的。
2. 另一种边界上的节点,规定了节点位移的数值。这种情况下,有两种方法可以处理: * 划0置1法 * 置大数法
划0置1法是精确的方法,置大数法则是近似的方法。下面分别介绍这两种方法
置大数法
假设v自由度的位移已知为b(b可以为0或者其他任意值)。
1. 将v自由度相应对角线上的刚度系数 k(v,v) 换成一个极大的数,例如可以换成 k(v,v)*1E8 k(v,v) ---> k(v,v) * 1E8
2. 将v自由度相应节点载荷 F(v) 换成 F(v) * 1E8 * b F(v) ---> F(v) * 1E8 * b
3. 其余均保留不变,求出的 v =~ b
此方法的处理只需要修改两个数值即可,简单方便,虽然求得的是近似值,但一般仍然推荐使用。
置大数法来源于约束变分原理,本质和罚函数是一样的,得到的都是一个非精确值,施加起来在程序实现上相对简单,但是过大的大数可能引起线性方程的病态,造成在某些求解方法下无法求解,过小的大数有可能引起计算的误差,因此大数的选择也算是一个优化的过程吧,因此如果位移边界条件为0的话,主1副0的方法通用性更好吧
而位移非零的情况下,还有一种类似主1副0的方法可以采用吧,不过程序处理相对麻烦一点,我一下也没找到,你不妨找找看
这是在不增加方程个数的情况下的处理方式,拉格朗日乘子法好像也可以处理边界条件,但是会增加方程的个数,所以大家一般都不太用来着,拉格朗日乘子法和罚函数法的原理可以看一下王勖成写的那本有限元,如果英文好,不放看看监克维奇的那本英文的《finite element method》
划0置1法
假设v自由度的位移已知为b(b可以为0或者其他任意值)。 位移为0
1. 只保留相应主对角线上的元素k(v,v),其所在行(v)列(v)上其他元素均改为0。 2. 在载荷向量中,令F(v)=0 此时,求出的v = 0是精确解
位移不为0
1. 只保留相应主对角线上的元素 k(v,v),其所在行(v)列(v)上其他元素均改为0。 2. 在载荷向量中,令 F(v) = k(v,v)*b
F(i) = F(i) - k(i,v)*b i != v 此时,求出的v = b是精确解
划0置1法处理上比置大数法要麻烦不少,虽然求得的是精确解,但是还是使用比较少吧?
参考:朱伯芳《有限单元法原理与应用》
另外,谢谢小勇提供的有限单元法讲义
因篇幅问题不能全部显示,请点此查看更多更全内容