1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448 REAL ZERO
1449 parameter( zero = 0.0 )
1450
1451 REAL EPS, THRESH
1452 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
1453 LOGICAL FATAL, REWI, TRACE
1454 CHARACTER*13 SNAME
1455
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
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
1472 LOGICAL ISAME( 13 )
1473
1474 LOGICAL LSE, LSERES
1476
1478
1479 INTRINSIC max
1480
1481 INTEGER INFOT, NOUTC
1482 LOGICAL OK
1483
1484 COMMON /infoc/infot, noutc, ok
1485
1486 DATA icht/'NTC'/, ichu/'UL'/
1487
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
1497 ldc = n
1498 IF( ldc.LT.nmax )
1499 $ ldc = ldc + 1
1500
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
1520 lda = ma
1521 IF( lda.LT.nmax )
1522 $ lda = lda + 1
1523
1524 IF( lda.GT.nmax )
1525 $ GO TO 80
1526 laa = lda*na
1527
1528
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
1544
1545 CALL smake(
'SY', uplo,
' ', n, n, c, nmax, cc,
1546 $ ldc, reset, zero )
1547
1548 nc = nc + 1
1549
1550
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
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
1578
1579 IF( .NOT.ok )THEN
1580 WRITE( nout, fmt = 9993 )
1581 fatal = .true.
1582 GO TO 120
1583 END IF
1584
1585
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
1604
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
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
1652
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
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
1713
subroutine sprcn4(nout, nc, sname, iorder, uplo, transa, n, k, alpha, lda, beta, ldc)
logical function lseres(type, uplo, m, n, aa, as, lda)
subroutine smake(type, uplo, diag, m, n, a, nmax, aa, lda, kl, ku, reset, transl)
logical function lse(ri, rj, lr)
subroutine smmch(transa, transb, m, n, kk, alpha, a, lda, b, ldb, beta, c, ldc, ct, g, cc, ldcc, eps, err, fatal, nout, mv)