*> 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
* ..
* .. Local Scalars ..
LOGICAL LQUERY, LMINWS, MINT, MINW
- INTEGER MB, NB, MINTSZ, NBLCKS
+ INTEGER MB, NB, MINTSZ, NBLCKS, LWMIN, LWOPT, LWREQ
* ..
* .. External Functions ..
LOGICAL LSAME
*
* 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
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
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
$ LWORK, INFO )
END IF
*
- WORK( 1 ) = MAX( 1, MB*M )
+ WORK( 1 ) = LWREQ
*
RETURN
*
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
*> 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
* ..
* .. Local Scalars ..
LOGICAL LQUERY, LMINWS, MINT, MINW
- INTEGER MB, NB, MINTSZ, NBLCKS
+ INTEGER MB, NB, MINTSZ, NBLCKS, LWMIN, LWOPT, LWREQ
* ..
* .. External Functions ..
LOGICAL LSAME
*
* 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
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
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
$ LWORK, INFO )
END IF
*
- WORK( 1 ) = MAX( 1, MB*M )
+ WORK( 1 ) = LWREQ
*
RETURN
*
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
*> 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
* ..
* .. Local Scalars ..
LOGICAL LQUERY, LMINWS, MINT, MINW
- INTEGER MB, NB, MINTSZ, NBLCKS
+ INTEGER MB, NB, MINTSZ, NBLCKS, LWMIN, LWOPT, LWREQ
* ..
* .. External Functions ..
LOGICAL LSAME
*
* 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
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
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
$ LWORK, INFO )
END IF
*
- WORK( 1 ) = MAX( 1, MB*M )
+ WORK( 1 ) = LWREQ
RETURN
*
* End of SGELQ
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
*> 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
* ..
* .. Local Scalars ..
LOGICAL LQUERY, LMINWS, MINT, MINW
- INTEGER MB, NB, MINTSZ, NBLCKS
+ INTEGER MB, NB, MINTSZ, NBLCKS, LWMIN, LWOPT, LWREQ
* ..
* .. External Functions ..
LOGICAL LSAME
*
* 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
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
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
$ LWORK, INFO )
END IF
*
- WORK( 1 ) = MAX( 1, MB*M )
+ WORK( 1 ) = LWREQ
*
RETURN
*
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