Skip to content

WIP: Uzawa algorithm for Navier Stokes

Bernd Flemisch requested to merge feature/uzawa into master

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.

The solver 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.

Tests test_ff_navierstokes_sincos_uzawasolver and ...uzawapreconditioner have been added to test/freeflow/navierstokes/sincos and are supposed to reproduce the results of test_ff_navierstokes_sincos_instationary.

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 UzawaSolver.

Dumux Day 25.03.20 Only consider Uzawa preconditioner for 3.2

TODO

  • 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
Edited by Kilian Weishaupt

Merge request reports