151 SUBROUTINE cgemlqt( SIDE, TRANS, M, N, K, MB, V, LDV, T, LDT,
152 $ C, LDC, WORK, INFO )
159 CHARACTER SIDE, TRANS
160 INTEGER INFO, K, LDV, LDC, M, N, MB, LDT
163 COMPLEX V( LDV, * ), C( LDC, * ), T( LDT, * ), WORK( * )
170 LOGICAL LEFT, RIGHT, TRAN, NOTRAN
171 INTEGER I, IB, LDWORK, KF, Q
188 left = lsame( side,
'L' )
189 right = lsame( side,
'R' )
190 tran = lsame( trans,
'C' )
191 notran = lsame( trans, 'n
' )
196 ELSE IF ( RIGHT ) THEN
200.NOT..AND..NOT.
IF( LEFT RIGHT ) THEN
202.NOT..AND..NOT.
ELSE IF( TRAN NOTRAN ) THEN
204.LT.
ELSE IF( M0 ) THEN
206.LT.
ELSE IF( N0 ) THEN
208.LT..OR..GT.
ELSE IF( K0 KQ ) THEN
210.LT..OR..GT..AND..GT.
ELSE IF( MB1 (MBK K0)) THEN
212.LT.
ELSE IF( LDVMAX( 1, K ) ) THEN
214.LT.
ELSE IF( LDTMB ) THEN
216.LT.
ELSE IF( LDCMAX( 1, M ) ) THEN
221 CALL XERBLA( 'cgemlqt', -INFO )
227.EQ..OR..EQ..OR..EQ.
IF( M0 N0 K0 ) RETURN
229.AND.
IF( LEFT NOTRAN ) THEN
232 IB = MIN( MB, K-I+1 )
233 CALL CLARFB( 'l
', 'c
', 'f
', 'r
', M-I+1, N, IB,
234 $ V( I, I ), LDV, T( 1, I ), LDT,
235 $ C( I, 1 ), LDC, WORK, LDWORK )
238.AND.
ELSE IF( RIGHT TRAN ) THEN
241 IB = MIN( MB, K-I+1 )
242 CALL CLARFB( 'r
', 'n
', 'f
', 'r
', M, N-I+1, IB,
243 $ V( I, I ), LDV, T( 1, I ), LDT,
244 $ C( 1, I ), LDC, WORK, LDWORK )
247.AND.
ELSE IF( LEFT TRAN ) THEN
251 IB = MIN( MB, K-I+1 )
252 CALL CLARFB( 'l
', 'n
', 'f
', 'r
', M-I+1, N, IB,
253 $ V( I, I ), LDV, T( 1, I ), LDT,
254 $ C( I, 1 ), LDC, WORK, LDWORK )
257.AND.
ELSE IF( RIGHT NOTRAN ) THEN
261 IB = MIN( MB, K-I+1 )
262 CALL CLARFB( 'r
', 'c
', 'f
', 'r
', M, N-I+1, IB,
263 $ V( I, I ), LDV, T( 1, I ), LDT,
264 $ C( 1, I ), LDC, WORK, LDWORK )
subroutine clarfb(side, trans, direct, storev, m, n, k, v, ldv, t, ldt, c, ldc, work, ldwork)
CLARFB applies a block reflector or its conjugate-transpose to a general rectangular matrix.
subroutine cgemlqt(side, trans, m, n, k, mb, v, ldv, t, ldt, c, ldc, work, info)
CGEMLQT