Q4_ep_stress.m 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. function sig = Q4_ep_stress(iel,Ue)
  2. % Calcul du tenseur "contrainte moyenne" sur un element Q4
  3. % en elasticite plane
  4. %
  5. % appel [sig] = Q4_ep_stress(iel,Ue)
  6. % ou [sig] = feval('Q4_stress',iel,Ue)
  7. % en entree iel : numero de l'element
  8. % Ue : vecteur des depalements nodaux de l'element
  9. % en sortie Tenseur des contraintes moyennes sur l'element
  10. %
  11. % H.Oudin
  12. global Coord Connec Nprop Prop
  13. %----- position des points de calcul de la contrainte
  14. npg = 4; c = 1/sqrt(3); posg = [ -c -c ; c -c ; c c ; -c c ]; %points de gauss
  15. %npg = 4; c = 1; posg = [ -c -c ; c -c ; c c ; -c c ]; %noeuds de l'element
  16. %npg = 1; posg = [ 0 0 ]; %au centre
  17. E=Prop(Nprop(iel),1); %----- matrice d'elasticite D
  18. nu=Prop(Nprop(iel),2);
  19. ep=Prop(Nprop(iel),3);
  20. if ep > 0 a = 0 ; else a = 1 ; ep = 1; end
  21. coef = E * (1-a*nu)/((1+nu)*(1-nu-a*nu));
  22. D = coef * [ 1 nu/(1-a*nu) 0 ;...
  23. nu/(1-a*nu) 1 0 ;...
  24. 0 0 .5*(1-nu-a*nu)/(1-a*nu)];
  25. ndle = 8; %----- initialisations
  26. sigpg = zeros(4,3);sig = zeros(1,3);
  27. %fprintf('Valeur des contraintes en des points de l''element %3i\n',iel)
  28. for ipg=1:npg %----- boucle sur les points
  29. s = posg(ipg,1); t = posg(ipg,2);
  30. %----- vecteur <N(s,t)>
  31. N = .25*[(1-s)*(1-t) (1+s)*(1-t) (1+s)*(1+t) (1-s)*(1+t)];
  32. %----- matrice [dN/ds ;dN/dt]
  33. dN = .25*[-(1-t) (1-t) (1+t) -(1+t)
  34. -(1-s) -(1+s) (1+s) (1-s)];
  35. %----- matrice jacobienne
  36. J = dN*Coord(Connec(iel,[1:4]),:);
  37. detj = J(1,1)*J(2,2)-J(1,2)*J(2,1);
  38. J_1 = [J(2,2) -J(1,2); -J(2,1) J(1,1)]/detj ;
  39. %----- matrice [dN/dx ;dN/dy]
  40. dNx = J_1*dN;
  41. %----- matrice B(3x8)
  42. B=zeros(3,8);
  43. B(1,[1 3 5 7])=dNx(1,:);
  44. B(2,[2 4 6 8])=dNx(2,:);
  45. B(3,[1 3 5 7,2 4 6 8])=[dNx(2,:),dNx(1,:)];
  46. %----- tableau des contraintes aux points de Gauss
  47. sigpg(ipg,:) = (D*B*Ue)';
  48. sig(1,:) = sig(1,:) + sigpg(ipg,:);
  49. % fprintf('point (s,t) %5.2f %5.2f ',s,t)
  50. % fprintf('sigxx = %8.3e sigyy = %8.3e sigxy = %8.3e \n',sigpg(ipg,1),sigpg(ipg,2),sigpg(ipg,3))
  51. end
  52. %----- Valeur moyenne du tenseur des contraintes
  53. sig = sig/npg;
  54. return