1429
 1430
 1431
 1432
 1433
 1434
 1435
 1436
 1437
 1438
 1439
 1440
 1441      DOUBLE PRECISION   ZERO
 1442      parameter( zero = 0.0d0 )
 1443
 1444      DOUBLE PRECISION   EPS, THRESH
 1445      INTEGER            NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
 1446      LOGICAL            FATAL, REWI, TRACE
 1447      CHARACTER*13       SNAME
 1448
 1449      DOUBLE PRECISION   A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
 1450     $                   AS( NMAX*NMAX ), B( NMAX, NMAX ),
 1451     $                   BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
 1452     $                   C( NMAX, NMAX ), CC( NMAX*NMAX ),
 1453     $                   CS( NMAX*NMAX ), CT( NMAX ), G( NMAX )
 1454      INTEGER            IDIM( NIDIM )
 1455
 1456      DOUBLE PRECISION   ALPHA, ALS, BETA, BETS, ERR, ERRMAX
 1457      INTEGER            I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS,
 1458     $                   LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA,
 1459     $                   NARGS, NC, NS
 1460      LOGICAL            NULL, RESET, SAME, TRAN, UPPER
 1461      CHARACTER*1        TRANS, TRANSS, UPLO, UPLOS
 1462      CHARACTER*2        ICHU
 1463      CHARACTER*3        ICHT
 1464
 1465      LOGICAL            ISAME( 13 )
 1466
 1467      LOGICAL            LDE, LDERES
 1469
 1471
 1472      INTRINSIC          max
 1473
 1474      INTEGER            INFOT, NOUTC
 1475      LOGICAL             OK
 1476
 1477      COMMON             /infoc/infot, noutc, ok
 1478
 1479      DATA               icht/'NTC'/, ichu/'UL'/
 1480
 1481
 1482      nargs = 10
 1483      nc = 0
 1484      reset = .true.
 1485      errmax = zero
 1486
 1487      DO 100 in = 1, nidim
 1488         n = idim( in )
 1489
 1490         ldc = n
 1491         IF( ldc.LT.nmax )
 1492     $      ldc = ldc + 1
 1493
 1494         IF( ldc.GT.nmax )
 1495     $      GO TO 100
 1496         lcc = ldc*n
 1497         null = n.LE.0
 1498
 1499         DO 90 ik = 1, nidim
 1500            k = idim( ik )
 1501
 1502            DO 80 ict = 1, 3
 1503               trans = icht( ict: ict )
 1504               tran = trans.EQ.'T'.OR.trans.EQ.'C'
 1505               IF( tran )THEN
 1506                  ma = k
 1507                  na = n
 1508               ELSE
 1509                  ma = n
 1510                  na = k
 1511               END IF
 1512
 1513               lda = ma
 1514               IF( lda.LT.nmax )
 1515     $            lda = lda + 1
 1516
 1517               IF( lda.GT.nmax )
 1518     $            GO TO 80
 1519               laa = lda*na
 1520
 1521
 1522
 1523               CALL dmake( 
'GE', 
' ', 
' ', ma, na, a, nmax, aa, lda,
 
 1524     $                     reset, zero )
 1525
 1526               DO 70 icu = 1, 2
 1527                  uplo = ichu( icu: icu )
 1528                  upper = uplo.EQ.'U'
 1529
 1530                  DO 60 ia = 1, nalf
 1531                     alpha = alf( ia )
 1532
 1533                     DO 50 ib = 1, nbet
 1534                        beta = bet( ib )
 1535
 1536
 1537
 1538                        CALL dmake( 
'SY', uplo, 
' ', n, n, c, nmax, cc,
 
 1539     $                              ldc, reset, zero )
 1540
 1541                        nc = nc + 1
 1542
 1543
 1544
 1545                        uplos = uplo
 1546                        transs = trans
 1547                        ns = n
 1548                        ks = k
 1549                        als = alpha
 1550                        DO 10 i = 1, laa
 1551                           as( i ) = aa( i )
 1552   10                   CONTINUE
 1553                        ldas = lda
 1554                        bets = beta
 1555                        DO 20 i = 1, lcc
 1556                           cs( i ) = cc( i )
 1557   20                   CONTINUE
 1558                        ldcs = ldc
 1559
 1560
 1561
 1562                        IF( trace )
 1563     $                     
CALL dprcn4( ntra, nc, sname, iorder, uplo,
 
 1564     $                     trans, n, k, alpha, lda, beta, ldc)
 1565                        IF( rewi )
 1566     $                     rewind ntra
 1567                        CALL cdsyrk( iorder, uplo, trans, n, k, alpha,
 1568     $                              aa, lda, beta, cc, ldc )
 1569
 1570
 1571
 1572                        IF( .NOT.ok )THEN
 1573                           WRITE( nout, fmt = 9993 )
 1574                           fatal = .true.
 1575                           GO TO 120
 1576                        END IF
 1577
 1578
 1579
 1580                        isame( 1 ) = uplos.EQ.uplo
 1581                        isame( 2 ) = transs.EQ.trans
 1582                        isame( 3 ) = ns.EQ.n
 1583                        isame( 4 ) = ks.EQ.k
 1584                        isame( 5 ) = als.EQ.alpha
 1585                        isame( 6 ) = 
lde( as, aa, laa )
 
 1586                        isame( 7 ) = ldas.EQ.lda
 1587                        isame( 8 ) = bets.EQ.beta
 1588                        IF( null )THEN
 1589                           isame( 9 ) = 
lde( cs, cc, lcc )
 
 1590                        ELSE
 1591                           isame( 9 ) = 
lderes( 
'SY', uplo, n, n, cs,
 
 1592     $                                  cc, ldc )
 1593                        END IF
 1594                        isame( 10 ) = ldcs.EQ.ldc
 1595
 1596
 1597
 1598
 1599                        same = .true.
 1600                        DO 30 i = 1, nargs
 1601                           same = same.AND.isame( i )
 1602                           IF( .NOT.isame( i ) )
 1603     $                        WRITE( nout, fmt = 9998 )i
 1604   30                   CONTINUE
 1605                        IF( .NOT.same )THEN
 1606                           fatal = .true.
 1607                           GO TO 120
 1608                        END IF
 1609
 1610                        IF( .NOT.null )THEN
 1611
 1612
 1613
 1614                           jc = 1
 1615                           DO 40 j = 1, n
 1616                              IF( upper )THEN
 1617                                 jj = 1
 1618                                 lj = j
 1619                              ELSE
 1620                                 jj = j
 1621                                 lj = n - j + 1
 1622                              END IF
 1623                              IF( tran )THEN
 1624                                 CALL dmmch( 
'T', 
'N', lj, 1, k, alpha,
 
 1625     $                                       a( 1, jj ), nmax,
 1626     $                                       a( 1, j ), nmax, beta,
 1627     $                                       c( jj, j ), nmax, ct, g,
 1628     $                                       cc( jc ), ldc, eps, err,
 1629     $                                       fatal, nout, .true. )
 1630                              ELSE
 1631                                 CALL dmmch( 
'N', 
'T', lj, 1, k, alpha,
 
 1632     $                                       a( jj, 1 ), nmax,
 1633     $                                       a( j, 1 ), nmax, beta,
 1634     $                                       c( jj, j ), nmax, ct, g,
 1635     $                                       cc( jc ), ldc, eps, err,
 1636     $                                       fatal, nout, .true. )
 1637                              END IF
 1638                              IF( upper )THEN
 1639                                 jc = jc + ldc
 1640                              ELSE
 1641                                 jc = jc + ldc + 1
 1642                              END IF
 1643                              errmax = max( errmax, err )
 1644
 1645
 1646                              IF( fatal )
 1647     $                           GO TO 110
 1648   40                      CONTINUE
 1649                        END IF
 1650
 1651   50                CONTINUE
 1652
 1653   60             CONTINUE
 1654
 1655   70          CONTINUE
 1656
 1657   80       CONTINUE
 1658
 1659   90    CONTINUE
 1660
 1661  100 CONTINUE
 1662
 1663
 1664
 1665      IF( errmax.LT.thresh )THEN
 1666         IF ( iorder.EQ.0) WRITE( nout, fmt = 10000 )sname, nc
 1667         IF ( iorder.EQ.1) WRITE( nout, fmt = 10001 )sname, nc
 1668      ELSE
 1669         IF ( iorder.EQ.0) WRITE( nout, fmt = 10002 )sname, nc, errmax
 1670         IF ( iorder.EQ.1) WRITE( nout, fmt = 10003 )sname, nc, errmax
 1671      END IF
 1672      GO TO 130
 1673
 1674  110 CONTINUE
 1675      IF( n.GT.1 )
 1676     $   WRITE( nout, fmt = 9995 )j
 1677
 1678  120 CONTINUE
 1679      WRITE( nout, fmt = 9996 )sname
 1680      CALL dprcn4( nout, nc, sname, iorder, uplo, trans, n, k, alpha,
 
 1681     $   lda, beta, ldc)
 1682
 1683  130 CONTINUE
 1684      RETURN
 1685
 168610003 FORMAT( ' ', a13,' COMPLETED THE ROW-MAJOR    COMPUTATIONAL ',
 1687     $ 'TESTS (', i6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
 1688     $ 'RATIO ', f8.2, ' - SUSPECT *******' )
 168910002 FORMAT( ' ', a13,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
 1690     $ 'TESTS (', i6, ' CALLS)', /' ******* BUT WITH MAXIMUM TEST ',
 1691     $ 'RATIO ', f8.2, ' - SUSPECT *******' )
 169210001 FORMAT( ' ', a13,' PASSED THE ROW-MAJOR    COMPUTATIONAL TESTS',
 1693     $ ' (', i6, ' CALL', 'S)' )
 169410000 FORMAT( ' ', a13,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
 1695     $ ' (', i6, ' CALL', 'S)' )
 1696 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', i2, ' WAS CH',
 1697     $      'ANGED INCORRECTLY *******' )
 1698 9996 FORMAT( ' ******* ', a13,' FAILED ON CALL NUMBER:' )
 1699 9995 FORMAT( '      THESE ARE THE RESULTS FOR COLUMN ', i3 )
 1700 9994 FORMAT( 1x, i6, ': ', a13,'(', 2( '''', a1, ''',' ), 2( i3, ',' ),
 1701     $      f4.1, ', A,', i3, ',', f4.1, ', C,', i3, ')           .' )
 1702 9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
 1703     $      '******' )
 1704
 1705
 1706
subroutine dprcn4(nout, nc, sname, iorder, uplo, transa, n, k, alpha, lda, 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 dmmch(transa, transb, m, n, kk, alpha, a, lda, b, ldb, beta, c, ldc, ct, g, cc, ldcc, eps, err, fatal, nout, mv)