141 SUBROUTINE zget22( TRANSA, TRANSE, TRANSW, N, A, LDA, E, LDE, W,
142 $ WORK, RWORK, RESULT )
149 CHARACTER TRANSA, TRANSE, TRANSW
153 DOUBLE PRECISION RESULT( 2 ), RWORK( * )
154 COMPLEX*16 A( LDA, * ), E( LDE, * ), W( * ), WORK( * )
160 DOUBLE PRECISION ZERO, ONE
161 parameter( zero = 0.0d+0, one = 1.0d+0 )
162 COMPLEX*16 CZERO, CONE
163 parameter( czero = ( 0.0d+0, 0.0d+0 ),
164 $ cone = ( 1.0d+0, 0.0d+0 ) )
167 CHARACTER NORMA, NORME
168 INTEGER ITRNSE, ITRNSW, J, JCOL, JOFF, JROW, JVEC
169 DOUBLE PRECISION ANORM, ENORM, ENRMAX, ENRMIN, ERRNRM, TEMP1,
175 DOUBLE PRECISION DLAMCH, ZLANGE
176 EXTERNAL lsame, dlamch, zlange
182 INTRINSIC abs, dble, dconjg, dimag, max, min
193 unfl = dlamch(
'Safe minimum' )
194 ulp = dlamch(
'Precision' )
201 IF( lsame( transa,
'T' ) .OR. lsame( transa,
'C' ) )
THEN
205 IF( lsame( transe,
'T' ) )
THEN
208 ELSE IF( lsame( transe,
'C' ) )
THEN
213 IF( lsame( transw,
'C' ) )
THEN
221 IF( itrnse.EQ.0 )
THEN
225 temp1 = max( temp1, abs( dble( e( j, jvec ) ) )+
226 $ abs( dimag( e( j, jvec ) ) ) )
228 enrmin = min( enrmin, temp1 )
229 enrmax = max( enrmax, temp1 )
238 rwork( jvec ) = max( rwork( jvec ),
239 $ abs( dble( e( jvec, j ) ) )+
240 $ abs( dimag( e( jvec, j ) ) ) )
245 enrmin = min( enrmin, rwork( jvec ) )
246 enrmax = max( enrmax, rwork( jvec ) )
252 anorm = max( zlange( norma, n, n, a, lda, rwork ), unfl )
256 enorm = max( zlange( norme, n, n, e, lde, rwork ), ulp )
262 CALL zlaset(
'Full', n, n, czero, czero, work, n )
266 IF( itrnsw.EQ.0 )
THEN
269 wtemp = dconjg( w( jcol ) )
272 IF( itrnse.EQ.0 )
THEN
274 work( joff+jrow ) = e( jrow, jcol )*wtemp
276 ELSE IF( itrnse.EQ.1 )
THEN
278 work( joff+jrow ) = e( jcol, jrow )*wtemp
282 work( joff+jrow ) = dconjg( e( jcol, jrow ) )*wtemp
288 CALL zgemm( transa, transe, n, n, n, cone, a, lda, e, lde, -cone,
291 errnrm = zlange(
'One', n, n, work, n, rwork ) / enorm
295 IF( anorm.GT.errnrm )
THEN
296 result( 1 ) = ( errnrm / anorm ) / ulp
298 IF( anorm.LT.one )
THEN
299 result( 1 ) = ( min( errnrm, anorm ) / anorm ) / ulp
301 result( 1 ) = min( errnrm / anorm, one ) / ulp
307 result( 2 ) = max( abs( enrmax-one ), abs( enrmin-one ) ) /
subroutine zgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
ZGEMM
subroutine zget22(TRANSA, TRANSE, TRANSW, N, A, LDA, E, LDE, W, WORK, RWORK, RESULT)
ZGET22
subroutine zlaset(UPLO, M, N, ALPHA, BETA, A, LDA)
ZLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.