Métodos numéricos para ecuaciones en derivadas parciales

Transcripción

Métodos numéricos para ecuaciones en derivadas parciales
Métodos numéricos para ecuaciones en derivadas parciales:
problemas estacionarios
Ejemplo de problema asociado a una ecuación de tipo elı́ptico
Cálculo de distribución estacionaria de temperaturas sobre una aleta de
refrigeración usando un modelo bidimensional
Encontrar T (x, y) solución de la ecuación en derivadas parciales
~ ) = − 2 h(T − T∞ ) para (x, y) ∈ Ω
−div (k ∇T
d
(donde d representa el espesor de la aleta) tal que:
T = Ta
−k
en la frontera γ1
∂T
= h(T − T∞)
∂n
(arista izquierda)
en la frontera γ2
(resto de aristas)
Algunas observaciones
• Bajo ciertas condiciones (sobre la regularidad y positividad de los
coeficientes) puede asegurarse la existencia y unicidad de solución
• En general (a pesar de que pueda garantizarse la existencia y unicidad de solución) este problema no puede resolverse analı́ticamente
(por ejemplo con coeficiente h variable).
• El problema no lineal (de claro interés práctico) es (mucho) más
difı́cil de analizar
Formulación de un esquema de diferencias finitas
• Se introduce una malla (regular) de nodos en el rectángulo (0, Lx) ×
(0, Ly ) donde se buscará una aproximación de la temperatura
• Sobre cada uno los nodos interiores se busca una aproximación de la
ecuación diferencial (se supone k constante)
∂ 2T
2
∂ 2T
−k 2 − k 2 = − h(T − T∞)
∂x
∂x
d
• Sobre cada uno de los nodos en la frontera γ1 se impone
T = Ta
• Sobre cada uno de los nodos en la frontera γ2 se aproxima
−k
∂T
= h(T − T∞ )
∂n
2
Aproximación en nodos interiores
• Sobre un nodo interior (xi, yj ) se aproxima
∂ 2T
T (xi+1, yj ) − 2T (xi, yj ) + T (xi−1, yj )
(x
,
y
)
≃
i
j
∂x2
(∆x)2
T (xi, yj+1) − 2T (xi, yj ) + T (xi, yj−1)
∂ 2T
(x
,
y
)
≃
i
j
∂y 2
(∆y)2
• Ası́, para cada nodo interior, se obtiene:
−k
Ti+1,j − 2Ti,j + Ti−1,j
Ti,j+1 − 2Ti,j + Ti,j−1
2
−k
=
−
h(xi, yj )(Ti,j −T∞ )
(∆x)2
(∆y)2
d
donde Ti,j representa la aproximación de T en el nodo (xi, yj )
Aproximación en nodos frontera con temperatura conocida
• Sobre un nodo (0, yj ) se impone simplemente
T1,j = Ta
3
Aproximación en nodos sobre fronteras con convección
• Sobre un nodo en la frontera superior (xi, y1) se aproxima
T (xi, y1) − T (xi, y2)
∂T
(xi, y1) ≃
∂n
∆y
y ası́ se impone
−k
Ti,1 − Ti,2
= h(xi, y1 )(Ti,1 − T∞)
∆y
• Sobre un nodo en la frontera inferior (xi, yny ) se aproxima
T (xi, yny ) − T (xi, yny−1)
∂T
(xi, yny ) ≃
∂n
∆y
y ası́ se impone
−k
Ti,ny − Ti,ny−1
= h(xi, yny )(Ti,ny − T∞)
∆y
• Sobre un nodo en la frontera lateral derecha (xnx, yj ) se aproxima
∂T
T (xnx, yj ) − T (xnx−1, yj )
(xnx, yj ) ≃
∂n
∆x
y ası́ se impone
−k
Tnx,j − Tnx−1,j
= h(xnx, yj )(Tnx,j − T∞ )
∆x
4
Algunos comentarios sobre implementación
• Formación de sistema de ecuaciones lineales
– Las temperaturas sobre nodos se organizan en un vector
T = (T1, T2, . . . Tnx×ny )
tras una renumeración de nodos
– Se ensambla un sistema de ecuaciones
MT = b
• Almacenamiento de matriz del sistema
– Para nx = ny = n la matriz M tiene n4 posiciones, de las cuales
menos de 5n2 son no nulas
– Con n = 1000 la matriz tendrı́a menos del 0.0005% de posiciones no
nulas
• Resolución del sistema de ecuaciones lineales
– Se deben buscar métodos adecuados (en función del tamaño y estructura de la matriz)
• Las ideas de discretización son extensibles a geometrı́as más complicadas,
pero la implementación puede ser difı́cil
5
Función aleta mdf2d programada en GNU Octave
• Llamada a función aleta mdf2d:
octave:> [x,y,T]=aleta mdf2d(Lx,Ly,d,k,T0,Tamb,h,nx,ny);
donde (ayuda con help aleta mdf2d):
Lx: longitud (eje X) de la aleta
Ly: altura (eje Y) de la aleta
d: espesor de la aleta
k: coeficiente de conducción térmica
T0: temperatura en extremo caliente
Tamb: temperatura ambiente
h: coeficiente de pelı́cula
nx: número de nodos de discretización en longitud
ny: número de nodos de discretización en altura
• Ejemplo: cálculo de aleta con parámetros
Lx = 30 × 10−3
h = 10
Ly = 20 × 10−3
d = 10−3
T∞ = 300
k=1
Ta = 500
resolución y representación:
octave:> Lx=30e-3;Ly=20e-3;k=1;h=10;d=1e-3;Tamb=300;T0=500;
octave:> [x,y,T]=aleta mdf2d(Lx,Ly,d,k,T0,Tamb,h,20,20);
octave:> contour(x,y,T)
6

Documentos relacionados