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 *',