150 SUBROUTINE zsgt01( ITYPE, UPLO, N, M, A, LDA, B, LDB, Z, LDZ, D,
151 $ WORK, RWORK, RESULT )
159 INTEGER ITYPE, LDA, , LDZ, M, N
162 DOUBLE PRECISION ( * ), RESULT( * ), RWORK( * )
163 COMPLEX*16 A( LDA, * ), B( LDB, * ), WORK( * ),
170 DOUBLE PRECISION ZERO, ONE
171 parameter( zero = 0.0d+0, one = 1.0d+0 )
172 COMPLEX*16 CZERO, CONE
173 parameter( czero = ( 0.0d+0, 0.0d+0 ),
174 $ cone = ( 1.0d+0, 0.0d+0 ) )
178 DOUBLE PRECISION ANORM, ULP
181 DOUBLE PRECISION DLAMCH, ZLANGE, ZLANHE
182 EXTERNAL dlamch, zlange, zlanhe
193 ulp = dlamch(
'Epsilon' )
197 anorm = zlanhe(
'1', uplo, n, a, lda, rwork )*
198 $ zlange(
'1', n, m, z, ldz, rwork )
202 IF( itype.EQ.1 )
THEN
206 CALL zhemm(
'Left', uplo, n, m, cone, a, lda, z, ldz, czero,
209 CALL zdscal( n, d( i ), z( 1, i ), 1 )
211 CALL zhemm( 'left
', UPLO, N, M, CONE, B, LDB, Z, LDZ, -CONE,
214 RESULT( 1 ) = ( ZLANGE( '1
', N, M, WORK, N, RWORK ) / ANORM ) /
217.EQ.
ELSE IF( ITYPE2 ) THEN
221 CALL ZHEMM( 'left
', UPLO, N, M, CONE, B, LDB, Z, LDZ, CZERO,
224 CALL ZDSCAL( N, D( I ), Z( 1, I ), 1 )
226 CALL ZHEMM( 'left
', UPLO, N, M, CONE, A, LDA, WORK, N, -CONE,
229 RESULT( 1 ) = ( ZLANGE( '1
', N, M, Z, LDZ, RWORK ) / ANORM ) /
232.EQ.
ELSE IF( ITYPE3 ) THEN
236 CALL ZHEMM( 'left
', UPLO, N, M, CONE, A, LDA, Z, LDZ, CZERO,
239 CALL ZDSCAL( N, D( I ), Z( 1, I ), 1 )
241 CALL ZHEMM( 'left
', UPLO, N, M, CONE, B, LDB, WORK, N, -CONE,
244 RESULT( 1 ) = ( ZLANGE( '1
', N, M, Z, LDZ, RWORK ) / ANORM ) /
subroutine zhemm(side, uplo, m, n, alpha, a, lda, b, ldb, beta, c, ldc)
ZHEMM
subroutine zsgt01(itype, uplo, n, m, a, lda, b, ldb, z, ldz, d, work, rwork, result)
ZSGT01