Hello everyone, I am solving the saddle point problem arising from the Stokes equations. As far as I know, MUMPS is an efficient solver, but since the linear system is singular, I need to set
"ksp_type": "preonly",
"pc_type": "lu",
"pc_factor_mat_solver_type": "mumps",
'mat_mumps_icntl_24': 1, # Option to support solving a singular matrix (pressure nullspace)
'mat_mumps_icntl_23': 0, # Option to support solving a singular matrix (pressure nullspace)
I would like to know if there are any other efficient solvers available and how they handle the singularity issue. This is a three-dimensional problem with billions of degrees of freedom.
See also the Stokes demo which shows some basic iterative solution methods. I also have a very basic example here.
The specific construction of an iterative solver and appropriate preconditioner will derive from your problem’s formulation. This is a vast research problem and would likely require consultation of research literature.
I guess I’ll chime in here for a bit. I would advise you to look at textbooks to gain more understanding, since the topic of direct vs iterative solution methods is fairly basic scientific computing stuff that’s covered pretty well in most places. Here is a textbook that I’ve used in the past, chapter 9 is all about solving large systems of linear equations. Most other textbooks on scientific computing should cover this topic as well.
Like @nate already mentioned the choice for a specific iterative solution method (and preconditioner) depends heavily on the specifics of the problem that you’re trying to solve, so you’d have to look at relevant research papers and see what solution methods they’re using. I assume that you’re working on this under the supervision of a researcher or professor, they should be able to point you to relevant sources for this application.