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