91 DOUBLE PRECISION FUNCTION drzt02( M, N, AF, LDA, TAU, WORK,
100 INTEGER LDA, LWORK, M, N
103 DOUBLE PRECISION AF( lda, * ), TAU( * ), WORK( lwork )
109 DOUBLE PRECISION ZERO, ONE
110 parameter ( zero = 0.0d+0, one = 1.0d+0 )
116 DOUBLE PRECISION RWORK( 1 )
119 DOUBLE PRECISION DLAMCH, DLANGE
120 EXTERNAL dlamch, dlange
132 IF( lwork.LT.n*n+n )
THEN
133 CALL xerbla(
'DRZT02', 7 )
139 IF( m.LE.0 .OR. n.LE.0 )
144 CALL dlaset(
'Full', n, n, zero, one, work, n )
148 CALL dormrz(
'Left',
'No transpose', n, n, m, n-m, af, lda, tau,
149 $ work, n, work( n*n+1 ), lwork-n*n, info )
153 CALL dormrz(
'Left',
'Transpose', n, n, m, n-m, af, lda, tau,
154 $ work, n, work( n*n+1 ), lwork-n*n, info )
159 work( ( i-1 )*n+i ) = work( ( i-1 )*n+i ) - one
162 drzt02 = dlange(
'One-norm', n, n, work, n, rwork ) /
163 $ ( dlamch(
'Epsilon' )*dble( max( m, n ) ) )
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
subroutine xerbla(SRNAME, INFO)
XERBLA
double precision function drzt02(M, N, AF, LDA, TAU, WORK, LWORK)
DRZT02