diff options
author | Julien Langou <julien.langou@ucdenver.edu> | 2016-12-04 16:02:37 +0100 |
---|---|---|
committer | Julien Langou <julien.langou@ucdenver.edu> | 2016-12-04 16:02:37 +0100 |
commit | 9f636dabec2dca29f5dacbf2e5b872953c3aaafb (patch) | |
tree | 5e81aa2bb4074977f346e8bef3359ae4a4810759 /SRC | |
parent | 5c749d8db87b7fb1ad669ee4c017a5b41d1d6edb (diff) | |
parent | 490e38c0fb94455efe327feb5e5fc1f3c63b066c (diff) | |
download | lapack-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.F | 39 | ||||
-rw-r--r-- | SRC/dsytrd_sb2st.F | 72 | ||||
-rw-r--r-- | SRC/iparam2stage.F | 278 | ||||
-rw-r--r-- | SRC/ssytrd_sb2st.F | 72 | ||||
-rw-r--r-- | SRC/zhetrd_hb2st.F | 41 |
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 |