1286
 1287
 1288
 1289
 1290
 1291
 1292
 1293
 1294
 1295
 1296
 1297
 1298      COMPLEX            ZERO
 1299      parameter( zero = ( 0.0, 0.0 ) )
 1300      REAL               RONE, RZERO
 1301      parameter( rone = 1.0, rzero = 0.0 )
 1302
 1303      REAL               EPS, THRESH
 1304      INTEGER            NALF, NBET, NIDIM, NMAX, NOUT, NTRA
 1305      LOGICAL            FATAL, REWI, TRACE
 1306      CHARACTER*7        SNAME
 1307
 1308      COMPLEX            A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
 1309     $                   AS( NMAX*NMAX ), B( NMAX, NMAX ),
 1310     $                   BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
 1311     $                   C( NMAX, NMAX ), CC( NMAX*NMAX ),
 1312     $                   CS( NMAX*NMAX ), CT( NMAX )
 1313      REAL               G( NMAX )
 1314      INTEGER            IDIM( NIDIM )
 1315
 1316      COMPLEX            ALPHA, ALS, BETA, BETS
 1317      REAL               ERR, ERRMAX, RALPHA, RALS, RBETA, RBETS
 1318      INTEGER            I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS,
 1319     $                   LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA,
 1320     $                   NARGS, NC, NS
 1321      LOGICAL            CONJ, NULL, RESET, SAME, TRAN, UPPER
 1322      CHARACTER*1        TRANS, TRANSS, TRANST, UPLO, UPLOS
 1323      CHARACTER*2        ICHT, ICHU
 1324
 1325      LOGICAL            ISAME( 13 )
 1326
 1327      LOGICAL            LCE, LCERES
 1329
 1331
 1332      INTRINSIC          cmplx, max, real
 1333
 1334      INTEGER            INFOT, NOUTC
 1335      LOGICAL            LERR, OK
 1336
 1337      COMMON             /infoc/infot, noutc, ok, lerr
 1338
 1339      DATA               icht/'NC'/, ichu/'UL'/
 1340
 1341      conj = sname( 2: 3 ).EQ.'HE'
 1342
 1343      nargs = 10
 1344      nc = 0
 1345      reset = .true.
 1346      errmax = rzero
 1347
 1348      DO 100 in = 1, nidim
 1349         n = idim( in )
 1350
 1351         ldc = n
 1352         IF( ldc.LT.nmax )
 1353     $      ldc = ldc + 1
 1354
 1355         IF( ldc.GT.nmax )
 1356     $      GO TO 100
 1357         lcc = ldc*n
 1358
 1359         DO 90 ik = 1, nidim
 1360            k = idim( ik )
 1361
 1362            DO 80 ict = 1, 2
 1363               trans = icht( ict: ict )
 1364               tran = trans.EQ.'C'
 1365               IF( tran.AND..NOT.conj )
 1366     $            trans = 'T'
 1367               IF( tran )THEN
 1368                  ma = k
 1369                  na = n
 1370               ELSE
 1371                  ma = n
 1372                  na = k
 1373               END IF
 1374
 1375               lda = ma
 1376               IF( lda.LT.nmax )
 1377     $            lda = lda + 1
 1378
 1379               IF( lda.GT.nmax )
 1380     $            GO TO 80
 1381               laa = lda*na
 1382
 1383
 1384
 1385               CALL cmake( 
'GE', 
' ', 
' ', ma, na, a, nmax, aa, lda,
 
 1386     $                     reset, zero )
 1387
 1388               DO 70 icu = 1, 2
 1389                  uplo = ichu( icu: icu )
 1390                  upper = uplo.EQ.'U'
 1391
 1392                  DO 60 ia = 1, nalf
 1393                     alpha = alf( ia )
 1394                     IF( conj )THEN
 1395                        ralpha = real( alpha )
 1396                        alpha = cmplx( ralpha, rzero )
 1397                     END IF
 1398
 1399                     DO 50 ib = 1, nbet
 1400                        beta = bet( ib )
 1401                        IF( conj )THEN
 1402                           rbeta = real( beta )
 1403                           beta = cmplx( rbeta, rzero )
 1404                        END IF
 1405                        null = n.LE.0
 1406                        IF( conj )
 1407     $                     null = null.OR.( ( k.LE.0.OR.ralpha.EQ.
 1408     $                            rzero ).AND.rbeta.EQ.rone )
 1409
 1410
 1411
 1412                        CALL cmake( sname( 2: 3 ), uplo, 
' ', n, n, c,
 
 1413     $                              nmax, cc, ldc, reset, zero )
 1414
 1415                        nc = nc + 1
 1416
 1417
 1418
 1419                        uplos = uplo
 1420                        transs = trans
 1421                        ns = n
 1422                        ks = k
 1423                        IF( conj )THEN
 1424                           rals = ralpha
 1425                        ELSE
 1426                           als = alpha
 1427                        END IF
 1428                        DO 10 i = 1, laa
 1429                           as( i ) = aa( i )
 1430   10                   CONTINUE
 1431                        ldas = lda
 1432                        IF( conj )THEN
 1433                           rbets = rbeta
 1434                        ELSE
 1435                           bets = beta
 1436                        END IF
 1437                        DO 20 i = 1, lcc
 1438                           cs( i ) = cc( i )
 1439   20                   CONTINUE
 1440                        ldcs = ldc
 1441
 1442
 1443
 1444                        IF( conj )THEN
 1445                           IF( trace )
 1446     $                        WRITE( ntra, fmt = 9994 )nc, sname, uplo,
 1447     $                        trans, n, k, ralpha, lda, rbeta, ldc
 1448                           IF( rewi )
 1449     $                        rewind ntra
 1450                           CALL cherk( uplo, trans, n, k, ralpha, aa,
 
 1451     $                                 lda, rbeta, cc, ldc )
 1452                        ELSE
 1453                           IF( trace )
 1454     $                        WRITE( ntra, fmt = 9993 )nc, sname, uplo,
 1455     $                        trans, n, k, alpha, lda, beta, ldc
 1456                           IF( rewi )
 1457     $                        rewind ntra
 1458                           CALL csyrk( uplo, trans, n, k, alpha, aa,
 
 1459     $                                 lda, beta, cc, ldc )
 1460                        END IF
 1461
 1462
 1463
 1464                        IF( .NOT.ok )THEN
 1465                           WRITE( nout, fmt = 9992 )
 1466                           fatal = .true.
 1467                           GO TO 120
 1468                        END IF
 1469
 1470
 1471
 1472                        isame( 1 ) = uplos.EQ.uplo
 1473                        isame( 2 ) = transs.EQ.trans
 1474                        isame( 3 ) = ns.EQ.n
 1475                        isame( 4 ) = ks.EQ.k
 1476                        IF( conj )THEN
 1477                           isame( 5 ) = rals.EQ.ralpha
 1478                        ELSE
 1479                           isame( 5 ) = als.EQ.alpha
 1480                        END IF
 1481                        isame( 6 ) = 
lce( as, aa, laa )
 
 1482                        isame( 7 ) = ldas.EQ.lda
 1483                        IF( conj )THEN
 1484                           isame( 8 ) = rbets.EQ.rbeta
 1485                        ELSE
 1486                           isame( 8 ) = bets.EQ.beta
 1487                        END IF
 1488                        IF( null )THEN
 1489                           isame( 9 ) = 
lce( cs, cc, lcc )
 
 1490                        ELSE
 1491                           isame( 9 ) = 
lceres( sname( 2: 3 ), uplo, n,
 
 1492     $                                  n, cs, cc, ldc )
 1493                        END IF
 1494                        isame( 10 ) = ldcs.EQ.ldc
 1495
 1496
 1497
 1498
 1499                        same = .true.
 1500                        DO 30 i = 1, nargs
 1501                           same = same.AND.isame( i )
 1502                           IF( .NOT.isame( i ) )
 1503     $                        WRITE( nout, fmt = 9998 )i
 1504   30                   CONTINUE
 1505                        IF( .NOT.same )THEN
 1506                           fatal = .true.
 1507                           GO TO 120
 1508                        END IF
 1509
 1510                        IF( .NOT.null )THEN
 1511
 1512
 1513
 1514                           IF( conj )THEN
 1515                              transt = 'C'
 1516                           ELSE
 1517                              transt = 'T'
 1518                           END IF
 1519                           jc = 1
 1520                           DO 40 j = 1, n
 1521                              IF( upper )THEN
 1522                                 jj = 1
 1523                                 lj = j
 1524                              ELSE
 1525                                 jj = j
 1526                                 lj = n - j + 1
 1527                              END IF
 1528                              IF( tran )THEN
 1529                                 CALL cmmch( transt, 
'N', lj, 1, k,
 
 1530     $                                       alpha, a( 1, jj ), nmax,
 1531     $                                       a( 1, j ), nmax, beta,
 1532     $                                       c( jj, j ), nmax, ct, g,
 1533     $                                       cc( jc ), ldc, eps, err,
 1534     $                                       fatal, nout, .true. )
 1535                              ELSE
 1536                                 CALL cmmch( 
'N', transt, lj, 1, k,
 
 1537     $                                       alpha, a( jj, 1 ), nmax,
 1538     $                                       a( j, 1 ), nmax, beta,
 1539     $                                       c( jj, j ), nmax, ct, g,
 1540     $                                       cc( jc ), ldc, eps, err,
 1541     $                                       fatal, nout, .true. )
 1542                              END IF
 1543                              IF( upper )THEN
 1544                                 jc = jc + ldc
 1545                              ELSE
 1546                                 jc = jc + ldc + 1
 1547                              END IF
 1548                              errmax = max( errmax, err )
 1549
 1550
 1551                              IF( fatal )
 1552     $                           GO TO 110
 1553   40                      CONTINUE
 1554                        END IF
 1555
 1556   50                CONTINUE
 1557
 1558   60             CONTINUE
 1559
 1560   70          CONTINUE
 1561
 1562   80       CONTINUE
 1563
 1564   90    CONTINUE
 1565
 1566  100 CONTINUE
 1567
 1568
 1569
 1570      IF( errmax.LT.thresh )THEN
 1571         WRITE( nout, fmt = 9999 )sname, nc
 1572      ELSE
 1573         WRITE( nout, fmt = 9997 )sname, nc, errmax
 1574      END IF
 1575      GO TO 130
 1576
 1577  110 CONTINUE
 1578      IF( n.GT.1 )
 1579     $   WRITE( nout, fmt = 9995 )j
 1580
 1581  120 CONTINUE
 1582      WRITE( nout, fmt = 9996 )sname
 1583      IF( conj )THEN
 1584         WRITE( nout, fmt = 9994 )nc, sname, uplo, trans, n, k, ralpha,
 1585     $      lda, rbeta, ldc
 1586      ELSE
 1587         WRITE( nout, fmt = 9993 )nc, sname, uplo, trans, n, k, alpha,
 1588     $      lda, beta, ldc
 1589      END IF
 1590
 1591  130 CONTINUE
 1592      RETURN
 1593
 1594 9999 FORMAT( ' ', a6, ' PASSED THE COMPUTATIONAL TESTS (', i6, ' CALL',
 1595     $      'S)' )
 1596 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', i2, ' WAS CH',
 1597     $      'ANGED INCORRECTLY *******' )
 1598 9997 FORMAT( ' ', a6, ' COMPLETED THE COMPUTATIONAL TESTS (', i6, ' C',
 1599     $      'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', f8.2,
 1600     $      ' - SUSPECT *******' )
 1601 9996 FORMAT( ' ******* ', a6, ' FAILED ON CALL NUMBER:' )
 1602 9995 FORMAT( '      THESE ARE THE RESULTS FOR COLUMN ', i3 )
 1603 9994 FORMAT( 1x, i6, ': ', a6, '(', 2( '''', a1, ''',' ), 2( i3, ',' ),
 1604     $      f4.1, ', A,', i3, ',', f4.1, ', C,', i3, ')               ',
 1605     $      '          .' )
 1606 9993 FORMAT( 1x, i6, ': ', a6, '(', 2( '''', a1, ''',' ), 2( i3, ',' ),
 1607     $      '(', f4.1, ',', f4.1, ') , A,', i3, ',(', f4.1, ',', f4.1,
 1608     $      '), C,', i3, ')          .' )
 1609 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
 1610     $      '******' )
 1611
 1612
 1613
subroutine cmake(type, uplo, diag, m, n, a, nmax, aa, lda, kl, ku, reset, transl)
logical function lceres(type, uplo, m, n, aa, as, lda)
logical function lce(ri, rj, lr)
subroutine cmmch(transa, transb, m, n, kk, alpha, a, lda, b, ldb, beta, c, ldc, ct, g, cc, ldcc, eps, err, fatal, nout, mv)
subroutine csyrk(uplo, trans, n, k, alpha, a, lda, beta, c, ldc)
CSYRK
subroutine cherk(uplo, trans, n, k, alpha, a, lda, beta, c, ldc)
CHERK