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

66 lines
2.7 KiB
Mathematica
Raw 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><EFBFBD> %%%%%%%%%%%
% NodeStrain<EFBFBD>ڵ<EFBFBD>Ӧ<EFBFBD><EFBFBD>
% NodeStress<EFBFBD>ڵ<EFBFBD>Ӧ<EFBFBD><EFBFBD>
% GaussStrain<EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>
% GaussStress<EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>
% Uλ<EFBFBD>ƾ<EFBFBD><EFBFBD><EFBFBD>
% D<EFBFBD>ߵ<EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>-Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
% Nodes<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
% Elements<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD>Ϣ
function [NodeStrain,NodeStress,GaussStrain,GaussStress]=CalculateStrainAndStress(U,D,Nodes,Elements,epsilon0)
ElementCount= size(Elements,1); %<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GaussCoordinate=[-0.57735026918963D0, 0.57735026918963D0]; %<EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GaussWeight=[1.00000000000000D0, 1.00000000000000D0]; %<EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>Ȩ<EFBFBD><EFBFBD>
GaussPointNumber=0;%<EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INODE=0;% <EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dof=3;
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ά<EFBFBD><EFBFBD> <EFBFBD>ӿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
GaussStrain=zeros(6,ElementCount*8);
GaussStress=zeros(6,ElementCount*8);
NodeStrain=zeros(6,ElementCount*8);
NodeStress=zeros(6,ElementCount*8);
%ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD>ܸ<EFBFBD>
for I=1:ElementCount
% <EFBFBD><EFBFBD>Ԫ<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ElementNodeCoordinate=Nodes(Elements(I,:),:);
% <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=1;
InterpolationMatrix=zeros(8,8);%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>Ӧ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
%ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD>
for X=1:2
for Y=1:2
for Z=1:2
E1=GaussCoordinate(X); E2=GaussCoordinate(Y); E3=GaussCoordinate(Z);
GaussPointNumber = GaussPointNumber + 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>
[N,NDerivative, ~] = ShapeFunction([E1 E2 E3], ElementNodeCoordinate);
ElementNodeDisplacement=U(ElementNodeDOF);
ElementNodeDisplacement=reshape(ElementNodeDisplacement,Dof,8);
% <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD> GausspointStrain3_3 3*3<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GausspointStrain3_3=ElementNodeDisplacement*NDerivative';
%<EFBFBD>Ѹ<EFBFBD>˹<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>6*1
GausspointStrain=[GausspointStrain3_3(1,1) GausspointStrain3_3(2,2) GausspointStrain3_3(3,3) ...
GausspointStrain3_3(1,2)+GausspointStrain3_3(2,1)....
GausspointStrain3_3(2,3)+GausspointStrain3_3(3,2) GausspointStrain3_3(1,3)+GausspointStrain3_3(3,1)]';
% <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>
GausspointStress = D*GausspointStrain-D*epsilon0;%<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>-<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>
GaussStrain(:,GaussPointNumber)=GausspointStrain;
GaussStress(:,GaussPointNumber)=GausspointStress;
InterpolationMatrix(K,:)=N;
K=K+1;
end
end
end
%<EFBFBD><EFBFBD><EFBFBD>ýڵ<EFBFBD>Ӧ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>
Temp1=InterpolationMatrix\(GaussStrain(1:6,GaussPointNumber-7:GaussPointNumber)');
NodeStrain(1:6,INODE+1:INODE+8)=Temp1';
Temp2=InterpolationMatrix\(GaussStress(1:6,GaussPointNumber-7:GaussPointNumber)');
NodeStress(1:6,INODE+1:INODE+8)=Temp2';
INODE=INODE+8;
end
end