152 SUBROUTINE zsgt01( ITYPE, UPLO, N, M, A, LDA, B, LDB, Z, LDZ, D,
153 $ work, rwork, result )
162 INTEGER itype, lda, ldb, ldz, m, n
165 DOUBLE PRECISION d( * ), result( * ), rwork( * )
166 COMPLEX*16 a( lda, * ), b( ldb, * ), work( * ),
173 DOUBLE PRECISION zero, one
174 parameter( zero = 0.0d+0, one = 1.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
200 anorm =
zlanhe(
'1', uplo, n, a, lda, rwork )*
201 $
zlange(
'1', n, m, z, ldz, rwork )
205 IF( itype.EQ.1 )
THEN
209 CALL
zhemm(
'Left', uplo, n, m, cone, a, lda, z, ldz, czero,
212 CALL
zdscal( n, d( i ), z( 1, i ), 1 )
214 CALL
zhemm(
'Left', uplo, n, m, cone, b, ldb, z, ldz, -cone,
217 result( 1 ) = (
zlange(
'1', n, m, work, n, rwork ) / anorm ) /
220 ELSE IF( itype.EQ.2 )
THEN
224 CALL
zhemm(
'Left', uplo, n, m, cone, b, ldb, z, ldz, czero,
227 CALL
zdscal( n, d( i ), z( 1, i ), 1 )
229 CALL
zhemm(
'Left', uplo, n, m, cone, a, lda, work, n, -cone,
232 result( 1 ) = (
zlange(
'1', n, m, z, ldz, rwork ) / anorm ) /
235 ELSE IF( itype.EQ.3 )
THEN
239 CALL
zhemm(
'Left', uplo, n, m, cone, a, lda, z, ldz, czero,
242 CALL
zdscal( n, d( i ), z( 1, i ), 1 )
244 CALL
zhemm(
'Left', uplo, n, m, cone, b, ldb, work, n, -cone,
247 result( 1 ) = (
zlange(
'1', n, m, z, ldz, rwork ) / anorm ) /