From de83ba6bb988a47311a4d5b3a37e32f62abe9c2a Mon Sep 17 00:00:00 2001 From: Angelika Schwarz Date: Thu, 1 Jun 2023 17:38:27 +0200 Subject: [PATCH 1/2] Fix typos in docs of variants of Cholesky and QR --- SRC/VARIANTS/cholesky/RL/cpotrf.f | 2 +- SRC/VARIANTS/cholesky/RL/zpotrf.f | 2 +- SRC/VARIANTS/cholesky/TOP/cpotrf.f | 4 ++-- SRC/VARIANTS/cholesky/TOP/zpotrf.f | 4 ++-- SRC/VARIANTS/qr/LL/cgeqrf.f | 2 +- SRC/VARIANTS/qr/LL/zgeqrf.f | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/SRC/VARIANTS/cholesky/RL/cpotrf.f b/SRC/VARIANTS/cholesky/RL/cpotrf.f index 16d250c3ff..f9384b4166 100644 --- a/SRC/VARIANTS/cholesky/RL/cpotrf.f +++ b/SRC/VARIANTS/cholesky/RL/cpotrf.f @@ -24,7 +24,7 @@ C>\details \b Purpose: C>\verbatim C> -C> CPOTRF computes the Cholesky factorization of a real Hermitian +C> CPOTRF computes the Cholesky factorization of a complex Hermitian C> positive definite matrix A. C> C> The factorization has the form diff --git a/SRC/VARIANTS/cholesky/RL/zpotrf.f b/SRC/VARIANTS/cholesky/RL/zpotrf.f index 76d8bab610..bef27afa78 100644 --- a/SRC/VARIANTS/cholesky/RL/zpotrf.f +++ b/SRC/VARIANTS/cholesky/RL/zpotrf.f @@ -24,7 +24,7 @@ C>\details \b Purpose: C>\verbatim C> -C> ZPOTRF computes the Cholesky factorization of a real Hermitian +C> ZPOTRF computes the Cholesky factorization of a complex Hermitian C> positive definite matrix A. C> C> The factorization has the form diff --git a/SRC/VARIANTS/cholesky/TOP/cpotrf.f b/SRC/VARIANTS/cholesky/TOP/cpotrf.f index d6149c08f0..c810a1533f 100644 --- a/SRC/VARIANTS/cholesky/TOP/cpotrf.f +++ b/SRC/VARIANTS/cholesky/TOP/cpotrf.f @@ -24,7 +24,7 @@ C>\details \b Purpose: C>\verbatim C> -C> CPOTRF computes the Cholesky factorization of a real symmetric +C> CPOTRF computes the Cholesky factorization of a complex Hermitian C> positive definite matrix A. C> C> The factorization has the form @@ -55,7 +55,7 @@ C> \param[in,out] A C> \verbatim C> A is COMPLEX array, dimension (LDA,N) -C> On entry, the symmetric matrix A. If UPLO = 'U', the leading +C> On entry, the Hermitian matrix A. If UPLO = 'U', the leading C> N-by-N upper triangular part of A contains the upper C> triangular part of the matrix A, and the strictly lower C> triangular part of A is not referenced. If UPLO = 'L', the diff --git a/SRC/VARIANTS/cholesky/TOP/zpotrf.f b/SRC/VARIANTS/cholesky/TOP/zpotrf.f index f8b9e253cc..449c7ac959 100644 --- a/SRC/VARIANTS/cholesky/TOP/zpotrf.f +++ b/SRC/VARIANTS/cholesky/TOP/zpotrf.f @@ -24,7 +24,7 @@ C>\details \b Purpose: C>\verbatim C> -C> ZPOTRF computes the Cholesky factorization of a real symmetric +C> ZPOTRF computes the Cholesky factorization of a complex Hermitian C> positive definite matrix A. C> C> The factorization has the form @@ -55,7 +55,7 @@ C> \param[in,out] A C> \verbatim C> A is COMPLEX*16 array, dimension (LDA,N) -C> On entry, the symmetric matrix A. If UPLO = 'U', the leading +C> On entry, the Hermitian matrix A. If UPLO = 'U', the leading C> N-by-N upper triangular part of A contains the upper C> triangular part of the matrix A, and the strictly lower C> triangular part of A is not referenced. If UPLO = 'L', the diff --git a/SRC/VARIANTS/qr/LL/cgeqrf.f b/SRC/VARIANTS/qr/LL/cgeqrf.f index 46eaf33b99..c795040003 100644 --- a/SRC/VARIANTS/qr/LL/cgeqrf.f +++ b/SRC/VARIANTS/qr/LL/cgeqrf.f @@ -23,7 +23,7 @@ C>\details \b Purpose: C>\verbatim C> -C> CGEQRF computes a QR factorization of a real M-by-N matrix A: +C> CGEQRF computes a QR factorization of a complex M-by-N matrix A: C> A = Q * R. C> C> This is the left-looking Level 3 BLAS version of the algorithm. diff --git a/SRC/VARIANTS/qr/LL/zgeqrf.f b/SRC/VARIANTS/qr/LL/zgeqrf.f index 623b88a8a7..42cea91010 100644 --- a/SRC/VARIANTS/qr/LL/zgeqrf.f +++ b/SRC/VARIANTS/qr/LL/zgeqrf.f @@ -23,7 +23,7 @@ C>\details \b Purpose: C>\verbatim C> -C> ZGEQRF computes a QR factorization of a real M-by-N matrix A: +C> ZGEQRF computes a QR factorization of a complex M-by-N matrix A: C> A = Q * R. C> C> This is the left-looking Level 3 BLAS version of the algorithm. From 65df15e8f5322353d01ba11158dd25d2ce497dcb Mon Sep 17 00:00:00 2001 From: Angelika Schwarz Date: Fri, 2 Jun 2023 18:02:13 +0200 Subject: [PATCH 2/2] Remove SCEIL, replace calls with intrinsic CEILING sceil.f is only referenced in SRC/VARIANTS/qr/LL/. Replace all occurrences of calls to sceil with the Fortran intrinsics CEILING, which is already used by a bunch of other routines. --- SRC/VARIANTS/Makefile | 2 +- SRC/VARIANTS/qr/LL/cgeqrf.f | 11 +++-- SRC/VARIANTS/qr/LL/dgeqrf.f | 11 +++-- SRC/VARIANTS/qr/LL/sceil.f | 86 ------------------------------------- SRC/VARIANTS/qr/LL/sgeqrf.f | 11 +++-- SRC/VARIANTS/qr/LL/zgeqrf.f | 11 +++-- 6 files changed, 21 insertions(+), 111 deletions(-) delete mode 100644 SRC/VARIANTS/qr/LL/sceil.f diff --git a/SRC/VARIANTS/Makefile b/SRC/VARIANTS/Makefile index 25d8ee1751..35e50cbc2c 100644 --- a/SRC/VARIANTS/Makefile +++ b/SRC/VARIANTS/Makefile @@ -28,7 +28,7 @@ LULL = lu/LL/cgetrf.o lu/LL/dgetrf.o lu/LL/sgetrf.o lu/LL/zgetrf.o LUREC = lu/REC/cgetrf.o lu/REC/dgetrf.o lu/REC/sgetrf.o lu/REC/zgetrf.o -QRLL = qr/LL/cgeqrf.o qr/LL/dgeqrf.o qr/LL/sgeqrf.o qr/LL/zgeqrf.o qr/LL/sceil.o +QRLL = qr/LL/cgeqrf.o qr/LL/dgeqrf.o qr/LL/sgeqrf.o qr/LL/zgeqrf.o .PHONY: all diff --git a/SRC/VARIANTS/qr/LL/cgeqrf.f b/SRC/VARIANTS/qr/LL/cgeqrf.f index c795040003..743731a00c 100644 --- a/SRC/VARIANTS/qr/LL/cgeqrf.f +++ b/SRC/VARIANTS/qr/LL/cgeqrf.f @@ -172,12 +172,11 @@ SUBROUTINE CGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO ) EXTERNAL CGEQR2, CLARFB, CLARFT, XERBLA * .. * .. Intrinsic Functions .. - INTRINSIC MAX, MIN + INTRINSIC CEILING, MAX, MIN, REAL * .. * .. External Functions .. INTEGER ILAENV - REAL SCEIL - EXTERNAL ILAENV, SCEIL + EXTERNAL ILAENV * .. * .. Executable Statements .. @@ -205,13 +204,13 @@ SUBROUTINE CGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO ) * * So here 4 x 4 is the last T stored in the workspace * - NT = K-SCEIL(REAL(K-NX)/REAL(NB))*NB + NT = K-CEILING(REAL(K-NX)/REAL(NB))*NB * * optimal workspace = space for dlarfb + space for normal T's + space for the last T * LLWORK = MAX (MAX((N-M)*K, (N-M)*NB), MAX(K*NB, NB*NB)) - LLWORK = SCEIL(REAL(LLWORK)/REAL(NB)) + LLWORK = CEILING(REAL(LLWORK)/REAL(NB)) IF( K.EQ.0 ) THEN @@ -230,7 +229,7 @@ SUBROUTINE CGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO ) ELSE - LBWORK = SCEIL(REAL(K)/REAL(NB))*NB + LBWORK = CEILING(REAL(K)/REAL(NB))*NB LWKOPT = (LBWORK+LLWORK-NB)*NB WORK( 1 ) = LWKOPT diff --git a/SRC/VARIANTS/qr/LL/dgeqrf.f b/SRC/VARIANTS/qr/LL/dgeqrf.f index 55cab8b238..bbdd461130 100644 --- a/SRC/VARIANTS/qr/LL/dgeqrf.f +++ b/SRC/VARIANTS/qr/LL/dgeqrf.f @@ -172,12 +172,11 @@ SUBROUTINE DGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO ) EXTERNAL DGEQR2, DLARFB, DLARFT, XERBLA * .. * .. Intrinsic Functions .. - INTRINSIC MAX, MIN + INTRINSIC CEILING, MAX, MIN, REAL * .. * .. External Functions .. INTEGER ILAENV - REAL SCEIL - EXTERNAL ILAENV, SCEIL + EXTERNAL ILAENV * .. * .. Executable Statements .. @@ -205,13 +204,13 @@ SUBROUTINE DGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO ) * * So here 4 x 4 is the last T stored in the workspace * - NT = K-SCEIL(REAL(K-NX)/REAL(NB))*NB + NT = K-CEILING(REAL(K-NX)/REAL(NB))*NB * * optimal workspace = space for dlarfb + space for normal T's + space for the last T * LLWORK = MAX (MAX((N-M)*K, (N-M)*NB), MAX(K*NB, NB*NB)) - LLWORK = SCEIL(REAL(LLWORK)/REAL(NB)) + LLWORK = CEILING(REAL(LLWORK)/REAL(NB)) IF( K.EQ.0 ) THEN @@ -230,7 +229,7 @@ SUBROUTINE DGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO ) ELSE - LBWORK = SCEIL(REAL(K)/REAL(NB))*NB + LBWORK = CEILING(REAL(K)/REAL(NB))*NB LWKOPT = (LBWORK+LLWORK-NB)*NB WORK( 1 ) = LWKOPT diff --git a/SRC/VARIANTS/qr/LL/sceil.f b/SRC/VARIANTS/qr/LL/sceil.f deleted file mode 100644 index a007360ba6..0000000000 --- a/SRC/VARIANTS/qr/LL/sceil.f +++ /dev/null @@ -1,86 +0,0 @@ -C> \brief \b SCEIL -* -* =========== DOCUMENTATION =========== -* -* Online html documentation available at -* http://www.netlib.org/lapack/explore-html/ -* -* Definition: -* =========== -* -* REAL FUNCTION SCEIL( A ) -* -* .. Scalar Arguments .. -* REAL A -* .. -* -* ===================================================================== -* -* .. Intrinsic Functions .. -* INTRINSIC INT -* .. -* .. Executable Statements ..* -* -* IF (A-INT(A).EQ.0) THEN -* SCEIL = A -* ELSE IF (A.GT.0) THEN -* SCEIL = INT(A)+1; -* ELSE -* SCEIL = INT(A) -* END IF -* -* RETURN -* -* END -* Purpose -* ======= -* -C>\details \b Purpose: -C>\verbatim -C>\endverbatim -* -* Arguments: -* ========== -* -* -* Authors: -* ======== -* -C> \author Univ. of Tennessee -C> \author Univ. of California Berkeley -C> \author Univ. of Colorado Denver -C> \author NAG Ltd. -* -C> \date December 2016 -* -C> \ingroup variantsOTHERcomputational -* -* ===================================================================== - REAL FUNCTION SCEIL( A ) -* -* -- LAPACK computational routine -- -* -- LAPACK is a software package provided by Univ. of Tennessee, -- -* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- -* -* .. Scalar Arguments ..* - REAL A -* .. -* -* ===================================================================== -* -* .. Intrinsic Functions .. - INTRINSIC INT -* .. -* .. Executable Statements ..* -* - IF (A-INT(A).EQ.0) THEN - SCEIL = A - ELSE IF (A.GT.0) THEN - SCEIL = INT(A)+1; - ELSE - SCEIL = INT(A) - END IF - - RETURN -* - END diff --git a/SRC/VARIANTS/qr/LL/sgeqrf.f b/SRC/VARIANTS/qr/LL/sgeqrf.f index d2ad13ced1..bf68d635b8 100644 --- a/SRC/VARIANTS/qr/LL/sgeqrf.f +++ b/SRC/VARIANTS/qr/LL/sgeqrf.f @@ -172,12 +172,11 @@ SUBROUTINE SGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO ) EXTERNAL SGEQR2, SLARFB, SLARFT, XERBLA * .. * .. Intrinsic Functions .. - INTRINSIC MAX, MIN + INTRINSIC CEILING, MAX, MIN, REAL * .. * .. External Functions .. INTEGER ILAENV - REAL SCEIL - EXTERNAL ILAENV, SCEIL + EXTERNAL ILAENV * .. * .. Executable Statements .. @@ -205,13 +204,13 @@ SUBROUTINE SGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO ) * * So here 4 x 4 is the last T stored in the workspace * - NT = K-SCEIL(REAL(K-NX)/REAL(NB))*NB + NT = K-CEILING(REAL(K-NX)/REAL(NB))*NB * * optimal workspace = space for dlarfb + space for normal T's + space for the last T * LLWORK = MAX (MAX((N-M)*K, (N-M)*NB), MAX(K*NB, NB*NB)) - LLWORK = SCEIL(REAL(LLWORK)/REAL(NB)) + LLWORK = CEILING(REAL(LLWORK)/REAL(NB)) IF( K.EQ.0 ) THEN @@ -230,7 +229,7 @@ SUBROUTINE SGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO ) ELSE - LBWORK = SCEIL(REAL(K)/REAL(NB))*NB + LBWORK = CEILING(REAL(K)/REAL(NB))*NB LWKOPT = (LBWORK+LLWORK-NB)*NB WORK( 1 ) = LWKOPT diff --git a/SRC/VARIANTS/qr/LL/zgeqrf.f b/SRC/VARIANTS/qr/LL/zgeqrf.f index 42cea91010..06918568e3 100644 --- a/SRC/VARIANTS/qr/LL/zgeqrf.f +++ b/SRC/VARIANTS/qr/LL/zgeqrf.f @@ -172,12 +172,11 @@ SUBROUTINE ZGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO ) EXTERNAL ZGEQR2, ZLARFB, ZLARFT, XERBLA * .. * .. Intrinsic Functions .. - INTRINSIC MAX, MIN + INTRINSIC CEILING, MAX, MIN, REAL * .. * .. External Functions .. INTEGER ILAENV - REAL SCEIL - EXTERNAL ILAENV, SCEIL + EXTERNAL ILAENV * .. * .. Executable Statements .. @@ -205,13 +204,13 @@ SUBROUTINE ZGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO ) * * So here 4 x 4 is the last T stored in the workspace * - NT = K-SCEIL(REAL(K-NX)/REAL(NB))*NB + NT = K-CEILING(REAL(K-NX)/REAL(NB))*NB * * optimal workspace = space for dlarfb + space for normal T's + space for the last T * LLWORK = MAX (MAX((N-M)*K, (N-M)*NB), MAX(K*NB, NB*NB)) - LLWORK = SCEIL(REAL(LLWORK)/REAL(NB)) + LLWORK = CEILING(REAL(LLWORK)/REAL(NB)) IF( K.EQ.0 ) THEN @@ -230,7 +229,7 @@ SUBROUTINE ZGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO ) ELSE - LBWORK = SCEIL(REAL(K)/REAL(NB))*NB + LBWORK = CEILING(REAL(K)/REAL(NB))*NB LWKOPT = (LBWORK+LLWORK-NB)*NB WORK( 1 ) = LWKOPT