From 0ea23484c6efa98acaac98fb8af878b15d7a5925 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Thu, 9 Apr 2026 14:54:55 +0200 Subject: [PATCH] Use ROUNDUP_LWORK and remove redundant conversions (Reference-LAPACK PR1203) --- lapack-netlib/SRC/chegvd.f | 16 +++++++++------- lapack-netlib/SRC/chpgvd.f | 13 +++++++------ lapack-netlib/SRC/zhegvd.f | 22 ++++++++++++---------- lapack-netlib/SRC/zhpgvd.f | 19 ++++++++++--------- 4 files changed, 38 insertions(+), 32 deletions(-) diff --git a/lapack-netlib/SRC/chegvd.f b/lapack-netlib/SRC/chegvd.f index 34f56b154b..a20243ff92 100644 --- a/lapack-netlib/SRC/chegvd.f +++ b/lapack-netlib/SRC/chegvd.f @@ -5,7 +5,6 @@ * Online html documentation available at * http://www.netlib.org/lapack/explore-html/ * -*> \htmlonly *> Download CHEGVD + dependencies *> *> [TGZ] @@ -13,7 +12,6 @@ *> [ZIP] *> *> [TXT] -*> \endhtmlonly * * Definition: * =========== @@ -238,8 +236,10 @@ *> Mark Fahey, Department of Mathematics, Univ. of Kentucky, USA *> * ===================================================================== - SUBROUTINE CHEGVD( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, + SUBROUTINE CHEGVD( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, + $ WORK, $ LWORK, RWORK, LRWORK, IWORK, LIWORK, INFO ) + IMPLICIT NONE * * -- LAPACK driver routine -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- @@ -272,7 +272,8 @@ SUBROUTINE CHEGVD( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, EXTERNAL LSAME, SROUNDUP_LWORK * .. * .. External Subroutines .. - EXTERNAL CHEEVD, CHEGST, CPOTRF, CTRMM, CTRSM, XERBLA + EXTERNAL CHEEVD, CHEGST, CPOTRF, CTRMM, CTRSM, + $ XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX, REAL @@ -318,7 +319,7 @@ SUBROUTINE CHEGVD( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, * IF( INFO.EQ.0 ) THEN WORK( 1 ) = SROUNDUP_LWORK(LOPT) - RWORK( 1 ) = LROPT + RWORK( 1 ) = SROUNDUP_LWORK(LROPT) IWORK( 1 ) = LIOPT * IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) THEN @@ -353,7 +354,8 @@ SUBROUTINE CHEGVD( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, * Transform problem to standard eigenvalue problem and solve. * CALL CHEGST( ITYPE, UPLO, N, A, LDA, B, LDB, INFO ) - CALL CHEEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK, LRWORK, + CALL CHEEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK, + $ LRWORK, $ IWORK, LIWORK, INFO ) LOPT = MAX( LOPT, INT( REAL( WORK( 1 ) ) ) ) LROPT = MAX( LROPT, INT( RWORK( 1 ) ) ) @@ -394,7 +396,7 @@ SUBROUTINE CHEGVD( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, END IF * WORK( 1 ) = SROUNDUP_LWORK(LOPT) - RWORK( 1 ) = LROPT + RWORK( 1 ) = SROUNDUP_LWORK(LROPT) IWORK( 1 ) = LIOPT * RETURN diff --git a/lapack-netlib/SRC/chpgvd.f b/lapack-netlib/SRC/chpgvd.f index 7815efb4e2..8a6634f2cd 100644 --- a/lapack-netlib/SRC/chpgvd.f +++ b/lapack-netlib/SRC/chpgvd.f @@ -5,7 +5,6 @@ * Online html documentation available at * http://www.netlib.org/lapack/explore-html/ * -*> \htmlonly *> Download CHPGVD + dependencies *> *> [TGZ] @@ -13,7 +12,6 @@ *> [ZIP] *> *> [TXT] -*> \endhtmlonly * * Definition: * =========== @@ -220,8 +218,10 @@ *> Mark Fahey, Department of Mathematics, Univ. of Kentucky, USA * * ===================================================================== - SUBROUTINE CHPGVD( ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK, + SUBROUTINE CHPGVD( ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, + $ WORK, $ LWORK, RWORK, LRWORK, IWORK, LIWORK, INFO ) + IMPLICIT NONE * * -- LAPACK driver routine -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- @@ -250,7 +250,8 @@ SUBROUTINE CHPGVD( ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK, EXTERNAL LSAME, SROUNDUP_LWORK * .. * .. External Subroutines .. - EXTERNAL CHPEVD, CHPGST, CPPTRF, CTPMV, CTPSV, XERBLA + EXTERNAL CHPEVD, CHPGST, CPPTRF, CTPMV, CTPSV, + $ XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX, REAL @@ -294,7 +295,7 @@ SUBROUTINE CHPGVD( ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK, END IF * WORK( 1 ) = SROUNDUP_LWORK(LWMIN) - RWORK( 1 ) = LRWMIN + RWORK( 1 ) = SROUNDUP_LWORK(LRWMIN) IWORK( 1 ) = LIWMIN IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) THEN INFO = -11 @@ -376,7 +377,7 @@ SUBROUTINE CHPGVD( ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK, END IF * WORK( 1 ) = SROUNDUP_LWORK(LWMIN) - RWORK( 1 ) = LRWMIN + RWORK( 1 ) = SROUNDUP_LWORK(LRWMIN) IWORK( 1 ) = LIWMIN RETURN * diff --git a/lapack-netlib/SRC/zhegvd.f b/lapack-netlib/SRC/zhegvd.f index a1c569fe3c..bdcd681a93 100644 --- a/lapack-netlib/SRC/zhegvd.f +++ b/lapack-netlib/SRC/zhegvd.f @@ -5,7 +5,6 @@ * Online html documentation available at * http://www.netlib.org/lapack/explore-html/ * -*> \htmlonly *> Download ZHEGVD + dependencies *> *> [TGZ] @@ -13,7 +12,6 @@ *> [ZIP] *> *> [TXT] -*> \endhtmlonly * * Definition: * =========== @@ -219,7 +217,7 @@ *> \author Univ. of Colorado Denver *> \author NAG Ltd. * -*> \ingroup complex16HEeigen +*> \ingroup hegvd * *> \par Further Details: * ===================== @@ -238,8 +236,10 @@ *> Mark Fahey, Department of Mathematics, Univ. of Kentucky, USA *> * ===================================================================== - SUBROUTINE ZHEGVD( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, + SUBROUTINE ZHEGVD( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, + $ WORK, $ LWORK, RWORK, LRWORK, IWORK, LIWORK, INFO ) + IMPLICIT NONE * * -- LAPACK driver routine -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- @@ -272,7 +272,8 @@ SUBROUTINE ZHEGVD( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, EXTERNAL LSAME, DROUNDUP_LWORK * .. * .. External Subroutines .. - EXTERNAL XERBLA, ZHEEVD, ZHEGST, ZPOTRF, ZTRMM, ZTRSM + EXTERNAL XERBLA, ZHEEVD, ZHEGST, ZPOTRF, ZTRMM, + $ ZTRSM * .. * .. Intrinsic Functions .. INTRINSIC DBLE, MAX @@ -317,8 +318,8 @@ SUBROUTINE ZHEGVD( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, END IF * IF( INFO.EQ.0 ) THEN - WORK( 1 ) = LOPT - RWORK( 1 ) = LROPT + WORK( 1 ) = DROUNDUP_LWORK(LOPT) + RWORK( 1 ) = DROUNDUP_LWORK(LROPT) IWORK( 1 ) = LIOPT * IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) THEN @@ -353,7 +354,8 @@ SUBROUTINE ZHEGVD( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, * Transform problem to standard eigenvalue problem and solve. * CALL ZHEGST( ITYPE, UPLO, N, A, LDA, B, LDB, INFO ) - CALL ZHEEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK, LRWORK, + CALL ZHEEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK, + $ LRWORK, $ IWORK, LIWORK, INFO ) LOPT = MAX( LOPT, INT( DBLE( WORK( 1 ) ) ) ) LROPT = MAX( LROPT, INT( RWORK( 1 ) ) ) @@ -393,8 +395,8 @@ SUBROUTINE ZHEGVD( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, END IF END IF * - WORK( 1 ) = LOPT - RWORK( 1 ) = LROPT + WORK( 1 ) = DROUNDUP_LWORK(LOPT) + RWORK( 1 ) = DROUNDUP_LWORK(LROPT) IWORK( 1 ) = LIOPT * RETURN diff --git a/lapack-netlib/SRC/zhpgvd.f b/lapack-netlib/SRC/zhpgvd.f index e0d35b4d49..78414fa5fb 100644 --- a/lapack-netlib/SRC/zhpgvd.f +++ b/lapack-netlib/SRC/zhpgvd.f @@ -5,7 +5,6 @@ * Online html documentation available at * http://www.netlib.org/lapack/explore-html/ * -*> \htmlonly *> Download ZHPGVD + dependencies *> *> [TGZ] @@ -13,7 +12,6 @@ *> [ZIP] *> *> [TXT] -*> \endhtmlonly * * Definition: * =========== @@ -212,7 +210,7 @@ *> \author Univ. of Colorado Denver *> \author NAG Ltd. * -*> \ingroup complex16OTHEReigen +*> \ingroup hpgvd * *> \par Contributors: * ================== @@ -220,8 +218,10 @@ *> Mark Fahey, Department of Mathematics, Univ. of Kentucky, USA * * ===================================================================== - SUBROUTINE ZHPGVD( ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK, + SUBROUTINE ZHPGVD( ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, + $ WORK, $ LWORK, RWORK, LRWORK, IWORK, LIWORK, INFO ) + IMPLICIT NONE * * -- LAPACK driver routine -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- @@ -250,7 +250,8 @@ SUBROUTINE ZHPGVD( ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK, EXTERNAL LSAME, DROUNDUP_LWORK * .. * .. External Subroutines .. - EXTERNAL XERBLA, ZHPEVD, ZHPGST, ZPPTRF, ZTPMV, ZTPSV + EXTERNAL XERBLA, ZHPEVD, ZHPGST, ZPPTRF, ZTPMV, + $ ZTPSV * .. * .. Intrinsic Functions .. INTRINSIC DBLE, MAX @@ -293,8 +294,8 @@ SUBROUTINE ZHPGVD( ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK, END IF END IF * - WORK( 1 ) = LWMIN - RWORK( 1 ) = LRWMIN + WORK( 1 ) = DROUNDUP_LWORK(LWMIN) + RWORK( 1 ) = DROUNDUP_LWORK(LRWMIN) IWORK( 1 ) = LIWMIN IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) THEN INFO = -11 @@ -375,8 +376,8 @@ SUBROUTINE ZHPGVD( ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK, END IF END IF * - WORK( 1 ) = LWMIN - RWORK( 1 ) = LRWMIN + WORK( 1 ) = DROUNDUP_LWORK(LWMIN) + RWORK( 1 ) = DROUNDUP_LWORK(LRWMIN) IWORK( 1 ) = LIWMIN RETURN *