summaryrefslogtreecommitdiff
path: root/SRC
diff options
context:
space:
mode:
authorJulien Langou <julien.langou@ucdenver.edu>2016-12-04 16:02:37 +0100
committerJulien Langou <julien.langou@ucdenver.edu>2016-12-04 16:02:37 +0100
commit9f636dabec2dca29f5dacbf2e5b872953c3aaafb (patch)
tree5e81aa2bb4074977f346e8bef3359ae4a4810759 /SRC
parent5c749d8db87b7fb1ad669ee4c017a5b41d1d6edb (diff)
parent490e38c0fb94455efe327feb5e5fc1f3c63b066c (diff)
downloadlapack-9f636dabec2dca29f5dacbf2e5b872953c3aaafb.tar.gz
lapack-9f636dabec2dca29f5dacbf2e5b872953c3aaafb.tar.bz2
lapack-9f636dabec2dca29f5dacbf2e5b872953c3aaafb.zip
Merge branch 'master' of https://github.com/Reference-LAPACK/lapack
Diffstat (limited to 'SRC')
-rw-r--r--SRC/chetrd_hb2st.F39
-rw-r--r--SRC/dsytrd_sb2st.F72
-rw-r--r--SRC/iparam2stage.F278
-rw-r--r--SRC/ssytrd_sb2st.F72
-rw-r--r--SRC/zhetrd_hb2st.F41
5 files changed, 173 insertions, 329 deletions
diff --git a/SRC/chetrd_hb2st.F b/SRC/chetrd_hb2st.F
index 6f253278..c4d44803 100644
--- a/SRC/chetrd_hb2st.F
+++ b/SRC/chetrd_hb2st.F
@@ -1,6 +1,4 @@
-*> \brief \b CHBTRD
-*
-* @generated from zhetrd_hb2st.F, fortran z -> c, Sun Nov 6 19:34:06 2016
+*> \brief \b CHBTRD_HB2ST reduces a complex Hermitian band matrix A to real symmetric tridiagonal form T
*
* =========== DOCUMENTATION ===========
*
@@ -8,12 +6,12 @@
* http://www.netlib.org/lapack/explore-html/
*
*> \htmlonly
-*> Download CHBTRD + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/chbtrd.f">
+*> Download CHBTRD_HB2ST + dependencies
+*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/chbtrd_hb2st.f">
*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/chbtrd.f">
+*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/chbtrd_hb2st.f">
*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chbtrd.f">
+*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chbtrd_hb2st.f">
*> [TXT]</a>
*> \endhtmlonly
*
@@ -23,8 +21,6 @@
* SUBROUTINE CHETRD_HB2ST( STAGE1, VECT, UPLO, N, KD, AB, LDAB,
* D, E, HOUS, LHOUS, WORK, LWORK, INFO )
*
-* #define PRECISION_COMPLEX
-*
* #if defined(_OPENMP)
* use omp_lib
* #endif
@@ -46,7 +42,7 @@
*>
*> \verbatim
*>
-*> CHBTRD reduces a complex Hermitian band matrix A to real symmetric
+*> CHETRD_HB2ST reduces a complex Hermitian band matrix A to real symmetric
*> tridiagonal form T by a unitary similarity transformation:
*> Q**H * A * Q = T.
*> \endverbatim
@@ -234,7 +230,6 @@
SUBROUTINE CHETRD_HB2ST( STAGE1, VECT, UPLO, N, KD, AB, LDAB,
$ D, E, HOUS, LHOUS, WORK, LWORK, INFO )
*
-#define PRECISION_COMPLEX
*
#if defined(_OPENMP)
use omp_lib
@@ -274,10 +269,8 @@
$ ABDPOS, ABOFDPOS, DPOS, OFDPOS, AWPOS,
$ INDA, INDW, APOS, SIZEA, LDA, INDV, INDTAU,
$ SICEV, SIZETAU, LDV, LHMIN, LWMIN
-#if defined (PRECISION_COMPLEX)
REAL ABSTMP
COMPLEX TMP
-#endif
* ..
* .. External Subroutines ..
EXTERNAL CHB2ST_KERNELS, CLACPY, CLASET
@@ -389,7 +382,7 @@
DO 40 I = 1, N-1
E( I ) = RZERO
40 CONTINUE
- GOTO 200
+ RETURN
END IF
*
* Case KD=1:
@@ -402,12 +395,10 @@
* updating the Q matrix will be required and based if Q is generated
* or not this might complicate the story.
*
-C IF( KD.EQ.1 .AND. N.GT.(KD+1) .AND. AFTERS1 ) THEN
IF( KD.EQ.1 ) THEN
DO 50 I = 1, N
D( I ) = REAL( AB( ABDPOS, I ) )
50 CONTINUE
-#if defined (PRECISION_COMPLEX)
*
* make off-diagonal elements real and copy them to E
*
@@ -446,18 +437,7 @@ C CALL CSCAL( N, TMP, Q( 1, I+1 ), 1 )
C END IF
70 CONTINUE
ENDIF
-#else
- IF( UPPER ) THEN
- DO 60 I = 1, N-1
- E( I ) = REAL( AB( ABOFDPOS, I+1 ) )
- 60 CONTINUE
- ELSE
- DO 70 I = 1, N-1
- E( I ) = REAL( AB( ABOFDPOS, I ) )
- 70 CONTINUE
- ENDIF
-#endif
- GOTO 200
+ RETURN
END IF
*
* Main code start here.
@@ -590,8 +570,6 @@ C END IF
170 CONTINUE
ENDIF
*
- 200 CONTINUE
-*
HOUS( 1 ) = LHMIN
WORK( 1 ) = LWMIN
RETURN
@@ -599,5 +577,4 @@ C END IF
* End of CHETRD_HB2ST
*
END
-#undef PRECISION_COMPLEX
diff --git a/SRC/dsytrd_sb2st.F b/SRC/dsytrd_sb2st.F
index d50debe1..6925b525 100644
--- a/SRC/dsytrd_sb2st.F
+++ b/SRC/dsytrd_sb2st.F
@@ -1,6 +1,4 @@
-*> \brief \b DSBTRD
-*
-* @generated from zhetrd_hb2st.F, fortran z -> d, Sun Nov 6 19:34:06 2016
+*> \brief \b DSYTRD_SB2ST reduces a real symmetric band matrix A to real symmetric tridiagonal form T
*
* =========== DOCUMENTATION ===========
*
@@ -8,12 +6,12 @@
* http://www.netlib.org/lapack/explore-html/
*
*> \htmlonly
-*> Download DSBTRD + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dsbtrd.f">
+*> Download DSYTRD_SB2ST + dependencies
+*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dsytrd_sb2st.f">
*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dsbtrd.f">
+*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dsytrd_sb2st.f">
*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbtrd.f">
+*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytrd_sb2st.f">
*> [TXT]</a>
*> \endhtmlonly
*
@@ -23,8 +21,6 @@
* SUBROUTINE DSYTRD_SB2ST( STAGE1, VECT, UPLO, N, KD, AB, LDAB,
* D, E, HOUS, LHOUS, WORK, LWORK, INFO )
*
-* #define PRECISION_REAL
-*
* #if defined(_OPENMP)
* use omp_lib
* #endif
@@ -46,7 +42,7 @@
*>
*> \verbatim
*>
-*> DSBTRD reduces a real symmetric band matrix A to real symmetric
+*> DSYTRD_SB2ST reduces a real symmetric band matrix A to real symmetric
*> tridiagonal form T by a orthogonal similarity transformation:
*> Q**T * A * Q = T.
*> \endverbatim
@@ -234,15 +230,13 @@
SUBROUTINE DSYTRD_SB2ST( STAGE1, VECT, UPLO, N, KD, AB, LDAB,
$ D, E, HOUS, LHOUS, WORK, LWORK, INFO )
*
-#define PRECISION_REAL
-*
#if defined(_OPENMP)
use omp_lib
#endif
*
IMPLICIT NONE
*
-* -- LAPACK computational routine (version 3.4.0) --
+* -- LAPACK computational 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..--
* November 2016
@@ -274,10 +268,6 @@
$ ABDPOS, ABOFDPOS, DPOS, OFDPOS, AWPOS,
$ INDA, INDW, APOS, SIZEA, LDA, INDV, INDTAU,
$ SIDEV, SIZETAU, LDV, LHMIN, LWMIN
-#if defined (PRECISION_COMPLEX)
- DOUBLE PRECISION ABSTMP
- DOUBLE PRECISION TMP
-#endif
* ..
* .. External Subroutines ..
EXTERNAL DSB2ST_KERNELS, DLACPY, DLASET
@@ -389,7 +379,7 @@
DO 40 I = 1, N-1
E( I ) = RZERO
40 CONTINUE
- GOTO 200
+ RETURN
END IF
*
* Case KD=1:
@@ -402,52 +392,12 @@
* updating the Q matrix will be required and based if Q is generated
* or not this might complicate the story.
*
-C IF( KD.EQ.1 .AND. N.GT.(KD+1) .AND. AFTERS1 ) THEN
IF( KD.EQ.1 ) THEN
DO 50 I = 1, N
D( I ) = ( AB( ABDPOS, I ) )
50 CONTINUE
-#if defined (PRECISION_COMPLEX)
-*
-* make off-diagonal elements real and copy them to E
*
IF( UPPER ) THEN
- DO 60 I = 1, N - 1
- TMP = AB( ABOFDPOS, I+1 )
- ABSTMP = ABS( TMP )
- AB( ABOFDPOS, I+1 ) = ABSTMP
- E( I ) = ABSTMP
- IF( ABSTMP.NE.RZERO ) THEN
- TMP = TMP / ABSTMP
- ELSE
- TMP = ONE
- END IF
- IF( I.LT.N-1 )
- $ AB( ABOFDPOS, I+2 ) = AB( ABOFDPOS, I+2 )*TMP
-C IF( WANTZ ) THEN
-C CALL DSCAL( N, ( TMP ), Q( 1, I+1 ), 1 )
-C END IF
- 60 CONTINUE
- ELSE
- DO 70 I = 1, N - 1
- TMP = AB( ABOFDPOS, I )
- ABSTMP = ABS( TMP )
- AB( ABOFDPOS, I ) = ABSTMP
- E( I ) = ABSTMP
- IF( ABSTMP.NE.RZERO ) THEN
- TMP = TMP / ABSTMP
- ELSE
- TMP = ONE
- END IF
- IF( I.LT.N-1 )
- $ AB( ABOFDPOS, I+1 ) = AB( ABOFDPOS, I+1 )*TMP
-C IF( WANTQ ) THEN
-C CALL DSCAL( N, TMP, Q( 1, I+1 ), 1 )
-C END IF
- 70 CONTINUE
- ENDIF
-#else
- IF( UPPER ) THEN
DO 60 I = 1, N-1
E( I ) = ( AB( ABOFDPOS, I+1 ) )
60 CONTINUE
@@ -456,8 +406,7 @@ C END IF
E( I ) = ( AB( ABOFDPOS, I ) )
70 CONTINUE
ENDIF
-#endif
- GOTO 200
+ RETURN
END IF
*
* Main code start here.
@@ -590,8 +539,6 @@ C END IF
170 CONTINUE
ENDIF
*
- 200 CONTINUE
-*
HOUS( 1 ) = LHMIN
WORK( 1 ) = LWMIN
RETURN
@@ -599,5 +546,4 @@ C END IF
* End of DSYTRD_SB2ST
*
END
-#undef PRECISION_REAL
diff --git a/SRC/iparam2stage.F b/SRC/iparam2stage.F
index 6443f16e..e725a0ce 100644
--- a/SRC/iparam2stage.F
+++ b/SRC/iparam2stage.F
@@ -199,132 +199,131 @@
!$OMP END PARALLEL
#endif
* WRITE(*,*) 'IPARAM VOICI NTHREADS ISPEC ',NTHREADS, ISPEC
- IF( ISPEC.EQ.19 ) GOTO 19
*
-* Convert NAME to upper case if the first character is lower case.
-*
- IPARAM2STAGE = -1
- SUBNAM = NAME
- IC = ICHAR( SUBNAM( 1: 1 ) )
- IZ = ICHAR( 'Z' )
- IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN
-*
-* ASCII character set
-*
- IF( IC.GE.97 .AND. IC.LE.122 ) THEN
- SUBNAM( 1: 1 ) = CHAR( IC-32 )
- DO 100 I = 2, 12
- IC = ICHAR( SUBNAM( I: I ) )
- IF( IC.GE.97 .AND. IC.LE.122 )
- $ SUBNAM( I: I ) = CHAR( IC-32 )
- 100 CONTINUE
+ IF( ISPEC .NE. 19 ) THEN
+*
+* Convert NAME to upper case if the first character is lower case.
+*
+ IPARAM2STAGE = -1
+ SUBNAM = NAME
+ IC = ICHAR( SUBNAM( 1: 1 ) )
+ IZ = ICHAR( 'Z' )
+ IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN
+*
+* ASCII character set
+*
+ IF( IC.GE.97 .AND. IC.LE.122 ) THEN
+ SUBNAM( 1: 1 ) = CHAR( IC-32 )
+ DO 100 I = 2, 12
+ IC = ICHAR( SUBNAM( I: I ) )
+ IF( IC.GE.97 .AND. IC.LE.122 )
+ $ SUBNAM( I: I ) = CHAR( IC-32 )
+ 100 CONTINUE
+ END IF
+*
+ ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN
+*
+* EBCDIC character set
+*
+ IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
+ $ ( IC.GE.145 .AND. IC.LE.153 ) .OR.
+ $ ( IC.GE.162 .AND. IC.LE.169 ) ) THEN
+ SUBNAM( 1: 1 ) = CHAR( IC+64 )
+ DO 110 I = 2, 12
+ IC = ICHAR( SUBNAM( I: I ) )
+ IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
+ $ ( IC.GE.145 .AND. IC.LE.153 ) .OR.
+ $ ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I:
+ $ I ) = CHAR( IC+64 )
+ 110 CONTINUE
+ END IF
+*
+ ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN
+*
+* Prime machines: ASCII+128
+*
+ IF( IC.GE.225 .AND. IC.LE.250 ) THEN
+ SUBNAM( 1: 1 ) = CHAR( IC-32 )
+ DO 120 I = 2, 12
+ IC = ICHAR( SUBNAM( I: I ) )
+ IF( IC.GE.225 .AND. IC.LE.250 )
+ $ SUBNAM( I: I ) = CHAR( IC-32 )
+ 120 CONTINUE
+ END IF
END IF
*
- ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN
-*
-* EBCDIC character set
-*
- IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
- $ ( IC.GE.145 .AND. IC.LE.153 ) .OR.
- $ ( IC.GE.162 .AND. IC.LE.169 ) ) THEN
- SUBNAM( 1: 1 ) = CHAR( IC+64 )
- DO 110 I = 2, 12
- IC = ICHAR( SUBNAM( I: I ) )
- IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR.
- $ ( IC.GE.145 .AND. IC.LE.153 ) .OR.
- $ ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I:
- $ I ) = CHAR( IC+64 )
- 110 CONTINUE
- END IF
-*
- ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN
-*
-* Prime machines: ASCII+128
+ PREC = SUBNAM( 1: 1 )
+ ALGO = SUBNAM( 4: 6 )
+ STAG = SUBNAM( 8:12 )
+ RPREC = PREC.EQ.'S' .OR. PREC.EQ.'D'
+ CPREC = PREC.EQ.'C' .OR. PREC.EQ.'Z'
*
- IF( IC.GE.225 .AND. IC.LE.250 ) THEN
- SUBNAM( 1: 1 ) = CHAR( IC-32 )
- DO 120 I = 2, 12
- IC = ICHAR( SUBNAM( I: I ) )
- IF( IC.GE.225 .AND. IC.LE.250 )
- $ SUBNAM( I: I ) = CHAR( IC-32 )
- 120 CONTINUE
- END IF
- END IF
-*
- PREC = SUBNAM( 1: 1 )
- ALGO = SUBNAM( 4: 6 )
- STAG = SUBNAM( 8:12 )
- RPREC = PREC.EQ.'S' .OR. PREC.EQ.'D'
- CPREC = PREC.EQ.'C' .OR. PREC.EQ.'Z'
-*
-* Invalid value for PRECISION
+* Invalid value for PRECISION
*
- IF( .NOT.( RPREC .OR. CPREC ) ) THEN
- IPARAM2STAGE = -1
- RETURN
+ IF( .NOT.( RPREC .OR. CPREC ) ) THEN
+ IPARAM2STAGE = -1
+ RETURN
+ ENDIF
ENDIF
* WRITE(*,*),'RPREC,CPREC ',RPREC,CPREC,
* $ ' ALGO ',ALGO,' STAGE ',STAG
*
- GO TO ( 17, 17, 19, 20, 21 ) ISPEC-16
*
- 17 CONTINUE
+ IF (( ISPEC .EQ. 17 ) .OR. ( ISPEC .EQ. 18 )) THEN
*
* ISPEC = 17, 18: block size KD, IB
* Could be also dependent from N but for now it
* depend only on sequential or parallel
*
- IF( NTHREADS.GT.4 ) THEN
- IF( CPREC ) THEN
- KD = 128
- IB = 32
- ELSE
- KD = 160
- IB = 40
- ENDIF
- ELSE IF( NTHREADS.GT.1 ) THEN
- IF( CPREC ) THEN
- KD = 64
- IB = 32
- ELSE
- KD = 64
- IB = 32
- ENDIF
- ELSE
- IF( CPREC ) THEN
- KD = 16
- IB = 16
- ELSE
- KD = 32
- IB = 16
- ENDIF
- ENDIF
- IF( ISPEC.EQ.17 ) IPARAM2STAGE = KD
- IF( ISPEC.EQ.18 ) IPARAM2STAGE = IB
- RETURN
-*
- 19 CONTINUE
+ IF( NTHREADS.GT.4 ) THEN
+ IF( CPREC ) THEN
+ KD = 128
+ IB = 32
+ ELSE
+ KD = 160
+ IB = 40
+ ENDIF
+ ELSE IF( NTHREADS.GT.1 ) THEN
+ IF( CPREC ) THEN
+ KD = 64
+ IB = 32
+ ELSE
+ KD = 64
+ IB = 32
+ ENDIF
+ ELSE
+ IF( CPREC ) THEN
+ KD = 16
+ IB = 16
+ ELSE
+ KD = 32
+ IB = 16
+ ENDIF
+ ENDIF
+ IF( ISPEC.EQ.17 ) IPARAM2STAGE = KD
+ IF( ISPEC.EQ.18 ) IPARAM2STAGE = IB
+*
+ ELSE IF ( ISPEC .EQ. 19 ) THEN
*
* ISPEC = 19:
* LHOUS length of the Houselholder representation
* matrix (V,T) of the second stage. should be >= 1.
*
* Will add the VECT OPTION HERE next release
- VECT = OPTS(1:1)
- IF( VECT.EQ.'N' ) THEN
- LHOUS = MAX( 1, 4*NI )
- ELSE
-* This is not correct, it need to call the ALGO and the stage2
- LHOUS = MAX( 1, 4*NI ) + IBI
- ENDIF
- IF( LHOUS.GE.0 ) THEN
- IPARAM2STAGE = LHOUS
- ELSE
- IPARAM2STAGE = -1
- ENDIF
- RETURN
-*
- 20 CONTINUE
+ VECT = OPTS(1:1)
+ IF( VECT.EQ.'N' ) THEN
+ LHOUS = MAX( 1, 4*NI )
+ ELSE
+* This is not correct, it need to call the ALGO and the stage2
+ LHOUS = MAX( 1, 4*NI ) + IBI
+ ENDIF
+ IF( LHOUS.GE.0 ) THEN
+ IPARAM2STAGE = LHOUS
+ ELSE
+ IPARAM2STAGE = -1
+ ENDIF
+*
+ ELSE IF ( ISPEC .EQ. 20 ) THEN
*
* ISPEC = 20: (21 for future use)
* LWORK length of the workspace for
@@ -339,49 +338,48 @@
* = N*KD + N*max(KD+1,FACTOPTNB)
* + max(2*KD*KD, KD*NTHREADS)
* + (KD+1)*N
- LWORK = -1
- SUBNAM(1:1) = PREC
- SUBNAM(2:6) = 'GEQRF'
- QROPTNB = ILAENV( 1, SUBNAM, ' ', NI, NBI, -1, -1 )
- SUBNAM(2:6) = 'GELQF'
- LQOPTNB = ILAENV( 1, SUBNAM, ' ', NBI, NI, -1, -1 )
-* Could be QR or LQ for TRD and the max for BRD
- FACTOPTNB = MAX(QROPTNB, LQOPTNB)
- IF( ALGO.EQ.'TRD' ) THEN
- IF( STAG.EQ.'2STAG' ) THEN
- LWORK = NI*NBI + NI*MAX(NBI+1,FACTOPTNB)
+ LWORK = -1
+ SUBNAM(1:1) = PREC
+ SUBNAM(2:6) = 'GEQRF'
+ QROPTNB = ILAENV( 1, SUBNAM, ' ', NI, NBI, -1, -1 )
+ SUBNAM(2:6) = 'GELQF'
+ LQOPTNB = ILAENV( 1, SUBNAM, ' ', NBI, NI, -1, -1 )
+* Could be QR or LQ for TRD and the max for BRD
+ FACTOPTNB = MAX(QROPTNB, LQOPTNB)
+ IF( ALGO.EQ.'TRD' ) THEN
+ IF( STAG.EQ.'2STAG' ) THEN
+ LWORK = NI*NBI + NI*MAX(NBI+1,FACTOPTNB)
$ + MAX(2*NBI*NBI, NBI*NTHREADS)
$ + (NBI+1)*NI
- ELSE IF( (STAG.EQ.'HE2HB').OR.(STAG.EQ.'SY2SB') ) THEN
- LWORK = NI*NBI + NI*MAX(NBI,FACTOPTNB) + 2*NBI*NBI
- ELSE IF( (STAG.EQ.'HB2ST').OR.(STAG.EQ.'SB2ST') ) THEN
- LWORK = (2*NBI+1)*NI + NBI*NTHREADS
- ENDIF
- ELSE IF( ALGO.EQ.'BRD' ) THEN
- IF( STAG.EQ.'2STAG' ) THEN
- LWORK = 2*NI*NBI + NI*MAX(NBI+1,FACTOPTNB)
+ ELSE IF( (STAG.EQ.'HE2HB').OR.(STAG.EQ.'SY2SB') ) THEN
+ LWORK = NI*NBI + NI*MAX(NBI,FACTOPTNB) + 2*NBI*NBI
+ ELSE IF( (STAG.EQ.'HB2ST').OR.(STAG.EQ.'SB2ST') ) THEN
+ LWORK = (2*NBI+1)*NI + NBI*NTHREADS
+ ENDIF
+ ELSE IF( ALGO.EQ.'BRD' ) THEN
+ IF( STAG.EQ.'2STAG' ) THEN
+ LWORK = 2*NI*NBI + NI*MAX(NBI+1,FACTOPTNB)
$ + MAX(2*NBI*NBI, NBI*NTHREADS)
$ + (NBI+1)*NI
- ELSE IF( STAG.EQ.'GE2GB' ) THEN
- LWORK = NI*NBI + NI*MAX(NBI,FACTOPTNB) + 2*NBI*NBI
- ELSE IF( STAG.EQ.'GB2BD' ) THEN
- LWORK = (3*NBI+1)*NI + NBI*NTHREADS
- ENDIF
- ENDIF
- LWORK = MAX ( 1, LWORK )
+ ELSE IF( STAG.EQ.'GE2GB' ) THEN
+ LWORK = NI*NBI + NI*MAX(NBI,FACTOPTNB) + 2*NBI*NBI
+ ELSE IF( STAG.EQ.'GB2BD' ) THEN
+ LWORK = (3*NBI+1)*NI + NBI*NTHREADS
+ ENDIF
+ ENDIF
+ LWORK = MAX ( 1, LWORK )
- IF( LWORK.GT.0 ) THEN
- IPARAM2STAGE = LWORK
- ELSE
- IPARAM2STAGE = -1
- ENDIF
- RETURN
+ IF( LWORK.GT.0 ) THEN
+ IPARAM2STAGE = LWORK
+ ELSE
+ IPARAM2STAGE = -1
+ ENDIF
*
- 21 CONTINUE
+ ELSE IF ( ISPEC .EQ. 21 ) THEN
*
* ISPEC = 21 for future use
- IPARAM2STAGE = NXI
- RETURN
+ IPARAM2STAGE = NXI
+ ENDIF
*
* ==== End of IPARAM2STAGE ====
*
diff --git a/SRC/ssytrd_sb2st.F b/SRC/ssytrd_sb2st.F
index edbcf125..b3e5d69c 100644
--- a/SRC/ssytrd_sb2st.F
+++ b/SRC/ssytrd_sb2st.F
@@ -1,6 +1,4 @@
-*> \brief \b SSBTRD
-*
-* @generated from zhetrd_hb2st.F, fortran z -> s, Sun Nov 6 19:34:06 2016
+*> \brief \b SSYTRD_SB2ST reduces a real symmetric band matrix A to real symmetric tridiagonal form T
*
* =========== DOCUMENTATION ===========
*
@@ -8,12 +6,12 @@
* http://www.netlib.org/lapack/explore-html/
*
*> \htmlonly
-*> Download SSBTRD + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/ssbtrd.f">
+*> Download SSYTRD_SB2ST + dependencies
+*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/ssytrd_sb2t.f">
*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/ssbtrd.f">
+*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/ssytrd_sb2t.f">
*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssbtrd.f">
+*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ssytrd_sb2t.f">
*> [TXT]</a>
*> \endhtmlonly
*
@@ -23,8 +21,6 @@
* SUBROUTINE SSYTRD_SB2ST( STAGE1, VECT, UPLO, N, KD, AB, LDAB,
* D, E, HOUS, LHOUS, WORK, LWORK, INFO )
*
-* #define PRECISION_REAL
-*
* #if defined(_OPENMP)
* use omp_lib
* #endif
@@ -46,7 +42,7 @@
*>
*> \verbatim
*>
-*> SSBTRD reduces a real symmetric band matrix A to real symmetric
+*> SSYTRD_SB2ST reduces a real symmetric band matrix A to real symmetric
*> tridiagonal form T by a orthogonal similarity transformation:
*> Q**T * A * Q = T.
*> \endverbatim
@@ -234,15 +230,13 @@
SUBROUTINE SSYTRD_SB2ST( STAGE1, VECT, UPLO, N, KD, AB, LDAB,
$ D, E, HOUS, LHOUS, WORK, LWORK, INFO )
*
-#define PRECISION_REAL
-*
#if defined(_OPENMP)
use omp_lib
#endif
*
IMPLICIT NONE
*
-* -- LAPACK computational routine (version 3.4.0) --
+* -- LAPACK computational 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..--
* November 2016
@@ -274,10 +268,6 @@
$ ABDPOS, ABOFDPOS, DPOS, OFDPOS, AWPOS,
$ INDA, INDW, APOS, SIZEA, LDA, INDV, INDTAU,
$ SISEV, SIZETAU, LDV, LHMIN, LWMIN
-#if defined (PRECISION_COMPLEX)
- REAL ABSTMP
- REAL TMP
-#endif
* ..
* .. External Subroutines ..
EXTERNAL SSB2ST_KERNELS, SLACPY, SLASET
@@ -389,7 +379,7 @@
DO 40 I = 1, N-1
E( I ) = RZERO
40 CONTINUE
- GOTO 200
+ RETURN
END IF
*
* Case KD=1:
@@ -402,52 +392,12 @@
* updating the Q matrix will be required and based if Q is generated
* or not this might complicate the story.
*
-C IF( KD.EQ.1 .AND. N.GT.(KD+1) .AND. AFTERS1 ) THEN
IF( KD.EQ.1 ) THEN
DO 50 I = 1, N
D( I ) = ( AB( ABDPOS, I ) )
50 CONTINUE
-#if defined (PRECISION_COMPLEX)
-*
-* make off-diagonal elements real and copy them to E
*
IF( UPPER ) THEN
- DO 60 I = 1, N - 1
- TMP = AB( ABOFDPOS, I+1 )
- ABSTMP = ABS( TMP )
- AB( ABOFDPOS, I+1 ) = ABSTMP
- E( I ) = ABSTMP
- IF( ABSTMP.NE.RZERO ) THEN
- TMP = TMP / ABSTMP
- ELSE
- TMP = ONE
- END IF
- IF( I.LT.N-1 )
- $ AB( ABOFDPOS, I+2 ) = AB( ABOFDPOS, I+2 )*TMP
-C IF( WANTZ ) THEN
-C CALL SSCAL( N, ( TMP ), Q( 1, I+1 ), 1 )
-C END IF
- 60 CONTINUE
- ELSE
- DO 70 I = 1, N - 1
- TMP = AB( ABOFDPOS, I )
- ABSTMP = ABS( TMP )
- AB( ABOFDPOS, I ) = ABSTMP
- E( I ) = ABSTMP
- IF( ABSTMP.NE.RZERO ) THEN
- TMP = TMP / ABSTMP
- ELSE
- TMP = ONE
- END IF
- IF( I.LT.N-1 )
- $ AB( ABOFDPOS, I+1 ) = AB( ABOFDPOS, I+1 )*TMP
-C IF( WANTQ ) THEN
-C CALL SSCAL( N, TMP, Q( 1, I+1 ), 1 )
-C END IF
- 70 CONTINUE
- ENDIF
-#else
- IF( UPPER ) THEN
DO 60 I = 1, N-1
E( I ) = ( AB( ABOFDPOS, I+1 ) )
60 CONTINUE
@@ -456,8 +406,7 @@ C END IF
E( I ) = ( AB( ABOFDPOS, I ) )
70 CONTINUE
ENDIF
-#endif
- GOTO 200
+ RETURN
END IF
*
* Main code start here.
@@ -590,8 +539,6 @@ C END IF
170 CONTINUE
ENDIF
*
- 200 CONTINUE
-*
HOUS( 1 ) = LHMIN
WORK( 1 ) = LWMIN
RETURN
@@ -599,5 +546,4 @@ C END IF
* End of SSYTRD_SB2ST
*
END
-#undef PRECISION_REAL
diff --git a/SRC/zhetrd_hb2st.F b/SRC/zhetrd_hb2st.F
index 5d62e30d..71419481 100644
--- a/SRC/zhetrd_hb2st.F
+++ b/SRC/zhetrd_hb2st.F
@@ -1,6 +1,4 @@
-*> \brief \b ZHBTRD
-*
-* @precisions fortran z -> s d c
+*> \brief \b ZHETRD_HB2ST reduces a complex Hermitian band matrix A to real symmetric tridiagonal form T
*
* =========== DOCUMENTATION ===========
*
@@ -8,12 +6,12 @@
* http://www.netlib.org/lapack/explore-html/
*
*> \htmlonly
-*> Download ZHBTRD + dependencies
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zhbtrd.f">
+*> Download ZHETRD_HB2ST + dependencies
+*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zhbtrd_hb2st.f">
*> [TGZ]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zhbtrd.f">
+*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zhbtrd_hb2st.f">
*> [ZIP]</a>
-*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhbtrd.f">
+*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhbtrd_hb2st.f">
*> [TXT]</a>
*> \endhtmlonly
*
@@ -23,8 +21,6 @@
* SUBROUTINE ZHETRD_HB2ST( STAGE1, VECT, UPLO, N, KD, AB, LDAB,
* D, E, HOUS, LHOUS, WORK, LWORK, INFO )
*
-* #define PRECISION_COMPLEX
-*
* #if defined(_OPENMP)
* use omp_lib
* #endif
@@ -46,7 +42,7 @@
*>
*> \verbatim
*>
-*> ZHBTRD reduces a complex Hermitian band matrix A to real symmetric
+*> ZHETRD_HB2ST reduces a complex Hermitian band matrix A to real symmetric
*> tridiagonal form T by a unitary similarity transformation:
*> Q**H * A * Q = T.
*> \endverbatim
@@ -234,7 +230,6 @@
SUBROUTINE ZHETRD_HB2ST( STAGE1, VECT, UPLO, N, KD, AB, LDAB,
$ D, E, HOUS, LHOUS, WORK, LWORK, INFO )
*
-#define PRECISION_COMPLEX
*
#if defined(_OPENMP)
use omp_lib
@@ -242,7 +237,7 @@
*
IMPLICIT NONE
*
-* -- LAPACK computational routine (version 3.4.0) --
+* -- LAPACK computational 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..--
* November 2016
@@ -274,10 +269,8 @@
$ ABDPOS, ABOFDPOS, DPOS, OFDPOS, AWPOS,
$ INDA, INDW, APOS, SIZEA, LDA, INDV, INDTAU,
$ SIZEV, SIZETAU, LDV, LHMIN, LWMIN
-#if defined (PRECISION_COMPLEX)
DOUBLE PRECISION ABSTMP
COMPLEX*16 TMP
-#endif
* ..
* .. External Subroutines ..
EXTERNAL ZHB2ST_KERNELS, ZLACPY, ZLASET
@@ -389,7 +382,7 @@
DO 40 I = 1, N-1
E( I ) = RZERO
40 CONTINUE
- GOTO 200
+ RETURN
END IF
*
* Case KD=1:
@@ -402,12 +395,10 @@
* updating the Q matrix will be required and based if Q is generated
* or not this might complicate the story.
*
-C IF( KD.EQ.1 .AND. N.GT.(KD+1) .AND. AFTERS1 ) THEN
IF( KD.EQ.1 ) THEN
DO 50 I = 1, N
D( I ) = DBLE( AB( ABDPOS, I ) )
50 CONTINUE
-#if defined (PRECISION_COMPLEX)
*
* make off-diagonal elements real and copy them to E
*
@@ -446,18 +437,7 @@ C CALL ZSCAL( N, TMP, Q( 1, I+1 ), 1 )
C END IF
70 CONTINUE
ENDIF
-#else
- IF( UPPER ) THEN
- DO 60 I = 1, N-1
- E( I ) = DBLE( AB( ABOFDPOS, I+1 ) )
- 60 CONTINUE
- ELSE
- DO 70 I = 1, N-1
- E( I ) = DBLE( AB( ABOFDPOS, I ) )
- 70 CONTINUE
- ENDIF
-#endif
- GOTO 200
+ RETURN
END IF
*
* Main code start here.
@@ -590,8 +570,6 @@ C END IF
170 CONTINUE
ENDIF
*
- 200 CONTINUE
-*
HOUS( 1 ) = LHMIN
WORK( 1 ) = LWMIN
RETURN
@@ -599,5 +577,4 @@ C END IF
* End of ZHETRD_HB2ST
*
END
-#undef PRECISION_COMPLEX