98 DOUBLE PRECISION FUNCTION zrzt01( M, N, A, AF, LDA, TAU, WORK,
107 INTEGER LDA, LWORK, M, N
110 COMPLEX*16 A( lda, * ), AF( lda, * ), TAU( * ),
117 DOUBLE PRECISION ZERO, ONE
118 parameter ( zero = 0.0d0, one = 1.0d0 )
122 DOUBLE PRECISION NORMA
125 DOUBLE PRECISION RWORK( 1 )
128 DOUBLE PRECISION DLAMCH, ZLANGE
129 EXTERNAL dlamch, zlange
135 INTRINSIC dble, dcmplx, max
141 IF( lwork.LT.m*n+m )
THEN
142 CALL xerbla(
'ZRZT01', 8 )
148 IF( m.LE.0 .OR. n.LE.0 )
151 norma = zlange(
'One-norm', m, n, a, lda, rwork )
155 CALL zlaset(
'Full', m, n, dcmplx( zero ), dcmplx( zero ), work,
159 work( ( j-1 )*m+i ) = af( i, j )
165 CALL zunmrz(
'Right',
'No tranpose', m, n, m, n-m, af, lda, tau,
166 $ work, m, work( m*n+1 ), lwork-m*n, info )
171 CALL zaxpy( m, dcmplx( -one ), a( 1, i ), 1,
172 $ work( ( i-1 )*m+1 ), 1 )
175 zrzt01 = zlange(
'One-norm', m, n, work, m, rwork )
177 zrzt01 =
zrzt01 / ( dlamch(
'Epsilon' )*dble( max( m, n ) ) )
subroutine zlaset(UPLO, M, N, ALPHA, BETA, A, LDA)
ZLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values...
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zunmrz(SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
ZUNMRZ
double precision function zrzt01(M, N, A, AF, LDA, TAU, WORK, LWORK)
ZRZT01
subroutine zaxpy(N, ZA, ZX, INCX, ZY, INCY)
ZAXPY