Resumen: En este ejemplo se considera el problema estacionario de Lamé bidimensional.
Sea
Denotamos
donde
Sea
Multiplicando la ecuación de
Resolvemos el problema para
Observamos que:
// Stationary Lame system of elasticity
// | Find u = (u_1, u_2)
// |- \nabla\cdot\sigma(u) = f in \Omega (beam, viga)
// | \sigma\cdot n = g on \Gamma_1 (botom)
// | \sigma\cdot n = 0 on \Gamma_2\cup\Gamma_3 (right side and top)
// | u = 0 sobre \Gamma_4 (left side)
// where:
// \sigma(u) = 0.5\mu (\nabla u + \nabla u^T) + \lambda (\nabla \cdot u) Id.
// Weak formulation:
// \int_\Omega ( 0.25\mu(\nabla u + \nabla u^T)\cdot(\nabla v + \nabla v^T) +
// \lambda(\nabla \cdot u)(\nabla \cdot u) )
// -\int_\Omega f\cdot v - \int_\gamma_1 g\cdot v = 0 \forall v
//
//
// Data:
//
verbosity = 0;
real E = 21.e5, nu = 0.28; // Young modulus, Poisson ratio
real mu = E/(2*(1+nu)); // Lame coefficient
real lambda = E*nu/((1+nu)*(1-2*nu)); // Lame coefficient
func f1 = 0.; // External force
func f2 = -1.;
func g1 = 0.; // Surface force
func g2 = 0.1*x;
//
// Auxiliary variables:
//
real usqrt2 = 1./sqrt(2.);
real scale = 100.;
//
// Mesh:
//
int nx = 20, ny = 10;
mesh Th = square(nx, ny, [20.*x, 2.*y-1.]); // Domain: (0, 20) X (-1, 1)
plot(Th, cmm = "Mesh of the domain (0, 20) X (-1, 1)", wait = true);
//
// Finite element space
// [u1, u2] : unknown
// [v1, v2] : function test
//
fespace Vh(Th, P2);
Vh u1, u2, v1, v2;
Vh f1h=f1, f2h=f2, g1h=g1, g2h=g2;
//
// Macro definitions:
// Macros can have arguments (like those ones) and MUST finish by //
macro epsilon(u1,u2) [dx(u1),dy(u2),usqrt2*(dy(u1)+dx(u2))] // EOM
macro div(u1,u2) (dx(u1)+dy(u2)) // EOM
//
// Problem:
//
problem Lame2D([u1, u2],[v1, v2]) =
int2d(Th)(lambda*div(u1,u2)*div(v1,v2) + mu*(epsilon(u1,u2)' * epsilon(v1,v2)))
- int2d(Th)(f1h*v1+ f2h*v2)
- int1d(Th,1)(g1h*v1+g2h*v2)
+ on(4, u1 = 0., u2 = 0.);
//
// Solution:
//
Lame2D;
//
// Plots
//
plot([u1,u2], coef = scale, cmm = "Displacements", wait = true);
plot(u1, fill=true, value=1, cmm = "X-Displacement", wait = true);
plot(u2, fill=true, value=1, cmm = "Y-Displacement", wait = true);
mesh Thd = movemesh(Th, [x+scale*u1, y+scale*u2]);
int[int] re = [1,6,2,6,3,6,4,6,0,6], reg = [0,6];
// Changing labels of original mesh for the plot
Th = change(Th, refe = re, region = reg);
plot(Th, Thd, cmm="Original and deformed mesh. Displacement multiplied by " + scale, wait=true);
Anna Doubova - Rosa Echevarría - Dpto. EDAN - Universidad de Sevilla