FEM-Course-Matlab/11.框架结构静力分析matlab有限元编程/main_frame.m

75 lines
2.7 KiB
Mathematica
Raw Normal View History

2024-01-28 16:46:36 +00:00
clc,clear,close all
tic
nodeCoord=[0 0;0 3;0 6 ;0 9; 5 0;5 3;5 6;5 9];
EleNode=[1 2 ;2 3; 3 4 ;5 6; 6 7; 7 8 ;2 6 ;3 7;4 8];
x=nodeCoord(:,1)'; % <EFBFBD>ڵ<EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
y=nodeCoord(:,2)'; % <EFBFBD>ڵ<EFBFBD>y<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
A=0.08;E=3e10;I=0.0128/12; % <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>1<EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD>ڵ<EFBFBD>2<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=[1 1 2 A E I;2 2 3 A E I; 3 3 4 A E I;4 5 6 A E I; 5 6 7 A E I;6 7 8 A E I;7 2 6 A E I;8 3 7 A E I;9 4 8 A E I];;
%<EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>y<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>z<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Load=[4 2e5 0 0];
%Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>y<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>z<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>
Constr=[1 0 0 0;5 0 0 0];
Dofs=3*size(x,2); %<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD><EFBFBD><EFBFBD>
EleCount=size(ele,1); %<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
K=zeros(Dofs,Dofs); %<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>նȾ<EFBFBD><EFBFBD><EFBFBD>
F=zeros(Dofs,1); %<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
U=zeros(Dofs,1); %<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BarLength=BarsLength(x,y,ele);
figure('Name','Undeformed Truss')
RenderFrame(ele,Load,Constr,x,y,U,1,'-k') %<EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><EFBFBD><EFBFBD>
figure('Name','Deformed Truss')
RenderFrame(ele,Load,Constr,x,y,U,0.5,'-k') %<EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hold on
%<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>
for iEle =1:EleCount
%<EFBFBD>õ<EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>
n1=ele(iEle,2);n2=ele(iEle,3);
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
R=CoordTransform([x(n1) x(n2)],[y(n1) y(n2)],BarLength(iEle));
%<EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>նȾ<EFBFBD><EFBFBD><EFBFBD> Ke=R'*ke*R;<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>
ke= FrameElementKe(ele(iEle,4),ele(iEle,5),ele(iEle,6),R,BarLength(iEle));
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>նȷֿ<EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD>ܸ<EFBFBD><EFBFBD><EFBFBD>Ӧλ<EFBFBD><EFBFBD>
eleDof=[n1*3-2:n1*3,n2*3-2:n2*3];
K(eleDof,eleDof)=K(eleDof,eleDof)+ke;
end
%<EFBFBD>γ<EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>--1<EFBFBD><EFBFBD>2<EFBFBD><EFBFBD>3<EFBFBD><EFBFBD>4<EFBFBD><EFBFBD><EFBFBD>ɶȸ<EFBFBD><EFBFBD>غ<EFBFBD>ֵ
for LoadNum=1:size(Load,1)
for i=1:3
F(3*Load(LoadNum)+i-3,1)=Load(LoadNum,i+1);
end
end
%ʩ<EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>--<EFBFBD>˴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for iConstr=1:size(Constr,1)
for j=2:4
if ~isnan(Constr(iConstr,j))
K(3*Constr(iConstr,1 )+j-4,3*Constr(iConstr,1 )+j-4)=...
1e12*K(3*Constr(iConstr,1 )+j-4,3*Constr(iConstr,1 )+j-4);
F(3*Constr(iConstr,1)+j-4)=Constr(iConstr,j)*...
K(3*Constr(iConstr,1 )+j-4,3*Constr(iConstr,1)+j-4);
end
end
end
U=K\F; %ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>,<EFBFBD>˴<EFBFBD>ԭ<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>Ǿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʸij<EFBFBD>α<EFBFBD><EFBFBD>
%%%%%%%%%%%%
for iEle =1:EleCount
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˾ֲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>λ<EFBFBD><EFBFBD>
n1=ele(iEle,2);n2=ele(iEle,3);
R=CoordTransform([x(n1) x(n2)],[y(n1) y(n2)],BarLength(iEle));
localU = R*[U(3*n1-2:3*n1,1);U(3*n2-2:3*n2,1)];
[Ke_local] = FrameElementKeLocal(ele(iEle,4),ele(iEle,5),ele(iEle,6),R,BarLength(iEle));
EleForce(:, iEle)=Ke_local*localU; %<EFBFBD><EFBFBD>
end
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ƣ<EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD>ļ<EFBFBD>
MomentForce=EleForce([3,6],:);
MomentForce(2,:)=-MomentForce(2,:);%<EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>Ч<EFBFBD><EFBFBD>
RenderFrame(ele,Load,Constr,x,y,U,1,'-.b') %<EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD>
figure
ForcePlot(ele,Load,Constr,x,y,U,3,'-b',MomentForce)%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ
toc