Al utilizar una malla forma por elementos triangulares de 3 nodos

Anuncio
Análisis Numérico II A (75.38)
Trabajo Práctico Nº2
2º Cuatrimestre 2012
Simulación numérica de la distribución de
temperaturas en un intercambiador de calor
Autores:
Apellido y Nombre
Padrón
E-Mail
Windmüller, Catalina M.
90976
caty.windmuller@gmail.com
Rotsztejn, Jonathan I.
90576
jonrostein@hotmail.com
Contenido
Enunciado ..................................................................................................................................... 2
Resolución..................................................................................................................................... 4
1) Formulación débil................................................................................................................. 4
2) Discretización del dominio y la función ............................................................................... 5
Numeración de nodos y elementos ....................................................................................... 5
Función interpolante ............................................................................................................. 5
Funciones de peso ................................................................................................................. 6
Discretización de la formulación débil................................................................................... 6
Elementos triangulares ......................................................................................................... 7
3) Discretización del dominio mediante GMSH ...................................................................... 11
Mallas no estructuradas...................................................................................................... 11
Mallas estructuradas........................................................................................................... 22
4) Distribución de temperaturas ............................................................................................. 26
Mallas no estructuradas...................................................................................................... 27
Mallas estructuradas........................................................................................................... 32
Comparación de errores y conclusiones .............................................................................. 36
Comparación de tiempos de ejecución ................................................................................ 37
5) Sensibilidad del problema al valor de la conductividad térmica de C2 ............................... 38
7) Variante del problema con C2 adiabático ............................................................................ 42
Anexo .......................................................................................................................................... 43
Ensayos previos ....................................................................................................................... 43
Código fuente del programa en MATLAB............................................................................... 44
Página 1
Enunciado
Introducción
Los problemas de equilibrio en dos o tres dimensiones son evaluados a partir de las ecuaciones
diferenciales en derivadas parciales elípticas. El ejemplo más sencillo es el de la ecuación de
Laplace mediante la cual se puede simular la distribución de temperaturas en un
intercambiador de calor.
C1 y C2 son dos conductores térmicos dentro de un recinto C0. El primero de ellos se mantiene
a una temperatura constante T1=100ºC y el otro tiene una conductividad térmica k2 que
resulta 5 veces mayor que k0. Se asume que la temperatura en la frontera de C0 es T0=20ºC.
Con el objetivo de conocer T(x,y) en el recinto , se debe resolver:
 (k T )  0 en 
donde  es el interior de C0 menos C1 y  es el borde de  (los contornos de C0 y C1).
Figura 1. Dominio del problema
Desarrollo del práctico
1) Plantear la formulación débil del problema.
2) Discretizar el problema utilizando el método de los volúmenes finitos.
3) Plantear la discretización para el dominio presentado utilizando el generador de mallas
GMSH. Resolverlo para mallas estructuradas y no estructuradas utilizando elementos
triangulares (de tres nodos) y cuadrangulares (de cuatro nodos). Implementar la
solución en un código computacional.
4) Obtener y graficar la distribución de temperaturas para los cuatro tipos de resolución.
5) Resolver el problema con el código numérico evaluando la sensibilidad del problema al
valor de la conductividad térmica de C2.
6) Para uno de las discretizaciones, remallar para obtener mallas de distintas precisiones y
utilizar el código ya desarrollado para obtener nuevas soluciones.
Página 2
7) Resolver el mismo problema pero considerando que C2 es adiabático, es decir,
imponiendo como condición de borde, en la frontera de C2, que el gradiente normal de
temperatura es igual a cero (condición de Neumann homogénea).
8) OPCIONAL: El ejercicio planteado consiste en uno de los ejemplos de FreeFem++, que
es una herramienta para resolver ecuaciones diferenciales en derivadas parciales por
medio del método de elementos finitos. Resolver el ejemplo para dos juegos
adicionales de condiciones de borde. Comentar brevemente en qué consiste el
software y que estrategia numérica utiliza para resolver las ecuaciones.
Página 3
Resolución
1) Formulación débil
Partiendo de la forma diferencial de la ecuación del calor en estado estacionario o ecuación de
Laplace ∇ ⋅ (𝑘𝑡 ∇𝑢) = 0 en Ω con condiciones de contorno generales:
I.
𝑢 = 𝑢̃ sobre Γ1
𝜕𝑢
𝑘𝑡 𝜕𝑛 = 𝑞̃ sobre Γ2
II.
A partir del cálculo variacional, puede obtenerse la formulación ponderada:
∫ ∇ ⋅ (𝑘𝑡 ∇𝑢)𝑤 𝑑Ω + ∫ (𝑢 − 𝑢̃)𝑤
̃ 𝑑Γ + ∫ (𝑘𝑡
Ω
Γ1
Γ2
𝜕𝑢
− 𝑞̃) 𝑤
̂ 𝑑Γ = 0
𝜕𝑛
Integrando por partes la expresión obtenida y aplicando el teorema de Green, se tiene:
− ∫ 𝑘𝑡 ∇𝑢 ⋅ ∇𝑤 𝑑Ω +
Ω
∫ 𝑘𝑡 𝑤∇𝑢 ⋅ 𝑛̆ 𝑑Γ + ∫ (𝑢 − 𝑢̃)𝑤
̃ 𝑑Γ + ∫ (𝑘𝑡
Γ1 ∪Γ2
Γ1
Γ2
𝜕𝑢
− 𝑞̃) 𝑤
̂ 𝑑Γ = 0
𝜕𝑛
Es posible imponer condiciones sobre las funciones de peso para simplificar la expresión:
I.
II.
III.
𝑤 = 0 sobre Γ1
𝑢 = 𝑢̃ sobre Γ2
𝑤
̂ = −𝑤 sobre Γ2
Finalmente, se llega a la formulación débil del problema, que puede expresarse en forma
general como:
− ∫ 𝑘𝑡 ∇𝑢 ⋅ ∇𝑤 𝑑Ω + ∫ 𝑞̃𝑤 𝑑Γ = 0
Ω
Γ2
{
𝑢 = 𝑢̃ sobre Γ1
Y, para las condiciones del problema en particular:
− ∫ 𝑘𝑡 ∇𝑢 ⋅ ∇𝑤 𝑑Ω = 0
Ω
{
𝑇(𝜕𝐶0 ) = 20
𝑇(𝜕𝐶1 ) = 100
Página 4
2) Discretización del dominio y la función
El dominio del problema se discretiza para obtener un número finito de incógnitas y que su
comportamiento requiera una cantidad finita de grados de libertad para describirlo. Los
subdominios generados se denominan elementos y están interconectados entre sí con un
número
discreto
de
puntos
o
nodos
situado
en
sus
contornos.
El objetivo de la resolución es obtener los valores de la función en dichos nodos, para poder
aproximarla en todo el dominio a través de interpolación en los elementos.
El siguiente es un ejemplo de una discretización de un dominio rectangular empleando una
malla conformada por elementos triangulares:
Numeración de nodos y elementos
Cada nodo de la malla posee una numeración local 𝑛 (1 ≤ 𝑛 ≤ 𝑁), siendo 𝑁 el número de
nodos total, y una numeración local 𝑘 (1 ≤ 𝑘 ≤ 𝐾), siendo 𝐾 el número de nodos por
elemento.
A su vez, cada uno de los 𝑀 elementos se numera 𝑚 (1 ≤ 𝑚 ≤ 𝑀) y todas las numeraciones
𝑚
precedentes se relacionan entre sí a través de la matriz de conectividad 𝐺(𝑘)
, que indica la
numeración
global
𝑛
del
𝑘
-ésimo
nodo
del
𝑚
Las incógnitas (valores de la función en cada nodo) se notan 𝑢𝑛 = 𝑦(𝑘) .
elemento
𝑚.
Función interpolante
La función 𝑢(𝑥, 𝑦) se aproxima de forma discreta como la agregación de funciones
𝑚
interpolantes por elemento, i.e.: 𝑢(𝑥, 𝑦) ≅ ∑𝑀
𝑚=1 𝑢 (𝑥, 𝑦).
Página 5
Cada función interpolante 𝑢𝑚 (𝑥, 𝑦) se obtiene a partir de los valores nodales:
𝐾
𝑢𝑚 (𝑥, 𝑦) = {
𝑚
𝑚
(𝑥, 𝑦)𝑢(𝑘)
∑ 𝑁(𝑘)
𝑠𝑖 (𝑥, 𝑦) ∈ 𝑒 𝑚
𝑘=1
𝑠𝑖 (𝑥, 𝑦) ∉ 𝑒 𝑚
0
𝑚
(𝑥, 𝑦) es la función de forma del nodo 𝑘 en el elemento 𝑚 y, por la forma de 𝑢𝑚 (𝑥, 𝑦) es
𝑁(𝑘)
𝑚
𝑚
claro que es necesario que valga 1 sobre el nodo 𝐺(𝑘)
y 0 sobre los nodos 𝐺(𝑘′)
con 𝑘′ ≠ 𝑘,
además de afuera del elemento 𝑚.
Funciones de peso
Se discretiza planteando una función de peso 𝑤𝑛 (𝑥, 𝑦) por cada nodo que, en el método de los
volúmenes finitos vale:
𝑤𝑛 (𝑥, 𝑦) = {
1
0
𝑠𝑖 (𝑥, 𝑦) ∈ Ω𝑛
𝑠𝑖 (𝑥, 𝑦) ∉ Ω𝑛
Siendo Ω𝑛 el volumen de control asociado al nodo 𝑛 que, en el caso de un problema
bidimensional, puede llamarse área de control.
Discretización de la formulación débil
A partir de todas las definiciones anteriores, es posible plantear la formulación débil de forma
discreta:
Página 6
− ∫ 𝑘𝑡 ∇𝑢 ⋅ ∇𝑤𝑛 𝑑Ω = − ∫ 𝑘𝑡 ∇𝑢 ⋅ ∇𝑤𝑛 𝑑Ω = ∫ 𝑘𝑡
Ω
Ω𝑛
La última igualdad es producto de que
𝜕𝑤𝑛
𝜕𝑛
Γ𝑛
𝜕𝑢
𝑑Ω = 0
𝜕𝑛
es una delta de Dirac sobre el contorno Γ𝑛 = ∂Ω𝑛 .
Cabe destacar que si Ω = ⋃𝑁
𝑛=1 Ω𝑛 y cada segmento de Γ𝑛 pertenece a dos áreas de control, es
posible asegurar que el flujo se conserva a lo largo de toda la geometría.
Luego, es posible pasar a un sistema de ecuaciones algebraicas de tamaño 𝑛 × 𝑛 planteando:
𝐿
𝐿
𝐾
𝑚𝑙 𝑚𝑙
𝜕 ∑𝑘=1 𝑁(𝑘) 𝑢(𝑘)
𝜕𝑢
𝜕𝑢
∫ 𝑘𝑡
𝑑Ω = ∑ ∫ 𝑘𝑡
𝑑Ω = ∑ ∫ 𝑘𝑡
𝑑Ω =
𝜕𝑛
𝜕𝑛
𝜕𝑛
𝑚
𝑚
𝑙=1 Γ 𝑙
Γ𝑛
𝑙=1 Γ 𝑙
𝑛
𝐿
𝑛
𝐾
𝑚
𝑚
∑ ∑ 𝑢(𝑘)
∫
𝑚
𝑙=1 𝑘=1
Γ 𝑙
𝑛
𝑚
𝑘𝑡
𝜕𝑁(𝑘)𝑙
𝜕𝑛
𝐾
𝑑Ω = ∑ 𝑎𝑛𝑝 𝑢𝑝
𝑘=1
𝑚
𝑙
Siendo 𝐺(𝑘)𝑙 = 𝑛, 𝑝 = 𝐺(𝑘′)
con 𝑘′ ≠ 𝑘.
Dicho sistema puede plantearse a través del ensamble, que consiste en calcular los
coeficientes de las ecuaciones recorriendo la malla por elemento y hallando los aportes de
cada nodo a sus vecinos, en lugar de hacerlo por nodo.
Elementos triangulares
Al utilizar una malla forma por elementos triangulares de 3 nodos (uno en cada vértice), el
área de control se construye utilizando las medianas de los lados, como se ve en las figuras:
Página 7
Es conveniente calcular la integral correspondiente a cada nodo 𝑛 sobre el elemento 𝑚
realizando una transformación de las coordenadas espaciales (𝑥, 𝑦) a un dominio normalizado
de coordenadas (𝜉, 𝜂), de la siguiente manera:
Aquí, las funciones de forma son:
𝑁1 (𝜉, 𝜂) = 1 − 𝜉 − 𝜂
𝑁2 (𝜉, 𝜂) = 𝜉
𝑁3 (𝜉, 𝜂) = 𝜂
Y la transformación se logra como:
3
𝑚
𝑥 = ∑ 𝑁𝑘 (𝜉, 𝜂)𝑥(𝑘)
𝑘=1
3
𝑚
𝑦 = ∑ 𝑁𝑘 (𝜉, 𝜂)𝑦(𝑘)
{
𝑘=1
𝑥
𝑥𝑚
⟹ ( ) = ( 12
𝑚
𝑦
⏟𝑦12
𝐽𝑚
𝑚
𝑚
𝑥(1)
𝜉
𝑥13
)
(
)
+
(
𝑚
𝑚 )
𝑦13
𝜂
𝑦(1)
𝑚
𝑚
𝑚
Siendo {𝑥(𝑘)
, 𝑦(𝑘)
y:
} las coordenadas del nodo local 𝐺(𝑘)
𝑚
𝑚
𝑚
𝑥12
= 𝑥(2)
− 𝑥(1)
𝑚
𝑚
𝑚
𝑥13
= 𝑥(3)
− 𝑥(1)
𝑚
𝑚
𝑚
𝑦12
= 𝑦(2)
− 𝑦(1)
𝑚
𝑚
𝑚
{𝑦13 = 𝑦(3) − 𝑦(1)
𝑚 𝑚
𝑚 𝑚
𝐽𝑚 es la matriz jacobiana de la transformación y ∆= 𝑥12
𝑦13 − 𝑥13
𝑦12 su determinante.
La integral se calcula realizando a través de un cambio de coordenadas e integrando sobre el
dominio normalizado Ω′𝑛 :
𝜕𝑢 𝜕𝑢
𝜕𝑤 𝜕𝑤
− ∫ 𝑘𝑡 ∇𝑢 ⋅ ∇𝑤𝑛 𝑑Ω = − ∫ 𝑘𝑡 ( , ) ⋅ ( , ) 𝑑Ω =
𝜕𝑥 𝜕𝑦
𝜕𝑥 𝜕𝑦
𝑚
𝑚
Ω𝑛
Ω𝑛
𝜕𝑢 𝜕𝜉 𝜕𝑢 𝜕𝜂 𝜕𝑢 𝜕𝜉 𝜕𝑢 𝜕𝜂
𝜕𝑤 𝜕𝜉 𝜕𝑤 𝜕𝜂 𝜕𝑤 𝜕𝜉 𝜕𝑤 𝜕𝜂
= −|∆| ∫ 𝑘𝑡 (
+
,
+
)⋅(
+
,
+
) 𝑑Ω′ (∗)
𝜕𝜉 𝜕𝑥 𝜕𝜂 𝜕𝑥 𝜕𝜉 𝜕𝑦 𝜕𝜂 𝜕𝑦
𝜕𝜉 𝜕𝑥 𝜕𝜂 𝜕𝑥 𝜕𝜉 𝜕𝑦 𝜕𝜂 𝜕𝑦
Ω′𝑛
Página 8
Los valores de las derivadas de la inversa de la transformación pueden hallarse a partir de la
matriz inversa de la jacobiana:
𝐽𝑚 −1
𝜕𝜉
𝜕𝑥
=
𝜕𝜉
(𝜕𝑦
𝜕𝜉
1 𝑦𝑚
𝜕𝑦
= ( 13𝑚
𝜕𝜂
∆ −𝑦12
𝜕𝑦)
𝑚
−𝑥13
𝑚 )
𝑥12
En tanto, las derivadas de la función interpolante, se calculan:
3
𝑚
(𝜉, 𝜂))
𝜕𝑢 𝜕(∑3𝑘=1 𝑁𝑘 (𝜉, 𝜂)𝑢(𝑘) )
𝑚 𝜕(𝑁𝑘
𝑚
𝑚
=
= ∑ 𝑢(𝑘)
= − 𝑢(1)
+ 𝑢(2)
𝜕𝜉
𝜕𝜉
𝜕𝜉
𝑘=1
3
(𝜉, 𝜂))
𝜕𝑢
𝑚 𝜕(𝑁𝑘
𝑚
𝑚
= ∑ 𝑢(𝑘)
= − 𝑢(1)
+ 𝑢(3)
𝜕𝜂
𝜕𝜂
𝑘=1
Reemplazando las derivadas en la expresión (∗):
𝑚
𝑚
𝑚
𝑚
𝑚
𝑚
𝑚 𝑚
𝑚
𝑚
𝑚
𝑚 𝑚
𝑚
′
− ∫ ((−𝛼
⏟ 13 + 𝛼123 )𝑢(1) + 𝛼13 𝑢(2) − 𝛼123 𝑢(3) , (−𝛼12 + 𝛼123 )𝑢(1) − 𝛼13 𝑢(2) + 𝛼123 𝑢(3) ) ⋅ ∇′𝑤𝑛 𝑑Ω
Ω′𝑛
̅̅̅̅
𝐹𝑚
Donde ∇′𝑤𝑛 es el gradiente de 𝑤𝑛 en las coordenadas normalizadas y:
2
2
𝑚
𝑚
𝑥12
+ 𝑦12
= 𝑘𝑡
|∆|
𝑚2
𝑚2
𝑥13 + 𝑦13
𝑚
𝛼13 = 𝑘𝑡
|∆|
𝑚 𝑚
𝑚 𝑚
𝑥
𝑥
12 13 + 𝑦12 𝑦13
𝑚
𝛼123
= 𝑘𝑡
{
|∆|
𝑚
𝛼12
Ahora es posible pasar del cálculo de una integral de superficie al del flujo a través de la curva
Γ𝑛 = 𝜕Ω′𝑛 :
′
̅̅̅̅ 𝑛 𝑑Ω′
− ∫ ̅̅̅̅
𝐹𝑚 ⋅ ∇′𝑤𝑛 𝑑Ω′ = ∫ ̅̅̅̅
𝐹𝑚 ⋅ 𝑛̆𝑛 𝑑Ω′ = ∫ ̅̅̅̅
𝐹𝑚 ⋅ 𝑛̆
𝑛 1 𝑑Ω + ∫ 𝐹𝑚 ⋅ 𝑛̆
2
Ω′𝑛
Γ𝑛
Γ𝑛 1
Γ𝑛 2
Página 9
𝑚
Dependiendo del nodo local 𝑘⁄𝐺(𝑘)
= 𝑛 que se esté analizando, las curvas de integración, su
longitud y la dirección de sus normales exteriores varían:
𝒌
𝟏
1
𝒏̆
𝒏𝟏
𝒍𝒏 𝟏
√5
1
(2,1)
−
√5
1
(1,2)
−
√5
𝟐
𝟑
1
√5
6
√5
6
√5
6
(1,2)
𝒏̆
𝒏𝟐
(2,1)
√5
1
(−1,1)
√2
1
(1, −1)
√2
𝒍𝒏 𝟐
√5
6
√2
6
√2
6
𝑙𝑛 1y 𝑙𝑛 2 son las longitudes de las curvas Γ𝑛 1 y Γ𝑛 2 .
′
̅̅̅̅
Como ̅̅̅̅
𝐹𝑚 = (𝐹𝑚 1 , 𝐹𝑚 2 ) es constante en todo el dominio, ∫Γ ̅̅̅̅
𝐹𝑚 ⋅ 𝑛̆
𝑛 1 𝑑Ω + ∫Γ 𝐹𝑚 ⋅
′
̅̅̅̅ 𝑛 + 𝑙𝑛 ̅̅̅̅
𝑛̆
𝐹 ⋅ 𝑛̆
𝑛 2 𝑑Ω = 𝑙𝑛 1 𝐹𝑚 ⋅ 𝑛̆
𝑛 2 y las integrales resultan:
1
2 𝑚
𝑛1
𝑛2
𝒌
̆𝒏 𝒅𝛀′
∫ ̅̅̅̅
𝑭𝒎 ⋅ 𝒏
𝟏
𝟐
𝟑
𝚪𝒏
𝑚
𝑚
𝑚
𝑚
𝑚
𝑚
𝛼13
𝛼12
𝛼13
𝛼123
𝛼12
𝛼123
𝑚
𝑚
𝑚
𝑚
−
+ 𝛼123
+(
−
+(
−
(−
) 𝑢(1)
) 𝑢(2)
) 𝑢(3)
2
2
2
2
2
2
(
𝑚
𝑚
𝑚
𝑚
𝛼13
𝛼123
𝛼13
𝛼123
𝑚
𝑚
−
−
𝑢(2)
+
𝑢𝑚
) 𝑢(1)
2
2
2
2 (3)
𝑚
𝑚
𝑚
𝑚
𝛼12
𝛼123
𝛼123
𝛼12
𝑚
𝑚
−
𝑢 +−
𝑢𝑚
(
) 𝑢(1) +
2
2
2 (2)
2 (3)
Página 10
3) Discretización del dominio mediante GMSH
La discretización del dominio se llevó a cabo utilizando la herramienta de software libre bajo
licencia GNU/GPL GMSH. Se trata de un generador de grillas tridimensionales de elementos
finitos que dispone de capacidad de pre y post-procesamiento.
Mallas no estructuradas
Para discretizar el intercambiador de calor de forma no estructurada se generaron mallas con
GMSH empleando sólo dos superficies de mallado, una para C0 y otra para C2.
Geometría para la generación de mallas no estructuradas
Elementos triangulares de 3 nodos
A partir de este modelo, mallando con una longitud característica de 1,0 (valor
predeterminado)
en
todos
los
puntos,
se
obtuvo
la
malla
1.1.
A fin de poder contrastar la precisión de la solución obtenida al trabajar con una malla más
gruesa, considerando “buena” la anterior por su cantidad de elementos, se llevó a cabo el
mismo proceso con una longitud característica de 2,0, para producir la malla 1.2.
Finalmente, a partir de la malla 1.1, se aplicó el comando reiteradamente “Refine by Splitting”,
obteniéndose 5 mallas diferentes, cada una de ellas con mayor número de elementos que la
anterior. De esta forma, fue posible adoptar como solución “exacta” a la obtenida a partir de la
más fina (1.7) y utilizarla como patrón de referencia para la comparación de los resultados
obtenidos.
Página 11
Malla 1.1. 102 nodos, 216 elementos.
Malla 1.2. 52 nodos, 110 elementos.
Página 12
Mallas refinadas
Malla 1.3. 366 nodos, 756 elementos
Malla 1.4. 1.380 nodos, 2.808 elementos
Página 13
Malla 1.5. 5.352 nodos, 10.800 elementos
Malla 1.6. 21.072 nodos, 42.336 elementos
Página 14
Malla 1.7. 83.616 nodos, 167.616 elementos
Elementos triangulares de 3 nodos (concentrada alrededor de C1)
Para tener pruebas más consistentes, se realizó otro tipo de mallado, modificando las
longitudes características de ciertos puntos.
Como el conductor C1 se encuentra a 100°, es de esperarse que los gradientes de temperatura
sean mayores alrededor de éste, particularmente en la zona derecha del intercambiador. Por
lo tanto, para poder obtener resultados más precisos en el entorno del mismo, se llevó a cabo
una discretización más fina en esa zona.
Se definieron los puntos de los vértices de C2 con una longitud característica de 0,4 y los
vértices de C1 con una longitud característica de 0,15.
Luego, análogamente al trabajo realizado en el apartado anterior, se aplicó reiteradamente el
comando “Refine by Splitting” para lograr una precisión incremental en los ensayos sucesivos.
De esta manera, se elaboraron las siguientes mallas:
Página 15
Malla 2.1. 970 nodos, 1.972 elementos
Mallas refinadas
Malla 2.2. 3.672 nodos, 7.408 elementos
Página 16
Malla 2.3. 14.272 nodos, 28.672 elementos
Malla 2.4. 56.256 nodos, 112.768 elementos
Página 17
Elementos cuadrangulares de 4 nodos
Se llevó a cabo el mismo procedimiento de refinamientos sucesivos para mallas conformadas
por elementos cuadrangulares de 4 nodos además de generar una discretización de menor
número de nodos a la predeterminada (malla 3.2).
Malla 3.1. 477 nodos, 543 elementos
Página 18
Malla 3.2. 232 nodos, 264 elementos
Mallas refinadas
Malla 3.3. 1.628 nodos, 1.760 elementos
Página 19
Malla 3.4. 6.344 nodos, 6.608 elementos
Malla 3.5. 25.040 nodos, 25.568 elementos
Página 20
Malla 3.6. 99.488 nodos, 100.544 elementos
Página 21
Mallas estructuradas
Para la creación de mallas estructuradas, es necesario discretizar el dominio de forma tal que
las superficies de mallado estén conformadas por subdominios que sean isomorfos en alto
grado a formas geométricas rectangulares o triangulares para poder aplicar un algoritmo
transfinito que genere los elementos triangulares por subdivisión de rectángulos y los
cuadrangulares a partir de la recombinación de los mismos.
Geometría para la generación de mallas estructuradas
Elementos triangulares de 3 nodos
Para aplicar la misma metodología de refinamientos sucesivos que en los casos anteriores, fue
necesario indicar la cantidad de nodos a generar en cada línea transfinita, a través de la
modificación de los parámetros de cada una de ellas, asegurándose de mantener la
compatibilidad
entre
sus
valores
en
cada
subdominio
delimitado.
Comenzando a partir de valores bajos, se obtienen una discretización gruesa, que se van
mejorando gradualmente.
Página 22
Malla 4.1. 44 nodos, 98 elementos
Mallas refinadas
Malla 4.2. 148 nodos, 316 elementos
Página 23
Malla 4.3. 536 nodos, 1.112 elementos
Malla 4.4. 2.032 nodos, 4.144 elementos
Página 24
Malla 4.5. 7.904 nodos, 15.968 elementos
Malla 4.6: 31.168 nodos, 62.656 elementos
Página 25
4) Distribución de temperaturas
Las mallas obtenidas en el punto anterior fueron procesadas a partir de archivo .msh generado
aplicando el método de los volúmenes finitos descripto en los primeros apartados con el
código MATLAB incluido en el anexo para obtener la distribución de temperaturas en el
intercambiador de calor.
Posteriormente, se procedió a comparar cada una de dichas soluciones 𝑢 con la obtenida
utilizando la discretización más fina 𝑢̂. Para ello, se definió la función ∆𝑢 = 𝑢 − 𝑢̂ y se realizó
un muestreo de la misma sobre los nodos de la malla más fina (i.e.: ∆𝑢𝑛 =. 𝑢(𝑥𝑛 , 𝑦𝑛 ) − 𝑢̂𝑛
para 1 ≤ 𝑛 ≤ 𝑁 ) para emplear la funcionalidad de post-procesamiento provista por GMSH y
obtener una gráfica de su distribución a lo largo de todo el dominio.
A continuación se muestran los gráficos de las soluciones obtenidas en los ensayos y postprocesadas con GMSH para varias mallas y de la mencionada función de diferencia de cada una
de ellas, constituyendo ésta una aproximación del error introducido por la discretización.
Para todos los gráficos de solución, se utiliza la misma escala de valores:
Página 26
Mallas no estructuradas
Elementos triangulares de 3 nodos
Solución Malla 1.1
Error Malla 1.1
Página 27
Solución Malla 1.4
Error Malla 1.4
Página 28
Solución Malla 1.6
Error Malla 1.6
Página 29
Elementos triangulares de 3 nodos (concentrada alrededor de C1)
Solución Malla 2.1
Error Malla 2.1
Página 30
Solución Malla 2.3
Error Malla 2.3
Elementos Cuadrangulares
*A completar en la próxima entrega*
Página 31
Mallas estructuradas
Elementos Triangulares de 3 nodos
Solución Malla 4.1
Error Malla 4.1
Página 32
Solución Malla 4.3
Error Malla 4.3
Página 33
Solución Malla 4.5
Error Malla 4.5
Página 34
Elementos Cuadrangulares
*A completar en la próxima entrega*
Página 35
Comparación de errores y conclusiones
El siguiente gráfico ilustra la relación entre el número de nodos de la malla y el módulo del
máximo error cometido para cada tipo de malla a partir de los resultados obtenidos en los
ensayos realizados.
18
16
|Error Máximo|
14
12
10
No Estructurada
8
No Estructurada
Concentrada
6
Estructurada
4
2
0
0
5000
10000
15000
20000
25000
Nº de nodos
Se observa cómo, al incrementar la cantidad de nodos, los errores, que exceden los 17°C en las
mallas más gruesas, caen a alrededor de 0,5°C en las mallas más densas.
Cabe destacar que surge del análisis de las distribuciones de errores de la sección anterior que
estos valores máximos representados, en la mayor parte de los casos, se alcanzan en entornos
muy localizados alrededor de los bordes rectos del conductor C2. El motivo de ello es la
presencia de importantes gradientes de temperatura en esa zona, que generan la necesidad de
una discretización con elementos de menor tamaño a fin de poder representar con fidelidad el
fenómeno físico que se presenta.
En las zonas cercanas al borde externo del intercambiador, ya es posible obtener un error
virtualmente nulo a partir de discretizaciones con un número reducido de nodos.
A partir de la observación de las tres curvas de tendencia, es posible concluir que el mallado no
estructurado con nodos concentrados en las cercanías de los conductores es el que entrega
mejores resultados para el mismo número de nodos, mientras que no existe una diferencia
considerable entre los mallados estructurados y los no estructurados. Por consiguiente, resulta
una estrategia interesante dedicar los esfuerzos a estructurar apropiadamente y refinar la
malla en alto grado en las zonas críticas analizadas con un elevado nivel de detalle, en lugar de
hacerlo sobre la totalidad del dominio.
Página 36
Comparación de tiempos de ejecución
Para cada resolución del problema, utilizando las funciones tic y toc de MATLAB, se computó el
tiempo de ejecución del algoritmo, elaborándose el siguiente gráfico, que muestra su relación
con el número de nodos de la malla (de cualquier tipo).
250
Tiempo de Ejecución (s)
200
150
Tiempo de Ejecución
100
Ajuste Cuadrático
y = 3E-08x2 - 2E-05x + 0,1613
R² = 0,9998
50
0
0
20000
40000
60000
80000
100000
Nº de nodos
La resolución se llevó a cabo en todos los casos a través del software MATLAB R2012a, en un
equipo con procesador Intel Core i5-760 a 2,8 GHz y 4 GB de memoria RAM DDR3 a 1333 MHz.
No se consideró en ningún caso el tiempo de acceso para lectura/escritura de datos
almacenados en unidades magnética.
Se observa que el tiempo de ejecución crece abruptamente cuando se tienen decenas de miles
de nodos, llegando hasta casi cuatro minutos para la malla de aprox. 83.000 nodos.
Realizando un ajuste cuadrático a partir de los valores obtenidos, es posible lograr una
excelente aproximación de la curva y, de esta forma, es simple inferir cuánto tiempo insumirá
una ejecución conociendo la cantidad de nodos de la malla.
Página 37
5) Sensibilidad del problema al valor de la conductividad térmica de C 2
A partir de la malla de elementos triangulares de 3 nodos no estructurada más refinada (2.4),
se resolvió el problema manteniendo constante la conductividad térmica 𝑘0 de C0 y variando la
de C2 (𝑘2 ) entre 0,01 y 100 (valores que, a fines prácticos, pueden considerarse como nulo e
infinito respectivamente) para estudiar el comportamiento de la solución.
Cabe destacar que la distribución de temperaturas obtenidas depende sólo de la relación entre
los parámetros
𝑘2
.
𝑘0
Solución obtenida para 𝒌𝟐 = 𝟎, 𝟎𝟏
Se observa que el conductor C2 actúa como una importante barrera térmica entre el borde
izquierdo del intercambiador, que se encuentra a 20ºC y el lado derecho del conductor C1, que
se encuentra a 100ºC ya que hay una fuerte caída de la temperatura en esa dirección
(gradientes importantes) como consecuencia de la baja conductividad 𝑘2 .
Página 38
Solución obtenida para 𝒌𝟐 = 𝟏
El perfil de temperaturas muestra que hay un suave decaimiento desde el borde de C1 hacia la
periferia del intercambiador en todas las direcciones ya que, al ser iguales ambas
conductividades térmicas, el sistema resulta equivalente a uno en el que, en lugar de existir C2,
C0 cubriera esa porción de espacio físico, considerando válida la hipótesis de que la interfaz es
ideal y no existen pérdidas.
Página 39
Solución obtenida para 𝒌𝟐 = 𝟓
Se trata del problema planteado originalmente, puede interpretarse como una perturbación
introducida sobre el caso anterior, en la cual la temperatura cae más gradualmente hacia la
periferia del lado izquierdo debido a la mayor conductividad térmica de C2, que permite un
flujo de calor más importante a través de él.
Página 40
Solución obtenida para 𝒌𝟐 = 𝟏𝟎𝟎
Se acentúan más las características de la solución anterior. En este caso, el decaimiento de
temperatura en la superficie de C2 es prácticamente nulo (i.e.: el gradiente de temperaturas es
aproximadamente el vector nulo) ya que en esa región la resistencia al flujo de calor es casi
inexistente.
Página 41
7) Variante del problema con C2 adiabático
Al considerarse C2 adiabático, éste no pueda ya intercambiar calor con su entorno, lo que
representa una conductividad térmica nula o, equivalentemente, una resistividad infinita. De
esta forma, se tiene la situación extrema del caso simulado en el apartado anterior, en el que
se resolvió el problema para 𝑘2 = 0,01 ≅ 0, es decir, una aislación térmica total.
De forma general, para aplicar el método de los volúmenes finitos, al haber introducido una
condición de Neumann, es necesario considerar el término adicional obtenido a partir
𝜕𝑢
discretización de la formulación débil: ∫Γ 𝑘𝑡 𝜕𝑛 𝑑Ω. Sin embargo, debido a que dicha condición
𝑛
es nula, esta integral desaparece y el sistema de ecuaciones resultantes finalmente es el
mismo.
La diferencia operativa que se presenta es la necesidad de modificar la geometría para excluir
de a C2 de la superficie mallada ya que carece de sentido físico la ecuación del calor en esa
región.
Se efectuó el ensayo partir de una malla similar a la 2.4, con la diferencia mencionada en el
párrafo anterior, obteniéndose el resultado esperado.
Puede observarse una gráfica extremadamente similar a la del primer ensayo del apartado 5).
Esta vez C2 constituye una barrera térmica total entre la zona izquierda y la derecha del
intercambiador.
Página 42
Anexo
Ensayos previos
Para verificar el correcto funcionamiento del algoritmo, se definió una geometría de prueba
simple conformada por un dominio rectangular de 4cm x 2cm con conductividad térmica
unitaria, cuyo borde izquierdo se hallaba a 40ºC y su borde derecho a 20ºC.
Es sencillo hallar la solución analítica de la ecuación del calor en estado estacionario allí:
𝑢(𝑥, 𝑦) = 20 + 5𝑥 (con las unidades correspondientes para cada variable y parámetro).
Se definió la siguiente malla estructurada de elementos triangulares de 3 nodos, con la ventaja
de que, por su simpleza, es posible calcular manualmente su matriz global y el valor de las
incógnitas en cada nodo:
El resultado obtenido fue el esperado y pudieron verificarse satisfactoriamente los pasos del
algoritmo.
Página 43
Código fuente del programa en MATLAB
classdef Solucion < handle
properties
pathMesh
mesh
sol
nodosBorde
end
methods
function obj=Solucion(path)
obj.pathMesh=path;
end
function dif = compararCon( obj, pathMesh2, salida )
%Cálculo de la otra solucion
s2 = Solucion(pathMesh2);
s2.doVolumenesFinitos(0);
%Vector de diferencias
dif = zeros(obj.mesh.nbNod,1);
%Minimos y maximos X
elemento_X = [(1:s2.mesh.nbTriangles)'
zeros(s2.mesh.nbTriangles,1) zeros(s2.mesh.nbTriangles,1)];
for j=1:s2.mesh.nbTriangles
nodosElem = s2.mesh.TRIANGLES(j, 1:3);
elemento_X(j,2) = min( s2.mesh.POS(nodosElem([1 2
3]),1) );
elemento_X(j,3) = max( s2.mesh.POS(nodosElem([1 2
3]),1) );
end
%Computo de las diferencias
for i=1:obj.mesh.nbNod
%Si es un nodo de borde, dif = 0;
if ( ismember(i,obj.nodosBorde) )
continue;
end
%Posicion del nodo
x = obj.mesh.POS(i,1);
y = obj.mesh.POS(i,2);
%Busqueda del elemento correspondiente en la otra
malla
%Candidatos
b = [ elemento_X(:,2)<=x elemento_X(:,3)>=x];
candidatos = elemento_X( b(:,1) & b(:,2), 1);
encontrado=0;
j=0;
while( ~encontrado && j<size(candidatos,1) )
j = j+1;
Página 44
nodosElem = s2.mesh.TRIANGLES(candidatos(j), 1:3);
xv = s2.mesh.POS(nodosElem,1);
yv = s2.mesh.POS(nodosElem,2);
encontrado = inpolygon(x,y,xv,yv);
end
%Si no esta en ninguno, copia un vecino
if( j == size(candidatos,1) && ~encontrado)
if( i > 1)
dif(i) = dif(i-1);
end
disp({x,',',y,' no se pudo mapear', j});
continue;
end
%disp({x,',',y,' esta en el elemento ',
s2.mesh.nbLines+j, ' de vertices ', xv, yv});
%Normalización de coordenadas del punto
x1 = s2.mesh.POS(nodosElem(1),1);
y1 = s2.mesh.POS(nodosElem(1),2);
x12 = s2.mesh.POS(nodosElem(2),1)
s2.mesh.POS(nodosElem(1),1);
x13 = s2.mesh.POS(nodosElem(3),1)
s2.mesh.POS(nodosElem(1),1);
y12 = s2.mesh.POS(nodosElem(2),2)
s2.mesh.POS(nodosElem(1),2);
y13 = s2.mesh.POS(nodosElem(3),2)
s2.mesh.POS(nodosElem(1),2);
-
det = x12*y13-x13*y12;
psi = y13/det*(x-x1)-x13/det*(y-y1);
eta = -y12/det*(x-x1)+x12/det*(y-y1);
%Calculo de la solucion en la otra malla
sol2xy = (1-psi-eta)*s2.sol( nodosElem(1) ) +
psi*s2.sol( nodosElem(2) ) + eta*s2.sol( nodosElem(3) );
%disp({'Sol en el nodo ', i, ' de malla refinada: ',
obj.sol(i)});
%disp({'Sol en el malla gruesa: ', sol2xy});
%Diferencia entre soluciones en el punto
dif(i) = obj.sol(i)-sol2xy;
end
%Se guardan las diferencias en un archivo de salida si se
requiere
if (salida == 1)
pathSalida = strrep(pathMesh2,'.msh','-Dif.msh');
copyfile(obj.pathMesh, pathSalida);
fileID = fopen(pathSalida,'a');
Página 45
fprintf(fileID,'\r\n$NodeData\r\n1\r\n"Dif.
Temperatura [*C]"\r\n1\r\n0\r\n3\r\n0\r\n1\r\n');
fprintf(fileID,'%d\r\n',obj.mesh.nbNod);
for i=1:obj.mesh.nbNod
fprintf(fileID,'%d %.15f\r\n',i,dif(i));
end
fprintf(fileID,'$EndNodeData\r\n');
fclose(fileID);
end
end
function doVolumenesFinitos( obj, salida )
%Lectura de la malla
obj.mesh = load_gmsh2( obj.pathMesh );
%Matriz global
M = sparse(obj.mesh.nbNod,obj.mesh.nbNod);
%Vector de incógnitas
U = zeros(obj.mesh.nbNod,1);
%Factores normalizados
PSI_psi = [-0.5 0 0.5];
PSI_eta = [0.5 -0.5 0];
%Conductividades termicas
K0 = 1;
K2 = 0.0001;
%Ensamble de matriz global
for m=1:obj.mesh.nbTriangles
if( obj.mesh.TRIANGLES(m,4)== 4 )
K = K0;
else
K = K2;
end
nodos = obj.mesh.TRIANGLES(m,1:3);
x12 = obj.mesh.POS(nodos(2),1)obj.mesh.POS(nodos(1),1);
x13 = obj.mesh.POS(nodos(3),1)obj.mesh.POS(nodos(1),1);
y12 = obj.mesh.POS(nodos(2),2)obj.mesh.POS(nodos(1),2);
y13 = obj.mesh.POS(nodos(3),2)obj.mesh.POS(nodos(1),2);
det = abs(x12*y13 - x13*y12);
alfa12 = 1/det*(x12^2 + y12^2);
alfa13 = 1/det*(x13^2 + y13^2);
alfa123 = 1/det*(x12*x13 + y12*y13);
for k=1:3
a2 = alfa123*PSI_psi(k) + alfa13*PSI_eta(k);
a3 = -alfa12*PSI_psi(k) - alfa123*PSI_eta(k);
Página 46
M( nodos(k), nodos(1) ) = M( nodos(k), nodos(1) )
- K*(a2+a3);
M( nodos(k), nodos(2) ) = M( nodos(k), nodos(2) )
+ K*a2;
M( nodos(k), nodos(3) ) = M( nodos(k), nodos(3) )
+ K*a3;
end
end
%Condiciones de borde
%Deteccion de nodos de borde
nodosBordeC0 = [];
nodosBordeC1 = [];
for i=1:obj.mesh.nbLines
if( obj.mesh.LINES(i,3) == 1 )
nodosBordeC0 = union(nodosBordeC0,
obj.mesh.LINES(i, 1:2));
elseif ( obj.mesh.LINES(i,3) == 2 )
nodosBordeC1 = union(nodosBordeC1,
obj.mesh.LINES(i, 1:2));
end
end
%Valores de la condición de Dirichlet
U(nodosBordeC0)=20;
U(nodosBordeC1)=100;
% Sacar filas de valores conocidos de la matriz global
M([nodosBordeC0 nodosBordeC1],:) = [];
% Término independiente
b = - M(:,[nodosBordeC0 nodosBordeC1])*U([nodosBordeC0
nodosBordeC1]);
% Sacar columnas de valores conocidos de la matriz global
M(:,[nodosBordeC0 nodosBordeC1]) = [];
% Cálculo de incógnitas (X: vector de soluciones)
X = M\b;
%Se guarda la solución en un archivo de salida si se
requiere
%y se traspasan las incógnitas X al vector de soluciones U
if (salida == 1)
pathSalida = strrep(obj.pathMesh,'.msh','Resuelto.msh');
copyfile(obj.pathMesh, pathSalida);
fileID = fopen(pathSalida,'a');
fprintf(fileID,'\r\n$NodeData\r\n1\r\n"Temperatura
[*C]"\r\n1\r\n0\r\n3\r\n0\r\n1\r\n');
fprintf(fileID,'%d\r\n',obj.mesh.nbNod);
end
Página 47
j = 1;
for i=1:obj.mesh.nbNod
if ~( ismember(i,nodosBordeC0) ||
ismember(i,nodosBordeC1) )
U(i)=X(j);
j = j+1;
end
if (salida == 1)
fprintf(fileID,'%d %.15f\r\n',i,U(i));
end
end
if (salida == 1)
fprintf(fileID,'$EndNodeData\r\n');
fclose(fileID);
end
obj.sol = U;
obj.nodosBorde = union(nodosBordeC0,nodosBordeC1);
end
end
end
Página 48
Descargar