164 SUBROUTINE zgemqrt( SIDE, TRANS, M, N, K, NB, V, LDV, T, LDT,
165 $ C, LDC, WORK, INFO )
172 CHARACTER SIDE, TRANS
173 INTEGER INFO, K, LDV, LDC, M, N, NB, LDT
176 COMPLEX*16 V( LDV, * ), C( LDC, * ), T( LDT, * ), WORK( * )
183 LOGICAL LEFT, RIGHT, TRAN, NOTRAN
184 INTEGER I, IB, LDWORK, KF, Q
201 left = lsame( side,
'L' )
202 right = lsame( side,
'R' )
203 tran = lsame( trans,
'C' )
204 notran = lsame( trans,
'N' )
209 ELSE IF ( right )
THEN
213 IF( .NOT.left .AND. .NOT.right )
THEN
215 ELSE IF( .NOT.tran .AND. .NOT.notran )
THEN
217 ELSE IF( m.LT.0 )
THEN
219 ELSE IF( n.LT.0 )
THEN
221 ELSE IF( k.LT.0 .OR. k.GT.q )
THEN
223 ELSE IF( nb.LT.1 .OR. (nb.GT.k .AND. k.GT.0))
THEN
225 ELSE IF( ldv.LT.max( 1, q ) )
THEN
227 ELSE IF( ldt.LT.nb )
THEN
229 ELSE IF( ldc.LT.max( 1, m ) )
THEN
234 CALL xerbla(
'ZGEMQRT', -info )
240 IF( m.EQ.0 .OR. n.EQ.0 .OR. k.EQ.0 )
RETURN
242 IF( left .AND. tran )
THEN
245 ib = min( nb, k-i+1 )
246 CALL zlarfb(
'L',
'C',
'F',
'C', m-i+1, n, ib,
247 $ v( i, i ), ldv, t( 1, i ), ldt,
248 $ c( i, 1 ), ldc, work, ldwork )
251 ELSE IF( right .AND. notran )
THEN
254 ib = min( nb, k-i+1 )
255 CALL zlarfb(
'R',
'N',
'F',
'C', m, n-i+1, ib,
256 $ v( i, i ), ldv, t( 1, i ), ldt,
257 $ c( 1, i ), ldc, work, ldwork )
260 ELSE IF( left .AND. notran )
THEN
264 ib = min( nb, k-i+1 )
265 CALL zlarfb(
'L',
'N',
'F',
'C', m-i+1, n, ib,
266 $ v( i, i ), ldv, t( 1, i ), ldt,
267 $ c( i, 1 ), ldc, work, ldwork )
270 ELSE IF( right .AND. tran )
THEN
274 ib = min( nb, k-i+1 )
275 CALL zlarfb(
'R',
'C',
'F',
'C', m, n-i+1, ib,
276 $ v( i, i ), ldv, t( 1, i ), ldt,
277 $ c( 1, i ), ldc, work, ldwork )
subroutine zgemqrt(side, trans, m, n, k, nb, v, ldv, t, ldt, c, ldc, work, info)
ZGEMQRT
subroutine zlarfb(side, trans, direct, storev, m, n, k, v, ldv, t, ldt, c, ldc, work, ldwork)
ZLARFB applies a block reflector or its conjugate-transpose to a general rectangular matrix.