本次给大家分享的是:有限元数值编程中面对几乎不可压问题时,如何选择性减缩积分?
低阶单元完全积分在分析几乎不可压缩问题(泊松比接近0.5)时,易出现体积自锁,精度是非常差的!为适应此类情况,前辈们拓展了积分方案(减缩积分)以及各种数值技术来适应不可压问题,其中选择性减缩积分和B-BAR技术比较具有代表性。
本节主要分享选择性减缩积分技术,B-BAR的具体数值实现留作下一篇推文介绍,本次主要内容有:
如下图所示的平面应变问题( ),体积应变应为 ,对于不可压缩或者几乎不可压缩问题(如橡胶材料)来说,其泊松比无限接近于0.5,体积模量接近于无穷大,单元的体积在受力过程中几乎保持不变。
上图中的1、2、5号节点的自由度被固定,若要使单元1的体积保持不变,节点6不能沿着x方向移动,同时为了保持单元2的体积不变,节点6同样不能沿着y方向移动,因此就造成了节点6被固定,同样的道理,延伸至其他节点也是被固定,模型在受力过程中,网格各个节点均不能发生移动,产生了"闭锁"现象,有限元世界里常称之为"体积自锁"(volumetriclocking)或"网格自锁"(mesh locking)。
以上是从物理现象角度出发,解释何为体积自锁,其实背后有其数学物理方程来解释,本文档不打算记录该物理过程,感兴趣的读者可翻阅张雄老师的《有限元法基础》。
从这个名字来看,顾名思义就是要选择性的进行减缩积分计算,不要被名字所吓到,静下心一点一点学习这个概念,学习前辈们的智慧。
单元刚度矩阵 可以分解为偏刚度矩阵 (deviatoricstiffnessmatrix)和体积刚度矩阵 (volumetric/dilatationalstiffness matrix),类似于弹性力学中将应力分解为偏应力和静水压力。
对于几乎不可压缩问题,体积模量趋于无穷大,体积刚度矩阵 远远大于偏刚度矩阵 ,若要避免自锁(体积自锁或剪切自锁)现象,必须使得体积刚度矩阵阵 发生奇异时(有非零解),相关理论解释可翻阅《有限元法基础》P275。
在数值积分时,对于偏刚度矩阵 可采用完全积分,对于体积刚度矩阵 可采用减缩积分,保证其矩阵奇异。
对于体积自锁现象,用户也可使用全局减缩积分,但可能会出现虚假的沙漏模态,此时需要添加沙漏刚度避免沙漏现象自研有限元程序的减缩积分单元如何添加沙漏刚度(理论解释+数值实现),选择性减缩积分不必需要添加额外的沙漏刚度就可以保证解的收敛性。
接下来就详细展开,这两个刚度矩阵具体该如何求解。应力将其分解为体积应力( )和偏应力( ):
其中, 表示体积应变部分的弹性矩阵, 表示偏应变部分的弹性矩阵。
为统一形式, 和 可写为:
其中, 为剪切模量, 为体积模量,在三维问题中,
其显示表示式为:
在二维问题中,
在以上
以上公式可能比较多,但都已给出显化形式,所以在程序中其实很好编,不需要过多的循环嵌套,把握好哪里需要完全积分哪里需要减缩积分即可:
% 偏刚度完全积分
for n=1:size(gaussWeights,1)
% 高斯积分点位置
xi_Gauss=gaussLocations_cols(n,1);
eta_Gauss=gaussLocations_cols(n,2);
% 形函数在自然坐标系下的偏导
[~,naturalDerivatives]=shapeFunctionQuad(xi_Gauss,eta_Gauss,elemType);
% 计算雅可比矩阵及形函数在物理坐标系下的偏导
[Jacob,XYderivatives]=Jacobian(elemNodeCoordinate,naturalDerivatives);
% 计算几何矩阵B
B(1,1:2:end) = XYderivatives(:,1)';
B(2,2:2:end) = XYderivatives(:,2)';
B(3,1:2:end) = XYderivatives(:,2)';
B(3,2:2:end) = XYderivatives(:,1)';
% 积分点循环计算单元刚度矩阵
k = k+B.'*D*t*B*gaussWeights(n)*det(Jacob);
end
% 体积刚度减缩积分
xi_Gauss = 0.0;eta_Gauss = 0.0;gaussWeights = 4;
[~,naturalDerivatives]=shapeFunctionQuad(xi_Gauss,eta_Gauss,elemType);
[Jacob,XYderivatives]=Jacobian(elemNodeCoordinate,naturalDerivatives);
B(1,1:2:end) = XYderivatives(:,1)';
B(2,2:2:end) = XYderivatives(:,2)';
B(3,1:2:end) = XYderivatives(:,2)';
B(3,2:2:end) = XYderivatives(:,1)';
k = k+B.'*m*K*m'*t*B*gaussWeights*det(Jacob);
数值案例仍然采用沙漏控制章节的案例,现考虑如下图所示的
分别使用完全积分、带沙漏控制的全局减缩积分、选择性减缩积分方案进行有限元分析计算,计算结果汇总于下面图表。
本次案例为了模拟几乎不可压缩材料,将泊松比设置为0.499,从图3.34(a) 和表3.4可以看出,采用完全积分方案计算时,内壁节点的位移精度已经完全失真,可初步得出结论:线性单元完全积分时不能用于模拟几乎不可压材料的力学行为。图3.34(b)-3.34(c)和表3.4可以看出,带沙漏控制的减缩积分方案在应用几乎不可压问题时精度良好,选择性减缩积分在不带沙漏控制的前提下也可以较好地解决几乎不可压问题。
如果对于程序的精度还存在疑问,可进行分片试验,方法在前几次的推文中均已给出,本小节的选择性减缩积分方案可以通过分片试验,读者可自行验证。
表3.4是针对于本次问题的精度对比,不代表所有问题中选择性减缩积分都比带沙漏控制的减缩积分方案精度逊色,在应用实际问题时,还需具体问题具体分析,本着学习的初衷可将这些方案都学习一下,实际用的过程中,还需灵活运用。
声明:本篇理论知识来源有张雄老师的《有限元法基础》、Hughes老爷子的《Thefinite element method linear static dynamic finite elementanalysis》,在后台回复
Hughes
,即可自动获取老爷子的著作。
本次分享的理论解释和matlab代码均上传至《有限元基础编程百科全书》最新版PDF中,后台回复:星球
,即可加入获得最新版PDF,对代码的任何疑问欢迎在星球中进行提问。
本章节的缩略图: