FEM-Course-Matlab/4.1 薄板厚板模态分析/main_modal.m

79 lines
2.5 KiB
Mathematica
Raw Normal View History

2024-01-28 16:46:36 +00:00
clear all;close all;clc
%---------------------GEOMETRY-----------------------
a=10; %('<EFBFBD><EFBFBD><EFBFBD><EFBFBD> in x: ');
b=10; %('<EFBFBD><EFBFBD><EFBFBD><EFBFBD> in y: ');
%---------------------MESH---------------------------
ex=15; %input('x<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ');%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2*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>С<EFBFBD>Խ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>кܴ<EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD>
ey=15; %input('y<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ');
mesh=MeshGenerator(a,b,ex,ey);
%---------------------ELEMENT------------------------
ShapeOption='Q4';%Q8 Q9
quadrature=GaussQuadrature('gauss1');
% gauss1 Ϊ<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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD>
%---------------------MATERIAL------------------------
%SI mm t MPa N
material=struct();
material.t=0.5; %ע<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><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
material.E=200e9;
material.v=0.3;
material.rho=7800;
material.G=material.E/(2+2*material.v);
K=StiffnessMatrix(material,mesh,quadrature,ShapeOption);
M=MassMatrix(material,mesh,quadrature,ShapeOption);
%---------------------LOADS----------------------------
p0=1e3;
F=ForceVector(mesh,quadrature,ShapeOption,p0);
% c0=input('\n<EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><EFBFBD>صĴ<EFBFBD>С: ');
% cl=input('\nLato da caricare: ');
% F=ForceVector(cl,c0,mesh);Lato da caricare
%---------------------CONSTRAINTS-----------------------
%nc is nodes of constrained elemment
nc=[mesh.lato1];%<EFBFBD><EFBFBD><EFBFBD>۰<EFBFBD>
%nc=[mesh.lato1 mesh.lato2(2:end) mesh.lato3(2:end) mesh.lato4(2:end-1)];%%<EFBFBD>ı߹̶<EFBFBD>
[K_c,M_c,F_c,nctot]=Constraints(nc,K,M,F);
%---------------------SOLUTION---------------------------
w=StaticSolver(K_c,F_c,mesh,nctot);
sprintf('<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>%f',max(abs(w)))
%---------------------PLOT-------------------------------
figure
surf(mesh.x(1,:),mesh.y(:,1),reshape(w,size(mesh.x,2),size(mesh.x,1))');
% axis equal
hold on
title('Deformed geometry')
%-------------------MODAL ANALYSIS--------------------
numberMode=5;
% %ԭʼģ̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'sm'
% [V,D]=eigs(M_c\K_c,numberMode,'sm');%'smallestabs'
% scal=0.5;
% f=diag(sqrt(D)/(2*pi));
% Vf=sortrows([V',f],size(V,1)+1);
% V=Vf(:,1:size(V,1))';%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD>M<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD>תK<EFBFBD><EFBFBD>M<EFBFBD><EFBFBD><EFBFBD><EFBFBD>K<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>sm'<EFBFBD><EFBFBD>'largestabs'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
[V,D]=eigs(K_c\M_c,numberMode,'lm'); %'largestabs'
scal=0.5;
f= power(diag(sqrt(D)),-1)/(2*pi);
Vf=sortrows([V',f],size(V,1)+1);
V=Vf(:,1:size(V,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>
index=1:mesh.nn*3;
Vo=zeros(mesh.nn*3,5);
index(nctot)=[];%ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD>
for i=1:numel(index)
Vo(index(i),:)=V(i,:);
end
f=sort(f);%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>
sprintf('Ƶ<EFBFBD><EFBFBD>Ϊ%f',f)
for i=1:numberMode
figure
surf(mesh.x(1,:),mesh.y(:,1),reshape(Vo(1:3:end,i),size(mesh.x,2),size(mesh.x,1))');
title(sprintf('modal %d',i))
end