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