150 lines
4.2 KiB
Mathematica
150 lines
4.2 KiB
Mathematica
|
|
clear all;clc;close all;
|
|||
|
|
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>λ<EFBFBD><EFBFBD>
|
|||
|
|
Length=2;%2m
|
|||
|
|
min_H=0.2;max_H=0.6;%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
|
|||
|
|
Width=1;%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
E=3e10;%Pa 3e4MPa
|
|||
|
|
u=0.2;% <EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>
|
|||
|
|
q0=1000;%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1kN/m
|
|||
|
|
F_jizhong=2e3;%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2/kN
|
|||
|
|
|
|||
|
|
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD>͵<EFBFBD>Ԫ
|
|||
|
|
Ne_x=16;%<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>4
|
|||
|
|
Ne_y=8;%<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
|
|||
|
|
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))];
|
|||
|
|
|
|||
|
|
|
|||
|
|
Ne=Ne_x*Ne_y; % <EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
Nnod=(Ne_x+1)*(Ne_y+1);; % <EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
%<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
x=linspace(-1,1,Ne_x+1); %<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
rt=[repmat(Ne_y+1,1,Ne_x+1)]; % ÿ<EFBFBD>нڵ<EFBFBD><EFBFBD><EFBFBD> 5 3 5 3 5 3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
x=repelem(x,rt); % x<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չΪ<EFBFBD><EFBFBD><EFBFBD>нڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
y=[];
|
|||
|
|
dy=(max_H-min_H)/Ne_x/4;
|
|||
|
|
for i=1:Ne_x
|
|||
|
|
y=[y,linspace(-max_H/2+(i-1)*2*dy,max_H/2-(i-1)*2*dy,Ne_y+1)];
|
|||
|
|
end
|
|||
|
|
y=[y,linspace(-min_H/2,min_H/2,Ne_y+1)];
|
|||
|
|
Nodes=[x;y]';
|
|||
|
|
|
|||
|
|
% <EFBFBD><EFBFBD>Ԫ<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
num=0;
|
|||
|
|
for i=1:Ne_x
|
|||
|
|
for j=1:Ne_y
|
|||
|
|
num=num+1;
|
|||
|
|
Elements(num,:)=[(i-1)*(Ne_y+1)+j,(i-1)*(Ne_y+1)+j+1,i*(Ne_y+1)+j+1,i*(Ne_y+1)+j];
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
E_ID_p1 = Ne_y:Ne_y:Ne_x*Ne_y; % <EFBFBD>ֲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
N_ID_p1 = zeros(size(E_ID_p1,2),size(Elements,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,:) = Elements(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>
|
|||
|
|
E_ID_p2 = max(Ne_y:Ne_y:Ne); % <EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>***
|
|||
|
|
Nod_1=Elements(E_ID_p2,4); % <EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><EFBFBD>ؽڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>***
|
|||
|
|
|
|||
|
|
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>нڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
Elt_p3=max(Ne_y:Ne_y:Ne/2); % <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
Nod_mid=Elements(Elt_p3,3) ; % <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>нڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˽ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
Elt_p4=Ne_y ; % <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
Nod_left=Elements(Elt_p4,2) ; % <EFBFBD><EFBFBD><EFBFBD><EFBFBD><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
|
|||
|
|
|
|||
|
|
Boundary = [1 1.0 1.0 0.0 0.0 0.0 0.0 1;
|
|||
|
|
Nod_left 1.0 1.0 0.0 0.0 0.0 0.0 1;
|
|||
|
|
Nod_1 0.0 F_jizhong 0.0 0.0 0.0 0.0 2 ];
|
|||
|
|
|
|||
|
|
% <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>洢<EFBFBD>ռ<EFBFBD>
|
|||
|
|
K = zeros( 2 * Nnod , 2 * Nnod );
|
|||
|
|
F = zeros( 2 * Nnod , 1 );
|
|||
|
|
|
|||
|
|
for i=1:Ne
|
|||
|
|
ke=ele_stiff_matrix(i,Nodes,Elements,E,u,Width);
|
|||
|
|
ENodes( : , 1 ) = Elements( i , : );
|
|||
|
|
%<EFBFBD><EFBFBD>װΪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
iEnum = size( ENodes , 1 ); % <EFBFBD><EFBFBD>Ԫ<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
iDOFnum = 2 * iEnum; % <EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
iDof = zeros( 2 * iEnum , 1 ); % <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶȱ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
for il=1:iEnum
|
|||
|
|
inod = ENodes( il );
|
|||
|
|
iDof( 2 * il-1 : 2 * il) = 2 * inod-1 : 2 * inod;
|
|||
|
|
end
|
|||
|
|
% ƴװ<EFBFBD><EFBFBD>irΪ<EFBFBD>оֲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, irgΪ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for ir = 1 : iDOFnum
|
|||
|
|
irg = iDof( ir );
|
|||
|
|
% icΪ<EFBFBD>оֲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, icgΪ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for ic = 1 : iDOFnum
|
|||
|
|
icg = iDof( ic );
|
|||
|
|
K( irg , icg ) = K( irg , icg ) + ke( ir , ic );
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
%ʩ<EFBFBD>Ӻ<EFBFBD><EFBFBD>ر߽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
iLenElt = size(N_ID_p1,1); %<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for ie = 1:iLenElt
|
|||
|
|
for ind = 1:2 % ind<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶȱ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
iNode = N_ID_p1(ie,:); %<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
irow = (iNode-1)*2+ind;
|
|||
|
|
Pe = UniLoad(ie,N_ID_p1,q0,Nodes,Elements,Width); % 3<EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EquivalentLoad(ie)
|
|||
|
|
F(irow) = F(irow)+Pe(ind:2:end,:);
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
% <EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
iBct = size( Boundary , 1 );
|
|||
|
|
for ib = 1 : iBct
|
|||
|
|
iNode = Boundary( ib , 1 );
|
|||
|
|
iType = Boundary( ib , 8 );
|
|||
|
|
if iType == 2 % <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر߽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for ind = 1 : 2
|
|||
|
|
irow = ( iNode-1 ) * 2 + ind;
|
|||
|
|
F( irow ) = F( irow ) + Boundary( ib , ind + 1 );
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
%ʩ<EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for ib = 1 : iBct
|
|||
|
|
iNode = Boundary( ib , 1 ); % <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
iType = Boundary( ib , 8 );
|
|||
|
|
if iType == 1 % <EFBFBD>̶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for ind = 1 : 2
|
|||
|
|
irow = ( iNode-1 ) * 2 + ind;
|
|||
|
|
if ( Boundary( ib , ind + 1 ) == 1 )
|
|||
|
|
K( irow , : ) = 0.0;
|
|||
|
|
K( : , irow ) = 0.0;
|
|||
|
|
K( irow , irow ) = 1.0; % <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
|
|||
|
|
F(irow)=0.0;
|
|||
|
|
% gKA( irow , irow ) = 1.0e+20; % <EFBFBD>˴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
Disp = K \ F;
|
|||
|
|
% <EFBFBD>洢<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
|
|||
|
|
gNTu = zeros( Nnod , 2 );
|
|||
|
|
for id = 1 : Nnod
|
|||
|
|
gNTu( id , 1 : 2 ) = Disp( 2 * id - 1 : 2 * id );
|
|||
|
|
end
|
|||
|
|
% <EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><EFBFBD><EFBFBD>ͼ
|
|||
|
|
SF=1000;
|
|||
|
|
PlotResults2(Nodes,Elements,gNTu,SF);
|
|||
|
|
fprintf('<EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD>%fmm\n',max(abs(gNTu(Nnod,2)))*1000);
|
|||
|
|
ElementNodeCount=4;
|
|||
|
|
[NodeStrain,NodeStress]=CalculateStrainAndStress2(Disp,D,Nodes,Elements);
|
|||
|
|
PlotContour(Nodes,Elements,Disp,NodeStress(1,:))
|