1 SUBROUTINE pddttrsv( UPLO, TRANS, N, NRHS, DL, D, DU, JA, DESCA,
2 $ B, IB, DESCB, AF, LAF, WORK, LWORK, INFO )
11 INTEGER IB, INFO, JA, LAF, LWORK, N, NRHS
14 INTEGER DESCA( * ), DESCB( * )
15 DOUBLE PRECISION AF( * ), B( * ), D( * ), DL( * ), DU( * ),
387 parameter( one = 1.0d+0 )
388 DOUBLE PRECISION ZERO
389 parameter( zero = 0.0d+0 )
391 parameter( int_one = 1 )
392 INTEGER DESCMULT, BIGNUM
393 parameter( descmult = 100, bignum = descmult*descmult )
394 INTEGER BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, ,
395 $ lld_, mb_, m_, nb_, n_, rsrc_
396 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
398 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
401 INTEGER CSRC, FIRST_PROC, , ICTXT_NEW, ICTXT_SAVE,
402 $ idum1, idum2, idum3, ja_new, level_dist, llda,
403 $ lldb, mycol, myrow, my_num_cols, nb, np, npcol,
404 $ nprow, np_save, odd_size, part_offset,
405 $ part_size, return_code, store_m_b, store_n_a,
406 $ temp, work_size_min, work_u
409 INTEGER DESCA_1XP( 7 ), DESCB_PX1( 7 ),
410 $ param_check( 16, 3 )
420 EXTERNAL lsame, numroc
423 INTRINSIC ichar,
min, mod
437 temp = desca( dtype_ )
438 IF( temp.EQ.502 )
THEN
440 desca( dtype_ ) = 501
445 desca( dtype_ ) = temp
447 IF( return_code.NE.0 )
THEN
453 IF( return_code.NE.0 )
THEN
460 IF( desca_1xp( 2 ).NE.descb_px1( 2 ) )
THEN
468 IF( desca_1xp( 4 ).NE.descb_px1( 4 ) )
THEN
474 IF( desca_1xp( 5 ).NE.descb_px1( 5 ) )
THEN
480 ictxt = desca_1xp( 2 )
481 csrc = desca_1xp( 5 )
483 llda = desca_1xp( 6 )
484 store_n_a = desca_1xp( 3 )
485 lldb = descb_px1( 6 )
486 store_m_b = descb_px1( 3 )
496 IF(
lsame( uplo,
'U' ) )
THEN
498 ELSE IF(
lsame( uplo,
'L' ) )
THEN
504 IF(
lsame( trans,
'N' ) )
THEN
506 ELSE IF(
lsame( trans,
'T' ) )
THEN
508 ELSE IF(
lsame( trans,
'C' ) )
THEN
514 IF( lwork.LT.-1 )
THEN
516 ELSE IF( lwork.EQ.-1 )
THEN
526 IF( n+ja-1.GT.store_n_a )
THEN
530 IF( n+ib-1.GT.store_m_b )
THEN
534 IF( lldb.LT.nb )
THEN
550 IF( nprow.NE.1 )
THEN
554 IF( n.GT.np*nb-mod( ja-1, nb ) )
THEN
557 $ '
pddttrsv, d&c alg.: only 1 block per proc
',
562.GT..AND..LT.
IF( ( JA+N-1NB ) ( NB2*INT_ONE ) ) THEN
564 CALL PXERBLA( ICTXT, 'pddttrsv, d&c alg.: nb too small
',
570 WORK_SIZE_MIN = INT_ONE*NRHS
572 WORK( 1 ) = WORK_SIZE_MIN
574.LT.
IF( LWORKWORK_SIZE_MIN ) THEN
575.NE.
IF( LWORK-1 ) THEN
577 CALL PXERBLA( ICTXT, 'pddttrsv: worksize error
', -INFO )
584 PARAM_CHECK( 16, 1 ) = DESCB( 5 )
585 PARAM_CHECK( 15, 1 ) = DESCB( 4 )
586 PARAM_CHECK( 14, 1 ) = DESCB( 3 )
587 PARAM_CHECK( 13, 1 ) = DESCB( 2 )
588 PARAM_CHECK( 12, 1 ) = DESCB( 1 )
589 PARAM_CHECK( 11, 1 ) = IB
590 PARAM_CHECK( 10, 1 ) = DESCA( 5 )
591 PARAM_CHECK( 9, 1 ) = DESCA( 4 )
592 PARAM_CHECK( 8, 1 ) = DESCA( 3 )
593 PARAM_CHECK( 7, 1 ) = DESCA( 1 )
594 PARAM_CHECK( 6, 1 ) = JA
595 PARAM_CHECK( 5, 1 ) = NRHS
596 PARAM_CHECK( 4, 1 ) = N
597 PARAM_CHECK( 3, 1 ) = IDUM3
598 PARAM_CHECK( 2, 1 ) = IDUM2
599 PARAM_CHECK( 1, 1 ) = IDUM1
601 PARAM_CHECK( 16, 2 ) = 1205
602 PARAM_CHECK( 15, 2 ) = 1204
603 PARAM_CHECK( 14, 2 ) = 1203
604 PARAM_CHECK( 13, 2 ) = 1202
605 PARAM_CHECK( 12, 2 ) = 1201
606 PARAM_CHECK( 11, 2 ) = 11
607 PARAM_CHECK( 10, 2 ) = 905
608 PARAM_CHECK( 9, 2 ) = 904
609 PARAM_CHECK( 8, 2 ) = 903
610 PARAM_CHECK( 7, 2 ) = 901
611 PARAM_CHECK( 6, 2 ) = 8
612 PARAM_CHECK( 5, 2 ) = 4
613 PARAM_CHECK( 4, 2 ) = 3
614 PARAM_CHECK( 3, 2 ) = 16
615 PARAM_CHECK( 2, 2 ) = 2
616 PARAM_CHECK( 1, 2 ) = 1
624.LT.
ELSE IF( INFO-DESCMULT ) THEN
627 INFO = -INFO*DESCMULT
632 CALL GLOBCHK( ICTXT, 16, PARAM_CHECK, 16, PARAM_CHECK( 1, 3 ),
638.EQ.
IF( INFOBIGNUM ) THEN
640.EQ.
ELSE IF( MOD( INFO, DESCMULT )0 ) THEN
641 INFO = -INFO / DESCMULT
647 CALL PXERBLA( ICTXT, 'pddttrsv', -INFO )
663 PART_OFFSET = NB*( ( JA-1 ) / ( NPCOL*NB ) )
665.LT.
IF( ( MYCOL-CSRC )( JA-PART_OFFSET-1 ) / NB ) THEN
666 PART_OFFSET = PART_OFFSET + NB
669.LT.
IF( MYCOLCSRC ) THEN
670 PART_OFFSET = PART_OFFSET - NB
679 FIRST_PROC = MOD( ( JA-1 ) / NB+CSRC, NPCOL )
683 JA_NEW = MOD( JA-1, NB ) + 1
688 NP = ( JA_NEW+N-2 ) / NB + 1
692 CALL RESHAPE( ICTXT, INT_ONE, ICTXT_NEW, INT_ONE, FIRST_PROC,
699 DESCA_1XP( 2 ) = ICTXT_NEW
700 DESCB_PX1( 2 ) = ICTXT_NEW
704 CALL BLACS_GRIDINFO( ICTXT, NPROW, NPCOL, MYROW, MYCOL )
708.LT.
IF( MYROW0 ) THEN
721 MY_NUM_COLS = NUMROC( N, PART_SIZE, MYCOL, 0, NPCOL )
725.EQ.
IF( MYCOL0 ) THEN
726 PART_OFFSET = PART_OFFSET + MOD( JA_NEW-1, PART_SIZE )
727 MY_NUM_COLS = MY_NUM_COLS - MOD( JA_NEW-1, PART_SIZE )
732 ODD_SIZE = MY_NUM_COLS
733.LT.
IF( MYCOLNP-1 ) THEN
734 ODD_SIZE = ODD_SIZE - INT_ONE
739 WORK_U = INT_ONE*ODD_SIZE + 3
745 IF( LSAME( UPLO, 'l
' ) ) THEN
747 IF( LSAME( TRANS, 'n
' ) ) THEN
758 CALL DDTTRSV( UPLO, 'n
', ODD_SIZE, NRHS,
759 $ DL( PART_OFFSET+2 ), D( PART_OFFSET+1 ),
760 $ DU( PART_OFFSET+1 ), B( PART_OFFSET+1 ), LLDB,
764.LT.
IF( MYCOLNP-1 ) THEN
768 CALL DAXPY( NRHS, -DL( PART_OFFSET+ODD_SIZE+1 ),
769 $ B( PART_OFFSET+ODD_SIZE ), LLDB,
770 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB )
775.NE.
IF( MYCOL0 ) THEN
779 CALL DGEMM( 't
', 'n
', INT_ONE, NRHS, ODD_SIZE, -ONE,
780 $ AF( 1 ), ODD_SIZE, B( PART_OFFSET+1 ), LLDB,
781 $ ZERO, WORK( 1+INT_ONE-INT_ONE ), INT_ONE )
792.GT.
IF( MYCOL0 ) THEN
794 CALL DGESD2D( ICTXT, INT_ONE, NRHS, WORK( 1 ), INT_ONE,
801.LT.
IF( MYCOLNPCOL-1 ) THEN
803 CALL DGERV2D( ICTXT, INT_ONE, NRHS, WORK( 1 ), INT_ONE,
808 CALL DMATADD( INT_ONE, NRHS, ONE, WORK( 1 ), INT_ONE,
809 $ ONE, B( PART_OFFSET+ODD_SIZE+1 ), LLDB )
816.EQ.
IF( MYCOLNPCOL-1 ) THEN
831.NE.
IF( MOD( ( MYCOL+1 ) / LEVEL_DIST, 2 )0 )
836.GE.
IF( MYCOL-LEVEL_DIST0 ) THEN
838 CALL DGERV2D( ICTXT, INT_ONE, NRHS, WORK( 1 ), INT_ONE,
839 $ 0, MYCOL-LEVEL_DIST )
841 CALL DMATADD( INT_ONE, NRHS, ONE, WORK( 1 ), INT_ONE,
842 $ ONE, B( PART_OFFSET+ODD_SIZE+1 ), LLDB )
848.LT.
IF( MYCOL+LEVEL_DISTNPCOL-1 ) THEN
850 CALL DGERV2D( ICTXT, INT_ONE, NRHS, WORK( 1 ), INT_ONE,
851 $ 0, MYCOL+LEVEL_DIST )
853 CALL DMATADD( INT_ONE, NRHS, ONE, WORK( 1 ), INT_ONE,
854 $ ONE, B( PART_OFFSET+ODD_SIZE+1 ), LLDB )
858 LEVEL_DIST = LEVEL_DIST*2
871 CALL DTBTRS( 'l
', 'n
', 'u
', INT_ONE,
872 $ MIN( INT_ONE, INT_ONE-1 ), NRHS,
873 $ AF( ODD_SIZE+2 ), INT_ONE+1,
874 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB, INFO )
883.LE.
IF( MYCOL / LEVEL_DIST( NPCOL-1 ) / LEVEL_DIST-2 ) THEN
887 CALL DGEMM( 't
', 'n
', INT_ONE, NRHS, INT_ONE, -ONE,
888 $ AF( ( ODD_SIZE )*INT_ONE+1 ), INT_ONE,
889 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB, ZERO,
890 $ WORK( 1 ), INT_ONE )
894 CALL DGESD2D( ICTXT, INT_ONE, NRHS, WORK( 1 ), INT_ONE,
895 $ 0, MYCOL+LEVEL_DIST )
901.GT..AND.
IF( ( MYCOL / LEVEL_DIST0 )
902.LE.
$ ( MYCOL / LEVEL_DIST( NPCOL-1 ) / LEVEL_DIST-1 ) )
909 CALL DGEMM( 'n
', 'n
', INT_ONE, NRHS, INT_ONE, -ONE,
910 $ AF( ODD_SIZE*INT_ONE+2+1 ), INT_ONE,
911 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB, ZERO,
912 $ WORK( 1 ), INT_ONE )
916 CALL DGESD2D( ICTXT, INT_ONE, NRHS, WORK( 1 ), INT_ONE,
917 $ 0, MYCOL-LEVEL_DIST )
936.EQ.
IF( MYCOLNPCOL-1 ) THEN
944.NE.
IF( MOD( ( MYCOL+1 ) / LEVEL_DIST, 2 )0 )
947 LEVEL_DIST = LEVEL_DIST*2
953.GT..AND.
IF( ( MYCOL / LEVEL_DIST0 )
954.LE.
$ ( MYCOL / LEVEL_DIST( NPCOL-1 ) / LEVEL_DIST-1 ) )
959 CALL DGERV2D( ICTXT, INT_ONE, NRHS, WORK( 1 ), INT_ONE,
960 $ 0, MYCOL-LEVEL_DIST )
966 CALL DGEMM( 't
', 'n
', INT_ONE, NRHS, INT_ONE, -ONE,
967 $ AF( ODD_SIZE*INT_ONE+2+1 ), INT_ONE,
968 $ WORK( 1 ), INT_ONE, ONE,
969 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB )
974.LE.
IF( MYCOL / LEVEL_DIST( NPCOL-1 ) / LEVEL_DIST-2 ) THEN
978 CALL DGERV2D( ICTXT, INT_ONE, NRHS, WORK( 1 ), INT_ONE,
979 $ 0, MYCOL+LEVEL_DIST )
983 CALL DGEMM( 'n
', 'n
', INT_ONE, NRHS, INT_ONE, -ONE,
984 $ AF( ( ODD_SIZE )*INT_ONE+1 ), INT_ONE,
985 $ WORK( 1 ), INT_ONE, ONE,
986 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB )
994 CALL DTBTRS( 'l
', 't
', 'u
', INT_ONE,
995 $ MIN( INT_ONE, INT_ONE-1 ), NRHS,
996 $ AF( ODD_SIZE+2 ), INT_ONE+1,
997 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB, INFO )
1008.EQ.
IF( LEVEL_DIST1 )
1011 LEVEL_DIST = LEVEL_DIST / 2
1015.LT.
IF( MYCOL+LEVEL_DISTNPCOL-1 ) THEN
1017 CALL DGESD2D( ICTXT, INT_ONE, NRHS,
1018 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB, 0,
1019 $ MYCOL+LEVEL_DIST )
1025.GE.
IF( MYCOL-LEVEL_DIST0 ) THEN
1027 CALL DGESD2D( ICTXT, INT_ONE, NRHS,
1028 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB, 0,
1029 $ MYCOL-LEVEL_DIST )
1047.LT.
IF( MYCOLNPCOL-1 ) THEN
1049 CALL DGESD2D( ICTXT, INT_ONE, NRHS,
1050 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB, 0,
1057.GT.
IF( MYCOL0 ) THEN
1059 CALL DGERV2D( ICTXT, INT_ONE, NRHS, WORK( 1 ), INT_ONE,
1070.NE.
IF( MYCOL0 ) THEN
1074 CALL DGEMM( 'n
', 'n
', ODD_SIZE, NRHS, INT_ONE, -ONE,
1075 $ AF( 1 ), ODD_SIZE, WORK( 1+INT_ONE-INT_ONE ),
1076 $ INT_ONE, ONE, B( PART_OFFSET+1 ), LLDB )
1081.LT.
IF( MYCOLNP-1 ) THEN
1085 CALL DAXPY( NRHS, -( DL( PART_OFFSET+ODD_SIZE+1 ) ),
1086 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB,
1087 $ B( PART_OFFSET+ODD_SIZE ), LLDB )
1093 CALL DDTTRSV( UPLO, 't
', ODD_SIZE, NRHS,
1094 $ DL( PART_OFFSET+2 ), D( PART_OFFSET+1 ),
1095 $ DU( PART_OFFSET+1 ), B( PART_OFFSET+1 ), LLDB,
1106 IF( LSAME( TRANS, 't
' ) ) THEN
1117 CALL DDTTRSV( UPLO, 't
', ODD_SIZE, NRHS,
1118 $ DL( PART_OFFSET+2 ), D( PART_OFFSET+1 ),
1119 $ DU( PART_OFFSET+1 ), B( PART_OFFSET+1 ), LLDB,
1123.LT.
IF( MYCOLNP-1 ) THEN
1127 CALL DAXPY( NRHS, -( DU( PART_OFFSET+ODD_SIZE ) ),
1128 $ B( PART_OFFSET+ODD_SIZE ), LLDB,
1129 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB )
1134.NE.
IF( MYCOL0 ) THEN
1138 CALL DGEMM( 't
', 'n
', INT_ONE, NRHS, ODD_SIZE, -ONE,
1139 $ AF( WORK_U+1 ), ODD_SIZE, B( PART_OFFSET+1 ),
1140 $ LLDB, ZERO, WORK( 1+INT_ONE-INT_ONE ),
1152.GT.
IF( MYCOL0 ) THEN
1154 CALL DGESD2D( ICTXT, INT_ONE, NRHS, WORK( 1 ), INT_ONE,
1161.LT.
IF( MYCOLNPCOL-1 ) THEN
1163 CALL DGERV2D( ICTXT, INT_ONE, NRHS, WORK( 1 ), INT_ONE,
1168 CALL DMATADD( INT_ONE, NRHS, ONE, WORK( 1 ), INT_ONE,
1169 $ ONE, B( PART_OFFSET+ODD_SIZE+1 ), LLDB )
1176.EQ.
IF( MYCOLNPCOL-1 ) THEN
1191.NE.
IF( MOD( ( MYCOL+1 ) / LEVEL_DIST, 2 )0 )
1196.GE.
IF( MYCOL-LEVEL_DIST0 ) THEN
1198 CALL DGERV2D( ICTXT, INT_ONE, NRHS, WORK( 1 ), INT_ONE,
1199 $ 0, MYCOL-LEVEL_DIST )
1201 CALL DMATADD( INT_ONE, NRHS, ONE, WORK( 1 ), INT_ONE,
1202 $ ONE, B( PART_OFFSET+ODD_SIZE+1 ), LLDB )
1208.LT.
IF( MYCOL+LEVEL_DISTNPCOL-1 ) THEN
1210 CALL DGERV2D( ICTXT, INT_ONE, NRHS, WORK( 1 ), INT_ONE,
1211 $ 0, MYCOL+LEVEL_DIST )
1213 CALL DMATADD( INT_ONE, NRHS, ONE, WORK( 1 ), INT_ONE,
1214 $ ONE, B( PART_OFFSET+ODD_SIZE+1 ), LLDB )
1218 LEVEL_DIST = LEVEL_DIST*2
1231 CALL DTBTRS( 'u
', 't
', 'n
', INT_ONE,
1232 $ MIN( INT_ONE, INT_ONE-1 ), NRHS,
1233 $ AF( ODD_SIZE+2 ), INT_ONE+1,
1234 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB, INFO )
1236.NE.
IF( INFO0 ) THEN
1243.LE.
IF( MYCOL / LEVEL_DIST( NPCOL-1 ) / LEVEL_DIST-2 ) THEN
1247 CALL DGEMM( 't
', 'n
', INT_ONE, NRHS, INT_ONE, -ONE,
1248 $ AF( WORK_U+( ODD_SIZE )*INT_ONE+1 ), INT_ONE,
1249 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB, ZERO,
1250 $ WORK( 1 ), INT_ONE )
1254 CALL DGESD2D( ICTXT, INT_ONE, NRHS, WORK( 1 ), INT_ONE,
1255 $ 0, MYCOL+LEVEL_DIST )
1261.GT..AND.
IF( ( MYCOL / LEVEL_DIST0 )
1262.LE.
$ ( MYCOL / LEVEL_DIST( NPCOL-1 ) / LEVEL_DIST-1 ) )
1269 CALL DGEMM( 'n
', 'n
', INT_ONE, NRHS, INT_ONE, -ONE,
1270 $ AF( WORK_U+ODD_SIZE*INT_ONE+2+1 ), INT_ONE,
1271 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB, ZERO,
1272 $ WORK( 1 ), INT_ONE )
1276 CALL DGESD2D( ICTXT, INT_ONE, NRHS, WORK( 1 ), INT_ONE,
1277 $ 0, MYCOL-LEVEL_DIST )
1296.EQ.
IF( MYCOLNPCOL-1 ) THEN
1304.NE.
IF( MOD( ( MYCOL+1 ) / LEVEL_DIST, 2 )0 )
1307 LEVEL_DIST = LEVEL_DIST*2
1313.GT..AND.
IF( ( MYCOL / LEVEL_DIST0 )
1314.LE.
$ ( MYCOL / LEVEL_DIST( NPCOL-1 ) / LEVEL_DIST-1 ) )
1319 CALL DGERV2D( ICTXT, INT_ONE, NRHS, WORK( 1 ), INT_ONE,
1320 $ 0, MYCOL-LEVEL_DIST )
1326 CALL DGEMM( 't
', 'n
', INT_ONE, NRHS, INT_ONE, -ONE,
1327 $ AF( WORK_U+ODD_SIZE*INT_ONE+2+1 ), INT_ONE,
1328 $ WORK( 1 ), INT_ONE, ONE,
1329 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB )
1334.LE.
IF( MYCOL / LEVEL_DIST( NPCOL-1 ) / LEVEL_DIST-2 ) THEN
1338 CALL DGERV2D( ICTXT, INT_ONE, NRHS, WORK( 1 ), INT_ONE,
1339 $ 0, MYCOL+LEVEL_DIST )
1343 CALL DGEMM( 'n
', 'n
', INT_ONE, NRHS, INT_ONE, -ONE,
1344 $ AF( WORK_U+( ODD_SIZE )*INT_ONE+1 ), INT_ONE,
1345 $ WORK( 1 ), INT_ONE, ONE,
1346 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB )
1354 CALL DTBTRS( 'u
', 'n
', 'n
', INT_ONE,
1355 $ MIN( INT_ONE, INT_ONE-1 ), NRHS,
1356 $ AF( ODD_SIZE+2 ), INT_ONE+1,
1357 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB, INFO )
1359.NE.
IF( INFO0 ) THEN
1368.EQ.
IF( LEVEL_DIST1 )
1371 LEVEL_DIST = LEVEL_DIST / 2
1375.LT.
IF( MYCOL+LEVEL_DISTNPCOL-1 ) THEN
1377 CALL DGESD2D( ICTXT, INT_ONE, NRHS,
1378 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB, 0,
1379 $ MYCOL+LEVEL_DIST )
1385.GE.
IF( MYCOL-LEVEL_DIST0 ) THEN
1387 CALL DGESD2D( ICTXT, INT_ONE, NRHS,
1388 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB, 0,
1389 $ MYCOL-LEVEL_DIST )
1407.LT.
IF( MYCOLNPCOL-1 ) THEN
1409 CALL DGESD2D( ICTXT, INT_ONE, NRHS,
1410 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB, 0,
1417.GT.
IF( MYCOL0 ) THEN
1419 CALL DGERV2D( ICTXT, INT_ONE, NRHS, WORK( 1 ), INT_ONE,
1430.NE.
IF( MYCOL0 ) THEN
1434 CALL DGEMM( 'n
', 'n
', ODD_SIZE, NRHS, INT_ONE, -ONE,
1435 $ AF( WORK_U+1 ), ODD_SIZE,
1436 $ WORK( 1+INT_ONE-INT_ONE ), INT_ONE, ONE,
1437 $ B( PART_OFFSET+1 ), LLDB )
1442.LT.
IF( MYCOLNP-1 ) THEN
1446 CALL DAXPY( NRHS, -( DU( PART_OFFSET+ODD_SIZE ) ),
1447 $ B( PART_OFFSET+ODD_SIZE+1 ), LLDB,
1448 $ B( PART_OFFSET+ODD_SIZE ), LLDB )
1454 CALL DDTTRSV( UPLO, 'n
', ODD_SIZE, NRHS,
1455 $ DU( PART_OFFSET+2 ), D( PART_OFFSET+1 ),
1456 $ DU( PART_OFFSET+1 ), B( PART_OFFSET+1 ), LLDB,
1470.NE.
IF( ICTXT_SAVEICTXT_NEW ) THEN
1471 CALL BLACS_GRIDEXIT( ICTXT_NEW )
1483 WORK( 1 ) = WORK_SIZE_MIN
subroutine dgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
DGEMM
subroutine pddttrsv(uplo, trans, n, nrhs, dl, d, du, ja, desca, b, ib, descb, af, laf, work, lwork, info)