version 1.1, 2017/06/17 11:02:48
|
version 1.5, 2023/08/07 08:38:48
|
Line 1
|
Line 1
|
|
*> \brief \b DGELQ |
* |
* |
* Definition: |
* Definition: |
* =========== |
* =========== |
Line 17
|
Line 18
|
* ============= |
* ============= |
*> |
*> |
*> \verbatim |
*> \verbatim |
*> DGELQ computes a LQ factorization of an M-by-N matrix A. |
*> |
|
*> DGELQ computes an LQ factorization of a real M-by-N matrix A: |
|
*> |
|
*> A = ( L 0 ) * Q |
|
*> |
|
*> where: |
|
*> |
|
*> Q is a N-by-N orthogonal matrix; |
|
*> L is a lower-triangular M-by-M matrix; |
|
*> 0 is a M-by-(N-M) zero matrix, if M < N. |
|
*> |
*> \endverbatim |
*> \endverbatim |
* |
* |
* Arguments: |
* Arguments: |
Line 138
|
Line 149
|
*> \verbatim |
*> \verbatim |
*> |
*> |
*> These details are particular for this LAPACK implementation. Users should not |
*> These details are particular for this LAPACK implementation. Users should not |
*> take them for granted. These details may change in the future, and are unlikely not |
*> take them for granted. These details may change in the future, and are not likely |
*> true for another LAPACK implementation. These details are relevant if one wants |
*> true for another LAPACK implementation. These details are relevant if one wants |
*> to try to understand the code. They are not part of the interface. |
*> to try to understand the code. They are not part of the interface. |
*> |
*> |
Line 159
|
Line 170
|
SUBROUTINE DGELQ( M, N, A, LDA, T, TSIZE, WORK, LWORK, |
SUBROUTINE DGELQ( M, N, A, LDA, T, TSIZE, WORK, LWORK, |
$ INFO ) |
$ INFO ) |
* |
* |
* -- LAPACK computational routine (version 3.7.0) -- |
* -- LAPACK computational routine -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd. -- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd. -- |
* December 2016 |
|
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
INTEGER INFO, LDA, M, N, TSIZE, LWORK |
INTEGER INFO, LDA, M, N, TSIZE, LWORK |
Line 176
|
Line 186
|
* .. |
* .. |
* .. Local Scalars .. |
* .. Local Scalars .. |
LOGICAL LQUERY, LMINWS, MINT, MINW |
LOGICAL LQUERY, LMINWS, MINT, MINW |
INTEGER MB, NB, MINTSZ, NBLCKS |
INTEGER MB, NB, MINTSZ, NBLCKS, LWMIN, LWOPT, LWREQ |
* .. |
* .. |
* .. External Functions .. |
* .. External Functions .. |
LOGICAL LSAME |
LOGICAL LSAME |
Line 232
|
Line 242
|
* |
* |
* Determine if the workspace size satisfies minimal size |
* Determine if the workspace size satisfies minimal size |
* |
* |
|
IF( ( N.LE.M ) .OR. ( NB.LE.M ) .OR. ( NB.GE.N ) ) THEN |
|
LWMIN = MAX( 1, N ) |
|
LWOPT = MAX( 1, MB*N ) |
|
ELSE |
|
LWMIN = MAX( 1, M ) |
|
LWOPT = MAX( 1, MB*M ) |
|
END IF |
LMINWS = .FALSE. |
LMINWS = .FALSE. |
IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.MB*M ) |
IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.LWOPT ) |
$ .AND. ( LWORK.GE.M ) .AND. ( TSIZE.GE.MINTSZ ) |
$ .AND. ( LWORK.GE.LWMIN ) .AND. ( TSIZE.GE.MINTSZ ) |
$ .AND. ( .NOT.LQUERY ) ) THEN |
$ .AND. ( .NOT.LQUERY ) ) THEN |
IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) ) THEN |
IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) ) THEN |
LMINWS = .TRUE. |
LMINWS = .TRUE. |
MB = 1 |
MB = 1 |
NB = N |
NB = N |
END IF |
END IF |
IF( LWORK.LT.MB*M ) THEN |
IF( LWORK.LT.LWOPT ) THEN |
LMINWS = .TRUE. |
LMINWS = .TRUE. |
MB = 1 |
MB = 1 |
END IF |
END IF |
END IF |
END IF |
|
IF( ( N.LE.M ) .OR. ( NB.LE.M ) .OR. ( NB.GE.N ) ) THEN |
|
LWREQ = MAX( 1, MB*N ) |
|
ELSE |
|
LWREQ = MAX( 1, MB*M ) |
|
END IF |
* |
* |
IF( M.LT.0 ) THEN |
IF( M.LT.0 ) THEN |
INFO = -1 |
INFO = -1 |
Line 256
|
Line 278
|
ELSE IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) |
ELSE IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) |
$ .AND. ( .NOT.LQUERY ) .AND. ( .NOT.LMINWS ) ) THEN |
$ .AND. ( .NOT.LQUERY ) .AND. ( .NOT.LMINWS ) ) THEN |
INFO = -6 |
INFO = -6 |
ELSE IF( ( LWORK.LT.MAX( 1, M*MB ) ) .AND .( .NOT.LQUERY ) |
ELSE IF( ( LWORK.LT.LWREQ ) .AND .( .NOT.LQUERY ) |
$ .AND. ( .NOT.LMINWS ) ) THEN |
$ .AND. ( .NOT.LMINWS ) ) THEN |
INFO = -8 |
INFO = -8 |
END IF |
END IF |
Line 270
|
Line 292
|
T( 2 ) = MB |
T( 2 ) = MB |
T( 3 ) = NB |
T( 3 ) = NB |
IF( MINW ) THEN |
IF( MINW ) THEN |
WORK( 1 ) = MAX( 1, N ) |
WORK( 1 ) = LWMIN |
ELSE |
ELSE |
WORK( 1 ) = MAX( 1, MB*M ) |
WORK( 1 ) = LWREQ |
END IF |
END IF |
END IF |
END IF |
IF( INFO.NE.0 ) THEN |
IF( INFO.NE.0 ) THEN |
Line 297
|
Line 319
|
$ LWORK, INFO ) |
$ LWORK, INFO ) |
END IF |
END IF |
* |
* |
WORK( 1 ) = MAX( 1, MB*M ) |
WORK( 1 ) = LWREQ |
* |
* |
RETURN |
RETURN |
* |
* |