poutre_exo15.m 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. close all ; clc;
  2. % Script pour la poutre de l'exercice de cours exo15
  3. % poutre sur 2 appuis, modelisee par nelt elements
  4. %
  5. % Fonctions utilisees
  6. % statiqueUR : calcul de la reponse statique [U,R]
  7. % plotstr : trace du maillage avec numero noeuds et elements
  8. % plotdef : trace de la deformee
  9. % resultante : calcul de la resultante en x, y, z d'un vecteur nodal
  10. % poutre_stress : calcul de la contrainte dans un element poutre
  11. % poutre_compar : comparaison avec la solution analytique
  12. %
  13. global nddln nnod nddlt nelt nnode ndim ncld
  14. global Coord Connec Typel Nprop Prop Ncl Vcl F
  15. disp(' ');
  16. disp('structure etudiee : poutre de l''exercice de cours exo15');
  17. disp('==================');
  18. % definition du maillage
  19. nelt = input('donner le nombre d''elements ne ? [2]: ');
  20. if isempty(nelt) nelt=2; end
  21. L = 1;
  22. Coord=[];
  23. for j=0:nelt Coord=[Coord; j*L/nelt]; end
  24. [nnod,ndim]=size(Coord);
  25. nddln=2; nddlt=nddln*nnod;
  26. Connec=[]; nnode = 2;
  27. for j=1:nelt Connec=[Connec;[j j+1]]; end
  28. % definition du modele EF : type des elements
  29. Typel = 'poutre_ke';
  30. for i=1:nelt Typel = char('poutre_ke',Typel); end
  31. % definition des caracteristiques mecaniques elementaires (EI f) (en 1D)
  32. Nprop = ones(nelt); % pour chaque element numero de la propriete
  33. Prop=[ 1 -384 ]; % tableau des differentes valeurs de EI fy
  34. % definition des CL en deplacement
  35. CL=[ 1 , 1 , 0 ; ... % numero du noeud, (1 ddl impose ,0 ddl libre)
  36. nelt+1 , 1 , 0 ];
  37. Ncl=zeros(1,nddlt);ncld=0;
  38. Vcl=zeros(1,nddlt); % Valeurs imposees nulles
  39. for i=1:size(CL,1)
  40. for j=1:nddln
  41. if CL(i,1+j)==1 Ncl(1,(CL(i,1)-1)*nddln+j)=1;ncld=ncld+1; end
  42. end
  43. end
  44. % definition des charges nodales
  45. F=zeros(nddlt,1);
  46. [Fx,Fy,Fz] = feval('resultante',F);
  47. plotstr % trace du maillage pour validation des donnees
  48. % ----- resolution du probleme
  49. U = zeros(nddlt,1);
  50. R = zeros(nddlt,1);
  51. [U(:,1),R(:,1)] = statiqueUR;
  52. plotdef(U)
  53. %----- post-traitement
  54. form =' %8.3e %8.3e %8.3e '; format = [form(1:8*nddln),' \n'];
  55. disp(' ');disp('------- deplacements nodaux sur (x,y,z) ----------');
  56. fprintf(format,U)
  57. disp(' ');disp('------- Efforts aux appuis ----------');
  58. fprintf(format,R(:,1));
  59. [Rx,Ry,Rz] = feval('resultante',R); %----- resultantes et reactions
  60. disp(' ');
  61. fprintf('La resultante des charges nodales en (x,y,z) est : %8.3e %8.3e %8.3e \n',Fx,Fy,Fz);
  62. fprintf('La resultante des charges reparties en (x,y,z) est : %8.3e %8.3e %8.3e \n',-Rx-Fx,-Ry-Fy,-Rz-Fz);
  63. fprintf('La resultante des efforts aux appuis en (x,y,z) est : %8.3e %8.3e %8.3e \n',Rx,Ry,Rz);
  64. disp(' ');disp('------- Contraintes sur les elements ----------');
  65. for iel=1:nelt %----- boucle sur les elements
  66. loce=[]; for i=1:nnode loce=[loce,(Connec(iel,i)-1)*nddln+[1:nddln]];end
  67. Ue=U(loce);
  68. feval('poutre_stress',iel,Ue);
  69. end
  70. reponse = input('Voulez-vous comparer avec la solution analytique? O/N [O]: ','s');
  71. if isempty(reponse) | reponse =='O'
  72. feval('poutre_compar',U); %----- comparaison avec la solution analytique
  73. end
  74. clear all
  75. return