i don't think you'll need to calculate with traces of the water height, if you just stored a global water height, then have an array 100*100 to store the water height in those areas, then:
if(global_water_height < node.water_height){
do some pumping... isn't that the effect you're trying to achieve? :\