Resumen: Se resuelve la ecuación de Poisson en un dominio con una cavidad con condiciones de contorno de tipo Dirichlet sobre las dos fronteras.
Dados
Observación: todos los cálculos que se hacen en esta sección son puramente formales, es decir, se supone siempre la regularidad suficiente para que todos ellos estén justificados.
El espacio natural para buscar la solución del problema
Para obtener la formulación variacional de
La formulación variacional de
o bien, desarrollando el producto escalar
Vamos a utilizar una aproximación mediante elementos finitos
con
cuya dimensión es igual al número de vértices de
donde
Tomaremos como dominio
Tomaremos, también,
Las siguientes instrucciones definen la frontera del dominio, utilizando sus ecuaciones paramétricas y la dibujan. Obsérvese que hemos asignado la etiqueta 1
a la circunferencia exterior y la etiqueta 2
a la interior usando el comando label
.
// Definicion de la frontera del dominio
real R = 2, r = 0.5;
border Gamma1(t = 0, 2*pi){x = R*cos(t); y = R*sin(t); label = 1;};
border Gamma2(t = 0, 2*pi){x = r*cos(t); y = 1 + r*sin(t); label = 2;};
Declaramos primero una variable tipo mesh
y después construimos una triangulación del dominio encerrado entre las curvas
xxxxxxxxxx
// Construccion de la triangulacion
mesh Th = buildmesh(Gamma1(60)+ Gamma2(-40));
plot(Th, cmm = "Triangulacion", wait = 1);
Definimos el espacio de elementos finitos que vamos a utilizar sobre
// Definicion del espacio de EF
fespace Wh(Th, P1);
Se recuerda que las condiciones de Dirichlet (en este caso
Se recuerda, también, que en la definición del problema variacional con FreeFEM la ecuación variacional se escribe en forma homogénea (segundo miembro = 0).
// Definicion de la funcion del segundo miembro
func f = x*y;
// Declaracion de las variables del problema (elementos de Wh)
Wh u, v;
// Definicion del problema variacional; lo denotamos MiPoisson
problem MiPoisson(u, v) =
int2d(Th)(dx(u)*dx(v)+dy(u)*dy(v))
- int2d(Th)( f*v )
+ on(1, u = 0)
+ on(2, u = 1);
// Resolucion
MiPoisson;
// Dibujo de la solucion
plot(u, nbiso = 50, value = true, wait = 1,
cmm =" Pulsa 3 para alternar entre 2d y 3d; pulsa f para ver rellenos");
Se proponen los siguientes ejercicios como variantes del problema:
// Definicion de la frontera del dominio
real R = 2, r = 0.5;
border Gamma1(t = 0, 2*pi){x = R*cos(t); y = R*sin(t);label = 1;};
border Gamma2(t = 0, 2*pi){x = r*cos(t); y = 1 + r*sin(t); label = 2;};
// Construccion de la triangulacion
mesh Th;
Th = buildmesh(Gamma1(60)+ Gamma2(-40));
plot(Th, cmm = "Triangulacion", wait = 1);
// Definicion del espacio de elementos finitos
fespace Wh(Th, P1);
// Definicion de la funcion del segundo miembro
func f = x*y;
// Declaracion de las variables del problema
Wh u, v;
// Definicion del problema variacional
problem MiPoisson(u, v) =
int2d(Th)(dx(u)*dx(v)+dy(u)*dy(v))
- int2d(Th)( f*v )
+ on(1, u = 0)
+ on(2, u = 1);
// Resolucion
MiPoisson;
// Dibujo de la solucion
plot(u, nbiso = 50, value = true, wait = 1,
cmm =" Pulsa 3 para alternar entre 2d y 3d; pulsa f para ver rellenos");
Anna Doubova - Rosa Echevarría - Dpto. EDAN - Universidad de Sevilla