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