91 DOUBLE PRECISION FUNCTION dtzt02( 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.0d0, one = 1.0d0 )
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(
'DTZT02', 7 )
139 IF( m.LE.0 .OR. n.LE.0 )
144 CALL dlaset(
'Full', n, n, zero, one, work, n )
149 CALL dlatzm(
'Left', n-m+1, n, af( i, m+1 ), lda, tau( i ),
150 $ work( i ), work( m+1 ), n, work( n*n+1 ) )
156 CALL dlatzm(
'Left', n-m+1, n, af( i, m+1 ), lda, tau( i ),
157 $ work( i ), work( m+1 ), n, work( n*n+1 ) )
163 work( ( i-1 )*n+i ) = work( ( i-1 )*n+i ) - one
166 dtzt02 = dlange(
'One-norm', n, n, work, n, rwork ) /
167 $ ( dlamch(
'Epsilon' )*dble( max( m, n ) ) )
subroutine xerbla(SRNAME, INFO)
XERBLA
double precision function dtzt02(M, N, AF, LDA, TAU, WORK, LWORK)
DTZT02
subroutine dlatzm(SIDE, M, N, V, INCV, TAU, C1, C2, LDC, WORK)
DLATZM
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...