I am attempting to solve a computational acoustics problem that involves solving an underlying sparse matrix. The size of the problem varies with grid size (3D) and fill-in's obviously make direct solution impractical. Important features of the matrix are as follows:

  1. It is non-Hermitian and particularly NOT diagonally dominant.

  2. Regardless of the size of the problem, there is always one row that consists of only one element, far away from the diagonal (and a zero on the diagonal). This is part of the problem's closure condition.

I have attempted to solve this problem using iterative techniques with preconditioning to speed up the solution. Iterative solution without preconditioning yields fairly inaccurate results (by comparison with directly computed results for a small grid). ILU preconditioning works for coarse grids (small matrices ~ 42000 x 42000) but fails for anything over 100,000 x 100,000; keeping a low fill-in factor ends in "Factor is exactly singular" and large fill-in factor ends in one of the sub-matrices being singular during pivoting. I also tried enforcing the one zero diagonal element with machine epsilon before attempting ILU but it still fails.

Relevant problem parameters are as follows:

  1. There are 8 PDE's: conservation of mass, conservation of energy, three momentum equations for interior points of computation (full staggered grid with velocity on faces and pressure, temperature & density on cell centers), and three problem specific momentum equations on certain boundaries.
  2. There are suitable closure conditions applied to the problem to obtain a full ranked system, one of which has been described above (zero diagonal row).
  3. I am using a hybrid scheme, with divergences and certain gradients being constructed by using a finite volume approach, and the rest of the operators being constructed using a finite difference approach utilizing polynomial fitting.

If it helps, I am using scipy sparse libraries to carry out my computations. The iterative method I am using is LGMRES, which works without any problems when provided a suitable preconditioner. Please suggest some viable preconditioning techniques for this kind of problem.

Edit: The sparsity pattern of the matrix is as follows:

Fine Grid

  • 3
    $\begingroup$ It's most likely the case that any good preconditioner will depend on the particular structure of your problem. You're more likely to get an answer if you describe the PDE that you're solving and the scheme that you've used to discretize it. $\endgroup$ – Brian Borchers Nov 25 '16 at 18:22
  • $\begingroup$ Added more details on the problem and also a spy plot. $\endgroup$ – Ambidextrous Anaconda Nov 25 '16 at 19:45
  • 1
    $\begingroup$ I agree with @BrianBorchers, please include the specific equations you are interested to solve. Also, is the resulting system of equations symmetric? Are you time marching? Are you solving one large system? or iterating between solving smaller systems (mass, energy,momentum, etc.). $\endgroup$ – Charles Nov 26 '16 at 4:02
  • $\begingroup$ Your problem seems to have some pretty obvious 5x5 block structure. You may be able to design an effective block preconditioner based on an approximate inversion of the block structure of your matrix. $\endgroup$ – sssssssssssss Nov 27 '16 at 17:40
  • $\begingroup$ @Charlie: I've added the description of the equations under "relevant problem parameters". They are standard equations in fluid dynamics. Also, there is no time marching; the entire system is being formulated in frequency domain and solved at once. $\endgroup$ – Ambidextrous Anaconda Nov 28 '16 at 21:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.