Merge pull request #1203 from nakatamaho/fix-gvd-workspace-query-roundup

Use ROUNDUP_LWORK and remove redundant type conversions in *gvd routines
This commit is contained in:
langou
2026-03-23 08:35:50 -06:00
committed by GitHub
8 changed files with 48 additions and 44 deletions
+5 -5
View File
@@ -319,7 +319,7 @@
*
IF( INFO.EQ.0 ) THEN
WORK( 1 ) = SROUNDUP_LWORK(LOPT)
RWORK( 1 ) = REAL( LROPT )
RWORK( 1 ) = SROUNDUP_LWORK(LROPT)
IWORK( 1 ) = LIOPT
*
IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) THEN
@@ -357,9 +357,9 @@
CALL CHEEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK,
$ LRWORK,
$ IWORK, LIWORK, INFO )
LOPT = INT( MAX( REAL( LOPT ), REAL( WORK( 1 ) ) ) )
LROPT = INT( MAX( REAL( LROPT ), REAL( RWORK( 1 ) ) ) )
LIOPT = INT( MAX( REAL( LIOPT ), REAL( IWORK( 1 ) ) ) )
LOPT = MAX( LOPT, INT( REAL( WORK( 1 ) ) ) )
LROPT = MAX( LROPT, INT( RWORK( 1 ) ) )
LIOPT = MAX( LIOPT, IWORK( 1 ) )
*
IF( WANTZ .AND. INFO.EQ.0 ) THEN
*
@@ -396,7 +396,7 @@
END IF
*
WORK( 1 ) = SROUNDUP_LWORK(LOPT)
RWORK( 1 ) = REAL( LROPT )
RWORK( 1 ) = SROUNDUP_LWORK(LROPT)
IWORK( 1 ) = LIOPT
*
RETURN
+5 -5
View File
@@ -295,7 +295,7 @@
END IF
*
WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
RWORK( 1 ) = REAL( LRWMIN )
RWORK( 1 ) = SROUNDUP_LWORK(LRWMIN)
IWORK( 1 ) = LIWMIN
IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) THEN
INFO = -11
@@ -331,9 +331,9 @@
CALL CHPGST( ITYPE, UPLO, N, AP, BP, INFO )
CALL CHPEVD( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK, RWORK,
$ LRWORK, IWORK, LIWORK, INFO )
LWMIN = INT( MAX( REAL( LWMIN ), REAL( WORK( 1 ) ) ) )
LRWMIN = INT( MAX( REAL( LRWMIN ), REAL( RWORK( 1 ) ) ) )
LIWMIN = INT( MAX( REAL( LIWMIN ), REAL( IWORK( 1 ) ) ) )
LWMIN = MAX( LWMIN, INT( REAL( WORK( 1 ) ) ) )
LRWMIN = MAX( LRWMIN, INT( RWORK( 1 ) ) )
LIWMIN = MAX( LIWMIN, IWORK( 1 ) )
*
IF( WANTZ ) THEN
*
@@ -377,7 +377,7 @@
END IF
*
WORK( 1 ) = SROUNDUP_LWORK(LWMIN)
RWORK( 1 ) = REAL( LRWMIN )
RWORK( 1 ) = SROUNDUP_LWORK(LRWMIN)
IWORK( 1 ) = LIWMIN
RETURN
*
+7 -6
View File
@@ -225,14 +225,15 @@
* ..
* .. External Functions ..
LOGICAL LSAME
EXTERNAL LSAME
DOUBLE PRECISION DROUNDUP_LWORK
EXTERNAL LSAME, DROUNDUP_LWORK
* ..
* .. External Subroutines ..
EXTERNAL DPPTRF, DSPEVD, DSPGST, DTPMV, DTPSV,
$ XERBLA
* ..
* .. Intrinsic Functions ..
INTRINSIC DBLE, MAX
INTRINSIC MAX
* ..
* .. Executable Statements ..
*
@@ -268,7 +269,7 @@
LWMIN = 2*N
END IF
END IF
WORK( 1 ) = LWMIN
WORK( 1 ) = DROUNDUP_LWORK(LWMIN)
IWORK( 1 ) = LIWMIN
IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) THEN
INFO = -11
@@ -302,8 +303,8 @@
CALL DSPGST( ITYPE, UPLO, N, AP, BP, INFO )
CALL DSPEVD( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK, IWORK,
$ LIWORK, INFO )
LWMIN = INT( MAX( DBLE( LWMIN ), DBLE( WORK( 1 ) ) ) )
LIWMIN = INT( MAX( DBLE( LIWMIN ), DBLE( IWORK( 1 ) ) ) )
LWMIN = MAX( LWMIN, INT( WORK( 1 ) ) )
LIWMIN = MAX( LIWMIN, IWORK( 1 ) )
*
IF( WANTZ ) THEN
*
@@ -346,7 +347,7 @@
END IF
END IF
*
WORK( 1 ) = LWMIN
WORK( 1 ) = DROUNDUP_LWORK(LWMIN)
IWORK( 1 ) = LIWMIN
*
RETURN
+7 -6
View File
@@ -245,14 +245,15 @@
* ..
* .. External Functions ..
LOGICAL LSAME
EXTERNAL LSAME
DOUBLE PRECISION DROUNDUP_LWORK
EXTERNAL LSAME, DROUNDUP_LWORK
* ..
* .. External Subroutines ..
EXTERNAL DPOTRF, DSYEVD, DSYGST, DTRMM, DTRSM,
$ XERBLA
* ..
* .. Intrinsic Functions ..
INTRINSIC DBLE, MAX
INTRINSIC MAX
* ..
* .. Executable Statements ..
*
@@ -290,7 +291,7 @@
END IF
*
IF( INFO.EQ.0 ) THEN
WORK( 1 ) = LOPT
WORK( 1 ) = DROUNDUP_LWORK(LOPT)
IWORK( 1 ) = LIOPT
*
IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) THEN
@@ -326,8 +327,8 @@
CALL DSYEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, IWORK,
$ LIWORK,
$ INFO )
LOPT = INT( MAX( DBLE( LOPT ), DBLE( WORK( 1 ) ) ) )
LIOPT = INT( MAX( DBLE( LIOPT ), DBLE( IWORK( 1 ) ) ) )
LOPT = MAX( LOPT, INT( WORK( 1 ) ) )
LIOPT = MAX( LIOPT, IWORK( 1 ) )
*
IF( WANTZ .AND. INFO.EQ.0 ) THEN
*
@@ -363,7 +364,7 @@
END IF
END IF
*
WORK( 1 ) = LOPT
WORK( 1 ) = DROUNDUP_LWORK(LOPT)
IWORK( 1 ) = LIOPT
*
RETURN
+3 -3
View File
@@ -233,7 +233,7 @@
$ XERBLA
* ..
* .. Intrinsic Functions ..
INTRINSIC MAX, REAL
INTRINSIC MAX
* ..
* .. Executable Statements ..
*
@@ -303,8 +303,8 @@
CALL SSPGST( ITYPE, UPLO, N, AP, BP, INFO )
CALL SSPEVD( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK, IWORK,
$ LIWORK, INFO )
LWMIN = INT( MAX( REAL( LWMIN ), REAL( WORK( 1 ) ) ) )
LIWMIN = INT( MAX( REAL( LIWMIN ), REAL( IWORK( 1 ) ) ) )
LWMIN = MAX( LWMIN, INT( WORK( 1 ) ) )
LIWMIN = MAX( LIWMIN, IWORK( 1 ) )
*
IF( WANTZ ) THEN
*
+3 -3
View File
@@ -253,7 +253,7 @@
$ XERBLA
* ..
* .. Intrinsic Functions ..
INTRINSIC MAX, REAL
INTRINSIC MAX
* ..
* .. Executable Statements ..
*
@@ -327,8 +327,8 @@
CALL SSYEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, IWORK,
$ LIWORK,
$ INFO )
LOPT = INT( MAX( REAL( LOPT ), REAL( WORK( 1 ) ) ) )
LIOPT = INT( MAX( REAL( LIOPT ), REAL( IWORK( 1 ) ) ) )
LOPT = MAX( LOPT, INT( WORK( 1 ) ) )
LIOPT = MAX( LIOPT, IWORK( 1 ) )
*
IF( WANTZ .AND. INFO.EQ.0 ) THEN
*
+9 -8
View File
@@ -268,7 +268,8 @@
* ..
* .. External Functions ..
LOGICAL LSAME
EXTERNAL LSAME
DOUBLE PRECISION DROUNDUP_LWORK
EXTERNAL LSAME, DROUNDUP_LWORK
* ..
* .. External Subroutines ..
EXTERNAL XERBLA, ZHEEVD, ZHEGST, ZPOTRF, ZTRMM,
@@ -317,8 +318,8 @@
END IF
*
IF( INFO.EQ.0 ) THEN
WORK( 1 ) = LOPT
RWORK( 1 ) = REAL( LROPT )
WORK( 1 ) = DROUNDUP_LWORK(LOPT)
RWORK( 1 ) = DROUNDUP_LWORK(LROPT)
IWORK( 1 ) = LIOPT
*
IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) THEN
@@ -356,9 +357,9 @@
CALL ZHEEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK,
$ LRWORK,
$ IWORK, LIWORK, INFO )
LOPT = INT( MAX( DBLE( LOPT ), DBLE( WORK( 1 ) ) ) )
LROPT = INT( MAX( DBLE( LROPT ), DBLE( RWORK( 1 ) ) ) )
LIOPT = INT( MAX( DBLE( LIOPT ), DBLE( IWORK( 1 ) ) ) )
LOPT = MAX( LOPT, INT( DBLE( WORK( 1 ) ) ) )
LROPT = MAX( LROPT, INT( RWORK( 1 ) ) )
LIOPT = MAX( LIOPT, IWORK( 1 ) )
*
IF( WANTZ .AND. INFO.EQ.0 ) THEN
*
@@ -394,8 +395,8 @@
END IF
END IF
*
WORK( 1 ) = LOPT
RWORK( 1 ) = REAL( LROPT )
WORK( 1 ) = DROUNDUP_LWORK(LOPT)
RWORK( 1 ) = DROUNDUP_LWORK(LROPT)
IWORK( 1 ) = LIOPT
*
RETURN
+9 -8
View File
@@ -246,7 +246,8 @@
* ..
* .. External Functions ..
LOGICAL LSAME
EXTERNAL LSAME
DOUBLE PRECISION DROUNDUP_LWORK
EXTERNAL LSAME, DROUNDUP_LWORK
* ..
* .. External Subroutines ..
EXTERNAL XERBLA, ZHPEVD, ZHPGST, ZPPTRF, ZTPMV,
@@ -293,8 +294,8 @@
END IF
END IF
*
WORK( 1 ) = LWMIN
RWORK( 1 ) = REAL( LRWMIN )
WORK( 1 ) = DROUNDUP_LWORK(LWMIN)
RWORK( 1 ) = DROUNDUP_LWORK(LRWMIN)
IWORK( 1 ) = LIWMIN
IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) THEN
INFO = -11
@@ -330,9 +331,9 @@
CALL ZHPGST( ITYPE, UPLO, N, AP, BP, INFO )
CALL ZHPEVD( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK, RWORK,
$ LRWORK, IWORK, LIWORK, INFO )
LWMIN = INT( MAX( DBLE( LWMIN ), DBLE( WORK( 1 ) ) ) )
LRWMIN = INT( MAX( DBLE( LRWMIN ), DBLE( RWORK( 1 ) ) ) )
LIWMIN = INT( MAX( DBLE( LIWMIN ), DBLE( IWORK( 1 ) ) ) )
LWMIN = MAX( LWMIN, INT( DBLE( WORK( 1 ) ) ) )
LRWMIN = MAX( LRWMIN, INT( RWORK( 1 ) ) )
LIWMIN = MAX( LIWMIN, IWORK( 1 ) )
*
IF( WANTZ ) THEN
*
@@ -375,8 +376,8 @@
END IF
END IF
*
WORK( 1 ) = LWMIN
RWORK( 1 ) = REAL( LRWMIN )
WORK( 1 ) = DROUNDUP_LWORK(LWMIN)
RWORK( 1 ) = DROUNDUP_LWORK(LRWMIN)
IWORK( 1 ) = LIWMIN
RETURN
*