153 SUBROUTINE zget51( ITYPE, N, A, LDA, B, LDB, U, LDU, V, LDV, WORK,
161 INTEGER ITYPE, LDA, LDB, LDU, LDV, N
162 DOUBLE PRECISION RESULT
165 DOUBLE PRECISION RWORK( * )
166 COMPLEX*16 A( LDA, * ), B( LDB, * ), ( LDU, * ),
167 $ v( ldv, * ), work( * )
173 DOUBLE PRECISION ZERO, ONE, TEN
174 parameter( zero = 0.0d+0, one = 1.0d+0, ten = 10.0d+0 )
175 COMPLEX*16 CZERO, CONE
176 parameter( czero = ( 0.0d+0, 0.0d+0 ),
177 $ cone = ( 1.0d+0, 0.0d+0 ) )
181 DOUBLE PRECISION ANORM, ULP, UNFL, WNORM
184 DOUBLE PRECISION DLAMCH, ZLANGE
185 EXTERNAL dlamch, zlange
201 unfl = dlamch(
'Safe minimum' )
202 ulp = dlamch( 'epsilon
' )*DLAMCH( 'base
' )
206.LT..OR..GT.
IF( ITYPE1 ITYPE3 ) THEN
211.LE.
IF( ITYPE2 ) THEN
215 ANORM = MAX( ZLANGE( '1
', N, N, A, LDA, RWORK ), UNFL )
217.EQ.
IF( ITYPE1 ) THEN
221 CALL ZLACPY( ' ', N, N, A, LDA, WORK, N )
222 CALL ZGEMM( 'n
', 'n
', N, N, N, CONE, U, LDU, B, LDB, CZERO,
223 $ WORK( N**2+1 ), N )
225 CALL ZGEMM( 'n
', 'c
', N, N, N, -CONE, WORK( N**2+1 ), N, V,
226 $ LDV, CONE, WORK, N )
232 CALL ZLACPY( ' ', N, N, B, LDB, WORK, N )
236 WORK( JROW+N*( JCOL-1 ) ) = WORK( JROW+N*( JCOL-1 ) )
244 WNORM = ZLANGE( '1
', N, N, WORK, N, RWORK )
246.GT.
IF( ANORMWNORM ) THEN
247 RESULT = ( WNORM / ANORM ) / ( N*ULP )
249.LT.
IF( ANORMONE ) THEN
250 RESULT = ( MIN( WNORM, N*ANORM ) / ANORM ) / ( N*ULP )
252 RESULT = MIN( WNORM / ANORM, DBLE( N ) ) / ( N*ULP )
262 CALL ZGEMM( 'n
', 'c
', N, N, N, CONE, U, LDU, U, LDU, CZERO,
266 WORK( ( N+1 )*( JDIAG-1 )+1 ) = WORK( ( N+1 )*( JDIAG-1 )+
270 RESULT = MIN( ZLANGE( '1
', N, N, WORK, N, RWORK ),
271 $ DBLE( N ) ) / ( N*ULP )
subroutine zlacpy(uplo, m, n, a, lda, b, ldb)
ZLACPY copies all or part of one two-dimensional array to another.
subroutine zgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
ZGEMM
subroutine zget51(itype, n, a, lda, b, ldb, u, ldu, v, ldv, work, rwork, result)
ZGET51