Implementación del Método de los Elementos Finitos

Por fijar ideas y para facilitar las explicaciones, vamos a describir el proceso de resolución de un problema por el método de los elementos finitos (MEF) sobre un problema concreto.

Sea ΩR2 el abierto acotado representado en la figura.

dominio

Consideramos el siguiente problema:

(P){Δu+u=fen Ω,u=u0sobre Γ1,nu+αu=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.

Se recuerda que H1(Ω) es el espacio de Sobolev de las funciones vL2(Ω) cuyas derivadas (parciales) en el sentido de las distribuciones son también funciones de L2(Ω):

H1(Ω)={v|vL2(Ω),xv,yvL2(Ω)}

y consideramos el subespacio vectorial de H1(Ω) formado por las funciones de H1(Ω) que valen cero sobre Γ1:

V={v|vH1(Ω),v|Γ1=0}.

Para obtener la formulación variacional del problema (P) se procede como sigue:

 

  1. Se multiplica la ecuación diferencial en (P) por vV cualquiera y se integra en Ω :

    (1)Ω(Δuv+uv)dxdy=ΩfvdxdyvV.
  2. Se aplica la fórmula de integración por partes:

    ΩΔfgdxdy=ΩfgdxdyΩ(nf)gdσ.

    Se tiene entonces, de (1)

    Ωuvdxdy+ΩuvdxdyΩ(nu)vdσ=ΩfvdxdyvV,

    donde la integral de frontera se puede escribir

    Ω(nu)vdσ=Γ2(nu)vdσ=Γ2(αug)vdσ.

    Se llega así a la formulación variacional del problema (P):

    (PV){Hallar uu~0+V tal que Ωuvdxdy+Ωuvdxdy+Γ2αuvdσ=Ωfvdxdy+Γ2gvdσvV,

    donde u~0 es una función de H1(Ω) que coincide con u0 en Γ1: u~0H1(Ω) y u~0|Γ1=u0.

    El problema (PV) es un problema de dimensión infinita: buscamos la solución en un espacio de Hilbert de dimensión infinita. Para abordar su resolución numérica necesitamos discretizarlo, esto es, sustituirlo por otro aproximado que tenga dimensión finita.

 

Discretización del problema variacional (PV) mediante Elementos Finitos P_1-Lagrange

En lo sucesivo, por simplicidad, supondremos que la frontera de Ω, Ω, está formada por una o varias curvas poligonales. Si no fuera así, el primer paso en la discretización sería aproximar el dominio por otro con dichas características.

Una triangulación de Ω¯ es una familia finita T de triángulos T={Tj}j=1R verificando

j=1RTj=Ω¯T˚jj=1,,RTiTj={ un lado comu´n a ambos tria´ngulos o un ve´rtice comu´n a ambos tria´ngulos oij

Consideremos, por ejemplo, la de la Figura siguiente:

mallado

La bondad de la aproximación que vamos a describir a continuación dependerá, entre otras cosas, del tamaño de los triángulos que consideremos. Para medir éste se introduce el diámetro de la triangulación:

h=maxTThT, donde hT=maxx,yTxy

Así, denotaremos Th una triangulación de Ω¯ de diámetro h.

Denotamos

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

y

Vh={vh|vhWh,vh|Γ1=0}.

Wh es un subespacio de dimensión finita de H1(Ω), dimWh=M siendo M el número de vértices de Th , y Vh es un subespacio de dimensión finita de V, dimVh=M0 , siendo M0 el número de vértices de Th que no están sobre Γ1.

Sean {ai}iI los vertices de Th y sean {ai}iI0 (I0I) los vertices de Th que no están sobre Γ1, siendo card(I)=M y card(I0)=M0.

Una función vhWh queda unívocamente determinada por sus valores en los vértices de la triangulación, i.e. por el conjunto de valores {vh(ai)}iI. Análogamente, una función vhVh está unívocamente determinada por el conjunto de valores {vh(ai)}iI0.

La base canónica de Wh está constituida por las funciones {φi}iI definidas por

φiWhi=1,,M,φi(aj)=δiji,j=1,,M.

La función φi está asociada al vértice ai de Th y solo es distinta de cero en los triángulos que contienen a dicho vértice.

A su vez, la base de Vh está constituida por el subconjunto {φi}iI0 de la base de Wh. Luego,

vhWhvh(x)=iIvh(ai)φi(x),
vhVhvh(x)=iI0vh(ai)φi(x).

Por tanto, una aproximación del problema (PV) es la que sigue:

(PVh){Hallar uhu~0h+Vh tal queΩuhvhdxdy+Ωuhvhdxdy+Γ2αuhvhdσ=Ωfvhdxdy+Γ2gvhdσvhVh,

siendo u~0hWh tal que u~0h(ai)=u~0(ai) para todo aiΓ1.

Puesto que {φi}iI0 es una base de Vh, el problema anterior se puede escribir

(2){Hallar uhu~0h+Vh tal queΩuhφidxdy+Ωuhφidxdy+Γ2αuhφidσ=Ωfφidxdy+Γ2gφidσiI0.

Ahora bien, uh se puede expresar en función de la base de Wh:

uhu~0h+Vhuh=jIuh(aj)φj=jI0uh(aj)φj+jII0u~0(aj)φj,

de donde para obtener uh solo hay que calcular los coeficientes uh(aj) para jI0.

Sustituyendo uh en las ecuaciones (2), el problema que tenemos que resolver se escribe:

(3){Hallar uh(aj)jI0 tales quejI0uh(aj)(Ωφjφidxdy+Ωφjφidxdy+Γ2αφjφidσ)=Ωfφidxdy+Γ2gφidσjII0u~0(aj)(Ωφjφidxdy+Ωφjφidxdy+Γ2αφjφidσ)iI0.

Utilizando la siguiente notación

{uj=uh(aj),aij=Ωφjφidxdy+Ωφjφidxdy+Γ2αφjφidσ,si=Ωfφidxdy+Γ2gφidσ,zi=jII0u~0(aj)(Ωφjφidxdy+Ωφjφidxdy+Γ2αφjφidσ),

el problema (3) se puede reescribir de la forma, más compacta:

(4){Hallar (uj)jI0 tales que jI0aijuj=siziiI0

es decir el problema (3) se reduce a la resolución de un sistema lineal de M0 ecuaciones.

 

Bloqueo de las condiciones de contorno

Por razones de tipo informático que más adelante se verán, construir la matriz (aij)i,jI0 resulta más costoso que construir la matriz (aij)i,jI.

Por ello, el sistema que en la práctica se resuelve no es (4), sino el que vemos a continuación, obtenido penalizando el anterior.

El problema (4) es equivalente a

(5){Hallar (uj)jI tales que{jI0aijuj=siiI0ui=u~0(ai)iII0.

Obsérvese que lo que hemos hecho es añadir como incógnitas los valores de uh sobre los nodos de Γ1 a la vez que añadimos las ecuaciones que harán que esos valores sean iguales a los valores de u0. Tenemos ahora un sistema "más grande", con M ecuaciones.

A su vez, (5) es equivalente a

(6)jIa~ijuj=s~i,iI

donde

(7)a~ij={Vsi i=jII0,aijsi no,s~i={Vu~0(ai)si i=jII0,sisi no,

donde V un número muy grande (1030).

En efecto, para iII0 la i-ésima ecuación del sistema (6) es

jIa~ijuj=jI,jiaijuj+a~iiui=s~i,

Despejando ui:

ui=s~ijI,jiaijuja~ii=Vu~0(ai)jI,jiaijujVVu~0(ai)Vu~0(ai).

Sustituyendo ahora estos valores en las ecuaciones de (6) correspondientes a iI0, recuperaremos las ecuaciones (4).

En resumen, (6)+(7) es el sistema que, realmente, se resuelve. Inicialmente, se construyen la matriz y el segundo miembro del sistema "sin penalizar"

jIaijuj=si,iI

y, posteriormente, se añaden las modificaciones descritas en (7).

 

Cálculo de matrices y segundos miembros

Llamemos A a la matriz A=(aij), 1i,jM, siendo M el número de vértices de Th y

aij=Ωφiφjdxdy+Ωφiφjdxdy+Γ2αφiφjdσ,1i,jM.

La condición de Dirichelet se introducirá más tarde, mediante la técnica del bloqueo ya explicada. Sea también

si=Ωfφidxdy+Γ2gφidσ,1iM.

La matriz A es simétrica, definida positiva y hueca.


Nota: Se denomina matriz hueca aquélla cuyas componentes son mayoritariamente nulas. Las matrices de grandes dimensiones que tienen esta característica se suelen almacenar de formas especiales, no solo para evitar el almacenamiento de cantidades ingentes de ceros, sino también para evitar operaciones inútiles con ceros (multiplicaciones y sumas).

Una de las maneras de almacenar una matriz hueca es hacerlo como matriz sparse. Para ello se utilizan tres vectores: uno que contiene las componentes de la matriz que no son nulas y otros dos que contienen, respectivamente, los números de la fila y la columna en la que se encuentran.


Nota: Se llama matriz banda a una matriz que es hueca (es decir, cuyos elementos son mayoritariamente nulos) y cuyos elementos no nulos están concentrados en una banda de anchura pequeña (en relación con la dimensión de la matriz) en torno a la diagonal principal. Una manera de almacenar este tipo de matrices es el almacenamiento en orden perfil, consistente en guardar solamente las componentes de la matriz que están dentro de la mencionada banda.


La matriz A se puede escribir como suma de tres matrices:

Ar=(Ωφiφjdxdy)1i,jMAm=(Ωφiφjdxdy)1i,jM
AΓ=(Γ2αφiφjdσ)1i,jM

Las dos primeras se llaman matriz de rigidez y matriz de masa, respectivamente.

 

Veamos cómo se realiza el cálculo de la matriz de rigidez, siendo análogo el cálculo para las otras dos. Denotamos

(8)aijr=Ωφiφjdxdy=TThTφiφjdxdy1i,jM.

La integral Tφiφjdx solo es distinta de cero si los soportes de las funciones de base φi y φj tienen intersección no vacía con el triángulo T, esto es, si ai y aj son vértices de T. Por tanto, el sumatorio de la derecha de (8) se reduce en realidad a unos pocos términos no nulos:

aijr=Tai,ajTφiφjdxdy.

En la práctica, el cálculo de los elementos de la matriz no se hace elemento a elemento, ya que esto implicaría:

Lo que debe hacerse es calcular, para cada triángulo T, los tableros elementales no nulos (esto es, las integrales Tφiφjdxdy que no sean nulas) y acumularlos en los elementos correspondientes de la matriz. Obsérvese que, en principio, habría que calcular 9 valores:

Tφiφjdxdyi,j=1,2,3.

Pero, dado que

Tφiφjdxdy=Tφjφidxdy,

este número se reduce a 6. Esto queda descrito en el siguiente algoritmo.

 


Algoritmo 1 (cálculo de la matriz de rigidez)

  1. Inicializar a cero los elementos de la matriz

  2. Para cada triángulo Tj, j=1,2,nt, siendo i1, i2 e i3 los números de sus tres vértices, calcular las 6 integrales

    (9)T|φi1|2dxdy,T|φi2|2dxdy,T|φi3|2dxdy,
    (10)Tφi1φi2dxdy,Tφi1φi3dxdy,Tφi2φi3dxdy

    y acumular cada una de ellas en el aijr correspondiente, es decir, hacer

    ai1i1rai1i1r+T|φi1|2dxdy(análogamente para las otras dos integrales en (9))
    ai1i2rai1i2r+Tφi1φi2dxdy(análogamente para las otras dos integrales en (10))

 

Detalle de los cálculos elementales

 

En construcción.

 

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