!!****d* ABINIT/_linalg_
!!
!! NAME
!!  _linalg_
!!
!! FUNCTIONS
!!  This file is used by abilint to generate interfaces (interfaces_linalg.f90)
!!  interfaces for blas and lapack routines
!!  To generate this file: abilint --libraries . tmp
!!  and copy the useful interfaces
!!
!! COPYRIGHT
!! Copyright (C) 2007-2009 ABINIT group (TD)
!! This file is distributed under the terms of the
!! GNU General Public License, see ~abinit/COPYING
!! or http://www.gnu.org/copyleft/gpl.txt .
!!
!! WARNING
!!  These routines are used both by real and complex arrays
!!  and are commented (no interface):
!!  - ztrsm, zgemm, zgemv, zhemm, zherk, zher, zgerc
!!  - zcopy, zaxpy, zdscal, zscal, zdotc
!!  - zhpev, zgsev, zheev, zgetrf, zpotrf, zhpevx
!!  - zhpgv, zhegst
!!
!! SOURCE

subroutine caxpy(n,ca,cx,incx,cy,incy)
 implicit none
 integer :: incx
 integer :: incy
 integer :: n
 complex :: ca
 complex :: cx(*)
 complex :: cy(*)
end subroutine caxpy

subroutine  ccopy(n,cx,incx,cy,incy)
 implicit none
 integer :: incx
 integer :: incy
 integer :: n
 complex :: cx(*)
 complex :: cy(*)
end subroutine ccopy

complex function cdotc(n,cx,incx,cy,incy)
 implicit none
 integer :: incx
 integer :: incy
 integer :: n
 complex :: cx(*)
 complex :: cy(*)
end function cdotc

complex function cdotu(n,cx,incx,cy,incy)
 implicit none
 integer :: incx
 integer :: incy
 integer :: n
 complex :: cx(*)
 complex :: cy(*)
end function cdotu

SUBROUTINE CGBMV ( TRANS, M, N, KL, KU, ALPHA, A, LDA, X, INCX,&  
                   BETA, Y, INCY )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: KL
 integer :: KU
 integer :: LDA
 integer :: M
 integer :: N
 complex :: A( LDA, * )
 complex :: ALPHA
 complex :: BETA
 character*1 :: TRANS
 complex :: X( * )
 complex :: Y( * )
end subroutine CGBMV

SUBROUTINE CGEMM ( TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB,&  
                   BETA, C, LDC )
 implicit none
 integer :: K
 integer :: LDA
 integer :: LDB
 integer :: LDC
 integer :: M
 integer :: N
 complex :: A( LDA, * )
 complex :: ALPHA
 complex :: B( LDB, * )
 complex :: BETA
 complex :: C( LDC, * )
 character*1 :: TRANSA
 character*1 :: TRANSB
end subroutine CGEMM

SUBROUTINE CGEMV ( TRANS, M, N, ALPHA, A, LDA, X, INCX,&  
                   BETA, Y, INCY )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: LDA
 integer :: M
 integer :: N
 complex :: A( LDA, * )
 complex :: ALPHA
 complex :: BETA
 character*1 :: TRANS
 complex :: X( * )
 complex :: Y( * )
end subroutine CGEMV

SUBROUTINE CGERC ( M, N, ALPHA, X, INCX, Y, INCY, A, LDA )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: LDA
 integer :: M
 integer :: N
 complex :: A( LDA, * )
 complex :: ALPHA
 complex :: X( * )
 complex :: Y( * )
end subroutine CGERC

SUBROUTINE CGERU ( M, N, ALPHA, X, INCX, Y, INCY, A, LDA )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: LDA
 integer :: M
 integer :: N
 complex :: A( LDA, * )
 complex :: ALPHA
 complex :: X( * )
 complex :: Y( * )
end subroutine CGERU

SUBROUTINE CHBMV ( UPLO, N, K, ALPHA, A, LDA, X, INCX,&  
                   BETA, Y, INCY )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: K
 integer :: LDA
 integer :: N
 complex :: A( LDA, * )
 complex :: ALPHA
 complex :: BETA
 character*1 :: UPLO
 complex :: X( * )
 complex :: Y( * )
end subroutine CHBMV

SUBROUTINE CHEMM ( SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB,&  
                   BETA, C, LDC )
 implicit none
 integer :: LDA
 integer :: LDB
 integer :: LDC
 integer :: M
 integer :: N
 complex :: A( LDA, * )
 complex :: ALPHA
 complex :: B( LDB, * )
 complex :: BETA
 complex :: C( LDC, * )
 character*1 :: SIDE
 character*1 :: UPLO
end subroutine CHEMM

SUBROUTINE CHEMV ( UPLO, N, ALPHA, A, LDA, X, INCX,&  
                   BETA, Y, INCY )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: LDA
 integer :: N
 complex :: A( LDA, * )
 complex :: ALPHA
 complex :: BETA
 character*1 :: UPLO
 complex :: X( * )
 complex :: Y( * )
end subroutine CHEMV

SUBROUTINE CHER  ( UPLO, N, ALPHA, X, INCX, A, LDA )
 implicit none
 integer :: INCX
 integer :: LDA
 integer :: N
 complex :: A( LDA, * )
 real :: ALPHA
 character*1 :: UPLO
 complex :: X( * )
end subroutine CHER

SUBROUTINE CHER2 ( UPLO, N, ALPHA, X, INCX, Y, INCY, A, LDA )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: LDA
 integer :: N
 complex :: A( LDA, * )
 complex :: ALPHA
 character*1 :: UPLO
 complex :: X( * )
 complex :: Y( * )
end subroutine CHER2

SUBROUTINE CHER2K( UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB,&  
                   BETA, C, LDC )
 implicit none
 integer :: K
 integer :: LDA
 integer :: LDB
 integer :: LDC
 integer :: N
 complex :: A( LDA, * )
 complex :: ALPHA
 complex :: B( LDB, * )
 real :: BETA
 complex :: C( LDC, * )
 character*1 :: TRANS
 character*1 :: UPLO
end subroutine CHER2K

SUBROUTINE CHERK ( UPLO, TRANS, N, K, ALPHA, A, LDA,&  
                   BETA, C, LDC )
 implicit none
 integer :: K
 integer :: LDA
 integer :: LDC
 integer :: N
 complex :: A( LDA, * )
 real :: ALPHA
 real :: BETA
 complex :: C( LDC, * )
 character*1 :: TRANS
 character*1 :: UPLO
end subroutine CHERK

SUBROUTINE CHPMV ( UPLO, N, ALPHA, AP, X, INCX, BETA, Y, INCY )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: N
 complex :: ALPHA
 complex :: AP( * )
 complex :: BETA
 character*1 :: UPLO
 complex :: X( * )
 complex :: Y( * )
end subroutine CHPMV

SUBROUTINE CHPR  ( UPLO, N, ALPHA, X, INCX, AP )
 implicit none
 integer :: INCX
 integer :: N
 real :: ALPHA
 complex :: AP( * )
 character*1 :: UPLO
 complex :: X( * )
end subroutine CHPR

SUBROUTINE CHPR2 ( UPLO, N, ALPHA, X, INCX, Y, INCY, AP )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: N
 complex :: ALPHA
 complex :: AP( * )
 character*1 :: UPLO
 complex :: X( * )
 complex :: Y( * )
end subroutine CHPR2

subroutine crotg(ca,cb,c,s)
 implicit none
 real :: c
 complex :: ca
 complex :: cb
 complex :: s
end subroutine crotg

subroutine  cscal(n,ca,cx,incx)
 implicit none
 integer :: incx
 integer :: n
 complex :: ca
 complex :: cx(*)
end subroutine cscal

subroutine  csrot (n,cx,incx,cy,incy,c,s)
 implicit none
 integer :: incx
 integer :: incy
 integer :: n
 real :: c
 real :: s
 complex :: cx(1)
 complex :: cy(1)
end subroutine csrot

subroutine  csscal(n,sa,cx,incx)
 implicit none
 integer :: incx
 integer :: n
 real :: sa
 complex :: cx(*)
end subroutine csscal

subroutine  cswap (n,cx,incx,cy,incy)
 implicit none
 integer :: incx
 integer :: incy
 integer :: n
 complex :: cx(*)
 complex :: cy(*)
end subroutine cswap

SUBROUTINE CSYMM ( SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB,&  
                   BETA, C, LDC )
 implicit none
 integer :: LDA
 integer :: LDB
 integer :: LDC
 integer :: M
 integer :: N
 complex :: A( LDA, * )
 complex :: ALPHA
 complex :: B( LDB, * )
 complex :: BETA
 complex :: C( LDC, * )
 character*1 :: SIDE
 character*1 :: UPLO
end subroutine CSYMM

SUBROUTINE CSYR2K( UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB,&  
                   BETA, C, LDC )
 implicit none
 integer :: K
 integer :: LDA
 integer :: LDB
 integer :: LDC
 integer :: N
 complex :: A( LDA, * )
 complex :: ALPHA
 complex :: B( LDB, * )
 complex :: BETA
 complex :: C( LDC, * )
 character*1 :: TRANS
 character*1 :: UPLO
end subroutine CSYR2K

SUBROUTINE CSYRK ( UPLO, TRANS, N, K, ALPHA, A, LDA,&  
                   BETA, C, LDC )
 implicit none
 integer :: K
 integer :: LDA
 integer :: LDC
 integer :: N
 complex :: A( LDA, * )
 complex :: ALPHA
 complex :: BETA
 complex :: C( LDC, * )
 character*1 :: TRANS
 character*1 :: UPLO
end subroutine CSYRK

SUBROUTINE CTBMV ( UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX )
 implicit none
 integer :: INCX
 integer :: K
 integer :: LDA
 integer :: N
 complex :: A( LDA, * )
 character*1 :: DIAG
 character*1 :: TRANS
 character*1 :: UPLO
 complex :: X( * )
end subroutine CTBMV

SUBROUTINE CTBSV ( UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX )
 implicit none
 integer :: INCX
 integer :: K
 integer :: LDA
 integer :: N
 complex :: A( LDA, * )
 character*1 :: DIAG
 character*1 :: TRANS
 character*1 :: UPLO
 complex :: X( * )
end subroutine CTBSV

SUBROUTINE CTPMV ( UPLO, TRANS, DIAG, N, AP, X, INCX )
 implicit none
 integer :: INCX
 integer :: N
 complex :: AP( * )
 character*1 :: DIAG
 character*1 :: TRANS
 character*1 :: UPLO
 complex :: X( * )
end subroutine CTPMV

SUBROUTINE CTPSV ( UPLO, TRANS, DIAG, N, AP, X, INCX )
 implicit none
 integer :: INCX
 integer :: N
 complex :: AP( * )
 character*1 :: DIAG
 character*1 :: TRANS
 character*1 :: UPLO
 complex :: X( * )
end subroutine CTPSV

SUBROUTINE CTRMM ( SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA,&  
                   B, LDB )
 implicit none
 integer :: LDA
 integer :: LDB
 integer :: M
 integer :: N
 complex :: A( LDA, * )
 complex :: ALPHA
 complex :: B( LDB, * )
 character*1 :: DIAG
 character*1 :: SIDE
 character*1 :: TRANSA
 character*1 :: UPLO
end subroutine CTRMM

SUBROUTINE CTRMV ( UPLO, TRANS, DIAG, N, A, LDA, X, INCX )
 implicit none
 integer :: INCX
 integer :: LDA
 integer :: N
 complex :: A( LDA, * )
 character*1 :: DIAG
 character*1 :: TRANS
 character*1 :: UPLO
 complex :: X( * )
end subroutine CTRMV

SUBROUTINE CTRSM ( SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA,&  
                   B, LDB )
 implicit none
 integer :: LDA
 integer :: LDB
 integer :: M
 integer :: N
 complex :: A( LDA, * )
 complex :: ALPHA
 complex :: B( LDB, * )
 character*1 :: DIAG
 character*1 :: SIDE
 character*1 :: TRANSA
 character*1 :: UPLO
end subroutine CTRSM

SUBROUTINE CTRSV ( UPLO, TRANS, DIAG, N, A, LDA, X, INCX )
 implicit none
 integer :: INCX
 integer :: LDA
 integer :: N
 complex :: A( LDA, * )
 character*1 :: DIAG
 character*1 :: TRANS
 character*1 :: UPLO
 complex :: X( * )
end subroutine CTRSV

double precision function dasum(n,dx,incx)
 implicit none
 integer :: incx
 integer :: n
 double precision :: dx(*)
end function dasum

subroutine daxpy(n,da,dx,incx,dy,incy)
 implicit none
 integer :: incx
 integer :: incy
 integer :: n
 double precision :: da
 double precision :: dx(*)
 double precision :: dy(*)
end subroutine daxpy

double precision function dcabs1(z)
 implicit none
 double complex :: z
end function dcabs1

subroutine  dcopy(n,dx,incx,dy,incy)
 implicit none
 integer :: incx
 integer :: incy
 integer :: n
 double precision :: dx(*)
 double precision :: dy(*)
end subroutine dcopy

double precision function ddot(n,dx,incx,dy,incy)
 implicit none
 integer :: incx
 integer :: incy
 integer :: n
 double precision :: dx(*)
 double precision :: dy(*)
end function ddot

SUBROUTINE DGBMV ( TRANS, M, N, KL, KU, ALPHA, A, LDA, X, INCX,&  
                   BETA, Y, INCY )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: KL
 integer :: KU
 integer :: LDA
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: ALPHA
 double precision :: BETA
 character*1 :: TRANS
 double precision :: X( * )
 double precision :: Y( * )
end subroutine DGBMV

SUBROUTINE DGEMM ( TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB,&  
                   BETA, C, LDC )
 implicit none
 integer :: K
 integer :: LDA
 integer :: LDB
 integer :: LDC
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: ALPHA
 double precision :: B( LDB, * )
 double precision :: BETA
 double precision :: C( LDC, * )
 character*1 :: TRANSA
 character*1 :: TRANSB
end subroutine DGEMM

SUBROUTINE DGEMV ( TRANS, M, N, ALPHA, A, LDA, X, INCX,&  
                   BETA, Y, INCY )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: LDA
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: ALPHA
 double precision :: BETA
 character*1 :: TRANS
 double precision :: X( * )
 double precision :: Y( * )
end subroutine DGEMV

SUBROUTINE DGER  ( M, N, ALPHA, X, INCX, Y, INCY, A, LDA )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: LDA
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: ALPHA
 double precision :: X( * )
 double precision :: Y( * )
end subroutine DGER

DOUBLE PRECISION FUNCTION DNRM2 ( N, X, INCX )
 implicit none
 integer :: INCX
 integer :: N
 double precision :: X( * )
end function DNRM2

subroutine  drot (n,dx,incx,dy,incy,c,s)
 implicit none
 integer :: incx
 integer :: incy
 integer :: n
 double precision :: c
 double precision :: s
 double precision :: dx(*)
 double precision :: dy(*)
end subroutine drot

subroutine drotg(da,db,c,s)
 implicit none
 double precision :: c
 double precision :: da
 double precision :: db
 double precision :: s
end subroutine drotg

SUBROUTINE DROTM (N,DX,INCX,DY,INCY,DPARAM)
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: N
 double precision :: DPARAM(5)
 double precision :: DX(1)
 double precision :: DY(1)
end subroutine DROTM

SUBROUTINE DROTMG (DD1,DD2,DX1,DY1,DPARAM)
 implicit none
 double precision :: DD1
 double precision :: DD2
 double precision :: DPARAM(5)
 double precision :: DX1
 double precision :: DY1
end subroutine DROTMG

SUBROUTINE DSBMV ( UPLO, N, K, ALPHA, A, LDA, X, INCX,&  
                   BETA, Y, INCY )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: K
 integer :: LDA
 integer :: N
 double precision :: A( LDA, * )
 double precision :: ALPHA
 double precision :: BETA
 character*1 :: UPLO
 double precision :: X( * )
 double precision :: Y( * )
end subroutine DSBMV

subroutine  dscal(n,da,dx,incx)
 implicit none
 integer :: incx
 integer :: n
 double precision :: da
 double precision :: dx(*)
end subroutine dscal

DOUBLE PRECISION FUNCTION DSDOT (N, SX, INCX, SY, INCY)
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: N
 real :: SX(*)
 real :: SY(*)
end function DSDOT

subroutine  dswap (n,dx,incx,dy,incy)
 implicit none
 integer :: incx
 integer :: incy
 integer :: n
 double precision :: dx(*)
 double precision :: dy(*)
end subroutine dswap

SUBROUTINE DSYMM ( SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB,&  
                   BETA, C, LDC )
 implicit none
 integer :: LDA
 integer :: LDB
 integer :: LDC
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: ALPHA
 double precision :: B( LDB, * )
 double precision :: BETA
 double precision :: C( LDC, * )
 character*1 :: SIDE
 character*1 :: UPLO
end subroutine DSYMM

SUBROUTINE DSYMV ( UPLO, N, ALPHA, A, LDA, X, INCX,&  
                   BETA, Y, INCY )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: LDA
 integer :: N
 double precision :: A( LDA, * )
 double precision :: ALPHA
 double precision :: BETA
 character*1 :: UPLO
 double precision :: X( * )
 double precision :: Y( * )
end subroutine DSYMV

SUBROUTINE DTRMM ( SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA,&  
                   B, LDB )
 implicit none
 integer :: LDA
 integer :: LDB
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: ALPHA
 double precision :: B( LDB, * )
 character*1 :: DIAG
 character*1 :: SIDE
 character*1 :: TRANSA
 character*1 :: UPLO
end subroutine DTRMM

SUBROUTINE DTRMV ( UPLO, TRANS, DIAG, N, A, LDA, X, INCX )
 implicit none
 integer :: INCX
 integer :: LDA
 integer :: N
 double precision :: A( LDA, * )
 character*1 :: DIAG
 character*1 :: TRANS
 character*1 :: UPLO
 double precision :: X( * )
end subroutine DTRMV

SUBROUTINE DTRSM ( SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA,&  
                   B, LDB )
 implicit none
 integer :: LDA
 integer :: LDB
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: ALPHA
 double precision :: B( LDB, * )
 character*1 :: DIAG
 character*1 :: SIDE
 character*1 :: TRANSA
 character*1 :: UPLO
end subroutine DTRSM

SUBROUTINE DTRSV ( UPLO, TRANS, DIAG, N, A, LDA, X, INCX )
 implicit none
 integer :: INCX
 integer :: LDA
 integer :: N
 double precision :: A( LDA, * )
 character*1 :: DIAG
 character*1 :: TRANS
 character*1 :: UPLO
 double precision :: X( * )
end subroutine DTRSV

double precision function dzasum(n,zx,incx)
 implicit none
 integer :: incx
 integer :: n
 double complex :: zx(*)
end function dzasum

DOUBLE PRECISION FUNCTION DZNRM2( N, X, INCX )
 implicit none
 integer :: INCX
 integer :: N
 complex*16 :: X( * )
end function DZNRM2

integer function icamax(n,cx,incx)
 implicit none
 integer :: incx
 integer :: n
 complex :: cx(*)
end function icamax

integer function idamax(n,dx,incx)
 implicit none
 integer :: incx
 integer :: n
 double precision :: dx(*)
end function idamax

integer function isamax(n,sx,incx)
 implicit none
 integer :: incx
 integer :: n
 real :: sx(*)
end function isamax

integer function izamax(n,zx,incx)
 implicit none
 integer :: incx
 integer :: n
 double complex :: zx(*)
end function izamax

real function sasum(n,sx,incx)
 implicit none
 integer :: incx
 integer :: n
 real :: sx(*)
end function sasum

subroutine saxpy(n,sa,sx,incx,sy,incy)
 implicit none
 integer :: incx
 integer :: incy
 integer :: n
 real :: sa
 real :: sx(*)
 real :: sy(*)
end subroutine saxpy

real function scasum(n,cx,incx)
 implicit none
 integer :: incx
 integer :: n
 complex :: cx(*)
end function scasum

REAL             FUNCTION SCNRM2( N, X, INCX )
 implicit none
 integer :: INCX
 integer :: N
 complex :: X( * )
end function SCNRM2

subroutine scopy(n,sx,incx,sy,incy)
 implicit none
 integer :: incx
 integer :: incy
 integer :: n
 real :: sx(*)
 real :: sy(*)
end subroutine scopy

real function sdot(n,sx,incx,sy,incy)
 implicit none
 integer :: incx
 integer :: incy
 integer :: n
 real :: sx(*)
 real :: sy(*)
end function sdot

REAL FUNCTION SDSDOT (N, SB, SX, INCX, SY, INCY)
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: N
 real :: SB
 real :: SX(*)
 real :: SY(*)
end function SDSDOT

SUBROUTINE SGBMV ( TRANS, M, N, KL, KU, ALPHA, A, LDA, X, INCX,&  
                   BETA, Y, INCY )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: KL
 integer :: KU
 integer :: LDA
 integer :: M
 integer :: N
 real :: A( LDA, * )
 real :: ALPHA
 real :: BETA
 character*1 :: TRANS
 real :: X( * )
 real :: Y( * )
end subroutine SGBMV

SUBROUTINE SGEMM ( TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB,&  
                   BETA, C, LDC )
 implicit none
 integer :: K
 integer :: LDA
 integer :: LDB
 integer :: LDC
 integer :: M
 integer :: N
 real :: A( LDA, * )
 real :: ALPHA
 real :: B( LDB, * )
 real :: BETA
 real :: C( LDC, * )
 character*1 :: TRANSA
 character*1 :: TRANSB
end subroutine SGEMM

SUBROUTINE SGEMV ( TRANS, M, N, ALPHA, A, LDA, X, INCX,&  
                   BETA, Y, INCY )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: LDA
 integer :: M
 integer :: N
 real :: A( LDA, * )
 real :: ALPHA
 real :: BETA
 character*1 :: TRANS
 real :: X( * )
 real :: Y( * )
end subroutine SGEMV

SUBROUTINE SGER  ( M, N, ALPHA, X, INCX, Y, INCY, A, LDA )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: LDA
 integer :: M
 integer :: N
 real :: A( LDA, * )
 real :: ALPHA
 real :: X( * )
 real :: Y( * )
end subroutine SGER

REAL             FUNCTION SNRM2 ( N, X, INCX )
 implicit none
 integer :: INCX
 integer :: N
 real :: X( * )
end function SNRM2

subroutine srot (n,sx,incx,sy,incy,c,s)
 implicit none
 integer :: incx
 integer :: incy
 integer :: n
 real :: c
 real :: s
 real :: sx(*)
 real :: sy(*)
end subroutine srot

subroutine srotg(sa,sb,c,s)
 implicit none
 real :: c
 real :: s
 real :: sa
 real :: sb
end subroutine srotg

SUBROUTINE SROTM (N,SX,INCX,SY,INCY,SPARAM)
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: N
 real :: SPARAM(5)
 real :: SX(1)
 real :: SY(1)
end subroutine SROTM

SUBROUTINE SROTMG (SD1,SD2,SX1,SY1,SPARAM)
 implicit none
 real :: SD1
 real :: SD2
 real :: SPARAM(5)
 real :: SX1
 real :: SY1
end subroutine SROTMG

SUBROUTINE SSBMV ( UPLO, N, K, ALPHA, A, LDA, X, INCX,&  
                   BETA, Y, INCY )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: K
 integer :: LDA
 integer :: N
 real :: A( LDA, * )
 real :: ALPHA
 real :: BETA
 character*1 :: UPLO
 real :: X( * )
 real :: Y( * )
end subroutine SSBMV

subroutine sscal(n,sa,sx,incx)
 implicit none
 integer :: incx
 integer :: n
 real :: sa
 real :: sx(*)
end subroutine sscal

SUBROUTINE SSPMV ( UPLO, N, ALPHA, AP, X, INCX, BETA, Y, INCY )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: N
 real :: ALPHA
 real :: AP( * )
 real :: BETA
 character*1 :: UPLO
 real :: X( * )
 real :: Y( * )
end subroutine SSPMV

SUBROUTINE SSPR  ( UPLO, N, ALPHA, X, INCX, AP )
 implicit none
 integer :: INCX
 integer :: N
 real :: ALPHA
 real :: AP( * )
 character*1 :: UPLO
 real :: X( * )
end subroutine SSPR

SUBROUTINE SSPR2 ( UPLO, N, ALPHA, X, INCX, Y, INCY, AP )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: N
 real :: ALPHA
 real :: AP( * )
 character*1 :: UPLO
 real :: X( * )
 real :: Y( * )
end subroutine SSPR2

subroutine sswap (n,sx,incx,sy,incy)
 implicit none
 integer :: incx
 integer :: incy
 integer :: n
 real :: sx(*)
 real :: sy(*)
end subroutine sswap

SUBROUTINE SSYMM ( SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB,&  
                   BETA, C, LDC )
 implicit none
 integer :: LDA
 integer :: LDB
 integer :: LDC
 integer :: M
 integer :: N
 real :: A( LDA, * )
 real :: ALPHA
 real :: B( LDB, * )
 real :: BETA
 real :: C( LDC, * )
 character*1 :: SIDE
 character*1 :: UPLO
end subroutine SSYMM

SUBROUTINE SSYMV ( UPLO, N, ALPHA, A, LDA, X, INCX,&  
                   BETA, Y, INCY )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: LDA
 integer :: N
 real :: A( LDA, * )
 real :: ALPHA
 real :: BETA
 character*1 :: UPLO
 real :: X( * )
 real :: Y( * )
end subroutine SSYMV

SUBROUTINE SSYR  ( UPLO, N, ALPHA, X, INCX, A, LDA )
 implicit none
 integer :: INCX
 integer :: LDA
 integer :: N
 real :: A( LDA, * )
 real :: ALPHA
 character*1 :: UPLO
 real :: X( * )
end subroutine SSYR

SUBROUTINE SSYR2 ( UPLO, N, ALPHA, X, INCX, Y, INCY, A, LDA )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: LDA
 integer :: N
 real :: A( LDA, * )
 real :: ALPHA
 character*1 :: UPLO
 real :: X( * )
 real :: Y( * )
end subroutine SSYR2

SUBROUTINE SSYR2K( UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB,&  
                   BETA, C, LDC )
 implicit none
 integer :: K
 integer :: LDA
 integer :: LDB
 integer :: LDC
 integer :: N
 real :: A( LDA, * )
 real :: ALPHA
 real :: B( LDB, * )
 real :: BETA
 real :: C( LDC, * )
 character*1 :: TRANS
 character*1 :: UPLO
end subroutine SSYR2K

SUBROUTINE SSYRK ( UPLO, TRANS, N, K, ALPHA, A, LDA,&  
                   BETA, C, LDC )
 implicit none
 integer :: K
 integer :: LDA
 integer :: LDC
 integer :: N
 real :: A( LDA, * )
 real :: ALPHA
 real :: BETA
 real :: C( LDC, * )
 character*1 :: TRANS
 character*1 :: UPLO
end subroutine SSYRK

SUBROUTINE STBMV ( UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX )
 implicit none
 integer :: INCX
 integer :: K
 integer :: LDA
 integer :: N
 real :: A( LDA, * )
 character*1 :: DIAG
 character*1 :: TRANS
 character*1 :: UPLO
 real :: X( * )
end subroutine STBMV

SUBROUTINE STBSV ( UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX )
 implicit none
 integer :: INCX
 integer :: K
 integer :: LDA
 integer :: N
 real :: A( LDA, * )
 character*1 :: DIAG
 character*1 :: TRANS
 character*1 :: UPLO
 real :: X( * )
end subroutine STBSV

SUBROUTINE STPMV ( UPLO, TRANS, DIAG, N, AP, X, INCX )
 implicit none
 integer :: INCX
 integer :: N
 real :: AP( * )
 character*1 :: DIAG
 character*1 :: TRANS
 character*1 :: UPLO
 real :: X( * )
end subroutine STPMV

SUBROUTINE STPSV ( UPLO, TRANS, DIAG, N, AP, X, INCX )
 implicit none
 integer :: INCX
 integer :: N
 real :: AP( * )
 character*1 :: DIAG
 character*1 :: TRANS
 character*1 :: UPLO
 real :: X( * )
end subroutine STPSV

SUBROUTINE STRMM ( SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA,&  
                   B, LDB )
 implicit none
 integer :: LDA
 integer :: LDB
 integer :: M
 integer :: N
 real :: A( LDA, * )
 real :: ALPHA
 real :: B( LDB, * )
 character*1 :: DIAG
 character*1 :: SIDE
 character*1 :: TRANSA
 character*1 :: UPLO
end subroutine STRMM

SUBROUTINE STRMV ( UPLO, TRANS, DIAG, N, A, LDA, X, INCX )
 implicit none
 integer :: INCX
 integer :: LDA
 integer :: N
 real :: A( LDA, * )
 character*1 :: DIAG
 character*1 :: TRANS
 character*1 :: UPLO
 real :: X( * )
end subroutine STRMV

SUBROUTINE STRSM ( SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA,&  
                   B, LDB )
 implicit none
 integer :: LDA
 integer :: LDB
 integer :: M
 integer :: N
 real :: A( LDA, * )
 real :: ALPHA
 real :: B( LDB, * )
 character*1 :: DIAG
 character*1 :: SIDE
 character*1 :: TRANSA
 character*1 :: UPLO
end subroutine STRSM

SUBROUTINE STRSV ( UPLO, TRANS, DIAG, N, A, LDA, X, INCX )
 implicit none
 integer :: INCX
 integer :: LDA
 integer :: N
 real :: A( LDA, * )
 character*1 :: DIAG
 character*1 :: TRANS
 character*1 :: UPLO
 real :: X( * )
end subroutine STRSV

!subroutine zaxpy(n,za,zx,incx,zy,incy)
! implicit none
! integer :: incx
! integer :: incy
! integer :: n
! double complex :: za
! double complex :: zx(*)
! double complex :: zy(*)
!end subroutine zaxpy

!subroutine  zcopy(n,zx,incx,zy,incy)
! implicit none
! integer :: incx
! integer :: incy
! integer :: n
! double complex :: zx(*)
! double complex :: zy(*)
!end subroutine zcopy

!double complex function zdotc(n,zx,incx,zy,incy)
! implicit none
! integer :: incx
! integer :: incy
! integer :: n
! double complex :: zx(*)
! double complex :: zy(*)
!end function zdotc

double complex function zdotu(n,zx,incx,zy,incy)
 implicit none
 integer :: incx
 integer :: incy
 integer :: n
 double complex :: zx(*)
 double complex :: zy(*)
end function zdotu

SUBROUTINE ZDROT( N, CX, INCX, CY, INCY, C, S )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: N
 double precision :: C
 complex*16 :: CX( * )
 complex*16 :: CY( * )
 double precision :: S
end subroutine ZDROT

!subroutine  zdscal(n,da,zx,incx)
! implicit none
! integer :: incx
! integer :: n
! double precision :: da
! double complex :: zx(*)
!end subroutine zdscal

SUBROUTINE ZGBMV ( TRANS, M, N, KL, KU, ALPHA, A, LDA, X, INCX,&  
                   BETA, Y, INCY )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: KL
 integer :: KU
 integer :: LDA
 integer :: M
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: ALPHA
 complex*16 :: BETA
 character*1 :: TRANS
 complex*16 :: X( * )
 complex*16 :: Y( * )
end subroutine ZGBMV

!SUBROUTINE ZGEMM ( TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC )
! implicit none
! integer :: K
! integer :: LDA
! integer :: LDB
! integer :: LDC
! integer :: M
! integer :: N
! complex*16 :: A( LDA, * )
! complex*16 :: ALPHA
! complex*16 :: B( LDB, * )
! complex*16 :: BETA
! complex*16 :: C( LDC, * )
! character*1 :: TRANSA
! character*1 :: TRANSB
!end subroutine ZGEMM

!SUBROUTINE ZGEMV ( TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY )
! implicit none
! integer :: INCX
! integer :: INCY
! integer :: LDA
! integer :: M
! integer :: N
! complex*16 :: A( LDA, * )
! complex*16 :: ALPHA
! complex*16 :: BETA
! character*1 :: TRANS
! complex*16 :: X( * )
! complex*16 :: Y( * )
!end subroutine ZGEMV

!SUBROUTINE ZGERC ( M, N, ALPHA, X, INCX, Y, INCY, A, LDA )
! implicit none
! integer :: INCX
! integer :: INCY
! integer :: LDA
! integer :: M
! integer :: N
! complex*16 :: A( LDA, * )
! complex*16 :: ALPHA
! complex*16 :: X( * )
! complex*16 :: Y( * )
!end subroutine ZGERC

SUBROUTINE ZGERU ( M, N, ALPHA, X, INCX, Y, INCY, A, LDA )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: LDA
 integer :: M
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: ALPHA
 complex*16 :: X( * )
 complex*16 :: Y( * )
end subroutine ZGERU

SUBROUTINE ZHBMV ( UPLO, N, K, ALPHA, A, LDA, X, INCX,&  
                   BETA, Y, INCY )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: K
 integer :: LDA
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: ALPHA
 complex*16 :: BETA
 character*1 :: UPLO
 complex*16 :: X( * )
 complex*16 :: Y( * )
end subroutine ZHBMV

!SUBROUTINE ZHEMM ( SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB, BETA, C, LDC )
! implicit none
! integer :: LDA
! integer :: LDB
! integer :: LDC
! integer :: M
! integer :: N
! complex*16 :: A( LDA, * )
! complex*16 :: ALPHA
! complex*16 :: B( LDB, * )
! complex*16 :: BETA
! complex*16 :: C( LDC, * )
! character*1 :: SIDE
! character*1 :: UPLO
!end subroutine ZHEMM

SUBROUTINE ZHEMV ( UPLO, N, ALPHA, A, LDA, X, INCX,&  
                   BETA, Y, INCY )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: LDA
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: ALPHA
 complex*16 :: BETA
 character*1 :: UPLO
 complex*16 :: X( * )
 complex*16 :: Y( * )
end subroutine ZHEMV

!SUBROUTINE ZHER  ( UPLO, N, ALPHA, X, INCX, A, LDA )
! implicit none
! integer :: INCX
! integer :: LDA
! integer :: N
! complex*16 :: A( LDA, * )
! double precision :: ALPHA
! character*1 :: UPLO
! complex*16 :: X( * )
!end subroutine ZHER

SUBROUTINE ZHER2 ( UPLO, N, ALPHA, X, INCX, Y, INCY, A, LDA )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: LDA
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: ALPHA
 character*1 :: UPLO
 complex*16 :: X( * )
 complex*16 :: Y( * )
end subroutine ZHER2

SUBROUTINE ZHER2K( UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB, BETA,&  
                   C, LDC )
 implicit none
 integer :: K
 integer :: LDA
 integer :: LDB
 integer :: LDC
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: ALPHA
 complex*16 :: B( LDB, * )
 double precision :: BETA
 complex*16 :: C( LDC, * )
 character :: TRANS
 character :: UPLO
end subroutine ZHER2K

!SUBROUTINE ZHERK( UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, C, LDC )
! implicit none
! integer :: K
! integer :: LDA
! integer :: LDC
! integer :: N
! complex*16 :: A( LDA, * )
! double precision :: ALPHA
! double precision :: BETA
! complex*16 :: C( LDC, * )
! character :: TRANS
! character :: UPLO
!end subroutine ZHERK

SUBROUTINE ZHPMV ( UPLO, N, ALPHA, AP, X, INCX, BETA, Y, INCY )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: N
 complex*16 :: ALPHA
 complex*16 :: AP( * )
 complex*16 :: BETA
 character*1 :: UPLO
 complex*16 :: X( * )
 complex*16 :: Y( * )
end subroutine ZHPMV

SUBROUTINE ZHPR  ( UPLO, N, ALPHA, X, INCX, AP )
 implicit none
 integer :: INCX
 integer :: N
 double precision :: ALPHA
 complex*16 :: AP( * )
 character*1 :: UPLO
 complex*16 :: X( * )
end subroutine ZHPR

SUBROUTINE ZHPR2 ( UPLO, N, ALPHA, X, INCX, Y, INCY, AP )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: N
 complex*16 :: ALPHA
 complex*16 :: AP( * )
 character*1 :: UPLO
 complex*16 :: X( * )
 complex*16 :: Y( * )
end subroutine ZHPR2

subroutine zrotg(ca,cb,c,s)
 implicit none
 double precision :: c
 double complex :: ca
 double complex :: cb
 double complex :: s
end subroutine zrotg

!subroutine  zscal(n,za,zx,incx)
! implicit none
! integer :: incx
! integer :: n
! double complex :: za
! double complex :: zx(*)
!end subroutine zscal

subroutine  zswap (n,zx,incx,zy,incy)
 implicit none
 integer :: incx
 integer :: incy
 integer :: n
 double complex :: zx(*)
 double complex :: zy(*)
end subroutine zswap

SUBROUTINE ZSYMM ( SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB,&  
                   BETA, C, LDC )
 implicit none
 integer :: LDA
 integer :: LDB
 integer :: LDC
 integer :: M
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: ALPHA
 complex*16 :: B( LDB, * )
 complex*16 :: BETA
 complex*16 :: C( LDC, * )
 character*1 :: SIDE
 character*1 :: UPLO
end subroutine ZSYMM

SUBROUTINE ZSYR2K( UPLO, TRANS, N, K, ALPHA, A, LDA, B, LDB,&  
                   BETA, C, LDC )
 implicit none
 integer :: K
 integer :: LDA
 integer :: LDB
 integer :: LDC
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: ALPHA
 complex*16 :: B( LDB, * )
 complex*16 :: BETA
 complex*16 :: C( LDC, * )
 character*1 :: TRANS
 character*1 :: UPLO
end subroutine ZSYR2K

SUBROUTINE ZSYRK ( UPLO, TRANS, N, K, ALPHA, A, LDA,&  
                   BETA, C, LDC )
 implicit none
 integer :: K
 integer :: LDA
 integer :: LDC
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: ALPHA
 complex*16 :: BETA
 complex*16 :: C( LDC, * )
 character*1 :: TRANS
 character*1 :: UPLO
end subroutine ZSYRK

SUBROUTINE ZTBMV ( UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX )
 implicit none
 integer :: INCX
 integer :: K
 integer :: LDA
 integer :: N
 complex*16 :: A( LDA, * )
 character*1 :: DIAG
 character*1 :: TRANS
 character*1 :: UPLO
 complex*16 :: X( * )
end subroutine ZTBMV

SUBROUTINE ZTBSV ( UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX )
 implicit none
 integer :: INCX
 integer :: K
 integer :: LDA
 integer :: N
 complex*16 :: A( LDA, * )
 character*1 :: DIAG
 character*1 :: TRANS
 character*1 :: UPLO
 complex*16 :: X( * )
end subroutine ZTBSV

SUBROUTINE ZTPMV ( UPLO, TRANS, DIAG, N, AP, X, INCX )
 implicit none
 integer :: INCX
 integer :: N
 complex*16 :: AP( * )
 character*1 :: DIAG
 character*1 :: TRANS
 character*1 :: UPLO
 complex*16 :: X( * )
end subroutine ZTPMV

SUBROUTINE ZTPSV ( UPLO, TRANS, DIAG, N, AP, X, INCX )
 implicit none
 integer :: INCX
 integer :: N
 complex*16 :: AP( * )
 character*1 :: DIAG
 character*1 :: TRANS
 character*1 :: UPLO
 complex*16 :: X( * )
end subroutine ZTPSV

SUBROUTINE ZTRMM ( SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA,&  
                   B, LDB )
 implicit none
 integer :: LDA
 integer :: LDB
 integer :: M
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: ALPHA
 complex*16 :: B( LDB, * )
 character*1 :: DIAG
 character*1 :: SIDE
 character*1 :: TRANSA
 character*1 :: UPLO
end subroutine ZTRMM

SUBROUTINE ZTRMV ( UPLO, TRANS, DIAG, N, A, LDA, X, INCX )
 implicit none
 integer :: INCX
 integer :: LDA
 integer :: N
 complex*16 :: A( LDA, * )
 character*1 :: DIAG
 character*1 :: TRANS
 character*1 :: UPLO
 complex*16 :: X( * )
end subroutine ZTRMV

!SUBROUTINE ZTRSM ( SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB )
! implicit none
! integer :: LDA
! integer :: LDB
! integer :: M
! integer :: N
! complex*16 :: A( LDA, * )
! complex*16 :: ALPHA
! complex*16 :: B( LDB, * )
! character*1 :: DIAG
! character*1 :: SIDE
! character*1 :: TRANSA
! character*1 :: UPLO
!end subroutine ZTRSM

SUBROUTINE ZTRSV ( UPLO, TRANS, DIAG, N, A, LDA, X, INCX )
 implicit none
 integer :: INCX
 integer :: LDA
 integer :: N
 complex*16 :: A( LDA, * )
 character*1 :: DIAG
 character*1 :: TRANS
 character*1 :: UPLO
 complex*16 :: X( * )
end subroutine ZTRSV

SUBROUTINE CGETF2( M, N, A, LDA, IPIV, INFO )
 implicit none
 integer :: INFO
 integer :: IPIV( * )
 integer :: LDA
 integer :: M
 integer :: N
 complex :: A( LDA, * )
end subroutine CGETF2

SUBROUTINE CGETRF( M, N, A, LDA, IPIV, INFO )
 implicit none
 integer :: INFO
 integer :: IPIV( * )
 integer :: LDA
 integer :: M
 integer :: N
 complex :: A( LDA, * )
end subroutine CGETRF

SUBROUTINE CGETRI( N, A, LDA, IPIV, WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: IPIV( * )
 integer :: LDA
 integer :: LWORK
 integer :: N
 complex :: A( LDA, * )
 complex :: WORK( * )
end subroutine CGETRI

SUBROUTINE CHPEV( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, RWORK,&  
                  INFO )
 implicit none
 integer :: INFO
 integer :: LDZ
 integer :: N
 complex :: AP( * )
 character :: JOBZ
 real :: RWORK( * )
 character :: UPLO
 real :: W( * )
 complex :: WORK( * )
 complex :: Z( LDZ, * )
end subroutine CHPEV

SUBROUTINE CHPTRD( UPLO, N, AP, D, E, TAU, INFO )
 implicit none
 integer :: INFO
 integer :: N
 complex :: AP( * )
 real :: D( * )
 real :: E( * )
 complex :: TAU( * )
 character :: UPLO
end subroutine CHPTRD

COMPLEX FUNCTION CLADIV( X, Y )
 implicit none
 complex :: X
 complex :: Y
end function CLADIV

REAL             FUNCTION CLANHP( NORM, UPLO, N, AP, WORK )
 implicit none
 integer :: N
 complex :: AP( * )
 character :: NORM
 character :: UPLO
 real :: WORK( * )
end function CLANHP

SUBROUTINE CLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
 implicit none
 integer :: INCV
 integer :: LDC
 integer :: M
 integer :: N
 complex :: C( LDC, * )
 character :: SIDE
 complex :: TAU
 complex :: V( * )
 complex :: WORK( * )
end subroutine CLARF

SUBROUTINE CLARFG( N, ALPHA, X, INCX, TAU )
 implicit none
 integer :: INCX
 integer :: N
 complex :: ALPHA
 complex :: TAU
 complex :: X( * )
end subroutine CLARFG

SUBROUTINE CLASR( SIDE, PIVOT, DIRECT, M, N, C, S, A, LDA )
 implicit none
 integer :: LDA
 integer :: M
 integer :: N
 complex :: A( LDA, * )
 real :: C( * )
 character :: DIRECT
 character :: PIVOT
 real :: S( * )
 character :: SIDE
end subroutine CLASR

SUBROUTINE CLASSQ( N, X, INCX, SCALE, SUMSQ )
 implicit none
 integer :: INCX
 integer :: N
 real :: SCALE
 real :: SUMSQ
 complex :: X( * )
end subroutine CLASSQ

SUBROUTINE CLASWP( N, A, LDA, K1, K2, IPIV, INCX )
 implicit none
 integer :: INCX
 integer :: IPIV( * )
 integer :: K1
 integer :: K2
 integer :: LDA
 integer :: N
 complex :: A( LDA, * )
end subroutine CLASWP

SUBROUTINE CLAZRO( M, N, ALPHA, BETA, A, LDA )
 implicit none
 integer :: LDA
 integer :: M
 integer :: N
 complex :: A( LDA, * )
 complex :: ALPHA
 complex :: BETA
end subroutine CLAZRO

SUBROUTINE CSTEQR( COMPZ, N, D, E, Z, LDZ, WORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDZ
 integer :: N
 character :: COMPZ
 real :: D( * )
 real :: E( * )
 real :: WORK( * )
 complex :: Z( LDZ, * )
end subroutine CSTEQR

SUBROUTINE CTRTRI( UPLO, DIAG, N, A, LDA, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: N
 complex :: A( LDA, * )
 character :: DIAG
 character :: UPLO
end subroutine CTRTRI

SUBROUTINE CUNG2L( M, N, K, A, LDA, TAU, WORK, INFO )
 implicit none
 integer :: INFO
 integer :: K
 integer :: LDA
 integer :: M
 integer :: N
 complex :: A( LDA, * )
 complex :: TAU( * )
 complex :: WORK( * )
end subroutine CUNG2L

SUBROUTINE CUNG2R( M, N, K, A, LDA, TAU, WORK, INFO )
 implicit none
 integer :: INFO
 integer :: K
 integer :: LDA
 integer :: M
 integer :: N
 complex :: A( LDA, * )
 complex :: TAU( * )
 complex :: WORK( * )
end subroutine CUNG2R

SUBROUTINE CUPGTR( UPLO, N, AP, TAU, Q, LDQ, WORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDQ
 integer :: N
 complex :: AP( * )
 complex :: Q( LDQ, * )
 complex :: TAU( * )
 character :: UPLO
 complex :: WORK( * )
end subroutine CUPGTR

SUBROUTINE DBDSQR( UPLO, N, NCVT, NRU, NCC, D, E, VT, LDVT, U,&  
                   LDU, C, LDC, WORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDC
 integer :: LDU
 integer :: LDVT
 integer :: N
 integer :: NCC
 integer :: NCVT
 integer :: NRU
 double precision :: C( LDC, * )
 double precision :: D( * )
 double precision :: E( * )
 double precision :: U( LDU, * )
 character :: UPLO
 double precision :: VT( LDVT, * )
 double precision :: WORK( * )
end subroutine DBDSQR

SUBROUTINE DGEBD2( M, N, A, LDA, D, E, TAUQ, TAUP, WORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: D( * )
 double precision :: E( * )
 double precision :: TAUP( * )
 double precision :: TAUQ( * )
 double precision :: WORK( * )
end subroutine DGEBD2

SUBROUTINE DGEBRD( M, N, A, LDA, D, E, TAUQ, TAUP, WORK, LWORK,&  
                   INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: LWORK
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: D( * )
 double precision :: E( * )
 double precision :: TAUP( * )
 double precision :: TAUQ( * )
 double precision :: WORK( * )
end subroutine DGEBRD

SUBROUTINE DGELQ2( M, N, A, LDA, TAU, WORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: TAU( * )
 double precision :: WORK( * )
end subroutine DGELQ2

SUBROUTINE DGELQF( M, N, A, LDA, TAU, WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: LWORK
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: TAU( * )
 double precision :: WORK( * )
end subroutine DGELQF

SUBROUTINE DGELSS( M, N, NRHS, A, LDA, B, LDB, S, RCOND, RANK,&  
                   WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: LDB
 integer :: LWORK
 integer :: M
 integer :: N
 integer :: NRHS
 integer :: RANK
 double precision :: A( LDA, * )
 double precision :: B( LDB, * )
 double precision :: RCOND
 double precision :: S( * )
 double precision :: WORK( * )
end subroutine DGELSS

SUBROUTINE DGEQR2( M, N, A, LDA, TAU, WORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: TAU( * )
 double precision :: WORK( * )
end subroutine DGEQR2

SUBROUTINE DGEQRF( M, N, A, LDA, TAU, WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: LWORK
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: TAU( * )
 double precision :: WORK( * )
end subroutine DGEQRF

SUBROUTINE DGESVD( JOBU, JOBVT, M, N, A, LDA, S, U, LDU, VT, LDVT,&  
                   WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: LDU
 integer :: LDVT
 integer :: LWORK
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 character :: JOBU
 character :: JOBVT
 double precision :: S( * )
 double precision :: U( LDU, * )
 double precision :: VT( LDVT, * )
 double precision :: WORK( * )
end subroutine DGESVD

SUBROUTINE DGETF2( M, N, A, LDA, IPIV, INFO )
 implicit none
 integer :: INFO
 integer :: IPIV( * )
 integer :: LDA
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
end subroutine DGETF2

SUBROUTINE DGETRF( M, N, A, LDA, IPIV, INFO )
 implicit none
 integer :: INFO
 integer :: IPIV( * )
 integer :: LDA
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
end subroutine DGETRF

SUBROUTINE DGETRI( N, A, LDA, IPIV, WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: IPIV( * )
 integer :: LDA
 integer :: LWORK
 integer :: N
 double precision :: A( LDA, * )
 double precision :: WORK( * )
end subroutine DGETRI

SUBROUTINE DOPGTR( UPLO, N, AP, TAU, Q, LDQ, WORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDQ
 integer :: N
 double precision :: AP( * )
 double precision :: Q( LDQ, * )
 double precision :: TAU( * )
 character :: UPLO
 double precision :: WORK( * )
end subroutine DOPGTR

SUBROUTINE DORG2L( M, N, K, A, LDA, TAU, WORK, INFO )
 implicit none
 integer :: INFO
 integer :: K
 integer :: LDA
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: TAU( * )
 double precision :: WORK( * )
end subroutine DORG2L

SUBROUTINE DORG2R( M, N, K, A, LDA, TAU, WORK, INFO )
 implicit none
 integer :: INFO
 integer :: K
 integer :: LDA
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: TAU( * )
 double precision :: WORK( * )
end subroutine DORG2R

SUBROUTINE DORGBR( VECT, M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: K
 integer :: LDA
 integer :: LWORK
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: TAU( * )
 character :: VECT
 double precision :: WORK( * )
end subroutine DORGBR

SUBROUTINE DORGL2( M, N, K, A, LDA, TAU, WORK, INFO )
 implicit none
 integer :: INFO
 integer :: K
 integer :: LDA
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: TAU( * )
 double precision :: WORK( * )
end subroutine DORGL2

SUBROUTINE DORGLQ( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: K
 integer :: LDA
 integer :: LWORK
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: TAU( * )
 double precision :: WORK( * )
end subroutine DORGLQ

SUBROUTINE DORGQL( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: K
 integer :: LDA
 integer :: LWORK
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: TAU( * )
 double precision :: WORK( * )
end subroutine DORGQL

SUBROUTINE DORGQR( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: K
 integer :: LDA
 integer :: LWORK
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: TAU( * )
 double precision :: WORK( * )
end subroutine DORGQR

SUBROUTINE DORGTR( UPLO, N, A, LDA, TAU, WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: LWORK
 integer :: N
 double precision :: A( LDA, * )
 double precision :: TAU( * )
 character :: UPLO
 double precision :: WORK( LWORK )
end subroutine DORGTR

SUBROUTINE DORM2R( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,&  
                   WORK, INFO )
 implicit none
 integer :: INFO
 integer :: K
 integer :: LDA
 integer :: LDC
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: C( LDC, * )
 character :: SIDE
 double precision :: TAU( * )
 character :: TRANS
 double precision :: WORK( * )
end subroutine DORM2R

SUBROUTINE DORMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,&  
                   LDC, WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: K
 integer :: LDA
 integer :: LDC
 integer :: LWORK
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: C( LDC, * )
 character :: SIDE
 double precision :: TAU( * )
 character :: TRANS
 character :: VECT
 double precision :: WORK( * )
end subroutine DORMBR

SUBROUTINE DORML2( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,&  
                   WORK, INFO )
 implicit none
 integer :: INFO
 integer :: K
 integer :: LDA
 integer :: LDC
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: C( LDC, * )
 character :: SIDE
 double precision :: TAU( * )
 character :: TRANS
 double precision :: WORK( * )
end subroutine DORML2

SUBROUTINE DORMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,&  
                   WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: K
 integer :: LDA
 integer :: LDC
 integer :: LWORK
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: C( LDC, * )
 character :: SIDE
 double precision :: TAU( * )
 character :: TRANS
 double precision :: WORK( * )
end subroutine DORMLQ

SUBROUTINE DORMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,&  
                   WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: K
 integer :: LDA
 integer :: LDC
 integer :: LWORK
 integer :: M
 integer :: N
 double precision :: A( LDA, * )
 double precision :: C( LDC, * )
 character :: SIDE
 double precision :: TAU( * )
 character :: TRANS
 double precision :: WORK( * )
end subroutine DORMQR

SUBROUTINE DPOSV( UPLO, N, NRHS, A, LDA, B, LDB, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: LDB
 integer :: N
 integer :: NRHS
 double precision :: A( LDA, * )
 double precision :: B( LDB, * )
 character :: UPLO
end subroutine DPOSV

SUBROUTINE DPOTF2( UPLO, N, A, LDA, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: N
 double precision :: A( LDA, * )
 character :: UPLO
end subroutine DPOTF2

SUBROUTINE DPOTRF( UPLO, N, A, LDA, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: N
 double precision :: A( LDA, * )
 character :: UPLO
end subroutine DPOTRF

SUBROUTINE DPOTRS( UPLO, N, NRHS, A, LDA, B, LDB, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: LDB
 integer :: N
 integer :: NRHS
 double precision :: A( LDA, * )
 double precision :: B( LDB, * )
 character :: UPLO
end subroutine DPOTRS

SUBROUTINE DPPTRF( UPLO, N, AP, INFO )
 implicit none
 integer :: INFO
 integer :: N
 double precision :: AP( * )
 character :: UPLO
end subroutine DPPTRF

SUBROUTINE DSPGST( ITYPE, UPLO, N, AP, BP, INFO )
 implicit none
 integer :: INFO
 integer :: ITYPE
 integer :: N
 double precision :: AP( * )
 double precision :: BP( * )
 character :: UPLO
end subroutine DSPGST

SUBROUTINE DSPGV( ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK,&
                  INFO )
 implicit none
 integer :: INFO
 integer :: ITYPE
 integer :: LDZ
 integer :: N
 double precision :: AP( * )
 double precision :: BP( * )
 double precision :: W( * )
 double precision :: WORK( * )
 double precision :: Z( LDZ, * )
 character :: JOBZ
 character :: UPLO
end subroutine DSPGV

SUBROUTINE DRSCL( N, SA, SX, INCX )
 implicit none
 integer :: INCX
 integer :: N
 double precision :: SA
 double precision :: SX( * )
end subroutine DRSCL

SUBROUTINE DSPEV( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDZ
 integer :: N
 double precision :: AP( * )
 character :: JOBZ
 character :: UPLO
 double precision :: W( * )
 double precision :: WORK( * )
 double precision :: Z( LDZ, * )
end subroutine DSPEV

SUBROUTINE DSPTRD( UPLO, N, AP, D, E, TAU, INFO )
 implicit none
 integer :: INFO
 integer :: N
 double precision :: AP( * )
 double precision :: D( * )
 double precision :: E( * )
 double precision :: TAU( * )
 character :: UPLO
end subroutine DSPTRD

SUBROUTINE DSTEBZ( RANGE, ORDER, N, VL, VU, IL, IU, ABSTOL, D, E,&  
                   M, NSPLIT, W, IBLOCK, ISPLIT, WORK, IWORK,&  
                   INFO )
 implicit none
 integer :: IBLOCK( * )
 integer :: IL
 integer :: INFO
 integer :: ISPLIT( * )
 integer :: IU
 integer :: IWORK( * )
 integer :: M
 integer :: N
 integer :: NSPLIT
 double precision :: ABSTOL
 double precision :: D( * )
 double precision :: E( * )
 character :: ORDER
 character :: RANGE
 double precision :: VL
 double precision :: VU
 double precision :: W( * )
 double precision :: WORK( * )
end subroutine DSTEBZ

SUBROUTINE DSTEQR( COMPZ, N, D, E, Z, LDZ, WORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDZ
 integer :: N
 character :: COMPZ
 double precision :: D( * )
 double precision :: E( * )
 double precision :: WORK( * )
 double precision :: Z( LDZ, * )
end subroutine DSTEQR

SUBROUTINE DSTERF( N, D, E, INFO )
 implicit none
 integer :: INFO
 integer :: N
 double precision :: D( * )
 double precision :: E( * )
end subroutine DSTERF

SUBROUTINE DSYEV( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: LWORK
 integer :: N
 double precision :: A( LDA, * )
 character :: JOBZ
 character :: UPLO
 double precision :: W( * )
 double precision :: WORK( * )
end subroutine DSYEV

SUBROUTINE DSYGS2( ITYPE, UPLO, N, A, LDA, B, LDB, INFO )
 implicit none
 integer :: INFO
 integer :: ITYPE
 integer :: LDA
 integer :: LDB
 integer :: N
 double precision :: A( LDA, * )
 double precision :: B( LDB, * )
 character :: UPLO
end subroutine DSYGS2

SUBROUTINE DSYGST( ITYPE, UPLO, N, A, LDA, B, LDB, INFO )
 implicit none
 integer :: INFO
 integer :: ITYPE
 integer :: LDA
 integer :: LDB
 integer :: N
 double precision :: A( LDA, * )
 double precision :: B( LDB, * )
 character :: UPLO
end subroutine DSYGST

SUBROUTINE DSYGV( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK,&  
                  LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: ITYPE
 integer :: LDA
 integer :: LDB
 integer :: LWORK
 integer :: N
 double precision :: A( LDA, * )
 double precision :: B( LDB, * )
 character :: JOBZ
 character :: UPLO
 double precision :: W( * )
 double precision :: WORK( * )
end subroutine DSYGV

SUBROUTINE DSYSV( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK,&  
                  LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: IPIV( * )
 integer :: LDA
 integer :: LDB
 integer :: LWORK
 integer :: N
 integer :: NRHS
 double precision :: A( LDA, * )
 double precision :: B( LDB, * )
 character :: UPLO
 double precision :: WORK( * )
end subroutine DSYSV

SUBROUTINE DSYTD2( UPLO, N, A, LDA, D, E, TAU, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: N
 double precision :: A( LDA, * )
 double precision :: D( * )
 double precision :: E( * )
 double precision :: TAU( * )
 character :: UPLO
end subroutine DSYTD2

SUBROUTINE DSYTF2( UPLO, N, A, LDA, IPIV, INFO )
 implicit none
 integer :: INFO
 integer :: IPIV( * )
 integer :: LDA
 integer :: N
 double precision :: A( LDA, * )
 character :: UPLO
end subroutine DSYTF2

SUBROUTINE DSYTRD( UPLO, N, A, LDA, D, E, TAU, WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: LWORK
 integer :: N
 double precision :: A( LDA, * )
 double precision :: D( * )
 double precision :: E( * )
 double precision :: TAU( * )
 character :: UPLO
 double precision :: WORK( * )
end subroutine DSYTRD

SUBROUTINE DSYTRF( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: IPIV( * )
 integer :: LDA
 integer :: LWORK
 integer :: N
 double precision :: A( LDA, * )
 character :: UPLO
 double precision :: WORK( * )
end subroutine DSYTRF

SUBROUTINE DSYTRS( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, INFO )
 implicit none
 integer :: INFO
 integer :: IPIV( * )
 integer :: LDA
 integer :: LDB
 integer :: N
 integer :: NRHS
 double precision :: A( LDA, * )
 double precision :: B( LDB, * )
 character :: UPLO
end subroutine DSYTRS

SUBROUTINE DTRTI2( UPLO, DIAG, N, A, LDA, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: N
 double precision :: A( LDA, * )
 character :: DIAG
 character :: UPLO
end subroutine DTRTI2

SUBROUTINE DTRTRI( UPLO, DIAG, N, A, LDA, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: N
 double precision :: A( LDA, * )
 character :: DIAG
 character :: UPLO
end subroutine DTRTRI

DOUBLE PRECISION FUNCTION DZSUM1( N, CX, INCX )
 implicit none
 integer :: INCX
 integer :: N
 complex*16 :: CX( * )
end function DZSUM1

INTEGER FUNCTION IZMAX1( N, CX, INCX )
 implicit none
 integer :: INCX
 integer :: N
 complex*16 :: CX( * )
end function IZMAX1

SUBROUTINE SSTERF( N, D, E, INFO )
 implicit none
 integer :: INFO
 integer :: N
 real :: D( * )
 real :: E( * )
end subroutine SSTERF

SUBROUTINE ZBDSQR( UPLO, N, NCVT, NRU, NCC, D, E, VT, LDVT, U,&  
                   LDU, C, LDC, RWORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDC
 integer :: LDU
 integer :: LDVT
 integer :: N
 integer :: NCC
 integer :: NCVT
 integer :: NRU
 complex*16 :: C( LDC, * )
 double precision :: D( * )
 double precision :: E( * )
 double precision :: RWORK( * )
 complex*16 :: U( LDU, * )
 character :: UPLO
 complex*16 :: VT( LDVT, * )
end subroutine ZBDSQR

SUBROUTINE ZGEBAK( JOB, SIDE, N, ILO, IHI, SCALE, M, V, LDV,&  
                   INFO )
 implicit none
 integer :: IHI
 integer :: ILO
 integer :: INFO
 integer :: LDV
 integer :: M
 integer :: N
 character :: JOB
 double precision :: SCALE( * )
 character :: SIDE
 complex*16 :: V( LDV, * )
end subroutine ZGEBAK

SUBROUTINE ZGEBAL( JOB, N, A, LDA, ILO, IHI, SCALE, INFO )
 implicit none
 integer :: IHI
 integer :: ILO
 integer :: INFO
 integer :: LDA
 integer :: N
 complex*16 :: A( LDA, * )
 character :: JOB
 double precision :: SCALE( * )
end subroutine ZGEBAL

SUBROUTINE ZGEBD2( M, N, A, LDA, D, E, TAUQ, TAUP, WORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: M
 integer :: N
 complex*16 :: A( LDA, * )
 double precision :: D( * )
 double precision :: E( * )
 complex*16 :: TAUP( * )
 complex*16 :: TAUQ( * )
 complex*16 :: WORK( * )
end subroutine ZGEBD2

SUBROUTINE ZGEBRD( M, N, A, LDA, D, E, TAUQ, TAUP, WORK, LWORK,&  
                   INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: LWORK
 integer :: M
 integer :: N
 complex*16 :: A( LDA, * )
 double precision :: D( * )
 double precision :: E( * )
 complex*16 :: TAUP( * )
 complex*16 :: TAUQ( * )
 complex*16 :: WORK( * )
end subroutine ZGEBRD

SUBROUTINE ZGEES( JOBVS, SORT, SELECT, N, A, LDA, SDIM, W, VS,&  
                  LDVS, WORK, LWORK, RWORK, BWORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: LDVS
 integer :: LWORK
 integer :: N
 integer :: SDIM
 complex*16 :: A( LDA, * )
 logical :: BWORK( * )
 character :: JOBVS
 double precision :: RWORK( * )
 logical :: SELECT
 character :: SORT
 complex*16 :: VS( LDVS, * )
 complex*16 :: W( * )
 complex*16 :: WORK( * )
end subroutine ZGEES

SUBROUTINE ZGEHD2( N, ILO, IHI, A, LDA, TAU, WORK, INFO )
 implicit none
 integer :: IHI
 integer :: ILO
 integer :: INFO
 integer :: LDA
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: TAU( * )
 complex*16 :: WORK( * )
end subroutine ZGEHD2

SUBROUTINE ZGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO )
 implicit none
 integer :: IHI
 integer :: ILO
 integer :: INFO
 integer :: LDA
 integer :: LWORK
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: TAU( * )
 complex*16 :: WORK( LWORK )
end subroutine ZGEHRD

SUBROUTINE ZGELQ2( M, N, A, LDA, TAU, WORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: M
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: TAU( * )
 complex*16 :: WORK( * )
end subroutine ZGELQ2

SUBROUTINE ZGELQF( M, N, A, LDA, TAU, WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: LWORK
 integer :: M
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: TAU( * )
 complex*16 :: WORK( * )
end subroutine ZGELQF

SUBROUTINE ZGEQR2( M, N, A, LDA, TAU, WORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: M
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: TAU( * )
 complex*16 :: WORK( * )
end subroutine ZGEQR2

SUBROUTINE ZGEQRF( M, N, A, LDA, TAU, WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: LWORK
 integer :: M
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: TAU( * )
 complex*16 :: WORK( * )
end subroutine ZGEQRF

!SUBROUTINE ZGESV( N, NRHS, A, LDA, IPIV, B, LDB, INFO )
! implicit none
! integer :: INFO
! integer :: IPIV( * )
! integer :: LDA
! integer :: LDB
! integer :: N
! integer :: NRHS
! complex*16 :: A( LDA, * )
! complex*16 :: B( LDB, * )
!end subroutine ZGESV

SUBROUTINE ZGESVD( JOBU, JOBVT, M, N, A, LDA, S, U, LDU, VT, LDVT,&  
                   WORK, LWORK, RWORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: LDU
 integer :: LDVT
 integer :: LWORK
 integer :: M
 integer :: N
 complex*16 :: A( LDA, * )
 character :: JOBU
 character :: JOBVT
 double precision :: RWORK( * )
 double precision :: S( * )
 complex*16 :: U( LDU, * )
 complex*16 :: VT( LDVT, * )
 complex*16 :: WORK( * )
end subroutine ZGESVD

SUBROUTINE ZGETF2( M, N, A, LDA, IPIV, INFO )
 implicit none
 integer :: INFO
 integer :: IPIV( * )
 integer :: LDA
 integer :: M
 integer :: N
 complex*16 :: A( LDA, * )
end subroutine ZGETF2

SUBROUTINE ZGETRI( N, A, LDA, IPIV, WORK, LWORK, INFO )
 implicit none
 INTEGER :: INFO 
 INTEGER :: LDA
 INTEGER :: LWORK
 INTEGER :: N
 INTEGER :: IPIV( * )
 COMPLEX*16 :: A( LDA, * )
 COMPLEX*16 :: WORK( * )
END SUBROUTINE ZGETRI

!SUBROUTINE ZGETRF( M, N, A, LDA, IPIV, INFO )
! implicit none
! integer :: INFO
! integer :: IPIV( * )
! integer :: LDA
! integer :: M
! integer :: N
! complex*16 :: A( LDA, * )
!end subroutine ZGETRF

SUBROUTINE ZGETRS( TRANS, N, NRHS, A, LDA, IPIV, B, LDB, INFO )
 implicit none
 integer :: INFO
 integer :: IPIV( * )
 integer :: LDA
 integer :: LDB
 integer :: N
 integer :: NRHS
 complex*16 :: A( LDA, * )
 complex*16 :: B( LDB, * )
 character :: TRANS
end subroutine ZGETRS

!SUBROUTINE ZHEEV( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK, INFO )
! implicit none
! integer :: INFO
! integer :: LDA
! integer :: LWORK
! integer :: N
! complex*16 :: A( LDA, * )
! character :: JOBZ
! double precision :: RWORK( * )
! character :: UPLO
! double precision :: W( * )
! complex*16 :: WORK( * )
!end subroutine ZHEEV

SUBROUTINE ZHEGS2( ITYPE, UPLO, N, A, LDA, B, LDB, INFO )
 implicit none
 integer :: INFO
 integer :: ITYPE
 integer :: LDA
 integer :: LDB
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: B( LDB, * )
 character :: UPLO
end subroutine ZHEGS2

!SUBROUTINE ZHEGST( ITYPE, UPLO, N, A, LDA, B, LDB, INFO )
! implicit none
! integer :: INFO
! integer :: ITYPE
! integer :: LDA
! integer :: LDB
! integer :: N
! complex*16 :: A( LDA, * )
! complex*16 :: B( LDB, * )
! character :: UPLO
!end subroutine ZHEGST

SUBROUTINE ZHEGV( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK,&  
                  LWORK, RWORK, INFO )
 implicit none
 integer :: INFO
 integer :: ITYPE
 integer :: LDA
 integer :: LDB
 integer :: LWORK
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: B( LDB, * )
 character :: JOBZ
 double precision :: RWORK( * )
 character :: UPLO
 double precision :: W( * )
 complex*16 :: WORK( * )
end subroutine ZHEGV

SUBROUTINE ZHETD2( UPLO, N, A, LDA, D, E, TAU, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: N
 complex*16 :: A( LDA, * )
 double precision :: D( * )
 double precision :: E( * )
 complex*16 :: TAU( * )
 character :: UPLO
end subroutine ZHETD2

SUBROUTINE ZHETRD( UPLO, N, A, LDA, D, E, TAU, WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: LWORK
 integer :: N
 complex*16 :: A( LDA, * )
 double precision :: D( * )
 double precision :: E( * )
 complex*16 :: TAU( * )
 character :: UPLO
 complex*16 :: WORK( * )
end subroutine ZHETRD

!SUBROUTINE ZHPEV( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, RWORK, INFO )
! implicit none
! integer :: INFO
! integer :: LDZ
! integer :: N
! complex*16 :: AP( * )
! character :: JOBZ
! double precision :: RWORK( * )
! character :: UPLO
! double precision :: W( * )
! complex*16 :: WORK( * )
! complex*16 :: Z( LDZ, * )
!end subroutine ZHPEV

!SUBROUTINE ZHPEVX( JOBZ, RANGE, UPLO, N, AP, VL, VU, IL, IU,&  
!                   ABSTOL, M, W, Z, LDZ, WORK, RWORK, IWORK,&  
!                   IFAIL, INFO )
! implicit none
! integer :: IFAIL( * )
! integer :: IL
! integer :: INFO
! integer :: IU
! integer :: IWORK( * )
! integer :: LDZ
! integer :: M
! integer :: N
! double precision :: ABSTOL
! complex*16 :: AP( * )
! character :: JOBZ
! character :: RANGE
! double precision :: RWORK( * )
! character :: UPLO
! double precision :: VL
! double precision :: VU
! double precision :: W( * )
! complex*16 :: WORK( * )
! complex*16 :: Z( LDZ, * )
!end subroutine ZHPEVX

SUBROUTINE ZHPGST( ITYPE, UPLO, N, AP, BP, INFO )
 implicit none
 integer :: INFO
 integer :: ITYPE
 integer :: N
 complex*16 :: AP( * )
 complex*16 :: BP( * )
 character :: UPLO
end subroutine ZHPGST

!SUBROUTINE ZHPGV( ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK,&  
!                  RWORK, INFO )
! implicit none
! integer :: INFO
! integer :: ITYPE
! integer :: LDZ
! integer :: N
! complex*16 :: AP( * )
! complex*16 :: BP( * )
! character :: JOBZ
! double precision :: RWORK( * )
! character :: UPLO
! double precision :: W( * )
! complex*16 :: WORK( * )
! complex*16 :: Z( LDZ, * )
!end subroutine ZHPGV

SUBROUTINE ZHPTRD( UPLO, N, AP, D, E, TAU, INFO )
 implicit none
 integer :: INFO
 integer :: N
 complex*16 :: AP( * )
 double precision :: D( * )
 double precision :: E( * )
 complex*16 :: TAU( * )
 character :: UPLO
end subroutine ZHPTRD

SUBROUTINE ZHSEQR( JOB, COMPZ, N, ILO, IHI, H, LDH, W, Z, LDZ,&  
                   WORK, LWORK, INFO )
 implicit none
 integer :: IHI
 integer :: ILO
 integer :: INFO
 integer :: LDH
 integer :: LDZ
 integer :: LWORK
 integer :: N
 character :: COMPZ
 complex*16 :: H( LDH, * )
 character :: JOB
 complex*16 :: W( * )
 complex*16 :: WORK( * )
 complex*16 :: Z( LDZ, * )
end subroutine ZHSEQR

SUBROUTINE ZLABRD( M, N, NB, A, LDA, D, E, TAUQ, TAUP, X, LDX, Y,&  
                   LDY )
 implicit none
 integer :: LDA
 integer :: LDX
 integer :: LDY
 integer :: M
 integer :: N
 integer :: NB
 complex*16 :: A( LDA, * )
 double precision :: D( * )
 double precision :: E( * )
 complex*16 :: TAUP( * )
 complex*16 :: TAUQ( * )
 complex*16 :: X( LDX, * )
 complex*16 :: Y( LDY, * )
end subroutine ZLABRD

SUBROUTINE ZLACGV( N, X, INCX )
 implicit none
 integer :: INCX
 integer :: N
 complex*16 :: X( * )
end subroutine ZLACGV

SUBROUTINE ZLACON( N, V, X, EST, KASE )
 implicit none
 integer :: KASE
 integer :: N
 double precision :: EST
 complex*16 :: V( N )
 complex*16 :: X( N )
end subroutine ZLACON

SUBROUTINE ZLACPY( UPLO, M, N, A, LDA, B, LDB )
 implicit none
 integer :: LDA
 integer :: LDB
 integer :: M
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: B( LDB, * )
 character :: UPLO
end subroutine ZLACPY

DOUBLE COMPLEX   FUNCTION ZLADIV( X, Y )
 implicit none
 complex*16 :: X
 complex*16 :: Y
end function ZLADIV

SUBROUTINE ZLAHQR( WANTT, WANTZ, N, ILO, IHI, H, LDH, W, ILOZ,&  
                   IHIZ, Z, LDZ, INFO )
 implicit none
 integer :: IHI
 integer :: IHIZ
 integer :: ILO
 integer :: ILOZ
 integer :: INFO
 integer :: LDH
 integer :: LDZ
 integer :: N
 complex*16 :: H( LDH, * )
 complex*16 :: W( * )
 logical :: WANTT
 logical :: WANTZ
 complex*16 :: Z( LDZ, * )
end subroutine ZLAHQR

SUBROUTINE ZLAHRD( N, K, NB, A, LDA, TAU, T, LDT, Y, LDY )
 implicit none
 integer :: K
 integer :: LDA
 integer :: LDT
 integer :: LDY
 integer :: N
 integer :: NB
 complex*16 :: A( LDA, * )
 complex*16 :: T( LDT, NB )
 complex*16 :: TAU( NB )
 complex*16 :: Y( LDY, NB )
end subroutine ZLAHRD

DOUBLE PRECISION FUNCTION ZLANGE( NORM, M, N, A, LDA, WORK )
 implicit none
 integer :: LDA
 integer :: M
 integer :: N
 complex*16 :: A( LDA, * )
 character :: NORM
 double precision :: WORK( * )
end function ZLANGE

DOUBLE PRECISION FUNCTION ZLANHE( NORM, UPLO, N, A, LDA, WORK )
 implicit none
 integer :: LDA
 integer :: N
 complex*16 :: A( LDA, * )
 character :: NORM
 character :: UPLO
 double precision :: WORK( * )
end function ZLANHE

DOUBLE PRECISION FUNCTION ZLANHP( NORM, UPLO, N, AP, WORK )
 implicit none
 integer :: N
 complex*16 :: AP( * )
 character :: NORM
 character :: UPLO
 double precision :: WORK( * )
end function ZLANHP

DOUBLE PRECISION FUNCTION ZLANHS( NORM, N, A, LDA, WORK )
 implicit none
 integer :: LDA
 integer :: N
 complex*16 :: A( LDA, * )
 character :: NORM
 double precision :: WORK( * )
end function ZLANHS

SUBROUTINE ZLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
 implicit none
 integer :: INCV
 integer :: LDC
 integer :: M
 integer :: N
 complex*16 :: C( LDC, * )
 character :: SIDE
 complex*16 :: TAU
 complex*16 :: V( * )
 complex*16 :: WORK( * )
end subroutine ZLARF

SUBROUTINE ZLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV,&  
                   T, LDT, C, LDC, WORK, LDWORK )
 implicit none
 integer :: K
 integer :: LDC
 integer :: LDT
 integer :: LDV
 integer :: LDWORK
 integer :: M
 integer :: N
 complex*16 :: C( LDC, * )
 character :: DIRECT
 character :: SIDE
 character :: STOREV
 complex*16 :: T( LDT, * )
 character :: TRANS
 complex*16 :: V( LDV, * )
 complex*16 :: WORK( LDWORK, * )
end subroutine ZLARFB

SUBROUTINE ZLARFG( N, ALPHA, X, INCX, TAU )
 implicit none
 integer :: INCX
 integer :: N
 complex*16 :: ALPHA
 complex*16 :: TAU
 complex*16 :: X( * )
end subroutine ZLARFG

SUBROUTINE ZLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT )
 implicit none
 integer :: K
 integer :: LDT
 integer :: LDV
 integer :: N
 character :: DIRECT
 character :: STOREV
 complex*16 :: T( LDT, * )
 complex*16 :: TAU( * )
 complex*16 :: V( LDV, * )
end subroutine ZLARFT

SUBROUTINE ZLARFX( SIDE, M, N, V, TAU, C, LDC, WORK )
 implicit none
 integer :: LDC
 integer :: M
 integer :: N
 complex*16 :: C( LDC, * )
 character :: SIDE
 complex*16 :: TAU
 complex*16 :: V( * )
 complex*16 :: WORK( * )
end subroutine ZLARFX

SUBROUTINE ZLARTG( F, G, CS, SN, R )
 implicit none
 double precision :: CS
 complex*16 :: F
 complex*16 :: G
 complex*16 :: R
 complex*16 :: SN
end subroutine ZLARTG

SUBROUTINE ZLASCL( TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO )
 implicit none
 integer :: INFO
 integer :: KL
 integer :: KU
 integer :: LDA
 integer :: M
 integer :: N
 complex*16 :: A( LDA, * )
 double precision :: CFROM
 double precision :: CTO
 character :: TYPE
end subroutine ZLASCL

SUBROUTINE ZLASET( UPLO, M, N, ALPHA, BETA, A, LDA )
 implicit none
 integer :: LDA
 integer :: M
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: ALPHA
 complex*16 :: BETA
 character :: UPLO
end subroutine ZLASET

SUBROUTINE ZLASR( SIDE, PIVOT, DIRECT, M, N, C, S, A, LDA )
 implicit none
 integer :: LDA
 integer :: M
 integer :: N
 complex*16 :: A( LDA, * )
 double precision :: C( * )
 character :: DIRECT
 character :: PIVOT
 double precision :: S( * )
 character :: SIDE
end subroutine ZLASR

SUBROUTINE ZLASSQ( N, X, INCX, SCALE, SUMSQ )
 implicit none
 integer :: INCX
 integer :: N
 double precision :: SCALE
 double precision :: SUMSQ
 complex*16 :: X( * )
end subroutine ZLASSQ

SUBROUTINE ZLASWP( N, A, LDA, K1, K2, IPIV, INCX )
 implicit none
 integer :: INCX
 integer :: IPIV( * )
 integer :: K1
 integer :: K2
 integer :: LDA
 integer :: N
 complex*16 :: A( LDA, * )
end subroutine ZLASWP

SUBROUTINE ZLATRD( UPLO, N, NB, A, LDA, E, TAU, W, LDW )
 implicit none
 integer :: LDA
 integer :: LDW
 integer :: N
 integer :: NB
 complex*16 :: A( LDA, * )
 double precision :: E( * )
 complex*16 :: TAU( * )
 character :: UPLO
 complex*16 :: W( LDW, * )
end subroutine ZLATRD

SUBROUTINE ZLAZRO( M, N, ALPHA, BETA, A, LDA )
 implicit none
 integer :: LDA
 integer :: M
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: ALPHA
 complex*16 :: BETA
end subroutine ZLAZRO

SUBROUTINE ZPOTF2( UPLO, N, A, LDA, INFO )
 implicit none
 integer :: INFO
 integer :: LDA
 integer :: N
 complex*16 :: A( LDA, * )
 character :: UPLO
end subroutine ZPOTF2

!SUBROUTINE ZPOTRF( UPLO, N, A, LDA, INFO )
! implicit none
! integer :: INFO
! integer :: LDA
! integer :: N
! complex*16 :: A( LDA, * )
! character :: UPLO
!end subroutine ZPOTRF

SUBROUTINE ZPPTRF( UPLO, N, AP, INFO )
 implicit none
 integer :: INFO
 integer :: N
 complex*16 :: AP( * )
 character :: UPLO
end subroutine ZPPTRF

SUBROUTINE ZROT( N, CX, INCX, CY, INCY, C, S )
 implicit none
 integer :: INCX
 integer :: INCY
 integer :: N
 double precision :: C
 complex*16 :: CX( * )
 complex*16 :: CY( * )
 complex*16 :: S
end subroutine ZROT

SUBROUTINE ZTREXC( COMPQ, N, T, LDT, Q, LDQ, IFST, ILST, INFO )
 implicit none
 integer :: IFST
 integer :: ILST
 integer :: INFO
 integer :: LDQ
 integer :: LDT
 integer :: N
 character :: COMPQ
 complex*16 :: Q( LDQ, * )
 complex*16 :: T( LDT, * )
end subroutine ZTREXC

SUBROUTINE ZTRSEN( JOB, COMPQ, SELECT, N, T, LDT, Q, LDQ, W, M, S,&  
                   SEP, WORK, LWORK, INFO )
 implicit none
 integer :: INFO
 integer :: LDQ
 integer :: LDT
 integer :: LWORK
 integer :: M
 integer :: N
 character :: COMPQ
 character :: JOB
 complex*16 :: Q( LDQ, * )
 double precision :: S
 logical :: SELECT( * )
 double precision :: SEP
 complex*16 :: T( LDT, * )
 complex*16 :: W( * )
 complex*16 :: WORK( * )
end subroutine ZTRSEN

SUBROUTINE ZTRSYL( TRANA, TRANB, ISGN, M, N, A, LDA, B, LDB, C,&  
                   LDC, SCALE, INFO )
 implicit none
 integer :: INFO
 integer :: ISGN
 integer :: LDA
 integer :: LDB
 integer :: LDC
 integer :: M
 integer :: N
 complex*16 :: A( LDA, * )
 complex*16 :: B( LDB, * )
 complex*16 :: C( LDC, * )
 double precision :: SCALE
 character :: TRANA
 character :: TRANB
end subroutine ZTRSYL

SUBROUTINE ZTRTI2( UPLO, DIAG, N, A, LDA, INFO )
 implicit none
 CHARACTER :: DIAG
 CHARACTER :: UPLO
 INTEGER :: INFO 
 INTEGER :: LDA
 INTEGER :: N
 COMPLEX*16 :: A( LDA, * )
end SUBROUTINE ZTRSI2

SUBROUTINE ZTRTRI( UPLO, DIAG, N, A, LDA, INFO )
 implicit none
 CHARACTER :: DIAG
 CHARACTER :: UPLO
 INTEGER :: INFO
 INTEGER :: LDA
 INTEGER :: N
 COMPLEX*16 :: A( LDA, * )
end SUBROUTINE ZTRTRI
!!***
