[shallowwater] upwind mobility for shallow water flux.
Upwind mobility for shallow water flux
What does this feature / why does DuMux need it:
Wetting and drying of elements is actually stabilized with a mobility term which acts only on the mass equation and not on the momentum equations. The average water depth of the left and right cell is used to compute the mobility. For cases with small water depths (e.g. oscillating front in a bowl) and a fine mesh resolution, the current mobility treatment may have bad convergence properties.
I exported the Jacobian/Defect and used Scipy to solve/analyze the linear system. I figured out that the convergence properties strongly depend on the chosen preconditioner/linear solver/precision. Solving the system imprecisely may lead to a wrong solution and a non-converging Newton-solver. Trying to solve the linear system with a high acurracy with an inappropriate linear solver/perconditioner may fail.
In a short test I used the information (wave pattern) of the Riemann solver in combination with an upwind formulation of the mobility and applied it to the full system of euqations (mass and momentum). This improved the convergence properties dramatically. I suggest to compute the mobility depending on the wave pattern:
- left wave: only the water depth of the left side
- right wave: only water depth of the right side
- in between: water depth of the left and right side
and apply it on the full system.
Which issue does this feature fix (if any)
This feature will help to improve the convergence for test cases with small water depths when wetting and drying of elements occur.
Anything else we need to know?:
I will implement and test the new version to ensure that it outperforms the old one.