110110* >
111111* > \param[out] WORK
112112* > \verbatim
113- * > (workspace) REAL array, dimension (MAX(1,LWORK))
113+ * > (workspace) DOUBLE PRECISION array, dimension (MAX(1,LWORK))
114+ * > On exit, if INFO = 0, WORK(1) returns the minimal LWORK.
114115* > \endverbatim
115116* >
116117* > \param[in] LWORK
117118* > \verbatim
118119* > LWORK is INTEGER
119- * > The dimension of the array WORK.
120+ * > The dimension of the array WORK. LWORK >= 1.
120121* > If LWORK = -1, then a workspace query is assumed. The routine
121122* > only calculates the size of the WORK array, returns this
122123* > value as WORK(1), and no error message related to WORK
@@ -187,7 +188,7 @@ SUBROUTINE SGEMLQ( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
187188* ..
188189* .. Local Scalars ..
189190 LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
190- INTEGER MB, NB, LW, NBLCKS, MN
191+ INTEGER MB, NB, LW, NBLCKS, MN, MINMNK, LWMIN
191192* ..
192193* .. External Functions ..
193194 LOGICAL LSAME
@@ -207,7 +208,7 @@ SUBROUTINE SGEMLQ( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
207208*
208209* Test the input arguments
209210*
210- LQUERY = LWORK.EQ. - 1
211+ LQUERY = ( LWORK.EQ. - 1 )
211212 NOTRAN = LSAME( TRANS, ' N' )
212213 TRAN = LSAME( TRANS, ' T' )
213214 LEFT = LSAME( SIDE, ' L' )
@@ -222,6 +223,13 @@ SUBROUTINE SGEMLQ( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
222223 LW = M * MB
223224 MN = N
224225 END IF
226+ *
227+ MINMNK = MIN ( M, N, K )
228+ IF ( MINMNK.EQ. 0 ) THEN
229+ LWMIN = 1
230+ ELSE
231+ LWMIN = MAX ( 1 , LW )
232+ END IF
225233*
226234 IF ( ( NB.GT. K ) .AND. ( MN.GT. K ) ) THEN
227235 IF ( MOD ( MN - K, NB - K ) .EQ. 0 ) THEN
@@ -250,12 +258,12 @@ SUBROUTINE SGEMLQ( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
250258 INFO = - 9
251259 ELSE IF ( LDC.LT. MAX ( 1 , M ) ) THEN
252260 INFO = - 11
253- ELSE IF ( ( LWORK.LT. MAX ( 1 , LW ) ) .AND. ( .NOT. LQUERY ) ) THEN
261+ ELSE IF ( LWORK.LT. LWMIN .AND. .NOT. LQUERY ) THEN
254262 INFO = - 13
255263 END IF
256264*
257265 IF ( INFO.EQ. 0 ) THEN
258- WORK( 1 ) = SROUNDUP_LWORK( LW )
266+ WORK( 1 ) = SROUNDUP_LWORK( LWMIN )
259267 END IF
260268*
261269 IF ( INFO.NE. 0 ) THEN
@@ -267,7 +275,7 @@ SUBROUTINE SGEMLQ( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
267275*
268276* Quick return if possible
269277*
270- IF ( MIN ( M, N, K ) .EQ. 0 ) THEN
278+ IF ( MINMNK .EQ. 0 ) THEN
271279 RETURN
272280 END IF
273281*
@@ -280,7 +288,7 @@ SUBROUTINE SGEMLQ( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
280288 $ MB, C, LDC, WORK, LWORK, INFO )
281289 END IF
282290*
283- WORK( 1 ) = SROUNDUP_LWORK( LW )
291+ WORK( 1 ) = SROUNDUP_LWORK( LWMIN )
284292*
285293 RETURN
286294*
0 commit comments