3074 parameter( zero = ( 0.0d0, 0.0d0 ) )
3075 DOUBLE PRECISION RZERO, RONE
3076 parameter( rzero = 0.0d0, rone = 1.0d0 )
3078 COMPLEX*16 ALPHA, BETA
3079 DOUBLE PRECISION EPS, ERR
3080 INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT
3082 CHARACTER*1 TRANSA, TRANSB
3084 COMPLEX*16 A( LDA, * ), B( LDB, * ), C( LDC, * ),
3085 $ CC( LDCC, * ), CT( * )
3086 DOUBLE PRECISION G( * )
3089 DOUBLE PRECISION ERRI
3091 LOGICAL CTRANA, CTRANB, TRANA, TRANB
3093 INTRINSIC abs, dimag, dconjg, max, dble, sqrt
3095 DOUBLE PRECISION ABS1
3097 abs1( cl ) = abs( dble( cl ) ) + abs( dimag( cl ) )
3099 trana = transa.EQ.
'T'.OR.transa.EQ.
'C'
3100 tranb = transb.EQ.
'T'.OR.transb.EQ.
'C'
3101 ctrana = transa.EQ.
'C'
3102 ctranb = transb.EQ.
'C'
3114 IF( .NOT.trana.AND..NOT.tranb )
THEN
3117 ct( i ) = ct( i ) + a( i, k )*b( k, j )
3118 g( i ) = g( i ) + abs1( a( i, k ) )*abs1( b( k, j ) )
3121 ELSE IF( trana.AND..NOT.tranb )
THEN
3125 ct( i ) = ct( i ) + dconjg( a( k, i ) )*b( k, j )
3126 g( i ) = g( i ) + abs1( a( k, i ) )*
3133 ct( i ) = ct( i ) + a( k, i )*b( k, j )
3134 g( i ) = g( i ) + abs1( a( k, i ) )*
3139 ELSE IF( .NOT.trana.AND.tranb )
THEN
3143 ct( i ) = ct( i ) + a( i, k )*dconjg( b( j, k ) )
3144 g( i ) = g( i ) + abs1( a( i, k ) )*
3151 ct( i ) = ct( i ) + a( i, k )*b( j, k )
3152 g( i ) = g( i ) + abs1( a( i, k ) )*
3157 ELSE IF( trana.AND.tranb )
THEN
3162 ct( i ) = ct( i ) + dconjg( a( k, i ) )*
3163 $ dconjg( b( j, k ) )
3164 g( i ) = g( i ) + abs1( a( k, i ) )*
3171 ct( i ) = ct( i ) + dconjg( a( k, i ) )*
3173 g( i ) = g( i ) + abs1( a( k, i ) )*
3182 ct( i ) = ct( i ) + a( k, i )*
3183 $ dconjg( b( j, k ) )
3184 g( i ) = g( i ) + abs1( a( k, i ) )*
3191 ct( i ) = ct( i ) + a( k, i )*b( j, k )
3192 g( i ) = g( i ) + abs1( a( k, i ) )*
3200 ct( i ) = alpha*ct( i ) + beta*c( i, j )
3201 g( i ) = abs1( alpha )*g( i ) +
3202 $ abs1( beta )*abs1( c( i, j ) )
3209 erri = abs1( ct( i ) - cc( i, j ) )/eps
3210 IF( g( i ).NE.rzero )
3211 $ erri = erri/g( i )
3212 err = max( err, erri )
3213 IF( err*sqrt( eps ).GE.rone )
3225 WRITE( nout, fmt = 9999 )
3228 WRITE( nout, fmt = 9998 )i, ct( i ), cc( i, j )
3230 WRITE( nout, fmt = 9998 )i, cc( i, j ), ct( i )
3234 $
WRITE( nout, fmt = 9997 )j
3239 9999
FORMAT(
' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
3240 $
'F ACCURATE *******', /
' EXPECTED RE',
3241 $
'SULT COMPUTED RESULT' )
3242 9998
FORMAT( 1x, i7, 2(
' (', g15.6,
',', g15.6,
')' ) )
3243 9997
FORMAT(
' THESE ARE THE RESULTS FOR COLUMN ', i3 )