matlab自带有限元工具分析圆孔应力集中问题

有限元分析结构的力学行为是力学人必备的知识技能,一般分析的步骤为几何建模、划分网格、施加荷载和边界条件、求解,下面我将利用matlab自带的有限元求解器来解决圆孔应力集中问题,本文的matlab版本为2020a及以上。

1. 几何模型的建立

matlab有自带的简单几何模型的建立,这里只需要一个方形的板左下角去掉一个1/4的圆形图形。给定方形板的几何特征是1×1,圆孔的半径为0.1,那么可以首先利用matlab创建pde模型:

model = createpde('structural','static-planestress');

这里指定分析类型为结构分析下面的静力问题-平面应力。

然后用decsg(gm,sf,ns)函数创建几何模型,这个函数有三个输入参数,第一个是描述几何特征的多个列向量gm(意思是geometry matrix),第二个是描述几何相互之间操作关系(比如差集、并集等)的一个符号表达式sf(意思是string function),第三个参数是给你的每个描述的几何命名ns(意思是name space)。

首先是描述几何特征的列向量:这个列向量第一个数字是1-4的整数,1表示圆,2表示多边形,3表示矩形,4表示椭圆。对于圆来说,1后面跟的数字是圆心的x坐标、y坐标、半径值;对于多边形来说,2后面跟的数字是多边形的顶点个数n、n个顶点的一次x坐标、n个顶点的依次y坐标;对于矩形来讲,3后面跟的是4、4个点的x坐标、4个点的y坐标;对于椭圆的话,4后面跟着的是椭圆中心的x坐标、y坐标、x半轴、y半轴。

本例子中描述几何的列向量有两个,分别是方形(矩形)列向量和圆形列向量,注意因为描述几何的列向量长度并不一样,所以短的要在后面补0对齐长的,然后按两列的形式放在decsg函数的第一个输入参数的位置。我们gm定义为

square_x = 0; square_y=0; square_sidelength = 1;
square = [3, 4, 0, 1, 1, 0, 0, 0, 1, 1]';
circle_x = 0; circle_y = 0; circle_radius = 0.1;
circle = [1,0,0,circle_radius]';
circle = [circle; zeros(numel(square)-numel(circle),1)]; % 补齐
gm = [square, circle];

其次我们首先确定decsg的第三个输入参数ns,两列代表两个几何分别是正方形和圆,我们用字符串'sq'代表正方形,'cir'代表圆形,那么ns可以表达为:

ns = char('sq','cir')';

最后再确定几何相互之间操作关系sf,这里是正方形减去圆,也即是:

sf = 'sq-cir'; % 用正方形的名字减去圆的名字

最后就可以使用decsg函数构建圆孔应力集中的模型的edge了

g = decsg(gm, sf, ns); % 注意模型g只是edge

利用geometryFromEdges函数可以得到模型的几何

geometryFromEdges(model, g); % 从边界构建几何

我们用pdegplot函数可以画出模型的几何信息,包括edge、face,也即是边的编号、面的编号。

pdegplot(model,'EdgeLabels','on','facelabels','on')

效果展示如下

2. 网格的划分

matlab网格划分很有意思,对于二维只有三角形网格,对于三维只有四面体网格,但是有线性和二次的差别。这里模型是二维的,为了较高的精度,我们用二次单元。网格划分函数generateMesh函数,里面hmax参数是最大单元尺寸,这里给出为0.02。GeometricOrder是单元阶数。

generateMesh(model,'GeometricOrder','quadratic','hmax',0.02);

同时可以用pdeplot显示划分好网格的模型

pdeplot(model)

最后划分的网格如下图

3. 给定模型的物理参数

物理参数其实就是弹性模量泊松比,如果是动力学问题,还需要给定密度之类的。matlab里面一句话解决:

structuralProperties(model,'YoungsModulus', 210e9,'PoissonsRatio',0.2);

4. 荷载和边界条件施加

之前的pdegplot已经显示出了模型的边界编号,这样就方便施加荷载了,我们这个例子,下边界需要给定y方形位移约束,左边界需要给定x方向位移约束,上边界需要一个y方向的应力,方便起见,上边界y方向的应力设置为1,边界约束条件以及荷载施加的代码如下:

structuralBC(model,'Edge',3,'Ydis',0) 
structuralBC(model,'Edge',4,'Xdis',0)
structuralBoundaryLoad(model,'Edge',2,'surfaceTraction',[0,1]);

5. 求解

matlab求解的函数很傻瓜,就一个solve就行!!

structuralresults = solve(model);

6. 后处理

我们可以发现,matlab有自带的后处理函数,很方便,这里就直接贴代码了

figure(3)
clf
pdeplot(model,'XYData',structuralresults.Displacement.x, ...
                          'Deformation',structuralresults.Displacement, ...
                          'DeformationScaleFactor',0, 'colormap','jet')
axis equal
figure(4)
pdeplot(model,'XYData',structuralresults.Displacement.y, ...
                          'Deformation',structuralresults.Displacement, ...
                          'DeformationScaleFactor',0, 'colormap','jet')
axis equal
figure(5)
clf
pdeplot(model,'XYData',structuralresults.Stress.yy, ...
                          'Deformation',structuralresults.Displacement, ...
                          'DeformationScaleFactor',0, 'colormap','jet')
axis equal

7. 画图出的结果

y方向位移云图如下:

x方向位移云图如下:

y方向应力云图sigma_yy如下

可见应力集中系数约为3,可以用以下命令得到具体的值:

>> max(structuralresults.Stress.yy)

ans =

    3.0537

以上就是我的全部分享,对于三维结构、动力学、热传导、模态分析等都可以套这个模式计算呢!!

  • 21
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

joel_1993

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值