treillis_cours.m 4.8 KB

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