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

79 lines
2.5 KiB
Matlab
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

clear all;close all;clc
%---------------------GEOMETRY-----------------------
a=10; %('长度 in x: ');
b=10; %('宽度 in y: ');
%---------------------MESH---------------------------
ex=15; %input('x向单元个数: ');%如果采用完全积分2*2,对于薄板,受剪切自锁现象影响,网格大小对结果有很大的影响
ey=15; %input('y向单元个数: ');
mesh=MeshGenerator(a,b,ex,ey);
%---------------------ELEMENT------------------------
ShapeOption='Q4';%Q8 Q9
quadrature=GaussQuadrature('gauss1');
% gauss1 为减缩积分,采用一个积分点避免剪切自锁,尤其对于薄板
%---------------------MATERIAL------------------------
%SI mm t MPa N
material=struct();
material.t=0.5; %注意薄板存在剪切自锁现象可通过尝试用减缩积分采用1个积分点来避免
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集中荷载的大小: ');
% cl=input('\nLato da caricare: ');
% F=ForceVector(cl,c0,mesh);Lato da caricare
%---------------------CONSTRAINTS-----------------------
%nc is nodes of constrained elemment
nc=[mesh.lato1];%悬臂板
%nc=[mesh.lato1 mesh.lato2(2:end) mesh.lato3(2:end) mesh.lato4(2:end-1)];%%四边固定
[K_c,M_c,F_c,nctot]=Constraints(nc,K,M,F);
%---------------------SOLUTION---------------------------
w=StaticSolver(K_c,F_c,mesh,nctot);
sprintf('最大位移为:%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;
% %原始模态计算方法'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))';%排序后的特征向量
%如果M奇异,反转K与M求K得逆并删除sm'用'largestabs'替代
[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))';%排序后的特征向量
%加入约束自由度
index=1:mesh.nn*3;
Vo=zeros(mesh.nn*3,5);
index(nctot)=[];%删除被约束的自由度
for i=1:numel(index)
Vo(index(i),:)=V(i,:);
end
f=sort(f);%排序后的频率
sprintf('频率为%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