Por "el más simple" me refiero al más simple de aprender e implementar desde cero. Espero que mi pregunta pueda ser respondida más o menos.
fluid-dynamics
Vehsakul
fuente
fuente
Respuestas:
En dos dimensiones, la formulación de velocidad-vorticidad es la más sencilla de implementar porque las variables están colocadas, pero las condiciones de contorno pueden ser complicadas y es una declaración menos directa del problema. Para formulaciones variables primitivas, el método de diferencia finita de cuadrícula escalonada de Harlow y Welch (1965) es un gran lugar para comenzar.
fuente
Aquí puede encontrar una implementación completamente documentada de un método de solución muy simple pero bastante eficiente (método de división de Chorin) .
Para una selección de otros métodos populares, eche un vistazo al Capítulo 21 de este libro .
Descargo de responsabilidad: soy el (co) autor tanto del programa de demostración como del libro. El libro se puede descargar de forma gratuita.
fuente
Lo más simple siempre será relativo a sus intereses y necesidades particulares. Estoy de acuerdo con Anders en que, para un flujo incompresible en dominios con geometría simple, sería difícil superar el método de proyección (es decir, el método de división de Chorin) si prioriza tanto la facilidad de uso como la precisión.
Para entrar en un poco más de detalle, el método se introduce en [1]. El método de proyección aproximado más moderno, de segundo orden, se explica bien en [2]. La motivación es que resolver las ecuaciones de Navier-Stokes completamente incompresibles requiere resolver el campo de velocidad y la presión simultáneamente, y el sistema lineal resultante está bastante mal condicionado. El método de proyección elimina este problema al dividir cada paso de tiempo en una resolución de velocidad, utilizando la presión del paso de tiempo anterior, seguido de una actualización de presión, que esencialmente impone que el campo de velocidad permanezca incompresible.
Para implementar esto, necesitará algunos otros componentes, pero todos se pueden aprender y programar con bastante facilidad.
Para la resolución de presión, suponiendo que esté interesado en sistemas con densidad constante, deberá resolver la ecuación de Poisson. Por supuesto, hay docenas de algoritmos para abordar este problema, pero, con mucho, el más fácil de implementar, si tal vez no lo comprende completamente, es el algoritmo de gradiente conjugado (CG). Una de las mejores explicaciones de CG que he leído fue escrita por Jonathan Shewchuk y se puede encontrar aquí . Sin embargo, no es necesario que lea todo el documento para poder simplemente implementar el algoritmo.
Necesitará otro algoritmo para manejar el término de advección en Navier-Stokes. En varias dimensiones, programar implementaciones robustas de los métodos más flexibles, por ejemplo, Godunov, puede ser bastante difícil. Sin embargo, siempre que esté interesado en flujos con un número de Reynolds relativamente modesto (es decir, con una viscosidad no despreciable), uno de los métodos esencialmente no oscilatorios (ENO) se ajusta muy bien en términos de facilidad de implementación. Hay una excelente visión general de la teoría y la implementación en [3].
Deberá manejar el término viscoso utilizando un método implícito, generalmente Crank-Nicolson. Esto se explica en detalle en los documentos del método de proyección, y puede usar fácilmente CG para la solución de matriz siempre que la viscosidad sea constante.
[1] AJ Chorin, solución numérica de las ecuaciones de Navier-Stokes , J. Math. Comput., 22 (1968), págs. 745-762
[2] A. Almgren, JB Bell y W. Szymczak, Un método numérico para las ecuaciones incomprensibles de Navier-Stokes basadas en una proyección aproximada , SIAM J. Sci. Comput 17 (1996), págs. 258-369.
[3] S. Osher y R. Fedkiw, Métodos de ajuste de nivel y superficies dinámicas implícitas . Springer-Verlag Nueva York ,. Ciencias Matemáticas Aplicadas, 153, 2002
fuente
Los gráficos y juegos de computadora han visto una gran explosión de interés en la simulación de fluidos en los últimos años. Aquí hay un gran artículo de Jos Stam que analiza la implementación de un solucionador para aplicaciones en tiempo real. Viene con un código fuente muy fácil de entender. No sé cuán preciso es, pero podría ser lo que estás buscando.
fuente
Otro método realmente agradable y simple es usar autómatas celulares para la discretización. Hay muchos de estos modelos, incluidos LBA, FHP y mucho más. Estos son realmente buenos, ya que pueden proporcionar una simulación en tiempo real en computadoras modernas y también se pueden paralelizar y ejecutar en GPU. También tienen algunas desventajas y los resultados dependen en gran medida de la forma de la red aplicada. El enrejado cuadrado es insuficiente porque carece de libertad de rotación y, por ejemplo, los vórtices de von kaarman tendrán forma cuadrada, lo que no es agradable :)
fuente