portique_exo17b.m 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. close all ; clc;
  2. % Script pour la portique de l'exercice de cours exo17
  3. % maillage avec nelt elements
  4. % Fonctions utilisees
  5. % statiqueUR : calcul de la reponse statique [U,R]
  6. % plotstr : trace du maillage avec numero noeuds et elements
  7. % plotdef : trace de la deformee
  8. % resultante : calcul de la resultante en x, y, z d'un vecteur nodal
  9. % poutre_stress : calcul de la contrainte dans un element barre
  10. %
  11. global nddln nnod nddlt nelt nnode ndim ncld
  12. global Coord Connec Typel Nprop Prop Ncl Vcl F
  13. disp(' ');
  14. disp('structure etudiee : portique de l''exercice de cours exo17');
  15. disp('==================');
  16. disp('la poutre verticale est maillee en ne elements');
  17. ne = input('donner le nombre d''elements ne ? [1]: ');
  18. if isempty(ne) ne=1; end
  19. % definition du maillage
  20. h = 1; nelt=ne+1;
  21. Coord=[];
  22. for j=0:ne Coord=[Coord;[0 j*h/ne]]; end
  23. Coord=[Coord;[h h]];
  24. [nnod,ndim]=size(Coord);
  25. nddln=3; 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 (ES EI fx fy)
  32. Nprop = ones(nelt);
  33. Nprop(ne+1)=2;
  34. Prop=[ 2 1 -560 0 % tableau des differentes valeurs de ES EI fx fy
  35. 2 1 0 0 ];
  36. % definition des CL en deplacement
  37. CL=[ 1 , 1 , 1 , 1; ... % numero du noeud, type (1 ddl impose ,0 ddl libre)
  38. nnod , 1 , 1 , 1];
  39. Ncl=zeros(1,nddlt);ncld=0;
  40. Vcl=zeros(1,nddlt); % deplacements imposes nuls
  41. for i=1:size(CL,1)
  42. for j=1:nddln
  43. if CL(i,1+j)==1 Ncl(1,(CL(i,1)-1)*nddln+j)=1;ncld=ncld+1; end
  44. end
  45. end
  46. % definition des charges nodales
  47. Charg=[ 1 0 0 0 % numero du noeud , Fx,Fy,Mz
  48. ];
  49. F=zeros(nddlt,1); %----- vecteur sollicitation
  50. for iclf=1:size(Charg,1)
  51. noeud=Charg(iclf,1);
  52. for i=1:nddln
  53. F((noeud-1)*nddln+i)=F((noeud-1)*nddln+i) + Charg(iclf,i+1);
  54. end
  55. end
  56. [Fx,Fy,Fz] = feval('resultante',F); %----- resultante des charges nodales
  57. plotstr % trace du maillage
  58. U = zeros(nddlt,1);
  59. R = zeros(nddlt,1);
  60. [U(:,1),R(:,1)] = statiqueUR; % ----- resolution du probleme
  61. %----- post-traitement
  62. plotdef(U)
  63. form =' %8.3e %8.3e %8.3e '; format = [form(1:8*nddln),' \n'];
  64. disp(' ');disp('------- deplacements nodaux sur (x,y,z) ----------');
  65. fprintf(format,U)
  66. disp(' ');disp('------- Efforts aux appuis ----------');
  67. fprintf(format,R(:,1));
  68. [Rx,Ry,Rz] = feval('resultante',R); %----- resultantes et reactions
  69. disp(' ');
  70. fprintf('La resultante des charges nodales en (x,y,z) est : %8.3e %8.3e %8.3e \n',Fx,Fy,Fz);
  71. fprintf('La resultante des charges reparties en (x,y,z) est : %8.3e %8.3e %8.3e \n',-Rx-Fx,-Ry-Fy,-Rz-Fz);
  72. fprintf('La resultante des efforts aux appuis en (x,y,z) est : %8.3e %8.3e %8.3e \n',Rx,Ry,Rz);
  73. disp(' ');disp('------- Contraintes sur les elements ----------');
  74. for iel=1:nelt %----- boucle sur les elements
  75. loce=[]; for i=1:nnode loce=[loce,(Connec(iel,i)-1)*nddln+[1:nddln]];end
  76. Ue=U(loce);
  77. feval('poutre_stress',iel,Ue);
  78. end
  79. return