colonne.m 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. close all ; clc;
  2. % Donnees de la colonne etudiee dans les exercices de cours
  3. % Colonne
  4. % avec h=100 , E = 1000 , S=1 , mg = 6, maillage : 3 elements de degre 1
  5. %
  6. % Fonctions utilisees
  7. % statiqueUR : calcul de la reponse statique [U,R]
  8. % plotstr : trace du maillage avec ne noeuds et elements
  9. % plotdef : trace de la deformee
  10. % resultante : calcul de la resultante en x, y, z d'un vecteur nodal
  11. % barre_stress : calcul de la contrainte dans un element barre
  12. % barre_compar : comparaison avec la solution analytique
  13. %
  14. % Initialisation des variables globales
  15. % nddln : nb de ddl par noeud
  16. % nnod : nb de noeuds
  17. % nddlt : nb de ddl total(=ndln*nnod)
  18. % nelt : nb d'elements
  19. % nnode : nb de noeuds par element (2)
  20. % ndim : dimension du probleme (1D,2D ou 3D)
  21. % ncld : nb de conditions de champ impose (dirichlet)
  22. %
  23. % Coord(nnod,ndim): coordonnees des noeuds
  24. % Connec(nelt,2) : connectivites des elements
  25. % Typel(nelt) : Type des elements (barre_ke)
  26. % Nprop(nelt) : Ne de caracteristique pour chaque element
  27. % Prop(nprop,ncar): Tableau des caracteristiques mecaniques (ES, f)
  28. % Ncl(1,nddlt) : vaut 1 si le ddl est impose (deplacements imposes)
  29. % Vcl(1,nddlt) : valeur du deplacement impose
  30. % F (nddlt,1) : vecteur des charges nodales donnees
  31. global nddln nnod nddlt nelt nnode ndim ncld
  32. global Coord Connec Typel Nprop Prop Ncl Vcl F
  33. disp(' ');
  34. disp('Structure etudiee : Colonne traitee en exercice de cours N 8');
  35. disp('==================');
  36. % definition du maillage
  37. h = 100; % definition des coordonnees des noeuds
  38. Coord=[0 ; h ; 3*h ; 6*h ];
  39. [nnod,ndim]=size(Coord);
  40. nddln=1; nddlt=nddln*nnod;
  41. Connec=[ 1 , 2 ; ... % definition de la matrice de connectivite
  42. 2 , 3 ; ...
  43. 3 , 4 ];
  44. [nelt,nnode]=size(Connec);
  45. % definition du modele EF : type des elements
  46. Typel = 'barre_ke'; % definition du type des elements
  47. for i=1:nelt
  48. Typel = char('barre_ke',Typel);
  49. end
  50. % definition des caracteristiques elementaires (ES fx)
  51. Nprop=[1;1;1]; % pour chaque element Ne de la propriete
  52. Prop =[1000 -0.01]; % tableau des valeurs de ES fx
  53. % definition des CL en deplacement
  54. CL=[ 1 , 1 ]; ... % Ne du noeud, type (1 ddl impose, 0 ddl libre)
  55. Ncl=zeros(1,nddlt);ncld=0;
  56. Vcl=zeros(1,nddlt); % Valeurs des deplacements imposes
  57. for i=1:size(CL,1)
  58. for j=1:nddln
  59. if CL(i,1+j)==1 Ncl(1,(CL(i,1)-1)*nddln+j)=1; ncld=ncld+1; end
  60. end
  61. end
  62. % definition des charges nodales
  63. Charg=[ 4 0 ]; % Ne du noeud , Fx
  64. F=zeros(nddlt,1); % vecteur sollicitation
  65. for iclf=1:size(Charg,1)
  66. noeud=Charg(iclf,1);
  67. for i=1:nddln
  68. F((noeud-1)*nddln+i)=F((noeud-1)*nddln+i) + Charg(iclf,i+1);
  69. end
  70. end
  71. [Fx,Fy,Fz] = feval('resultante',F); %----- resultante des charges nodales
  72. % trace du maillage pour validation des donnees
  73. plotstr
  74. reponse = '';
  75. %%reponse = input('Voulez-vous continuer? O/N [O]: ','s');
  76. if isempty(reponse) | reponse =='O'
  77. %clc; echo on
  78. % echo off
  79. U = zeros(nddlt,1);
  80. R = zeros(nddlt,1);
  81. [U(:,1),R(:,1)] = statiqueUR; % ----- resolution du probleme
  82. %----- format d'impression des vecteurs
  83. form =' %8.3e %8.3e %8.3e '; format = [form(1:8*nddln),' \n'];
  84. disp(' ');disp('------- deplacements nodaux sur (x,y,z) ----------');
  85. fprintf(format,U)
  86. %plotdef(U)
  87. %----- post-traitement
  88. disp(' ');disp('------- Efforts aux appuis ----------');
  89. fprintf(format,R(:,1));
  90. [Rx,Ry,Rz] = feval('resultante',R); %----- resultantes et reactions
  91. disp(' ');
  92. fprintf('La resultante des charges nodales en (x,y,z) est : %8.3e %8.3e %8.3e \n',Fx,Fy,Fz);
  93. fprintf('La resultante des charges reparties en (x,y,z) est : %8.3e %8.3e %8.3e \n',-Rx-Fx,-Ry-Fy,-Rz-Fz);
  94. fprintf('La resultante des efforts aux appuis en (x,y,z) est : %8.3e %8.3e %8.3e \n',Rx,Ry,Rz);
  95. disp(' ');disp('------- Contraintes sur les elements ----------');
  96. for iel=1:nelt %----- boucle sur les elements
  97. loce=[]; for i=1:nnode loce=[loce,(Connec(iel,i)-1)*nddln+[1:nddln]];end
  98. Ue=U(loce);
  99. Ne=feval('barre_stress',iel,Ue);
  100. fprintf('Dans l''element %3i l''effort normal est %8.3e\n',iel,Ne)
  101. end
  102. reponse = input('Voulez-vous comparer avec la solution analytique? O/N [O]: ','s');
  103. if isempty(reponse) | reponse =='O'
  104. feval('barre_compar',U); %----- comparaison avec la solution analytique
  105. end
  106. return
  107. else
  108. disp(' ');disp('---------------- arret du calcul----------------');
  109. clear all
  110. end