Documentos de Académico
Documentos de Profesional
Documentos de Cultura
RODOLFO ARAYA
Resumen. En este apunte introducimos las nociones básicas necesarias para la implemen-
tación computacional del método de los elementos finitos en 1D.
1. Problema modelo
En este trabajo mostraremos los detalles de la implementación del método de elementos
finitos aplicado a la resolución del siguiente problema de valores de contorno: Hallar u : Ω →
R tal que
−εu′′ + α u′ + β u = f en Ω,
(P ) u(a) =0
u(b) = 0.
donde Ω :=]a, b[, ε > 0, y f ∈ L2 (Ω), α y β son funciones conocidas.
1.1. Formulación variacional. La formulación variacional de (P) está dada por: Hallar
u ∈ H := H01 (Ω) tal que
A(u, v) = (f, v)Ω ∀v ∈ H, (1)
donde
H01 (Ω) := {v ∈ L2 (Ω) : v ′ ∈ L2 (Ω), v(a) = v(b) = 0}.
La forma bilineal A está definida por:
A Z ×H →R Z
H: Z
′ ′ ′
A(u, v) := ε u v dx + α u v dx + β u v dx.
Ω Ω Ω
Además Z
(f, v)Ω := f v dx.
Ω
Nota 1. La existencia y unicidad de la solución del problema (1) está asegurada por una
aplicación del Lema de Lax–Milgram (visto en clases).
1.2. Formulación discreta. Sea Hh un subespacio finito dimensional de H. La formula-
ción discreta asociada a (1) está dada por: Hallar uh ∈ Hh tal que
A(uh , vh ) = (f, vh )Ω ∀vh ∈ Hh . (2)
Date: 23 de marzo de 2023.
1
2 R. ARAYA
1.3. Caso particular: elementos finitos. El método de los elementos finitos consiste
en una elección particular de subespacios finito-dimensionales Hh . Sea Th una triangulación
de Ω̄ compuesta por subintervalos (ver Figura 1), definimos el subespacio Hh por
Hh := vh ∈ C(Ω̄) : vh|T ∈ Pk (T ) ∀T ∈ Th , vh (a) = vh (b) = 0 (k ≥ 1). (3)
Si, por simplicidad de la notación, eliminamos el subı́ndice h tenemos que (2) puede ser
descompuesto de la siguiente manera
X Z Z Z XZ
′ ′ ′
ε u v dx α u v dx + β u v dx = f v dx, (4)
T ∈Th T T T T ∈Th T
2. Resultados básicos
De ahora en adelante supondremos que α y β son constantes y que k = 1 en (3), es decir
aproximaremos la solución u de (1) por funciones seccionalmente lineales y continuas. Esto
significa que
Hh := vh ∈ C(Ω̄) : vh|T ∈ P1 (T ) ∀T ∈ Th , vh (a) = vh (b) = 0 . (5)
Nota 2. En este caso la dimensión de Hh es igual al número de nodos (vértices) internos de
la triangulación Th . Luego si queremos hacer crecer la dimensión de Hh tenemos que agregar
más elementos a Th , lo que se entiende normalmente por refinar la malla.
Sea T ∈ Th , un elemento arbitrario de la triangulación Th , de vértices (nodos) a1 y a2 , con
a1 < a2 i.e.,
T := [a1 , a2 ].
Sea T̂ el intervalo de referencia de nodos â1 = 0 y â2 = 1, i.e.
T̂ := [â1 , â2 ] = [0 , 1].
IMPLEMENTACIÓN DEL FEM 3
donde
[P] := (p1 p2 p3 )1×3
y
u1
[u] := u2 .
u3 3×1
Aquı́ pi , i = 1, 3 representan las funciones base (shape functions) asociadas al elemento T
(ellas forman una base de P2 (T )), y ui , i = 1, 3 son los valores nodales de u, es decir
ui = u(ai ),
donde los nodos ai , i = 1, 3 están dados por: a1 y a2 son los extremos y a3 el punto medio
del subintervalo T . Además
3
X
′
u = p′i (x)ui = [DP] [u] ,
i=1
donde
p′1 p′2 p′3
[DP] := 1×3
.
3.1. Matriz de rigidez elemental KT . La matriz de rigidez elemental asociada al ele-
mento T ∈ Th , puede ser calculada de la siguiente forma:
Z Z
′ ′
ε u v dx = [DP] [u] [DP] [v] dx
T
ZT h i h i
= ε B −1 D̂P̂ [u] B −1 D̂P̂ [v] B dx̂
T̂
Z h iT h i
T −1
= [v] B ε D̂P̂ D̂P̂ dx̂ [u]
T̂ 2×1 1×2
| {z }
d
KT
= [v]T KdT [u]
con KdT ∈ R2×2 .
Z Z
′
α u v dx = α [DP] [u] [P] [v] dx
T
ZT h i h i
= α B −1 D̂P̂ [u] P̂ [v] B dx̂
T̂
Z h iT h i
T
= [v] α P̂ D̂P̂ dx̂ [u]
T̂ 2×1 1×2
| {z }
KaT
= [v]T KaT [u]
6 R. ARAYA
3.2. Vector de fuerza elemental FT . Para el miembro del lado derecho tenemos que
Z Z
f v dx ≈ [P] [f ] [P] [v] dx
T T
Z h i h i
= P̂ [f ] P̂ [v] B dx̂
T̂
Z h i h i
T
T
= [v] B P̂ P̂ [f ]2×1 dx̂
T̂ 2×1 1×2
| {z }
FT
= [v]T FT ,
con FT ∈ R2 (vector de carga elemental).
Nota 6. Notar que al reemplazar f por su interpolada [P] [f ], se introduce una nueva fuente
de error. En general este error no es mayor que el error del método de elementos finitos. La
matriz M T definida por Z h iT h i
M T := B P̂ P̂ dx̂,
T̂ 2×1 1×2
x 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
nodo 1 1 2 3 4 5 6 7 8 9 10
nodo 2 2 3 4 5 6 7 8 9 10 11
Referencia 1 0 0 0 0 0 0 0 0 0 1
Referencia 1 1 1 1 1 1 1 1 1 1
8 R. ARAYA
1 2 3 4 5 6 7 8 9 10 11
X X 0 0 0 0 0 0 0 0 0 1
X X X 0 0 0 0 0 0 0 0 2
0 X X X 0 0 0 0 0 0 0 3
0 0 X X X 0 0 0 0 0 0 4
0 0 0 X X X 0 0 0 0 0 5
K=
0 0 0 0 X X X 0 0 0 0 6
0 0 0 0 0 X X X 0 0 0 7
0 0 0 0 0 0 X X X 0 0 8
0 0 0 0 0 0 0 X X X 0 9
0 0 0 0 0 0 0 0 X X X 10
0 0 0 0 0 0 0 0 0 X X 11
Nota 8. Notar que la matriz K tiene esta forma si se considera que se desconoce la solución
en todos los nodos (vértices) de la malla, lo que en la práctica no es efectivo pues el valor de
la solución u en la frontera de Dirichlet (nodos x1 y x11 ) es conocido a priori. En realidad, la
matriz deberı́a ser sólo de 9 × 9. Esta forma de ensamblar la matriz global tiene la ventaja
de facilitar la imposición de este tipo de condiciones de frontera, además de ser fácil de
implementar.
A continuación daremos un ejemplo del proceso de ensamblado, es decir cómo las matrices
locales KT contribuyen a formar la matriz global K. Usaremos como ejemplo el elemento
número 5, de nodos 5 y 6, respectivamente. En este caso
5 5
k11 k12
KT5 = (9)
5 5
k21 k22
IMPLEMENTACIÓN DEL FEM 9
Supongamos que la matriz K contiene nzero elementos diferentes de cero. Para almacenar
K en una estructura Morse, es necesario definir tres arreglos:
row(1:n+1) (entero)
column(1:nzero) (entero)
aa(1:nzero) (real)
El arreglo row está destinado a guardar el número de elementos no nulos de cada fila de
la matriz. Este arreglo se construye de la siguiente forma: definimos row(1)=1 y definimos
el valor de row(i+1) de modo que row(i+1)-row(i) sea igual al número de elementos no
10 R. ARAYA
El arreglo column contiene los ı́ndices de las columnas de los elementos no nulos de K. Es
decir,
column(row(i)), ..., column(row(i+1)-1)
es la lista de los ı́ndices de columna de los elementos no nulos de la fila i. Por convención, el
arreglo column está ordenado de modo que los ı́ndices de las columnas sean crecientes para
una fila dada.
4.3. Ensamble usando Morse. Es claro que no podemos ensamblar la matriz de rigidez
global K como un arreglo de nnodos×nnodos, para luego almacenarla en Morse. Lo óptimo es
calcular las matrices de rigidez elementales KT para después ensamblarlas en una estructura
Morse para K.
DO i=1,2
i1=conectividad_local(i)
DO j=1,2
j1=conectividad_local(j)
inner: DO l=A_row(i1),A_row(i1+1)-1
IF(A_column(l)==j1) THEN
A_aa(l)=A_aa(l)+kT_local(i,j)
EXIT inner
END IF
END DO inner
END DO
END DO
5. Integración numérica
R
En diferentes lugares hemos debido calcular el valor de integrales del tipo T v dx donde v
es una función polinomial. ParaR ello necesitamos usar una fórmula de cuadratura numérica,
es decir el valor de la integral T v dx es aproximado por la expresión
npi
X
ωi v(bi ),
i=1
donde los valores ωi son los pesos de la cuadratura y bi ∈ T los puntos de integración.
Un ejemplo de fórmula de integración es la fórmula de Gauss vista en el curso de Cálculo
Numérico.
12 R. ARAYA
Es necesario recalcar que si se usa integración numérica se está introduciendo una nueva
fuente de error, la cual es necesario controlar para no destruir la calidad del método.
1 0 0 0 0 ... 0 u1 uD
k21 k22 k23 k24 k25 ... k2 11 u2 f2
k31 k32 k33 k34 k35 ... k3 11 u3 f3
=
.. .. .. .. .. .. .. .. ..
. . . . . . . . .
k11 1 k11 2 k11 3 k11 4 k11 5 . . . k11 11 u11 f11
La principal desventaja es que en el caso que K sea simétrica, después de aplicar esta
estrategia perdemos la simetrı́a de la matriz.
IMPLEMENTACIÓN DEL FEM 13
con U ∈ RM , UD ∈ Rnnode−M . Aquı́ U representa los valores en los nodos donde la solución
debe ser calculada, UD son los valores en los nodos donde se impone una condición de tipo
Dirichlet (conocido a priori). Ası́ obtenemos
K11 U = F − K12 UD .
Ku = F,
que genera la aplicación del método de elementos finitos, se puede escoger entre los métodos
directos (LU , Cholesky, etc) y los métodos iterativos (Gradiente Conjugado, GMRES, etc).
La elección de uno u otro depende del problema a tratar, del sistema lineal resultante y del
equipamiento computacional del cual se disponga.
8. Resultados numéricos
Presentamos ahora dos simulaciones numéricas obtenidas con una implementación del
FEM, usando polinomios lineales y continuos de orden 1 (i.e. P1 ). En este caso Ω :=]0 , 1[,
ε = 1, α = β = 0, y la función f es tal que la solución del problema está dada por
u(x) = sin(2πx).
14 R. ARAYA
0.8 Exacta
FEM
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
0.8 Exacta
FEM
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
Figura 4. Resultado usando una malla con 100 elementos (101 nodos).
Como en este caso test conocemos la solución analı́tica, podemos calcular las normas del
error dadas por
Z 1/2
2
∥u − uh ∥0,Ω := |u − uh | dx (norma L2 )
Ω
Z 1/2
′
|u − uh |1,Ω := |u − u′h |2 dx (semi norma H 1 )
Ω
1/2
∥u − uh ∥1,Ω := ∥u − uh ∥20,Ω + |u − uh |21,Ω (norma H 1 ).
IMPLEMENTACIÓN DEL FEM 15
100
10−1
10−2
log (error)
10−3
10−4
ku − uh k0,Ω
10−5 |u − uh |1,Ω
ku − uh k1,Ω
10−6 h2
h
10−7
0.0001 0.001 0.01 0.1 1
log (h)
â1 := 0 p̂1 (x̂) := (1 − 2x̂)(1 − x̂) 7 1 −8
ε
P2 â2 := 1 p̂2 (x̂) := x̂(2x̂ − 1) 1 7 −8
3(a2 − a1 )
â3 := 1/2 p̂3 (x̂) := 4x̂(1 − x̂) −8 −8 16
1
p̂1 (x̂) := (3x̂ − 1)(3x̂ − 2)(1 − x̂)
â1 := 0 2
148 −13 −189 54
1
â2 := 1 p̂2 (x̂) := x̂(3x̂ − 1)(3x̂ − 2) −13
148 54 −189
2 ε
P3
40(a2 − a1 ) −189
â3 := 1/3 9 54 432 −297
p̂3 (x̂) := x̂(3x̂ − 2)(x̂ − 1)
2
â4 := 2/3 54 −189 −297 432
9
p̂4 (x̂) := x̂(3x̂ − 1)(1 − x̂)
2
â1 := 0 p̂1 (x̂) := (1 − 2x̂)(1 − x̂) 4 −1 2
β(a2 − a1 )
P2 â2 := 1 p̂2 (x̂) := x̂(2x̂ − 1) −1 4 2
30
â3 := 1/2 p̂3 (x̂) := 4x̂(1 − x̂) 2 2 16
1
p̂1 (x̂) := (3x̂ − 1)(3x̂ − 2)(1 − x̂)
â1 := 0 2
128 19 99 −36
1
â2 := 1 p̂2 (x̂) := x̂(3x̂ − 1)(3x̂ − 2)
19 128 −36 99
2 β(a2 − a1 )
P3
1680
â3 := 1/3 9
99 −36 648 −81
p̂3 (x̂) := x̂(3x̂ − 2)(x̂ − 1)
2
â4 := 2/3 −36 99 −81 648
9
p̂4 (x̂) := x̂(3x̂ − 1)(1 − x̂)
2