89 DOUBLE PRECISION FUNCTION drzt02( M, N, AF, LDA, TAU, WORK,
97 INTEGER lda, lwork, m, n
100 DOUBLE PRECISION af( lda, * ), tau( * ), work( lwork )
106 DOUBLE PRECISION zero, one
107 parameter( zero = 0.0d+0, one = 1.0d+0 )
113 DOUBLE PRECISION rwork( 1 )
129 IF( lwork.LT.n*n+n )
THEN
130 CALL xerbla(
'DRZT02', 7 )
136 IF( m.LE.0 .OR. n.LE.0 )
141 CALL dlaset(
'Full', n, n, zero, one, work, n )
145 CALL dormrz(
'Left',
'No transpose', n, n, m, n-m, af, lda, tau,
146 $ work, n, work( n*n+1 ), lwork-n*n, info )
150 CALL dormrz(
'Left',
'Transpose', n, n, m, n-m, af, lda, tau,
151 $ work, n, work( n*n+1 ), lwork-n*n, info )
156 work( ( i-1 )*n+i ) = work( ( i-1 )*n+i ) - one
160 $ (
dlamch(
'Epsilon' )*dble( max( m, n ) ) )
subroutine xerbla(srname, info)
double precision function drzt02(m, n, af, lda, tau, work, lwork)
DRZT02
double precision function dlamch(cmach)
DLAMCH
double precision function dlange(norm, m, n, a, lda, work)
DLANGE returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value ...
subroutine dlaset(uplo, m, n, alpha, beta, a, lda)
DLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine dormrz(side, trans, m, n, k, l, a, lda, tau, c, ldc, work, lwork, info)
DORMRZ