LAPACK 3.12.1
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches

◆ schk6()

subroutine schk6 ( character*13 sname,
real eps,
real thresh,
integer nout,
integer ntra,
logical trace,
logical rewi,
logical fatal,
integer nidim,
integer, dimension( nidim ) idim,
integer nalf,
real, dimension( nalf ) alf,
integer nbet,
real, dimension( nbet ) bet,
integer nmax,
real, dimension( nmax, nmax ) a,
real, dimension( nmax*nmax ) aa,
real, dimension( nmax*nmax ) as,
real, dimension( nmax, nmax ) b,
real, dimension( nmax*nmax ) bb,
real, dimension( nmax*nmax ) bs,
real, dimension( nmax, nmax ) c,
real, dimension( nmax*nmax ) cc,
real, dimension( nmax*nmax ) cs,
real, dimension( nmax ) ct,
real, dimension( nmax ) g,
integer iorder )

Definition at line 2501 of file c_sblat3.f.

2505*
2506* Tests SGEMMTR.
2507*
2508* Auxiliary routine for test program for Level 3 Blas.
2509*
2510* -- Written on 19-July-2023.
2511* Martin Koehler, MPI Magdeburg
2512*
2513* .. Parameters ..
2514 REAL ZERO
2515 parameter( zero = 0.0 )
2516* .. Scalar Arguments ..
2517 REAL EPS, THRESH
2518 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
2519 LOGICAL FATAL, REWI, TRACE
2520 CHARACTER*13 SNAME
2521* .. Array Arguments ..
2522 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
2523 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
2524 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
2525 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
2526 $ CS( NMAX*NMAX ), CT( NMAX ), G( NMAX )
2527 INTEGER IDIM( NIDIM )
2528* .. Local Scalars ..
2529 REAL ALPHA, ALS, BETA, BLS, ERR, ERRMAX
2530 INTEGER I, IA, IB, ICA, ICB, IK, IN, K, KS, LAA,
2531 $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS,
2532 $ MA, MB, N, NA, NARGS, NB, NC, NS, IS
2533 LOGICAL NULL, RESET, SAME, TRANA, TRANB
2534 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB, UPLO, UPLOS
2535 CHARACTER*3 ICH
2536 CHARACTER*2 ISHAPE
2537* .. Local Arrays ..
2538 LOGICAL ISAME( 13 )
2539* .. External Functions ..
2540 LOGICAL LSE, LSERES
2541 EXTERNAL lse, lseres
2542* .. External Subroutines ..
2543 EXTERNAL csgemmtr, smake, smmtch, sprcn8
2544* .. Intrinsic Functions ..
2545 INTRINSIC max
2546* .. Scalars in Common ..
2547 INTEGER INFOT, NOUTC
2548 LOGICAL LERR, OK
2549* .. Common blocks ..
2550 COMMON /infoc/infot, noutc, ok, lerr
2551* .. Data statements ..
2552 DATA ich/'NTC'/
2553 DATA ishape/'UL'/
2554* .. Executable Statements ..
2555*
2556 nargs = 13
2557 nc = 0
2558 reset = .true.
2559 errmax = zero
2560*
2561 DO 100 in = 1, nidim
2562 n = idim( in )
2563* Set LDC to 1 more than minimum value if room.
2564 ldc = n
2565 IF( ldc.LT.nmax )
2566 $ ldc = ldc + 1
2567* Skip tests if not enough room.
2568 IF( ldc.GT.nmax )
2569 $ GO TO 100
2570 lcc = ldc*n
2571 null = n.LE.0
2572*
2573 DO 90 ik = 1, nidim
2574 k = idim( ik )
2575*
2576 DO 80 ica = 1, 3
2577 transa = ich( ica: ica )
2578 trana = transa.EQ.'T'.OR.transa.EQ.'C'
2579*
2580 IF( trana )THEN
2581 ma = k
2582 na = n
2583 ELSE
2584 ma = n
2585 na = k
2586 END IF
2587* Set LDA to 1 more than minimum value if room.
2588 lda = ma
2589 IF( lda.LT.nmax )
2590 $ lda = lda + 1
2591* Skip tests if not enough room.
2592 IF( lda.GT.nmax )
2593 $ GO TO 80
2594 laa = lda*na
2595*
2596* Generate the matrix A.
2597*
2598 CALL smake( 'GE', ' ', ' ', ma, na, a, nmax, aa, lda,
2599 $ reset, zero )
2600*
2601 DO 70 icb = 1, 3
2602 transb = ich( icb: icb )
2603 tranb = transb.EQ.'T'.OR.transb.EQ.'C'
2604*
2605 IF( tranb )THEN
2606 mb = n
2607 nb = k
2608 ELSE
2609 mb = k
2610 nb = n
2611 END IF
2612* Set LDB to 1 more than minimum value if room.
2613 ldb = mb
2614 IF( ldb.LT.nmax )
2615 $ ldb = ldb + 1
2616* Skip tests if not enough room.
2617 IF( ldb.GT.nmax )
2618 $ GO TO 70
2619 lbb = ldb*nb
2620*
2621* Generate the matrix B.
2622*
2623 CALL smake( 'GE', ' ', ' ', mb, nb, b, nmax, bb,
2624 $ ldb, reset, zero )
2625*
2626 DO 60 ia = 1, nalf
2627 alpha = alf( ia )
2628*
2629 DO 50 ib = 1, nbet
2630 beta = bet( ib )
2631
2632 DO 45 is = 1, 2
2633 uplo = ishape( is: is )
2634
2635*
2636* Generate the matrix C.
2637*
2638 CALL smake( 'GE', uplo, ' ', n, n, c,
2639 $ nmax, cc, ldc, reset, zero )
2640*
2641 nc = nc + 1
2642*
2643* Save every datum before calling the
2644* subroutine.
2645*
2646 uplos = uplo
2647 tranas = transa
2648 tranbs = transb
2649 ns = n
2650 ks = k
2651 als = alpha
2652 DO 10 i = 1, laa
2653 as( i ) = aa( i )
2654 10 CONTINUE
2655 ldas = lda
2656 DO 20 i = 1, lbb
2657 bs( i ) = bb( i )
2658 20 CONTINUE
2659 ldbs = ldb
2660 bls = beta
2661 DO 30 i = 1, lcc
2662 cs( i ) = cc( i )
2663 30 CONTINUE
2664 ldcs = ldc
2665*
2666* Call the subroutine.
2667*
2668 IF( trace )
2669 $ CALL sprcn8(ntra, nc, sname, iorder, uplo,
2670 $ transa, transb, n, k, alpha, lda,
2671 $ ldb, beta, ldc)
2672 IF( rewi )
2673 $ rewind ntra
2674 CALL csgemmtr( iorder, uplo, transa, transb,
2675 $ n, k, alpha, aa, lda, bb, ldb,
2676 $ beta, cc, ldc )
2677*
2678* Check if error-exit was taken incorrectly.
2679*
2680 IF( .NOT.ok )THEN
2681 WRITE( nout, fmt = 9994 )
2682 fatal = .true.
2683 GO TO 120
2684 END IF
2685*
2686* See what data changed inside subroutines.
2687*
2688 isame( 1 ) = uplo.EQ.uplos
2689 isame( 2 ) = transa.EQ.tranas
2690 isame( 3 ) = transb.EQ.tranbs
2691 isame( 4 ) = ns.EQ.n
2692 isame( 5 ) = ks.EQ.k
2693 isame( 6 ) = als.EQ.alpha
2694 isame( 7 ) = lse( as, aa, laa )
2695 isame( 8 ) = ldas.EQ.lda
2696 isame( 9 ) = lse( bs, bb, lbb )
2697 isame( 10 ) = ldbs.EQ.ldb
2698 isame( 11 ) = bls.EQ.beta
2699 IF( null )THEN
2700 isame( 12 ) = lse( cs, cc, lcc )
2701 ELSE
2702 isame( 12 ) = lseres( 'GE', ' ', n, n,
2703 $ cs, cc, ldc )
2704 END IF
2705 isame( 13 ) = ldcs.EQ.ldc
2706*
2707* If data was incorrectly changed, report
2708* and return.
2709*
2710 same = .true.
2711 DO 40 i = 1, nargs
2712 same = same.AND.isame( i )
2713 IF( .NOT.isame( i ) )
2714 $ WRITE( nout, fmt = 9998 )i
2715 40 CONTINUE
2716 IF( .NOT.same )THEN
2717 fatal = .true.
2718 GO TO 120
2719 END IF
2720*
2721 IF( .NOT.null )THEN
2722*
2723* Check the result.
2724*
2725 CALL smmtch( uplo, transa, transb,
2726 $ n, k,
2727 $ alpha, a, nmax, b, nmax, beta,
2728 $ c, nmax, ct, g, cc, ldc, eps,
2729 $ err, fatal, nout, .true. )
2730 errmax = max( errmax, err )
2731* If got really bad answer, report and
2732* return.
2733 IF( fatal )
2734 $ GO TO 120
2735 END IF
2736*
2737 45 CONTINUE
2738*
2739 50 CONTINUE
2740*
2741 60 CONTINUE
2742*
2743 70 CONTINUE
2744*
2745 80 CONTINUE
2746*
2747 90 CONTINUE
2748*
2749 100 CONTINUE
2750*
2751*
2752* Report result.
2753*
2754 IF( errmax.LT.thresh )THEN
2755 IF ( iorder.EQ.0) WRITE( nout, fmt = 10000 )sname, nc
2756 IF ( iorder.EQ.1) WRITE( nout, fmt = 10001 )sname, nc
2757 ELSE
2758 IF ( iorder.EQ.0) WRITE( nout, fmt = 10002 )sname, nc, errmax
2759 IF ( iorder.EQ.1) WRITE( nout, fmt = 10003 )sname, nc, errmax
2760 END IF
2761 GO TO 130
2762*
2763 120 CONTINUE
2764 WRITE( nout, fmt = 9996 )sname
2765 CALL sprcn8(nout, nc, sname, iorder, uplo, transa, transb,
2766 $ n, k, alpha, lda, ldb, beta, ldc)
2767*
2768 130 CONTINUE
2769 RETURN
2770*
277110003 FORMAT( ' ', a13,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
2772 $ 'TESTS (', i6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
2773 $ 'RATIO ', f8.2, ' - SUSPECT *******' )
277410002 FORMAT( ' ', a13,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
2775 $ 'TESTS (', i6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
2776 $ 'RATIO ', f8.2, ' - SUSPECT *******' )
277710001 FORMAT( ' ', a13,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
2778 $ ' (', i6, ' CALL', 'S)' )
277910000 FORMAT( ' ', a13,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
2780 $ ' (', i6, ' CALL', 'S)' )
2781 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', i2, ' WAS CH',
2782 $ 'ANGED INCORRECTLY *******' )
2783 9997 FORMAT( ' ', a13, ' COMPLETED THE COMPUTATIONAL TESTS (', i6, ' C',
2784 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', f8.2,
2785 $ ' - SUSPECT *******' )
2786 9996 FORMAT( ' ******* ', a13, ' FAILED ON CALL NUMBER:' )
2787 9995 FORMAT( 1x, i6, ': ', a13, '(''',a1, ''',''',a1, ''',''', a1,''',',
2788 $ 2( i3, ',' ), f4.1, ', A,', i3, ', B,', i3, ',', f4.1, ', ',
2789 $ 'C,', i3, ').' )
2790 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
2791 $ '******' )
2792*
2793* End of SCHK6
2794*
subroutine sprcn8(nout, nc, sname, iorder, uplo, transa, transb, n, k, alpha, lda, ldb, beta, ldc)
Definition c_sblat3.f:2800
logical function lseres(type, uplo, m, n, aa, as, lda)
Definition sblat2.f:3000
subroutine smake(type, uplo, diag, m, n, a, nmax, aa, lda, kl, ku, reset, transl)
Definition sblat2.f:2678
logical function lse(ri, rj, lr)
Definition sblat2.f:2970
subroutine smmtch(uplo, transa, transb, n, kk, alpha, a, lda, b, ldb, beta, c, ldc, ct, g, cc, ldcc, eps, err, fatal, nout, mv)
Definition sblat3.f:3246
Here is the call graph for this function: