FEM-Course-Matlab/17.接触问题matlab有限元编程/fem-contact/main_contact_node4.m

84 lines
2.5 KiB
Mathematica
Raw Normal View History

2024-01-28 16:46:36 +00:00
clear all;clc;close all;
global E u SD q0 Nx Ny
Nx=4;Ny=4;
E=2e6;%<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>
u=0; %<EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>
SD=2;%<EFBFBD><EFBFBD>ά<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
q0=-10;%ÿһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>صĺ<EFBFBD><EFBFBD><EFBFBD>
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%<EFBFBD><EFBFBD><EFBFBD>Ԫ
Patch=1;%<EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
[P1,E1,q0_node1,Boundary1] = Geometry(Patch, 0, 0);%<EFBFBD><EFBFBD><EFBFBD>ؽڵԪ<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʩ<EFBFBD>ӽڵ<EFBFBD>߽<EFBFBD>Լ<EFBFBD><EFBFBD>ʩ<EFBFBD>ӽڵ<EFBFBD>
dis_1=zeros(size(P1));
Patch=2;%<EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
[P2,E2,q0_node2,Boundary2] = Geometry(Patch, 0, 0);
dis_2=zeros(size(P2));
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD>͵<EFBFBD>Ԫ
Node=[P1;P2];
Element=[E1;E2+size(P1,1)];
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>񷵻ص<EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD>
[Nnod,Nele]=MeshPlot(Node,Element);
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸնȾ<EFBFBD><EFBFBD><EFBFBD>
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))];
time=1;
d_final=zeros(2*size(Node,1),1);
% f=figure;
% interval=5; %plot gif
while(time <100)
% clf(f);%plot gif
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><EFBFBD><EFBFBD>
Patch=1;
[K_Patch_1, F_Patch_1] = Linear_Elasticity(P1, E1, q0_node1,Boundary1,Patch);
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><EFBFBD><EFBFBD>
Patch=2;
[K_Patch_2, F_Patch_2] = Linear_Elasticity(P2, E2,q0_node2,Boundary2, Patch);
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD>patch<EFBFBD>ĸնȾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><EFBFBD>ؾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װΪһ<EFBFBD><EFBFBD>
K_Global=[K_Patch_1,zeros(size(K_Patch_1, 1),size(K_Patch_2,2)) ;zeros(size(K_Patch_2, 1),size(K_Patch_1,2)) ,K_Patch_2];
F_Global=[F_Patch_1; F_Patch_2];
%<EFBFBD><EFBFBD><EFBFBD>ǽӴ<EFBFBD>Լ<EFBFBD><EFBFBD>
Penalty=1e7;%<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
[K_Contact RC_force] = Contact_Formualtion(P1, P2,E1,E2, Penalty, dis_1, dis_2);
K_Global=K_Global+K_Contact;
d=linsolve(K_Global, F_Global);
d1=d(1:SD*size(P1,1));
d2=d(SD*size(P1,1)+1:SD*(size(P1,1)+size(P2,1)));
dis_1=dis_1+transpose(reshape(d1, size(dis_1,2), size(dis_1,1)));
dis_2=dis_2+transpose(reshape(d2, size(dis_2,2), size(dis_2,1)));
d_final=d_final+d;
time=time+1;
% %plot gif <EFBFBD><EFBFBD><EFBFBD><EFBFBD>GIF<EFBFBD><EFBFBD>ͼ
% [NodeStrain,NodeStress]=CalculateStrainAndStress2(d_final,D,Node,Element);
% PlotContour(Node,Element,d_final,NodeStress(2,:))%sigma_11
% axis([0 1 -0.1 0.7])
% caxis([-1591 123])
% colorbar off
% drawnow;
% F=getframe(f);
% I=frame2im(F);
% [I,map]=rgb2ind(I,256);
% if time == 2
% imwrite(I,map,'sigma_22.gif','gif', 'Loopcount',inf,'DelayTime',0);
% elseif mod(time,interval)==0
% imwrite(I,map,'sigma_22.gif','gif','WriteMode','append','DelayTime',0);
% end
end
% <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
gNTu = [dis_1;dis_2];
% <EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><EFBFBD><EFBFBD>ͼ
SF=1;
PlotResults2(Node,Element,gNTu,100);
[NodeStrain,NodeStress]=CalculateStrainAndStress2(d_final,D,Node,Element);
figure
PlotContour(Node,Element,d_final,NodeStress(1,:))%sigma_11
title('\sigma11');
figure
PlotContour(Node,Element,d_final,NodeStress(2,:))%sigma_22
title('\sigma22');