Está en la página 1de 22

Instructor: Ing.

Miguel Ampuero
TEMARIO

4.1. Formulación Débil (Método de Galerkin)

PROBLEMA
4.2. Método de los Elementos Finitos

UNIDIMENSIONAL 4.3. Punto de Vista Local

LINEAL (1D) 4.4. Integración Numérica

4.5. Ejemplo de Implementación del Código en Matlab

INTRODUCCIÓN AL MÉTODO DE LOS ELEMENTOS FINITOS (FEM) : APLICACIÓN EN DINÁMICA DE FLUIDOS


4.1. Formulación Débil (Método de Galerkin)

 Con el objetivo de presenta detalles de la implementación numérica, será presentado


todos los pasos para la solución de un problema de difusión-convección usando el
método de los elementos finitos.
 La ecuación de convección-difusión describe el transporte de una grandeza escalar,
que puede ser la temperatura por ejemplo.

 El modelo es descrito por una ecuación diferencial que en su forma adimensional trae
el número de Péclet que caracteriza la razón entre los términos difusivos y
𝐿𝑈
convectivos como 𝑃𝑒 = siendo 𝐿 y 𝑈 la longitud y velocidad características e 𝛼 , la
𝛼
difusividad térmica.

𝑑2 𝑢 𝑑𝑢
𝐿𝑈 2
− 𝑃𝑒 = 0, 0<𝑥<1
𝑃𝑒 = 𝑑𝑥 𝑑𝑥
𝛼 𝑑𝑢
0 = 𝑢 0 − 1; 𝑢 1 = 0.
𝑑𝑥

UNIDAD IV - PROBLEMA UNIDIMENSIONAL LINEAL (1D)


4.1. Formulación Débil (Método de Galerkin)

 Siguiendo la teoría presentada, sabemos que la solución aproximada es una proyección


ortogonal de la solución exacta en el sub espacio de dimensión finita.

• Entonces se ensambla el residuo y se proyecta al espacio de las funciones peso, que en el


caso del Método de Galerkin es el mismo espacio de las funciones base (𝑈ℎ = 𝑉ℎ ) ya
descritos en el capítulo anterior,
1
𝑑 2 𝑢ℎ 𝑑𝑢ℎ
𝑅𝑖 = න − 𝑃𝑒 𝜙𝑖 𝑑𝑥,
0 𝑑𝑥 2 𝑑𝑥

• Integrando por partes obteniéndose la formulación débil presentada anteriormente, con eso
la segunda derivada de la función aproximada es evitada y aparecen los términos del
contorno:
1 1
𝑑𝑢ℎ 𝑑𝜙𝑖 𝑑𝑢ℎ 𝑑𝑢ℎ 𝑑𝑢ℎ
𝑅𝑖 = − න 𝑑𝑥 + 1 𝜙𝑖 1 − 0 𝜙𝑖 0 − 𝑃𝑒 න 𝜙𝑖 𝑑𝑥.
0 𝑑𝑥 𝑑𝑥 𝑑𝑥 𝑑𝑥 0 𝑑𝑥

UNIDAD IV - PROBLEMA UNIDIMENSIONAL LINEAL (1D)


4.1. Formulación Débil (Método de Galerkin)

• El objetivo es que la proyección sea encontrada de forma que el error sea lo menor posible.
Haciendo 𝑅𝑖 = 0, manipulando las ecuaciones algebraicamente y aun usando que la
función peso es escogida de forma que garantice las condiciones de contorno, con eso en
la frontera cuya proyección es impuesta (Dirichlet) 𝜙𝑖 vale cero, tenemos:

1
𝑑𝑢ℎ 𝑑𝜙𝑖 𝑑𝑢ℎ 𝑑𝑢ℎ 𝑑𝑢ℎ
⟹න + 𝑃𝑒 𝜙𝑖 𝑑𝑥 = 1 𝜙𝑖 1 − 0 𝜙𝑖 0
0 𝑑𝑥 𝑑𝑥 𝑑𝑥 𝑑𝑥 𝑑𝑥
𝑢ℎ 0 −1

1
𝑑𝑢ℎ 𝑑𝜙𝑖 𝑑𝑢ℎ 𝑑𝑢ℎ
⟹න + 𝑃𝑒 𝜙 𝑑𝑥 = 1 𝜙𝑖 1 − 𝑢ℎ 0 − 1 𝜙𝑖 0
0 𝑑𝑥 𝑑𝑥 𝑑𝑥 𝑖 𝑑𝑥
=0

1
𝑑𝑢ℎ 𝑑𝜙𝑖 𝑑𝑢ℎ
𝑅𝑖 = න + 𝑃𝑒 𝜙 𝑑𝑥 + 𝑢ℎ 0 − 1 𝜙𝑖 0 = 0. (1)
0 𝑑𝑥 𝑑𝑥 𝑑𝑥 𝑖

UNIDAD IV - PROBLEMA UNIDIMENSIONAL LINEAL (1D)


4.2. Método de los Elementos Finitos

• Siguiendo el Método de Galerkin, el campo aproximado 𝑢ℎ (𝑥) va ser escrito como una
combinación lineal de las funciones 𝜙𝑖 ,
𝑁

𝑢ℎ 𝑥 = ෍ 𝑈𝑖 𝜙𝑖 . (2)
𝑖=1

• Dividimos el dominio 𝑥 ∈ ℝȁ0 ≤ 𝑥 ≤ 1 en 8 elementos y 9 nodos, como se muestra en la


Figura 1. Recordando que el método de los elementos finitos justamente sugiere escoger
apropiadamente los 𝜙𝑖 de tal forma que las funciones y sus derivadas sean diferentes
de cero en una pequeña parte del dominio.

1 2 3 4 5 6 7 8 𝑖 elementos
puntos nodales
1 2 3 4 5 6 7 8 9

Figura 1: Discretización del dominio en ocho elementos.

UNIDAD IV - PROBLEMA UNIDIMENSIONAL LINEAL (1D)


4.2. Método de los Elementos Finitos

1
𝑑𝑢ℎ 𝑑𝜙𝑖 𝑑𝑢ℎ
𝑅𝑖 = න + 𝑃𝑒 𝜙 𝑑𝑥 + 𝑢ℎ 0 − 1 𝜙𝑖 0 = 0.
0 𝑑𝑥 𝑑𝑥 𝑑𝑥 𝑖

• Usando la aproximación de la Ec. (2) en el Residuo de la Ec. (1) para 𝑖 = 1, … , 𝑁


tenemos:
𝑁 1 𝑁
𝑁
𝑑𝜙𝑖 𝑑𝜙𝑗 𝑑𝜙𝑗
𝑢ℎ 𝑥 = ෍ 𝑈𝑖 𝜙𝑖 . 𝑅𝑖 = ෍ න + 𝑃𝑒 𝜙𝑖 𝑑𝑥 𝑈𝑗 + ෍ 𝑈𝑗 𝜙𝑗 (0) − 1 𝜙𝑖 0 .
𝑑𝑥 𝑑𝑥 𝑑𝑥
𝑖=1 𝑗=1 0 𝑗=1

𝑥 = 0 nodo 1 𝜙1 0 = 1 𝜙𝑗 0 = 0 , ∀𝑗 ≠ 1 𝜙1 𝜙2

𝑁 1
𝑑𝜙𝑖 𝑑𝜙𝑗 𝑑𝜙𝑗
𝑅𝑖 = ෍ න + 𝑃𝑒 𝜙𝑖 𝑑𝑥 𝑈𝑗 + 𝑈1 − 1 𝜙𝑖 0 .
𝑑𝑥 𝑑𝑥 𝑑𝑥 1 2
𝑗=1 0

UNIDAD IV - PROBLEMA UNIDIMENSIONAL LINEAL (1D)


4.2. Método de los Elementos Finitos

• Identificando 𝑅𝑖 para cada 𝑖: 𝑁

c.c. esencial: ⟹ 𝑢 1 = 0 ⟹ ෍ 𝑈𝑗 𝜙𝑗 1 ,
𝑗=1

• Recordando que en el extremo del dominio,

𝑥 = 1 y en el nodo N ⟹ 𝑢 1 = 0 ⟹ 𝑈𝑁 𝜙𝑁 1 = 0

𝑁 1
𝑑𝜙1 𝑑𝜙𝑗 𝑑𝜙𝑗
𝑖=1⟹ 𝑅1 = ෍ න + 𝑃𝑒 𝜙 𝑑𝑥 𝑈𝑗 = − 𝑈1 − 1 ,
𝑑𝑥 𝑑𝑥 𝑑𝑥 1
𝑗=1 0

UNIDAD IV - PROBLEMA UNIDIMENSIONAL LINEAL (1D)


4.2. Método de los Elementos Finitos

𝑁 1
𝑖 = 2, … 𝑁 − 1 ⟹ 𝑑𝜙𝑖 𝑑𝜙𝑗 𝑑𝜙𝑗
𝑅𝑖 = ෍ න + 𝑃𝑒 𝜙 𝑑𝑥 𝑈𝑗 = 0,
𝑑𝑥 𝑑𝑥 𝑑𝑥 𝑖
𝑗=1 0

𝑖=𝑁⟹ 𝑅𝑁 ⟹ 𝑈𝑁 = 0.

• Matricialmente el problema es expresada como × 0 0 × 𝑈1 1


se muestra aquí, en la cual la dispersión de la 𝑈2 0
×
matriz está directamente relacionada en la 0 𝑈3 0
selección de las funciones base/peso ⋮
⋮ ⋮ ⋮
0 =
• En este ejemplo vamos usar elementos lineales × ×
y con eso la matriz global es bastante dispersa × × 0 𝑈8 0
una vez que la matriz tiene una dimensión 2 × 2. 0 0 1 𝑈9 0


UNIDAD IV - PROBLEMA UNIDIMENSIONAL LINEAL (1D)
4.3. Punto de Vista Local

• El desafío es desarrollar un esquema de ensamblaje de los vectores y matrices


elementales a partir de la formulación:
𝑁 1
𝑑𝜙𝑖 𝑑𝜙𝑗 𝑑𝜙𝑗
෍ න + 𝑃𝑒 𝜙 𝑑𝑥 𝑈𝑗 = − 𝑈1 − 1 𝜙𝑖 0
𝑑𝑥 𝑑𝑥 𝑑𝑥 𝑖
𝑗=1 0 condición de contorno

 Lo ideal es ensamblar las matrices y vectores elementales sin preocuparse con las
condiciones de contorno y después modificarlas en función de estas.
𝑒 𝑒 𝑒
𝑒
𝐴11 𝐴12 𝑒
𝑓1 𝑑𝜉 2
𝑨 = 𝑒 𝑒
; 𝒇 = 𝑒
; =
𝐴21 𝐴22 𝑓2 𝑑𝑥 ℎ 𝑒

1 1
𝑒 2 𝑑𝜙𝑗 𝑑𝜙𝑖 𝑑𝜙𝑗 𝑒
𝐴𝑖𝑗 = 𝑒 න 𝑑𝜉 + 𝑃𝑒 න 𝜙𝑖 𝑑𝜉; 𝑓𝑖 =0 …(3)
ℎ 𝑑𝜉 𝑑𝜉 𝑑𝜉
−1 −1

UNIDAD IV - PROBLEMA UNIDIMENSIONAL LINEAL (1D)


4.3. Punto de Vista Local

donde
𝑒 1 − 𝜉 𝑑𝜙1 1 𝑒 1 + 𝜉 𝑑𝜙2 1
𝜙1 𝜉 = → =− y 𝜙2 𝜉 = → =
2 𝑑𝜉 2 2 𝑑𝜉 2

• Substituyendo en la Ec. (3) tenemos:


1 1
𝑒 2 1 1 1 1−𝜉
𝐴11 = න − − 𝑑𝜉 + 𝑃𝑒 න − 𝑑𝜉
ℎ𝑒 2 2 2 2
−1 −1
1 1
𝑒 2 1 𝑃𝑒
𝐴11 = 𝑒 න 𝑑𝜉 − න 1 − 𝜉 𝑑𝜉
ℎ 4 4
−1 −1

𝑒 1 𝑃𝑒
𝐴11 = 𝑒 −
ℎ 2
y así en todos.

UNIDAD IV - PROBLEMA UNIDIMENSIONAL LINEAL (1D)


4.3. Punto de Vista Local

 Después de obtener las matrices elementales, tenemos que preocuparnos con las
condiciones de contorno. Los términos correspondientes a las condiciones de contorno
son nulas al menos en el primero y ultimo nodo, es decir 𝜙𝑖 (0) ≠ 0, solamente para 𝑖 = 1
y 𝜙𝑖 (1) ≠ 0, apenas para 𝑖 = 𝑁.

𝜙1 𝜙2 𝜙𝑁−1 𝜙𝑁
𝑁 1
𝑑𝜙𝑖 𝑑𝜙𝑗 𝑑𝜙𝑗
… ෍ න + 𝑃𝑒 𝜙𝑖 𝑑𝑥 𝑈𝑗 =
𝑑𝑥 𝑑𝑥 𝑑𝑥
𝑗=1 0
− 𝑈1 − 1 𝜙𝑖 0
1 2 N-1 N
𝑥=0 𝑥=1
𝑥
1
En el primer elemento, tenemos que adicionar න = − 𝑈1 − 1 ⟹ ෍ 𝑈𝑗 + 𝑈1 = +1
0

1 1 1 1
𝐴11 = 𝐴11 + 1 y 𝑓1 = 𝑓1 + 1.

UNIDAD IV - PROBLEMA UNIDIMENSIONAL LINEAL (1D)


4.3. Punto de Vista Local

• Mientras que en el último elemento tenemos una condición de contorno esencial,


luego, se impone que 𝑈9 = 0.
9 9 9
𝐴21 ← 0 𝐴22 ← 1 y 𝑓2 ← 0,

9
Si la condición de contorno fuese 𝑢 1 = 𝑔 entonces, 𝑓2 ← 𝑔. 𝜙8 𝜙9

= 8 9


𝑥=1
9 9 9
𝐴11 𝐴12 𝑈8 𝑓1
9 9 9
𝐴21 𝐴22 𝑈9 𝑓2

UNIDAD IV - PROBLEMA UNIDIMENSIONAL LINEAL (1D)


4.4. Integración Numérica

• Para calcular los elementos de cada matriz, tenemos que integrar funciones a lo largo
del elemento. De un modo general, calculamos:
1
න 𝐹 𝜉 𝑑𝜉
−1

 Para un problema simple, podemos calcular la integral analíticamente.

• Generalmente debemos utilizar algún método de integración numérica. En códigos de


elementos finitos, el método de integración numérica más utilizado es el método de
Cuadratura Gaussiana.
1 𝑁𝐺𝑃

න 𝐹 𝜉 𝑑𝜉 = ෍ 𝐹 𝜉 𝑊𝑖
−1 𝑖=1

donde 𝑁𝐺𝑃 es el número de puntos utilizados para la integración.


A mayor el número de puntos, mejor la aproximación.

UNIDAD IV - PROBLEMA UNIDIMENSIONAL LINEAL (1D)


4.4. Integración Numérica

1 𝑁𝐺𝑃
La Tabla 1 nos da el valor de 𝜉𝑖 y 𝑊𝑖 para diferentes 𝑁𝐺𝑃 න 𝐹 𝜉 𝑑𝜉 = ෍ 𝐹 𝜉 𝑊𝑖
−1 𝑖=1

Tabla 1: Puntos y pesos de Gauss.


𝑊1 = 2.0
NGP 𝜉𝑖 𝑊𝑖 𝜉
1 0.0 2.0 0.0
-0.57735 1.0 𝑊1 = 1.0 𝑊2 = 1.0
2 𝜉
+0.57735 1.0
−0.57735 0.0 +0.57735
-0.77459 0.555
𝑊1 = 0.555 𝑊2 = 0.888 𝑊3 = 0.555
3 0 0.888 𝜉
+0.77459 0.555 −0.77459 0.0 +0.77459

UNIDAD IV - PROBLEMA UNIDIMENSIONAL LINEAL (1D)


4.5. Ejemplo de Implementación del Código en Matlab

• El problema presentado a lo largo de esta unidad será usado como ejemplo para
la presentación del código. La solución obtenida es comparada con la solución
analítica de la ecuación diferencial:
𝑒 𝑃𝑥𝑒 − 𝑒 𝑃𝑒
𝑢 𝑥 =
1 − 𝑃𝑒 − 𝑒 𝑃𝑒

• El script principal Main1D es dividido en diferentes funciones, y es presentado a


continuación. Las funciones GlobalPointer y Mesh corresponden al pré-
procesamiento del problema. La primera calcula la matriz DomNodeID que
relaciona la numeración local y global y la segunda proporciona datos de la malla
(coordenadas nodales y tamaño de los elementos)

UNIDAD IV - PROBLEMA UNIDIMENSIONAL LINEAL (1D)


4.5. Ejemplo de Implementación del Código en Matlab
% Main1D.m
%=========================================================================
% Codigo basado en el FEM - problema 1D
% Fecha: Julio 2020
% Autor: Miguel Angel Ampuero Suarez
clear; clc;
%=========================================================================
% PRE-PROCESAMIENTO
% Entrada de Datos
Pe = 5 ;
L = 1;
Nele = 20;
% Calcula nnodes y DomNodeID
[nnodes, DomNodeID] = GlobalPointer(Nele);
% Generación de la malla
[x, dx] = Mesh(L, nnodes, Nele, DomNodeID);
%=========================================================================
Main1D % RESOLUCIÓN DEL PROBLEMA
% Vector con la solución aproximada
[U] = Solution(Pe, nnodes, Nele, DomNodeID, dx);
%=========================================================================
% POS-PRECESAMIENTO
% Vector con la solución exacta
[Uex] = exp(Pe)/(Pe + exp(Pe) - 1) - exp(Pe*x)/(Pe + exp(Pe) - 1);
% Calculo del error de la solución
Error = (U - Uex)./(U + 1e-10);
figure (1)
plot(x,U,'bo',x,Uex,'r','LineWidth',2,'MarkerSize',10)
legend('Solución Aproximada','Solución Exacta')
xlabel('x ','FontSize',14); ylabel('Uex , U ','FontSize',14)
title ('Solución Aproximada vs Solución Exacta','FontSize',12)

figure (2)
plot(x,Error,'LineWidth',2,'MarkerSize',10)
xlabel('x','FontSize',14); ylabel('Error relativo(x)','FontSize',14);
title('Error relativo','FontSize',12)
% =========================================================================
UNIDAD IV - PROBLEMA UNIDIMENSIONAL LINEAL (1D)
4.5. Ejemplo de Implementación del Código en Matlab
% GlobalPointer.m
%=========================================================================
% Funcao Mapeamento Local/Global
% Fecha: Julio 2020
% Autor: Miguel Angel Ampuero Suarez
%=========================================================================
GlobalPointer function [nnodes, DomNodeID] = GlobalPointer(Nele)
nnodes = Nele + 1;
DomNodeID = zeros(Nele, 2);
for i = 1:Nele
DomNodeID(i,1) = i;
DomNodeID(i,2) = i+1;
end
end
%========================================================================
% Mesh.m
%=========================================================================
% Función para el cálculo de la malla problema 1D
% Fecha: Julio 2020
% Autor: Miguel Angel Ampuero Suarez
%=========================================================================
function [x, dx] = Mesh(L, nnodes, Nele, DomNodeID)
Mesh x = zeros(nnodes,1);
dx = zeros(Nele,1);
for i = 1:nnodes
x(i) = L*((i-1)/(nnodes-1));
end
% cálculo de las longitudes del elemento
for iele = 1:Nele
dx(iele) = x(DomNodeID(iele,2)) - x(DomNodeID(iele,1));
end
end
%=========================================================================
UNIDAD IV - PROBLEMA UNIDIMENSIONAL LINEAL (1D)
4.5. Ejemplo de Implementación del Código en Matlab

• La solución por el método de elementos finitos es implementada en la función Solution,


a seguir. La matriz y el vector elemental son calculados en la función GetElemAb.
% Solution.m
%=========================================================================
% Función para la solución por el método de FEM
% Fecha: Julio 2020
% Autor: Miguel Angel Ampuero Suarez
%=========================================================================
function [U] = Solution(Pe, nnodes, Nele, DomNodeID, dx)
A = zeros(nnodes, nnodes);
b = zeros(nnodes, 1);
for iele = 1:Nele
Solution [Aelem, belem] = GetElemAb(iele, Nele, Pe, dx(iele));
nlocalnodes = 2;
for ilnode = 1:nlocalnodes
ignode = DomNodeID(iele, ilnode);
for jlnode = 1:nlocalnodes
jgnode = DomNodeID(iele, jlnode);
A(ignode, jgnode) = A(ignode, jgnode) + Aelem(ilnode, jlnode);
end
b(ignode) = b(ignode) + belem(ilnode);
end
end
U = A\b; % AU=b
end
%=========================================================================

UNIDAD IV - PROBLEMA UNIDIMENSIONAL LINEAL (1D)


4.5. Ejemplo de Implementación del Código en Matlab
% GetElemAb.m
%=========================================================================
% Función para cálculo de la matriz y vector elemental
% Fecha: Julio 2020
% Autor: Miguel Angel Ampuero Suarez
%=========================================================================
function [Aelem, belem] = GetElemAb(iele,Nele,Pe,dx)
nlocalnodes = 2;
ngp = 2;
XIGP = [-0.57735 0.57735];
WGP = [1.0 1.0];
Aelem = zeros(nlocalnodes,nlocalnodes);
belem = zeros(nlocalnodes, 1);
for igp = 1:ngp
XI = XIGP(igp);
W = WGP(igp);
GetElemAb [Phi, GradPhi] = BasisFunc(XI);
for ilnode = 1: nlocalnodes
for jlnode = 1:nlocalnodes
Aelem(ilnode, jlnode) = Aelem(ilnode, jlnode) + ...
W*(GradPhi(ilnode) * GradPhi(jlnode)* 2/dx + ...
Pe * Phi(ilnode)*GradPhi(jlnode));
end
belem(ilnode) = 0;
end
end
if (iele == 1)
Aelem(1,1) = Aelem(1,1) + 1.0;
belem(1) = 1.0;
elseif (iele == Nele)
Aelem(2,1) = 0.0;
Aelem(2,2) = 1.0;
end
end
%=========================================================================

UNIDAD IV - PROBLEMA UNIDIMENSIONAL LINEAL (1D)


4.5. Ejemplo de Implementación del Código en Matlab

• Las funciones base y sus derivadas en cada punto de Gauss son calculadas por la
función BasicsFunc, como sigue:

% BasisFunc.m
%=========================================================================
% Función para cálculo de las funciones base
% Fecha: Julio 2020
% Autor: Miguel Angel Ampuero Suarez
%=========================================================================
function [Phi, GradPhi] = BasisFunc(X)
Phi(1) = (1.0 - X)/2;
Phi(2) = (1.0 + X)/2;
GradPhi(1) = -0.5;
GradPhi(2) = 0.5;
end
%=========================================================================

UNIDAD IV - PROBLEMA UNIDIMENSIONAL LINEAL (1D)


4.5. Ejemplo de Implementación del Código en Matlab

La solución del problema es presentada en la Figura 2.

Figura 2: Comparación de la solución por el método FEM con la solución analítica.

UNIDAD IV - PROBLEMA UNIDIMENSIONAL LINEAL (1D)

También podría gustarte