If you like math, you should enjoy [kynd’s] page about simulating fluid in p5.js. You might still enjoy the pretty colors and shapes if you aren’t into math. What’s scary is that the page promises to have as little math as possible, but there’s still quite a bit. Of course, we are sure you could go even deeper down the rabbit hole.
The algorithm’s core is a pair of 2D arrays representing cells that comprise the display area. One array holds the color of the cell, while another holds a velocity vector of the fluid in the cell. A vector, of course, has both a magnitude and a direction.