diff --git a/INSTALL/make.inc.gfortran b/INSTALL/make.inc.gfortran
index 77de24a80c..7afbee52f6 100644
--- a/INSTALL/make.inc.gfortran
+++ b/INSTALL/make.inc.gfortran
@@ -20,9 +20,9 @@ CFLAGS = -O3
# should not compile LAPACK with flags such as -ffpe-trap=overflow.
#
FORTRAN = gfortran
-OPTS = -O2 -frecursive
+OPTS = -O2
DRVOPTS = $(OPTS)
-NOOPT = -O0 -frecursive
+NOOPT = -O0
# Define LOADER and LOADOPTS to refer to the loader and desired
# load options for your machine.
diff --git a/INSTALL/make.inc.gfortran_debug b/INSTALL/make.inc.gfortran_debug
index b339d2b1fb..22e0a73cad 100644
--- a/INSTALL/make.inc.gfortran_debug
+++ b/INSTALL/make.inc.gfortran_debug
@@ -19,10 +19,10 @@ CFLAGS = -g
# and handle these quantities appropriately. As a consequence, one
# should not compile LAPACK with flags such as -ffpe-trap=overflow.
#
-FORTRAN = gfortran -fimplicit-none -g -frecursive
+FORTRAN = gfortran -fimplicit-none -g
OPTS =
DRVOPTS = $(OPTS)
-NOOPT = -g -O0 -frecursive
+NOOPT = -g -O0
# Define LOADER and LOADOPTS to refer to the loader and desired
# load options for your machine.
diff --git a/SRC/CMakeLists.txt b/SRC/CMakeLists.txt
index 07008baee7..ff7b9fb6bb 100644
--- a/SRC/CMakeLists.txt
+++ b/SRC/CMakeLists.txt
@@ -35,7 +35,7 @@
#
#######################################################################
-set(ALLAUX ilaenv.f ieeeck.f lsamen.f iparmq.f iparam2stage.F
+set(ALLAUX ilaenv.f ilaenv2stage.f ieeeck.f lsamen.f iparmq.f iparam2stage.F
ilaprec.f ilatrans.f ilauplo.f iladiag.f chla_transtype.f
../INSTALL/ilaver.f ../INSTALL/lsame.f xerbla.f xerbla_array.f
../INSTALL/slamch.f)
diff --git a/SRC/Makefile b/SRC/Makefile
index 5d6fe72c25..f899772cb9 100644
--- a/SRC/Makefile
+++ b/SRC/Makefile
@@ -56,7 +56,8 @@ include ../make.inc
#
#######################################################################
-ALLAUX = ilaenv.o ieeeck.o lsamen.o xerbla.o xerbla_array.o iparmq.o iparam2stage.o \
+ALLAUX = ilaenv.o ilaenv2stage.o ieeeck.o lsamen.o xerbla.o xerbla_array.o \
+ iparmq.o iparam2stage.o \
ilaprec.o ilatrans.o ilauplo.o iladiag.o chla_transtype.o \
../INSTALL/ilaver.o ../INSTALL/lsame.o ../INSTALL/slamch.o
diff --git a/SRC/chbev_2stage.f b/SRC/chbev_2stage.f
index 7a859b280c..8af317169d 100644
--- a/SRC/chbev_2stage.f
+++ b/SRC/chbev_2stage.f
@@ -242,9 +242,9 @@ SUBROUTINE CHBEV_2STAGE( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
REAL SLAMCH, CLANHB
- EXTERNAL LSAME, SLAMCH, CLANHB, ILAENV
+ EXTERNAL LSAME, SLAMCH, CLANHB, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL SSCAL, SSTERF, XERBLA, CLASCL, CSTEQR,
@@ -281,9 +281,12 @@ SUBROUTINE CHBEV_2STAGE( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ,
LWMIN = 1
WORK( 1 ) = LWMIN
ELSE
- IB = ILAENV( 18, 'CHETRD_HB2ST', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'CHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'CHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
+ IB = ILAENV2STAGE( 2, 'CHETRD_HB2ST', JOBZ,
+ $ N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'CHETRD_HB2ST', JOBZ,
+ $ N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'CHETRD_HB2ST', JOBZ,
+ $ N, KD, IB, -1 )
LWMIN = LHTRD + LWTRD
WORK( 1 ) = LWMIN
ENDIF
diff --git a/SRC/chbevd_2stage.f b/SRC/chbevd_2stage.f
index f8296a443c..2921a94523 100644
--- a/SRC/chbevd_2stage.f
+++ b/SRC/chbevd_2stage.f
@@ -296,9 +296,9 @@ SUBROUTINE CHBEVD_2STAGE( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
REAL SLAMCH, CLANHB
- EXTERNAL LSAME, SLAMCH, CLANHB, ILAENV
+ EXTERNAL LSAME, SLAMCH, CLANHB, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL SSCAL, SSTERF, XERBLA, CGEMM, CLACPY,
@@ -321,9 +321,9 @@ SUBROUTINE CHBEVD_2STAGE( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ,
LRWMIN = 1
LIWMIN = 1
ELSE
- IB = ILAENV( 18, 'CHETRD_HB2ST', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'CHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'CHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
+ IB = ILAENV2STAGE( 2, 'CHETRD_HB2ST', JOBZ, N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'CHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'CHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
IF( WANTZ ) THEN
LWMIN = 2*N**2
LRWMIN = 1 + 5*N + 2*N**2
diff --git a/SRC/chbevx_2stage.f b/SRC/chbevx_2stage.f
index e2cb8ca5e3..0a705a0460 100644
--- a/SRC/chbevx_2stage.f
+++ b/SRC/chbevx_2stage.f
@@ -369,9 +369,9 @@ SUBROUTINE CHBEVX_2STAGE( JOBZ, RANGE, UPLO, N, KD, AB, LDAB,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
REAL SLAMCH, CLANHB
- EXTERNAL LSAME, SLAMCH, CLANHB, ILAENV
+ EXTERNAL LSAME, SLAMCH, CLANHB, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL SCOPY, SSCAL, SSTEBZ, SSTERF, XERBLA, CCOPY,
@@ -429,9 +429,12 @@ SUBROUTINE CHBEVX_2STAGE( JOBZ, RANGE, UPLO, N, KD, AB, LDAB,
LWMIN = 1
WORK( 1 ) = LWMIN
ELSE
- IB = ILAENV( 18, 'CHETRD_HB2ST', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'CHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'CHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
+ IB = ILAENV2STAGE( 2, 'CHETRD_HB2ST', JOBZ,
+ $ N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'CHETRD_HB2ST', JOBZ,
+ $ N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'CHETRD_HB2ST', JOBZ,
+ $ N, KD, IB, -1 )
LWMIN = LHTRD + LWTRD
WORK( 1 ) = LWMIN
ENDIF
diff --git a/SRC/cheev_2stage.f b/SRC/cheev_2stage.f
index 55a0ed60a5..55c153a0fc 100644
--- a/SRC/cheev_2stage.f
+++ b/SRC/cheev_2stage.f
@@ -222,9 +222,9 @@ SUBROUTINE CHEEV_2STAGE( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
REAL SLAMCH, CLANHE
- EXTERNAL LSAME, ILAENV, SLAMCH, CLANHE
+ EXTERNAL LSAME, SLAMCH, CLANHE, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL SSCAL, SSTERF, XERBLA, CLASCL, CSTEQR,
@@ -253,10 +253,10 @@ SUBROUTINE CHEEV_2STAGE( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
END IF
*
IF( INFO.EQ.0 ) THEN
- KD = ILAENV( 17, 'CHETRD_2STAGE', JOBZ, N, -1, -1, -1 )
- IB = ILAENV( 18, 'CHETRD_2STAGE', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'CHETRD_2STAGE', JOBZ, N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'CHETRD_2STAGE', JOBZ, N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
LWMIN = N + LHTRD + LWTRD
WORK( 1 ) = LWMIN
*
diff --git a/SRC/cheevd_2stage.f b/SRC/cheevd_2stage.f
index 56e2bac5cf..f16d9bdf27 100644
--- a/SRC/cheevd_2stage.f
+++ b/SRC/cheevd_2stage.f
@@ -291,9 +291,9 @@ SUBROUTINE CHEEVD_2STAGE( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
REAL SLAMCH, CLANHE
- EXTERNAL LSAME, ILAENV, SLAMCH, CLANHE
+ EXTERNAL LSAME, SLAMCH, CLANHE, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL SSCAL, SSTERF, XERBLA, CLACPY, CLASCL,
@@ -327,10 +327,14 @@ SUBROUTINE CHEEVD_2STAGE( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
LRWMIN = 1
LIWMIN = 1
ELSE
- KD = ILAENV( 17, 'CHETRD_2STAGE', JOBZ, N, -1, -1, -1 )
- IB = ILAENV( 18, 'CHETRD_2STAGE', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'CHETRD_2STAGE', JOBZ,
+ $ N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'CHETRD_2STAGE', JOBZ,
+ $ N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'CHETRD_2STAGE', JOBZ,
+ $ N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'CHETRD_2STAGE', JOBZ,
+ $ N, KD, IB, -1 )
IF( WANTZ ) THEN
LWMIN = 2*N + N*N
LRWMIN = 1 + 5*N + 2*N**2
diff --git a/SRC/cheevr_2stage.f b/SRC/cheevr_2stage.f
index 361addd1e4..29523f2fbe 100644
--- a/SRC/cheevr_2stage.f
+++ b/SRC/cheevr_2stage.f
@@ -445,9 +445,9 @@ SUBROUTINE CHEEVR_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV, ILAENV2STAGE
REAL SLAMCH, CLANSY
- EXTERNAL LSAME, ILAENV, SLAMCH, CLANSY
+ EXTERNAL LSAME, SLAMCH, CLANSY, ILAENV, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL SCOPY, SSCAL, SSTEBZ, SSTERF, XERBLA, CSSCAL,
@@ -471,10 +471,10 @@ SUBROUTINE CHEEVR_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU,
LQUERY = ( ( LWORK.EQ.-1 ) .OR. ( LRWORK.EQ.-1 ) .OR.
$ ( LIWORK.EQ.-1 ) )
*
- KD = ILAENV( 17, 'DSYTRD_2STAGE', JOBZ, N, -1, -1, -1 )
- IB = ILAENV( 18, 'DSYTRD_2STAGE', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'CHETRD_2STAGE', JOBZ, N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'CHETRD_2STAGE', JOBZ, N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
LWMIN = N + LHTRD + LWTRD
LRWMIN = MAX( 1, 24*N )
LIWMIN = MAX( 1, 10*N )
diff --git a/SRC/cheevx_2stage.f b/SRC/cheevx_2stage.f
index 002dddb457..1d4471d294 100644
--- a/SRC/cheevx_2stage.f
+++ b/SRC/cheevx_2stage.f
@@ -345,9 +345,9 @@ SUBROUTINE CHEEVX_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
REAL SLAMCH, CLANHE
- EXTERNAL LSAME, ILAENV, SLAMCH, CLANHE
+ EXTERNAL LSAME, SLAMCH, CLANHE, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL SCOPY, SSCAL, SSTEBZ, SSTERF, XERBLA, CSSCAL,
@@ -402,10 +402,14 @@ SUBROUTINE CHEEVX_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU,
LWMIN = 1
WORK( 1 ) = LWMIN
ELSE
- KD = ILAENV( 17, 'CHETRD_2STAGE', JOBZ, N, -1, -1, -1 )
- IB = ILAENV( 18, 'CHETRD_2STAGE', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'CHETRD_2STAGE', JOBZ,
+ $ N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'CHETRD_2STAGE', JOBZ,
+ $ N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'CHETRD_2STAGE', JOBZ,
+ $ N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'CHETRD_2STAGE', JOBZ,
+ $ N, KD, IB, -1 )
LWMIN = N + LHTRD + LWTRD
WORK( 1 ) = LWMIN
END IF
diff --git a/SRC/chegv_2stage.f b/SRC/chegv_2stage.f
index bbab76ab55..9decf2b520 100644
--- a/SRC/chegv_2stage.f
+++ b/SRC/chegv_2stage.f
@@ -261,8 +261,8 @@ SUBROUTINE CHEGV_2STAGE( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
- EXTERNAL LSAME, ILAENV
+ INTEGER ILAENV2STAGE
+ EXTERNAL LSAME, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL XERBLA, CHEGST, CPOTRF, CTRMM, CTRSM,
@@ -295,10 +295,10 @@ SUBROUTINE CHEGV_2STAGE( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W,
END IF
*
IF( INFO.EQ.0 ) THEN
- KD = ILAENV( 17, 'CHETRD_2STAGE', JOBZ, N, -1, -1, -1 )
- IB = ILAENV( 18, 'CHETRD_2STAGE', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'CHETRD_2STAGE', JOBZ, N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'CHETRD_2STAGE', JOBZ, N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
LWMIN = N + LHTRD + LWTRD
WORK( 1 ) = LWMIN
*
diff --git a/SRC/chetrd_2stage.f b/SRC/chetrd_2stage.f
index 75c5bce3b9..b178a7f306 100644
--- a/SRC/chetrd_2stage.f
+++ b/SRC/chetrd_2stage.f
@@ -253,8 +253,8 @@ SUBROUTINE CHETRD_2STAGE( VECT, UPLO, N, A, LDA, D, E, TAU,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
- EXTERNAL LSAME, ILAENV
+ INTEGER ILAENV2STAGE
+ EXTERNAL LSAME, ILAENV2STAGE
* ..
* .. Executable Statements ..
*
@@ -267,10 +267,10 @@ SUBROUTINE CHETRD_2STAGE( VECT, UPLO, N, A, LDA, D, E, TAU,
*
* Determine the block size, the workspace size and the hous size.
*
- KD = ILAENV( 17, 'CHETRD_2STAGE', VECT, N, -1, -1, -1 )
- IB = ILAENV( 18, 'CHETRD_2STAGE', VECT, N, KD, -1, -1 )
- LHMIN = ILAENV( 19, 'CHETRD_2STAGE', VECT, N, KD, IB, -1 )
- LWMIN = ILAENV( 20, 'CHETRD_2STAGE', VECT, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'CHETRD_2STAGE', VECT, N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'CHETRD_2STAGE', VECT, N, KD, -1, -1 )
+ LHMIN = ILAENV2STAGE( 3, 'CHETRD_2STAGE', VECT, N, KD, IB, -1 )
+ LWMIN = ILAENV2STAGE( 4, 'CHETRD_2STAGE', VECT, N, KD, IB, -1 )
* WRITE(*,*),'CHETRD_2STAGE N KD UPLO LHMIN LWMIN ',N, KD, UPLO,
* $ LHMIN, LWMIN
*
diff --git a/SRC/dsbev_2stage.f b/SRC/dsbev_2stage.f
index c9de727913..b094fa14d7 100644
--- a/SRC/dsbev_2stage.f
+++ b/SRC/dsbev_2stage.f
@@ -234,9 +234,9 @@ SUBROUTINE DSBEV_2STAGE( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
DOUBLE PRECISION DLAMCH, DLANSB
- EXTERNAL LSAME, DLAMCH, DLANSB, ILAENV
+ EXTERNAL LSAME, DLAMCH, DLANSB, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL DLASCL, DSCAL, DSTEQR, DSTERF, XERBLA,
@@ -273,9 +273,12 @@ SUBROUTINE DSBEV_2STAGE( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ,
LWMIN = 1
WORK( 1 ) = LWMIN
ELSE
- IB = ILAENV( 18, 'DSYTRD_SB2ST', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'DSYTRD_SB2ST', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'DSYTRD_SB2ST', JOBZ, N, KD, IB, -1 )
+ IB = ILAENV2STAGE( 2, 'DSYTRD_SB2ST', JOBZ,
+ $ N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'DSYTRD_SB2ST', JOBZ,
+ $ N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'DSYTRD_SB2ST', JOBZ,
+ $ N, KD, IB, -1 )
LWMIN = N + LHTRD + LWTRD
WORK( 1 ) = LWMIN
ENDIF
diff --git a/SRC/dsbevd_2stage.f b/SRC/dsbevd_2stage.f
index 1968f2b780..00206e8688 100644
--- a/SRC/dsbevd_2stage.f
+++ b/SRC/dsbevd_2stage.f
@@ -266,9 +266,9 @@ SUBROUTINE DSBEVD_2STAGE( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
DOUBLE PRECISION DLAMCH, DLANSB
- EXTERNAL LSAME, DLAMCH, DLANSB, ILAENV
+ EXTERNAL LSAME, DLAMCH, DLANSB, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL DGEMM, DLACPY, DLASCL, DSCAL, DSTEDC,
@@ -290,9 +290,9 @@ SUBROUTINE DSBEVD_2STAGE( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ,
LIWMIN = 1
LWMIN = 1
ELSE
- IB = ILAENV( 18, 'DSYTRD_SB2ST', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'DSYTRD_SB2ST', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'DSYTRD_SB2ST', JOBZ, N, KD, IB, -1 )
+ IB = ILAENV2STAGE( 2, 'DSYTRD_SB2ST', JOBZ, N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'DSYTRD_SB2ST', JOBZ, N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'DSYTRD_SB2ST', JOBZ, N, KD, IB, -1 )
IF( WANTZ ) THEN
LIWMIN = 3 + 5*N
LWMIN = 1 + 5*N + 2*N**2
diff --git a/SRC/dsbevx_2stage.f b/SRC/dsbevx_2stage.f
index 9e120e5e5a..dc72adffdf 100644
--- a/SRC/dsbevx_2stage.f
+++ b/SRC/dsbevx_2stage.f
@@ -359,9 +359,9 @@ SUBROUTINE DSBEVX_2STAGE( JOBZ, RANGE, UPLO, N, KD, AB, LDAB, Q,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
DOUBLE PRECISION DLAMCH, DLANSB
- EXTERNAL LSAME, DLAMCH, DLANSB, ILAENV
+ EXTERNAL LSAME, DLAMCH, DLANSB, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL DCOPY, DGEMV, DLACPY, DLASCL, DSCAL,
@@ -419,9 +419,12 @@ SUBROUTINE DSBEVX_2STAGE( JOBZ, RANGE, UPLO, N, KD, AB, LDAB, Q,
LWMIN = 1
WORK( 1 ) = LWMIN
ELSE
- IB = ILAENV( 18, 'DSYTRD_SB2ST', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'DSYTRD_SB2ST', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'DSYTRD_SB2ST', JOBZ, N, KD, IB, -1 )
+ IB = ILAENV2STAGE( 2, 'DSYTRD_SB2ST', JOBZ,
+ $ N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'DSYTRD_SB2ST', JOBZ,
+ $ N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'DSYTRD_SB2ST', JOBZ,
+ $ N, KD, IB, -1 )
LWMIN = 2*N + LHTRD + LWTRD
WORK( 1 ) = LWMIN
ENDIF
diff --git a/SRC/dsyev_2stage.f b/SRC/dsyev_2stage.f
index af622fa2ea..3c207f81cb 100644
--- a/SRC/dsyev_2stage.f
+++ b/SRC/dsyev_2stage.f
@@ -213,9 +213,9 @@ SUBROUTINE DSYEV_2STAGE( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
DOUBLE PRECISION DLAMCH, DLANSY
- EXTERNAL LSAME, ILAENV, DLAMCH, DLANSY
+ EXTERNAL LSAME, DLAMCH, DLANSY, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL DLASCL, DORGTR, DSCAL, DSTEQR, DSTERF,
@@ -244,10 +244,10 @@ SUBROUTINE DSYEV_2STAGE( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
END IF
*
IF( INFO.EQ.0 ) THEN
- KD = ILAENV( 17, 'DSYTRD_2STAGE', JOBZ, N, -1, -1, -1 )
- IB = ILAENV( 18, 'DSYTRD_2STAGE', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'DSYTRD_2STAGE', JOBZ, N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'DSYTRD_2STAGE', JOBZ, N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
LWMIN = 2*N + LHTRD + LWTRD
WORK( 1 ) = LWMIN
*
diff --git a/SRC/dsyevd_2stage.f b/SRC/dsyevd_2stage.f
index d9d080cb1e..ac70c2ede0 100644
--- a/SRC/dsyevd_2stage.f
+++ b/SRC/dsyevd_2stage.f
@@ -260,9 +260,9 @@ SUBROUTINE DSYEVD_2STAGE( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
DOUBLE PRECISION DLAMCH, DLANSY
- EXTERNAL LSAME, DLAMCH, DLANSY, ILAENV
+ EXTERNAL LSAME, DLAMCH, DLANSY, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL DLACPY, DLASCL, DORMTR, DSCAL, DSTEDC, DSTERF,
@@ -295,10 +295,14 @@ SUBROUTINE DSYEVD_2STAGE( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
LIWMIN = 1
LWMIN = 1
ELSE
- KD = ILAENV( 17, 'DSYTRD_2STAGE', JOBZ, N, -1, -1, -1 )
- IB = ILAENV( 18, 'DSYTRD_2STAGE', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'DSYTRD_2STAGE', JOBZ,
+ $ N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'DSYTRD_2STAGE', JOBZ,
+ $ N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'DSYTRD_2STAGE', JOBZ,
+ $ N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'DSYTRD_2STAGE', JOBZ,
+ $ N, KD, IB, -1 )
IF( WANTZ ) THEN
LIWMIN = 3 + 5*N
LWMIN = 1 + 6*N + 2*N**2
diff --git a/SRC/dsyevr_2stage.f b/SRC/dsyevr_2stage.f
index ae62582367..21b757d20e 100644
--- a/SRC/dsyevr_2stage.f
+++ b/SRC/dsyevr_2stage.f
@@ -418,9 +418,9 @@ SUBROUTINE DSYEVR_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV, ILAENV2STAGE
DOUBLE PRECISION DLAMCH, DLANSY
- EXTERNAL LSAME, ILAENV, DLAMCH, DLANSY
+ EXTERNAL LSAME, DLAMCH, DLANSY, ILAENV, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL DCOPY, DORMTR, DSCAL, DSTEBZ, DSTEMR, DSTEIN,
@@ -443,10 +443,10 @@ SUBROUTINE DSYEVR_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU,
*
LQUERY = ( ( LWORK.EQ.-1 ) .OR. ( LIWORK.EQ.-1 ) )
*
- KD = ILAENV( 17, 'DSYTRD_2STAGE', JOBZ, N, -1, -1, -1 )
- IB = ILAENV( 18, 'DSYTRD_2STAGE', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'DSYTRD_2STAGE', JOBZ, N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'DSYTRD_2STAGE', JOBZ, N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
LWMIN = MAX( 26*N, 5*N + LHTRD + LWTRD )
LIWMIN = MAX( 1, 10*N )
*
diff --git a/SRC/dsyevx_2stage.f b/SRC/dsyevx_2stage.f
index 97ca806fdd..c294704eab 100644
--- a/SRC/dsyevx_2stage.f
+++ b/SRC/dsyevx_2stage.f
@@ -336,9 +336,9 @@ SUBROUTINE DSYEVX_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
DOUBLE PRECISION DLAMCH, DLANSY
- EXTERNAL LSAME, ILAENV, DLAMCH, DLANSY
+ EXTERNAL LSAME, DLAMCH, DLANSY, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL DCOPY, DLACPY, DORGTR, DORMTR, DSCAL, DSTEBZ,
@@ -393,10 +393,14 @@ SUBROUTINE DSYEVX_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU,
LWMIN = 1
WORK( 1 ) = LWMIN
ELSE
- KD = ILAENV( 17, 'DSYTRD_2STAGE', JOBZ, N, -1, -1, -1 )
- IB = ILAENV( 18, 'DSYTRD_2STAGE', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'DSYTRD_2STAGE', JOBZ,
+ $ N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'DSYTRD_2STAGE', JOBZ,
+ $ N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'DSYTRD_2STAGE', JOBZ,
+ $ N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'DSYTRD_2STAGE', JOBZ,
+ $ N, KD, IB, -1 )
LWMIN = MAX( 8*N, 3*N + LHTRD + LWTRD )
WORK( 1 ) = LWMIN
END IF
diff --git a/SRC/dsygv_2stage.f b/SRC/dsygv_2stage.f
index e091662f62..021fb50bba 100644
--- a/SRC/dsygv_2stage.f
+++ b/SRC/dsygv_2stage.f
@@ -254,8 +254,8 @@ SUBROUTINE DSYGV_2STAGE( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
- EXTERNAL LSAME, ILAENV
+ INTEGER ILAENV2STAGE
+ EXTERNAL LSAME, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL DPOTRF, DSYGST, DTRMM, DTRSM, XERBLA,
@@ -288,10 +288,10 @@ SUBROUTINE DSYGV_2STAGE( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W,
END IF
*
IF( INFO.EQ.0 ) THEN
- KD = ILAENV( 17, 'DSYTRD_2STAGE', JOBZ, N, -1, -1, -1 )
- IB = ILAENV( 18, 'DSYTRD_2STAGE', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'DSYTRD_2STAGE', JOBZ, N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'DSYTRD_2STAGE', JOBZ, N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
LWMIN = 2*N + LHTRD + LWTRD
WORK( 1 ) = LWMIN
*
diff --git a/SRC/dsytrd_2stage.f b/SRC/dsytrd_2stage.f
index f7ea09b351..585ccab7af 100644
--- a/SRC/dsytrd_2stage.f
+++ b/SRC/dsytrd_2stage.f
@@ -253,8 +253,8 @@ SUBROUTINE DSYTRD_2STAGE( VECT, UPLO, N, A, LDA, D, E, TAU,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
- EXTERNAL LSAME, ILAENV
+ INTEGER ILAENV2STAGE
+ EXTERNAL LSAME, ILAENV2STAGE
* ..
* .. Executable Statements ..
*
@@ -267,10 +267,10 @@ SUBROUTINE DSYTRD_2STAGE( VECT, UPLO, N, A, LDA, D, E, TAU,
*
* Determine the block size, the workspace size and the hous size.
*
- KD = ILAENV( 17, 'DSYTRD_2STAGE', VECT, N, -1, -1, -1 )
- IB = ILAENV( 18, 'DSYTRD_2STAGE', VECT, N, KD, -1, -1 )
- LHMIN = ILAENV( 19, 'DSYTRD_2STAGE', VECT, N, KD, IB, -1 )
- LWMIN = ILAENV( 20, 'DSYTRD_2STAGE', VECT, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'DSYTRD_2STAGE', VECT, N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'DSYTRD_2STAGE', VECT, N, KD, -1, -1 )
+ LHMIN = ILAENV2STAGE( 3, 'DSYTRD_2STAGE', VECT, N, KD, IB, -1 )
+ LWMIN = ILAENV2STAGE( 4, 'DSYTRD_2STAGE', VECT, N, KD, IB, -1 )
* WRITE(*,*),'DSYTRD_2STAGE N KD UPLO LHMIN LWMIN ',N, KD, UPLO,
* $ LHMIN, LWMIN
*
diff --git a/SRC/ilaenv.f b/SRC/ilaenv.f
index 2be0581517..9fb77464b1 100644
--- a/SRC/ilaenv.f
+++ b/SRC/ilaenv.f
@@ -189,8 +189,7 @@ INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
* .. Executable Statements ..
*
GO TO ( 10, 10, 10, 80, 90, 100, 110, 120,
- $ 130, 140, 150, 160, 160, 160, 160, 160,
- $ 170, 170, 170, 170, 170 )ISPEC
+ $ 130, 140, 150, 160, 160, 160, 160, 160)ISPEC
*
* Invalid value for ISPEC
*
@@ -690,13 +689,6 @@ INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
*
ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
RETURN
-*
- 170 CONTINUE
-*
-* 17 <= ISPEC <= 21: 2stage eigenvalues and SVD or related subroutines.
-*
- ILAENV = IPARAM2STAGE( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
- RETURN
*
* End of ILAENV
*
diff --git a/SRC/ilaenv2stage.f b/SRC/ilaenv2stage.f
new file mode 100644
index 0000000000..61aea6870c
--- /dev/null
+++ b/SRC/ilaenv2stage.f
@@ -0,0 +1,191 @@
+*> \brief \b ILAENV2STAGE
+*
+* =========== DOCUMENTATION ===========
+*
+* Online html documentation available at
+* http://www.netlib.org/lapack/explore-html/
+*
+*> \htmlonly
+*> Download ILAENV2STAGE + dependencies
+*>
+*> [TGZ]
+*>
+*> [ZIP]
+*>
+*> [TXT]
+*> \endhtmlonly
+*
+* Definition:
+* ===========
+*
+* INTEGER FUNCTION ILAENV2STAGE( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
+*
+* .. Scalar Arguments ..
+* CHARACTER*( * ) NAME, OPTS
+* INTEGER ISPEC, N1, N2, N3, N4
+* ..
+*
+*
+*> \par Purpose:
+* =============
+*>
+*> \verbatim
+*>
+*> ILAENV2STAGE is called from the LAPACK routines to choose problem-dependent
+*> parameters for the local environment. See ISPEC for a description of
+*> the parameters.
+*> It sets problem and machine dependent parameters useful for *_2STAGE and
+*> related subroutines.
+*>
+*> ILAENV2STAGE returns an INTEGER
+*> if ILAENV2STAGE >= 0: ILAENV2STAGE returns the value of the parameter
+* specified by ISPEC
+*> if ILAENV2STAGE < 0: if ILAENV2STAGE = -k, the k-th argument had an
+* illegal value.
+*>
+*> This version provides a set of parameters which should give good,
+*> but not optimal, performance on many of the currently available
+*> computers for the 2-stage solvers. Users are encouraged to modify this
+*> subroutine to set the tuning parameters for their particular machine using
+*> the option and problem size information in the arguments.
+*>
+*> This routine will not function correctly if it is converted to all
+*> lower case. Converting it to all upper case is allowed.
+*> \endverbatim
+*
+* Arguments:
+* ==========
+*
+*> \param[in] ISPEC
+*> \verbatim
+*> ISPEC is INTEGER
+*> Specifies the parameter to be returned as the value of
+*> ILAENV2STAGE.
+*> = 1: the optimal blocksize nb for the reduction to BAND
+*>
+*> = 2: the optimal blocksize ib for the eigenvectors
+*> singular vectors update routine
+*>
+*> = 3: The length of the array that store the Housholder
+*> representation for the second stage
+*> Band to Tridiagonal or Bidiagonal
+*>
+*> = 4: The workspace needed for the routine in input.
+*>
+*> = 5: For future release.
+*> \endverbatim
+*>
+*> \param[in] NAME
+*> \verbatim
+*> NAME is CHARACTER*(*)
+*> The name of the calling subroutine, in either upper case or
+*> lower case.
+*> \endverbatim
+*>
+*> \param[in] OPTS
+*> \verbatim
+*> OPTS is CHARACTER*(*)
+*> The character options to the subroutine NAME, concatenated
+*> into a single character string. For example, UPLO = 'U',
+*> TRANS = 'T', and DIAG = 'N' for a triangular routine would
+*> be specified as OPTS = 'UTN'.
+*> \endverbatim
+*>
+*> \param[in] N1
+*> \verbatim
+*> N1 is INTEGER
+*> \endverbatim
+*>
+*> \param[in] N2
+*> \verbatim
+*> N2 is INTEGER
+*> \endverbatim
+*>
+*> \param[in] N3
+*> \verbatim
+*> N3 is INTEGER
+*> \endverbatim
+*>
+*> \param[in] N4
+*> \verbatim
+*> N4 is INTEGER
+*> Problem dimensions for the subroutine NAME; these may not all
+*> be required.
+*> \endverbatim
+*
+* Authors:
+* ========
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*> \author Nick R. Papior
+*
+*> \date July 2017
+*
+*> \ingroup OTHERauxiliary
+*
+*> \par Further Details:
+* =====================
+*>
+*> \verbatim
+*>
+*> The following conventions have been used when calling ILAENV2STAGE
+*> from the LAPACK routines:
+*> 1) OPTS is a concatenation of all of the character options to
+*> subroutine NAME, in the same order that they appear in the
+*> argument list for NAME, even if they are not used in determining
+*> the value of the parameter specified by ISPEC.
+*> 2) The problem dimensions N1, N2, N3, N4 are specified in the order
+*> that they appear in the argument list for NAME. N1 is used
+*> first, N2 second, and so on, and unused problem dimensions are
+*> passed a value of -1.
+*> 3) The parameter value returned by ILAENV2STAGE is checked for validity in
+*> the calling subroutine.
+*>
+*> \endverbatim
+*>
+* =====================================================================
+ INTEGER FUNCTION ILAENV2STAGE( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
+*
+* -- LAPACK auxiliary routine (version 3.7.0) --
+* -- LAPACK is a software package provided by Univ. of Tennessee, --
+* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
+* July 2017
+*
+* .. Scalar Arguments ..
+ CHARACTER*( * ) NAME, OPTS
+ INTEGER ISPEC, N1, N2, N3, N4
+* ..
+*
+* =====================================================================
+* ..
+* .. Local Scalars ..
+ INTEGER IISPEC
+* ..
+* .. External Functions ..
+ INTEGER IPARAM2STAGE
+ EXTERNAL IPARAM2STAGE
+* ..
+* .. Executable Statements ..
+*
+ GO TO ( 10, 10, 10, 10, 10 )ISPEC
+*
+* Invalid value for ISPEC
+*
+ ILAENV2STAGE = -1
+ RETURN
+*
+ 10 CONTINUE
+*
+* 2stage eigenvalues and SVD or related subroutines.
+*
+ IISPEC = 16 + ISPEC
+ ILAENV2STAGE = IPARAM2STAGE( IISPEC, NAME, OPTS,
+ $ N1, N2, N3, N4 )
+ RETURN
+*
+* End of ILAENV2STAGE
+*
+ END
diff --git a/SRC/iparam2stage.F b/SRC/iparam2stage.F
index 60bd0b696b..e2a953683b 100644
--- a/SRC/iparam2stage.F
+++ b/SRC/iparam2stage.F
@@ -38,7 +38,9 @@
*> useful for xHETRD_2STAGE, xHETRD_H@2HB, xHETRD_HB2ST,
*> xGEBRD_2STAGE, xGEBRD_GE2GB, xGEBRD_GB2BD
*> and related subroutines for eigenvalue problems.
-*> It is called whenever ILAENV is called with 17 <= ISPEC <= 21
+*> It is called whenever ILAENV is called with 17 <= ISPEC <= 21.
+*> It is called whenever ILAENV2STAGE is called with 1 <= ISPEC <= 5
+*> with a direct conversion ISPEC + 16.
*> \endverbatim
*
* Arguments:
diff --git a/SRC/ssbev_2stage.f b/SRC/ssbev_2stage.f
index f6c80249f5..7896caa0aa 100644
--- a/SRC/ssbev_2stage.f
+++ b/SRC/ssbev_2stage.f
@@ -234,9 +234,9 @@ SUBROUTINE SSBEV_2STAGE( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
REAL SLAMCH, SLANSB
- EXTERNAL LSAME, SLAMCH, SLANSB, ILAENV
+ EXTERNAL LSAME, SLAMCH, SLANSB, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL SLASCL, SSCAL, SSTEQR, SSTERF, XERBLA,
@@ -273,9 +273,12 @@ SUBROUTINE SSBEV_2STAGE( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ,
LWMIN = 1
WORK( 1 ) = LWMIN
ELSE
- IB = ILAENV( 18, 'SSYTRD_SB2ST', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'SSYTRD_SB2ST', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'SSYTRD_SB2ST', JOBZ, N, KD, IB, -1 )
+ IB = ILAENV2STAGE( 2, 'SSYTRD_SB2ST', JOBZ,
+ $ N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'SSYTRD_SB2ST', JOBZ,
+ $ N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'SSYTRD_SB2ST', JOBZ,
+ $ N, KD, IB, -1 )
LWMIN = N + LHTRD + LWTRD
WORK( 1 ) = LWMIN
ENDIF
diff --git a/SRC/ssbevd_2stage.f b/SRC/ssbevd_2stage.f
index b1c67d4d97..08078d1d77 100644
--- a/SRC/ssbevd_2stage.f
+++ b/SRC/ssbevd_2stage.f
@@ -266,9 +266,9 @@ SUBROUTINE SSBEVD_2STAGE( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
REAL SLAMCH, SLANSB
- EXTERNAL LSAME, SLAMCH, SLANSB, ILAENV
+ EXTERNAL LSAME, SLAMCH, SLANSB, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL SGEMM, SLACPY, SLASCL, SSCAL, SSTEDC,
@@ -290,9 +290,9 @@ SUBROUTINE SSBEVD_2STAGE( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ,
LIWMIN = 1
LWMIN = 1
ELSE
- IB = ILAENV( 18, 'SSYTRD_SB2ST', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'SSYTRD_SB2ST', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'SSYTRD_SB2ST', JOBZ, N, KD, IB, -1 )
+ IB = ILAENV2STAGE( 2, 'SSYTRD_SB2ST', JOBZ, N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'SSYTRD_SB2ST', JOBZ, N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'SSYTRD_SB2ST', JOBZ, N, KD, IB, -1 )
IF( WANTZ ) THEN
LIWMIN = 3 + 5*N
LWMIN = 1 + 5*N + 2*N**2
diff --git a/SRC/ssbevx_2stage.f b/SRC/ssbevx_2stage.f
index 1d8f2cc163..7216b13041 100644
--- a/SRC/ssbevx_2stage.f
+++ b/SRC/ssbevx_2stage.f
@@ -359,9 +359,9 @@ SUBROUTINE SSBEVX_2STAGE( JOBZ, RANGE, UPLO, N, KD, AB, LDAB, Q,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
REAL SLAMCH, SLANSB
- EXTERNAL LSAME, SLAMCH, SLANSB, ILAENV
+ EXTERNAL LSAME, SLAMCH, SLANSB, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL SCOPY, SGEMV, SLACPY, SLASCL, SSCAL,
@@ -419,9 +419,12 @@ SUBROUTINE SSBEVX_2STAGE( JOBZ, RANGE, UPLO, N, KD, AB, LDAB, Q,
LWMIN = 1
WORK( 1 ) = LWMIN
ELSE
- IB = ILAENV( 18, 'SSYTRD_SB2ST', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'SSYTRD_SB2ST', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'SSYTRD_SB2ST', JOBZ, N, KD, IB, -1 )
+ IB = ILAENV2STAGE( 2, 'SSYTRD_SB2ST', JOBZ,
+ $ N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'SSYTRD_SB2ST', JOBZ,
+ $ N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'SSYTRD_SB2ST', JOBZ,
+ $ N, KD, IB, -1 )
LWMIN = 2*N + LHTRD + LWTRD
WORK( 1 ) = LWMIN
ENDIF
diff --git a/SRC/ssyev_2stage.f b/SRC/ssyev_2stage.f
index 0de3ca7e4c..9285685112 100644
--- a/SRC/ssyev_2stage.f
+++ b/SRC/ssyev_2stage.f
@@ -213,9 +213,9 @@ SUBROUTINE SSYEV_2STAGE( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
REAL SLAMCH, SLANSY
- EXTERNAL LSAME, ILAENV, SLAMCH, SLANSY
+ EXTERNAL LSAME, SLAMCH, SLANSY, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL SLASCL, SORGTR, SSCAL, SSTEQR, SSTERF,
@@ -244,10 +244,10 @@ SUBROUTINE SSYEV_2STAGE( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
END IF
*
IF( INFO.EQ.0 ) THEN
- KD = ILAENV( 17, 'SSYTRD_2STAGE', JOBZ, N, -1, -1, -1 )
- IB = ILAENV( 18, 'SSYTRD_2STAGE', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'SSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'SSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'SSYTRD_2STAGE', JOBZ, N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'SSYTRD_2STAGE', JOBZ, N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'SSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'SSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
LWMIN = 2*N + LHTRD + LWTRD
WORK( 1 ) = LWMIN
*
diff --git a/SRC/ssyevd_2stage.f b/SRC/ssyevd_2stage.f
index d65547732d..f811429544 100644
--- a/SRC/ssyevd_2stage.f
+++ b/SRC/ssyevd_2stage.f
@@ -260,9 +260,9 @@ SUBROUTINE SSYEVD_2STAGE( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
REAL SLAMCH, SLANSY
- EXTERNAL LSAME, SLAMCH, SLANSY, ILAENV
+ EXTERNAL LSAME, SLAMCH, SLANSY, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL SLACPY, SLASCL, SORMTR, SSCAL, SSTEDC, SSTERF,
@@ -295,10 +295,14 @@ SUBROUTINE SSYEVD_2STAGE( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
LIWMIN = 1
LWMIN = 1
ELSE
- KD = ILAENV( 17, 'SSYTRD_2STAGE', JOBZ, N, -1, -1, -1 )
- IB = ILAENV( 18, 'SSYTRD_2STAGE', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'SSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'SSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'SSYTRD_2STAGE', JOBZ,
+ $ N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'SSYTRD_2STAGE', JOBZ,
+ $ N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'SSYTRD_2STAGE', JOBZ,
+ $ N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'SSYTRD_2STAGE', JOBZ,
+ $ N, KD, IB, -1 )
IF( WANTZ ) THEN
LIWMIN = 3 + 5*N
LWMIN = 1 + 6*N + 2*N**2
diff --git a/SRC/ssyevr_2stage.f b/SRC/ssyevr_2stage.f
index 9628a89926..f4d847ee3f 100644
--- a/SRC/ssyevr_2stage.f
+++ b/SRC/ssyevr_2stage.f
@@ -418,9 +418,9 @@ SUBROUTINE SSYEVR_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV, ILAENV2STAGE
REAL SLAMCH, SLANSY
- EXTERNAL LSAME, ILAENV, SLAMCH, SLANSY
+ EXTERNAL LSAME, SLAMCH, SLANSY, ILAENV, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL SCOPY, SORMTR, SSCAL, SSTEBZ, SSTEMR, SSTEIN,
@@ -443,10 +443,10 @@ SUBROUTINE SSYEVR_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU,
*
LQUERY = ( ( LWORK.EQ.-1 ) .OR. ( LIWORK.EQ.-1 ) )
*
- KD = ILAENV( 17, 'SSYTRD_2STAGE', JOBZ, N, -1, -1, -1 )
- IB = ILAENV( 18, 'SSYTRD_2STAGE', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'SSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'SSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'SSYTRD_2STAGE', JOBZ, N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'SSYTRD_2STAGE', JOBZ, N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'SSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'SSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
LWMIN = MAX( 26*N, 5*N + LHTRD + LWTRD )
LIWMIN = MAX( 1, 10*N )
*
diff --git a/SRC/ssyevx_2stage.f b/SRC/ssyevx_2stage.f
index fd8518c307..2228ca0992 100644
--- a/SRC/ssyevx_2stage.f
+++ b/SRC/ssyevx_2stage.f
@@ -336,9 +336,9 @@ SUBROUTINE SSYEVX_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
REAL SLAMCH, SLANSY
- EXTERNAL LSAME, ILAENV, SLAMCH, SLANSY
+ EXTERNAL LSAME, SLAMCH, SLANSY, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL SCOPY, SLACPY, SORGTR, SORMTR, SSCAL, SSTEBZ,
@@ -393,10 +393,14 @@ SUBROUTINE SSYEVX_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU,
LWMIN = 1
WORK( 1 ) = LWMIN
ELSE
- KD = ILAENV( 17, 'SSYTRD_2STAGE', JOBZ, N, -1, -1, -1 )
- IB = ILAENV( 18, 'SSYTRD_2STAGE', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'SSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'SSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'SSYTRD_2STAGE', JOBZ,
+ $ N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'SSYTRD_2STAGE', JOBZ,
+ $ N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'SSYTRD_2STAGE', JOBZ,
+ $ N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'SSYTRD_2STAGE', JOBZ,
+ $ N, KD, IB, -1 )
LWMIN = MAX( 8*N, 3*N + LHTRD + LWTRD )
WORK( 1 ) = LWMIN
END IF
diff --git a/SRC/ssygv_2stage.f b/SRC/ssygv_2stage.f
index 4ad690af6f..29a51c4a15 100644
--- a/SRC/ssygv_2stage.f
+++ b/SRC/ssygv_2stage.f
@@ -255,8 +255,8 @@ SUBROUTINE SSYGV_2STAGE( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
- EXTERNAL LSAME, ILAENV
+ INTEGER ILAENV2STAGE
+ EXTERNAL LSAME, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL SPOTRF, SSYGST, STRMM, STRSM, XERBLA,
@@ -289,10 +289,10 @@ SUBROUTINE SSYGV_2STAGE( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W,
END IF
*
IF( INFO.EQ.0 ) THEN
- KD = ILAENV( 17, 'SSYTRD_2STAGE', JOBZ, N, -1, -1, -1 )
- IB = ILAENV( 18, 'SSYTRD_2STAGE', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'SSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'SSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'SSYTRD_2STAGE', JOBZ, N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'SSYTRD_2STAGE', JOBZ, N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'SSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'SSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
LWMIN = 2*N + LHTRD + LWTRD
WORK( 1 ) = LWMIN
*
diff --git a/SRC/ssytrd_2stage.f b/SRC/ssytrd_2stage.f
index 0982690d2d..ffcd1e9983 100644
--- a/SRC/ssytrd_2stage.f
+++ b/SRC/ssytrd_2stage.f
@@ -253,8 +253,8 @@ SUBROUTINE SSYTRD_2STAGE( VECT, UPLO, N, A, LDA, D, E, TAU,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
- EXTERNAL LSAME, ILAENV
+ INTEGER ILAENV2STAGE
+ EXTERNAL LSAME, ILAENV2STAGE
* ..
* .. Executable Statements ..
*
@@ -267,10 +267,10 @@ SUBROUTINE SSYTRD_2STAGE( VECT, UPLO, N, A, LDA, D, E, TAU,
*
* Determine the block size, the workspace size and the hous size.
*
- KD = ILAENV( 17, 'SSYTRD_2STAGE', VECT, N, -1, -1, -1 )
- IB = ILAENV( 18, 'SSYTRD_2STAGE', VECT, N, KD, -1, -1 )
- LHMIN = ILAENV( 19, 'SSYTRD_2STAGE', VECT, N, KD, IB, -1 )
- LWMIN = ILAENV( 20, 'SSYTRD_2STAGE', VECT, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'SSYTRD_2STAGE', VECT, N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'SSYTRD_2STAGE', VECT, N, KD, -1, -1 )
+ LHMIN = ILAENV2STAGE( 3, 'SSYTRD_2STAGE', VECT, N, KD, IB, -1 )
+ LWMIN = ILAENV2STAGE( 4, 'SSYTRD_2STAGE', VECT, N, KD, IB, -1 )
* WRITE(*,*),'SSYTRD_2STAGE N KD UPLO LHMIN LWMIN ',N, KD, UPLO,
* $ LHMIN, LWMIN
*
diff --git a/SRC/zhbev_2stage.f b/SRC/zhbev_2stage.f
index f6f6abe21d..9ccb46e54c 100644
--- a/SRC/zhbev_2stage.f
+++ b/SRC/zhbev_2stage.f
@@ -242,9 +242,9 @@ SUBROUTINE ZHBEV_2STAGE( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
DOUBLE PRECISION DLAMCH, ZLANHB
- EXTERNAL LSAME, DLAMCH, ZLANHB, ILAENV
+ EXTERNAL LSAME, DLAMCH, ZLANHB, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL DSCAL, DSTERF, XERBLA, ZLASCL, ZSTEQR,
@@ -281,9 +281,12 @@ SUBROUTINE ZHBEV_2STAGE( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ,
LWMIN = 1
WORK( 1 ) = LWMIN
ELSE
- IB = ILAENV( 18, 'ZHETRD_HB2ST', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'ZHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'ZHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
+ IB = ILAENV2STAGE( 2, 'ZHETRD_HB2ST', JOBZ,
+ $ N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'ZHETRD_HB2ST', JOBZ,
+ $ N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'ZHETRD_HB2ST', JOBZ,
+ $ N, KD, IB, -1 )
LWMIN = LHTRD + LWTRD
WORK( 1 ) = LWMIN
ENDIF
diff --git a/SRC/zhbevd_2stage.f b/SRC/zhbevd_2stage.f
index 94863c708e..6c71849c9a 100644
--- a/SRC/zhbevd_2stage.f
+++ b/SRC/zhbevd_2stage.f
@@ -296,9 +296,9 @@ SUBROUTINE ZHBEVD_2STAGE( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
DOUBLE PRECISION DLAMCH, ZLANHB
- EXTERNAL LSAME, DLAMCH, ZLANHB, ILAENV
+ EXTERNAL LSAME, DLAMCH, ZLANHB, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL DSCAL, DSTERF, XERBLA, ZGEMM, ZLACPY,
@@ -321,9 +321,9 @@ SUBROUTINE ZHBEVD_2STAGE( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ,
LRWMIN = 1
LIWMIN = 1
ELSE
- IB = ILAENV( 18, 'ZHETRD_HB2ST', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'ZHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'ZHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
+ IB = ILAENV2STAGE( 2, 'ZHETRD_HB2ST', JOBZ, N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'ZHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'ZHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
IF( WANTZ ) THEN
LWMIN = 2*N**2
LRWMIN = 1 + 5*N + 2*N**2
diff --git a/SRC/zhbevx_2stage.f b/SRC/zhbevx_2stage.f
index 8473c4a402..038b533cb7 100644
--- a/SRC/zhbevx_2stage.f
+++ b/SRC/zhbevx_2stage.f
@@ -369,9 +369,9 @@ SUBROUTINE ZHBEVX_2STAGE( JOBZ, RANGE, UPLO, N, KD, AB, LDAB,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
DOUBLE PRECISION DLAMCH, ZLANHB
- EXTERNAL LSAME, DLAMCH, ZLANHB, ILAENV
+ EXTERNAL LSAME, DLAMCH, ZLANHB, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL DCOPY, DSCAL, DSTEBZ, DSTERF, XERBLA, ZCOPY,
@@ -429,9 +429,12 @@ SUBROUTINE ZHBEVX_2STAGE( JOBZ, RANGE, UPLO, N, KD, AB, LDAB,
LWMIN = 1
WORK( 1 ) = LWMIN
ELSE
- IB = ILAENV( 18, 'ZHETRD_HB2ST', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'ZHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'ZHETRD_HB2ST', JOBZ, N, KD, IB, -1 )
+ IB = ILAENV2STAGE( 2, 'ZHETRD_HB2ST', JOBZ,
+ $ N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'ZHETRD_HB2ST', JOBZ,
+ $ N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'ZHETRD_HB2ST', JOBZ,
+ $ N, KD, IB, -1 )
LWMIN = LHTRD + LWTRD
WORK( 1 ) = LWMIN
ENDIF
diff --git a/SRC/zheev_2stage.f b/SRC/zheev_2stage.f
index 0cf57e9047..edf0147a5b 100644
--- a/SRC/zheev_2stage.f
+++ b/SRC/zheev_2stage.f
@@ -222,9 +222,9 @@ SUBROUTINE ZHEEV_2STAGE( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
DOUBLE PRECISION DLAMCH, ZLANHE
- EXTERNAL LSAME, ILAENV, DLAMCH, ZLANHE
+ EXTERNAL LSAME, DLAMCH, ZLANHE, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL DSCAL, DSTERF, XERBLA, ZLASCL, ZSTEQR,
@@ -253,10 +253,10 @@ SUBROUTINE ZHEEV_2STAGE( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
END IF
*
IF( INFO.EQ.0 ) THEN
- KD = ILAENV( 17, 'ZHETRD_2STAGE', JOBZ, N, -1, -1, -1 )
- IB = ILAENV( 18, 'ZHETRD_2STAGE', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'ZHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'ZHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'ZHETRD_2STAGE', JOBZ, N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'ZHETRD_2STAGE', JOBZ, N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'ZHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'ZHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
LWMIN = N + LHTRD + LWTRD
WORK( 1 ) = LWMIN
*
diff --git a/SRC/zheevd_2stage.f b/SRC/zheevd_2stage.f
index 7a8c1593f2..042bd0b8eb 100644
--- a/SRC/zheevd_2stage.f
+++ b/SRC/zheevd_2stage.f
@@ -291,9 +291,9 @@ SUBROUTINE ZHEEVD_2STAGE( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
DOUBLE PRECISION DLAMCH, ZLANHE
- EXTERNAL LSAME, ILAENV, DLAMCH, ZLANHE
+ EXTERNAL LSAME, DLAMCH, ZLANHE, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL DSCAL, DSTERF, XERBLA, ZLACPY, ZLASCL,
@@ -327,10 +327,14 @@ SUBROUTINE ZHEEVD_2STAGE( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
LRWMIN = 1
LIWMIN = 1
ELSE
- KD = ILAENV( 17, 'ZHETRD_2STAGE', JOBZ, N, -1, -1, -1 )
- IB = ILAENV( 18, 'ZHETRD_2STAGE', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'ZHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'ZHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'ZHETRD_2STAGE', JOBZ,
+ $ N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'ZHETRD_2STAGE', JOBZ,
+ $ N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'ZHETRD_2STAGE', JOBZ,
+ $ N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'ZHETRD_2STAGE', JOBZ,
+ $ N, KD, IB, -1 )
IF( WANTZ ) THEN
LWMIN = 2*N + N*N
LRWMIN = 1 + 5*N + 2*N**2
diff --git a/SRC/zheevr_2stage.f b/SRC/zheevr_2stage.f
index 5457853617..91c7cdca8a 100644
--- a/SRC/zheevr_2stage.f
+++ b/SRC/zheevr_2stage.f
@@ -445,9 +445,9 @@ SUBROUTINE ZHEEVR_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV, ILAENV2STAGE
DOUBLE PRECISION DLAMCH, ZLANSY
- EXTERNAL LSAME, ILAENV, DLAMCH, ZLANSY
+ EXTERNAL LSAME, DLAMCH, ZLANSY, ILAENV, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL DCOPY, DSCAL, DSTEBZ, DSTERF, XERBLA, ZDSCAL,
@@ -471,10 +471,10 @@ SUBROUTINE ZHEEVR_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU,
LQUERY = ( ( LWORK.EQ.-1 ) .OR. ( LRWORK.EQ.-1 ) .OR.
$ ( LIWORK.EQ.-1 ) )
*
- KD = ILAENV( 17, 'DSYTRD_2STAGE', JOBZ, N, -1, -1, -1 )
- IB = ILAENV( 18, 'DSYTRD_2STAGE', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'DSYTRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'ZHETRD_2STAGE', JOBZ, N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'ZHETRD_2STAGE', JOBZ, N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'ZHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'ZHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
LWMIN = N + LHTRD + LWTRD
LRWMIN = MAX( 1, 24*N )
LIWMIN = MAX( 1, 10*N )
diff --git a/SRC/zheevx_2stage.f b/SRC/zheevx_2stage.f
index 9def33c6de..0a5334fa12 100644
--- a/SRC/zheevx_2stage.f
+++ b/SRC/zheevx_2stage.f
@@ -345,9 +345,9 @@ SUBROUTINE ZHEEVX_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
+ INTEGER ILAENV2STAGE
DOUBLE PRECISION DLAMCH, ZLANHE
- EXTERNAL LSAME, ILAENV, DLAMCH, ZLANHE
+ EXTERNAL LSAME, DLAMCH, ZLANHE, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL DCOPY, DSCAL, DSTEBZ, DSTERF, XERBLA, ZDSCAL,
@@ -402,10 +402,14 @@ SUBROUTINE ZHEEVX_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU,
LWMIN = 1
WORK( 1 ) = LWMIN
ELSE
- KD = ILAENV( 17, 'ZHETRD_2STAGE', JOBZ, N, -1, -1, -1 )
- IB = ILAENV( 18, 'ZHETRD_2STAGE', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'ZHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'ZHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'ZHETRD_2STAGE', JOBZ,
+ $ N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'ZHETRD_2STAGE', JOBZ,
+ $ N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'ZHETRD_2STAGE', JOBZ,
+ $ N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'ZHETRD_2STAGE', JOBZ,
+ $ N, KD, IB, -1 )
LWMIN = N + LHTRD + LWTRD
WORK( 1 ) = LWMIN
END IF
diff --git a/SRC/zhegv_2stage.f b/SRC/zhegv_2stage.f
index fc96881e32..6de98ed305 100644
--- a/SRC/zhegv_2stage.f
+++ b/SRC/zhegv_2stage.f
@@ -261,8 +261,8 @@ SUBROUTINE ZHEGV_2STAGE( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
- EXTERNAL LSAME, ILAENV
+ INTEGER ILAENV2STAGE
+ EXTERNAL LSAME, ILAENV2STAGE
* ..
* .. External Subroutines ..
EXTERNAL XERBLA, ZHEGST, ZPOTRF, ZTRMM, ZTRSM,
@@ -295,10 +295,10 @@ SUBROUTINE ZHEGV_2STAGE( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W,
END IF
*
IF( INFO.EQ.0 ) THEN
- KD = ILAENV( 17, 'ZHETRD_2STAGE', JOBZ, N, -1, -1, -1 )
- IB = ILAENV( 18, 'ZHETRD_2STAGE', JOBZ, N, KD, -1, -1 )
- LHTRD = ILAENV( 19, 'ZHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
- LWTRD = ILAENV( 20, 'ZHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'ZHETRD_2STAGE', JOBZ, N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'ZHETRD_2STAGE', JOBZ, N, KD, -1, -1 )
+ LHTRD = ILAENV2STAGE( 3, 'ZHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
+ LWTRD = ILAENV2STAGE( 4, 'ZHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
LWMIN = N + LHTRD + LWTRD
WORK( 1 ) = LWMIN
*
diff --git a/SRC/zhetrd_2stage.f b/SRC/zhetrd_2stage.f
index 7fb9e7167f..c74d95ee7d 100644
--- a/SRC/zhetrd_2stage.f
+++ b/SRC/zhetrd_2stage.f
@@ -253,8 +253,8 @@ SUBROUTINE ZHETRD_2STAGE( VECT, UPLO, N, A, LDA, D, E, TAU,
* ..
* .. External Functions ..
LOGICAL LSAME
- INTEGER ILAENV
- EXTERNAL LSAME, ILAENV
+ INTEGER ILAENV2STAGE
+ EXTERNAL LSAME, ILAENV2STAGE
* ..
* .. Executable Statements ..
*
@@ -267,10 +267,10 @@ SUBROUTINE ZHETRD_2STAGE( VECT, UPLO, N, A, LDA, D, E, TAU,
*
* Determine the block size, the workspace size and the hous size.
*
- KD = ILAENV( 17, 'ZHETRD_2STAGE', VECT, N, -1, -1, -1 )
- IB = ILAENV( 18, 'ZHETRD_2STAGE', VECT, N, KD, -1, -1 )
- LHMIN = ILAENV( 19, 'ZHETRD_2STAGE', VECT, N, KD, IB, -1 )
- LWMIN = ILAENV( 20, 'ZHETRD_2STAGE', VECT, N, KD, IB, -1 )
+ KD = ILAENV2STAGE( 1, 'ZHETRD_2STAGE', VECT, N, -1, -1, -1 )
+ IB = ILAENV2STAGE( 2, 'ZHETRD_2STAGE', VECT, N, KD, -1, -1 )
+ LHMIN = ILAENV2STAGE( 3, 'ZHETRD_2STAGE', VECT, N, KD, IB, -1 )
+ LWMIN = ILAENV2STAGE( 4, 'ZHETRD_2STAGE', VECT, N, KD, IB, -1 )
* WRITE(*,*),'ZHETRD_2STAGE N KD UPLO LHMIN LWMIN ',N, KD, UPLO,
* $ LHMIN, LWMIN
*
diff --git a/TESTING/EIG/ilaenv.f b/TESTING/EIG/ilaenv.f
index 8b741a283f..4551e9bd82 100644
--- a/TESTING/EIG/ilaenv.f
+++ b/TESTING/EIG/ilaenv.f
@@ -250,6 +250,53 @@ INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3,
*
* End of ILAENV
*
+ END
+ INTEGER FUNCTION ILAENV2STAGE( ISPEC, NAME, OPTS, N1, N2,
+ $ N3, N4 )
+* .. Scalar Arguments ..
+ CHARACTER*( * ) NAME, OPTS
+ INTEGER ISPEC, N1, N2, N3, N4
+* ..
+*
+* =====================================================================
+*
+* .. Local variables ..
+ INTEGER IISPEC
+* .. External Functions ..
+ INTEGER IPARAM2STAGE
+ EXTERNAL IPARAM2STAGE
+* ..
+* .. Arrays in Common ..
+ INTEGER IPARMS( 100 )
+* ..
+* .. Common blocks ..
+ COMMON / CLAENV / IPARMS
+* ..
+* .. Save statement ..
+ SAVE / CLAENV /
+* ..
+* .. Executable Statements ..
+*
+ IF(( ISPEC.GE.1 ) .AND. (ISPEC.LE.5)) THEN
+*
+* 1 <= ISPEC <= 5: 2stage eigenvalues SVD routines.
+*
+ IF( ISPEC.EQ.1 ) THEN
+ ILAENV2STAGE = IPARMS( 1 )
+ ELSE
+ IISPEC = 16 + ISPEC
+ ILAENV2STAGE = IPARAM2STAGE( IISPEC, NAME, OPTS,
+ $ N1, N2, N3, N4 )
+ ENDIF
+*
+ ELSE
+*
+* Invalid value for ISPEC
+*
+ ILAENV2STAGE = -1
+ END IF
+*
+ RETURN
END
INTEGER FUNCTION IPARMQ( ISPEC, NAME, OPTS, N, ILO, IHI, LWORK )
*
diff --git a/TESTING/LIN/ilaenv.f b/TESTING/LIN/ilaenv.f
index 657128bc19..532555e7ad 100644
--- a/TESTING/LIN/ilaenv.f
+++ b/TESTING/LIN/ilaenv.f
@@ -244,3 +244,50 @@ INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3,
* End of ILAENV
*
END
+ INTEGER FUNCTION ILAENV2STAGE( ISPEC, NAME, OPTS, N1, N2,
+ $ N3, N4 )
+* .. Scalar Arguments ..
+ CHARACTER*( * ) NAME, OPTS
+ INTEGER ISPEC, N1, N2, N3, N4
+* ..
+*
+* =====================================================================
+*
+* .. Local variables ..
+ INTEGER IISPEC
+* .. External Functions ..
+ INTEGER IPARAM2STAGE
+ EXTERNAL IPARAM2STAGE
+* ..
+* .. Arrays in Common ..
+ INTEGER IPARMS( 100 )
+* ..
+* .. Common blocks ..
+ COMMON / CLAENV / IPARMS
+* ..
+* .. Save statement ..
+ SAVE / CLAENV /
+* ..
+* .. Executable Statements ..
+*
+ IF(( ISPEC.GE.1 ) .AND. (ISPEC.LE.5)) THEN
+*
+* 1 <= ISPEC <= 5: 2stage eigenvalues SVD routines.
+*
+ IF( ISPEC.EQ.1 ) THEN
+ ILAENV2STAGE = IPARMS( 1 )
+ ELSE
+ IISPEC = 16 + ISPEC
+ ILAENV2STAGE = IPARAM2STAGE( IISPEC, NAME, OPTS,
+ $ N1, N2, N3, N4 )
+ ENDIF
+*
+ ELSE
+*
+* Invalid value for ISPEC
+*
+ ILAENV2STAGE = -1
+ END IF
+*
+ RETURN
+ END
diff --git a/make.inc.example b/make.inc.example
index 9aa454dfe1..f114baebbd 100644
--- a/make.inc.example
+++ b/make.inc.example
@@ -20,9 +20,9 @@ CFLAGS = -O3
# should not compile LAPACK with flags such as -ffpe-trap=overflow.
#
FORTRAN = gfortran
-OPTS = -O2 -frecursive
+OPTS = -O2
DRVOPTS = $(OPTS)
-NOOPT = -O0 -frecursive
+NOOPT = -O0
# Define LOADER and LOADOPTS to refer to the loader and desired
# load options for your machine.