tp1_treillis_sujet.m 4.9 KB

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