2010年1月27日星期三

转: 我的有限元学习笔记 (Part 5 - MFC : 多自由度约束(MultiFreedomConstraints)下的简化计算法)

我的有限元学习笔记 (Part 5 - MFC : 多自由度约束(MultiFreedomConstraints)下的简化计算法)

[ 2004-08-19 01:31:20 | Author: moneywood ]
Font Size: Large | Medium | Small
本文是我的有限元学习笔记的一部分,将随我学习进度在blog陆续po出,本人新手,请各位看官多提意见,谢谢!

Part 5 ...

这个和MS的基础类库一点关系都没有,你要是无辜search到这页,我先道歉了:)
先前DSM计算的时候,基本上是仅指定一个自由度的约束,比如某一节点的x向位移为0或某个值。如果约束条件并非这么简单,而是比如1号节点的x 向位移等一3号节点的x向位移,也就是说约束条件是一个有多个变量的方程的时候,我们就需要对刚度阵Ku=f进行改造以便于我们计算。
求解MFC的方法有三种:

1,Master-Slave Elimination.
这种方法是最便于手算的求解方法。首先你要确定主自由度和辅自由度,辅自由度的个数有约束方程的个数确定,一般是一个方程一个辅自由度,当然几个约束方程之间是线性无关的。然后将每个辅自由度用主自由度表示出来。
然后就是简化的过程了,主自由度和所有自由度之间可以通过前面的方程建立如下关系,[所有DOF]=T[主DOF],即u=Tu'。同理f=T(转置)f',那么简化后的刚度阵就是K'=T(转置)KT,然后就可以求解矩阵了。
这个方法看上去很美吧,不过你要知道,我们可不是要手算的,我们需要计算机来求解庞大的矩阵,所以考量是否利于计算机运算才是关键。我们注意到在 运用此方法演算的时候,会产生一个额外的T矩阵,如果辅DOF很小,这个T将非常大,等于让存储空间加倍,这是很不划算的;另一个问题是选择辅DOF上 的,手算的时候自己判断一下就可以了,人不会觉得这是个问题,不过计算机可不会自己挑选辅DOF,你还要额外编写程序遴选主辅DOF,还要防止出现重复的 定义,非常的麻烦。

2,Penalty Augmentation.
惩罚法,我们可以很形象的描述这种算法,如果两个DOF被约束住了,那么我们就给他们一个加锁,这儿的枷锁是一个刚度为w弹簧。加上弹簧后两个 DOF之间有如下关系:f1=w(u1-u2),f2=w(u2-u1);我们就把这个直接加到原先的矩阵上好了,没有额外的矩阵和运算,非常简单。不过 问题来了,如果u1和u2真的约束住了,那么w就该的等于无穷大。事实上如果这么算,那么很明显这是个病态矩阵。
那么关键就是怎么选择w了。我们知道计算机能识别的最小数字是有限的,也就是说,如果两个数字差别小到计算机识别的极限,我们就认为他们是相等 的,按照这个原理,大概w取到10的16次方程序就认为两个DOF完全约束了,不过这个数字相对矩阵里的其他值还是太大了;要继续减少w的值,我们要考虑 到误差的问题,即你可以容许计算中出现最大到多少的误差,根据这个标准确定w,最终推荐的w值大概在10的5-7次方之间,既兼顾了误差的要求,矩阵也不 会出现病态的情形。
综合考虑这种算法,除了确定w以外,其他方面都是可以接受的,但是无法确定w是致命的。

3,Lagrange Multiplier Adjunction.
拉格朗日附加乘子法。最后的这个方法是最佳的方案。他是从前一种方法引申过来的。在前一个方法中我们在两个DOF之间加了一个刚度为w的弹簧,其 实说穿了就是在两个自由度之间加一个约束力。那么我们干脆直接考察这对作用力的作用好了。我们把这一对力加在向量f上,那么原先的f1就变成了f1-a, 而f2就变成了f2+a。这时的a就是一个朗格朗日乘子。下面一步就是把这个乘子挪到刚度阵这一边,让他变成第n+1个DOF,那么自然刚度阵的阶数也 要+1,对应到f这一边舔一个0;这样就完成了一个扩大的刚度阵,可以求解了。
这个方法最好的地方在于他非常的利于计算机处理,基本不需要什么额外地对参数的确定,而且精确度也是最高的。

没有评论:

发表评论