Go to main content
Oracle Developer Studio 12.5 Man Pages

Exit Print View

Updated: June 2017
 
 

shsein (3p)

Name

shsein - use inverse iteration to find specified right and/or left eigenvectors of a real upper Hessenberg matrix H

Synopsis

SUBROUTINE SHSEIN(SIDE, EIGSRC, INITV, SELECT, N, H, LDH, WR, WI, VL,
LDVL, VR, LDVR, MM, M, WORK, IFAILL, IFAILR, INFO)

CHARACTER*1 SIDE, EIGSRC, INITV
INTEGER N, LDH, LDVL, LDVR, MM, M, INFO
INTEGER IFAILL(*), IFAILR(*)
LOGICAL SELECT(*)
REAL H(LDH,*), WR(*), WI(*), VL(LDVL,*), VR(LDVR,*), WORK(*)

SUBROUTINE SHSEIN_64(SIDE, EIGSRC, INITV, SELECT, N, H, LDH, WR, WI,
VL, LDVL, VR, LDVR, MM, M, WORK, IFAILL, IFAILR, INFO)

CHARACTER*1 SIDE, EIGSRC, INITV
INTEGER*8 N, LDH, LDVL, LDVR, MM, M, INFO
INTEGER*8 IFAILL(*), IFAILR(*)
LOGICAL*8 SELECT(*)
REAL H(LDH,*), WR(*), WI(*), VL(LDVL,*), VR(LDVR,*), WORK(*)




F95 INTERFACE
SUBROUTINE HSEIN(SIDE, EIGSRC, INITV, SELECT, N, H, LDH, WR, WI,
VL, LDVL, VR, LDVR, MM, M, WORK, IFAILL, IFAILR, INFO)

CHARACTER(LEN=1) :: SIDE, EIGSRC, INITV
INTEGER :: N, LDH, LDVL, LDVR, MM, M, INFO
INTEGER, DIMENSION(:) :: IFAILL, IFAILR
LOGICAL, DIMENSION(:) :: SELECT
REAL, DIMENSION(:) :: WR, WI, WORK
REAL, DIMENSION(:,:) :: H, VL, VR

SUBROUTINE HSEIN_64(SIDE, EIGSRC, INITV, SELECT, N, H, LDH, WR,
WI, VL, LDVL, VR, LDVR, MM, M, WORK, IFAILL, IFAILR, INFO)

CHARACTER(LEN=1) :: SIDE, EIGSRC, INITV
INTEGER(8) :: N, LDH, LDVL, LDVR, MM, M, INFO
INTEGER(8), DIMENSION(:) :: IFAILL, IFAILR
LOGICAL(8), DIMENSION(:) :: SELECT
REAL, DIMENSION(:) :: WR, WI, WORK
REAL, DIMENSION(:,:) :: H, VL, VR




C INTERFACE
#include <sunperf.h>

void shsein(char side, char eigsrc, char initv,  int  *select,  int  n,
float *h, int ldh, float *wr, float *wi, float *vl, int ldvl,
float *vr, int  ldvr,  int  mm,  int  *m,  int  *ifaill,  int
*ifailr, int *info);

void  shsein_64(char  side, char eigsrc, char initv, long *select, long
n, float *h, long ldh, float *wr, float *wi, float *vl,  long
ldvl,  float  *vr, long ldvr, long mm, long *m, long *ifaill,
long *ifailr, long *info);

Description

Oracle Solaris Studio Performance Library                           shsein(3P)



NAME
       shsein  -  use  inverse  iteration  to find specified right and/or left
       eigenvectors of a real upper Hessenberg matrix H


SYNOPSIS
       SUBROUTINE SHSEIN(SIDE, EIGSRC, INITV, SELECT, N, H, LDH, WR, WI, VL,
             LDVL, VR, LDVR, MM, M, WORK, IFAILL, IFAILR, INFO)

       CHARACTER*1 SIDE, EIGSRC, INITV
       INTEGER N, LDH, LDVL, LDVR, MM, M, INFO
       INTEGER IFAILL(*), IFAILR(*)
       LOGICAL SELECT(*)
       REAL H(LDH,*), WR(*), WI(*), VL(LDVL,*), VR(LDVR,*), WORK(*)

       SUBROUTINE SHSEIN_64(SIDE, EIGSRC, INITV, SELECT, N, H, LDH, WR, WI,
             VL, LDVL, VR, LDVR, MM, M, WORK, IFAILL, IFAILR, INFO)

       CHARACTER*1 SIDE, EIGSRC, INITV
       INTEGER*8 N, LDH, LDVL, LDVR, MM, M, INFO
       INTEGER*8 IFAILL(*), IFAILR(*)
       LOGICAL*8 SELECT(*)
       REAL H(LDH,*), WR(*), WI(*), VL(LDVL,*), VR(LDVR,*), WORK(*)




   F95 INTERFACE
       SUBROUTINE HSEIN(SIDE, EIGSRC, INITV, SELECT, N, H, LDH, WR, WI,
              VL, LDVL, VR, LDVR, MM, M, WORK, IFAILL, IFAILR, INFO)

       CHARACTER(LEN=1) :: SIDE, EIGSRC, INITV
       INTEGER :: N, LDH, LDVL, LDVR, MM, M, INFO
       INTEGER, DIMENSION(:) :: IFAILL, IFAILR
       LOGICAL, DIMENSION(:) :: SELECT
       REAL, DIMENSION(:) :: WR, WI, WORK
       REAL, DIMENSION(:,:) :: H, VL, VR

       SUBROUTINE HSEIN_64(SIDE, EIGSRC, INITV, SELECT, N, H, LDH, WR,
              WI, VL, LDVL, VR, LDVR, MM, M, WORK, IFAILL, IFAILR, INFO)

       CHARACTER(LEN=1) :: SIDE, EIGSRC, INITV
       INTEGER(8) :: N, LDH, LDVL, LDVR, MM, M, INFO
       INTEGER(8), DIMENSION(:) :: IFAILL, IFAILR
       LOGICAL(8), DIMENSION(:) :: SELECT
       REAL, DIMENSION(:) :: WR, WI, WORK
       REAL, DIMENSION(:,:) :: H, VL, VR




   C INTERFACE
       #include <sunperf.h>

       void shsein(char side, char eigsrc, char initv,  int  *select,  int  n,
                 float *h, int ldh, float *wr, float *wi, float *vl, int ldvl,
                 float *vr, int  ldvr,  int  mm,  int  *m,  int  *ifaill,  int
                 *ifailr, int *info);

       void  shsein_64(char  side, char eigsrc, char initv, long *select, long
                 n, float *h, long ldh, float *wr, float *wi, float *vl,  long
                 ldvl,  float  *vr, long ldvr, long mm, long *m, long *ifaill,
                 long *ifailr, long *info);



PURPOSE
       shsein uses inverse iteration  to  find  specified  right  and/or  left
       eigenvectors of a real upper Hessenberg matrix H.

       The right eigenvector x and the left eigenvector y of the matrix H cor-
       responding to an eigenvalue w are defined by:

                    H * x = w * x,     y**h * H = w * y**h

       where y**h denotes the conjugate transpose of the vector y.


ARGUMENTS
       SIDE (input)
                 = 'R': compute right eigenvectors only;
                 = 'L': compute left eigenvectors only;
                 = 'B': compute both right and left eigenvectors.


       EIGSRC (input)
                 Specifies the source of eigenvalues supplied in (WR,WI):
                 = 'Q': the eigenvalues were found using SHSEQR;  thus,  if  H
                 has  zero  subdiagonal  elements, and so is block-triangular,
                 then the j-th eigenvalue can be assumed to be  an  eigenvalue
                 of  the  block containing the j-th row/column.  This property
                 allows SHSEIN to perform inverse iteration on just one diago-
                 nal  block.  = 'N': no assumptions are made on the correspon-
                 dence between eigenvalues and diagonal blocks.  In this case,
                 SHSEIN  must always perform inverse iteration using the whole
                 matrix H.


       INITV (input)
                 = 'N': no initial vectors are supplied;
                 = 'U': user-supplied initial vectors are stored in the arrays
                 VL and/or VR.


       SELECT (input/output)
                 Specifies the eigenvectors to be computed. To select the real
                 eigenvector  corresponding  to  a  real   eigenvalue   WR(j),
                 SELECT(j) must be set to .TRUE.. To select the complex eigen-
                 vector corresponding to a complex  eigenvalue  (WR(j),WI(j)),
                 with complex conjugate (WR(j+1),WI(j+1)), either SELECT(j) or
                 SELECT(j+1) or both must be  set  to  .TRUE.;  then  on  exit
                 SELECT(j) is .TRUE. and SELECT(j+1) is .FALSE..


       N (input) The order of the matrix H.  N >= 0.


       H (input) The upper Hessenberg matrix H.


       LDH (input)
                 The leading dimension of the array H.  LDH >= max(1,N).


       WR (input/output)
                 On  entry, the real and imaginary parts of the eigenvalues of
                 H; a complex conjugate pair of eigenvalues must be stored  in
                 consecutive elements of WR and WI.  On exit, WR may have been
                 altered since close eigenvalues  are  perturbed  slightly  in
                 searching for independent eigenvectors.


       WI (input)
                 See the description of WR.


       VL (input/output)
                 On  entry, if INITV = 'U' and SIDE = 'L' or 'B', VL must con-
                 tain starting vectors for the inverse iteration for the  left
                 eigenvectors;  the  starting vector for each eigenvector must
                 be in the same column(s) in which  the  eigenvector  will  be
                 stored.  On exit, if SIDE = 'L' or 'B', the left eigenvectors
                 specified by SELECT will be stored consecutively in the  col-
                 umns of VL, in the same order as their eigenvalues. A complex
                 eigenvector corresponding to a complex eigenvalue  is  stored
                 in  two  consecutive columns, the first holding the real part
                 and the second the imaginary part.  If SIDE = 'R', VL is  not
                 referenced.


       LDVL (input)
                 The  leading  dimension of the array VL.  LDVL >= max(1,N) if
                 SIDE = 'L' or 'B'; LDVL >= 1 otherwise.


       VR (input/output)
                 On entry, if INITV = 'U' and SIDE = 'R' or 'B', VR must  con-
                 tain starting vectors for the inverse iteration for the right
                 eigenvectors; the starting vector for each  eigenvector  must
                 be  in  the  same  column(s) in which the eigenvector will be
                 stored.  On exit, if SIDE = 'R' or 'B', the  right  eigenvec-
                 tors  specified by SELECT will be stored consecutively in the
                 columns of VR, in the same order as their eigenvalues. A com-
                 plex  eigenvector  corresponding  to  a complex eigenvalue is
                 stored in two consecutive columns, the first holding the real
                 part and the second the imaginary part.  If SIDE = 'L', VR is
                 not referenced.


       LDVR (input)
                 The leading dimension of the array VR.  LDVR >=  max(1,N)  if
                 SIDE = 'R' or 'B'; LDVR >= 1 otherwise.


       MM (input)
                 The number of columns in the arrays VL and/or VR. MM >= M.


       M (output)
                 The  number of columns in the arrays VL and/or VR required to
                 store the eigenvectors; each selected real eigenvector  occu-
                 pies  one  column and each selected complex eigenvector occu-
                 pies two columns.


       WORK (workspace)
                 dimension((N+2)*N)

       IFAILL (output) INTEGER array, dimension (MM)
                 If SIDE = 'L' or 'B', IFAILL(i) = j > 0 if the left eigenvec-
                 tor in the i-th column of VL (corresponding to the eigenvalue
                 w(j)) failed to converge; IFAILL(i) = 0  if  the  eigenvector
                 converged  satisfactorily. If the i-th and (i+1)th columns of
                 VL hold a complex eigenvector, then IFAILL(i) and IFAILL(i+1)
                 are set to the same value.  If SIDE = 'R', IFAILL is not ref-
                 erenced.


       IFAILR (output) INTEGER array, dimension (MM)
                 If SIDE = 'R' or 'B', IFAILR(i) = j > 0 if the  right  eigen-
                 vector  in the i-th column of VR (corresponding to the eigen-
                 value w(j)) failed to converge; IFAILR(i) = 0 if  the  eigen-
                 vector converged satisfactorily. If the i-th and (i+1)th col-
                 umns of VR hold a complex  eigenvector,  then  IFAILR(i)  and
                 IFAILR(i+1) are set to the same value.  If SIDE = 'L', IFAILR
                 is not referenced.


       INFO (output)
                 = 0:  successful exit
                 < 0:  if INFO = -i, the i-th argument had an illegal value
                 > 0:  if INFO = i, i is  the  number  of  eigenvectors  which
                 failed  to  converge;  see  IFAILL  and  IFAILR  for  further
                 details.

FURTHER DETAILS
       Each eigenvector is normalized so that the element of largest magnitude
       has  magnitude 1; here the magnitude of a complex number (x,y) is taken
       to be |x|+|y|.




                                  7 Nov 2015                        shsein(3P)