罚单元可以用来使结构位移强制满足某个或某一组线性约束。它非实际单元,但它的所有行为都与实际单元相同。如图所示的结构对象,中间的铰接点不能看作拥有两个自由度的一个节点。因为连续梁的挠度函数在铰接点这里虽然连续但不可导,即节点两边,不同单元的转角是不一样的。
所以铰接点要建立两个节点。
这样一来自由度1和自由度3对应的位移必须相等,就需要建立约束关系 或者
以上述连续梁为例。将约束关系 写成矩阵形式:
两边再乘以矩阵 ,得到
两边再乘以参数 ,得
这就是罚单元,等号右边是罚荷载。然后再将其组装到整体刚度矩阵中。
理论上,参数 的取值越大越好,这样才能起到约束作用。实际取
取 验证罚单元的准确性。
import numpy as np
K = np.array([ [ 12+12e6, -6, -12e6, 0],
[ -6, 4, 0, 0],
[ -12e6, 0, 12+12e6, 6],
[ 0, 0, 6, 4] ])
F = np.array( [ [-4], [1], [0], [0] ])
x = np.linalg.solve(K, F)
print("Solution", x)