FEM-Course-Matlab/5.三角形单元悬臂梁matlab有限元分析/main.m

113 lines
3.0 KiB
Mathematica
Raw Normal View History

2024-01-28 16:46:36 +00:00
clear;clc;;close all
format short
E=210e9;%<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λPa
u=0.4;%<EFBFBD><EFBFBD><EFBFBD>ɱȣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
q=100;%<EFBFBD><EFBFBD><EFBFBD>غɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λN/<EFBFBD>O
t=0.1;%<EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>λm
D=[E/(1-u^2),u*E/(1-u^2),0;u*E/(1-u^2),E/(1-u^2),0;0,0,E/(2*(1+u))];%Ӧ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bt=(3+0.5407762)*10^11;%<EFBFBD>˴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
long=5;%<EFBFBD><EFBFBD>5m
height=1;%<EFBFBD><EFBFBD>1m
ele_size=[0.2,0.2];%<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>DZ߳ߴ5m<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ,1m<EFBFBD>ߣ<EFBFBD>4<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ
ele_H=long/ele_size(1);%ˮƽ<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD>
ele_V=height/ele_size(2);%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD>
ele_num=ele_H*ele_V*2;%<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD>
node_num=(ele_H+1)*(ele_V+1);%<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD>
DOF=2;%ÿ<EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD>
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>Ľڵ<EFBFBD><EFBFBD><EFBFBD>
num=0;
for i=1:ele_H
for j=1:ele_V
num=num+1;
element(num,1)=1+(j-1)+(i-1)*(ele_V+1);
element(num,2)=1+(j-1)+i*(ele_V+1);
element(num,3)=2+(j-1)+(i-1)*(ele_V+1);
num=num+1;
element(num,1)=1+j+(i-1)*(ele_V+1);
element(num,2)=1+(j-1)+i*(ele_V+1);
element(num,3)=2+(j-1)+i*(ele_V+1);;
end
end
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
num=0;
for i=1:ele_H+1
for j=1:ele_V+1
num=num+1;
node(num,1)=(i-1)*ele_size(1);%x
node(num,2)=(j-1)*ele_size(2);%y
end
end
A=1/2*ele_size(1)*ele_size(2);%<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>5/10*1/4<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
%ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
ele_DOF=zeros(ele_num,DOF*3);
for i=1:ele_num
for j=1:length(element(i,:))%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ѭ<EFBFBD><EFBFBD>
ele_DOF(i,1+2*(j-1):2+2*(j-1))=2*(element(i,j)-1)+1:2*(element(i,j)-1)+2;
end
end
KZ=zeros(node_num*2,node_num*2);
for i=1:ele_num
ke=ele_stiff_matrix(element,node,i,A,D,t);%<EFBFBD><EFBFBD>Ԫ<EFBFBD>նȾ<EFBFBD><EFBFBD><EFBFBD>
KZ(ele_DOF(i,:),ele_DOF(i,:)) = KZ(ele_DOF(i,:),ele_DOF(i,:))+ke;
end
P=[]; P(2*(ele_V+1))=-1/2*q*t*long/ele_H;
for i=1:ele_H
P(10+2*(ele_V+1)*(i-1))=-q*t*long/ele_H;%5/10<EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD>
end
P(node_num*2)=-1/2*q*t*5/10;
PZ=P';%<EFBFBD>ܽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
%<EFBFBD>˴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʩ<EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>
cons_DOF=[1:(ele_V+1)*2];%Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶȱ<EFBFBD><EFBFBD><EFBFBD>
Disp=zeros(length(cons_DOF),1);%λ<EFBFBD><EFBFBD>Ϊ0
for i=1:length(cons_DOF)
KZ(cons_DOF(i),cons_DOF(i))=bt*KZ(cons_DOF(i),cons_DOF(i));
PZ(cons_DOF(i))=Disp(i)*KZ(cons_DOF(i),cons_DOF(i));
end
a=inv(KZ)*PZ;%<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for i=1:ele_num%80<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ
sgm(:,i)=stress_calculate(element,node,i,A,D,t,a);%<EFBFBD><EFBFBD>ԪӦ<EFBFBD><EFBFBD>
end
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ƾ<EFBFBD><EFBFBD><EFBFBD>
SF=1/5*1/max(abs(a));%λ<EFBFBD>ƷŴ<EFBFBD>ϵ<EFBFBD><EFBFBD>
new_node=node+SF*reshape(a,2,length(a)/2)';%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
figure
patch('Faces',element,'Vertices',node,'FaceColor','none','EdgeColor','r')
hold on;
patch('Faces',element,'Vertices',new_node,'FaceColor','none')
xlabel('x-coordinate')
ylabel('y-coordinate')
title('deformation')
axis equal
%Ӧ<EFBFBD><EFBFBD>
figure
patch('Faces',element,'Vertices',node,'FaceVertexCData',sgm(1,:)','FaceColor','flat')
axis equal
xlabel('x-coordinate')
ylabel('\sigma (Pa)')
title('\sigma_{11}')
colorbar
colormap(jet)
% figure
% patch('Faces',element,'Vertices',node,'FaceVertexCData',sgm(2,:)','FaceColor','flat')
% axis equal
% colorbar
% colormap(jet)
% title('sigma22')
% figure
% patch('Faces',element,'Vertices',node,'FaceVertexCData',sgm(3,:)','FaceColor','flat')
% xlabel('x-coordinate')
% ylabel('\sigma (Pa)')
% axis equal
% colorbar
% colormap(jet)
% title('sigma12')