如何消除线性弹性中的刚体运动?


9

我想解决 Ku=b 哪里 K是我的刚度矩阵。但是,可能缺少一些约束,因此系统中可能仍然存在一些刚体运动(由于特征值零)。由于我使用CG求解线性系统,因此这是不可接受的,因为有时CG不会收敛于半正问题(但有时我会收敛)。

实际上,我在使用惩罚性置换方法,因为我要添加形式上的惩罚 α||u||2弹性能量。所以能量读

W(u):=12uT(K+αI)ubtu
哪里 α与刚度矩阵的一些对角线输入成比例。但这实际上起到了抑制某些时候我想要的变形模式的作用。

我的问题是:

a)我可以变换原始系统,所以必须使其不具有奇异性和正定性(例如坐标变换或全等变换或其他)吗?我的想法是使用这种转换在转换后的问题上仍然使用CG

b)有什么标准方法可以处理这些奇异现象?

非常感谢你 !

亲切的问候,

汤姆

Answers:


6

标准方法是添加约束 u(x0)=0 对于任意选择的节点 x0。这样可以确保您的身体无法平移或旋转,从而消除了零特征值。即使没有惩罚项,具有此约束的结果系统也是正定的。


1
谢谢!是的,但是我的情况是,我有几个浮动子结构,我无法确定要修复哪些节点(3D中的3个非共线节点)。这就是为什么我想知道是否没有更高级别的解决方案,因为在我的情况下,空空间是众所周知的。
汤姆(Tom)

如果您有多个结构,则需要为每个结构固定一个节点。哪一个都不重要,只需为每个结构选择一个即可。
Wolfgang Bangerth,2012年

3
@WolfgangBangerth这是3D弹性,因此您需要固定三个非共线的点以控制尺寸为6的零空间。固定这三个位移是9级扰动,要确保3级修改超出范围并不容易。空空间不会更改解决方案。对于要固定的点和值的任何选择,右手都有3维系列,其中固定的问题只为一个成员提供正确的答案。
杰德·布朗

不,您不能为3个约束固定3个点,因为您还要固定它们的相对距离。如果边界条件确实没有提供任何其他约束(例如,如果它们不是圆上的法向位移),则需要在其他两个点上固定1个点+各种旋转角度,总共需要6个约束。
Wolfgang Bangerth 2012年

6

如果知道零位空间,则可以使右侧兼容并使用Krylov方法防止预处理器造成污染,请参阅为什么固定点以消除零位空间不好?有待进一步讨论。在PETSc中,这是使用MatNullSpace对象完成的。请注意,您可以提供自己的函数来投影空空间,当您有许多浮动结构时,这将有助于降低投影成本。

如果您不知道空空间并且无法避免右侧不兼容,那么可以使用专门的Krylov方法(如MINRES-QLP)找到最小范数解。如果您的铰链和单点连接仅耦合某些模式,则此方法可能很有用。请注意,您仍必须注意造成污染的预处理器(例如,由于LU分解发现零轴,也许是在粗网格上)。


谢谢杰德!我考虑过通过投影迭代方法直接删除空空间。但是我想知道它是否不太昂贵(我可以创建一个可以投影出空空间的运算符,因为它的弹性确实很小)。我也认为剩余也应该被投影?
汤姆(Tom)

2
使右侧兼容并在每个预处理器应用程序之后投射出空空间(因为许多预处理器会污染空空间)。这产生了一个Krylov运算符ķ=一世-ñP-1个一个 这样 {bķbķ2b}与零空间正交。由于您的问题是对称的,因此您不需要为左和右空空间使用其他例程。如果您致电,这就是PETSc所做的MatSetNullSpace()
杰德·布朗
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.