vibra_barre_coursMEF.m 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. close all ; clear; clc;
  2. % Script de calcul des modes de vibration de la barre encastree - libre
  3. % exemple du cours modelisee par nelt elements
  4. %
  5. % fonction utilisee
  6. % plotstr : trace du maillage avec numero noeuds et elements
  7. % vibrations : resolution du probleme
  8. %
  9. % H.Oudin
  10. disp(' ');
  11. disp('modes de vibration d''une barre encastree - libre');
  12. disp('==================');
  13. global nddln nnod nddlt nelt nnode ndim
  14. global Coord Connec Typel Nprop Prop Ncl Vcl F
  15. % definition du maillage
  16. nelt = input('donner le nombre d''elements nelt ? [2]: ');
  17. if isempty(nelt) nelt=2; end
  18. L = 1;
  19. Coord=[];
  20. for j=0:nelt Coord=[Coord; j*L/nelt]; end
  21. [nnod,ndim]=size(Coord);
  22. nddln=1; nddlt=nddln*nnod;
  23. Connec=[]; nnode = 2;
  24. for j=1:nelt Connec=[Connec;[j j+1]]; end
  25. % definition du modele EF : type des elements
  26. Typel = 'barre_keme';
  27. for i=1:nelt Typel = char('barre_keme',Typel); end
  28. % definition des caracteristiques mecaniques (en 1D)
  29. Nprop = ones(nelt); % pour chaque element numero de la propriete
  30. Prop=[ 1 1 ]; % tableau de ES RhoS
  31. % definition des CL en deplacement
  32. CL=[ 1 , 1 ];
  33. Ncl=zeros(1,nddlt);
  34. Vcl=zeros(1,nddlt); % deplacements imposes nuls
  35. for i=1:size(CL,1)
  36. for j=1:nddln
  37. if CL(i,1+j)==1 Ncl(1,(CL(i,1)-1)*nddln+j)=1; end
  38. end
  39. end
  40. F=zeros(nddlt,1);
  41. %plotstr % trace du maillage
  42. nmode = input('combien de frequences faut-il calculer ? [2]: ');
  43. if isempty(nmode) nmode=2; end
  44. f=[]; U=[];
  45. [f,U] = feval('vibrations',nmode);
  46. disp('frequences obtenues par le modele EF');
  47. f
  48. if f(1)>f(2)
  49. ft=fliplr(f');
  50. U=fliplr(U);
  51. f=ft';
  52. end
  53. ES=Prop(1,1);RS=Prop(1,2);
  54. norme = RS*L/2;
  55. taille = get(0,'ScreenSize');
  56. figure('Name','Comparaison analytique / numerique des modes de vibration de la poutre',...
  57. 'Position',[taille(3)/2.01 taille(4)/2.4 taille(3)/2 taille(4)/2])
  58. for j= 1: nmode
  59. x=[0:0.01*L:L]; y = sin((2*j-1)*pi*x/(2*L));%----- sol analytique appuyeee - appuyee
  60. fanal = (2*j-1)*sqrt(ES/(RS*(L^2)))/4;err=100*(f(j)-fanal)/fanal;
  61. subplot(nmode,1,j),title([int2str(j),' mode de vibration a la frequence ',...
  62. num2str(f(j),'%7.2f'),' / sol analytique ', num2str(fanal,'%7.2f'), ...
  63. ' soit une erreur de ', num2str(err,'%4.2f'), ' %']),hold on
  64. plot(x,y,'g'); plot(x,-y,'g'); axis([0 L -1.5 1.5])
  65. s = sqrt(norme);%---- facteur d'echelle sur la deformee EF a partir de la norme analytique
  66. for iel = 1:nelt
  67. Pos = Coord(Connec(iel,:),:); Le=Pos(2,1)-Pos(1,1);
  68. je=(Connec(iel,1)-1)*nddln+1;
  69. x = [0:0.1:1];
  70. y = s*( (1-x)*U(je,j) + x.*U(je+1,j));
  71. x = Pos(1,1)+ x*Le;
  72. plot(x,y,'b'); plot(x,-y,'b')
  73. end
  74. end
  75. return