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

75 lines
2.8 KiB
Mathematica
Raw Permalink Normal View History

2024-01-28 16:46:36 +00:00
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [P,E,N_ID_p1,Boundary] = Geometry(Patch, dis_1, dis_2)
global Nx Ny
global time;
gap=-0.0001;%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶
switch Patch %options of Patch
case 1 %<EFBFBD>²<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
P=[0,0; 0.25,0; 0.5,0; 0.75,0; 1,0;
0,0.125; 0.25,0.125; 0.5,0.125; 0.75,0.125; 1,0.125;
0,0.25; 0.25,0.25; 0.5,0.25; 0.75,0.25; 1,0.25;
0,0.375; 0.25,0.375; 0.5,0.375; 0.75,0.375; 1,0.375;
0,0.5; 0.25,0.5; 0.5,.50; 0.75,0.5; 1,0.5
];%<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
P=P+ dis_1;%ͨ<EFBFBD><EFBFBD>λ<EFBFBD>Ƹ<EFBFBD><EFBFBD>½ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
%<EFBFBD><EFBFBD><EFBFBD>Ԫ
ele_num=0;
for i=1:Nx
for j=1:Ny
ele_num=ele_num+1;
E(ele_num,:)=[(i-1)*(Nx+1)+1+(j-1),(i-1)*(Nx+1)+2+(j-1),i*(Nx+1)+2+(j-1),i*(Nx+1)+1+(j-1)];
end
end
%Լ<EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
%<EFBFBD>߽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>type = 1 -- fixed disp [ 1--<EFBFBD>ڵ<EFBFBD><EFBFBD>̶<EFBFBD>; 0--<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ];
% type = 2 -- point load
% node, x, y, z, rx, ry, rz, type
for i=1:Nx+1
Boundary(i,:) = [i 1.0 1.0 1.0 0.0 0.0 0.0 1];
end
N_ID_p1=[];
case 2%<EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
P=[0.2,0.5; 0.3,0.5; 0.4,0.5; 0.5,0.5; 0.6,0.5;
0.2,0.55; 0.3,0.55; 0.4,0.55; 0.5,0.55; 0.6,0.55;
0.2,0.6; 0.3,0.6; 0.4,0.6; 0.5,0.6; 0.6,0.6;
0.2,0.65; 0.3,0.65; 0.4,0.65; 0.5,0.65; 0.6,0.65;
0.2,0.7; 0.3,0.7; 0.4,0.7; 0.5,0.7; 0.6,0.7
];
P(:,2)=P(:,2)+gap; %create contact gap between two patches
P(:,1)=P(:,1);
%update the coordinates using displacement
P=P+dis_2;
%<EFBFBD><EFBFBD><EFBFBD>Ԫ
ele_num=0;Nx=4;Ny=4;
for i=1:Nx
for j=1:Ny
ele_num=ele_num+1;
E(ele_num,:)=[(i-1)*(Nx+1)+1+(j-1),(i-1)*(Nx+1)+2+(j-1),i*(Nx+1)+2+(j-1),i*(Nx+1)+1+(j-1)];
end
end
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>صĵ<EFBFBD>Ԫ<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
E_ID_p1 = Nx*(Ny-1)+1:Nx*Ny; % <EFBFBD>ֲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
N_ID_p1 = zeros(size(E_ID_p1,2),size(E,2));%<EFBFBD>ֲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>Ԫ<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
j = 1;
for i_q = E_ID_p1
N_ID_p1(j,:) = E(i_q,:); %<EFBFBD>ֲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>Ԫ<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
j = j+1;
end
%Լ<EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
%<EFBFBD>߽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>type = 1 -- fixed disp [ 1--<EFBFBD>ڵ<EFBFBD><EFBFBD>̶<EFBFBD>; 0--<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ];
% type = 2 -- point load
% node, x, y, z, rx, ry, rz, type
for i=1:Nx+1
Boundary(i,:) = [(Nx+1)*Ny+i 1.0 0.0 0.0 0.0 0.0 0.0 1];%<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>
end
end
end