Startpage >> Main >> Elasticidad3D

Elasticidad 3 D

Problema de elasticidad 3D con geometría hecha en GMSH. Se trata de una biela que aparece en infinidad de maquinas industriales. Lo interesante es hacer la geometría y la malla con GMSH y luego pasarlo todo a FreeFem donde se resuelve todo.

* Documentación explicativa pdf

* Código GMSH bielaSC.geo

* Triangulación bielaSC.msh

3D triangulación de la biela
Desplazamiento computado con FreeFem++Desplazamiento computado con Ansys

Gracias al Dr. David Herrero Pérez y Dr. Jesús Martínez Frutos, profesores del departamento de Estructuras y Construcción de la UPCT jesus.martinez@upct.es, david.herrero@upct.es

Código FreeFem++ biela.edp

load "gmsh";

// PREPROCESO
// Cargamos la malla generada por gmsh
mesh3 Th = gmshload3("bielaSC.msh");
plot(Th,wait=true);

// Definir parámetros del problema unidades (N,mm)

real E=205.8e3; // N/mm2
real nu=0.3;
real Ftot=6400; // N
real Pres=Ftot/(3.1416*15*20);
real mu= E/(2*(1+nu)); // N/mm2
real lambda = E*nu/((1+nu)*(1-2*nu)); // N/mm2
real sqrt2=sqrt(2.);
real sigmay=250; // N/mm2

// Valor de parámetros por pantalla
cout << ""<<endl;
cout << "Coeficientes:"<<endl;
cout << "-------------------"<<endl;
cout << "E="<<E<<endl;
cout << "nu="<<nu<<endl;
cout << "Ftot="<<Ftot<<endl;
cout << "Pres="<<Pres<<endl;
cout << "mu="<<mu<<endl;
cout << "lambda="<<lambda<<endl;
cout << ""<<endl;

// Definir espacio de elementos finitos 3d
fespace Vh(Th,P2); // Lagrange P2
Vh u1,u2,u3,v1,v2,v3;


// SOLUCION
// macros para la formulacion variacional
macro epsilon(u1,u2,u3)  [dx(u1),dy(u2),dz(u3),(dz(u2)+dy(u3))/sqrt2,(dz(u1)+dx(u3))/sqrt2,(dy(u1)+dx(u2))/sqrt2] // EOM
macro div(u1,u2,u3) ( dx(u1)+dy(u2)+dz(u3) ) // EOM

// Formulacion variacional y solucion
solve Lame([u1,u2,u3],[v1,v2,v3])=
  int3d(Th)(  
	    lambda*div(u1,u2,u3)*div(v1,v2,v3)	
	    +2.*mu*( epsilon(u1,u2,u3)'*epsilon(v1,v2,v3) ) //')
	      )
  - int2d(Th,230) (Pres*v1)   // Integrar presión en superficie 230
  + on(229,u1=0,u2=0,u3=0)   // gdl restringidos en superficie 229 (numerada en gmsh)
  ;

/ POSTPROCESO
real dxmax  = u1[].max; // calculamos el maximo desplazamiento en x 
real dymax  = u2[].max; // calculamos el maximo desplazamiento en y
real dzmax  = u3[].max; // calculamos el maximo desplazamiento en z

cout << ""<<endl;
cout << "Max. desplazamientos:"<<endl;
cout << "-------------------"<<endl;
cout << "dxmax="<<dxmax<<endl;
cout << "dymax="<<dymax<<endl;
cout << "dzmax="<<dzmax<<endl;

plot(u1);


// Calculo de tensiones de Von Mises
// necesitamos un nuevo espacio de elementos finitos de un orden inferior al anterior

fespace Wh(Th,P1); // elementos P1
Wh sigmavm;
Wh FS;

// un macro para las componentes del tensor de esfuerzos

macro sigma(u1,u2,u3) [lambda*(dx(u1)+dy(u2)+dz(u3))+2*mu*dx(u1),
                    lambda*(dx(u1)+dy(u2)+dz(u3))+2*mu*dy(u2),
                    lambda*(dx(u1)+dy(u2)+dz(u3))+2*mu*dz(u3),
					mu*(dx(u1)+dy(u2)+dz(u3))] // EOM

// definimos la tension de von Misses
sigmavm = sqrt(sigma(u1,u2,u3)[0]*sigma(u1,u2,u3)[0]
+sigma(u1,u2,u3)[1]*sigma(u1,u2,u3)[1]
+sigma(u1,u2,u3)[2]*sigma(u1,u2,u3)[2]
-sigma(u1,u2,u3)[0]*sigma(u1,u2,u3)[1]
-sigma(u1,u2,u3)[1]*sigma(u1,u2,u3)[2]
-sigma(u1,u2,u3)[2]*sigma(u1,u2,u3)[0]
);

plot(sigmavm);

// definimos el factor de seguridad respecto al límite elastico del material
FS=sigmavm/sigmay;

plot(FS);


Volver

Page last modified on May 26, 2014, at 12:21 PM