123 SUBROUTINE dlarf( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
131 INTEGER INCV, LDC, M, N
135 DOUBLE PRECISION C( LDC, * ), V( * ), WORK( * )
141 DOUBLE PRECISION ONE, ZERO
142 parameter( one = 1.0d+0, zero = 0.0d+0 )
146 INTEGER I, LASTV, LASTC
158 applyleft =
lsame( side,
'L' )
161 IF( tau.NE.zero )
THEN
170 i = 1 + (lastv-1) * incv
174! look
for the last non-zero row in v.
175 DO WHILE( lastv.GT.0 .AND. v( i ).EQ.zero )
181 lastc = iladlc(lastv, n, c, ldc)
184 lastc =
iladlr(m, lastv, c, ldc)
193 IF( lastv.GT.0 )
THEN
197 CALL dgemv(
'Transpose', lastv, lastc, one, c, ldc, v, incv,
202 CALL dger( lastv, lastc, -tau, v, incv, work, 1, c, ldc )
208 IF( lastv.GT.0 )
THEN
212 CALL dgemv(
'No transpose', lastc, lastv, one, c, ldc,
213 $ v, incv, zero, work, 1 )
217 CALL dger( lastc, lastv, -tau, work, 1, v, incv, c, ldc )
integer function iladlr(m, n, a, lda)
ILADLR scans a matrix for its last non-zero row.
subroutine dlarf(side, m, n, v, incv, tau, c, ldc, work)
DLARF applies an elementary reflector to a general rectangular matrix.
subroutine dgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
DGEMV
subroutine dger(m, n, alpha, x, incx, y, incy, a, lda)
DGER