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)