Back when I experimented with this type of thing (late 1990s), I read some papers and books to learn about water flow, but I didn't keep a record of which ones I looked at. I ended up doing my own thing because I wanted to handle erosion. I wanted rivers to produce canyons and floodplains. I wanted dam reservoirs to fill up with sediment. I wanted rivers to produce effects like meandering and oxbow lakes. I wanted canals for irrigation and water diversion. I wanted floods to damage farms and houses in floodplains.
I kept some notes (links) in the Geography section of this page. There's a Jos Stam paper that is a must-read. Unfortunately I never organized the notes. Also unfortunately, the game was for OS/2 so I can't easily give you a runnable executable to play with. And also unfortunately, my code is terrible, but if you want to take a look, see water.cpp in the source code (zip).
Things I played with in my simulation (not all realistic):
- Areas near rivers have moist soil; areas far from rivers have dry soil. Moisture affected vegetation. Vegetation slows water flow.
- Rain creates water in all places, some of the time. It then flows downhill. Then it evaporates and is absorbed by the ground. The rain carves out river channels.
- Springs create water all the time, but only in a few locations. The springs keep the river channels filled. I didn't simulate rock layers or groundwater flow; I just placed springs randomly on mountains.
- Flowing water has momentum. If I remember right, this was important for making rivers meander.
- Fast moving water picks up sediment; slow moving water deposits sediment ahead of it. This carves out river valleys.
- During initial map creation I accelerated the water flow and erosion; during gameplay it ran at normal speed.
Overall, my experience was that all of this was quite fun to play with, but it took lots of heuristics and tweaking to make it work. I never got to a point where I could say that river creation felt natural and inevitable without tweaking. It was so much fun (both as a programmer and as a player) that I spent years on it, and never finished the rest of the game. :)