1313
 1314
 1315
 1316
 1317
 1318
 1319
 1320      CHARACTER*7        SUBNAM
 1321      INTEGER            K, M, N
 1322
 1323
 1324
 1325
 1326
 1327
 1328
 1329
 1330
 1331
 1332
 1333
 1334
 1335
 1336
 1337
 1338
 1339
 1340
 1341
 1342
 1343
 1344
 1345
 1346
 1347
 1348
 1349
 1350
 1351
 1352
 1353
 1354
 1355
 1356
 1357
 1358
 1359
 1360      DOUBLE PRECISION   ONE, SIX, TWO, ZERO
 1361      parameter( one = 1.0d+0, six = 6.0d+0, two = 2.0d+0,
 1362     $                   zero = 0.0d+0 )
 1363
 1364
 1365      CHARACTER*1        C1
 1366      CHARACTER*2        C2
 1367      CHARACTER*3        C3
 1368      DOUBLE PRECISION   ADDS, EK, EM, EN, MULTS
 1369
 1370
 1371      LOGICAL            LSAME, LSAMEN
 1373
 1374
 1375      INTRINSIC          dble
 1376
 1377
 1378
 1379
 1380
 1381      IF( m.LE.0 .OR. .NOT.( 
lsamen( 2, subnam, 
'PS' ) .OR.
 
 1382     $    
lsamen( 2, subnam, 
'PD' ) .OR. 
lsamen( 2, subnam, 
'PC' )
 
 1383     $   .OR. 
lsamen( 2, subnam, 
'PZ' ) ) )
 
 1384     $     THEN
 1386         RETURN
 1387      END IF
 1388
 1389      c1 = subnam( 2: 2 )
 1390      c2 = subnam( 3: 4 )
 1391      c3 = subnam( 5: 7 )
 1392      mults = zero
 1393      adds  = zero
 1394      em = dble( m )
 1395      en = dble( n )
 1396      ek = dble( k )
 1397
 1398
 1399
 1400
 1401
 1402
 1403      IF( 
lsamen( 3, c3, 
'MM ' ) ) 
THEN 
 1404
 1405         IF( 
lsamen( 2, c2, 
'GE' ) ) 
THEN 
 1406
 1407            mults = em * ek * en
 1408            adds  = em * ek * en
 1409
 1410         ELSE IF( 
lsamen( 2, c2, 
'SY' ) .OR.
 
 1411     $            
lsamen( 2, c2, 
'HE' ) ) 
THEN 
 1412
 1413
 1414
 1415            IF( k.LE.0 ) THEN
 1416               mults = em * em * en
 1417               adds  = em * em * en
 1418            ELSE
 1419               mults = em * en * en
 1420               adds  = em * en * en
 1421            END IF
 1422
 1423         ELSE IF( 
lsamen( 2, c2, 
'TR' ) ) 
THEN 
 1424
 1425
 1426
 1427            IF( k.LE.0 ) THEN
 1428               mults = en * em * ( em + one ) / two
 1429               adds  = en * em * ( em - one ) / two
 1430            ELSE
 1431               mults = em * en * ( en + one ) / two
 1432               adds  = em * en * ( en - one ) / two
 1433            END IF
 1434
 1435         END IF
 1436
 1437
 1438
 1439
 1440
 1441      ELSE IF( 
lsamen( 3, c3, 
'RK ' ) ) 
THEN 
 1442
 1443         IF( 
lsamen( 2, c2, 
'SY' ) .OR.
 
 1444     $       
lsamen( 2, c2, 
'HE' ) ) 
THEN 
 1445
 1446            mults = ek * em *( em + one ) / two
 1447            adds  = ek * em *( em + one ) / two
 1448         END IF
 1449
 1450
 1451
 1452
 1453
 1454      ELSE IF( 
lsamen( 3, c3, 
'R2K' ) ) 
THEN 
 1455
 1456         IF( 
lsamen( 2, c2, 
'SY' ) .OR.
 
 1457     $       
lsamen( 3, c2, 
'HE' ) ) 
THEN 
 1458
 1459            mults = ek * em * em
 1460            adds  = ek * em * em + em
 1461         END IF
 1462
 1463
 1464
 1465
 1466
 1467      ELSE IF( 
lsamen( 4, subnam( 3:6 ), 
'TRSM' ) ) 
THEN 
 1468
 1469         IF( k.LE.0 ) THEN
 1470            mults = en * em * ( em + one ) / two
 1471            adds  = en * em * ( em - one ) / two
 1472         ELSE
 1473            mults = em * en * ( en + one ) / two
 1474            adds  = em * en * ( en - one ) / two
 1475         END IF
 1476
 1477
 1478
 1479
 1480
 1481      ELSE IF( 
lsamen( 3, c3, 
'ADD' ) ) 
THEN 
 1482
 1483         IF( 
lsamen( 2, c2, 
'GE' ) ) 
THEN 
 1484
 1485            mults = 2 * em * en
 1486            adds  = em * en
 1487
 1488         ELSE IF( 
lsamen( 2, c2, 
'TR' ) ) 
THEN 
 1489
 1490
 1491
 1492            IF( k.LE.0 ) THEN
 1493               IF( m.LE.n ) THEN
 1494                  mults = em * ( two * en - em + one )
 1495                  adds  = em * ( em + one ) / two + em * ( en - em )
 1496               ELSE
 1497                  mults = en * ( en + one )
 1498                  adds  = en * ( en + one ) / two
 1499               END IF
 1500            ELSE
 1501               IF( m.GE.n ) THEN
 1502                  mults = en * ( two * em - en + one )
 1503                  adds  = en * ( en + one ) / two + en * ( em - en )
 1504               ELSE
 1505                  mults = em * ( em + one )
 1506                  adds  = em * ( em + one ) / two
 1507               END IF
 1508            END IF
 1509
 1510         END IF
 1511
 1512      END IF
 1513
 1514
 1515
 1516
 1517
 1518
 1519
 1520
 1521
 1522      IF( 
lsame( c1, 
'S' ) .OR. 
lsame( c1, 
'D' ) ) 
THEN 
 1523
 1525
 1526      ELSE
 1527
 1528         pdopbl3 = six * mults + two * adds
 
 1529
 1530      END IF
 1531
 1532      RETURN
 1533
 1534
 1535
double precision function pdopbl3(subnam, m, n, k)
 
logical function lsamen(n, ca, cb)