141 SUBROUTINE cget22( TRANSA, TRANSE, TRANSW, N, A, LDA, E, LDE, W,
142 $ WORK, RWORK, RESULT )
149 CHARACTER TRANSA, TRANSE, TRANSW
153 REAL RESULT( 2 ), RWORK( * )
154 COMPLEX A( LDA, * ), E( LDE, * ), W( * ), WORK( * )
161 parameter( zero = 0.0e+0, one = 1.0e+0 )
163 parameter( czero = ( 0.0e+0, 0.0e+0 ),
164 $ cone = ( 1.0e+0, 0.0e+0 ) )
167 CHARACTER NORMA, NORME
168 INTEGER ITRNSE, ITRNSW, J, JCOL, JOFF, JROW, JVEC
169 REAL ANORM, ENORM, ENRMAX, ENRMIN, ERRNRM, TEMP1,
176 EXTERNAL lsame, clange, slamch
182 INTRINSIC abs, aimag, conjg, max, min, real
193 unfl = slamch(
'Safe minimum' )
194 ulp = slamch(
'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( real( e( j, jvec ) ) )+
226 $ abs( aimag( e( j, jvec ) ) ) )
228 enrmin = min( enrmin, temp1 )
229 enrmax = max( enrmax, temp1 )
238 rwork( jvec ) = max( rwork( jvec ),
239 $ abs( real( e( jvec, j ) ) )+
240 $ abs( aimag( e( jvec, j ) ) ) )
245 enrmin = min( enrmin, rwork( jvec ) )
246 enrmax = max( enrmax, rwork( jvec ) )
252 anorm = max( clange( norma, n, n, a, lda, rwork ), unfl )
256 enorm = max( clange( norme, n, n, e, lde, rwork ), ulp )
262 CALL claset(
'Full', n, n, czero, czero, work, n )
266 IF( itrnsw.EQ.0 )
THEN
269 wtemp = conjg( 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 ) = conjg( e( jcol, jrow ) )*wtemp
288 CALL cgemm( transa, transe, n, n, n, cone, a, lda, e, lde, -cone,
291 errnrm = clange(
'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 cgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
CGEMM
subroutine cget22(TRANSA, TRANSE, TRANSW, N, A, LDA, E, LDE, W, WORK, RWORK, RESULT)
CGET22
subroutine claset(UPLO, M, N, ALPHA, BETA, A, LDA)
CLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.