[petsc-users] Zero pivot in LU factorisation
Jose E. Roman
jroman at dsic.upv.es
Thu Jul 25 05:44:06 CDT 2013
The default is to solve as B^{-1} A x = lambda x
With -st_type sinvert -eps_target 0 then it is solved as A^{-1} B x = theta x
The latter is probably what you need (or with a different target). Are you sure your A-matrix is non-singular?
Jose
El 25/07/2013, a las 11:38, Toby escribió:
> Dear all,
>
> I have a generalised matrix problem: A x = lambda B x. My matrix B is diagonal and positive semi-definite. My matrix A is a non-hermitian complex matrix.
>
> My problem is essentially that when using the SLEPc generalised eigenvalue solver I get the error "zero pivot in LU factorisation". The rest of the below is details about the problem and things I have tried so far.
>
>
>
> The matrix will be at its largest about 48000 by 48000, and I want to find the eigenvalues. The eigenvalues I am interested in are ones with the largest real part near 0+0i. Ideally, I want to be able to find them even if they are internal (i.e when there are other eigenvalues with larger positive real part in the spectrum). However, I would be happy if I could get it to work for problems where all eigenvalues have real parts < 0 apart from the eigenvalue of interest.
>
> At the moment I have used the scipy linalg.eig and sparse.eigs functions. As far as I know, these use LAPACK and ARPACK respectively to do the heavy lifting. I have decided to see if I can achieve better performance through using the SLEPc library. If this is a bad decision, let me know!
>
> I want to move onto using PETSc with the SLEPc eigenvalue solvers. I have been trying out SLEPc using the examples provided as part of the tutorial. Exercise 7 reads matricies A and B from a file and outputs the solutions. I got this to work fine using the matrices provided. However, if I substitute a smaller sized test version of my problem (6000x6000), I get a variety of errors depending on the command line arguments I supply.
>
> The main problem I have is the error: "zero pivot in LU factorisation!" when I use the default settings.
>
> I think this might be related to the fact that B contains rows of zeros, although my understanding of linear algebra is somewhat basic. Is this true?
>
> I have tried setting the options suggested on the petsc website, -pc_factor_shift_type NONZERO etc but all I get is an additional warning that these options were not used
>
> I assumed that this was a problem with the preconditioner, so I tried setting -eps_target to 0.1 and both with and without specifying -st_type sinvert and shift. Still I get the same error.
>
> Then I tried -st_pc_type jacobi and st_pc_type bjacobi. jacobi runs, but does not produce any eigenvalues. Block jacobi does an LU factorisation and gives me the same error again.
>
> The default method is krylov-schur, so I have experimented with the -eps_type gd and -eps_type jd options. Unfortunately these seem to produce nonsense eigenvalues, which do not appear on the spectrum at all when I solve using LAPACK in scipy.
>
> I know my matrix problem is not singular, because I can solve it using scipy.
>
> Do you know of any books/guides I might need to read besides the PETSC and SLEPC manuals to understand the behaviour of all these different solvers?
>
> The output from the case with no command line options is given below.
>
> Thanks a lot for taking the time to read this!
>
> Kind Regards,
> Toby
>
More information about the petsc-users
mailing list