423 parameter ( zero = ( 0.0d0, 0.0d0 ) )
424 DOUBLE PRECISION rzero
425 parameter ( rzero = 0.0d0 )
427 DOUBLE PRECISION eps, thresh
428 INTEGER nalf, nbet, nidim, nmax, nout, ntra
429 LOGICAL fatal, rewi, trace
432 COMPLEX*16 a( nmax, nmax ), aa( nmax*nmax ), alf( nalf ),
433 $ as( nmax*nmax ), b( nmax, nmax ),
434 $ bb( nmax*nmax ), bet( nbet ), bs( nmax*nmax ),
435 $ c( nmax, nmax ), cc( nmax*nmax ),
436 $ cs( nmax*nmax ), ct( nmax )
437 DOUBLE PRECISION g( nmax )
438 INTEGER idim( nidim )
440 COMPLEX*16 alpha, als, beta, bls
441 DOUBLE PRECISION err, errmax
442 INTEGER i, ia, ib, ica, icb, ik, im, in, k, ks, laa,
443 $ lbb, lcc, lda, ldas, ldb, ldbs, ldc, ldcs, m,
444 $ ma, mb, ms, n, na, nargs, nb, nc, ns
445 LOGICAL null, reset, same, trana, tranb
446 CHARACTER*1 tranas, tranbs, transa, transb
461 COMMON /infoc/infot, noutc, ok, lerr
484 null = n.LE.0.OR.m.LE.0
490 transa = ich( ica: ica )
491 trana = transa.EQ.
'T'.OR.transa.EQ.
'C'
511 CALL zmake(
'GE',
' ',
' ', ma, na, a, nmax, aa, lda,
515 transb = ich( icb: icb )
516 tranb = transb.EQ.
'T'.OR.transb.EQ.
'C'
536 CALL zmake(
'GE',
' ',
' ', mb, nb, b, nmax, bb,
547 CALL zmake(
'GE',
' ',
' ', m, n, c, nmax,
548 $ cc, ldc, reset, zero )
578 $
WRITE( ntra, fmt = 9995 )nc, sname,
579 $ transa, transb, m, n, k, alpha, lda, ldb,
583 CALL zgemm( transa, transb, m, n, k, alpha,
584 $ aa, lda, bb, ldb, beta, cc, ldc )
589 WRITE( nout, fmt = 9994 )
596 isame( 1 ) = transa.EQ.tranas
597 isame( 2 ) = transb.EQ.tranbs
601 isame( 6 ) = als.EQ.alpha
602 isame( 7 ) =
lze( as, aa, laa )
603 isame( 8 ) = ldas.EQ.lda
604 isame( 9 ) =
lze( bs, bb, lbb )
605 isame( 10 ) = ldbs.EQ.ldb
606 isame( 11 ) = bls.EQ.beta
608 isame( 12 ) =
lze( cs, cc, lcc )
610 isame( 12 ) =
lzeres(
'GE',
' ', m, n, cs,
613 isame( 13 ) = ldcs.EQ.ldc
620 same = same.AND.isame( i )
621 IF( .NOT.isame( i ) )
622 $
WRITE( nout, fmt = 9998 )i
633 CALL zmmch( transa, transb, m, n, k,
634 $ alpha, a, nmax, b, nmax, beta,
635 $ c, nmax, ct, g, cc, ldc, eps,
636 $ err, fatal, nout, .true. )
637 errmax = max( errmax, err )
660 IF( errmax.LT.thresh )
THEN
661 WRITE( nout, fmt = 9999 )sname, nc
663 WRITE( nout, fmt = 9997 )sname, nc, errmax
668 WRITE( nout, fmt = 9996 )sname
669 WRITE( nout, fmt = 9995 )nc, sname, transa, transb, m, n, k,
670 $ alpha, lda, ldb, beta, ldc
675 9999
FORMAT(
' ', a6,
' PASSED THE COMPUTATIONAL TESTS (', i6,
' CALL',
677 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
678 $
'ANGED INCORRECTLY *******' )
679 9997
FORMAT(
' ', a6,
' COMPLETED THE COMPUTATIONAL TESTS (', i6,
' C',
680 $
'ALLS)', /
' ******* BUT WITH MAXIMUM TEST RATIO', f8.2,
681 $
' - SUSPECT *******' )
682 9996
FORMAT(
' ******* ', a6,
' FAILED ON CALL NUMBER:' )
683 9995
FORMAT( 1x, i6,
': ', a6,
'(''', a1,
''',''', a1,
''',',
684 $ 3( i3,
',' ),
'(', f4.1,
',', f4.1,
'), A,', i3,
', B,', i3,
685 $
',(', f4.1,
',', f4.1,
'), C,', i3,
').' )
686 9994
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
logical function lzeres(TYPE, UPLO, M, N, AA, AS, LDA)
subroutine zmmch(TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB, BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL, NOUT, MV)
subroutine zgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
ZGEMM
subroutine zmake(TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, KL, KU, RESET, TRANSL)
logical function lze(RI, RJ, LR)