420 parameter( zero = ( 0.0d0, 0.0d0 ) )
421 DOUBLE PRECISION RZERO
422 parameter( rzero = 0.0d0 )
424 DOUBLE PRECISION EPS, THRESH
425 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
426 LOGICAL FATAL, REWI, TRACE
429 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
430 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
431 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
432 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
433 $ CS( NMAX*NMAX ), CT( NMAX )
434 DOUBLE PRECISION G( NMAX )
435 INTEGER IDIM( NIDIM )
437 COMPLEX*16 ALPHA, ALS, BETA, BLS
438 DOUBLE PRECISION ERR, ERRMAX
439 INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA,
440 $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M,
441 $ MA, MB, MS, N, NA, NARGS, NB, NC, NS
442 LOGICAL NULL, RESET, SAME, TRANA, TRANB
443 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB
458 COMMON /infoc/infot, noutc, ok, lerr
481 null = n.LE.0.OR.m.LE.0
487 transa = ich( ica: ica )
488 trana = transa.EQ.
'T'.OR.transa.EQ.
'C'
508 CALL zmake(
'GE',
' ',
' ', ma, na, a, nmax, aa, lda,
512 transb = ich( icb: icb )
513 tranb = transb.EQ.
'T'.OR.transb.EQ.
'C'
533 CALL zmake(
'GE',
' ',
' ', mb, nb, b, nmax, bb,
544 CALL zmake(
'GE',
' ',
' ', m, n, c, nmax,
545 $ cc, ldc, reset, zero )
575 $
WRITE( ntra, fmt = 9995 )nc, sname,
576 $ transa, transb, m, n, k, alpha, lda, ldb,
580 CALL zgemm( transa, transb, m, n, k, alpha,
581 $ aa, lda, bb, ldb, beta, cc, ldc )
586 WRITE( nout, fmt = 9994 )
593 isame( 1 ) = transa.EQ.tranas
594 isame( 2 ) = transb.EQ.tranbs
598 isame( 6 ) = als.EQ.alpha
599 isame( 7 ) =
lze( as, aa, laa )
600 isame( 8 ) = ldas.EQ.lda
601 isame( 9 ) =
lze( bs, bb, lbb )
602 isame( 10 ) = ldbs.EQ.ldb
603 isame( 11 ) = bls.EQ.beta
605 isame( 12 ) =
lze( cs, cc, lcc )
607 isame( 12 ) =
lzeres(
'GE',
' ', m, n, cs,
610 isame( 13 ) = ldcs.EQ.ldc
617 same = same.AND.isame( i )
618 IF( .NOT.isame( i ) )
619 $
WRITE( nout, fmt = 9998 )i
630 CALL zmmch( transa, transb, m, n, k,
631 $ alpha, a, nmax, b, nmax, beta,
632 $ c, nmax, ct, g, cc, ldc, eps,
633 $ err, fatal, nout, .true. )
634 errmax = max( errmax, err )
657 IF( errmax.LT.thresh )
THEN
658 WRITE( nout, fmt = 9999 )sname, nc
660 WRITE( nout, fmt = 9997 )sname, nc, errmax
665 WRITE( nout, fmt = 9996 )sname
666 WRITE( nout, fmt = 9995 )nc, sname, transa, transb, m, n, k,
667 $ alpha, lda, ldb, beta, ldc
672 9999
FORMAT(
' ', a6,
' PASSED THE COMPUTATIONAL TESTS (', i6,
' CALL',
674 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
675 $
'ANGED INCORRECTLY *******' )
676 9997
FORMAT(
' ', a6,
' COMPLETED THE COMPUTATIONAL TESTS (', i6,
' C',
677 $
'ALLS)', /
' ******* BUT WITH MAXIMUM TEST RATIO', f8.2,
678 $
' - SUSPECT *******' )
679 9996
FORMAT(
' ******* ', a6,
' FAILED ON CALL NUMBER:' )
680 9995
FORMAT( 1x, i6,
': ', a6,
'(''', a1,
''',''', a1,
''',',
681 $ 3( i3,
',' ),
'(', f4.1,
',', f4.1,
'), A,', i3,
', B,', i3,
682 $
',(', f4.1,
',', f4.1,
'), C,', i3,
').' )
683 9994
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
subroutine zgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
ZGEMM
logical function lzeres(TYPE, UPLO, M, N, AA, AS, LDA)
subroutine zmake(TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, KL, KU, RESET, TRANSL)
logical function lze(RI, RJ, LR)
subroutine zmmch(TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB, BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL, NOUT, MV)