Documentos de Académico
Documentos de Profesional
Documentos de Cultura
06 diciembre 2021
1. Introducción y presentación del problema
2. Marco teórico
Para la realización de una modelación del fenómeno en el tubo de Sod, se considera como
ecuación medular, la ecuación de Euler, que es resultado de la conservación de la cantidad de
movimiento en un fluido donde se desprecia la viscosidad. Adicionalmente se agrega las
ecuaciones de conservación de masa y energía en una dimensión, obteniendo la ecuación en
forma conservativa como la siguiente:
Donde encontramos:
𝑃: presión del fluido
𝛾: ratio de calores específicos
𝐸: energía interna
𝜌: densidad
𝑢: velocidad axial
Ahora bien, para ejecutar la resolución numérica, se utilizarán dos métodos para ecuaciones de
tipo conservativa: Lax-Friedrichs y Richtmeyer.
Lax-Friedrichs: este método consiste en discretizar con diferencia adelantada en el tiempo y
centrada en el espacio. A continuación, se reemplaza el termino en i por el promedio de los
nodos más cercano, con el objetivo de evitar problemas de inestabilidad. Por ende, se tiene que:
Posterior al análisis anterior, se proyecta la solución hasta el tiempo n+1 y se evalúa los flujos
en el tiempo t n+½, obteniendo lo siguiente:
Cabe destacar que, al considerar un tubo infinitamente largo, se usara la condición de borde de
Neumann con derivada igual a 0 es ambos extremos del tubo.
Luego se define la función “lax_friedrichs(p, u, P, gamma, dt, dx, pasos)”, la cual es descrita
por el enunciado de la tarea. Esta función retorna 3 vectores los cuales corresponden a la
densidad, velocidad axial y presión, cabe destacar que el tamaño de cada uno de ellos es igual
a la cantidad de puntos usados para discretizar el problema. Debido a problemas de
representación numérica al utilizar numpy con dtype=np.float64 para el caso de malla fina con
“1.000.000” de pasos de tiempo usando la discretización descrita por Richtmyers (para ambas
mallas, las dos discretizaciones fueron probabas con una cantidad de pasos de tiempo máximos
igual a “1.000.000”, para saber cuáles eran los valores que tomaban la densidad, velocidad
axial y presión, cuando el sistema entraba en equilibrio. Esto ayudaría a entender de mejor
manera, el motivo por el que los gráficos de la simulación usando Richtmyers tendrían una
forma “inestable” en el lado derecho del tubo) por lo cual se investigó para encontrar alguna
solución que pudiera ayudar a aumentar la precisión numérica, en la investigación se encontró
que “np.longdouble” podría ser la solución, pero incluso al realizar la simulación usando
“np.longdoble” el modelo en cuestión seguía presentando el mismo problema, por lo cual se
dejaron comentadas dichas líneas de código y se dejó el programa como estaba inicialmente.
Con respecto a la función propiamente tal, al comienzo se realiza la copia de los vectores que
contienen los valores iniciales del problema (densidad, velocidad axial y presión), esto se
realiza para no tener que volver a generar los valores iniciales cada vez que se ejecutan los
métodos solicitados en la tarea, además se despeja la energía de la formula (4) y se usa para
obtener la energía inicial del sistema.
Como en el enunciado hacen el caso para unidimensional, definimos los valores para U (de
esta forma será más sencillo trabajar el problema y queda tal cual aparece en el enunciado). En
el ciclo For, se toma como entrada la cantidad de iteraciones que se harán “pasos”, según
enunciado se calculan los valores de F y así el U se va actualizando, por eso se define afuera el
U. Luego se usa la ecuación de Lax-Friedrichs, se trabaja con una matriz con 3 filas (que
representa los componentes del vector, por ejemplo, para el caso de U son p, p*u y E) y tantas
columnas según la discretización, aquí se modifican los valores del medio, según la formula
(5) del enunciado. Para las condiciones de borde ya que, al considerar un tubo infinitamente
largo, se usará Neumann con derivada igual a 0 en ambos extremos, de esta forma permite que
la onda de presión “salga” del dominio. Finalmente, se usa la formula (4) para actualizar la
presión.
Ahora, se realiza la resolución numérica del método de Richtmyer’s , que es un poco más largo
ya que realmente es un esquema de Lax Friedrichs pero en 2 pasos. Este método retorna los
mismos 3 vectores que retornaba el método descrito anteriormente. Además, inicialmente son
muy parecidos, aquí se define el Fn_inter_der y el Fn_inder_izq que representan los valores
de la ecuación (6) siendo el _der el valor adelantado y el _izq el valor atrasado. Dentro del ciclo
for como se necesita obtener los valores Fn inter, se obtienen todos los valores del lado derecho
y del lado izquierdo (4). Para la etapa de corrección como bien dice el enunciado de la tarea,
se proyecta la solución hasta el tiempo final n+1 evaluando los flujos en el tiempo t n+ ½ según
la ecuación (7), de esta forma finalmente se actualizan los valores para retornar la densidad, la
velocidad y la presión.
Ahora, se define “condicion_inicial(cond0, cond1, nx)”, que para la presentación del problema
se definen (8). Aquí definimos las 2 condiciones, del lado izquierdo y derecho del tubo. Esta
función retorna la densidad, velocidad y presión.
Luego, se define la función “graficar(x, info_graficar, mediciones, nombre)”, se parte
colocando las leyendas que dará la información de los datos en la esquina superior derecha
(etiquetas), en el ciclo for según la cantidad de mediciones se almacenan todas las etiquetas
de los tiempos y al final se corresponde lo de la recta con la etiqueta.
Luego se define “generar_simulacion(x, t_col, funcion, p0, u0, P0, gamma, dt, dx)”, la idea de
este método es que al pasarle la “función” y todos los valores que necesitas para graficar,
empieza a ejecutar en 5 instantes de tiempo, y guarda los resultados y los grafica. Cuando sea
el tiempo 0, guarda los valores iniciales, en caso contrario se calcula el paso de tiempo (tiempo
actual dividido en delta t) y se define la función para calcular la densidad, la presión y la
velocidad axial.
Para la malla fina, según enunciado se pide una discretización espacial de 1500 nodos y un
paso temporal de 0.0001.
a. Malla gruesa
▪ ΔP = 0.9
Se solicita realizar una simulación para los dos métodos presentados anteriormente en la que
se tenga una discretización espacial de 300 nodos y un paso temporal de 0.0005. Los gráficos
de la distribución de la densidad, presión y velocidad a lo largo del eje x para distintos instantes
de tiempo se muestran a continuación:
Usando método de Lax–Friedrichs:
Para la estimación de la velocidad de cada una de las ondas, se realizará de forma visual al
observar los gráficos del esquema Richtmyer's y las ondas que demoran “t” tiempo en recorrer
“x” distancia, donde obtenemos que la onda expansiva posee una velocidad de 1,29 [m/s]
mientras la onda de choque viaja a una velocidad de 1,75 [m/s].
▪ ΔP = 0.8 y ΔP = 1.1
Al cambiar la diferencia de presión se observa lo siguiente, usando el método de Lax–
Friedrichs:
Figura 11. Variación de la densidad, dp = 0.8 Figura 12. Variación de la velocidad axial, dp = 1.1
Figura 13.Variación de la velocidad axial, dp=0.8 Figura 14.Variación de la velocidad axial, dp=1.1
Figura 15. Variación de la presión., dp = 0.8 Figura 16. Variación de la presión axial, dp = 1.1
Figura 17. Variación de la densidad, dp = 0.8 Figura 18. Variación de la densidad, dp = 1.1
Figura 19.Variación de la velocidad axial, dp=0.8 Figura 20.Variación de la velocidad axial, dp=1.1
Figura 21. Variación de la presión., dp = 0.8 Figura 22. Variación de la presión.axial, dp = 1.1
b. Malla fina
Se solicita realizar una simulación para los dos métodos presentados anteriormente en la que
se tenga una discretización espacial de 1500 nodos y un paso temporal de 0.0001. Los gráficos
de la distribución de la densidad, presión y velocidad a lo largo del eje x para distintos instantes
de tiempo se muestran a continuación:
Usando método de Lax–Friedrichs:as
Figura 29. Variación de la densidad, dp = 0.8 Figura 30. Variación de la velocidad axial, dp = 1.1
Figura 31.Variación de la velocidad axial, dp=0.8 Figura 32.Variación de la velocidad axial, dp=1.1
Figura 33. Variación de la presión., dp = 0.8 Figura 34. Variación de la presión.axial, dp = 1.1
Al cambiar la diferencia de presión se observa lo siguiente, usando el método de Richtmyer's:
Figura 35. Variación de la densidad, dp = 0.8 Figura 36. Variación de la densidad, dp = 1.1
Figura 37.Variación de la velocidad axial, dp=0.8 Figura 38.Variación de la velocidad axial, dp=1.1
Figura 39. Variación de la presión., dp = 0.8 Figura 40. Variación de la presión.axial, dp = 1.1
Figura 41. Método de Lax-Wendroff de 2 pasos (Richtmyer's) para t > 0. Fuente: Journal of
computacional physics.
El uso de la malla fina para este problema, se hace mucho más recomendable para los 2 métodos
analizados. El método de Lax tiende a dejar una curva suave dentro de las discretizaciones,
esto hace que no se distingan de forma precisa los saltos de discontinuidad debido a la onda de
choque producto de la unión de dos fluidos a diferentes condiciones iniciales, pero a pesar de
ello con esta malla es posible evidenciar un acercamiento excelente para la visualización del
problema al compararlo con los datos e información recopilada en el paper estudiado.
Además, para el caso de estudio del método de Richtmyer’s el cual hace más referencia en el
documento, se observan las mismas variaciones (sin considerar las oscilaciones antes de la
onda de choque, a pesar que para la Figura 41 se observan levemente estas variaciones que para
nuestro modelo se notan de forma acrecentada). Si comparamos la gráfica de densidad se
observan 2 escalonamientos en el que se disminuye la densidad para el lado derecho del
diafragma, esto producto de la onda de choque (discontinuidad de contacto). Para el de
velocidad se observa que el de la zona izquierda (de mayor densidad y presión) su velocidad
va aumentando y así pasa el límite del diafragma para luego descender abruptamente hasta
velocidad 0, estos cambios dependiendo el dp también son modificados cambiando levemente
el valor de la velocidad, mas no en la configuración del suceso. Para finalmente analizar el
ultimo grafico de presión que dado las condiciones iniciales se comporta de izquierda a derecha
con mayor presión constante para luego descender y al llegar al diafragma esta se mantiene
constante hasta llegar al punto de cambio de presión debido a la onda de choque que hace
descender la presión hasta el valor inicial del propuesto. En la figura 41 además se observa una
gráfica de energía, que no se modelo en nuestro caso, pero representa la variación de la energía
para los 2 frentes de onda en el que la energía del frente de mayor presión va disminuyendo y
al pasar el diafragma la energía aumenta abruptamente para luego disminuir de la misma forma.
Por otro lado, se observa que el punto “final” en la variación se dan en los mismos valores (x
= 0.75 para el paper, x = 1.4 para nuestra modelación) para las 4 graficas resultante, por lo que
se consideran cálculos consistentes.
5. Conclusiones
De los dos esquemas diferentes usados para la modelación del problema del tubo de Sod
mediante diferencias finitas, el método de Richtmyer's produjo los mejores resultados. Esto
dado que los esquemas obtenidos con este método ofrecen una mejor solución a las
discontinuidades producto de la onda de choque generada. Analizándolo a manera del código,
el primer paso es hacer la predicción (n + ½), que ambos métodos tienen lo mismo (ecuación
5 con la 6 del enunciado, diferenciándose en los valores que toman) pero el segundo paso que
hace la diferencia es la ecuación 7 que hace una corrección (toma lo calculado en la 6 para
obtener los F y generar la corrección) lo que hace que sea más preciso, esto además hace que
sea más costoso computacionalmente (por la cantidad de cálculos para la parte atrasada y
adelantada) en relación al método de Lax.
Para la malla gruesa, se observan “dientes de sierra” al acercarse el grafico, además la malla
fina mejora el calculo de los valores generando una grafica mas detallada y precisa que coincide
de mejor forma con lo obtenido en el artículo.
Lax es una “mala” aproximación ya que trae errores de primer orden, para el método de
Richtmyer’s a pesar de poseer las oscilaciones el gradiente se ve mejor representado lo que se
considera un método mas acertado para este problema.
En relación a el error, mientras mayor cantidad de puntos se usen para la gráfica, aumentan la
cantidad de puntos de oscilación antes de la onda de choque para el método de Richtmyer’s, y
para el método de Lax se pronuncian de mejor forma las líneas horizontales (escalones, que es
buscado en este caso ya que representaría de mejor forma el método pero que casualmente al
mismo tiempo representan un error del mismo, por lo que según la literatura al aumentar el
largo del tubo este error aumenta), pero aun con tendencia de seguir lineal por el suavizado del
método.
Se creía que el método de Richtmyer’s colapsaba al generar esas oscilaciones (al tener esos
datos tan juntos) por lo que en el código se crea en la parte final un aumento en la ventana de
tiempo para visualizar de mejor forma lo que ocurría en esas secciones donde no se apreciaba
bien lo que ocurría, y finalmente al leer los papers y las clases del profesor, damos por
entendido que el método genera esas oscilaciones y no son error de Python al colapsar como
se pensaba.
6. Bibliografía