FEM-Course-Matlab/9.四面体单元悬臂梁Matlab有限元编程/PostContour.m

76 lines
2.7 KiB
Mathematica
Raw Permalink Normal View History

2024-01-28 16:46:36 +00:00
function PostContour(Nodes,Elements,U,Component_val)
NodeNum = size(Nodes,1) ; % <EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ElementNum = size(Elements,1) ; %<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ElementNodeNum=4; %ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD>
% <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>X Y Z<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>value<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>ͼ
X = zeros(ElementNodeNum,ElementNum) ;%4*<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD>ĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Y = zeros(ElementNodeNum,ElementNum) ;
Z = zeros(ElementNodeNum,ElementNum) ;
value = zeros(ElementNodeNum,ElementNum) ;
%<EFBFBD>жϾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>λ<EFBFBD>ƣ<EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>
if size(Component_val,1)>1%λ<EFBFBD><EFBFBD>
for i=1:ElementNum
nd=Elements(i,:);
value(:,i) = Component_val(nd) ;
end
else %Ӧ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>
%<EFBFBD>Ƚ<EFBFBD><EFBFBD><EFBFBD>ĥƽ<EFBFBD><EFBFBD>avg <EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD>ȡƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Difference=max(Component_val)-min(Component_val);%ȫ<EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ-<EFBFBD><EFBFBD>Сֵ
AVG=0.75; % Ĭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ75%
for i=1:1:NodeNum %<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>ĥƽ
TElements=Elements';%ת<EFBFBD><EFBFBD>Elements
itemp=(TElements==i);%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><EFBFBD>жϣ<EFBFBD>itemp:Ԫ<EFBFBD><EFBFBD>Ϊ0 1<EFBFBD>ľ<EFBFBD><EFBFBD><EFBFBD>
Cut=max(Component_val(1,itemp))-min(Component_val(1,itemp));%<EFBFBD>ýڵ<EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD>
if 0<Cut&&Cut<=AVG*Difference(1)%<EFBFBD>ж<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Component_val(1,itemp)=mean(Component_val(1,itemp));%<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ĥƽ
end
end
value=reshape(Component_val,ElementNodeNum,ElementNum);%<EFBFBD><EFBFBD>Component<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>value
end
% <EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD>ͼ
newNodes=Nodes';
newNodes=newNodes(:);
DeformationCoefficient=5.0e2; %<EFBFBD><EFBFBD><EFBFBD>ηŴ<EFBFBD>ϵ<EFBFBD><EFBFBD>
newNodes=newNodes+DeformationCoefficient*U;
newNodes=reshape(newNodes,[3,size(Nodes,1)]);
newNodes=newNodes';
% <EFBFBD><EFBFBD><EFBFBD>Ԫÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľڵ<EFBFBD>˳<EFBFBD><EFBFBD>(˳ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>)
if ElementNodeNum == 4 % C3D4<EFBFBD><EFBFBD>Ԫ
fm = [1 2 4;2 3 4;3 1 4;1 3 2];
elseif ElementNodeNum==6 %C3D6<EFBFBD><EFBFBD>Ԫ
fm=[1 2 3 1;4 5 6 4;1 2 5 4;1 3 6 4;2 3 6 5];
elseif ElementNodeNum == 8 % C3D8<EFBFBD><EFBFBD>Ԫ
fm = [1 2 6 5; 2 3 7 6; 3 4 8 7; 4 1 5 8; 1 2 3 4; 5 6 7 8];
elseif ElementNodeNum == 20 % C3D20<EFBFBD><EFBFBD>Ԫ
fm = [1,9,2,10,3,11,4,12;5,13,6,14,7,15,8,16;1,9,2,18,6,13,5,17;
2,10,3,19,7,14,6,18;3,11,4,20,8,15,7,19;1,17,5,16,8,20,4,12];
end
xyz = cell(1,ElementNum) ;
profile = xyz ;
%<EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>λ<EFBFBD>ø<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧֵ
for e=1:ElementNum %ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ڽڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
nd=Elements(e,:);
X = newNodes(nd,1) ;
Y = newNodes(nd,2) ;
Z = newNodes(nd,3) ;
xyz{e} = [X Y Z] ;
profile{e} = value(:,e);
end
% <EFBFBD><EFBFBD><EFBFBD><EFBFBD>patch<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>ͼ
figure
cellfun(@patch,repmat({'Vertices'},1,ElementNum),xyz,.......%<EFBFBD>ö<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭ<EFBFBD>ķ<EFBFBD>ʽ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
repmat({'Faces'},1,ElementNum),repmat({fm},1,ElementNum),......
repmat({'FaceVertexCdata'},1,ElementNum),profile,......
repmat({'FaceColor'},1,ElementNum),repmat({'interp'},1,ElementNum));
view(3);
rotate3d on;
axis off; %<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
colormap(jet);
caxis([min(Component_val),max(Component_val)]);
t1=caxis;
t1=linspace(t1(1),t1(2),13);
colorbar('ytick',t1,'Location','westoutside');
axis equal;
end