Fix workspace query in LAPACK xGELQ (Reference-LAPACK 443)tags/v0.3.11^2
| @@ -26,7 +26,7 @@ | |||
| *> where: | |||
| *> | |||
| *> Q is a N-by-N orthogonal matrix; | |||
| *> L is an lower-triangular M-by-M matrix; | |||
| *> L is a lower-triangular M-by-M matrix; | |||
| *> 0 is a M-by-(N-M) zero matrix, if M < N. | |||
| *> | |||
| *> \endverbatim | |||
| @@ -187,7 +187,7 @@ | |||
| * .. | |||
| * .. Local Scalars .. | |||
| LOGICAL LQUERY, LMINWS, MINT, MINW | |||
| INTEGER MB, NB, MINTSZ, NBLCKS | |||
| INTEGER MB, NB, MINTSZ, NBLCKS, LWMIN, LWOPT, LWREQ | |||
| * .. | |||
| * .. External Functions .. | |||
| LOGICAL LSAME | |||
| @@ -243,20 +243,32 @@ | |||
| * | |||
| * 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. | |||
| IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.MB*M ) | |||
| $ .AND. ( LWORK.GE.M ) .AND. ( TSIZE.GE.MINTSZ ) | |||
| IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.LWOPT ) | |||
| $ .AND. ( LWORK.GE.LWMIN ) .AND. ( TSIZE.GE.MINTSZ ) | |||
| $ .AND. ( .NOT.LQUERY ) ) THEN | |||
| IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) ) THEN | |||
| LMINWS = .TRUE. | |||
| MB = 1 | |||
| NB = N | |||
| END IF | |||
| IF( LWORK.LT.MB*M ) THEN | |||
| IF( LWORK.LT.LWOPT ) THEN | |||
| LMINWS = .TRUE. | |||
| MB = 1 | |||
| 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 | |||
| INFO = -1 | |||
| @@ -267,7 +279,7 @@ | |||
| ELSE IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) | |||
| $ .AND. ( .NOT.LQUERY ) .AND. ( .NOT.LMINWS ) ) THEN | |||
| 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 | |||
| INFO = -8 | |||
| END IF | |||
| @@ -281,9 +293,9 @@ | |||
| T( 2 ) = MB | |||
| T( 3 ) = NB | |||
| IF( MINW ) THEN | |||
| WORK( 1 ) = MAX( 1, N ) | |||
| WORK( 1 ) = LWMIN | |||
| ELSE | |||
| WORK( 1 ) = MAX( 1, MB*M ) | |||
| WORK( 1 ) = LWREQ | |||
| END IF | |||
| END IF | |||
| IF( INFO.NE.0 ) THEN | |||
| @@ -308,7 +320,7 @@ | |||
| $ LWORK, INFO ) | |||
| END IF | |||
| * | |||
| WORK( 1 ) = MAX( 1, MB*M ) | |||
| WORK( 1 ) = LWREQ | |||
| * | |||
| RETURN | |||
| * | |||
| @@ -261,7 +261,7 @@ | |||
| TSZM = INT( TQ( 1 ) ) | |||
| LWM = INT( WORKQ( 1 ) ) | |||
| CALL CGEMLQ( 'L', TRANS, N, NRHS, M, A, LDA, TQ, | |||
| $ TSZO, B, LDB, WORKQ, -1, INFO2 ) | |||
| $ TSZM, B, LDB, WORKQ, -1, INFO2 ) | |||
| LWM = MAX( LWM, INT( WORKQ( 1 ) ) ) | |||
| WSIZEO = TSZO + LWO | |||
| WSIZEM = TSZM + LWM | |||
| @@ -26,7 +26,7 @@ | |||
| *> where: | |||
| *> | |||
| *> Q is a N-by-N orthogonal matrix; | |||
| *> L is an lower-triangular M-by-M matrix; | |||
| *> L is a lower-triangular M-by-M matrix; | |||
| *> 0 is a M-by-(N-M) zero matrix, if M < N. | |||
| *> | |||
| *> \endverbatim | |||
| @@ -187,7 +187,7 @@ | |||
| * .. | |||
| * .. Local Scalars .. | |||
| LOGICAL LQUERY, LMINWS, MINT, MINW | |||
| INTEGER MB, NB, MINTSZ, NBLCKS | |||
| INTEGER MB, NB, MINTSZ, NBLCKS, LWMIN, LWOPT, LWREQ | |||
| * .. | |||
| * .. External Functions .. | |||
| LOGICAL LSAME | |||
| @@ -243,20 +243,32 @@ | |||
| * | |||
| * 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. | |||
| IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.MB*M ) | |||
| $ .AND. ( LWORK.GE.M ) .AND. ( TSIZE.GE.MINTSZ ) | |||
| IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.LWOPT ) | |||
| $ .AND. ( LWORK.GE.LWMIN ) .AND. ( TSIZE.GE.MINTSZ ) | |||
| $ .AND. ( .NOT.LQUERY ) ) THEN | |||
| IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) ) THEN | |||
| LMINWS = .TRUE. | |||
| MB = 1 | |||
| NB = N | |||
| END IF | |||
| IF( LWORK.LT.MB*M ) THEN | |||
| IF( LWORK.LT.LWOPT ) THEN | |||
| LMINWS = .TRUE. | |||
| MB = 1 | |||
| 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 | |||
| INFO = -1 | |||
| @@ -267,7 +279,7 @@ | |||
| ELSE IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) | |||
| $ .AND. ( .NOT.LQUERY ) .AND. ( .NOT.LMINWS ) ) THEN | |||
| 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 | |||
| INFO = -8 | |||
| END IF | |||
| @@ -281,9 +293,9 @@ | |||
| T( 2 ) = MB | |||
| T( 3 ) = NB | |||
| IF( MINW ) THEN | |||
| WORK( 1 ) = MAX( 1, N ) | |||
| WORK( 1 ) = LWMIN | |||
| ELSE | |||
| WORK( 1 ) = MAX( 1, MB*M ) | |||
| WORK( 1 ) = LWREQ | |||
| END IF | |||
| END IF | |||
| IF( INFO.NE.0 ) THEN | |||
| @@ -308,7 +320,7 @@ | |||
| $ LWORK, INFO ) | |||
| END IF | |||
| * | |||
| WORK( 1 ) = MAX( 1, MB*M ) | |||
| WORK( 1 ) = LWREQ | |||
| * | |||
| RETURN | |||
| * | |||
| @@ -258,7 +258,7 @@ | |||
| TSZM = INT( TQ( 1 ) ) | |||
| LWM = INT( WORKQ( 1 ) ) | |||
| CALL DGEMLQ( 'L', TRANS, N, NRHS, M, A, LDA, TQ, | |||
| $ TSZO, B, LDB, WORKQ, -1, INFO2 ) | |||
| $ TSZM, B, LDB, WORKQ, -1, INFO2 ) | |||
| LWM = MAX( LWM, INT( WORKQ( 1 ) ) ) | |||
| WSIZEO = TSZO + LWO | |||
| WSIZEM = TSZM + LWM | |||
| @@ -26,7 +26,7 @@ | |||
| *> where: | |||
| *> | |||
| *> Q is a N-by-N orthogonal matrix; | |||
| *> L is an lower-triangular M-by-M matrix; | |||
| *> L is a lower-triangular M-by-M matrix; | |||
| *> 0 is a M-by-(N-M) zero matrix, if M < N. | |||
| *> | |||
| *> \endverbatim | |||
| @@ -187,7 +187,7 @@ | |||
| * .. | |||
| * .. Local Scalars .. | |||
| LOGICAL LQUERY, LMINWS, MINT, MINW | |||
| INTEGER MB, NB, MINTSZ, NBLCKS | |||
| INTEGER MB, NB, MINTSZ, NBLCKS, LWMIN, LWOPT, LWREQ | |||
| * .. | |||
| * .. External Functions .. | |||
| LOGICAL LSAME | |||
| @@ -243,20 +243,32 @@ | |||
| * | |||
| * 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. | |||
| IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.MB*M ) | |||
| $ .AND. ( LWORK.GE.M ) .AND. ( TSIZE.GE.MINTSZ ) | |||
| IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.LWOPT ) | |||
| $ .AND. ( LWORK.GE.LWMIN ) .AND. ( TSIZE.GE.MINTSZ ) | |||
| $ .AND. ( .NOT.LQUERY ) ) THEN | |||
| IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) ) THEN | |||
| LMINWS = .TRUE. | |||
| MB = 1 | |||
| NB = N | |||
| END IF | |||
| IF( LWORK.LT.MB*M ) THEN | |||
| IF( LWORK.LT.LWOPT ) THEN | |||
| LMINWS = .TRUE. | |||
| MB = 1 | |||
| 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 | |||
| INFO = -1 | |||
| @@ -267,7 +279,7 @@ | |||
| ELSE IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) | |||
| $ .AND. ( .NOT.LQUERY ) .AND. ( .NOT.LMINWS ) ) THEN | |||
| 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 | |||
| INFO = -8 | |||
| END IF | |||
| @@ -281,9 +293,9 @@ | |||
| T( 2 ) = MB | |||
| T( 3 ) = NB | |||
| IF( MINW ) THEN | |||
| WORK( 1 ) = MAX( 1, N ) | |||
| WORK( 1 ) = LWMIN | |||
| ELSE | |||
| WORK( 1 ) = MAX( 1, MB*M ) | |||
| WORK( 1 ) = LWREQ | |||
| END IF | |||
| END IF | |||
| IF( INFO.NE.0 ) THEN | |||
| @@ -308,7 +320,7 @@ | |||
| $ LWORK, INFO ) | |||
| END IF | |||
| * | |||
| WORK( 1 ) = MAX( 1, MB*M ) | |||
| WORK( 1 ) = LWREQ | |||
| RETURN | |||
| * | |||
| * End of SGELQ | |||
| @@ -258,7 +258,7 @@ | |||
| TSZM = INT( TQ( 1 ) ) | |||
| LWM = INT( WORKQ( 1 ) ) | |||
| CALL SGEMLQ( 'L', TRANS, N, NRHS, M, A, LDA, TQ, | |||
| $ TSZO, B, LDB, WORKQ, -1, INFO2 ) | |||
| $ TSZM, B, LDB, WORKQ, -1, INFO2 ) | |||
| LWM = MAX( LWM, INT( WORKQ( 1 ) ) ) | |||
| WSIZEO = TSZO + LWO | |||
| WSIZEM = TSZM + LWM | |||
| @@ -26,7 +26,7 @@ | |||
| *> where: | |||
| *> | |||
| *> Q is a N-by-N orthogonal matrix; | |||
| *> L is an lower-triangular M-by-M matrix; | |||
| *> L is a lower-triangular M-by-M matrix; | |||
| *> 0 is a M-by-(N-M) zero matrix, if M < N. | |||
| *> | |||
| *> \endverbatim | |||
| @@ -187,7 +187,7 @@ | |||
| * .. | |||
| * .. Local Scalars .. | |||
| LOGICAL LQUERY, LMINWS, MINT, MINW | |||
| INTEGER MB, NB, MINTSZ, NBLCKS | |||
| INTEGER MB, NB, MINTSZ, NBLCKS, LWMIN, LWOPT, LWREQ | |||
| * .. | |||
| * .. External Functions .. | |||
| LOGICAL LSAME | |||
| @@ -243,20 +243,32 @@ | |||
| * | |||
| * 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. | |||
| IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.MB*M ) | |||
| $ .AND. ( LWORK.GE.M ) .AND. ( TSIZE.GE.MINTSZ ) | |||
| IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.LWOPT ) | |||
| $ .AND. ( LWORK.GE.LWMIN ) .AND. ( TSIZE.GE.MINTSZ ) | |||
| $ .AND. ( .NOT.LQUERY ) ) THEN | |||
| IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) ) THEN | |||
| LMINWS = .TRUE. | |||
| MB = 1 | |||
| NB = N | |||
| END IF | |||
| IF( LWORK.LT.MB*M ) THEN | |||
| IF( LWORK.LT.LWOPT ) THEN | |||
| LMINWS = .TRUE. | |||
| MB = 1 | |||
| 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 | |||
| INFO = -1 | |||
| @@ -267,7 +279,7 @@ | |||
| ELSE IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) | |||
| $ .AND. ( .NOT.LQUERY ) .AND. ( .NOT.LMINWS ) ) THEN | |||
| 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 | |||
| INFO = -8 | |||
| END IF | |||
| @@ -281,9 +293,9 @@ | |||
| T( 2 ) = MB | |||
| T( 3 ) = NB | |||
| IF( MINW ) THEN | |||
| WORK( 1 ) = MAX( 1, N ) | |||
| WORK( 1 ) = LWMIN | |||
| ELSE | |||
| WORK( 1 ) = MAX( 1, MB*M ) | |||
| WORK( 1 ) = LWREQ | |||
| END IF | |||
| END IF | |||
| IF( INFO.NE.0 ) THEN | |||
| @@ -308,7 +320,7 @@ | |||
| $ LWORK, INFO ) | |||
| END IF | |||
| * | |||
| WORK( 1 ) = MAX( 1, MB*M ) | |||
| WORK( 1 ) = LWREQ | |||
| * | |||
| RETURN | |||
| * | |||
| @@ -261,7 +261,7 @@ | |||
| TSZM = INT( TQ( 1 ) ) | |||
| LWM = INT( WORKQ( 1 ) ) | |||
| CALL ZGEMLQ( 'L', TRANS, N, NRHS, M, A, LDA, TQ, | |||
| $ TSZO, B, LDB, WORKQ, -1, INFO2 ) | |||
| $ TSZM, B, LDB, WORKQ, -1, INFO2 ) | |||
| LWM = MAX( LWM, INT( WORKQ( 1 ) ) ) | |||
| WSIZEO = TSZO + LWO | |||
| WSIZEM = TSZM + LWM | |||