NUM_4.m 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. clc;clear all;close all;
  2. % Mapping d'un element Q4 etude de la transformation geometrique
  3. % Exercice NUM4 du chapitre NUM du site
  4. % H.Oudin
  5. taille = get(0,'ScreenSize');
  6. %------ mappage de l'element de reference
  7. [S,T] = meshgrid(-1:0.2:1);
  8. [n,n] = size(S);
  9. %------ donnee de la geometrie de l'element reel (position des 4 noeuds)
  10. disp('---------------------------------------');
  11. disp('Mapping d''un element Q4 etude de la transformation geometrique');
  12. disp('cliquez les 4 noeuds de l''element reel dans cette figure');
  13. disp('---------------------------------------');
  14. figure('Name','donnees de l''element reel',...
  15. 'Position',[taille(3)/2.01 taille(4)/2.6 taille(3)/2 taille(4)/2])
  16. axis([0 1 0 1])
  17. grid on
  18. [Coord(:,1),Coord(:,2),button] = ginput(4);
  19. close all;
  20. %Coord=[0 0;8 0;8 2;4 7 ];% peut etre utilise comme donnee
  21. %------ mapping de l'element
  22. for i=1:n
  23. for j=1:n
  24. s=S(j,i);t=T(j,i);
  25. N = .25*[(1-s)*(1-t) (1+s)*(1-t) (1+s)*(1+t) (1-s)*(1+t)];
  26. %------ calcul du mapping de l'element reel
  27. Xr(j,i)=N*Coord(:,1);Yr(j,i)=N*Coord(:,2);
  28. %------ calcul de detJ sur le mapping
  29. dN = .25*[-(1-t) (1-t) (1+t) -(1+t)
  30. -(1-s) -(1+s) (1+s) (1-s)];
  31. J = dN*Coord;
  32. det(j,i) = J(1,1)*J(2,2)-J(1,2)*J(2,1);
  33. end
  34. end
  35. C = max(det); maxi=max(C); D = min(det);mini=min(D);
  36. disp('Figures donnant l''evolution de la valeur de detJ');
  37. disp('Le mapping represente les lignes a s ou t constant');
  38. disp('Attention l''element reel est plan, ne vous laissez pas influencer par le trace');
  39. disp('-------------------------------------------------------------------------------');
  40. figure('Name','Valeur de detJ sur le mapping de l''element de reference',...
  41. 'Position',[taille(3)/2.01 taille(4)/2.6 taille(3)/2 taille(4)/2])
  42. subplot(1,2,1), surf(S,T,det),title('element de reference'),axis equal ...
  43. , colormap jet, colorbar, view([0 0 1])
  44. subplot(1,2,2), surf(Xr,Yr,det),title('element reel'), axis equal, ...
  45. view([0 0 1])
  46. % calcul de la surface de l'element par integration numerique
  47. npg = 4; %----- integration a 4 points de Gauss
  48. wg = [1,1,1,1]; %----- poids et position
  49. c = 1/sqrt(3); posg = [ -c -c ; c -c ; c c ; -c c ];
  50. aire=0;
  51. for ipg=1:npg %----- boucle d'integration
  52. s = posg(ipg,1); t = posg(ipg,2); poids = wg(ipg);
  53. dN = .25*[-(1-t) (1-t) (1+t) -(1+t)
  54. -(1-s) -(1+s) (1+s) (1-s)];
  55. J = dN*Coord;
  56. detj = J(1,1)*J(2,2)-J(1,2)*J(2,1);
  57. aire=aire+detj*poids;
  58. end
  59. Coord
  60. if sign(maxi) == sign(mini) disp('---------------------------------');
  61. disp('detJ ne s''annule pas sur l''element reel');
  62. disp('la transformation geometrique est bijective ');
  63. fprintf('Par integration numerique la surface de l''element reel est : %6.4f\n',aire);
  64. else disp('---------------------------------');
  65. disp('detJ change de signe sur l''element');
  66. disp('la transformation geometrique n''est pas bijective ');
  67. fprintf('La valeur mini du determinant est : %6.4f et le max : %6.4f \n',mini,maxi);
  68. fprintf('L''integration numerique donne une surface calculee de %6.4f\n',aire);
  69. end