This river and whirlpool development used Houdini and a bit of Maya.
Due to the original size of the whirlpool, the constraint of animated characters floating in water and the camera very close to the water too, I decided not to simulate this water in 3d. I used a mix of procedural, 2d fluid simulation and an ocean shader. After weeks of development, the whirlpool location was reduced but I still think it was the right way to do it at the time.
First, I procedurally created a 2D vector field of water movement. This data was unbent and sent to Maya to create a 2D fluid simulation. This sim advected particles with UV. After deforming back, the particles’ motion created a new UV space for deforming the ocean shader.
This worked well for the river and outside of the whirlpool. Due on the high deformation of the UV in the center on the whirlpool, a different system was used. Procedural waves used the motion of the original particles. This result was baked as a displacement.
For the close up shots, more detail was needed so I created a local UV space deformed by the whirlpool with another ocean shader.
Another effects artist worked on the splashes, foam and aeration under my supervision.