GPGPU with WebGL: simulating fluids (trailer)

In a previous post we solved Laplace’s Equation using WebGL. We will see how to implement the Lattice Boltzmann algorithm using WebGL shaders in the next post, but this post has a preview of the solution:

Click on the image to go to the demo. New obstacles can be created by dragging the mouse over the simulation area.

Video of the simulation (best seen in 720!):

Advertisement

Din谩mica de fluidos en Javascript

Inspirado por un ejemplo portado por Oliver Hunt de C a JS (y frustrado porque no se me ocurr铆a como resolver el nivel Ophanim en Manufactoria 馃榾 ), decid铆 portar mi c贸digo de simulaci贸n de fluidos mediante Lattice Boltzmann (LB) a Javascript y agregarle interactividad. La visualizaci贸n es algo primitiva, ya que me concentr茅 en optimizar los c谩lculos sin prestarle mucha atenci贸n a la optimizaci贸n del manejo de canvas; posiblemente mejore ese aspecto en una pr贸xima versi贸n.

El c贸digo presenta algunas limitaciones propias de utilizar una grilla de 64 X 64 como base (el m谩ximo tama帽o con performance “realtime“) y, muy probablemente de mi desconocimiento sobre como optimizar los par谩metros de LB. Es particularmente clara la compresibilidad del fluido y no es muy dif铆cil hacer “explotar” la simulaci贸n (se recupera mediante un reset).

Como WordPress no permite incluir c贸digo Javascript en los posts, para visualizar la simulaci贸n pueden hacer click en la imagen de referencia de los controles.

Referencia de los controles de la simulaci贸n. Hacer click para arrancar la simulaci贸n.

El uso de los controles es muy simple:

  • Play/pause: arranca o detiene la simulaci贸n.
  • Reset: reinicia la simulaci贸n desde cero.
  • Visualization reset: reinicia la visualizaci贸n, creando una nueva serie de part铆culas para marcar el movimiento del fluido (sin alterar el estado del mismo).

Para darle un impulso a una parte del fluido basta con arrastrar sobre el 谩rea de visualizaci贸n.

En un posterior post incluir茅 detalles acerca de como funciona LB y de las optimizaciones realizadas (tengo que leer m谩s, sobre todo respecto a la conexi贸n con los valores f铆sicos 馃榾 ).

Lattice Boltzmann (actualizaci贸n)

Todav铆a no encontr茅 el tiempo para dar una breve explicaci贸n de Lattice Boltzmann, pero logr茅 mejorar notablemnete la eficiencia de la simulaci贸n. Puede hacerse checkout de la 煤ltima “versi贸n” hasta el momento en http://lattice-boltzmann-sdl.googlecode.com/svn/tags/0.03/.

A continuaci贸n muestro dos im谩genes de la simulaci贸n, que est谩 corriendo a unos 30 FPS en un solo core de un Intel Core Duo T2600 @ 2.16 GHz. Corresponden a la colisi贸n de dos esferas de fluido en forma ligeramente oblicua.


Lattice Boltzmann (con SDL!)

Estoy trabajando en un nuevo proyecto personal: realizar una simulaci贸n de fluidos mediante el m茅todo conocido como Lattice Boltzmann y usando SDL para los gr谩ficos. Si bien el objetivo 煤ltimo es lograr una buena performance, actualmente solo est谩 funcionando la implementaci贸n “lenta” que voy a usar con prop贸sitos comparativos (a unos 8 FPS con simple precisi贸n en un Core Duo @ 2.16 GHz).

Hoy fue una experiencia bastante frustrante: emple茅 horas buscando un error en mi implementaci贸n de Lattice Boltzmann para descubrir finalmente que el problema estaba en las condiciones iniciales que estaba empleando… M谩s espec铆ficamente, no estaba cumpliendo con la condici贸n CFL :-S

En las pr贸ximas semanas probablemente agregue algo m谩s acerca de Lattice Boltzmann y, con suerte, tenga nuevos avances del proyecto.