有限元基础编程 | 边界条件专题(对角元素置“1”法、乘大数法、划行划列法、拉格朗日乘子法、罚函数法)

文摘   科技   2024-10-21 09:00   江苏  

题外话:因为微信的推荐机制变动,有可能大家不会第一时间看到我的文章,请大家给我的公众号标上⭐,以免错过好资源。

在求解整体刚度方程时,一定要考虑已有的边界条件,排除系统的刚体位移,才能求解节点的未知位移,常见的边界条件有以下三种形式:

换句话说,就是:

  1. 力加载
  2. 位移加载
  3. 多节点自由度耦合

本节分享的内容就是针对以上三种常见的边界条件形式,逐一给出求解方法,理论来源于曾攀老师的《有限元分析基础教程》和徐荣桥老师的《结构分析的有限元法与MATLAB程序设计》,想要深入了解的小伙伴也可翻阅相关文献进行深耕。


划行划列法

现考虑只有6个自由度的整体刚度方程:

假设1号自由度和4号自由度位移为:,针对每个已知的边界条件,改变相应的行、列元素,其余位置的载荷列阵也要跟着变化,读者可自行验证该矩阵变换的正确性。

"划行划列"法的特点:

  1. 既可以处理力加载的情况也可以处理位移加载的情况
  2. 保持原刚度矩阵的规模不变,不需重新排序
  3. 保持整体刚度矩阵的对称性,利于计算机的规范化处理

数值实现

for i=1:nconstrain 
  n=constrain(i,1); 
  d=constrain(i,2); 
  m = (n-1)*2 + d; 
  FFG = FFG - constrain(i,3) * KKG(:,m); 
  FFG(m) = constrain(i,3);
  KKG(:,m)=zeros(nnode*2,1); 
  KKG(m,:)=zeros(1,nnode\*2); KKG(m,m) = 1.0;
end

对角元素置"1"法

假设第3个自由度位移为0,即,这时的矩阵对应的对角元素为1,该行和该列的其余元素为0,载荷列阵的相应元素也为0。

对于第3行:

对角元素置"1"法的特点:

  1. 只能处理力加载的情况
  2. 保持原刚度矩阵的规模不变,不需重新排序
  3. 保持整体刚度矩阵的对称性,利于计算机的规范化处理

数值实现

for i=1:nconstrain 
  n=constrain(i,1); 
  d=constrain(i,2); 
  m = (n-1)\*2 + d; 
  KKG(m,:)=0;KKG(:,m)=0
  KKG(m,m)=1; FFG(m)=0
end

乘大数法

假设第4个自由度位移为,即,这时刚度矩阵对应的对角元素为乘以一个大数,载荷列阵的相应元素置为。对于第4行:

由于,则上式变为:

乘大数法的特点:

  1. 既可以处理力加载也可以处理位移加载的情况
  2. 保持原刚度矩阵的规模不变,不需重新排序
  3. 保持整体刚度矩阵的对称性,利于计算机的规范化处理
  4. 数值精度与大数的取值有关,太小了精度差,太大了容易出现"矩阵奇异"的现象

数值实现

for i=1:1:nconstrain 
  n = constrain(i,1); 
  d = constrain(i,2); 
  m =(n-1)*2 + d ; 
  FFG(m) = constrain(i,3)* KKG(m,m)* 1e8
  KKG(m,m) = KKG(m,m) * 1e8
end

拉格朗日乘子法

当存在多点之间的约束耦合关系时,就会出现带约束方程的表达式,其一般数学表达式可以写成:

也写成矩阵相乘的形式:,注意是一个约束系数矩阵,是一个载荷列向量,是一个约束系数列向量。

假设二维模型中2号节点与3号节点的1、2自由度绑定,即:

此时的将变为:

扩充至原刚度矩阵中,原刚度方程将变为:

以上示例是"两对自由度"进行耦合约束,对于更多节点更多自由度的耦合也是相同的道理,扩充相应列向量即可。

拉格朗日乘子法的特点:

  1. 可处理多节点、多自由度约束的情况
  2. 原有刚度矩阵的维数会随着耦合的自由度对数的增加而增加
  3. 计算精度良好

本文以二维平板模型单侧受拉为例,所用单元类型为常应变三角形单元,将4、5号节点两个自由度进行耦合约束,即U4X=U5X,U4Y=U5Y。自编程序与Abaqus的MPC约束求解精度对比总结于下表,从表中可以看出两者的求解精度几乎保持一致;位移云图对比如下图所示,从图中可以看到4、5号节点的位移量是一致的,导致云图发生曲折变化。

求解技术U4XU5XU4YU5Y
拉格朗日乘子法0.605012460.605012460.168989980.16898998
Abaqus0.605012000.605012000.168990000.16899000

数值实现

详见《有限元基础编程百科全书》

罚函数法

该方法将引入一个较大的系数来形成一个罚函数(penalty function approach),原刚度方程将转换为,其中是引入的罚系数。

罚函数法的特点:

  1. 可处理多节点、多自由度约束的情况
  2. 保持原刚度矩阵的规模不变,保留原有的对称性
  3. 计算精度与引入的罚系数大小有关

虽然引入大数后可以较为巧妙地解决多自由度耦合问题,但是往往这种方法会因为大数的取值影响求解精度,本小节将简要讨论罚系数的取值具体有多影响求解精度。

下表是取不同罚系数时,4号节点和5号节点的位移变化,从表中可以看出,随着罚系数的增大,数值结果越来越接近Abaqus结果,但是真的是越大越好吗?在我们实际编程中,当罚系数很大很大时,将会产生矩阵奇异性,也会影响结果精度,所以大数的取值是个值得思考的事情,程序中可以将罚系数设置为整体刚度矩阵元素绝对值最大值的1e4倍

罚因子U4XU5XU4YU5Y
1.0E50.514289960.660029490.084090770.08628681
1.0E70.597642010.609092110.162017800.16140338
1.0E100.605004530.605016830.168982480.16898178
1.0E120.605012380.605012500.168989910.16898990
Abaqus0.605012000.605012000.168990000.16899000

数值实现

详见《有限元基础编程百科全书》

以上推文已更新至《有限元基础编程百科全书》PDF文档中,扫描下方二维码或在后台回复“星球”,加入知识星球后,查看置顶文章即可获得《有限元基础编程百科全书》最新更新版本。
粉丝交流群:后台回复stress

参与更多互动交流,快快在下方留言区留下你的小脚印吧~

-End-

♡若喜欢这篇文章,欢迎带它去朋友圈逛♡

易木木响叮当

想陪你一起度过短暂且漫长的科研生活

微信公众号知识星球


易木木响叮当
一名求真务实的有限元领域小小UP主,专注于各种单元技术与非线性有限元分析,根据业余时间不定时更新干货内容,号内偶尔会有培训广告的插入,希望大家可以理解,感谢关注!
 最新文章