NUM_exo2.m 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. close all ; clc;
  2. % NUM_exo2
  3. % Poutre console avec un mailllage automatique en Q4
  4. % H.Oudin
  5. global nddln nnod nddlt nelt nnode ndim ncld
  6. global Coord Connec Typel Nprop Prop Ncl Vcl F
  7. disp(' ');
  8. disp('Elasticite plane : Poutre console avec un mailllage automatique en Q4');
  9. disp('=================');
  10. % donnees unites N , mm
  11. L = 3000 ; h =200 ; e=10;
  12. E=210.e+3; nu=0.3;
  13. poid=200;
  14. % ------ maillage
  15. nex = input('donner le nombre d''element en x (longueur) ? [5]: ');
  16. if isempty(nex) nex=5; end
  17. ney = input('donner le nombre d''element en y (hauteur) ? [3]: ');
  18. if isempty(ney) ney=3; end
  19. Coord=[];
  20. for i=0:nex
  21. for j=0:ney Coord=[Coord;[i*L/nex j*h/ney]]; end
  22. end
  23. Connec=[]; pas=ney+1;
  24. for i=1:nex
  25. for j=1:ney
  26. i1=(i-1)*pas+j;
  27. Connec=[Connec;[i1 i1+pas i1+pas+1 i1+1]];
  28. end
  29. end
  30. [nnod,ndim]=size(Coord);
  31. [nelt,nnode]=size(Connec);
  32. nddln=2; nddlt=nddln*nnod;
  33. for i=1:nelt Typel = char('Q4_ep',Typel); end
  34. % ------ caracteristiques mecaniques (E nu e fx fy)
  35. Nprop=ones(nex*ney);
  36. Prop=[ E nu e 0 0 ];
  37. % ------ definition des CL en deplacement
  38. CL=[];
  39. for i=0:ney CL=[CL;[i+1, 1 , 1 ]]; end
  40. Ncl=zeros(1,nddlt);ncld=0;
  41. Vcl=zeros(1,nddlt);
  42. for i=1:size(CL,1)
  43. for j=1:nddln
  44. if CL(i,1+j)==1 Ncl(1,(CL(i,1)-1)*nddln+j)=1;ncld=ncld+1; end
  45. end
  46. end
  47. % ------ definition des charges nodales
  48. Charg=[(ney+1)*(nex+1) , 0, poid ];
  49. F=zeros(nddlt,1);
  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. % ----- trace du maillage
  57. %plotstr
  58. % ----- resolution du probleme
  59. U = zeros(nddlt,1);
  60. R = zeros(nddlt,1);
  61. [U(:,1),R(:,1)] = statiqueUR;
  62. plotdef(U)
  63. VM = [];
  64. % ----- post-traitement
  65. sige=[]; % tableau des contraintes sigxx
  66. for iel=1:nelt %----- boucle sur les elements
  67. loce=[];
  68. for i=1:nnode
  69. if Connec(iel,i) > 0 loce=[loce,(Connec(iel,i)-1)*nddln+[1:nddln]]; end
  70. end;
  71. Ue=U(loce);
  72. sig = feval([deblank(Typel(iel,:)),'_stress'],iel,Ue);
  73. % contrainte moyenne de Von Mises sur l'element
  74. sVM = sqrt(sig(1)^2+sig(2)^2-sig(1)*sig(2)+3*sig(3)^2);
  75. VM(iel)=sVM ;
  76. %fprintf('Valeur Moyenne des contraintes dans l''element %3i\n',iel)
  77. %fprintf('sigxx = %8.3e sigyy = %8.3e sigxy = %8.3e sigVM = %8.3e \n',sig(1),sig(2),sig(3),sVM)
  78. sige=[sige;[sig(1)]];
  79. end
  80. disp(' ');disp('------- Contraintes moyenne de Von Mises sur les elements ----------');
  81. for iel=1:nelt
  82. fprintf('element %3i sigma VM : %8.3e \n',iel,VM(iel));
  83. end
  84. taille = get(0,'ScreenSize');
  85. figure('Name','Contrainte moyenne de Von Mises sur les elements',...
  86. 'Position',[taille(3)/2.01 taille(4)/2.8 taille(3)/2 taille(4)/2])
  87. plot_sig(VM)
  88. % comparaison avec la solution poutre
  89. I=e*h^3/12; EI=E*I ; % solution poutre
  90. v=poid*(L^3)/(3*EI); sigxx=poid*L*h/(2*I);
  91. disp(' ');
  92. fprintf('Solution analytique poutre\n')
  93. fprintf('la fleche en bout est = %8.3e mm et la contrainte max sigxx = %8.3e MPa \n',v,sigxx)
  94. disp(' ');
  95. T=linspace(0,L,1000);
  96. for i=1:size(T,2)
  97. Sol(i)=poid*(T(i)^2*(3*L-T(i)))/(6*EI);
  98. end
  99. taille = get(0,'ScreenSize');
  100. figure('Name','comparaison des fleches 2D-Q4 (rouge) / poutre (bleu)',...
  101. 'Position',[taille(3)/2.02 taille(4)/2.6 taille(3)/2 taille(4)/2] )
  102. plot(T,Sol);
  103. hold on
  104. Uv=U([2:2*(ney+1):2*(nex+1)*(ney+1)]);
  105. Tv=linspace(0,L,size(Uv,1));
  106. plot(Tv,Uv,'r');
  107. figure('Name','Contraintes max sigxx 2D-Q4 (rouge) / poutre (bleu)',...
  108. 'Position',[taille(3)/2.02 taille(4)/2.6 taille(3)/2 taille(4)/2] )
  109. hold on,
  110. % La contrainte sigxx poutre est calculée au centre des éléments de la rangée du bas
  111. x=0:L; y=poid*h*(1-1/ney)*(L-x)/(2*I); plot(x,y,'b'),
  112. for i=1:nex %contrainte sigxx sur les éléments de la rangée du bas
  113. x1=(i-1)*L/nex ; x2 = i*L/nex ;
  114. sign=sige(1+ney*(i-1));
  115. x=x1:(x2-x1)/20: x2;
  116. y=sign*ones(1,length(x));
  117. plot(x,y,'r')
  118. end
  119. grid
  120. return