2498
2499
2500
2501
2502
2503
2504
2505
2506
2507 DOUBLE PRECISION ZERO
2508 parameter( zero = 0.0d0 )
2509
2510 DOUBLE PRECISION EPS, THRESH
2511 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
2512 LOGICAL FATAL, REWI, TRACE
2513 CHARACTER*13 SNAME
2514
2515 DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
2516 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
2517 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
2518 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
2519 $ CS( NMAX*NMAX ), CT( NMAX ), G( NMAX )
2520 INTEGER IDIM( NIDIM )
2521
2522 DOUBLE PRECISION ALPHA, ALS, BETA, BLS, ERR, ERRMAX
2523 INTEGER I, IA, IB, ICA, ICB, IK, IN, K, KS, LAA,
2524 $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS,
2525 $ MA, MB, N, NA, NARGS, NB, NC, NS, IS
2526 LOGICAL NULL, RESET, SAME, TRANA, TRANB
2527 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB, UPLO, UPLOS
2528 CHARACTER*3 ICH
2529 CHARACTER*2 ISHAPE
2530
2531 LOGICAL ISAME( 13 )
2532
2533 LOGICAL LDE, LDERES
2535
2537
2538 INTRINSIC max
2539
2540 INTEGER INFOT, NOUTC
2541 LOGICAL LERR, OK
2542
2543 COMMON /infoc/infot, noutc, ok, lerr
2544
2545 DATA ich/'NTC'/
2546 DATA ishape/'UL'/
2547
2548
2549 nargs = 13
2550 nc = 0
2551 reset = .true.
2552 errmax = zero
2553
2554 DO 100 in = 1, nidim
2555 n = idim( in )
2556
2557 ldc = n
2558 IF( ldc.LT.nmax )
2559 $ ldc = ldc + 1
2560
2561 IF( ldc.GT.nmax )
2562 $ GO TO 100
2563 lcc = ldc*n
2564 null = n.LE.0
2565
2566 DO 90 ik = 1, nidim
2567 k = idim( ik )
2568
2569 DO 80 ica = 1, 3
2570 transa = ich( ica: ica )
2571 trana = transa.EQ.'T'.OR.transa.EQ.'C'
2572
2573 IF( trana )THEN
2574 ma = k
2575 na = n
2576 ELSE
2577 ma = n
2578 na = k
2579 END IF
2580
2581 lda = ma
2582 IF( lda.LT.nmax )
2583 $ lda = lda + 1
2584
2585 IF( lda.GT.nmax )
2586 $ GO TO 80
2587 laa = lda*na
2588
2589
2590
2591 CALL dmake(
'GE',
' ',
' ', ma, na, a, nmax, aa, lda,
2592 $ reset, zero )
2593
2594 DO 70 icb = 1, 3
2595 transb = ich( icb: icb )
2596 tranb = transb.EQ.'T'.OR.transb.EQ.'C'
2597
2598 IF( tranb )THEN
2599 mb = n
2600 nb = k
2601 ELSE
2602 mb = k
2603 nb = n
2604 END IF
2605
2606 ldb = mb
2607 IF( ldb.LT.nmax )
2608 $ ldb = ldb + 1
2609
2610 IF( ldb.GT.nmax )
2611 $ GO TO 70
2612 lbb = ldb*nb
2613
2614
2615
2616 CALL dmake(
'GE',
' ',
' ', mb, nb, b, nmax, bb,
2617 $ ldb, reset, zero )
2618
2619 DO 60 ia = 1, nalf
2620 alpha = alf( ia )
2621
2622 DO 50 ib = 1, nbet
2623 beta = bet( ib )
2624
2625 DO 45 is = 1, 2
2626 uplo = ishape( is: is )
2627
2628
2629
2630
2631 CALL dmake(
'GE', uplo,
' ', n, n, c,
2632 $ nmax, cc, ldc, reset, zero )
2633
2634 nc = nc + 1
2635
2636
2637
2638
2639 uplos = uplo
2640 tranas = transa
2641 tranbs = transb
2642 ns = n
2643 ks = k
2644 als = alpha
2645 DO 10 i = 1, laa
2646 as( i ) = aa( i )
2647 10 CONTINUE
2648 ldas = lda
2649 DO 20 i = 1, lbb
2650 bs( i ) = bb( i )
2651 20 CONTINUE
2652 ldbs = ldb
2653 bls = beta
2654 DO 30 i = 1, lcc
2655 cs( i ) = cc( i )
2656 30 CONTINUE
2657 ldcs = ldc
2658
2659
2660
2661 IF( trace )
2662 $
CALL dprcn8(ntra, nc, sname, iorder, uplo,
2663 $ transa, transb, n, k, alpha, lda,
2664 $ ldb, beta, ldc)
2665 IF( rewi )
2666 $ rewind ntra
2667 CALL cdgemmtr( iorder, uplo, transa, transb,
2668 $ n, k, alpha, aa, lda, bb, ldb,
2669 $ beta, cc, ldc )
2670
2671
2672
2673 IF( .NOT.ok )THEN
2674 WRITE( nout, fmt = 9994 )
2675 fatal = .true.
2676 GO TO 120
2677 END IF
2678
2679
2680
2681 isame( 1 ) = uplo.EQ.uplos
2682 isame( 2 ) = transa.EQ.tranas
2683 isame( 3 ) = transb.EQ.tranbs
2684 isame( 4 ) = ns.EQ.n
2685 isame( 5 ) = ks.EQ.k
2686 isame( 6 ) = als.EQ.alpha
2687 isame( 7 ) =
lde( as, aa, laa )
2688 isame( 8 ) = ldas.EQ.lda
2689 isame( 9 ) =
lde( bs, bb, lbb )
2690 isame( 10 ) = ldbs.EQ.ldb
2691 isame( 11 ) = bls.EQ.beta
2692 IF( null )THEN
2693 isame( 12 ) =
lde( cs, cc, lcc )
2694 ELSE
2695 isame( 12 ) =
lderes(
'GE',
' ', n, n,
2696 $ cs, cc, ldc )
2697 END IF
2698 isame( 13 ) = ldcs.EQ.ldc
2699
2700
2701
2702
2703 same = .true.
2704 DO 40 i = 1, nargs
2705 same = same.AND.isame( i )
2706 IF( .NOT.isame( i ) )
2707 $ WRITE( nout, fmt = 9998 )i
2708 40 CONTINUE
2709 IF( .NOT.same )THEN
2710 fatal = .true.
2711 GO TO 120
2712 END IF
2713
2714 IF( .NOT.null )THEN
2715
2716
2717
2718 CALL dmmtch( uplo, transa, transb,
2719 $ n, k,
2720 $ alpha, a, nmax, b, nmax, beta,
2721 $ c, nmax, ct, g, cc, ldc, eps,
2722 $ err, fatal, nout, .true. )
2723 errmax = max( errmax, err )
2724
2725
2726 IF( fatal )
2727 $ GO TO 120
2728 END IF
2729
2730 45 CONTINUE
2731
2732 50 CONTINUE
2733
2734 60 CONTINUE
2735
2736 70 CONTINUE
2737
2738 80 CONTINUE
2739
2740 90 CONTINUE
2741
2742 100 CONTINUE
2743
2744
2745
2746
2747 IF( errmax.LT.thresh )THEN
2748 IF ( iorder.EQ.0) WRITE( nout, fmt = 10000 )sname, nc
2749 IF ( iorder.EQ.1) WRITE( nout, fmt = 10001 )sname, nc
2750 ELSE
2751 IF ( iorder.EQ.0) WRITE( nout, fmt = 10002 )sname, nc, errmax
2752 IF ( iorder.EQ.1) WRITE( nout, fmt = 10003 )sname, nc, errmax
2753 END IF
2754 GO TO 130
2755
2756 120 CONTINUE
2757 WRITE( nout, fmt = 9996 )sname
2758 CALL dprcn8(nout, nc, sname, iorder, uplo, transa, transb,
2759 $ n, k, alpha, lda, ldb, beta, ldc)
2760
2761 130 CONTINUE
2762 RETURN
2763
276410003 FORMAT( ' ', a13,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
2765 $ 'TESTS (', i6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
2766 $ 'RATIO ', f8.2, ' - SUSPECT *******' )
276710002 FORMAT( ' ', a13,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
2768 $ 'TESTS (', i6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
2769 $ 'RATIO ', f8.2, ' - SUSPECT *******' )
277010001 FORMAT( ' ', a13,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
2771 $ ' (', i6, ' CALL', 'S)' )
277210000 FORMAT( ' ', a13,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
2773 $ ' (', i6, ' CALL', 'S)' )
2774 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', i2, ' WAS CH',
2775 $ 'ANGED INCORRECTLY *******' )
2776 9997 FORMAT( ' ', a13, ' COMPLETED THE COMPUTATIONAL TESTS (', i6, ' C'
2777 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', f8.2,
2778 $ ' - SUSPECT *******' )
2779 9996 FORMAT( ' ******* ', a13, ' FAILED ON CALL NUMBER:' )
2780 9995 FORMAT( 1x, i6, ': ', a13, '(''',a1, ''',''',a1, ''',''', a1,''','
2781 $ 2( i3, ',' ), f4.1, ', A,', i3, ', B,', i3, ',', f4.1, ', ',
2782 $ 'C,', i3, ').' )
2783 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
2784 $ '******' )
2785
2786
2787
subroutine dprcn8(nout, nc, sname, iorder, uplo, transa, transb, n, k, alpha, lda, ldb, beta, ldc)
logical function lde(ri, rj, lr)
logical function lderes(type, uplo, m, n, aa, as, lda)
subroutine dmake(type, uplo, diag, m, n, a, nmax, aa, lda, kl, ku, reset, transl)
subroutine dmmtch(uplo, transa, transb, n, kk, alpha, a, lda, b, ldb, beta, c, ldc, ct, g, cc, ldcc, eps, err, fatal, nout, mv)