FEM-Course-Matlab/15.温度应力问题有限元编程/StaticsSolver.m

51 lines
1.7 KiB
Mathematica
Raw Permalink Normal View History

2024-01-28 16:46:36 +00:00
%%%%%%%%%%% һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ƾ<EFBFBD><EFBFBD><EFBFBD>) %%%%%%%%%%%
% Uλ<EFBFBD>ƾ<EFBFBD><EFBFBD><EFBFBD>
% E<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>
% u<EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>
% Forces<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n*3 [<EFBFBD>ڵ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>С]
% Constraintsλ<EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>n*3 [<EFBFBD>ڵ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>С]
% Nodes<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
% Elements<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD>Ϣ
function [U]=StaticsSolver(E,u,epsilon0,Constraints,Nodes,Elements)
Dof=3;
NodeCount = size(Nodes,1); % <EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ElementCount= size(Elements,1); %<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dofs = Dof*NodeCount; %<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD><EFBFBD><EFBFBD>
U=sparse(Dofs,1); % <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
K = sparse(Dofs,Dofs); %<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><EFBFBD><EFBFBD>
Force = sparse(Dofs,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>D
D=LinearIsotropicD(E,u);
for I=1:ElementCount
% <EFBFBD><EFBFBD>Ԫ<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ElementNodeCoordinate=Nodes(Elements(I,:),:);
% <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
[ElementStiffnessMatrix,P_dT]=Ke(D,ElementNodeCoordinate,epsilon0);%<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>Ԫ<EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD>
% <EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶȱ<EFBFBD><EFBFBD><EFBFBD>
ElementNodeDOF=zeros(1,24);
for J=1:8
II=(J-1)*Dof+1;
ElementNodeDOF(II:II+2)=(Elements(I,J)-1)*Dof+1:(Elements(I,J)-1)*Dof+3;
end
K(ElementNodeDOF,ElementNodeDOF)=K(ElementNodeDOF,ElementNodeDOF)+ElementStiffnessMatrix;%<EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD> <EFBFBD><EFBFBD>װ<EFBFBD>ܸ<EFBFBD>
Force(ElementNodeDOF)=Force(ElementNodeDOF)+P_dT;%%<EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD>
end
% ʩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
% if size(Forces,1)>0
% ForceDOF = Dof*(Forces(:,1)-1)+Forces(:,2); %<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶȱ<EFBFBD><EFBFBD><EFBFBD>
% Force(ForceDOF) = Force(ForceDOF) + Forces(:,3);
% end
% <EFBFBD>˴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʩ<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>
BigNumber=1e8;
ConstraintsNumber=size(Constraints,1);
if ConstraintsNumber~=0
FixedDof=Dof*(Constraints(:,1)-1)+Constraints(:,2); %<EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶȱ<EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
for i=1:ConstraintsNumber
K(FixedDof(i),FixedDof(i))=K(FixedDof(i),FixedDof(i))*BigNumber;
Force(FixedDof(i))=Constraints(i,3)*K(FixedDof(i),FixedDof(i));
end
end
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
U = K\Force;
save data Force
end