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

计算科学 有限元 迭代法 共轭梯度
2021-12-16 07:39:54

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

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

W(u):=12uT(K+αI)ubtu
在哪里α与刚度矩阵的某个对角线条目成比例。但实际上这会抑制我有时想要的一些变形模式。

我的一些问题是:

a)我可以转换原始系统,使其摆脱奇点和正定(例如坐标变换或全等变换或其他)吗?我的想法是使用这样的转换在转换后的问题上仍然使用 CG

b) 是否有任何标准方法来处理这些奇点?

非常感谢你 !

亲切的问候,

汤姆

2个回答

标准方法是添加约束u(x0)=0对于任意选择的节点x0. 这确保你的身体不能平移或旋转,因此带走了零特征值。即使没有惩罚项,具有此约束的结果系统也是正定的。

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

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