2520 DOUBLE PRECISION ZERO, ONE
2521 parameter( zero = 0.0d0, one = 1.0d0 )
2523 DOUBLE PRECISION ALPHA, BETA, EPS, ERR
2524 INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT
2526 CHARACTER*1 TRANSA, TRANSB
2528 DOUBLE PRECISION A( LDA, * ), B( LDB, * ), C( LDC, * ),
2529 $ CC( LDCC, * ), CT( * ), G( * )
2531 DOUBLE PRECISION ERRI
2533 LOGICAL TRANA, TRANB
2535 INTRINSIC abs, max, sqrt
2537 trana = transa.EQ.
'T'.OR.transa.EQ.
'C'
2538 tranb = transb.EQ.
'T'.OR.transb.EQ.
'C'
2550 IF( .NOT.trana.AND..NOT.tranb )
THEN
2553 ct( i ) = ct( i ) + a( i, k )*b( k, j )
2554 g( i ) = g( i ) + abs( a( i, k ) )*abs( b( k, j ) )
2557 ELSE IF( trana.AND..NOT.tranb )
THEN
2560 ct( i ) = ct( i ) + a( k, i )*b( k, j )
2561 g( i ) = g( i ) + abs( a( k, i ) )*abs( b( k, j ) )
2564 ELSE IF( .NOT.trana.AND.tranb )
THEN
2567 ct( i ) = ct( i ) + a( i, k )*b( j, k )
2568 g( i ) = g( i ) + abs( a( i, k ) )*abs( b( j, k ) )
2571 ELSE IF( trana.AND.tranb )
THEN
2574 ct( i ) = ct( i ) + a( k, i )*b( j, k )
2575 g( i ) = g( i ) + abs( a( k, i ) )*abs( b( j, k ) )
2580 ct( i ) = alpha*ct( i ) + beta*c( i, j )
2581 g( i ) = abs( alpha )*g( i ) + abs( beta )*abs( c( i, j ) )
2588 erri = abs( ct( i ) - cc( i, j ) )/eps
2589 IF( g( i ).NE.zero )
2590 $ erri = erri/g( i )
2591 err = max( err, erri )
2592 IF( err*sqrt( eps ).GE.one )
2604 WRITE( nout, fmt = 9999 )
2607 WRITE( nout, fmt = 9998 )i, ct( i ), cc( i, j )
2609 WRITE( nout, fmt = 9998 )i, cc( i, j ), ct( i )
2613 $
WRITE( nout, fmt = 9997 )j
2618 9999
FORMAT(
' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
2619 $
'F ACCURATE *******', /
' EXPECTED RESULT COMPU',
2621 9998
FORMAT( 1x, i7, 2g18.6 )
2622 9997
FORMAT(
' THESE ARE THE RESULTS FOR COLUMN ', i3 )