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

◆ schk4()

subroutine schk4 ( 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 1432 of file c_sblat3.f.

1436*
1437* Tests SSYRK.
1438*
1439* Auxiliary routine for test program for Level 3 Blas.
1440*
1441* -- Written on 8-February-1989.
1442* Jack Dongarra, Argonne National Laboratory.
1443* Iain Duff, AERE Harwell.
1444* Jeremy Du Croz, Numerical Algorithms Group Ltd.
1445* Sven Hammarling, Numerical Algorithms Group Ltd.
1446*
1447* .. Parameters ..
1448 REAL ZERO
1449 parameter( zero = 0.0 )
1450* .. Scalar Arguments ..
1451 REAL EPS, THRESH
1452 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
1453 LOGICAL FATAL, REWI, TRACE
1454 CHARACTER*13 SNAME
1455* .. Array Arguments ..
1456 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1457 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
1458 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
1459 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
1460 $ CS( NMAX*NMAX ), CT( NMAX ), G( NMAX )
1461 INTEGER IDIM( NIDIM )
1462* .. Local Scalars ..
1463 REAL ALPHA, ALS, BETA, BETS, ERR, ERRMAX
1464 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS,
1465 $ LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA,
1466 $ NARGS, NC, NS
1467 LOGICAL NULL, RESET, SAME, TRAN, UPPER
1468 CHARACTER*1 TRANS, TRANSS, UPLO, UPLOS
1469 CHARACTER*2 ICHU
1470 CHARACTER*3 ICHT
1471* .. Local Arrays ..
1472 LOGICAL ISAME( 13 )
1473* .. External Functions ..
1474 LOGICAL LSE, LSERES
1475 EXTERNAL lse, lseres
1476* .. External Subroutines ..
1477 EXTERNAL smake, smmch, cssyrk
1478* .. Intrinsic Functions ..
1479 INTRINSIC max
1480* .. Scalars in Common ..
1481 INTEGER INFOT, NOUTC
1482 LOGICAL OK
1483* .. Common blocks ..
1484 COMMON /infoc/infot, noutc, ok
1485* .. Data statements ..
1486 DATA icht/'NTC'/, ichu/'UL'/
1487* .. Executable Statements ..
1488*
1489 nargs = 10
1490 nc = 0
1491 reset = .true.
1492 errmax = zero
1493*
1494 DO 100 in = 1, nidim
1495 n = idim( in )
1496* Set LDC to 1 more than minimum value if room.
1497 ldc = n
1498 IF( ldc.LT.nmax )
1499 $ ldc = ldc + 1
1500* Skip tests if not enough room.
1501 IF( ldc.GT.nmax )
1502 $ GO TO 100
1503 lcc = ldc*n
1504 null = n.LE.0
1505*
1506 DO 90 ik = 1, nidim
1507 k = idim( ik )
1508*
1509 DO 80 ict = 1, 3
1510 trans = icht( ict: ict )
1511 tran = trans.EQ.'T'.OR.trans.EQ.'C'
1512 IF( tran )THEN
1513 ma = k
1514 na = n
1515 ELSE
1516 ma = n
1517 na = k
1518 END IF
1519* Set LDA to 1 more than minimum value if room.
1520 lda = ma
1521 IF( lda.LT.nmax )
1522 $ lda = lda + 1
1523* Skip tests if not enough room.
1524 IF( lda.GT.nmax )
1525 $ GO TO 80
1526 laa = lda*na
1527*
1528* Generate the matrix A.
1529*
1530 CALL smake( 'GE', ' ', ' ', ma, na, a, nmax, aa, lda,
1531 $ reset, zero )
1532*
1533 DO 70 icu = 1, 2
1534 uplo = ichu( icu: icu )
1535 upper = uplo.EQ.'U'
1536*
1537 DO 60 ia = 1, nalf
1538 alpha = alf( ia )
1539*
1540 DO 50 ib = 1, nbet
1541 beta = bet( ib )
1542*
1543* Generate the matrix C.
1544*
1545 CALL smake( 'SY', uplo, ' ', n, n, c, nmax, cc,
1546 $ ldc, reset, zero )
1547*
1548 nc = nc + 1
1549*
1550* Save every datum before calling the subroutine.
1551*
1552 uplos = uplo
1553 transs = trans
1554 ns = n
1555 ks = k
1556 als = alpha
1557 DO 10 i = 1, laa
1558 as( i ) = aa( i )
1559 10 CONTINUE
1560 ldas = lda
1561 bets = beta
1562 DO 20 i = 1, lcc
1563 cs( i ) = cc( i )
1564 20 CONTINUE
1565 ldcs = ldc
1566*
1567* Call the subroutine.
1568*
1569 IF( trace )
1570 $ CALL sprcn4( ntra, nc, sname, iorder, uplo,
1571 $ trans, n, k, alpha, lda, beta, ldc)
1572 IF( rewi )
1573 $ rewind ntra
1574 CALL cssyrk( iorder, uplo, trans, n, k, alpha,
1575 $ aa, lda, beta, cc, ldc )
1576*
1577* Check if error-exit was taken incorrectly.
1578*
1579 IF( .NOT.ok )THEN
1580 WRITE( nout, fmt = 9993 )
1581 fatal = .true.
1582 GO TO 120
1583 END IF
1584*
1585* See what data changed inside subroutines.
1586*
1587 isame( 1 ) = uplos.EQ.uplo
1588 isame( 2 ) = transs.EQ.trans
1589 isame( 3 ) = ns.EQ.n
1590 isame( 4 ) = ks.EQ.k
1591 isame( 5 ) = als.EQ.alpha
1592 isame( 6 ) = lse( as, aa, laa )
1593 isame( 7 ) = ldas.EQ.lda
1594 isame( 8 ) = bets.EQ.beta
1595 IF( null )THEN
1596 isame( 9 ) = lse( cs, cc, lcc )
1597 ELSE
1598 isame( 9 ) = lseres( 'SY', uplo, n, n, cs,
1599 $ cc, ldc )
1600 END IF
1601 isame( 10 ) = ldcs.EQ.ldc
1602*
1603* If data was incorrectly changed, report and
1604* return.
1605*
1606 same = .true.
1607 DO 30 i = 1, nargs
1608 same = same.AND.isame( i )
1609 IF( .NOT.isame( i ) )
1610 $ WRITE( nout, fmt = 9998 )i+1
1611 30 CONTINUE
1612 IF( .NOT.same )THEN
1613 fatal = .true.
1614 GO TO 120
1615 END IF
1616*
1617 IF( .NOT.null )THEN
1618*
1619* Check the result column by column.
1620*
1621 jc = 1
1622 DO 40 j = 1, n
1623 IF( upper )THEN
1624 jj = 1
1625 lj = j
1626 ELSE
1627 jj = j
1628 lj = n - j + 1
1629 END IF
1630 IF( tran )THEN
1631 CALL smmch( 'T', 'N', lj, 1, k, alpha,
1632 $ a( 1, jj ), nmax,
1633 $ a( 1, j ), nmax, beta,
1634 $ c( jj, j ), nmax, ct, g,
1635 $ cc( jc ), ldc, eps, err,
1636 $ fatal, nout, .true. )
1637 ELSE
1638 CALL smmch( 'N', 'T', lj, 1, k, alpha,
1639 $ a( jj, 1 ), nmax,
1640 $ a( j, 1 ), nmax, beta,
1641 $ c( jj, j ), nmax, ct, g,
1642 $ cc( jc ), ldc, eps, err,
1643 $ fatal, nout, .true. )
1644 END IF
1645 IF( upper )THEN
1646 jc = jc + ldc
1647 ELSE
1648 jc = jc + ldc + 1
1649 END IF
1650 errmax = max( errmax, err )
1651* If got really bad answer, report and
1652* return.
1653 IF( fatal )
1654 $ GO TO 110
1655 40 CONTINUE
1656 END IF
1657*
1658 50 CONTINUE
1659*
1660 60 CONTINUE
1661*
1662 70 CONTINUE
1663*
1664 80 CONTINUE
1665*
1666 90 CONTINUE
1667*
1668 100 CONTINUE
1669*
1670* Report result.
1671*
1672 IF( errmax.LT.thresh )THEN
1673 IF ( iorder.EQ.0) WRITE( nout, fmt = 10000 )sname, nc
1674 IF ( iorder.EQ.1) WRITE( nout, fmt = 10001 )sname, nc
1675 ELSE
1676 IF ( iorder.EQ.0) WRITE( nout, fmt = 10002 )sname, nc, errmax
1677 IF ( iorder.EQ.1) WRITE( nout, fmt = 10003 )sname, nc, errmax
1678 END IF
1679 GO TO 130
1680*
1681 110 CONTINUE
1682 IF( n.GT.1 )
1683 $ WRITE( nout, fmt = 9995 )j
1684*
1685 120 CONTINUE
1686 WRITE( nout, fmt = 9996 )sname
1687 CALL sprcn4( nout, nc, sname, iorder, uplo, trans, n, k, alpha,
1688 $ lda, beta, ldc)
1689*
1690 130 CONTINUE
1691 RETURN
1692*
169310003 FORMAT( ' ', a13,' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
1694 $ 'TESTS (', i6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
1695 $ 'RATIO ', f8.2, ' - SUSPECT *******' )
169610002 FORMAT( ' ', a13,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
1697 $ 'TESTS (', i6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
1698 $ 'RATIO ', f8.2, ' - SUSPECT *******' )
169910001 FORMAT( ' ', a13,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
1700 $ ' (', i6, ' CALL', 'S)' )
170110000 FORMAT( ' ', a13,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
1702 $ ' (', i6, ' CALL', 'S)' )
1703 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', i2, ' WAS CH',
1704 $ 'ANGED INCORRECTLY *******' )
1705 9996 FORMAT( ' ******* ', a13,' FAILED ON CALL NUMBER:' )
1706 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', i3 )
1707 9994 FORMAT( 1x, i6, ': ', a13,'(', 2( '''', a1, ''',' ), 2( i3, ',' ),
1708 $ f4.1, ', A,', i3, ',', f4.1, ', C,', i3, ') .' )
1709 9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1710 $ '******' )
1711*
1712* End of SCHK4.
1713*
subroutine sprcn4(nout, nc, sname, iorder, uplo, transa, n, k, alpha, lda, beta, ldc)
Definition c_sblat3.f:1718
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 smmch(transa, transb, m, n, kk, alpha, a, lda, b, ldb, beta, c, ldc, ct, g, cc, ldcc, eps, err, fatal, nout, mv)
Definition sblat3.f:2594
Here is the call graph for this function: