I have been working on the river modifier for some times without any significant result and so didn't post about it. I am still trying to fix the issue, that the sides of the river bank are very steep. I think my current implementation would work, it is just very, very slow.
But I have started to think about it and I think the idea to fix those parts is wrong. I always knew that I did something which is wrong from the start, as currently I define the terrain and then add a river which does local modifications. In reality the river very much shapes the terrain. But I don't want to work in that way, as it makes it very hard to control what you end up with, as I would basically run some simulation and the result would be governed by coefficients which define the soil and very much by random fluctuations.
So to have more control I decided to do it differently. But now I run into a different kind of problem, I have to be careful how I place a river. I can now do completely impossible things, like adding a river which starts in India and ends in China. That river would "only" have to pass the Himalayan mountains. So if I add the code to create the 45° slope after the river bank it would cut a gigantic V into the mountains, 8km deep (the Colorado river would look like a lazy little rivulet compared to that as the Grand Canyon is "just" 1.83km deep, my valley would be more than 4 times as deep and 16 km wide with incredibly flat sides in a perfect 45° angle). As the Grand Canyon proves there are rivers which dug deep into the terrain, but there the 45° are obviously not correct.
So it seems, that the solution I am looking for is different than what I have been trying. I should again limit the width the river can influence to get the speed problems under control and if that is not wide enough, I should probably consider it a modeling problem. A river which has to dig itself in on such a major scale will have strong effects on the terrain, so the terrain I am modeling would already have to take that into account and the river modifier should then only do small scale changes. I guess I will try to change the code into that direction.