WIP: Uzawa algorithm for Navier Stokes
Provide two linear solvers for Navier-Stokes that use the Uzawa algorithm.
The Uzawa algorithm is implemented in form of the preconditioner
SeqUzawa. By default, the direct
UMFPack solver is used for the velocity subsystem. Alternatively, setting
LinearSolver.InexactVelocitySolver to true will use one AMG cycle instead. The success is rather sensitive to the relaxation parameter
LinearSolver.PreconditionerRelaxation that depends (at least) on the mesh size and the viscosity.
UzawaSolver employs the preconditioner by default in a simple loop. Setting
LinearSolver.AndersonAcceleration to true will speed up the convergence by using Anderson acceleration. The solver
UzawaBiCGSTABBackend uses a BiCGSTAB solver around the Uzawa preconditioner.
...uzawapreconditioner have been added to
test/freeflow/navierstokes/sincos and are supposed to reproduce the results of
The promising fact is that both solvers work, meaning that we are no longer restricted to direct solvers. However, the number of required iterations is very high, especially when starting from an already small residual. For the considered tests, the
UzawaBiCGSTABBackend is superior to the Anderson-accelerated
Dumux Day 25.03.20 Only consider Uzawa preconditioner for 3.2
- Remove dependency on grid geometry
- Use Dune::Indices for improved readability
- Revise incorporation of boundary conditions in Uzawa preconditioner
- Make Uzawa preconditioner usable without solver factory
- Extract parameter tree conversion from solver factory to make it reusable
Revisit memory usage of Anderson Acceleration (do we really need maxIter-sized containers? can be very large)
Maybe extend for multidomain problems, i.e., allow to handle additional matrix blocks with given preconditioners