Ecuación de Poisson con condiciones mixtas Dirichlet-Neumann

 

Resumen: Se resuelve la ecuación de Poisson con condiciones de contorno mixtas Dirichlet-Neumann. Además, veremos dos formas diferentes de definir el problema variacional. Por un lado, usando el tipo solve que define el problema variacional y lo resuelve automáticamente. Por otro, usaremos el tipo varf , que define el problema variacional a través de la forma bilineal y la forma lineal. El problema considerado aparece, por ejemplo, para describir el desplazamiento vertical de una membrana que ocupa un dominio bajo una fuerza que actúa sobre ella.

Problema considerado

Dados ΩR2​, abierto acotado no vacío con frontera Ω=Γ1Γ2​, fL2(Ω)​, u0L2(Γ1)​ y gL2(Γ2)​, hallar u:ΩR​ tal que

(P){Δu=fen Ω,u=u0sobre Γ1,un=gsobre Γ2.

Formulación variacional

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.

Introducimos el siguiente espacio de Hilbert

V={vH1(Ω)/v=0 sobre Γ1}.

El espacio natural para buscar la solución del problema (P) es la variedad lineal u~0+V, donde u~0H1(Ω) tal que u~0|Γ1=u0.

Para obtener la formulación variacional de (P), multiplicamos en la ecuación ambos miembros por una función vV e integramos en Ω, obteniendo

ΩuvdxdyΩunvdσ=ΩfvdxdyvV.

Teniendo en cuenta que Ω=Γ1Γ2​​​​​, que v​ se anula sobre Γ1​ y que un|Γ2=g​​​​​, se obtiene:

ΩuvdxdyΓ2gvdσ=ΩfvdxdyvV.

La formulación variacional de (P) es, por tanto

(PV){Hallar uu~0+V tal que Ω(xuxv+yuyv)dxdy=Ωfvdxdy+Γ2gvdσvV.

Problema aproximado

Vamos a utilizar una aproximación mediante elementos finitos P1-Lagrange. Por simplicidad, supondremos que la frontera de Ω, está formada por una o varias curvas poligonales. Sea Th una triangulación de Ω​​​. Consideramos

Wh={vh|vhC0(Ω),vh|TP1(T)TTh}H1(Ω)

con dimWh=M​, donde M​ es el número de vértices de Th​. Consideramos también

Vh={vh|vhWh,vh|Γ1=0}H1(Ω),

cuya dimensión es igual al número de vértices de Th que no están sobre Γ1. El problema aproximado de (PV) es

(PVh){Hallar uhu~0h+Vh tal que Ω(xuhxvh+yuhyvh)dxdy=Ωfvhdxdy+Γ2gvhdσvhVh,

donde u~0hWh​ tal que u~0h(ai)=u~0(ai)​ para todo vértice aiΓ1​.

Resolución con FreeFEM

Tomaremos como Ω​ el dominio cuya frontera Ω=Γ1Γ2​​​ viene definida por las curvas

Γ1={(x,y):x=cos(t),y=2sin(t),0tπ},Γ2={(x,y):x=cos(t),y=sin(t),πt2π}.

Tomaremos, también, f(x,y)1.

Definición de la frontera del dominio

Las siguientes instrucciones definen la frontera del dominio, utilizando sus ecuaciones paramétricas y la dibujan. Obsérvese que hemos asignado las etiquetas label = C1 y label = C2 a las dos fronteras, respectivamente.

Construcción del mallado

Declaramos primero una variable tipo mesh y después construimos una triangulación del dominio, tomando 50 segmentos sobre Γ1 y 30 segmentos sobre Γ2.

Mallado del círculo

 

Definición del espacio de elementos finitos

Definimos el espacio de elementos finitos que vamos a utilizar sobre Th. Como hemos dicho en los ejemplos anteriores Wh será el espacio de las funciones que son continuas en Ω y tales que su restricción a cada triángulo TTh es un polinomio de grado menor o igual que 1.

Resolución automática : solve

Se va a usar aquí el tipo solve que es muy similar a problem, que ya hemos usado en otros ejemplos, con la diferencia de que define el problema y lo resuelve automáticamente.

Consideramos el caso con condición de Dirichlet homogénea, es decir u0(x,y)0 y de Neumann no homogénea, g(x,y)10.

Definimos primero la función del segundo miembro y declaramos las variables del problema.

Se recuerda que en la definición del problema variacional con FreeFEM la ecuación se escribe en forma homogénea (segundo miembro = 0).

Aquí, int1d es la función de FreeFEM que sirve para calcular integrales de línea, en este caso sobre la parte de frontera con etiqueta ilabel.

int1d(Th, ilabel)( expresion )

Mallado del círculo

 

Código completo del programa

 

Resolución manual: varf

Vamos a considerar ahora otra manera de definir y resolver el problema variacional: usando el tipo varf , construyendo "a mano" la matriz y el segundo miembro y resolviendo el sistema lineal resultante.

Para la formulación del problema variacional, comenzaremos por definir la forma bilineal y la forma lineal asociadas. En este caso:

a(uh,vh)=Ω(xuhxvh+yuhyvh)dxdy,(vh)=Ωfvhdxdy+Γ2gvhdσ.

Con estas definiciones, la formulación variacional (PVh) se puede escribir

{Hallar uhu~0h+Vh tal que a(uh,vh)=(vh)vhVh.

Vamos a considerar el caso en que f(x,y)1, u0(x,y)=|x| y g(x,y)0​. En este caso, en la formulación variacional, no aparece la integral de línea sobre Γ2.

Para definir las formas bilineal y lineal se usa el tipo varf

varf a(u,v) = expresion(u, v)

donde, por convenio, la primera variable, u , es la incógnita y la segunda, v , es la función test. Si en expresion(u,v) no aparece la variable u , se entiende que se está definiendo una forma lineal.

En las definiciones de a(u,v) y (v) hay que incluir, además, las condiciones del bloqueo.

Construimos ahora la matriz del sistema, definiéndola como la matriz asociada a la forma bilineal a(u,v) :

(1)A=(aij)i,j=1M, dada por aij=a(φi,φj)

donde φi son las funciones de la base de Wh . Esta matriz se construye con el tipo matrix , que genera matrices huecas con almacenamiento sparse y contiene ya la penalización debida al bloqueo.

A continuación construimos el segundo miembro del sistema (PVh). Para ello, hay que definir dicho segundo miembro como un elemento del espacio Wh .

Cada elemento w de Wh tiene un vector asociado: en este caso sus valores en los vértices de Th . Este vector se denota w[] , de manera que w[][i] contiene el valor de la función w del espacio Wh en el vértice ai.

Para generar el vector asociado a la forma lineal l(v) antes definida, hay que poner por convenio l(0, Wh) . Internamente, esto hará que no se tenga en cuenta la variable u .

A continuación, resolvemos el sistema lineal resultante. Para ello se utiliza el operador ^-1 que "simboliza" la matriz inversa, de manera que A^-1*b , siendo b un vector, representa A1b , es decir, la solución del sistema Ax=b (piénsese en el operador de MATLAB \ de división matricial por la izquierda). Téngase en cuenta que A^-1 no es en realidad la inversa de A , no genera una matriz.

Por último, representamos gráficamente la solución obtenida.

 

Mallado del círculo

Ejercicio

Resolver el problema (P) en el caso de las condiciones de contorno Dirichlet homogénea tomando u0(x,y)0 y de Neumann no homogénea con g(x,y)10, realizando la resolución manual con varf.

Código completo del programa

 

Anna Doubova - Rosa Echevarría - Dpto. EDAN - Universidad de Sevilla