144 SUBROUTINE dsgt01( ITYPE, UPLO, N, M, A, LDA, B, LDB, Z, LDZ, D,
153 INTEGER ITYPE, LDA, LDB, LDZ, M, N
156 DOUBLE PRECISION A( LDA, * ), B( LDB, * ), D( * ), RESULT( * ),
157 $ work( * ), z( ldz, * )
163 DOUBLE PRECISION ZERO, ONE
164 parameter( zero = 0.0d0, one = 1.0d0 )
168 DOUBLE PRECISION ANORM, ULP
171 DOUBLE PRECISION DLAMCH, DLANGE, DLANSY
172 EXTERNAL dlamch, dlange, dlansy
183 ulp = dlamch(
'Epsilon' )
187 anorm = dlansy(
'1', uplo, n, a, lda, work )*
188 $ dlange(
'1', n, m, z, ldz, work )
192 IF( itype.EQ.1 )
THEN
196 CALL dsymm(
'Left', uplo, n, m, one, a, lda, z, ldz, zero,
199 CALL dscal( n, d( i ), z( 1, i ), 1 )
201 CALL dsymm(
'Left', uplo, n, m, one, b, ldb, z, ldz, -one,
204 result( 1 ) = ( dlange(
'1', n, m, work, n, work ) / anorm ) /
207 ELSE IF( itype.EQ.2 )
THEN
211 CALL dsymm(
'Left', uplo, n, m, one, b, ldb, z, ldz, zero,
214 CALL dscal( n, d( i ), z( 1, i ), 1 )
216 CALL dsymm(
'Left', uplo, n, m, one, a, lda, work, n, -one, z,
219 result( 1 ) = ( dlange(
'1', n, m, z, ldz, work ) / anorm ) /
222 ELSE IF( itype.EQ.3 )
THEN
226 CALL dsymm(
'Left', uplo, n, m, one, a, lda, z, ldz, zero,
229 CALL dscal( n, d( i ), z( 1, i ), 1 )
231 CALL dsymm(
'Left', uplo, n, m, one, b, ldb, work, n, -one, z,
234 result( 1 ) = ( dlange(
'1', n, m, z, ldz, work ) / anorm ) /
subroutine dsgt01(itype, uplo, n, m, a, lda, b, ldb, z, ldz, d, work, result)
DSGT01
subroutine dsymm(side, uplo, m, n, alpha, a, lda, b, ldb, beta, c, ldc)
DSYMM
subroutine dscal(n, da, dx, incx)
DSCAL