71 lines
2.4 KiB
Mathematica
71 lines
2.4 KiB
Mathematica
|
|
%**************************************************************************
|
|||
|
|
function [U]=PlaneTrussFEA(x,y,ele,Load,Constr,Scale)
|
|||
|
|
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',1) %<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
figure('Name','Deformed Truss')
|
|||
|
|
RenderFrame(ele,Load,Constr,x,y,U,0.5,'-k',1) %<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);
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
%ʩ<EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>--<EFBFBD>˴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for iConstr=1:size(Constr,1)
|
|||
|
|
for j=1:3
|
|||
|
|
if ~isnan(Constr(iConstr,j))
|
|||
|
|
K(3*Constr(iConstr,1 )+j-3,3*Constr(iConstr,1 )+j-3)=...
|
|||
|
|
1e12*K(3*Constr(iConstr,1 )+j-3,3*Constr(iConstr,1 )+j-3);
|
|||
|
|
F(3*Constr(iConstr,1)+j-3)=1e12*Constr(iConstr,j)*...
|
|||
|
|
K(3*Constr(iConstr,1 )+j-3,3*Constr(iConstr,1)+j-3);
|
|||
|
|
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><EFBFBD><EFBFBD>
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ƣ<EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
% fp=fopen('Result.txt','a');
|
|||
|
|
% str = [char(13,10)','U',' ',num2str(U'),char(13,10)','Stress',' ',...
|
|||
|
|
% num2str(Stress),char(13,10)','AxialForce',' ',num2str(AxialForce)];
|
|||
|
|
% fprintf(fp,str);
|
|||
|
|
% fclose(fp);
|
|||
|
|
RenderFrame(ele,Load,Constr,x,y,U,1,'-.b',Scale) %<EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
% figure
|
|||
|
|
% AxisForcePlot(ele,Load,Constr,x,y,U,3,'-b',Scale,AxialForce)%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ
|
|||
|
|
|
|||
|
|
end %<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|