111111* >
112112* > \param[out] WORK
113113* > \verbatim
114- * > (workspace) DOUBLE PRECISION array, dimension (MAX(1,LWORK))
114+ * > (workspace) DOUBLE PRECISION array, dimension (MAX(1,LWORK))
115+ * > On exit, if INFO = 0, WORK(1) returns the minimal LWORK.
115116* > \endverbatim
116117* >
117118* > \param[in] LWORK
118119* > \verbatim
119120* > LWORK is INTEGER
120- * > The dimension of the array WORK.
121+ * > The dimension of the array WORK. LWORK >= 1.
121122* > If LWORK = -1, then a workspace query is assumed. The routine
122123* > only calculates the size of the WORK array, returns this
123124* > value as WORK(1), and no error message related to WORK
@@ -188,7 +189,7 @@ SUBROUTINE DGEMLQ( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
188189* ..
189190* .. Local Scalars ..
190191 LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
191- INTEGER MB, NB, LW, NBLCKS, MN
192+ INTEGER MB, NB, LW, NBLCKS, MN, MINMNK, LWMIN
192193* ..
193194* .. External Functions ..
194195 LOGICAL LSAME
@@ -204,7 +205,7 @@ SUBROUTINE DGEMLQ( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
204205*
205206* Test the input arguments
206207*
207- LQUERY = LWORK.EQ. - 1
208+ LQUERY = ( LWORK.EQ. - 1 )
208209 NOTRAN = LSAME( TRANS, ' N' )
209210 TRAN = LSAME( TRANS, ' T' )
210211 LEFT = LSAME( SIDE, ' L' )
@@ -219,6 +220,13 @@ SUBROUTINE DGEMLQ( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
219220 LW = M * MB
220221 MN = N
221222 END IF
223+ *
224+ MINMNK = MIN ( M, N, K )
225+ IF ( MINMNK.EQ. 0 ) THEN
226+ LWMIN = 1
227+ ELSE
228+ LWMIN = MAX ( 1 , LW )
229+ END IF
222230*
223231 IF ( ( NB.GT. K ) .AND. ( MN.GT. K ) ) THEN
224232 IF ( MOD ( MN - K, NB - K ) .EQ. 0 ) THEN
@@ -247,12 +255,12 @@ SUBROUTINE DGEMLQ( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
247255 INFO = - 9
248256 ELSE IF ( LDC.LT. MAX ( 1 , M ) ) THEN
249257 INFO = - 11
250- ELSE IF ( ( LWORK.LT. MAX ( 1 , LW ) ) .AND. ( .NOT. LQUERY ) ) THEN
258+ ELSE IF ( LWORK.LT. LWMIN .AND. .NOT. LQUERY ) THEN
251259 INFO = - 13
252260 END IF
253261*
254262 IF ( INFO.EQ. 0 ) THEN
255- WORK( 1 ) = LW
263+ WORK( 1 ) = LWMIN
256264 END IF
257265*
258266 IF ( INFO.NE. 0 ) THEN
@@ -264,7 +272,7 @@ SUBROUTINE DGEMLQ( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
264272*
265273* Quick return if possible
266274*
267- IF ( MIN ( M, N, K ) .EQ. 0 ) THEN
275+ IF ( MINMNK .EQ. 0 ) THEN
268276 RETURN
269277 END IF
270278*
@@ -277,7 +285,7 @@ SUBROUTINE DGEMLQ( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
277285 $ MB, C, LDC, WORK, LWORK, INFO )
278286 END IF
279287*
280- WORK( 1 ) = LW
288+ WORK( 1 ) = LWMIN
281289*
282290 RETURN
283291*
0 commit comments