Skip to content

Commit cea4a63

Browse files
authored
Merge pull request #847 from angsch/master
Improve variants of Cholesky and QR
2 parents f86d08b + 65df15e commit cea4a63

File tree

10 files changed

+29
-119
lines changed

10 files changed

+29
-119
lines changed

SRC/VARIANTS/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ LULL = lu/LL/cgetrf.o lu/LL/dgetrf.o lu/LL/sgetrf.o lu/LL/zgetrf.o
2828

2929
LUREC = lu/REC/cgetrf.o lu/REC/dgetrf.o lu/REC/sgetrf.o lu/REC/zgetrf.o
3030

31-
QRLL = qr/LL/cgeqrf.o qr/LL/dgeqrf.o qr/LL/sgeqrf.o qr/LL/zgeqrf.o qr/LL/sceil.o
31+
QRLL = qr/LL/cgeqrf.o qr/LL/dgeqrf.o qr/LL/sgeqrf.o qr/LL/zgeqrf.o
3232

3333

3434
.PHONY: all

SRC/VARIANTS/cholesky/RL/cpotrf.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
C>\details \b Purpose:
2525
C>\verbatim
2626
C>
27-
C> CPOTRF computes the Cholesky factorization of a real Hermitian
27+
C> CPOTRF computes the Cholesky factorization of a complex Hermitian
2828
C> positive definite matrix A.
2929
C>
3030
C> The factorization has the form

SRC/VARIANTS/cholesky/RL/zpotrf.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
C>\details \b Purpose:
2525
C>\verbatim
2626
C>
27-
C> ZPOTRF computes the Cholesky factorization of a real Hermitian
27+
C> ZPOTRF computes the Cholesky factorization of a complex Hermitian
2828
C> positive definite matrix A.
2929
C>
3030
C> The factorization has the form

SRC/VARIANTS/cholesky/TOP/cpotrf.f

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
C>\details \b Purpose:
2525
C>\verbatim
2626
C>
27-
C> CPOTRF computes the Cholesky factorization of a real symmetric
27+
C> CPOTRF computes the Cholesky factorization of a complex Hermitian
2828
C> positive definite matrix A.
2929
C>
3030
C> The factorization has the form
@@ -55,7 +55,7 @@
5555
C> \param[in,out] A
5656
C> \verbatim
5757
C> A is COMPLEX array, dimension (LDA,N)
58-
C> On entry, the symmetric matrix A. If UPLO = 'U', the leading
58+
C> On entry, the Hermitian matrix A. If UPLO = 'U', the leading
5959
C> N-by-N upper triangular part of A contains the upper
6060
C> triangular part of the matrix A, and the strictly lower
6161
C> triangular part of A is not referenced. If UPLO = 'L', the

SRC/VARIANTS/cholesky/TOP/zpotrf.f

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
C>\details \b Purpose:
2525
C>\verbatim
2626
C>
27-
C> ZPOTRF computes the Cholesky factorization of a real symmetric
27+
C> ZPOTRF computes the Cholesky factorization of a complex Hermitian
2828
C> positive definite matrix A.
2929
C>
3030
C> The factorization has the form
@@ -55,7 +55,7 @@
5555
C> \param[in,out] A
5656
C> \verbatim
5757
C> A is COMPLEX*16 array, dimension (LDA,N)
58-
C> On entry, the symmetric matrix A. If UPLO = 'U', the leading
58+
C> On entry, the Hermitian matrix A. If UPLO = 'U', the leading
5959
C> N-by-N upper triangular part of A contains the upper
6060
C> triangular part of the matrix A, and the strictly lower
6161
C> triangular part of A is not referenced. If UPLO = 'L', the

SRC/VARIANTS/qr/LL/cgeqrf.f

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
C>\details \b Purpose:
2424
C>\verbatim
2525
C>
26-
C> CGEQRF computes a QR factorization of a real M-by-N matrix A:
26+
C> CGEQRF computes a QR factorization of a complex M-by-N matrix A:
2727
C> A = Q * R.
2828
C>
2929
C> This is the left-looking Level 3 BLAS version of the algorithm.
@@ -172,12 +172,11 @@ SUBROUTINE CGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
172172
EXTERNAL CGEQR2, CLARFB, CLARFT, XERBLA
173173
* ..
174174
* .. Intrinsic Functions ..
175-
INTRINSIC MAX, MIN
175+
INTRINSIC CEILING, MAX, MIN, REAL
176176
* ..
177177
* .. External Functions ..
178178
INTEGER ILAENV
179-
REAL SCEIL
180-
EXTERNAL ILAENV, SCEIL
179+
EXTERNAL ILAENV
181180
* ..
182181
* .. Executable Statements ..
183182

@@ -205,13 +204,13 @@ SUBROUTINE CGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
205204
*
206205
* So here 4 x 4 is the last T stored in the workspace
207206
*
208-
NT = K-SCEIL(REAL(K-NX)/REAL(NB))*NB
207+
NT = K-CEILING(REAL(K-NX)/REAL(NB))*NB
209208

210209
*
211210
* optimal workspace = space for dlarfb + space for normal T's + space for the last T
212211
*
213212
LLWORK = MAX (MAX((N-M)*K, (N-M)*NB), MAX(K*NB, NB*NB))
214-
LLWORK = SCEIL(REAL(LLWORK)/REAL(NB))
213+
LLWORK = CEILING(REAL(LLWORK)/REAL(NB))
215214

216215
IF( K.EQ.0 ) THEN
217216

@@ -230,7 +229,7 @@ SUBROUTINE CGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
230229

231230
ELSE
232231

233-
LBWORK = SCEIL(REAL(K)/REAL(NB))*NB
232+
LBWORK = CEILING(REAL(K)/REAL(NB))*NB
234233
LWKOPT = (LBWORK+LLWORK-NB)*NB
235234
WORK( 1 ) = LWKOPT
236235

SRC/VARIANTS/qr/LL/dgeqrf.f

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -172,12 +172,11 @@ SUBROUTINE DGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
172172
EXTERNAL DGEQR2, DLARFB, DLARFT, XERBLA
173173
* ..
174174
* .. Intrinsic Functions ..
175-
INTRINSIC MAX, MIN
175+
INTRINSIC CEILING, MAX, MIN, REAL
176176
* ..
177177
* .. External Functions ..
178178
INTEGER ILAENV
179-
REAL SCEIL
180-
EXTERNAL ILAENV, SCEIL
179+
EXTERNAL ILAENV
181180
* ..
182181
* .. Executable Statements ..
183182

@@ -205,13 +204,13 @@ SUBROUTINE DGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
205204
*
206205
* So here 4 x 4 is the last T stored in the workspace
207206
*
208-
NT = K-SCEIL(REAL(K-NX)/REAL(NB))*NB
207+
NT = K-CEILING(REAL(K-NX)/REAL(NB))*NB
209208

210209
*
211210
* optimal workspace = space for dlarfb + space for normal T's + space for the last T
212211
*
213212
LLWORK = MAX (MAX((N-M)*K, (N-M)*NB), MAX(K*NB, NB*NB))
214-
LLWORK = SCEIL(REAL(LLWORK)/REAL(NB))
213+
LLWORK = CEILING(REAL(LLWORK)/REAL(NB))
215214

216215
IF( K.EQ.0 ) THEN
217216

@@ -230,7 +229,7 @@ SUBROUTINE DGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
230229

231230
ELSE
232231

233-
LBWORK = SCEIL(REAL(K)/REAL(NB))*NB
232+
LBWORK = CEILING(REAL(K)/REAL(NB))*NB
234233
LWKOPT = (LBWORK+LLWORK-NB)*NB
235234
WORK( 1 ) = LWKOPT
236235

SRC/VARIANTS/qr/LL/sceil.f

Lines changed: 0 additions & 86 deletions
This file was deleted.

SRC/VARIANTS/qr/LL/sgeqrf.f

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -172,12 +172,11 @@ SUBROUTINE SGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
172172
EXTERNAL SGEQR2, SLARFB, SLARFT, XERBLA
173173
* ..
174174
* .. Intrinsic Functions ..
175-
INTRINSIC MAX, MIN
175+
INTRINSIC CEILING, MAX, MIN, REAL
176176
* ..
177177
* .. External Functions ..
178178
INTEGER ILAENV
179-
REAL SCEIL
180-
EXTERNAL ILAENV, SCEIL
179+
EXTERNAL ILAENV
181180
* ..
182181
* .. Executable Statements ..
183182

@@ -205,13 +204,13 @@ SUBROUTINE SGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
205204
*
206205
* So here 4 x 4 is the last T stored in the workspace
207206
*
208-
NT = K-SCEIL(REAL(K-NX)/REAL(NB))*NB
207+
NT = K-CEILING(REAL(K-NX)/REAL(NB))*NB
209208

210209
*
211210
* optimal workspace = space for dlarfb + space for normal T's + space for the last T
212211
*
213212
LLWORK = MAX (MAX((N-M)*K, (N-M)*NB), MAX(K*NB, NB*NB))
214-
LLWORK = SCEIL(REAL(LLWORK)/REAL(NB))
213+
LLWORK = CEILING(REAL(LLWORK)/REAL(NB))
215214

216215
IF( K.EQ.0 ) THEN
217216

@@ -230,7 +229,7 @@ SUBROUTINE SGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
230229

231230
ELSE
232231

233-
LBWORK = SCEIL(REAL(K)/REAL(NB))*NB
232+
LBWORK = CEILING(REAL(K)/REAL(NB))*NB
234233
LWKOPT = (LBWORK+LLWORK-NB)*NB
235234
WORK( 1 ) = LWKOPT
236235

SRC/VARIANTS/qr/LL/zgeqrf.f

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
C>\details \b Purpose:
2424
C>\verbatim
2525
C>
26-
C> ZGEQRF computes a QR factorization of a real M-by-N matrix A:
26+
C> ZGEQRF computes a QR factorization of a complex M-by-N matrix A:
2727
C> A = Q * R.
2828
C>
2929
C> This is the left-looking Level 3 BLAS version of the algorithm.
@@ -172,12 +172,11 @@ SUBROUTINE ZGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
172172
EXTERNAL ZGEQR2, ZLARFB, ZLARFT, XERBLA
173173
* ..
174174
* .. Intrinsic Functions ..
175-
INTRINSIC MAX, MIN
175+
INTRINSIC CEILING, MAX, MIN, REAL
176176
* ..
177177
* .. External Functions ..
178178
INTEGER ILAENV
179-
REAL SCEIL
180-
EXTERNAL ILAENV, SCEIL
179+
EXTERNAL ILAENV
181180
* ..
182181
* .. Executable Statements ..
183182

@@ -205,13 +204,13 @@ SUBROUTINE ZGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
205204
*
206205
* So here 4 x 4 is the last T stored in the workspace
207206
*
208-
NT = K-SCEIL(REAL(K-NX)/REAL(NB))*NB
207+
NT = K-CEILING(REAL(K-NX)/REAL(NB))*NB
209208

210209
*
211210
* optimal workspace = space for dlarfb + space for normal T's + space for the last T
212211
*
213212
LLWORK = MAX (MAX((N-M)*K, (N-M)*NB), MAX(K*NB, NB*NB))
214-
LLWORK = SCEIL(REAL(LLWORK)/REAL(NB))
213+
LLWORK = CEILING(REAL(LLWORK)/REAL(NB))
215214

216215
IF( K.EQ.0 ) THEN
217216

@@ -230,7 +229,7 @@ SUBROUTINE ZGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
230229

231230
ELSE
232231

233-
LBWORK = SCEIL(REAL(K)/REAL(NB))*NB
232+
LBWORK = CEILING(REAL(K)/REAL(NB))*NB
234233
LWKOPT = (LBWORK+LLWORK-NB)*NB
235234
WORK( 1 ) = LWKOPT
236235

0 commit comments

Comments
 (0)