by wardbg » Tue Jun 13, 2017 7:05 pm
I believe I have found a solution . The description below omits things like allocating memory, initializing the descriptors etc. To find the left eigenvectors of a square non-symmetric eigenproblem (NEP) I do the following (I am using scalar type 'C'):
Call PCGEHRD(N,1,N,A,1,1,DESCA,TAU,WORK,LWORK,INFO) where A is my distributed complex matrix of order N
Take the result in A and split it up into two matrices, H (upper triangular part plus first subdiagonal) and Q (the rest) as described in the PGEHRD documentation. Initialize a new distributed matrix Z and set it to the identity matrix.
Call PCLAHQR(.TRUE.,.TRUE.,N,1,N,H,DESCH,W,1,N,Z,DESCZ,WORK,LWORK,-1,-1,INFO)
Call PCTREVC( 'R', 'B', SELECT, N, H, DESCH, VL, DESCVL, Z, DESCZ, N, N, WORK, RWORK, INFO )
Call PCUNMHR('L','N',N,N,1,N,Q,1,1,DESCQ,TAU,Z,1,1,DESCZ,WORK,LWORK,INFO)
Now the left eigenvectors are in the matrix Z. So basically, the matrix is transformed twice, and the transformations are captured in different ways. After the eigenvectors are calculated, the transformations are reversed to yield the eigenvectors of A.