// update p(x,y)
   for all cells (x,y) {
      px = vx(x-1,y  ) - vx(x+1,y  );
      py = vy(x  ,y-1) - vy(x  ,y+1);
      p(x,y) = (px+py)*0.5;
   }
   // update velocities
   for all cells (x,y) {
      vx(x,y) += ( p(x-1,y  ) - p(x+1,y  ) )*0.5;
      vy(x,y) += ( p(x  ,y-1) - p(x  ,y+1) )*0.5;

      if ( frictionTurnedOn ) {
         vx(x,y) *= 0.99;
         vy(x,y) *= 0.99;
      }
   }
More information about the algorithm.

Left-mouse button drag: stir
Right-mouse button drag: change radius of spoon