Apply ROUNDUP_LWORK (Reference-LAPACK PR 904)

This commit is contained in:
Martin Kroeker 2023-11-12 13:56:06 +01:00 committed by GitHub
parent 225036fd92
commit c9378badd9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
46 changed files with 334 additions and 317 deletions

View File

@ -189,7 +189,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexGEeigen *> \ingroup gees
* *
* ===================================================================== * =====================================================================
SUBROUTINE CGEES( JOBVS, SORT, SELECT, N, A, LDA, SDIM, W, VS, SUBROUTINE CGEES( JOBVS, SORT, SELECT, N, A, LDA, SDIM, W, VS,
@ -230,13 +230,13 @@
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL CCOPY, CGEBAK, CGEBAL, CGEHRD, CHSEQR, CLACPY, EXTERNAL CCOPY, CGEBAK, CGEBAL, CGEHRD, CHSEQR, CLACPY,
$ CLASCL, CTRSEN, CUNGHR, SLABAD, XERBLA $ CLASCL, CTRSEN, CUNGHR, XERBLA
* .. * ..
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV INTEGER ILAENV
REAL CLANGE, SLAMCH REAL CLANGE, SLAMCH, SROUNDUP_LWORK
EXTERNAL LSAME, ILAENV, CLANGE, SLAMCH EXTERNAL LSAME, ILAENV, CLANGE, SLAMCH, SROUNDUP_LWORK
* .. * ..
* .. Intrinsic Functions .. * .. Intrinsic Functions ..
INTRINSIC MAX, SQRT INTRINSIC MAX, SQRT
@ -292,7 +292,7 @@
MAXWRK = MAX( MAXWRK, HSWORK ) MAXWRK = MAX( MAXWRK, HSWORK )
END IF END IF
END IF END IF
WORK( 1 ) = MAXWRK WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
* *
IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN
INFO = -12 INFO = -12
@ -318,7 +318,6 @@
EPS = SLAMCH( 'P' ) EPS = SLAMCH( 'P' )
SMLNUM = SLAMCH( 'S' ) SMLNUM = SLAMCH( 'S' )
BIGNUM = ONE / SMLNUM BIGNUM = ONE / SMLNUM
CALL SLABAD( SMLNUM, BIGNUM )
SMLNUM = SQRT( SMLNUM ) / EPS SMLNUM = SQRT( SMLNUM ) / EPS
BIGNUM = ONE / SMLNUM BIGNUM = ONE / SMLNUM
* *
@ -413,7 +412,7 @@
CALL CCOPY( N, A, LDA+1, W, 1 ) CALL CCOPY( N, A, LDA+1, W, 1 )
END IF END IF
* *
WORK( 1 ) = MAXWRK WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
RETURN RETURN
* *
* End of CGEES * End of CGEES

View File

@ -230,7 +230,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexGEeigen *> \ingroup geesx
* *
* ===================================================================== * =====================================================================
SUBROUTINE CGEESX( JOBVS, SORT, SELECT, SENSE, N, A, LDA, SDIM, W, SUBROUTINE CGEESX( JOBVS, SORT, SELECT, SENSE, N, A, LDA, SDIM, W,
@ -274,13 +274,13 @@
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL CCOPY, CGEBAK, CGEBAL, CGEHRD, CHSEQR, CLACPY, EXTERNAL CCOPY, CGEBAK, CGEBAL, CGEHRD, CHSEQR, CLACPY,
$ CLASCL, CTRSEN, CUNGHR, SLABAD, SLASCL, XERBLA $ CLASCL, CTRSEN, CUNGHR, SLASCL, XERBLA
* .. * ..
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV INTEGER ILAENV
REAL CLANGE, SLAMCH REAL CLANGE, SLAMCH, SROUNDUP_LWORK
EXTERNAL LSAME, ILAENV, CLANGE, SLAMCH EXTERNAL LSAME, ILAENV, CLANGE, SLAMCH, SROUNDUP_LWORK
* .. * ..
* .. Intrinsic Functions .. * .. Intrinsic Functions ..
INTRINSIC MAX, SQRT INTRINSIC MAX, SQRT
@ -350,7 +350,7 @@
IF( .NOT.WANTSN ) IF( .NOT.WANTSN )
$ LWRK = MAX( LWRK, ( N*N )/2 ) $ LWRK = MAX( LWRK, ( N*N )/2 )
END IF END IF
WORK( 1 ) = LWRK WORK( 1 ) = SROUNDUP_LWORK(LWRK)
* *
IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN
INFO = -15 INFO = -15
@ -376,7 +376,6 @@
EPS = SLAMCH( 'P' ) EPS = SLAMCH( 'P' )
SMLNUM = SLAMCH( 'S' ) SMLNUM = SLAMCH( 'S' )
BIGNUM = ONE / SMLNUM BIGNUM = ONE / SMLNUM
CALL SLABAD( SMLNUM, BIGNUM )
SMLNUM = SQRT( SMLNUM ) / EPS SMLNUM = SQRT( SMLNUM ) / EPS
BIGNUM = ONE / SMLNUM BIGNUM = ONE / SMLNUM
* *
@ -488,7 +487,7 @@
END IF END IF
END IF END IF
* *
WORK( 1 ) = MAXWRK WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
RETURN RETURN
* *
* End of CGEESX * End of CGEESX

View File

@ -172,7 +172,7 @@
* *
* @generated from zgeev.f, fortran z -> c, Tue Apr 19 01:47:44 2016 * @generated from zgeev.f, fortran z -> c, Tue Apr 19 01:47:44 2016
* *
*> \ingroup complexGEeigen *> \ingroup geev
* *
* ===================================================================== * =====================================================================
SUBROUTINE CGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR, LDVR, SUBROUTINE CGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR, LDVR,
@ -212,14 +212,15 @@
REAL DUM( 1 ) REAL DUM( 1 )
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL SLABAD, XERBLA, CSSCAL, CGEBAK, CGEBAL, CGEHRD, EXTERNAL XERBLA, CSSCAL, CGEBAK, CGEBAL, CGEHRD,
$ CHSEQR, CLACPY, CLASCL, CSCAL, CTREVC3, CUNGHR $ CHSEQR, CLACPY, CLASCL, CSCAL, CTREVC3, CUNGHR
* .. * ..
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ISAMAX, ILAENV INTEGER ISAMAX, ILAENV
REAL SLAMCH, SCNRM2, CLANGE REAL SLAMCH, SCNRM2, CLANGE, SROUNDUP_LWORK
EXTERNAL LSAME, ISAMAX, ILAENV, SLAMCH, SCNRM2, CLANGE EXTERNAL LSAME, ISAMAX, ILAENV, SLAMCH, SCNRM2, CLANGE,
$ SROUNDUP_LWORK
* .. * ..
* .. Intrinsic Functions .. * .. Intrinsic Functions ..
INTRINSIC REAL, CMPLX, CONJG, AIMAG, MAX, SQRT INTRINSIC REAL, CMPLX, CONJG, AIMAG, MAX, SQRT
@ -291,7 +292,7 @@
HSWORK = INT( WORK(1) ) HSWORK = INT( WORK(1) )
MAXWRK = MAX( MAXWRK, HSWORK, MINWRK ) MAXWRK = MAX( MAXWRK, HSWORK, MINWRK )
END IF END IF
WORK( 1 ) = MAXWRK WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
* *
IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN
INFO = -12 INFO = -12
@ -315,7 +316,6 @@
EPS = SLAMCH( 'P' ) EPS = SLAMCH( 'P' )
SMLNUM = SLAMCH( 'S' ) SMLNUM = SLAMCH( 'S' )
BIGNUM = ONE / SMLNUM BIGNUM = ONE / SMLNUM
CALL SLABAD( SMLNUM, BIGNUM )
SMLNUM = SQRT( SMLNUM ) / EPS SMLNUM = SQRT( SMLNUM ) / EPS
BIGNUM = ONE / SMLNUM BIGNUM = ONE / SMLNUM
* *
@ -493,7 +493,7 @@
END IF END IF
END IF END IF
* *
WORK( 1 ) = MAXWRK WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
RETURN RETURN
* *
* End of CGEEV * End of CGEEV

View File

@ -279,7 +279,7 @@
* *
* @generated from zgeevx.f, fortran z -> c, Tue Apr 19 01:47:44 2016 * @generated from zgeevx.f, fortran z -> c, Tue Apr 19 01:47:44 2016
* *
*> \ingroup complexGEeigen *> \ingroup geevx
* *
* ===================================================================== * =====================================================================
SUBROUTINE CGEEVX( BALANC, JOBVL, JOBVR, SENSE, N, A, LDA, W, VL, SUBROUTINE CGEEVX( BALANC, JOBVL, JOBVR, SENSE, N, A, LDA, W, VL,
@ -323,15 +323,16 @@
REAL DUM( 1 ) REAL DUM( 1 )
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL SLABAD, SLASCL, XERBLA, CSSCAL, CGEBAK, CGEBAL, EXTERNAL SLASCL, XERBLA, CSSCAL, CGEBAK, CGEBAL,
$ CGEHRD, CHSEQR, CLACPY, CLASCL, CSCAL, CTREVC3, $ CGEHRD, CHSEQR, CLACPY, CLASCL, CSCAL, CTREVC3,
$ CTRSNA, CUNGHR $ CTRSNA, CUNGHR
* .. * ..
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ISAMAX, ILAENV INTEGER ISAMAX, ILAENV
REAL SLAMCH, SCNRM2, CLANGE REAL SLAMCH, SCNRM2, CLANGE, SROUNDUP_LWORK
EXTERNAL LSAME, ISAMAX, ILAENV, SLAMCH, SCNRM2, CLANGE EXTERNAL LSAME, ISAMAX, ILAENV, SLAMCH, SCNRM2, CLANGE,
$ SROUNDUP_LWORK
* .. * ..
* .. Intrinsic Functions .. * .. Intrinsic Functions ..
INTRINSIC REAL, CMPLX, CONJG, AIMAG, MAX, SQRT INTRINSIC REAL, CMPLX, CONJG, AIMAG, MAX, SQRT
@ -434,7 +435,7 @@
END IF END IF
MAXWRK = MAX( MAXWRK, MINWRK ) MAXWRK = MAX( MAXWRK, MINWRK )
END IF END IF
WORK( 1 ) = MAXWRK WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
* *
IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN
INFO = -20 INFO = -20
@ -458,7 +459,6 @@
EPS = SLAMCH( 'P' ) EPS = SLAMCH( 'P' )
SMLNUM = SLAMCH( 'S' ) SMLNUM = SLAMCH( 'S' )
BIGNUM = ONE / SMLNUM BIGNUM = ONE / SMLNUM
CALL SLABAD( SMLNUM, BIGNUM )
SMLNUM = SQRT( SMLNUM ) / EPS SMLNUM = SQRT( SMLNUM ) / EPS
BIGNUM = ONE / SMLNUM BIGNUM = ONE / SMLNUM
* *
@ -657,7 +657,7 @@
END IF END IF
END IF END IF
* *
WORK( 1 ) = MAXWRK WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
RETURN RETURN
* *
* End of CGEEVX * End of CGEEVX

View File

@ -120,7 +120,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexGEcomputational *> \ingroup gehrd
* *
*> \par Further Details: *> \par Further Details:
* ===================== * =====================
@ -201,7 +201,8 @@
* .. * ..
* .. External Functions .. * .. External Functions ..
INTEGER ILAENV INTEGER ILAENV
EXTERNAL ILAENV REAL SROUNDUP_LWORK
EXTERNAL ILAENV, SROUNDUP_LWORK
* .. * ..
* .. Executable Statements .. * .. Executable Statements ..
* *
@ -227,7 +228,7 @@
* *
NB = MIN( NBMAX, ILAENV( 1, 'CGEHRD', ' ', N, ILO, IHI, -1 ) ) NB = MIN( NBMAX, ILAENV( 1, 'CGEHRD', ' ', N, ILO, IHI, -1 ) )
LWKOPT = N*NB + TSIZE LWKOPT = N*NB + TSIZE
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
END IF END IF
* *
IF( INFO.NE.0 ) THEN IF( INFO.NE.0 ) THEN
@ -344,7 +345,7 @@
* Use unblocked code to reduce the rest of the matrix * Use unblocked code to reduce the rest of the matrix
* *
CALL CGEHD2( N, I, IHI, A, LDA, TAU, WORK, IINFO ) CALL CGEHD2( N, I, IHI, A, LDA, TAU, WORK, IINFO )
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
RETURN RETURN
* *

View File

@ -166,6 +166,8 @@
*> the LQ factorization. *> the LQ factorization.
*> \endverbatim *> \endverbatim
*> *>
*> \ingroup gelq
*>
* ===================================================================== * =====================================================================
SUBROUTINE CGELQ( M, N, A, LDA, T, TSIZE, WORK, LWORK, SUBROUTINE CGELQ( M, N, A, LDA, T, TSIZE, WORK, LWORK,
$ INFO ) $ INFO )
@ -190,7 +192,8 @@
* .. * ..
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
EXTERNAL LSAME REAL SROUNDUP_LWORK
EXTERNAL LSAME, SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL CGELQT, CLASWLQ, XERBLA EXTERNAL CGELQT, CLASWLQ, XERBLA
@ -292,9 +295,9 @@
T( 2 ) = MB T( 2 ) = MB
T( 3 ) = NB T( 3 ) = NB
IF( MINW ) THEN IF( MINW ) THEN
WORK( 1 ) = LWMIN WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
ELSE ELSE
WORK( 1 ) = LWREQ WORK( 1 ) = SROUNDUP_LWORK(LWREQ)
END IF END IF
END IF END IF
IF( INFO.NE.0 ) THEN IF( INFO.NE.0 ) THEN
@ -319,7 +322,7 @@
$ LWORK, INFO ) $ LWORK, INFO )
END IF END IF
* *
WORK( 1 ) = LWREQ WORK( 1 ) = SROUNDUP_LWORK(LWREQ)
* *
RETURN RETURN
* *

View File

@ -118,7 +118,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexGEcomputational *> \ingroup gelqf
* *
*> \par Further Details: *> \par Further Details:
* ===================== * =====================
@ -167,7 +167,8 @@
* .. * ..
* .. External Functions .. * .. External Functions ..
INTEGER ILAENV INTEGER ILAENV
EXTERNAL ILAENV REAL SROUNDUP_LWORK
EXTERNAL ILAENV, SROUNDUP_LWORK
* .. * ..
* .. Executable Statements .. * .. Executable Statements ..
* *
@ -176,7 +177,7 @@
INFO = 0 INFO = 0
NB = ILAENV( 1, 'CGELQF', ' ', M, N, -1, -1 ) NB = ILAENV( 1, 'CGELQF', ' ', M, N, -1, -1 )
LWKOPT = M*NB LWKOPT = M*NB
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
LQUERY = ( LWORK.EQ.-1 ) LQUERY = ( LWORK.EQ.-1 )
IF( M.LT.0 ) THEN IF( M.LT.0 ) THEN
INFO = -1 INFO = -1
@ -266,7 +267,7 @@
$ CALL CGELQ2( M-I+1, N-I+1, A( I, I ), LDA, TAU( I ), WORK, $ CALL CGELQ2( M-I+1, N-I+1, A( I, I ), LDA, TAU( I ), WORK,
$ IINFO ) $ IINFO )
* *
WORK( 1 ) = IWS WORK( 1 ) = SROUNDUP_LWORK(IWS)
RETURN RETURN
* *
* End of CGELQF * End of CGELQF

View File

@ -204,7 +204,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexGEsolve *> \ingroup gelsd
* *
*> \par Contributors: *> \par Contributors:
* ================== * ==================
@ -249,13 +249,13 @@
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL CGEBRD, CGELQF, CGEQRF, CLACPY, EXTERNAL CGEBRD, CGELQF, CGEQRF, CLACPY,
$ CLALSD, CLASCL, CLASET, CUNMBR, $ CLALSD, CLASCL, CLASET, CUNMBR,
$ CUNMLQ, CUNMQR, SLABAD, SLASCL, $ CUNMLQ, CUNMQR, SLASCL,
$ SLASET, XERBLA $ SLASET, XERBLA
* .. * ..
* .. External Functions .. * .. External Functions ..
INTEGER ILAENV INTEGER ILAENV
REAL CLANGE, SLAMCH REAL CLANGE, SLAMCH, SROUNDUP_LWORK
EXTERNAL CLANGE, SLAMCH, ILAENV EXTERNAL CLANGE, SLAMCH, ILAENV, SROUNDUP_LWORK
* .. * ..
* .. Intrinsic Functions .. * .. Intrinsic Functions ..
INTRINSIC INT, LOG, MAX, MIN, REAL INTRINSIC INT, LOG, MAX, MIN, REAL
@ -367,7 +367,7 @@
END IF END IF
END IF END IF
MINWRK = MIN( MINWRK, MAXWRK ) MINWRK = MIN( MINWRK, MAXWRK )
WORK( 1 ) = MAXWRK WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
IWORK( 1 ) = LIWORK IWORK( 1 ) = LIWORK
RWORK( 1 ) = LRWORK RWORK( 1 ) = LRWORK
* *
@ -396,7 +396,6 @@
SFMIN = SLAMCH( 'S' ) SFMIN = SLAMCH( 'S' )
SMLNUM = SFMIN / EPS SMLNUM = SFMIN / EPS
BIGNUM = ONE / SMLNUM BIGNUM = ONE / SMLNUM
CALL SLABAD( SMLNUM, BIGNUM )
* *
* Scale A if max entry outside range [SMLNUM,BIGNUM]. * Scale A if max entry outside range [SMLNUM,BIGNUM].
* *
@ -647,7 +646,7 @@
END IF END IF
* *
10 CONTINUE 10 CONTINUE
WORK( 1 ) = MAXWRK WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
IWORK( 1 ) = LIWORK IWORK( 1 ) = LIWORK
RWORK( 1 ) = LRWORK RWORK( 1 ) = LRWORK
RETURN RETURN

View File

@ -218,8 +218,8 @@
* .. * ..
* .. External Functions .. * .. External Functions ..
INTEGER ILAENV INTEGER ILAENV
REAL CLANGE, SLAMCH REAL CLANGE, SLAMCH, SROUNDUP_LWORK
EXTERNAL ILAENV, CLANGE, SLAMCH EXTERNAL ILAENV, CLANGE, SLAMCH, SROUNDUP_LWORK
* .. * ..
* .. Intrinsic Functions .. * .. Intrinsic Functions ..
INTRINSIC MAX, MIN INTRINSIC MAX, MIN
@ -361,7 +361,7 @@
END IF END IF
MAXWRK = MAX( MINWRK, MAXWRK ) MAXWRK = MAX( MINWRK, MAXWRK )
END IF END IF
WORK( 1 ) = MAXWRK WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
* *
IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY )
$ INFO = -12 $ INFO = -12
@ -758,7 +758,7 @@
CALL CLASCL( 'G', 0, 0, BIGNUM, BNRM, N, NRHS, B, LDB, INFO ) CALL CLASCL( 'G', 0, 0, BIGNUM, BNRM, N, NRHS, B, LDB, INFO )
END IF END IF
70 CONTINUE 70 CONTINUE
WORK( 1 ) = MAXWRK WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
RETURN RETURN
* *
* End of CGELSS * End of CGELSS

View File

@ -176,7 +176,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexGEsolve *> \ingroup gelst
* *
*> \par Contributors: *> \par Contributors:
* ================== * ==================
@ -224,15 +224,15 @@
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV INTEGER ILAENV
REAL SLAMCH, CLANGE REAL SLAMCH, CLANGE, SROUNDUP_LWORK
EXTERNAL LSAME, ILAENV, SLAMCH, CLANGE EXTERNAL LSAME, ILAENV, SLAMCH, CLANGE, SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL CGELQT, CGEQRT, CGEMLQT, CGEMQRT, SLABAD, EXTERNAL CGELQT, CGEQRT, CGEMLQT, CGEMQRT,
$ CLASCL, CLASET, CTRTRS, XERBLA $ CLASCL, CLASET, CTRTRS, XERBLA
* .. * ..
* .. Intrinsic Functions .. * .. Intrinsic Functions ..
INTRINSIC REAL, MAX, MIN INTRINSIC MAX, MIN
* .. * ..
* .. Executable Statements .. * .. Executable Statements ..
* *
@ -270,7 +270,7 @@
* *
MNNRHS = MAX( MN, NRHS ) MNNRHS = MAX( MN, NRHS )
LWOPT = MAX( 1, (MN+MNNRHS)*NB ) LWOPT = MAX( 1, (MN+MNNRHS)*NB )
WORK( 1 ) = REAL( LWOPT ) WORK( 1 ) = SROUNDUP_LWORK( LWOPT )
* *
END IF END IF
* *
@ -285,7 +285,7 @@
* *
IF( MIN( M, N, NRHS ).EQ.0 ) THEN IF( MIN( M, N, NRHS ).EQ.0 ) THEN
CALL CLASET( 'Full', MAX( M, N ), NRHS, CZERO, CZERO, B, LDB ) CALL CLASET( 'Full', MAX( M, N ), NRHS, CZERO, CZERO, B, LDB )
WORK( 1 ) = REAL( LWOPT ) WORK( 1 ) = SROUNDUP_LWORK( LWOPT )
RETURN RETURN
END IF END IF
* *
@ -311,7 +311,6 @@
* *
SMLNUM = SLAMCH( 'S' ) / SLAMCH( 'P' ) SMLNUM = SLAMCH( 'S' ) / SLAMCH( 'P' )
BIGNUM = ONE / SMLNUM BIGNUM = ONE / SMLNUM
CALL SLABAD( SMLNUM, BIGNUM )
* *
* Scale A, B if max element outside range [SMLNUM,BIGNUM] * Scale A, B if max element outside range [SMLNUM,BIGNUM]
* *
@ -334,7 +333,7 @@
* Matrix all zero. Return zero solution. * Matrix all zero. Return zero solution.
* *
CALL CLASET( 'Full', MAX( M, N ), NRHS, CZERO, CZERO, B, LDB ) CALL CLASET( 'Full', MAX( M, N ), NRHS, CZERO, CZERO, B, LDB )
WORK( 1 ) = REAL( LWOPT ) WORK( 1 ) = SROUNDUP_LWORK( LWOPT )
RETURN RETURN
END IF END IF
* *
@ -524,7 +523,7 @@
$ INFO ) $ INFO )
END IF END IF
* *
WORK( 1 ) = REAL( LWOPT ) WORK( 1 ) = SROUNDUP_LWORK( LWOPT )
* *
RETURN RETURN
* *

View File

@ -113,7 +113,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexGEcomputational *> \ingroup geqlf
* *
*> \par Further Details: *> \par Further Details:
* ===================== * =====================
@ -162,7 +162,8 @@
* .. * ..
* .. External Functions .. * .. External Functions ..
INTEGER ILAENV INTEGER ILAENV
EXTERNAL ILAENV REAL SROUNDUP_LWORK
EXTERNAL ILAENV, SROUNDUP_LWORK
* .. * ..
* .. Executable Statements .. * .. Executable Statements ..
* *
@ -186,7 +187,7 @@
NB = ILAENV( 1, 'CGEQLF', ' ', M, N, -1, -1 ) NB = ILAENV( 1, 'CGEQLF', ' ', M, N, -1, -1 )
LWKOPT = N*NB LWKOPT = N*NB
END IF END IF
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
IF( LWORK.LT.MAX( 1, N ) .AND. .NOT.LQUERY ) THEN IF( LWORK.LT.MAX( 1, N ) .AND. .NOT.LQUERY ) THEN
INFO = -7 INFO = -7
@ -276,7 +277,7 @@
IF( MU.GT.0 .AND. NU.GT.0 ) IF( MU.GT.0 .AND. NU.GT.0 )
$ CALL CGEQL2( MU, NU, A, LDA, TAU, WORK, IINFO ) $ CALL CGEQL2( MU, NU, A, LDA, TAU, WORK, IINFO )
* *
WORK( 1 ) = IWS WORK( 1 ) = SROUNDUP_LWORK(IWS)
RETURN RETURN
* *
* End of CGEQLF * End of CGEQLF

View File

@ -121,7 +121,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexGEcomputational *> \ingroup geqrf
* *
*> \par Further Details: *> \par Further Details:
* ===================== * =====================
@ -170,7 +170,8 @@
* .. * ..
* .. External Functions .. * .. External Functions ..
INTEGER ILAENV INTEGER ILAENV
EXTERNAL ILAENV REAL SROUNDUP_LWORK
EXTERNAL ILAENV, SROUNDUP_LWORK
* .. * ..
* .. Executable Statements .. * .. Executable Statements ..
* *
@ -199,7 +200,7 @@
ELSE ELSE
LWKOPT = N*NB LWKOPT = N*NB
END IF END IF
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
RETURN RETURN
END IF END IF
* *
@ -274,7 +275,7 @@
$ CALL CGEQR2( M-I+1, N-I+1, A( I, I ), LDA, TAU( I ), WORK, $ CALL CGEQR2( M-I+1, N-I+1, A( I, I ), LDA, TAU( I ), WORK,
$ IINFO ) $ IINFO )
* *
WORK( 1 ) = IWS WORK( 1 ) = SROUNDUP_LWORK(IWS)
RETURN RETURN
* *
* End of CGEQRF * End of CGEQRF

View File

@ -122,7 +122,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexGEcomputational *> \ingroup geqrfp
* *
*> \par Further Details: *> \par Further Details:
* ===================== * =====================
@ -173,7 +173,8 @@
* .. * ..
* .. External Functions .. * .. External Functions ..
INTEGER ILAENV INTEGER ILAENV
EXTERNAL ILAENV REAL SROUNDUP_LWORK
EXTERNAL ILAENV, SROUNDUP_LWORK
* .. * ..
* .. Executable Statements .. * .. Executable Statements ..
* *
@ -182,7 +183,7 @@
INFO = 0 INFO = 0
NB = ILAENV( 1, 'CGEQRF', ' ', M, N, -1, -1 ) NB = ILAENV( 1, 'CGEQRF', ' ', M, N, -1, -1 )
LWKOPT = N*NB LWKOPT = N*NB
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
LQUERY = ( LWORK.EQ.-1 ) LQUERY = ( LWORK.EQ.-1 )
IF( M.LT.0 ) THEN IF( M.LT.0 ) THEN
INFO = -1 INFO = -1
@ -272,7 +273,7 @@
$ CALL CGEQR2P( M-I+1, N-I+1, A( I, I ), LDA, TAU( I ), WORK, $ CALL CGEQR2P( M-I+1, N-I+1, A( I, I ), LDA, TAU( I ), WORK,
$ IINFO ) $ IINFO )
* *
WORK( 1 ) = IWS WORK( 1 ) = SROUNDUP_LWORK(IWS)
RETURN RETURN
* *
* End of CGEQRFP * End of CGEQRFP

View File

@ -114,7 +114,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexGEcomputational *> \ingroup gerqf
* *
*> \par Further Details: *> \par Further Details:
* ===================== * =====================
@ -163,7 +163,8 @@
* .. * ..
* .. External Functions .. * .. External Functions ..
INTEGER ILAENV INTEGER ILAENV
EXTERNAL ILAENV REAL SROUNDUP_LWORK
EXTERNAL ILAENV, SROUNDUP_LWORK
* .. * ..
* .. Executable Statements .. * .. Executable Statements ..
* *
@ -187,7 +188,7 @@
NB = ILAENV( 1, 'CGERQF', ' ', M, N, -1, -1 ) NB = ILAENV( 1, 'CGERQF', ' ', M, N, -1, -1 )
LWKOPT = M*NB LWKOPT = M*NB
END IF END IF
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
IF ( .NOT.LQUERY ) THEN IF ( .NOT.LQUERY ) THEN
IF( LWORK.LE.0 .OR. ( N.GT.0 .AND. LWORK.LT.MAX( 1, M ) ) ) IF( LWORK.LE.0 .OR. ( N.GT.0 .AND. LWORK.LT.MAX( 1, M ) ) )
@ -278,7 +279,7 @@
IF( MU.GT.0 .AND. NU.GT.0 ) IF( MU.GT.0 .AND. NU.GT.0 )
$ CALL CGERQ2( MU, NU, A, LDA, TAU, WORK, IINFO ) $ CALL CGERQ2( MU, NU, A, LDA, TAU, WORK, IINFO )
* *
WORK( 1 ) = IWS WORK( 1 ) = SROUNDUP_LWORK(IWS)
RETURN RETURN
* *
* End of CGERQF * End of CGERQF

View File

@ -206,7 +206,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexGEsing *> \ingroup gesvd
* *
* ===================================================================== * =====================================================================
SUBROUTINE CGESVD( JOBU, JOBVT, M, N, A, LDA, S, U, LDU, VT, LDVT, SUBROUTINE CGESVD( JOBU, JOBVT, M, N, A, LDA, S, U, LDU, VT, LDVT,
@ -259,8 +259,8 @@
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV INTEGER ILAENV
REAL CLANGE, SLAMCH REAL CLANGE, SLAMCH, SROUNDUP_LWORK
EXTERNAL LSAME, ILAENV, CLANGE, SLAMCH EXTERNAL LSAME, ILAENV, CLANGE, SLAMCH, SROUNDUP_LWORK
* .. * ..
* .. Intrinsic Functions .. * .. Intrinsic Functions ..
INTRINSIC MAX, MIN, SQRT INTRINSIC MAX, MIN, SQRT
@ -615,7 +615,7 @@
END IF END IF
END IF END IF
MAXWRK = MAX( MINWRK, MAXWRK ) MAXWRK = MAX( MINWRK, MAXWRK )
WORK( 1 ) = MAXWRK WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
* *
IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN
INFO = -13 INFO = -13
@ -3694,7 +3694,7 @@
* *
* Return optimal workspace in WORK(1) * Return optimal workspace in WORK(1)
* *
WORK( 1 ) = MAXWRK WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
* *
RETURN RETURN
* *

View File

@ -107,7 +107,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexGEcomputational *> \ingroup getri
* *
* ===================================================================== * =====================================================================
SUBROUTINE CGETRI( N, A, LDA, IPIV, WORK, LWORK, INFO ) SUBROUTINE CGETRI( N, A, LDA, IPIV, WORK, LWORK, INFO )
@ -138,7 +138,8 @@
* .. * ..
* .. External Functions .. * .. External Functions ..
INTEGER ILAENV INTEGER ILAENV
EXTERNAL ILAENV REAL SROUNDUP_LWORK
EXTERNAL ILAENV, SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL CGEMM, CGEMV, CSWAP, CTRSM, CTRTRI, XERBLA EXTERNAL CGEMM, CGEMV, CSWAP, CTRSM, CTRTRI, XERBLA
@ -153,7 +154,7 @@
INFO = 0 INFO = 0
NB = ILAENV( 1, 'CGETRI', ' ', N, -1, -1, -1 ) NB = ILAENV( 1, 'CGETRI', ' ', N, -1, -1, -1 )
LWKOPT = N*NB LWKOPT = N*NB
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
LQUERY = ( LWORK.EQ.-1 ) LQUERY = ( LWORK.EQ.-1 )
IF( N.LT.0 ) THEN IF( N.LT.0 ) THEN
INFO = -1 INFO = -1
@ -251,7 +252,7 @@
$ CALL CSWAP( N, A( 1, J ), 1, A( 1, JP ), 1 ) $ CALL CSWAP( N, A( 1, J ), 1, A( 1, JP ), 1 )
60 CONTINUE 60 CONTINUE
* *
WORK( 1 ) = IWS WORK( 1 ) = SROUNDUP_LWORK(IWS)
RETURN RETURN
* *
* End of CGETRI * End of CGETRI

View File

@ -154,7 +154,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexGEsolve *> \ingroup getsls
* *
* ===================================================================== * =====================================================================
SUBROUTINE CGETSLS( TRANS, M, N, NRHS, A, LDA, B, LDB, SUBROUTINE CGETSLS( TRANS, M, N, NRHS, A, LDA, B, LDB,
@ -191,15 +191,15 @@
* .. * ..
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
REAL SLAMCH, CLANGE REAL SLAMCH, CLANGE, SROUNDUP_LWORK
EXTERNAL LSAME, SLABAD, SLAMCH, CLANGE EXTERNAL LSAME, SLAMCH, CLANGE, SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL CGEQR, CGEMQR, CLASCL, CLASET, EXTERNAL CGEQR, CGEMQR, CLASCL, CLASET,
$ CTRTRS, XERBLA, CGELQ, CGEMLQ $ CTRTRS, XERBLA, CGELQ, CGEMLQ
* .. * ..
* .. Intrinsic Functions .. * .. Intrinsic Functions ..
INTRINSIC REAL, MAX, MIN, INT INTRINSIC MAX, MIN, INT
* .. * ..
* .. Executable Statements .. * .. Executable Statements ..
* *
@ -265,7 +265,7 @@
INFO = -10 INFO = -10
END IF END IF
* *
WORK( 1 ) = REAL( WSIZEO ) WORK( 1 ) = SROUNDUP_LWORK( WSIZEO )
* *
END IF END IF
* *
@ -274,7 +274,7 @@
RETURN RETURN
END IF END IF
IF( LQUERY ) THEN IF( LQUERY ) THEN
IF( LWORK.EQ.-2 ) WORK( 1 ) = REAL( WSIZEM ) IF( LWORK.EQ.-2 ) WORK( 1 ) = SROUNDUP_LWORK( WSIZEM )
RETURN RETURN
END IF END IF
IF( LWORK.LT.WSIZEO ) THEN IF( LWORK.LT.WSIZEO ) THEN
@ -297,7 +297,6 @@
* *
SMLNUM = SLAMCH( 'S' ) / SLAMCH( 'P' ) SMLNUM = SLAMCH( 'S' ) / SLAMCH( 'P' )
BIGNUM = ONE / SMLNUM BIGNUM = ONE / SMLNUM
CALL SLABAD( SMLNUM, BIGNUM )
* *
* Scale A, B if max element outside range [SMLNUM,BIGNUM] * Scale A, B if max element outside range [SMLNUM,BIGNUM]
* *
@ -485,7 +484,7 @@
END IF END IF
* *
50 CONTINUE 50 CONTINUE
WORK( 1 ) = REAL( TSZO + LWO ) WORK( 1 ) = SROUNDUP_LWORK( TSZO + LWO )
RETURN RETURN
* *
* End of CGETSLS * End of CGETSLS

View File

@ -261,7 +261,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexGEeigen *> \ingroup gges
* *
* ===================================================================== * =====================================================================
SUBROUTINE CGGES( JOBVSL, JOBVSR, SORT, SELCTG, N, A, LDA, B, LDB, SUBROUTINE CGGES( JOBVSL, JOBVSR, SORT, SELCTG, N, A, LDA, B, LDB,
@ -312,14 +312,13 @@
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL CGEQRF, CGGBAK, CGGBAL, CGGHRD, CHGEQZ, CLACPY, EXTERNAL CGEQRF, CGGBAK, CGGBAL, CGGHRD, CHGEQZ, CLACPY,
$ CLASCL, CLASET, CTGSEN, CUNGQR, CUNMQR, SLABAD, $ CLASCL, CLASET, CTGSEN, CUNGQR, CUNMQR, XERBLA
$ XERBLA
* .. * ..
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV INTEGER ILAENV
REAL CLANGE, SLAMCH REAL CLANGE, SLAMCH, SROUNDUP_LWORK
EXTERNAL LSAME, ILAENV, CLANGE, SLAMCH EXTERNAL LSAME, ILAENV, CLANGE, SLAMCH, SROUNDUP_LWORK
* .. * ..
* .. Intrinsic Functions .. * .. Intrinsic Functions ..
INTRINSIC MAX, SQRT INTRINSIC MAX, SQRT
@ -390,7 +389,7 @@
LWKOPT = MAX( LWKOPT, N + LWKOPT = MAX( LWKOPT, N +
$ N*ILAENV( 1, 'CUNGQR', ' ', N, 1, N, -1 ) ) $ N*ILAENV( 1, 'CUNGQR', ' ', N, 1, N, -1 ) )
END IF END IF
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
IF( LWORK.LT.LWKMIN .AND. .NOT.LQUERY ) IF( LWORK.LT.LWKMIN .AND. .NOT.LQUERY )
$ INFO = -18 $ INFO = -18
@ -415,7 +414,6 @@
EPS = SLAMCH( 'P' ) EPS = SLAMCH( 'P' )
SMLNUM = SLAMCH( 'S' ) SMLNUM = SLAMCH( 'S' )
BIGNUM = ONE / SMLNUM BIGNUM = ONE / SMLNUM
CALL SLABAD( SMLNUM, BIGNUM )
SMLNUM = SQRT( SMLNUM ) / EPS SMLNUM = SQRT( SMLNUM ) / EPS
BIGNUM = ONE / SMLNUM BIGNUM = ONE / SMLNUM
* *
@ -587,7 +585,7 @@
* *
30 CONTINUE 30 CONTINUE
* *
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
RETURN RETURN
* *

View File

@ -320,7 +320,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexGEeigen *> \ingroup ggesx
* *
* ===================================================================== * =====================================================================
SUBROUTINE CGGESX( JOBVSL, JOBVSR, SORT, SELCTG, SENSE, N, A, LDA, SUBROUTINE CGGESX( JOBVSL, JOBVSR, SORT, SELCTG, SENSE, N, A, LDA,
@ -373,14 +373,13 @@
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL CGEQRF, CGGBAK, CGGBAL, CGGHRD, CHGEQZ, CLACPY, EXTERNAL CGEQRF, CGGBAK, CGGBAL, CGGHRD, CHGEQZ, CLACPY,
$ CLASCL, CLASET, CTGSEN, CUNGQR, CUNMQR, SLABAD, $ CLASCL, CLASET, CTGSEN, CUNGQR, CUNMQR, XERBLA
$ XERBLA
* .. * ..
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV INTEGER ILAENV
REAL CLANGE, SLAMCH REAL CLANGE, SLAMCH, SROUNDUP_LWORK
EXTERNAL LSAME, ILAENV, CLANGE, SLAMCH EXTERNAL LSAME, ILAENV, CLANGE, SLAMCH, SROUNDUP_LWORK
* .. * ..
* .. Intrinsic Functions .. * .. Intrinsic Functions ..
INTRINSIC MAX, SQRT INTRINSIC MAX, SQRT
@ -476,7 +475,7 @@
MAXWRK = 1 MAXWRK = 1
LWRK = 1 LWRK = 1
END IF END IF
WORK( 1 ) = LWRK WORK( 1 ) = SROUNDUP_LWORK(LWRK)
IF( WANTSN .OR. N.EQ.0 ) THEN IF( WANTSN .OR. N.EQ.0 ) THEN
LIWMIN = 1 LIWMIN = 1
ELSE ELSE
@ -510,7 +509,6 @@
EPS = SLAMCH( 'P' ) EPS = SLAMCH( 'P' )
SMLNUM = SLAMCH( 'S' ) SMLNUM = SLAMCH( 'S' )
BIGNUM = ONE / SMLNUM BIGNUM = ONE / SMLNUM
CALL SLABAD( SMLNUM, BIGNUM )
SMLNUM = SQRT( SMLNUM ) / EPS SMLNUM = SQRT( SMLNUM ) / EPS
BIGNUM = ONE / SMLNUM BIGNUM = ONE / SMLNUM
* *
@ -705,7 +703,7 @@
* *
40 CONTINUE 40 CONTINUE
* *
WORK( 1 ) = MAXWRK WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
IWORK( 1 ) = LIWMIN IWORK( 1 ) = LIWMIN
* *
RETURN RETURN

View File

@ -209,7 +209,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexGEeigen *> \ingroup ggev
* *
* ===================================================================== * =====================================================================
SUBROUTINE CGGEV( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHA, BETA, SUBROUTINE CGGEV( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHA, BETA,
@ -254,14 +254,13 @@
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL CGEQRF, CGGBAK, CGGBAL, CGGHRD, CHGEQZ, CLACPY, EXTERNAL CGEQRF, CGGBAK, CGGBAL, CGGHRD, CHGEQZ, CLACPY,
$ CLASCL, CLASET, CTGEVC, CUNGQR, CUNMQR, SLABAD, $ CLASCL, CLASET, CTGEVC, CUNGQR, CUNMQR, XERBLA
$ XERBLA
* .. * ..
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV INTEGER ILAENV
REAL CLANGE, SLAMCH REAL CLANGE, SLAMCH, SROUNDUP_LWORK
EXTERNAL LSAME, ILAENV, CLANGE, SLAMCH EXTERNAL LSAME, ILAENV, CLANGE, SLAMCH, SROUNDUP_LWORK
* .. * ..
* .. Intrinsic Functions .. * .. Intrinsic Functions ..
INTRINSIC ABS, AIMAG, MAX, REAL, SQRT INTRINSIC ABS, AIMAG, MAX, REAL, SQRT
@ -336,7 +335,7 @@
LWKOPT = MAX( LWKOPT, N + LWKOPT = MAX( LWKOPT, N +
$ N*ILAENV( 1, 'CUNGQR', ' ', N, 1, N, -1 ) ) $ N*ILAENV( 1, 'CUNGQR', ' ', N, 1, N, -1 ) )
END IF END IF
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
IF( LWORK.LT.LWKMIN .AND. .NOT.LQUERY ) IF( LWORK.LT.LWKMIN .AND. .NOT.LQUERY )
$ INFO = -15 $ INFO = -15
@ -359,7 +358,6 @@
EPS = SLAMCH( 'E' )*SLAMCH( 'B' ) EPS = SLAMCH( 'E' )*SLAMCH( 'B' )
SMLNUM = SLAMCH( 'S' ) SMLNUM = SLAMCH( 'S' )
BIGNUM = ONE / SMLNUM BIGNUM = ONE / SMLNUM
CALL SLABAD( SMLNUM, BIGNUM )
SMLNUM = SQRT( SMLNUM ) / EPS SMLNUM = SQRT( SMLNUM ) / EPS
BIGNUM = ONE / SMLNUM BIGNUM = ONE / SMLNUM
* *
@ -547,7 +545,7 @@
IF( ILBSCL ) IF( ILBSCL )
$ CALL CLASCL( 'G', 0, 0, BNRMTO, BNRM, N, 1, BETA, N, IERR ) $ CALL CLASCL( 'G', 0, 0, BNRMTO, BNRM, N, 1, BETA, N, IERR )
* *
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
RETURN RETURN
* *
* End of CGGEV * End of CGGEV

View File

@ -335,7 +335,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexGEeigen *> \ingroup ggevx
* *
*> \par Further Details: *> \par Further Details:
* ===================== * =====================
@ -416,13 +416,13 @@
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL CGEQRF, CGGBAK, CGGBAL, CGGHRD, CHGEQZ, CLACPY, EXTERNAL CGEQRF, CGGBAK, CGGBAL, CGGHRD, CHGEQZ, CLACPY,
$ CLASCL, CLASET, CTGEVC, CTGSNA, CUNGQR, CUNMQR, $ CLASCL, CLASET, CTGEVC, CTGSNA, CUNGQR, CUNMQR,
$ SLABAD, SLASCL, XERBLA $ SLASCL, XERBLA
* .. * ..
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV INTEGER ILAENV
REAL CLANGE, SLAMCH REAL CLANGE, SLAMCH, SROUNDUP_LWORK
EXTERNAL LSAME, ILAENV, CLANGE, SLAMCH EXTERNAL LSAME, ILAENV, CLANGE, SLAMCH, SROUNDUP_LWORK
* .. * ..
* .. Intrinsic Functions .. * .. Intrinsic Functions ..
INTRINSIC ABS, AIMAG, MAX, REAL, SQRT INTRINSIC ABS, AIMAG, MAX, REAL, SQRT
@ -521,7 +521,7 @@
$ N*ILAENV( 1, 'CUNGQR', ' ', N, 1, N, 0 ) ) $ N*ILAENV( 1, 'CUNGQR', ' ', N, 1, N, 0 ) )
END IF END IF
END IF END IF
WORK( 1 ) = MAXWRK WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
* *
IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN
INFO = -25 INFO = -25
@ -545,7 +545,6 @@
EPS = SLAMCH( 'P' ) EPS = SLAMCH( 'P' )
SMLNUM = SLAMCH( 'S' ) SMLNUM = SLAMCH( 'S' )
BIGNUM = ONE / SMLNUM BIGNUM = ONE / SMLNUM
CALL SLABAD( SMLNUM, BIGNUM )
SMLNUM = SQRT( SMLNUM ) / EPS SMLNUM = SQRT( SMLNUM ) / EPS
BIGNUM = ONE / SMLNUM BIGNUM = ONE / SMLNUM
* *
@ -793,7 +792,7 @@
IF( ILBSCL ) IF( ILBSCL )
$ CALL CLASCL( 'G', 0, 0, BNRMTO, BNRM, N, 1, BETA, N, IERR ) $ CALL CLASCL( 'G', 0, 0, BNRMTO, BNRM, N, 1, BETA, N, IERR )
* *
WORK( 1 ) = MAXWRK WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)
RETURN RETURN
* *
* End of CGGEVX * End of CGGEVX

View File

@ -177,7 +177,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexOTHEReigen *> \ingroup ggglm
* *
* ===================================================================== * =====================================================================
SUBROUTINE CGGGLM( N, M, P, A, LDA, B, LDB, D, X, Y, WORK, LWORK, SUBROUTINE CGGGLM( N, M, P, A, LDA, B, LDB, D, X, Y, WORK, LWORK,
@ -213,7 +213,8 @@
* .. * ..
* .. External Functions .. * .. External Functions ..
INTEGER ILAENV INTEGER ILAENV
EXTERNAL ILAENV REAL SROUNDUP_LWORK
EXTERNAL ILAENV, SROUNDUP_LWORK
* .. * ..
* .. Intrinsic Functions .. * .. Intrinsic Functions ..
INTRINSIC INT, MAX, MIN INTRINSIC INT, MAX, MIN
@ -252,7 +253,7 @@
LWKMIN = M + N + P LWKMIN = M + N + P
LWKOPT = M + NP + MAX( N, P )*NB LWKOPT = M + NP + MAX( N, P )*NB
END IF END IF
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
IF( LWORK.LT.LWKMIN .AND. .NOT.LQUERY ) THEN IF( LWORK.LT.LWKMIN .AND. .NOT.LQUERY ) THEN
INFO = -12 INFO = -12

View File

@ -172,7 +172,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexOTHERsolve *> \ingroup gglse
* *
* ===================================================================== * =====================================================================
SUBROUTINE CGGLSE( M, N, P, A, LDA, B, LDB, C, D, X, WORK, LWORK, SUBROUTINE CGGLSE( M, N, P, A, LDA, B, LDB, C, D, X, WORK, LWORK,
@ -207,7 +207,8 @@
* .. * ..
* .. External Functions .. * .. External Functions ..
INTEGER ILAENV INTEGER ILAENV
EXTERNAL ILAENV REAL SROUNDUP_LWORK
EXTERNAL ILAENV, SROUNDUP_LWORK
* .. * ..
* .. Intrinsic Functions .. * .. Intrinsic Functions ..
INTRINSIC INT, MAX, MIN INTRINSIC INT, MAX, MIN
@ -246,7 +247,7 @@
LWKMIN = M + N + P LWKMIN = M + N + P
LWKOPT = P + MN + MAX( M, N )*NB LWKOPT = P + MN + MAX( M, N )*NB
END IF END IF
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
IF( LWORK.LT.LWKMIN .AND. .NOT.LQUERY ) THEN IF( LWORK.LT.LWKMIN .AND. .NOT.LQUERY ) THEN
INFO = -12 INFO = -12

View File

@ -173,7 +173,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexOTHERcomputational *> \ingroup ggqrf
* *
*> \par Further Details: *> \par Further Details:
* ===================== * =====================
@ -236,7 +236,8 @@
* .. * ..
* .. External Functions .. * .. External Functions ..
INTEGER ILAENV INTEGER ILAENV
EXTERNAL ILAENV REAL SROUNDUP_LWORK
EXTERNAL ILAENV, SROUNDUP_LWORK
* .. * ..
* .. Intrinsic Functions .. * .. Intrinsic Functions ..
INTRINSIC INT, MAX, MIN INTRINSIC INT, MAX, MIN
@ -251,7 +252,7 @@
NB3 = ILAENV( 1, 'CUNMQR', ' ', N, M, P, -1 ) NB3 = ILAENV( 1, 'CUNMQR', ' ', N, M, P, -1 )
NB = MAX( NB1, NB2, NB3 ) NB = MAX( NB1, NB2, NB3 )
LWKOPT = MAX( N, M, P)*NB LWKOPT = MAX( N, M, P)*NB
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
LQUERY = ( LWORK.EQ.-1 ) LQUERY = ( LWORK.EQ.-1 )
IF( N.LT.0 ) THEN IF( N.LT.0 ) THEN
INFO = -1 INFO = -1

View File

@ -172,7 +172,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexOTHERcomputational *> \ingroup ggrqf
* *
*> \par Further Details: *> \par Further Details:
* ===================== * =====================
@ -235,7 +235,8 @@
* .. * ..
* .. External Functions .. * .. External Functions ..
INTEGER ILAENV INTEGER ILAENV
EXTERNAL ILAENV REAL SROUNDUP_LWORK
EXTERNAL ILAENV, SROUNDUP_LWORK
* .. * ..
* .. Intrinsic Functions .. * .. Intrinsic Functions ..
INTRINSIC INT, MAX, MIN INTRINSIC INT, MAX, MIN
@ -250,7 +251,7 @@
NB3 = ILAENV( 1, 'CUNMRQ', ' ', M, N, P, -1 ) NB3 = ILAENV( 1, 'CUNMRQ', ' ', M, N, P, -1 )
NB = MAX( NB1, NB2, NB3 ) NB = MAX( NB1, NB2, NB3 )
LWKOPT = MAX( N, M, P)*NB LWKOPT = MAX( N, M, P)*NB
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
LQUERY = ( LWORK.EQ.-1 ) LQUERY = ( LWORK.EQ.-1 )
IF( M.LT.0 ) THEN IF( M.LT.0 ) THEN
INFO = -1 INFO = -1

View File

@ -132,7 +132,7 @@
*> \verbatim *> \verbatim
*> LWORK is INTEGER *> LWORK is INTEGER
*> The length of the array WORK. LWORK >= 1, when N <= 1; *> The length of the array WORK. LWORK >= 1, when N <= 1;
*> otherwise *> otherwise
*> If JOBZ = 'N' and N > 1, LWORK must be queried. *> If JOBZ = 'N' and N > 1, LWORK must be queried.
*> LWORK = MAX(1, dimension) where *> LWORK = MAX(1, dimension) where
*> dimension = (2KD+1)*N + KD*NTHREADS *> dimension = (2KD+1)*N + KD*NTHREADS
@ -171,7 +171,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexOTHEReigen *> \ingroup hbev_2stage
* *
*> \par Further Details: *> \par Further Details:
* ===================== * =====================
@ -189,7 +189,7 @@
*> http://doi.acm.org/10.1145/2063384.2063394 *> http://doi.acm.org/10.1145/2063384.2063394
*> *>
*> A. Haidar, J. Kurzak, P. Luszczek, 2013. *> A. Haidar, J. Kurzak, P. Luszczek, 2013.
*> An improved parallel singular value algorithm and its implementation *> An improved parallel singular value algorithm and its implementation
*> for multicore hardware, In Proceedings of 2013 International Conference *> for multicore hardware, In Proceedings of 2013 International Conference
*> for High Performance Computing, Networking, Storage and Analysis (SC '13). *> for High Performance Computing, Networking, Storage and Analysis (SC '13).
*> Denver, Colorado, USA, 2013. *> Denver, Colorado, USA, 2013.
@ -197,11 +197,11 @@
*> http://doi.acm.org/10.1145/2503210.2503292 *> http://doi.acm.org/10.1145/2503210.2503292
*> *>
*> A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra. *> A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra.
*> A novel hybrid CPU-GPU generalized eigensolver for electronic structure *> A novel hybrid CPU-GPU generalized eigensolver for electronic structure
*> calculations based on fine-grained memory aware tasks. *> calculations based on fine-grained memory aware tasks.
*> International Journal of High Performance Computing Applications. *> International Journal of High Performance Computing Applications.
*> Volume 28 Issue 2, Pages 196-209, May 2014. *> Volume 28 Issue 2, Pages 196-209, May 2014.
*> http://hpc.sagepub.com/content/28/2/196 *> http://hpc.sagepub.com/content/28/2/196
*> *>
*> \endverbatim *> \endverbatim
* *
@ -240,8 +240,9 @@
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV2STAGE INTEGER ILAENV2STAGE
REAL SLAMCH, CLANHB REAL SLAMCH, CLANHB, SROUNDUP_LWORK
EXTERNAL LSAME, SLAMCH, CLANHB, ILAENV2STAGE EXTERNAL LSAME, SLAMCH, CLANHB, ILAENV2STAGE,
$ SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL SSCAL, SSTERF, XERBLA, CLASCL, CSTEQR, EXTERNAL SSCAL, SSTERF, XERBLA, CLASCL, CSTEQR,
@ -276,7 +277,7 @@
IF( INFO.EQ.0 ) THEN IF( INFO.EQ.0 ) THEN
IF( N.LE.1 ) THEN IF( N.LE.1 ) THEN
LWMIN = 1 LWMIN = 1
WORK( 1 ) = LWMIN WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
ELSE ELSE
IB = ILAENV2STAGE( 2, 'CHETRD_HB2ST', JOBZ, IB = ILAENV2STAGE( 2, 'CHETRD_HB2ST', JOBZ,
$ N, KD, -1, -1 ) $ N, KD, -1, -1 )
@ -285,7 +286,7 @@
LWTRD = ILAENV2STAGE( 4, 'CHETRD_HB2ST', JOBZ, LWTRD = ILAENV2STAGE( 4, 'CHETRD_HB2ST', JOBZ,
$ N, KD, IB, -1 ) $ N, KD, IB, -1 )
LWMIN = LHTRD + LWTRD LWMIN = LHTRD + LWTRD
WORK( 1 ) = LWMIN WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
ENDIF ENDIF
* *
IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY )
@ -351,7 +352,7 @@
LLWORK = LWORK - INDWRK + 1 LLWORK = LWORK - INDWRK + 1
* *
CALL CHETRD_HB2ST( "N", JOBZ, UPLO, N, KD, AB, LDAB, W, CALL CHETRD_HB2ST( "N", JOBZ, UPLO, N, KD, AB, LDAB, W,
$ RWORK( INDE ), WORK( INDHOUS ), LHTRD, $ RWORK( INDE ), WORK( INDHOUS ), LHTRD,
$ WORK( INDWRK ), LLWORK, IINFO ) $ WORK( INDWRK ), LLWORK, IINFO )
* *
* For eigenvalues only, call SSTERF. For eigenvectors, call CSTEQR. * For eigenvalues only, call SSTERF. For eigenvectors, call CSTEQR.
@ -377,7 +378,7 @@
* *
* Set WORK(1) to optimal workspace size. * Set WORK(1) to optimal workspace size.
* *
WORK( 1 ) = LWMIN WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
* *
RETURN RETURN
* *

View File

@ -201,7 +201,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexOTHEReigen *> \ingroup hbevd
* *
* ===================================================================== * =====================================================================
SUBROUTINE CHBEVD( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ, WORK, SUBROUTINE CHBEVD( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ, WORK,
@ -239,8 +239,8 @@
* .. * ..
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
REAL CLANHB, SLAMCH REAL CLANHB, SLAMCH, SROUNDUP_LWORK
EXTERNAL LSAME, CLANHB, SLAMCH EXTERNAL LSAME, CLANHB, SLAMCH, SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL CGEMM, CHBTRD, CLACPY, CLASCL, CSTEDC, SSCAL, EXTERNAL CGEMM, CHBTRD, CLACPY, CLASCL, CSTEDC, SSCAL,
@ -288,7 +288,7 @@
END IF END IF
* *
IF( INFO.EQ.0 ) THEN IF( INFO.EQ.0 ) THEN
WORK( 1 ) = LWMIN WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
RWORK( 1 ) = LRWMIN RWORK( 1 ) = LRWMIN
IWORK( 1 ) = LIWMIN IWORK( 1 ) = LIWMIN
* *
@ -382,7 +382,7 @@
CALL SSCAL( IMAX, ONE / SIGMA, W, 1 ) CALL SSCAL( IMAX, ONE / SIGMA, W, 1 )
END IF END IF
* *
WORK( 1 ) = LWMIN WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
RWORK( 1 ) = LRWMIN RWORK( 1 ) = LRWMIN
IWORK( 1 ) = LIWMIN IWORK( 1 ) = LIWMIN
RETURN RETURN

View File

@ -22,7 +22,7 @@
* *
* SUBROUTINE CHBEVX_2STAGE( JOBZ, RANGE, UPLO, N, KD, AB, LDAB, * SUBROUTINE CHBEVX_2STAGE( JOBZ, RANGE, UPLO, N, KD, AB, LDAB,
* Q, LDQ, VL, VU, IL, IU, ABSTOL, M, W, * Q, LDQ, VL, VU, IL, IU, ABSTOL, M, W,
* Z, LDZ, WORK, LWORK, RWORK, IWORK, * Z, LDZ, WORK, LWORK, RWORK, IWORK,
* IFAIL, INFO ) * IFAIL, INFO )
* *
* IMPLICIT NONE * IMPLICIT NONE
@ -233,7 +233,7 @@
*> \verbatim *> \verbatim
*> LWORK is INTEGER *> LWORK is INTEGER
*> The length of the array WORK. LWORK >= 1, when N <= 1; *> The length of the array WORK. LWORK >= 1, when N <= 1;
*> otherwise *> otherwise
*> If JOBZ = 'N' and N > 1, LWORK must be queried. *> If JOBZ = 'N' and N > 1, LWORK must be queried.
*> LWORK = MAX(1, dimension) where *> LWORK = MAX(1, dimension) where
*> dimension = (2KD+1)*N + KD*NTHREADS *> dimension = (2KD+1)*N + KD*NTHREADS
@ -285,7 +285,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexOTHEReigen *> \ingroup hbevx_2stage
* *
*> \par Further Details: *> \par Further Details:
* ===================== * =====================
@ -303,7 +303,7 @@
*> http://doi.acm.org/10.1145/2063384.2063394 *> http://doi.acm.org/10.1145/2063384.2063394
*> *>
*> A. Haidar, J. Kurzak, P. Luszczek, 2013. *> A. Haidar, J. Kurzak, P. Luszczek, 2013.
*> An improved parallel singular value algorithm and its implementation *> An improved parallel singular value algorithm and its implementation
*> for multicore hardware, In Proceedings of 2013 International Conference *> for multicore hardware, In Proceedings of 2013 International Conference
*> for High Performance Computing, Networking, Storage and Analysis (SC '13). *> for High Performance Computing, Networking, Storage and Analysis (SC '13).
*> Denver, Colorado, USA, 2013. *> Denver, Colorado, USA, 2013.
@ -311,18 +311,18 @@
*> http://doi.acm.org/10.1145/2503210.2503292 *> http://doi.acm.org/10.1145/2503210.2503292
*> *>
*> A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra. *> A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra.
*> A novel hybrid CPU-GPU generalized eigensolver for electronic structure *> A novel hybrid CPU-GPU generalized eigensolver for electronic structure
*> calculations based on fine-grained memory aware tasks. *> calculations based on fine-grained memory aware tasks.
*> International Journal of High Performance Computing Applications. *> International Journal of High Performance Computing Applications.
*> Volume 28 Issue 2, Pages 196-209, May 2014. *> Volume 28 Issue 2, Pages 196-209, May 2014.
*> http://hpc.sagepub.com/content/28/2/196 *> http://hpc.sagepub.com/content/28/2/196
*> *>
*> \endverbatim *> \endverbatim
* *
* ===================================================================== * =====================================================================
SUBROUTINE CHBEVX_2STAGE( JOBZ, RANGE, UPLO, N, KD, AB, LDAB, SUBROUTINE CHBEVX_2STAGE( JOBZ, RANGE, UPLO, N, KD, AB, LDAB,
$ Q, LDQ, VL, VU, IL, IU, ABSTOL, M, W, $ Q, LDQ, VL, VU, IL, IU, ABSTOL, M, W,
$ Z, LDZ, WORK, LWORK, RWORK, IWORK, $ Z, LDZ, WORK, LWORK, RWORK, IWORK,
$ IFAIL, INFO ) $ IFAIL, INFO )
* *
IMPLICIT NONE IMPLICIT NONE
@ -367,8 +367,9 @@
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV2STAGE INTEGER ILAENV2STAGE
REAL SLAMCH, CLANHB REAL SLAMCH, CLANHB, SROUNDUP_LWORK
EXTERNAL LSAME, SLAMCH, CLANHB, ILAENV2STAGE EXTERNAL LSAME, SLAMCH, CLANHB, ILAENV2STAGE,
$ SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL SCOPY, SSCAL, SSTEBZ, SSTERF, XERBLA, CCOPY, EXTERNAL SCOPY, SSCAL, SSTEBZ, SSTERF, XERBLA, CCOPY,
@ -424,16 +425,16 @@
IF( INFO.EQ.0 ) THEN IF( INFO.EQ.0 ) THEN
IF( N.LE.1 ) THEN IF( N.LE.1 ) THEN
LWMIN = 1 LWMIN = 1
WORK( 1 ) = LWMIN WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
ELSE ELSE
IB = ILAENV2STAGE( 2, 'CHETRD_HB2ST', JOBZ, IB = ILAENV2STAGE( 2, 'CHETRD_HB2ST', JOBZ,
$ N, KD, -1, -1 ) $ N, KD, -1, -1 )
LHTRD = ILAENV2STAGE( 3, 'CHETRD_HB2ST', JOBZ, LHTRD = ILAENV2STAGE( 3, 'CHETRD_HB2ST', JOBZ,
$ N, KD, IB, -1 ) $ N, KD, IB, -1 )
LWTRD = ILAENV2STAGE( 4, 'CHETRD_HB2ST', JOBZ, LWTRD = ILAENV2STAGE( 4, 'CHETRD_HB2ST', JOBZ,
$ N, KD, IB, -1 ) $ N, KD, IB, -1 )
LWMIN = LHTRD + LWTRD LWMIN = LHTRD + LWTRD
WORK( 1 ) = LWMIN WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
ENDIF ENDIF
* *
IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY )
@ -637,7 +638,7 @@
* *
* Set WORK(1) to optimal workspace size. * Set WORK(1) to optimal workspace size.
* *
WORK( 1 ) = LWMIN WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
* *
RETURN RETURN
* *

View File

@ -232,7 +232,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexOTHEReigen *> \ingroup hbgvd
* *
*> \par Contributors: *> \par Contributors:
* ================== * ==================
@ -275,7 +275,8 @@
* .. * ..
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
EXTERNAL LSAME REAL SROUNDUP_LWORK
EXTERNAL LSAME, SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL SSTERF, XERBLA, CGEMM, CHBGST, CHBTRD, CLACPY, EXTERNAL SSTERF, XERBLA, CGEMM, CHBGST, CHBTRD, CLACPY,
@ -322,7 +323,7 @@
END IF END IF
* *
IF( INFO.EQ.0 ) THEN IF( INFO.EQ.0 ) THEN
WORK( 1 ) = LWMIN WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
RWORK( 1 ) = LRWMIN RWORK( 1 ) = LRWMIN
IWORK( 1 ) = LIWMIN IWORK( 1 ) = LIWMIN
* *
@ -388,7 +389,7 @@
CALL CLACPY( 'A', N, N, WORK( INDWK2 ), N, Z, LDZ ) CALL CLACPY( 'A', N, N, WORK( INDWK2 ), N, Z, LDZ )
END IF END IF
* *
WORK( 1 ) = LWMIN WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
RWORK( 1 ) = LRWMIN RWORK( 1 ) = LRWMIN
IWORK( 1 ) = LIWMIN IWORK( 1 ) = LIWMIN
RETURN RETURN

View File

@ -132,7 +132,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexHEeigen *> \ingroup heev
* *
* ===================================================================== * =====================================================================
SUBROUTINE CHEEV( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK, SUBROUTINE CHEEV( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK,
@ -169,8 +169,8 @@
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV INTEGER ILAENV
REAL CLANHE, SLAMCH REAL CLANHE, SLAMCH, SROUNDUP_LWORK
EXTERNAL ILAENV, LSAME, CLANHE, SLAMCH EXTERNAL ILAENV, LSAME, CLANHE, SLAMCH, SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL CHETRD, CLASCL, CSTEQR, CUNGTR, SSCAL, SSTERF, EXTERNAL CHETRD, CLASCL, CSTEQR, CUNGTR, SSCAL, SSTERF,
@ -201,7 +201,7 @@
IF( INFO.EQ.0 ) THEN IF( INFO.EQ.0 ) THEN
NB = ILAENV( 1, 'CHETRD', UPLO, N, -1, -1, -1 ) NB = ILAENV( 1, 'CHETRD', UPLO, N, -1, -1, -1 )
LWKOPT = MAX( 1, ( NB+1 )*N ) LWKOPT = MAX( 1, ( NB+1 )*N )
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
IF( LWORK.LT.MAX( 1, 2*N-1 ) .AND. .NOT.LQUERY ) IF( LWORK.LT.MAX( 1, 2*N-1 ) .AND. .NOT.LQUERY )
$ INFO = -8 $ INFO = -8
@ -286,7 +286,7 @@
* *
* Set WORK(1) to optimal complex workspace size. * Set WORK(1) to optimal complex workspace size.
* *
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
RETURN RETURN
* *

View File

@ -106,12 +106,12 @@
*> \verbatim *> \verbatim
*> LWORK is INTEGER *> LWORK is INTEGER
*> The length of the array WORK. LWORK >= 1, when N <= 1; *> The length of the array WORK. LWORK >= 1, when N <= 1;
*> otherwise *> otherwise
*> If JOBZ = 'N' and N > 1, LWORK must be queried. *> If JOBZ = 'N' and N > 1, LWORK must be queried.
*> LWORK = MAX(1, dimension) where *> LWORK = MAX(1, dimension) where
*> dimension = max(stage1,stage2) + (KD+1)*N + N *> dimension = max(stage1,stage2) + (KD+1)*N + N
*> = N*KD + N*max(KD+1,FACTOPTNB) *> = N*KD + N*max(KD+1,FACTOPTNB)
*> + max(2*KD*KD, KD*NTHREADS) *> + max(2*KD*KD, KD*NTHREADS)
*> + (KD+1)*N + N *> + (KD+1)*N + N
*> where KD is the blocking size of the reduction, *> where KD is the blocking size of the reduction,
*> FACTOPTNB is the blocking used by the QR or LQ *> FACTOPTNB is the blocking used by the QR or LQ
@ -149,7 +149,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexHEeigen *> \ingroup heev_2stage
* *
*> \par Further Details: *> \par Further Details:
* ===================== * =====================
@ -167,7 +167,7 @@
*> http://doi.acm.org/10.1145/2063384.2063394 *> http://doi.acm.org/10.1145/2063384.2063394
*> *>
*> A. Haidar, J. Kurzak, P. Luszczek, 2013. *> A. Haidar, J. Kurzak, P. Luszczek, 2013.
*> An improved parallel singular value algorithm and its implementation *> An improved parallel singular value algorithm and its implementation
*> for multicore hardware, In Proceedings of 2013 International Conference *> for multicore hardware, In Proceedings of 2013 International Conference
*> for High Performance Computing, Networking, Storage and Analysis (SC '13). *> for High Performance Computing, Networking, Storage and Analysis (SC '13).
*> Denver, Colorado, USA, 2013. *> Denver, Colorado, USA, 2013.
@ -175,11 +175,11 @@
*> http://doi.acm.org/10.1145/2503210.2503292 *> http://doi.acm.org/10.1145/2503210.2503292
*> *>
*> A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra. *> A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra.
*> A novel hybrid CPU-GPU generalized eigensolver for electronic structure *> A novel hybrid CPU-GPU generalized eigensolver for electronic structure
*> calculations based on fine-grained memory aware tasks. *> calculations based on fine-grained memory aware tasks.
*> International Journal of High Performance Computing Applications. *> International Journal of High Performance Computing Applications.
*> Volume 28 Issue 2, Pages 196-209, May 2014. *> Volume 28 Issue 2, Pages 196-209, May 2014.
*> http://hpc.sagepub.com/content/28/2/196 *> http://hpc.sagepub.com/content/28/2/196
*> *>
*> \endverbatim *> \endverbatim
* *
@ -220,8 +220,9 @@
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV2STAGE INTEGER ILAENV2STAGE
REAL SLAMCH, CLANHE REAL SLAMCH, CLANHE, SROUNDUP_LWORK
EXTERNAL LSAME, SLAMCH, CLANHE, ILAENV2STAGE EXTERNAL LSAME, SLAMCH, CLANHE, ILAENV2STAGE,
$ SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL SSCAL, SSTERF, XERBLA, CLASCL, CSTEQR, EXTERNAL SSCAL, SSTERF, XERBLA, CLASCL, CSTEQR,
@ -255,7 +256,7 @@
LHTRD = ILAENV2STAGE( 3, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 ) LHTRD = ILAENV2STAGE( 3, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
LWTRD = ILAENV2STAGE( 4, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 ) LWTRD = ILAENV2STAGE( 4, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
LWMIN = N + LHTRD + LWTRD LWMIN = N + LHTRD + LWTRD
WORK( 1 ) = LWMIN WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
* *
IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY )
$ INFO = -8 $ INFO = -8
@ -314,7 +315,7 @@
LLWORK = LWORK - INDWRK + 1 LLWORK = LWORK - INDWRK + 1
* *
CALL CHETRD_2STAGE( JOBZ, UPLO, N, A, LDA, W, RWORK( INDE ), CALL CHETRD_2STAGE( JOBZ, UPLO, N, A, LDA, W, RWORK( INDE ),
$ WORK( INDTAU ), WORK( INDHOUS ), LHTRD, $ WORK( INDTAU ), WORK( INDHOUS ), LHTRD,
$ WORK( INDWRK ), LLWORK, IINFO ) $ WORK( INDWRK ), LLWORK, IINFO )
* *
* For eigenvalues only, call SSTERF. For eigenvectors, first call * For eigenvalues only, call SSTERF. For eigenvectors, first call
@ -343,7 +344,7 @@
* *
* Set WORK(1) to optimal complex workspace size. * Set WORK(1) to optimal complex workspace size.
* *
WORK( 1 ) = LWMIN WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
* *
RETURN RETURN
* *

View File

@ -180,7 +180,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexHEeigen *> \ingroup heevd
* *
*> \par Further Details: *> \par Further Details:
* ===================== * =====================
@ -230,8 +230,8 @@
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV INTEGER ILAENV
REAL CLANHE, SLAMCH REAL CLANHE, SLAMCH, SROUNDUP_LWORK
EXTERNAL ILAENV, LSAME, CLANHE, SLAMCH EXTERNAL ILAENV, LSAME, CLANHE, SLAMCH, SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL CHETRD, CLACPY, CLASCL, CSTEDC, CUNMTR, SSCAL, EXTERNAL CHETRD, CLACPY, CLASCL, CSTEDC, CUNMTR, SSCAL,
@ -282,7 +282,7 @@
LROPT = LRWMIN LROPT = LRWMIN
LIOPT = LIWMIN LIOPT = LIWMIN
END IF END IF
WORK( 1 ) = LOPT WORK( 1 ) = SROUNDUP_LWORK(LOPT)
RWORK( 1 ) = LROPT RWORK( 1 ) = LROPT
IWORK( 1 ) = LIOPT IWORK( 1 ) = LIOPT
* *
@ -378,7 +378,7 @@
CALL SSCAL( IMAX, ONE / SIGMA, W, 1 ) CALL SSCAL( IMAX, ONE / SIGMA, W, 1 )
END IF END IF
* *
WORK( 1 ) = LOPT WORK( 1 ) = SROUNDUP_LWORK(LOPT)
RWORK( 1 ) = LROPT RWORK( 1 ) = LROPT
IWORK( 1 ) = LIOPT IWORK( 1 ) = LIOPT
* *

View File

@ -338,7 +338,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexHEeigen *> \ingroup heevr
* *
*> \par Contributors: *> \par Contributors:
* ================== * ==================
@ -392,8 +392,8 @@
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV INTEGER ILAENV
REAL CLANSY, SLAMCH REAL CLANSY, SLAMCH, SROUNDUP_LWORK
EXTERNAL LSAME, ILAENV, CLANSY, SLAMCH EXTERNAL LSAME, ILAENV, CLANSY, SLAMCH, SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL CHETRD, CSSCAL, CSTEMR, CSTEIN, CSWAP, CUNMTR, EXTERNAL CHETRD, CSSCAL, CSTEMR, CSTEIN, CSWAP, CUNMTR,
@ -454,7 +454,7 @@
NB = ILAENV( 1, 'CHETRD', UPLO, N, -1, -1, -1 ) NB = ILAENV( 1, 'CHETRD', UPLO, N, -1, -1, -1 )
NB = MAX( NB, ILAENV( 1, 'CUNMTR', UPLO, N, -1, -1, -1 ) ) NB = MAX( NB, ILAENV( 1, 'CUNMTR', UPLO, N, -1, -1, -1 ) )
LWKOPT = MAX( ( NB+1 )*N, LWMIN ) LWKOPT = MAX( ( NB+1 )*N, LWMIN )
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
RWORK( 1 ) = LRWMIN RWORK( 1 ) = LRWMIN
IWORK( 1 ) = LIWMIN IWORK( 1 ) = LIWMIN
* *
@ -710,7 +710,7 @@
* *
* Set WORK(1) to optimal workspace size. * Set WORK(1) to optimal workspace size.
* *
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
RWORK( 1 ) = LRWMIN RWORK( 1 ) = LRWMIN
IWORK( 1 ) = LIWMIN IWORK( 1 ) = LIWMIN
* *

View File

@ -250,7 +250,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexHEeigen *> \ingroup heevx
* *
* ===================================================================== * =====================================================================
SUBROUTINE CHEEVX( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, IL, IU, SUBROUTINE CHEEVX( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, IL, IU,
@ -294,8 +294,8 @@
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV INTEGER ILAENV
REAL SLAMCH, CLANHE REAL SLAMCH, CLANHE, SROUNDUP_LWORK
EXTERNAL LSAME, ILAENV, SLAMCH, CLANHE EXTERNAL LSAME, ILAENV, SLAMCH, CLANHE, SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL SCOPY, SSCAL, SSTEBZ, SSTERF, XERBLA, CSSCAL, EXTERNAL SCOPY, SSCAL, SSTEBZ, SSTERF, XERBLA, CSSCAL,
@ -354,7 +354,7 @@
NB = ILAENV( 1, 'CHETRD', UPLO, N, -1, -1, -1 ) NB = ILAENV( 1, 'CHETRD', UPLO, N, -1, -1, -1 )
NB = MAX( NB, ILAENV( 1, 'CUNMTR', UPLO, N, -1, -1, -1 ) ) NB = MAX( NB, ILAENV( 1, 'CUNMTR', UPLO, N, -1, -1, -1 ) )
LWKOPT = MAX( 1, ( NB + 1 )*N ) LWKOPT = MAX( 1, ( NB + 1 )*N )
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
END IF END IF
* *
IF( LWORK.LT.LWKMIN .AND. .NOT.LQUERY ) IF( LWORK.LT.LWKMIN .AND. .NOT.LQUERY )
@ -552,7 +552,7 @@
* *
* Set WORK(1) to optimal complex workspace size. * Set WORK(1) to optimal complex workspace size.
* *
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
RETURN RETURN
* *

View File

@ -209,12 +209,12 @@
*> \verbatim *> \verbatim
*> LWORK is INTEGER *> LWORK is INTEGER
*> The length of the array WORK. LWORK >= 1, when N <= 1; *> The length of the array WORK. LWORK >= 1, when N <= 1;
*> otherwise *> otherwise
*> If JOBZ = 'N' and N > 1, LWORK must be queried. *> If JOBZ = 'N' and N > 1, LWORK must be queried.
*> LWORK = MAX(1, 8*N, dimension) where *> LWORK = MAX(1, 8*N, dimension) where
*> dimension = max(stage1,stage2) + (KD+1)*N + N *> dimension = max(stage1,stage2) + (KD+1)*N + N
*> = N*KD + N*max(KD+1,FACTOPTNB) *> = N*KD + N*max(KD+1,FACTOPTNB)
*> + max(2*KD*KD, KD*NTHREADS) *> + max(2*KD*KD, KD*NTHREADS)
*> + (KD+1)*N + N *> + (KD+1)*N + N
*> where KD is the blocking size of the reduction, *> where KD is the blocking size of the reduction,
*> FACTOPTNB is the blocking used by the QR or LQ *> FACTOPTNB is the blocking used by the QR or LQ
@ -265,7 +265,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexHEeigen *> \ingroup heevx_2stage
* *
*> \par Further Details: *> \par Further Details:
* ===================== * =====================
@ -283,7 +283,7 @@
*> http://doi.acm.org/10.1145/2063384.2063394 *> http://doi.acm.org/10.1145/2063384.2063394
*> *>
*> A. Haidar, J. Kurzak, P. Luszczek, 2013. *> A. Haidar, J. Kurzak, P. Luszczek, 2013.
*> An improved parallel singular value algorithm and its implementation *> An improved parallel singular value algorithm and its implementation
*> for multicore hardware, In Proceedings of 2013 International Conference *> for multicore hardware, In Proceedings of 2013 International Conference
*> for High Performance Computing, Networking, Storage and Analysis (SC '13). *> for High Performance Computing, Networking, Storage and Analysis (SC '13).
*> Denver, Colorado, USA, 2013. *> Denver, Colorado, USA, 2013.
@ -291,11 +291,11 @@
*> http://doi.acm.org/10.1145/2503210.2503292 *> http://doi.acm.org/10.1145/2503210.2503292
*> *>
*> A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra. *> A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra.
*> A novel hybrid CPU-GPU generalized eigensolver for electronic structure *> A novel hybrid CPU-GPU generalized eigensolver for electronic structure
*> calculations based on fine-grained memory aware tasks. *> calculations based on fine-grained memory aware tasks.
*> International Journal of High Performance Computing Applications. *> International Journal of High Performance Computing Applications.
*> Volume 28 Issue 2, Pages 196-209, May 2014. *> Volume 28 Issue 2, Pages 196-209, May 2014.
*> http://hpc.sagepub.com/content/28/2/196 *> http://hpc.sagepub.com/content/28/2/196
*> *>
*> \endverbatim *> \endverbatim
* *
@ -335,7 +335,7 @@
CHARACTER ORDER CHARACTER ORDER
INTEGER I, IINFO, IMAX, INDD, INDE, INDEE, INDIBL, INTEGER I, IINFO, IMAX, INDD, INDE, INDEE, INDIBL,
$ INDISP, INDIWK, INDRWK, INDTAU, INDWRK, ISCALE, $ INDISP, INDIWK, INDRWK, INDTAU, INDWRK, ISCALE,
$ ITMP1, J, JJ, LLWORK, $ ITMP1, J, JJ, LLWORK,
$ NSPLIT, LWMIN, LHTRD, LWTRD, KD, IB, INDHOUS $ NSPLIT, LWMIN, LHTRD, LWTRD, KD, IB, INDHOUS
REAL ABSTLL, ANRM, BIGNUM, EPS, RMAX, RMIN, SAFMIN, REAL ABSTLL, ANRM, BIGNUM, EPS, RMAX, RMIN, SAFMIN,
$ SIGMA, SMLNUM, TMP1, VLL, VUU $ SIGMA, SMLNUM, TMP1, VLL, VUU
@ -343,8 +343,9 @@
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV2STAGE INTEGER ILAENV2STAGE
REAL SLAMCH, CLANHE REAL SLAMCH, CLANHE, SROUNDUP_LWORK
EXTERNAL LSAME, SLAMCH, CLANHE, ILAENV2STAGE EXTERNAL LSAME, SLAMCH, CLANHE, ILAENV2STAGE,
$ SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL SCOPY, SSCAL, SSTEBZ, SSTERF, XERBLA, CSSCAL, EXTERNAL SCOPY, SSCAL, SSTEBZ, SSTERF, XERBLA, CSSCAL,
@ -397,7 +398,7 @@
IF( INFO.EQ.0 ) THEN IF( INFO.EQ.0 ) THEN
IF( N.LE.1 ) THEN IF( N.LE.1 ) THEN
LWMIN = 1 LWMIN = 1
WORK( 1 ) = LWMIN WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
ELSE ELSE
KD = ILAENV2STAGE( 1, 'CHETRD_2STAGE', JOBZ, KD = ILAENV2STAGE( 1, 'CHETRD_2STAGE', JOBZ,
$ N, -1, -1, -1 ) $ N, -1, -1, -1 )
@ -408,7 +409,7 @@
LWTRD = ILAENV2STAGE( 4, 'CHETRD_2STAGE', JOBZ, LWTRD = ILAENV2STAGE( 4, 'CHETRD_2STAGE', JOBZ,
$ N, KD, IB, -1 ) $ N, KD, IB, -1 )
LWMIN = N + LHTRD + LWTRD LWMIN = N + LHTRD + LWTRD
WORK( 1 ) = LWMIN WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
END IF END IF
* *
IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY )
@ -499,7 +500,7 @@
LLWORK = LWORK - INDWRK + 1 LLWORK = LWORK - INDWRK + 1
* *
CALL CHETRD_2STAGE( JOBZ, UPLO, N, A, LDA, RWORK( INDD ), CALL CHETRD_2STAGE( JOBZ, UPLO, N, A, LDA, RWORK( INDD ),
$ RWORK( INDE ), WORK( INDTAU ), $ RWORK( INDE ), WORK( INDTAU ),
$ WORK( INDHOUS ), LHTRD, WORK( INDWRK ), $ WORK( INDHOUS ), LHTRD, WORK( INDWRK ),
$ LLWORK, IINFO ) $ LLWORK, IINFO )
* *
@ -610,7 +611,7 @@
* *
* Set WORK(1) to optimal complex workspace size. * Set WORK(1) to optimal complex workspace size.
* *
WORK( 1 ) = LWMIN WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
* *
RETURN RETURN
* *

View File

@ -173,7 +173,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexHEeigen *> \ingroup hegv
* *
* ===================================================================== * =====================================================================
SUBROUTINE CHEGV( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, SUBROUTINE CHEGV( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK,
@ -206,7 +206,8 @@
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV INTEGER ILAENV
EXTERNAL ILAENV, LSAME REAL SROUNDUP_LWORK
EXTERNAL ILAENV, LSAME, SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL CHEEV, CHEGST, CPOTRF, CTRMM, CTRSM, XERBLA EXTERNAL CHEEV, CHEGST, CPOTRF, CTRMM, CTRSM, XERBLA
@ -240,7 +241,7 @@
IF( INFO.EQ.0 ) THEN IF( INFO.EQ.0 ) THEN
NB = ILAENV( 1, 'CHETRD', UPLO, N, -1, -1, -1 ) NB = ILAENV( 1, 'CHETRD', UPLO, N, -1, -1, -1 )
LWKOPT = MAX( 1, ( NB + 1 )*N ) LWKOPT = MAX( 1, ( NB + 1 )*N )
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
IF( LWORK.LT.MAX( 1, 2*N-1 ) .AND. .NOT.LQUERY ) THEN IF( LWORK.LT.MAX( 1, 2*N-1 ) .AND. .NOT.LQUERY ) THEN
INFO = -11 INFO = -11
@ -309,7 +310,7 @@
END IF END IF
END IF END IF
* *
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
RETURN RETURN
* *

View File

@ -144,12 +144,12 @@
*> \verbatim *> \verbatim
*> LWORK is INTEGER *> LWORK is INTEGER
*> The length of the array WORK. LWORK >= 1, when N <= 1; *> The length of the array WORK. LWORK >= 1, when N <= 1;
*> otherwise *> otherwise
*> If JOBZ = 'N' and N > 1, LWORK must be queried. *> If JOBZ = 'N' and N > 1, LWORK must be queried.
*> LWORK = MAX(1, dimension) where *> LWORK = MAX(1, dimension) where
*> dimension = max(stage1,stage2) + (KD+1)*N + N *> dimension = max(stage1,stage2) + (KD+1)*N + N
*> = N*KD + N*max(KD+1,FACTOPTNB) *> = N*KD + N*max(KD+1,FACTOPTNB)
*> + max(2*KD*KD, KD*NTHREADS) *> + max(2*KD*KD, KD*NTHREADS)
*> + (KD+1)*N + N *> + (KD+1)*N + N
*> where KD is the blocking size of the reduction, *> where KD is the blocking size of the reduction,
*> FACTOPTNB is the blocking used by the QR or LQ *> FACTOPTNB is the blocking used by the QR or LQ
@ -192,7 +192,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexHEeigen *> \ingroup hegv_2stage
* *
*> \par Further Details: *> \par Further Details:
* ===================== * =====================
@ -210,7 +210,7 @@
*> http://doi.acm.org/10.1145/2063384.2063394 *> http://doi.acm.org/10.1145/2063384.2063394
*> *>
*> A. Haidar, J. Kurzak, P. Luszczek, 2013. *> A. Haidar, J. Kurzak, P. Luszczek, 2013.
*> An improved parallel singular value algorithm and its implementation *> An improved parallel singular value algorithm and its implementation
*> for multicore hardware, In Proceedings of 2013 International Conference *> for multicore hardware, In Proceedings of 2013 International Conference
*> for High Performance Computing, Networking, Storage and Analysis (SC '13). *> for High Performance Computing, Networking, Storage and Analysis (SC '13).
*> Denver, Colorado, USA, 2013. *> Denver, Colorado, USA, 2013.
@ -218,11 +218,11 @@
*> http://doi.acm.org/10.1145/2503210.2503292 *> http://doi.acm.org/10.1145/2503210.2503292
*> *>
*> A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra. *> A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra.
*> A novel hybrid CPU-GPU generalized eigensolver for electronic structure *> A novel hybrid CPU-GPU generalized eigensolver for electronic structure
*> calculations based on fine-grained memory aware tasks. *> calculations based on fine-grained memory aware tasks.
*> International Journal of High Performance Computing Applications. *> International Journal of High Performance Computing Applications.
*> Volume 28 Issue 2, Pages 196-209, May 2014. *> Volume 28 Issue 2, Pages 196-209, May 2014.
*> http://hpc.sagepub.com/content/28/2/196 *> http://hpc.sagepub.com/content/28/2/196
*> *>
*> \endverbatim *> \endverbatim
* *
@ -259,7 +259,8 @@
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV2STAGE INTEGER ILAENV2STAGE
EXTERNAL LSAME, ILAENV2STAGE REAL SROUNDUP_LWORK
EXTERNAL LSAME, ILAENV2STAGE, SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL XERBLA, CHEGST, CPOTRF, CTRMM, CTRSM, EXTERNAL XERBLA, CHEGST, CPOTRF, CTRMM, CTRSM,
@ -297,7 +298,7 @@
LHTRD = ILAENV2STAGE( 3, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 ) LHTRD = ILAENV2STAGE( 3, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
LWTRD = ILAENV2STAGE( 4, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 ) LWTRD = ILAENV2STAGE( 4, 'CHETRD_2STAGE', JOBZ, N, KD, IB, -1 )
LWMIN = N + LHTRD + LWTRD LWMIN = N + LHTRD + LWTRD
WORK( 1 ) = LWMIN WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
* *
IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) THEN IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) THEN
INFO = -11 INFO = -11
@ -327,7 +328,7 @@
* Transform problem to standard eigenvalue problem and solve. * Transform problem to standard eigenvalue problem and solve.
* *
CALL CHEGST( ITYPE, UPLO, N, A, LDA, B, LDB, INFO ) CALL CHEGST( ITYPE, UPLO, N, A, LDA, B, LDB, INFO )
CALL CHEEV_2STAGE( JOBZ, UPLO, N, A, LDA, W, CALL CHEEV_2STAGE( JOBZ, UPLO, N, A, LDA, W,
$ WORK, LWORK, RWORK, INFO ) $ WORK, LWORK, RWORK, INFO )
* *
IF( WANTZ ) THEN IF( WANTZ ) THEN
@ -367,7 +368,7 @@
END IF END IF
END IF END IF
* *
WORK( 1 ) = LWMIN WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
* *
RETURN RETURN
* *

View File

@ -219,7 +219,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexHEeigen *> \ingroup hegvd
* *
*> \par Further Details: *> \par Further Details:
* ===================== * =====================
@ -268,7 +268,8 @@
* .. * ..
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
EXTERNAL LSAME REAL SROUNDUP_LWORK
EXTERNAL LSAME, SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL CHEEVD, CHEGST, CPOTRF, CTRMM, CTRSM, XERBLA EXTERNAL CHEEVD, CHEGST, CPOTRF, CTRMM, CTRSM, XERBLA
@ -316,7 +317,7 @@
END IF END IF
* *
IF( INFO.EQ.0 ) THEN IF( INFO.EQ.0 ) THEN
WORK( 1 ) = LOPT WORK( 1 ) = SROUNDUP_LWORK(LOPT)
RWORK( 1 ) = LROPT RWORK( 1 ) = LROPT
IWORK( 1 ) = LIOPT IWORK( 1 ) = LIOPT
* *
@ -392,7 +393,7 @@
END IF END IF
END IF END IF
* *
WORK( 1 ) = LOPT WORK( 1 ) = SROUNDUP_LWORK(LOPT)
RWORK( 1 ) = LROPT RWORK( 1 ) = LROPT
IWORK( 1 ) = LIOPT IWORK( 1 ) = LIOPT
* *

View File

@ -293,7 +293,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexHEeigen *> \ingroup hegvx
* *
*> \par Contributors: *> \par Contributors:
* ================== * ==================
@ -335,7 +335,8 @@
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV INTEGER ILAENV
EXTERNAL ILAENV, LSAME REAL SROUNDUP_LWORK
EXTERNAL ILAENV, LSAME, SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL CHEEVX, CHEGST, CPOTRF, CTRMM, CTRSM, XERBLA EXTERNAL CHEEVX, CHEGST, CPOTRF, CTRMM, CTRSM, XERBLA
@ -390,7 +391,7 @@
IF( INFO.EQ.0 ) THEN IF( INFO.EQ.0 ) THEN
NB = ILAENV( 1, 'CHETRD', UPLO, N, -1, -1, -1 ) NB = ILAENV( 1, 'CHETRD', UPLO, N, -1, -1, -1 )
LWKOPT = MAX( 1, ( NB + 1 )*N ) LWKOPT = MAX( 1, ( NB + 1 )*N )
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
IF( LWORK.LT.MAX( 1, 2*N ) .AND. .NOT.LQUERY ) THEN IF( LWORK.LT.MAX( 1, 2*N ) .AND. .NOT.LQUERY ) THEN
INFO = -20 INFO = -20
@ -464,7 +465,7 @@
* *
* Set WORK(1) to optimal complex workspace size. * Set WORK(1) to optimal complex workspace size.
* *
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
RETURN RETURN
* *

View File

@ -163,7 +163,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexHEsolve *> \ingroup hesv
* *
* ===================================================================== * =====================================================================
SUBROUTINE CHESV( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK, SUBROUTINE CHESV( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK,
@ -191,7 +191,8 @@
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV INTEGER ILAENV
EXTERNAL LSAME, ILAENV REAL SROUNDUP_LWORK
EXTERNAL LSAME, ILAENV, SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL XERBLA, CHETRF, CHETRS, CHETRS2 EXTERNAL XERBLA, CHETRF, CHETRS, CHETRS2
@ -226,7 +227,7 @@
NB = ILAENV( 1, 'CHETRF', UPLO, N, -1, -1, -1 ) NB = ILAENV( 1, 'CHETRF', UPLO, N, -1, -1, -1 )
LWKOPT = N*NB LWKOPT = N*NB
END IF END IF
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
END IF END IF
* *
IF( INFO.NE.0 ) THEN IF( INFO.NE.0 ) THEN
@ -259,7 +260,7 @@
* *
END IF END IF
* *
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
RETURN RETURN
* *

View File

@ -154,7 +154,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexHEsolve *> \ingroup hesv_aa
* *
* ===================================================================== * =====================================================================
SUBROUTINE CHESV_AA( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK, SUBROUTINE CHESV_AA( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK,
@ -182,7 +182,8 @@
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV INTEGER ILAENV
EXTERNAL LSAME, ILAENV REAL SROUNDUP_LWORK
EXTERNAL LSAME, ILAENV, SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL XERBLA, CHETRF_AA, CHETRS_AA EXTERNAL XERBLA, CHETRF_AA, CHETRS_AA
@ -217,7 +218,7 @@
$ -1, INFO ) $ -1, INFO )
LWKOPT_HETRS = INT( WORK(1) ) LWKOPT_HETRS = INT( WORK(1) )
LWKOPT = MAX( LWKOPT_HETRF, LWKOPT_HETRS ) LWKOPT = MAX( LWKOPT_HETRF, LWKOPT_HETRS )
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
END IF END IF
* *
IF( INFO.NE.0 ) THEN IF( INFO.NE.0 ) THEN
@ -239,7 +240,7 @@
* *
END IF END IF
* *
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
RETURN RETURN
* *

View File

@ -177,7 +177,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexSYcomputational *> \ingroup hesv_aa_2stage
* *
* ===================================================================== * =====================================================================
SUBROUTINE CHESV_AA_2STAGE( UPLO, N, NRHS, A, LDA, TB, LTB, SUBROUTINE CHESV_AA_2STAGE( UPLO, N, NRHS, A, LDA, TB, LTB,
@ -207,7 +207,8 @@
* .. * ..
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
EXTERNAL LSAME REAL SROUNDUP_LWORK
EXTERNAL LSAME, SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL CHETRF_AA_2STAGE, CHETRS_AA_2STAGE, EXTERNAL CHETRF_AA_2STAGE, CHETRS_AA_2STAGE,
@ -267,7 +268,7 @@
* *
END IF END IF
* *
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
RETURN RETURN
* *

View File

@ -205,7 +205,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexHEsolve *> \ingroup hesv_rk
* *
*> \par Contributors: *> \par Contributors:
* ================== * ==================
@ -247,7 +247,8 @@
* .. * ..
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
EXTERNAL LSAME REAL SROUNDUP_LWORK
EXTERNAL LSAME, SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL XERBLA, CHETRF_RK, CHETRS_3 EXTERNAL XERBLA, CHETRF_RK, CHETRS_3
@ -282,7 +283,7 @@
CALL CHETRF_RK( UPLO, N, A, LDA, E, IPIV, WORK, -1, INFO ) CALL CHETRF_RK( UPLO, N, A, LDA, E, IPIV, WORK, -1, INFO )
LWKOPT = INT( WORK( 1 ) ) LWKOPT = INT( WORK( 1 ) )
END IF END IF
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
END IF END IF
* *
IF( INFO.NE.0 ) THEN IF( INFO.NE.0 ) THEN
@ -304,7 +305,7 @@
* *
END IF END IF
* *
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
RETURN RETURN
* *

View File

@ -184,7 +184,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexHEsolve *> \ingroup hesv_rook
*> *>
*> \verbatim *> \verbatim
*> *>
@ -225,7 +225,8 @@
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV INTEGER ILAENV
EXTERNAL LSAME, ILAENV REAL SROUNDUP_LWORK
EXTERNAL LSAME, ILAENV, SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL XERBLA, CHETRF_ROOK, CHETRS_ROOK EXTERNAL XERBLA, CHETRF_ROOK, CHETRS_ROOK
@ -260,7 +261,7 @@
NB = ILAENV( 1, 'CHETRF_ROOK', UPLO, N, -1, -1, -1 ) NB = ILAENV( 1, 'CHETRF_ROOK', UPLO, N, -1, -1, -1 )
LWKOPT = N*NB LWKOPT = N*NB
END IF END IF
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
END IF END IF
* *
IF( INFO.NE.0 ) THEN IF( INFO.NE.0 ) THEN
@ -283,7 +284,7 @@
* *
END IF END IF
* *
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
RETURN RETURN
* *

View File

@ -276,7 +276,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexHEsolve *> \ingroup hesvx
* *
* ===================================================================== * =====================================================================
SUBROUTINE CHESVX( FACT, UPLO, N, NRHS, A, LDA, AF, LDAF, IPIV, B, SUBROUTINE CHESVX( FACT, UPLO, N, NRHS, A, LDA, AF, LDAF, IPIV, B,
@ -313,8 +313,8 @@
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV INTEGER ILAENV
REAL CLANHE, SLAMCH REAL CLANHE, SLAMCH, SROUNDUP_LWORK
EXTERNAL ILAENV, LSAME, CLANHE, SLAMCH EXTERNAL ILAENV, LSAME, CLANHE, SLAMCH, SROUNDUP_LWORK
* .. * ..
* .. External Subroutines .. * .. External Subroutines ..
EXTERNAL CHECON, CHERFS, CHETRF, CHETRS, CLACPY, XERBLA EXTERNAL CHECON, CHERFS, CHETRF, CHETRS, CLACPY, XERBLA
@ -356,7 +356,7 @@
NB = ILAENV( 1, 'CHETRF', UPLO, N, -1, -1, -1 ) NB = ILAENV( 1, 'CHETRF', UPLO, N, -1, -1, -1 )
LWKOPT = MAX( LWKOPT, N*NB ) LWKOPT = MAX( LWKOPT, N*NB )
END IF END IF
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
END IF END IF
* *
IF( INFO.NE.0 ) THEN IF( INFO.NE.0 ) THEN
@ -405,7 +405,7 @@
IF( RCOND.LT.SLAMCH( 'Epsilon' ) ) IF( RCOND.LT.SLAMCH( 'Epsilon' ) )
$ INFO = N + 1 $ INFO = N + 1
* *
WORK( 1 ) = LWKOPT WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
* *
RETURN RETURN
* *

View File

@ -18,7 +18,7 @@
* Definition: * Definition:
* =========== * ===========
* *
* SUBROUTINE CHETRD_HB2ST( STAGE1, VECT, UPLO, N, KD, AB, LDAB, * SUBROUTINE CHETRD_HB2ST( STAGE1, VECT, UPLO, N, KD, AB, LDAB,
* D, E, HOUS, LHOUS, WORK, LWORK, INFO ) * D, E, HOUS, LHOUS, WORK, LWORK, INFO )
* *
* #if defined(_OPENMP) * #if defined(_OPENMP)
@ -53,12 +53,12 @@
*> \param[in] STAGE1 *> \param[in] STAGE1
*> \verbatim *> \verbatim
*> STAGE1 is CHARACTER*1 *> STAGE1 is CHARACTER*1
*> = 'N': "No": to mention that the stage 1 of the reduction *> = 'N': "No": to mention that the stage 1 of the reduction
*> from dense to band using the chetrd_he2hb routine *> from dense to band using the chetrd_he2hb routine
*> was not called before this routine to reproduce AB. *> was not called before this routine to reproduce AB.
*> In other term this routine is called as standalone. *> In other term this routine is called as standalone.
*> = 'Y': "Yes": to mention that the stage 1 of the *> = 'Y': "Yes": to mention that the stage 1 of the
*> reduction from dense to band using the chetrd_he2hb *> reduction from dense to band using the chetrd_he2hb
*> routine has been called to produce AB (e.g., AB is *> routine has been called to produce AB (e.g., AB is
*> the output of chetrd_he2hb. *> the output of chetrd_he2hb.
*> \endverbatim *> \endverbatim
@ -66,10 +66,10 @@
*> \param[in] VECT *> \param[in] VECT
*> \verbatim *> \verbatim
*> VECT is CHARACTER*1 *> VECT is CHARACTER*1
*> = 'N': No need for the Housholder representation, *> = 'N': No need for the Housholder representation,
*> and thus LHOUS is of size max(1, 4*N); *> and thus LHOUS is of size max(1, 4*N);
*> = 'V': the Householder representation is needed to *> = 'V': the Householder representation is needed to
*> either generate or to apply Q later on, *> either generate or to apply Q later on,
*> then LHOUS is to be queried and computed. *> then LHOUS is to be queried and computed.
*> (NOT AVAILABLE IN THIS RELEASE). *> (NOT AVAILABLE IN THIS RELEASE).
*> \endverbatim *> \endverbatim
@ -147,7 +147,7 @@
*> message related to LHOUS is issued by XERBLA. *> message related to LHOUS is issued by XERBLA.
*> LHOUS = MAX(1, dimension) where *> LHOUS = MAX(1, dimension) where
*> dimension = 4*N if VECT='N' *> dimension = 4*N if VECT='N'
*> not available now if VECT='H' *> not available now if VECT='H'
*> \endverbatim *> \endverbatim
*> *>
*> \param[out] WORK *> \param[out] WORK
@ -188,7 +188,7 @@
*> \author Univ. of Colorado Denver *> \author Univ. of Colorado Denver
*> \author NAG Ltd. *> \author NAG Ltd.
* *
*> \ingroup complexOTHERcomputational *> \ingroup hetrd_hb2st
* *
*> \par Further Details: *> \par Further Details:
* ===================== * =====================
@ -208,7 +208,7 @@
*> http://doi.acm.org/10.1145/2063384.2063394 *> http://doi.acm.org/10.1145/2063384.2063394
*> *>
*> A. Haidar, J. Kurzak, P. Luszczek, 2013. *> A. Haidar, J. Kurzak, P. Luszczek, 2013.
*> An improved parallel singular value algorithm and its implementation *> An improved parallel singular value algorithm and its implementation
*> for multicore hardware, In Proceedings of 2013 International Conference *> for multicore hardware, In Proceedings of 2013 International Conference
*> for High Performance Computing, Networking, Storage and Analysis (SC '13). *> for High Performance Computing, Networking, Storage and Analysis (SC '13).
*> Denver, Colorado, USA, 2013. *> Denver, Colorado, USA, 2013.
@ -216,16 +216,16 @@
*> http://doi.acm.org/10.1145/2503210.2503292 *> http://doi.acm.org/10.1145/2503210.2503292
*> *>
*> A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra. *> A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra.
*> A novel hybrid CPU-GPU generalized eigensolver for electronic structure *> A novel hybrid CPU-GPU generalized eigensolver for electronic structure
*> calculations based on fine-grained memory aware tasks. *> calculations based on fine-grained memory aware tasks.
*> International Journal of High Performance Computing Applications. *> International Journal of High Performance Computing Applications.
*> Volume 28 Issue 2, Pages 196-209, May 2014. *> Volume 28 Issue 2, Pages 196-209, May 2014.
*> http://hpc.sagepub.com/content/28/2/196 *> http://hpc.sagepub.com/content/28/2/196
*> *>
*> \endverbatim *> \endverbatim
*> *>
* ===================================================================== * =====================================================================
SUBROUTINE CHETRD_HB2ST( STAGE1, VECT, UPLO, N, KD, AB, LDAB, SUBROUTINE CHETRD_HB2ST( STAGE1, VECT, UPLO, N, KD, AB, LDAB,
$ D, E, HOUS, LHOUS, WORK, LWORK, INFO ) $ D, E, HOUS, LHOUS, WORK, LWORK, INFO )
* *
* *
@ -259,11 +259,11 @@
* .. * ..
* .. Local Scalars .. * .. Local Scalars ..
LOGICAL LQUERY, WANTQ, UPPER, AFTERS1 LOGICAL LQUERY, WANTQ, UPPER, AFTERS1
INTEGER I, M, K, IB, SWEEPID, MYID, SHIFT, STT, ST, INTEGER I, M, K, IB, SWEEPID, MYID, SHIFT, STT, ST,
$ ED, STIND, EDIND, BLKLASTIND, COLPT, THED, $ ED, STIND, EDIND, BLKLASTIND, COLPT, THED,
$ STEPERCOL, GRSIZ, THGRSIZ, THGRNB, THGRID, $ STEPERCOL, GRSIZ, THGRSIZ, THGRNB, THGRID,
$ NBTILES, TTYPE, TID, NTHREADS, DEBUG, $ NBTILES, TTYPE, TID, NTHREADS, DEBUG,
$ ABDPOS, ABOFDPOS, DPOS, OFDPOS, AWPOS, $ ABDPOS, ABOFDPOS, DPOS, OFDPOS, AWPOS,
$ INDA, INDW, APOS, SIZEA, LDA, INDV, INDTAU, $ INDA, INDW, APOS, SIZEA, LDA, INDV, INDTAU,
$ SICEV, SIZETAU, LDV, LHMIN, LWMIN $ SICEV, SIZETAU, LDV, LHMIN, LWMIN
REAL ABSTMP REAL ABSTMP
@ -277,8 +277,9 @@
* .. * ..
* .. External Functions .. * .. External Functions ..
LOGICAL LSAME LOGICAL LSAME
INTEGER ILAENV2STAGE INTEGER ILAENV2STAGE
EXTERNAL LSAME, ILAENV2STAGE REAL SROUNDUP_LWORK
EXTERNAL LSAME, ILAENV2STAGE, SROUNDUP_LWORK
* .. * ..
* .. Executable Statements .. * .. Executable Statements ..
* *
@ -318,7 +319,7 @@
* *
IF( INFO.EQ.0 ) THEN IF( INFO.EQ.0 ) THEN
HOUS( 1 ) = LHMIN HOUS( 1 ) = LHMIN
WORK( 1 ) = LWMIN WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
END IF END IF
* *
IF( INFO.NE.0 ) THEN IF( INFO.NE.0 ) THEN
@ -358,7 +359,7 @@
ABDPOS = KD + 1 ABDPOS = KD + 1
ABOFDPOS = KD ABOFDPOS = KD
ELSE ELSE
APOS = INDA APOS = INDA
AWPOS = INDA + KD + 1 AWPOS = INDA + KD + 1
DPOS = APOS DPOS = APOS
OFDPOS = DPOS + 1 OFDPOS = DPOS + 1
@ -366,11 +367,11 @@
ABOFDPOS = 2 ABOFDPOS = 2
ENDIF ENDIF
* *
* Case KD=0: * Case KD=0:
* The matrix is diagonal. We just copy it (convert to "real" for * The matrix is diagonal. We just copy it (convert to "real" for
* complex because D is double and the imaginary part should be 0) * complex because D is double and the imaginary part should be 0)
* and store it in D. A sequential code here is better or * and store it in D. A sequential code here is better or
* in a parallel environment it might need two cores for D and E * in a parallel environment it might need two cores for D and E
* *
IF( KD.EQ.0 ) THEN IF( KD.EQ.0 ) THEN
@ -385,17 +386,17 @@
WORK( 1 ) = 1 WORK( 1 ) = 1
RETURN RETURN
END IF END IF
* *
* Case KD=1: * Case KD=1:
* The matrix is already Tridiagonal. We have to make diagonal * The matrix is already Tridiagonal. We have to make diagonal
* and offdiagonal elements real, and store them in D and E. * and offdiagonal elements real, and store them in D and E.
* For that, for real precision just copy the diag and offdiag * For that, for real precision just copy the diag and offdiag
* to D and E while for the COMPLEX case the bulge chasing is * to D and E while for the COMPLEX case the bulge chasing is
* performed to convert the hermetian tridiagonal to symmetric * performed to convert the hermetian tridiagonal to symmetric
* tridiagonal. A simpler conversion formula might be used, but then * tridiagonal. A simpler conversion formula might be used, but then
* updating the Q matrix will be required and based if Q is generated * updating the Q matrix will be required and based if Q is generated
* or not this might complicate the story. * or not this might complicate the story.
* *
IF( KD.EQ.1 ) THEN IF( KD.EQ.1 ) THEN
DO 50 I = 1, N DO 50 I = 1, N
D( I ) = REAL( AB( ABDPOS, I ) ) D( I ) = REAL( AB( ABDPOS, I ) )
@ -444,7 +445,7 @@ C END IF
RETURN RETURN
END IF END IF
* *
* Main code start here. * Main code start here.
* Reduce the hermitian band of A to a tridiagonal matrix. * Reduce the hermitian band of A to a tridiagonal matrix.
* *
THGRSIZ = N THGRSIZ = N
@ -453,7 +454,7 @@ C END IF
NBTILES = CEILING( REAL(N)/REAL(KD) ) NBTILES = CEILING( REAL(N)/REAL(KD) )
STEPERCOL = CEILING( REAL(SHIFT)/REAL(GRSIZ) ) STEPERCOL = CEILING( REAL(SHIFT)/REAL(GRSIZ) )
THGRNB = CEILING( REAL(N-1)/REAL(THGRSIZ) ) THGRNB = CEILING( REAL(N-1)/REAL(THGRSIZ) )
* *
CALL CLACPY( "A", KD+1, N, AB, LDAB, WORK( APOS ), LDA ) CALL CLACPY( "A", KD+1, N, AB, LDAB, WORK( APOS ), LDA )
CALL CLASET( "A", KD, N, ZERO, ZERO, WORK( AWPOS ), LDA ) CALL CLASET( "A", KD, N, ZERO, ZERO, WORK( AWPOS ), LDA )
* *
@ -462,7 +463,7 @@ C END IF
* *
#if defined(_OPENMP) #if defined(_OPENMP)
!$OMP PARALLEL PRIVATE( TID, THGRID, BLKLASTIND ) !$OMP PARALLEL PRIVATE( TID, THGRID, BLKLASTIND )
!$OMP$ PRIVATE( THED, I, M, K, ST, ED, STT, SWEEPID ) !$OMP$ PRIVATE( THED, I, M, K, ST, ED, STT, SWEEPID )
!$OMP$ PRIVATE( MYID, TTYPE, COLPT, STIND, EDIND ) !$OMP$ PRIVATE( MYID, TTYPE, COLPT, STIND, EDIND )
!$OMP$ SHARED ( UPLO, WANTQ, INDV, INDTAU, HOUS, WORK) !$OMP$ SHARED ( UPLO, WANTQ, INDV, INDTAU, HOUS, WORK)
!$OMP$ SHARED ( N, KD, IB, NBTILES, LDA, LDV, INDA ) !$OMP$ SHARED ( N, KD, IB, NBTILES, LDA, LDV, INDA )
@ -471,7 +472,7 @@ C END IF
#endif #endif
* *
* main bulge chasing loop * main bulge chasing loop
* *
DO 100 THGRID = 1, THGRNB DO 100 THGRID = 1, THGRNB
STT = (THGRID-1)*THGRSIZ+1 STT = (THGRID-1)*THGRSIZ+1
THED = MIN( (STT + THGRSIZ -1), (N-1)) THED = MIN( (STT + THGRSIZ -1), (N-1))
@ -482,7 +483,7 @@ C END IF
ST = STT ST = STT
DO 130 SWEEPID = ST, ED DO 130 SWEEPID = ST, ED
DO 140 K = 1, GRSIZ DO 140 K = 1, GRSIZ
MYID = (I-SWEEPID)*(STEPERCOL*GRSIZ) MYID = (I-SWEEPID)*(STEPERCOL*GRSIZ)
$ + (M-1)*GRSIZ + K $ + (M-1)*GRSIZ + K
IF ( MYID.EQ.1 ) THEN IF ( MYID.EQ.1 ) THEN
TTYPE = 1 TTYPE = 1
@ -508,16 +509,16 @@ C END IF
ENDIF ENDIF
* *
* Call the kernel * Call the kernel
* *
#if defined(_OPENMP) && _OPENMP >= 201307 #if defined(_OPENMP) && _OPENMP >= 201307
IF( TTYPE.NE.1 ) THEN IF( TTYPE.NE.1 ) THEN
!$OMP TASK DEPEND(in:WORK(MYID+SHIFT-1)) !$OMP TASK DEPEND(in:WORK(MYID+SHIFT-1))
!$OMP$ DEPEND(in:WORK(MYID-1)) !$OMP$ DEPEND(in:WORK(MYID-1))
!$OMP$ DEPEND(out:WORK(MYID)) !$OMP$ DEPEND(out:WORK(MYID))
TID = OMP_GET_THREAD_NUM() TID = OMP_GET_THREAD_NUM()
CALL CHB2ST_KERNELS( UPLO, WANTQ, TTYPE, CALL CHB2ST_KERNELS( UPLO, WANTQ, TTYPE,
$ STIND, EDIND, SWEEPID, N, KD, IB, $ STIND, EDIND, SWEEPID, N, KD, IB,
$ WORK ( INDA ), LDA, $ WORK ( INDA ), LDA,
$ HOUS( INDV ), HOUS( INDTAU ), LDV, $ HOUS( INDV ), HOUS( INDTAU ), LDV,
$ WORK( INDW + TID*KD ) ) $ WORK( INDW + TID*KD ) )
!$OMP END TASK !$OMP END TASK
@ -525,20 +526,20 @@ C END IF
!$OMP TASK DEPEND(in:WORK(MYID+SHIFT-1)) !$OMP TASK DEPEND(in:WORK(MYID+SHIFT-1))
!$OMP$ DEPEND(out:WORK(MYID)) !$OMP$ DEPEND(out:WORK(MYID))
TID = OMP_GET_THREAD_NUM() TID = OMP_GET_THREAD_NUM()
CALL CHB2ST_KERNELS( UPLO, WANTQ, TTYPE, CALL CHB2ST_KERNELS( UPLO, WANTQ, TTYPE,
$ STIND, EDIND, SWEEPID, N, KD, IB, $ STIND, EDIND, SWEEPID, N, KD, IB,
$ WORK ( INDA ), LDA, $ WORK ( INDA ), LDA,
$ HOUS( INDV ), HOUS( INDTAU ), LDV, $ HOUS( INDV ), HOUS( INDTAU ), LDV,
$ WORK( INDW + TID*KD ) ) $ WORK( INDW + TID*KD ) )
!$OMP END TASK !$OMP END TASK
ENDIF ENDIF
#else #else
CALL CHB2ST_KERNELS( UPLO, WANTQ, TTYPE, CALL CHB2ST_KERNELS( UPLO, WANTQ, TTYPE,
$ STIND, EDIND, SWEEPID, N, KD, IB, $ STIND, EDIND, SWEEPID, N, KD, IB,
$ WORK ( INDA ), LDA, $ WORK ( INDA ), LDA,
$ HOUS( INDV ), HOUS( INDTAU ), LDV, $ HOUS( INDV ), HOUS( INDTAU ), LDV,
$ WORK( INDW ) ) $ WORK( INDW ) )
#endif #endif
IF ( BLKLASTIND.GE.(N-1) ) THEN IF ( BLKLASTIND.GE.(N-1) ) THEN
STT = STT + 1 STT = STT + 1
EXIT EXIT
@ -553,14 +554,14 @@ C END IF
!$OMP END MASTER !$OMP END MASTER
!$OMP END PARALLEL !$OMP END PARALLEL
#endif #endif
* *
* Copy the diagonal from A to D. Note that D is REAL thus only * Copy the diagonal from A to D. Note that D is REAL thus only
* the Real part is needed, the imaginary part should be zero. * the Real part is needed, the imaginary part should be zero.
* *
DO 150 I = 1, N DO 150 I = 1, N
D( I ) = REAL( WORK( DPOS+(I-1)*LDA ) ) D( I ) = REAL( WORK( DPOS+(I-1)*LDA ) )
150 CONTINUE 150 CONTINUE
* *
* Copy the off diagonal from A to E. Note that E is REAL thus only * Copy the off diagonal from A to E. Note that E is REAL thus only
* the Real part is needed, the imaginary part should be zero. * the Real part is needed, the imaginary part should be zero.
* *
@ -575,10 +576,10 @@ C END IF
ENDIF ENDIF
* *
HOUS( 1 ) = LHMIN HOUS( 1 ) = LHMIN
WORK( 1 ) = LWMIN WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
RETURN RETURN
* *
* End of CHETRD_HB2ST * End of CHETRD_HB2ST
* *
END END