1 SUBROUTINE pdlahqr( WANTT, WANTZ, N, ILO, IHI, A, DESCA, WR, WI,
2 $ ILOZ, IHIZ, Z, DESCZ, WORK, LWORK, IWORK,
11 INTEGER IHI, IHIZ, ILO, ILOZ, ILWORK, INFO, LWORK, N
14 INTEGER DESCA( * ), DESCZ( * ), IWORK( * )
15 DOUBLE PRECISION A( * ), WI( * ), WORK( * ), WR( * ), Z( * )
232 INTEGER BLOCK_CYCLIC_2D, , CTXT_, DLEN_, DTYPE_,
233 $ LLD_, MB_, M_, NB_, N_, RSRC_
234 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
235 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
236 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
237 DOUBLE PRECISION ZERO, ONE, HALF
238 PARAMETER ( ZERO = 0.0d+0, one = 1.0d+0, half = 0.5d+0 )
239 DOUBLE PRECISION CONST
240 parameter( const = 1.50d+0 )
242 PARAMETER ( iblk = 32 )
245 INTEGER CONTXT, DOWN, HBL, I, I1, I2, IAFIRST, IBULGE,
246 $ ICBUF, ICOL, ICOL1, ICOL2, IDIA, IERR, II,
247 $ irbuf, irow, irow1, irow2, ispec, istart,
248 $ istartcol, istartrow, istop, isub, isup,
249 $ itermax, itmp1, itmp2, itn, its, j, jafirst,
250 $ jblk, jj, k, ki, l, lcmrc, lda, ldz, left,
251 $ lihih, lihiz, liloh, liloz, locali1, locali2,
252 $ localk, localm, m, modkm1, mycol, myrow,
253 $ nbulge, nh, node, npcol, nprow, nr, num, nz,
254 $ right, rotn, up, vecsidx
255 DOUBLE PRECISION AVE, DISC, H00, H10, H11, H12, H21, H22, H33,
256 $ H43H34, H44, OVFL, S, SMLNUM, SUM, T1, T1COPY,
257 $ t2, t3, ulp, unfl, v1save, v2, v2save, v3,
261 INTEGER ICURCOL( IBLK ), ICURROW( IBLK ), K1( IBLK ),
262 $ K2( IBLK ), KCOL( IBLK ), KP2COL( IBLK ),
263 $ kp2row( iblk ), krow( iblk ), localk2( iblk )
264 DOUBLE PRECISION S1( 2*IBLK, 2*IBLK ), SMALLA( 6, 6, IBLK ),
269 DOUBLE PRECISION PDLAMCH
270 EXTERNAL ilcm, numroc, pdlamch
280 INTRINSIC abs,
max,
min, mod, sign, sqrt
286 itermax = 30*( ihi-ilo+1 )
294 contxt = desca( ctxt_ )
296 iafirst = desca( rsrc_ )
297 jafirst = desca( csrc_ )
300 node = myrow*npcol + mycol
302 left = mod( mycol+npcol-1, npcol )
303 right = mod( mycol+1, npcol )
304 up = mod( myrow+nprow-1, nprow )
305 down = mod( myrow+1, nprow )
306 lcmrc =
ilcm( nprow, npcol )
310 localk = numroc( n, hbl, mycol, jafirst, npcol )
315 IF( lwork.LT.3*n+
max( 2*
max( lda, ldz )+2*localk, jj ) )
THEN
318 IF( descz( ctxt_ ).NE.desca( ctxt_ ) )
THEN
319 info = -( 1300+ctxt_ )
321 IF( desca( mb_ ).NE.desca( nb_ ) )
THEN
324 IF( descz( mb_ ).NE.descz( nb_ ) )
THEN
327 IF( desca( mb_ ).NE.descz( mb_ ) )
THEN
330 IF( ( desca( rsrc_ ).NE.0 ) .OR. ( desca( csrc_ ).NE.0 ) )
THEN
331 info = -( 700+rsrc_ )
333 IF( ( descz( rsrc_ ).NE.0 ) .OR. ( descz( csrc_ ).NE.0 ) )
THEN
334 info = -( 1300+rsrc_ )
336 IF( ( ilo.GT.n ) .OR. ( ilo.LT.1 ) )
THEN
339 IF( ( ihi.GT.n ) .OR. ( ihi.LT.1 ) )
THEN
345 CALL igamn2d( contxt,
'ALL',
' ', 1, 1, info, 1, itmp1, itmp2, -1,
348 CALL pxerbla( contxt,
'PDLAHQR', -info )
364 rotn =
max( rotn, hbl-2 )
365 rotn =
min( rotn, 1 )
367 IF( ilo.EQ.ihi )
THEN
368 CALL infog2l( ilo, ilo, desca, nprow, npcol, myrow, mycol,
369 $ irow, icol, ii, jj )
370 IF( ( myrow.EQ.ii ) .AND. ( mycol.EQ.jj ) )
THEN
371 wr( ilo ) = a( ( icol-1 )*lda+irow )
382 CALL infog1l( iloz, hbl, nprow, myrow, 0, liloz, lihiz )
383 lihiz = numroc( ihiz, hbl, myrow, 0, nprow )
388 unfl = pdlamch( contxt,
'SAFE MINIMUM' )
390 CALL pdlabad( contxt, unfl, ovfl )
391 ulp = pdlamch( contxt, 'precision
' )
392 SMLNUM = UNFL*( NH / ULP )
428 CALL PDLASMSUB( A, DESCA, I, L, K, SMLNUM, WORK( IRBUF+1 ),
436 CALL INFOG2L( L, L-1, DESCA, NPROW, NPCOL, MYROW, MYCOL,
437 $ IROW, ICOL, ITMP1, ITMP2 )
438.EQ..AND..EQ.
IF( ( MYROWITMP1 ) ( MYCOLITMP2 ) ) THEN
439 A( ( ICOL-1 )*LDA+IROW ) = ZERO
441 WORK( ISUB+L-1 ) = ZERO
456.NOT.
IF( WANTT ) THEN
464 JBLK = MIN( IBLK, ( ( I-L+1 ) / 2 )-1 )
465.GT.
IF( JBLKLCMRC ) THEN
469 JBLK = JBLK - MOD( JBLK, LCMRC )
471 JBLK = MIN( JBLK, 2*LCMRC )
472 JBLK = MAX( JBLK, 1 )
474 CALL PDLACP3( 2*JBLK, I-2*JBLK+1, A, DESCA, S1, 2*IBLK, -1, -1,
476.EQ..OR..EQ.
IF( ITS20 ITS40 ) THEN
480 DO 20 II = 2*JBLK, 2, -1
481 S1( II, II ) = CONST*( ABS( S1( II, II ) )+
482 $ ABS( S1( II, II-1 ) ) )
483 S1( II, II-1 ) = ZERO
484 S1( II-1, II ) = ZERO
486 S1( 1, 1 ) = CONST*ABS( S1( 1, 1 ) )
488 CALL DLAHQR( .FALSE., .FALSE., 2*JBLK, 1, 2*JBLK, S1,
489 $ 2*IBLK, WORK( IRBUF+1 ), WORK( ICBUF+1 ), 1,
490 $ 2*JBLK, Z, LDZ, IERR )
494 H44 = S1( 2*JBLK, 2*JBLK )
495 H33 = S1( 2*JBLK-1, 2*JBLK-1 )
496 H43H34 = S1( 2*JBLK-1, 2*JBLK )*S1( 2*JBLK, 2*JBLK-1 )
497.GT..AND..GT.
IF( ( JBLK1 ) ( ITS30 ) ) THEN
498 S = S1( 2*JBLK-1, 2*JBLK-2 )
499 DISC = ( H33-H44 )*HALF
500 DISC = DISC*DISC + H43H34
501.GT.
IF( DISCZERO ) THEN
506 AVE = HALF*( H33+H44 )
507.GT.
IF( ABS( H33 )-ABS( H44 )ZERO ) THEN
508 H33 = H33*H44 - H43H34
509 H44 = H33 / ( SIGN( DISC, AVE )+AVE )
511 H44 = SIGN( DISC, AVE ) + AVE
544 ISTOP = MIN( M+ROTN-MOD( M, ROTN ), I-2 )
545 ISTOP = MIN( ISTOP, M+HBL-3-MOD( M-1, HBL ) )
546 ISTOP = MIN( ISTOP, I2-2 )
547 ISTOP = MAX( ISTOP, M )
548 NBULGE = ( I-1-ISTOP ) / HBL
552 NBULGE = MIN( NBULGE, JBLK )
553.GT.
IF( NBULGELCMRC ) THEN
557 NBULGE = NBULGE - MOD( NBULGE, LCMRC )
559 NBULGE = MAX( NBULGE, 1 )
561.NE..AND..NE..AND..GT.
IF( ( ITS20 ) ( ITS40 ) ( NBULGE1 ) )
567 CALL DLASORTE( S1( 2*( JBLK-NBULGE )+1,
568 $ 2*( JBLK-NBULGE )+1 ), 2*IBLK, 2*NBULGE,
569 $ WORK( IRBUF+1 ), IERR )
578 CALL INFOG1L( M, HBL, NPCOL, MYCOL, 0, ITMP1, LOCALK )
579 LOCALK = NUMROC( N, HBL, MYCOL, 0, NPCOL )
580 CALL INFOG1L( 1, HBL, NPCOL, MYCOL, 0, ICOL1, LOCALI2 )
581 LOCALI2 = NUMROC( I2, HBL, MYCOL, 0, NPCOL )
585 CALL INFOG1L( I1, HBL, NPROW, MYROW, 0, LOCALI1, ICOL1 )
586 ICOL1 = NUMROC( N, HBL, MYROW, 0, NPROW )
587 CALL INFOG1L( 1, HBL, NPROW, MYROW, 0, LOCALM, ICOL1 )
588 ICOL1 = NUMROC( MIN( M+3, I ), HBL, MYROW, 0, NPROW )
592 ISTARTROW = MOD( ( M+1 ) / HBL, NPROW ) + IAFIRST
593 ISTARTCOL = MOD( ( M+1 ) / HBL, NPCOL ) + JAFIRST
595 CALL INFOG1L( M, HBL, NPROW, MYROW, 0, II, ITMP2 )
596 ITMP2 = NUMROC( N, HBL, MYROW, 0, NPROW )
597 CALL INFOG1L( M, HBL, NPCOL, MYCOL, 0, JJ, ITMP2 )
598 ITMP2 = NUMROC( N, HBL, MYCOL, 0, NPCOL )
599 CALL INFOG1L( 1, HBL, NPROW, MYROW, 0, ISTOP, KP2ROW( 1 ) )
600 KP2ROW( 1 ) = NUMROC( M+2, HBL, MYROW, 0, NPROW )
601 CALL INFOG1L( 1, HBL, NPCOL, MYCOL, 0, ISTOP, KP2COL( 1 ) )
602 KP2COL( 1 ) = NUMROC( M+2, HBL, MYCOL, 0, NPCOL )
622 ISTOP = MIN( M+ROTN-MOD( M, ROTN ), I-2 )
623 ISTOP = MIN( ISTOP, M+HBL-3-MOD( M-1, HBL ) )
624 ISTOP = MIN( ISTOP, I2-2 )
625 ISTOP = MAX( ISTOP, M )
627 ICURROW( KI ) = ISTARTROW
628 ICURCOL( KI ) = ISTARTCOL
629 LOCALK2( KI ) = ITMP1
633 $ KP2ROW( KI ) = KP2ROW( 1 )
635 $ KP2COL( KI ) = KP2COL( 1 )
645 CALL PDLAWIL( ITMP1, ITMP2, M, A, DESCA, H44, H33, H43H34,
650.LE.
IF( K2( IBULGE )I-1 ) THEN
652.GE..AND..LT.
IF( ( K1( IBULGE )M+5 ) ( IBULGENBULGE ) )
654.EQ.
IF( ( MOD( K2( IBULGE )+2, HBL )MOD( K2( IBULGE+1 )+
655.AND..LE.
$ 2, HBL ) ) ( K1( 1 )I-1 ) ) THEN
656 H44 = S1( 2*JBLK-2*IBULGE, 2*JBLK-2*IBULGE )
657 H33 = S1( 2*JBLK-2*IBULGE-1, 2*JBLK-2*IBULGE-1 )
658 H43H34 = S1( 2*JBLK-2*IBULGE-1, 2*JBLK-2*IBULGE )*
659 $ S1( 2*JBLK-2*IBULGE, 2*JBLK-2*IBULGE-1 )
662 CALL PDLAWIL( ITMP1, ITMP2, M, A, DESCA, H44, H33,
680 ISTART = MAX( K1( KI ), M )
681 ISTOP = MIN( K2( KI ), I-1 )
683 MODKM1 = MOD( K-1, HBL )
684.GE..AND..LE.
IF( ( MODKM1HBL-2 ) ( KI-1 ) ) THEN
687 SMALLA(ITMP1, ITMP2, KI) = ZERO
690.EQ..AND..LT.
IF( ( MODKM1HBL-2 ) ( KI-1 ) ) THEN
694 CALL INFOG2L( K+2, K+2, DESCA, NPROW, NPCOL, MYROW,
695 $ MYCOL, IROW1, ICOL1, ITMP1, ITMP2 )
696 CALL PDLACP3( MIN( 6, N-K+2 ), K-1, A, DESCA,
697 $ SMALLA( 1, 1, KI ), 6, ITMP1, ITMP2,
700.EQ.
IF( MODKM1HBL-1 ) THEN
704 CALL INFOG2L( K+1, K+1, DESCA, NPROW, NPCOL, MYROW,
705 $ MYCOL, IROW1, ICOL1, ITMP1, ITMP2 )
706 CALL PDLACP3( MIN( 6, N-K+3 ), K-2, A, DESCA,
707 $ SMALLA( 1, 1, KI ), 6, ITMP1, ITMP2,
736.EQ..AND.
IF( ( MYROWICURROW( KI ) )
737.EQ..AND.
$ ( MYCOLICURCOL( KI ) )
738.EQ..AND.
$ ( MODKM1HBL-2 )
739.LT.
$ ( ISTARTMIN( I-1, ISTOP+1 ) ) ) THEN
743 CALL DCOPY( NR, SMALLA( 2, 1, KI ), 1, VCOPY, 1 )
749 CALL DLARFG( NR, VCOPY( 1 ), VCOPY( 2 ), 1, T1COPY )
751 SMALLA( 2, 1, KI ) = VCOPY( 1 )
752 SMALLA( 3, 1, KI ) = ZERO
754 $ SMALLA( 4, 1, KI ) = ZERO
755.GT.
ELSE IF( ML ) THEN
756 SMALLA( 2, 1, KI ) = -SMALLA( 2, 1, KI )
760 WORK( VECSIDX+( K-1 )*3+1 ) = VCOPY( 2 )
761 WORK( VECSIDX+( K-1 )*3+2 ) = VCOPY( 3 )
762 WORK( VECSIDX+( K-1 )*3+3 ) = T1COPY
765.EQ..AND.
IF( ( MOD( ISTOP-1, HBL )HBL-1 )
766.EQ..AND.
$ ( MYROWICURROW( KI ) )
767.EQ..AND.
$ ( MYCOLICURCOL( KI ) )
768.LE.
$ ( ISTARTMIN( I, ISTOP ) ) ) THEN
772 CALL DCOPY( NR, SMALLA( 3, 2, KI ), 1, VCOPY, 1 )
778 CALL DLARFG( NR, VCOPY( 1 ), VCOPY( 2 ), 1, T1COPY )
780 SMALLA( 3, 2, KI ) = VCOPY( 1 )
781 SMALLA( 4, 2, KI ) = ZERO
783 $ SMALLA( 5, 2, KI ) = ZERO
795.GT.
ELSE IF( ML ) THEN
796 SMALLA( 3, 2, KI ) = -SMALLA( 3, 2, KI )
800 WORK( VECSIDX+( K-1 )*3+1 ) = VCOPY( 2 )
801 WORK( VECSIDX+( K-1 )*3+2 ) = VCOPY( 3 )
802 WORK( VECSIDX+( K-1 )*3+3 ) = T1COPY
805.EQ..AND..LE..AND.
IF( ( MODKM10 ) ( ISTARTI-1 )
806.EQ..AND.
$ ( MYROWICURROW( KI ) )
807.EQ.
$ ( RIGHTICURCOL( KI ) ) ) THEN
812 ICOL1 = LOCALK2( KI )
813.GT.
IF( ISTARTM ) THEN
814 VCOPY( 1 ) = SMALLA( 4, 3, KI )
815 VCOPY( 2 ) = SMALLA( 5, 3, KI )
816 VCOPY( 3 ) = SMALLA( 6, 3, KI )
817 NR = MIN( 3, I-ISTART+1 )
818 CALL DLARFG( NR, VCOPY( 1 ), VCOPY( 2 ), 1,
820 A( ( ICOL1-2 )*LDA+IROW1 ) = VCOPY( 1 )
821 A( ( ICOL1-2 )*LDA+IROW1+1 ) = ZERO
822.LT.
IF( ISTARTI-1 ) THEN
823 A( ( ICOL1-2 )*LDA+IROW1+2 ) = ZERO
827 A( ( ICOL1-2 )*LDA+IROW1 ) = -A( ( ICOL1-2 )*
833.EQ..AND.
IF( ( MYROWICURROW( KI ) )
834.EQ..AND.
$ ( MYCOLICURCOL( KI ) )
835.EQ..AND..EQ.
$ ( ( ( MODKM1HBL-2 ) ( ISTARTI-
836.OR..LT..AND..LE.
$ 1 ) ) ( ( MODKM1HBL-2 ) ( ISTARTI-
842 ICOL1 = LOCALK2( KI )
843 DO 70 K = ISTART, ISTOP
849.EQ.
IF( MOD( K-1, HBL )0 ) THEN
850 VCOPY( 1 ) = SMALLA( 4, 3, KI )
851 VCOPY( 2 ) = SMALLA( 5, 3, KI )
852 VCOPY( 3 ) = SMALLA( 6, 3, KI )
854 VCOPY( 1 ) = A( ( ICOL1-2 )*LDA+IROW1 )
855 VCOPY( 2 ) = A( ( ICOL1-2 )*LDA+IROW1+1 )
857 VCOPY( 3 ) = A( ( ICOL1-2 )*LDA+IROW1+2 )
865 CALL DLARFG( NR, VCOPY( 1 ), VCOPY( 2 ), 1,
868.GT.
IF( MOD( K-1, HBL )0 ) THEN
869 A( ( ICOL1-2 )*LDA+IROW1 ) = VCOPY( 1 )
870 A( ( ICOL1-2 )*LDA+IROW1+1 ) = ZERO
872 A( ( ICOL1-2 )*LDA+IROW1+2 ) = ZERO
888.GT.
ELSE IF( ML ) THEN
889.GT.
IF( MOD( K-1, HBL )0 ) THEN
890 A( ( ICOL1-2 )*LDA+IROW1 ) = -A( ( ICOL1-2 )*
896 WORK( VECSIDX+( K-1 )*3+1 ) = VCOPY( 2 )
897 WORK( VECSIDX+( K-1 )*3+2 ) = VCOPY( 3 )
898 WORK( VECSIDX+( K-1 )*3+3 ) = T1COPY
900.LT.
IF( KISTOP ) THEN
906 DO 50 J = ICOL1, MIN( K2( KI )+1, I-1 ) +
908 SUM = A( ( J-1 )*LDA+IROW1 ) +
909 $ V2*A( ( J-1 )*LDA+IROW1+1 ) +
910 $ V3*A( ( J-1 )*LDA+IROW1+2 )
911 A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*LDA+
913 A( ( J-1 )*LDA+IROW1+1 ) = A( ( J-1 )*LDA+
915 A( ( J-1 )*LDA+IROW1+2 ) = A( ( J-1 )*LDA+
918 ITMP1 = LOCALK2( KI )
919 DO 60 J = IROW1 + 1, IROW1 + 3
920 SUM = A( ( ICOL1-1 )*LDA+J ) +
921 $ V2*A( ICOL1*LDA+J ) +
922 $ V3*A( ( ICOL1+1 )*LDA+J )
923 A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*LDA+
925 A( ICOL1*LDA+J ) = A( ICOL1*LDA+J ) - SUM*T2
926 A( ( ICOL1+1 )*LDA+J ) = A( ( ICOL1+1 )*LDA+
935.EQ.
IF( MODKM1HBL-2 ) THEN
936.EQ..AND.
IF( ( DOWNICURROW( KI ) )
937.EQ..AND..GT.
$ ( RIGHTICURCOL( KI ) ) ( NUM1 ) )
939 CALL DGERV2D( CONTXT, 3, 1,
940 $ WORK( VECSIDX+( ISTART-1 )*3+1 ), 3,
943.EQ..AND.
IF( ( MYROWICURROW( KI ) )
944.EQ..AND..GT.
$ ( MYCOLICURCOL( KI ) ) ( NUM1 ) )
946 CALL DGESD2D( CONTXT, 3, 1,
947 $ WORK( VECSIDX+( ISTART-1 )*3+1 ), 3,
950.EQ..AND.
IF( ( DOWNICURROW( KI ) )
951.GT..AND..LE.
$ ( NPCOL1 ) ( ISTARTISTOP ) ) THEN
952 JJ = MOD( ICURCOL( KI )+NPCOL-1, NPCOL )
953.NE.
IF( MYCOLJJ ) THEN
954 CALL DGEBR2D( CONTXT, 'row
', ' ',
955 $ 3*( ISTOP-ISTART+1 ), 1,
956 $ WORK( VECSIDX+( ISTART-1 )*3+1 ),
957 $ 3*( ISTOP-ISTART+1 ), MYROW, JJ )
959 CALL DGEBS2D( CONTXT, 'row
', ' ',
960 $ 3*( ISTOP-ISTART+1 ), 1,
961 $ WORK( VECSIDX+( ISTART-1 )*3+1 ),
962 $ 3*( ISTOP-ISTART+1 ) )
969.EQ..AND..GT..AND.
IF( ( MYROWICURROW( KI ) ) ( NPCOL1 )
970.LE.
$ ( ISTARTISTOP ) ) THEN
971.NE.
IF( MYCOLICURCOL( KI ) ) THEN
972 CALL DGEBR2D( CONTXT, 'row
', ' ',
973 $ 3*( ISTOP-ISTART+1 ), 1,
974 $ WORK( VECSIDX+( ISTART-1 )*3+1 ),
975 $ 3*( ISTOP-ISTART+1 ), MYROW,
978 CALL DGEBS2D( CONTXT, 'row
', ' ',
979 $ 3*( ISTOP-ISTART+1 ), 1,
980 $ WORK( VECSIDX+( ISTART-1 )*3+1 ),
981 $ 3*( ISTOP-ISTART+1 ) )
990 ISTART = MAX( K1( KI ), M )
991 ISTOP = MIN( K2( KI ), I-1 )
993.EQ.
IF( MOD( ISTART-1, HBL )HBL-2 ) THEN
994.EQ..AND.
IF( ( RIGHTICURCOL( KI ) )
995.GT..AND..LE.
$ ( NPROW1 ) ( ISTARTISTOP ) ) THEN
996 JJ = MOD( ICURROW( KI )+NPROW-1, NPROW )
997.NE.
IF( MYROWJJ ) THEN
998 CALL DGEBR2D( CONTXT, 'col
', ' ',
999 $ 3*( ISTOP-ISTART+1 ), 1,
1000 $ WORK( VECSIDX+( ISTART-1 )*3+1 ),
1001 $ 3*( ISTOP-ISTART+1 ), JJ, MYCOL )
1003 CALL DGEBS2D( CONTXT, 'col
', ' ',
1004 $ 3*( ISTOP-ISTART+1 ), 1,
1005 $ WORK( VECSIDX+( ISTART-1 )*3+1 ),
1006 $ 3*( ISTOP-ISTART+1 ) )
1011.EQ..AND..GT..AND.
IF( ( MYCOLICURCOL( KI ) ) ( NPROW1 )
1012.LE.
$ ( ISTARTISTOP ) ) THEN
1013.NE.
IF( MYROWICURROW( KI ) ) THEN
1014 CALL DGEBR2D( CONTXT, 'col
', ' ',
1015 $ 3*( ISTOP-ISTART+1 ), 1,
1016 $ WORK( VECSIDX+( ISTART-1 )*3+1 ),
1017 $ 3*( ISTOP-ISTART+1 ), ICURROW( KI ),
1020 CALL DGEBS2D( CONTXT, 'col
', ' ',
1021 $ 3*( ISTOP-ISTART+1 ), 1,
1022 $ WORK( VECSIDX+( ISTART-1 )*3+1 ),
1023 $ 3*( ISTOP-ISTART+1 ) )
1030 DO 150 KI = 1, IBULGE
1031 ISTART = MAX( K1( KI ), M )
1032 ISTOP = MIN( K2( KI ), I-1 )
1034 MODKM1 = MOD( ISTART-1, HBL )
1035.EQ..AND.
IF( ( MYROWICURROW( KI ) )
1036.EQ..AND.
$ ( MYCOLICURCOL( KI ) )
1037.EQ..AND..LT.
$ ( MODKM1HBL-2 ) ( ISTARTI-1 ) ) THEN
1042 NR = MIN( 3, I-K+1 )
1043 V2 = WORK( VECSIDX+( K-1 )*3+1 )
1044 V3 = WORK( VECSIDX+( K-1 )*3+2 )
1045 T1 = WORK( VECSIDX+( K-1 )*3+3 )
1053 ITMP1 = MIN( 6, I2+2-K )
1054 ITMP2 = MAX( I1-K+2, 1 )
1056 SUM = SMALLA( 2, J, KI ) +
1057 $ V2*SMALLA( 3, J, KI ) +
1058 $ V3*SMALLA( 4, J, KI )
1059 SMALLA( 2, J, KI ) = SMALLA( 2, J, KI ) - SUM*T1
1060 SMALLA( 3, J, KI ) = SMALLA( 3, J, KI ) - SUM*T2
1061 SMALLA( 4, J, KI ) = SMALLA( 4, J, KI ) - SUM*T3
1064 SUM = SMALLA( J, 2, KI ) +
1065 $ V2*SMALLA( J, 3, KI ) +
1066 $ V3*SMALLA( J, 4, KI )
1067 SMALLA( J, 2, KI ) = SMALLA( J, 2, KI ) - SUM*T1
1068 SMALLA( J, 3, KI ) = SMALLA( J, 3, KI ) - SUM*T2
1069 SMALLA( J, 4, KI ) = SMALLA( J, 4, KI ) - SUM*T3
1074.EQ..AND.
IF( ( MOD( ISTART-1, HBL )HBL-1 )
1075.LE..AND.
$ ( ISTARTISTOP )
1076.EQ..AND.
$ ( MYROWICURROW( KI ) )
1077.EQ.
$ ( MYCOLICURCOL( KI ) ) ) THEN
1082 NR = MIN( 3, I-K+1 )
1083 V2 = WORK( VECSIDX+( K-1 )*3+1 )
1084 V3 = WORK( VECSIDX+( K-1 )*3+2 )
1085 T1 = WORK( VECSIDX+( K-1 )*3+3 )
1093 ITMP1 = MIN( 6, I2-K+3 )
1094 ITMP2 = MAX( I1-K+3, 1 )
1096 SUM = SMALLA( 3, J, KI ) +
1097 $ V2*SMALLA( 4, J, KI ) +
1098 $ V3*SMALLA( 5, J, KI )
1099 SMALLA( 3, J, KI ) = SMALLA( 3, J, KI ) - SUM*T1
1100 SMALLA( 4, J, KI ) = SMALLA( 4, J, KI ) - SUM*T2
1101 SMALLA( 5, J, KI ) = SMALLA( 5, J, KI ) - SUM*T3
1104 SUM = SMALLA( J, 3, KI ) +
1105 $ V2*SMALLA( J, 4, KI ) +
1106 $ V3*SMALLA( J, 5, KI )
1107 SMALLA( J, 3, KI ) = SMALLA( J, 3, KI ) - SUM*T1
1108 SMALLA( J, 4, KI ) = SMALLA( J, 4, KI ) - SUM*T2
1109 SMALLA( J, 5, KI ) = SMALLA( J, 5, KI ) - SUM*T3
1114 MODKM1 = MOD( ISTART-1, HBL )
1115.EQ..AND.
IF( ( MYROWICURROW( KI ) )
1116.EQ..AND.
$ ( MYCOLICURCOL( KI ) )
1117.EQ..AND..EQ.
$ ( ( ( MODKM1HBL-2 ) ( ISTARTI-
1118.OR..LT..AND..LE.
$ 1 ) ) ( ( MODKM1HBL-2 ) ( ISTARTI-
1124 ICOL1 = LOCALK2( KI )
1125 DO 140 K = ISTART, ISTOP
1129 NR = MIN( 3, I-K+1 )
1130 V2 = WORK( VECSIDX+( K-1 )*3+1 )
1131 V3 = WORK( VECSIDX+( K-1 )*3+2 )
1132 T1 = WORK( VECSIDX+( K-1 )*3+3 )
1133.LT.
IF( KISTOP ) THEN
1139 CALL DLAREF( 'col
', A, LDA, .FALSE., Z, LDZ,
1140 $ .FALSE., ICOL1, ICOL1, ISTART,
1141 $ ISTOP, MIN( ISTART+1, I )-K+IROW1,
1142 $ IROW1, LILOZ, LIHIZ,
1143 $ WORK( VECSIDX+1 ), V2, V3, T1, T2,
1148.EQ..AND.
IF( ( NR3 ) ( MOD( K-1,
1149.LT.
$ HBL )HBL-2 ) ) THEN
1152 CALL DLAREF( 'row
', A, LDA, .FALSE., Z, LDZ,
1153 $ .FALSE., IROW1, IROW1, ISTART,
1154 $ ISTOP, ICOL1, MIN( MIN( K2( KI )
1155 $ +1, I-1 ), I2 )-K+ICOL1, LILOZ,
1156 $ LIHIZ, WORK( VECSIDX+1 ), V2,
1166 MODKM1 = MOD( K-1, HBL )
1167.GE..AND..LE.
IF( ( MODKM1HBL-2 ) ( KI-1 ) ) THEN
1168.EQ..AND..LT.
IF( ( MODKM1HBL-2 ) ( KI-1 ) ) THEN
1172 CALL INFOG2L( K+2, K+2, DESCA, NPROW, NPCOL, MYROW,
1173 $ MYCOL, IROW1, ICOL1, ITMP1, ITMP2 )
1174 CALL PDLACP3( MIN( 6, N-K+2 ), K-1, A, DESCA,
1175 $ SMALLA( 1, 1, KI ), 6, ITMP1, ITMP2,
1179.EQ.
IF( MODKM1HBL-1 ) THEN
1183 CALL INFOG2L( K+1, K+1, DESCA, NPROW, NPCOL, MYROW,
1184 $ MYCOL, IROW1, ICOL1, ITMP1, ITMP2 )
1185 CALL PDLACP3( MIN( 6, N-K+3 ), K-2, A, DESCA,
1186 $ SMALLA( 1, 1, KI ), 6, ITMP1, ITMP2,
1195 DO 160 KI = 1, IBULGE
1196.NE..AND.
IF( ( MYROWICURROW( KI ) )
1197.NE.
$ ( DOWNICURROW( KI ) ) )GO TO 160
1198 ISTART = MAX( K1( KI ), M )
1199 ISTOP = MIN( K2( KI ), I-1 )
1201.GT..AND.
IF( ( ISTOPISTART )
1202.LT..AND.
$ ( MOD( ISTART-1, HBL )HBL-2 )
1203.EQ.
$ ( ICURROW( KI )MYROW ) ) THEN
1204 IROW1 = MIN( K2( KI )+1, I-1 ) + 1
1205 CALL INFOG1L( IROW1, HBL, NPCOL, MYCOL, 0, ITMP1,
1207 ITMP2 = NUMROC( I2, HBL, MYCOL, 0, NPCOL )
1209 CALL DLAREF( 'row
', A, LDA, WANTZ, Z, LDZ, .TRUE., II,
1210 $ II, ISTART, ISTOP, ITMP1, ITMP2, LILOZ,
1211 $ LIHIZ, WORK( VECSIDX+1 ), V2, V3, T1, T2,
1216 DO 180 KI = 1, IBULGE
1217.GT.
IF( KROW( KI )KP2ROW( KI ) )
1219.NE..AND.
IF( ( MYROWICURROW( KI ) )
1220.NE.
$ ( DOWNICURROW( KI ) ) )GO TO 180
1221 ISTART = MAX( K1( KI ), M )
1222 ISTOP = MIN( K2( KI ), I-1 )
1223.EQ..OR.
IF( ( ISTARTISTOP )
1224.GE..OR.
$ ( MOD( ISTART-1, HBL )HBL-2 )
1225.NE.
$ ( ICURROW( KI )MYROW ) ) THEN
1226 DO 170 K = ISTART, ISTOP
1227 V2 = WORK( VECSIDX+( K-1 )*3+1 )
1228 V3 = WORK( VECSIDX+( K-1 )*3+2 )
1229 T1 = WORK( VECSIDX+( K-1 )*3+3 )
1230 NR = MIN( 3, I-K+1 )
1231.EQ..AND..LE.
IF( ( NR3 ) ( KROW( KI )
1232 $ KP2ROW( KI ) ) ) THEN
1233.LT..AND.
IF( ( KISTOP )
1234.LT.
$ ( MOD( K-1, HBL )HBL-2 ) ) THEN
1235 ITMP1 = MIN( K2( KI )+1, I-1 ) + 1
1237.LT.
IF( MOD( K-1, HBL )HBL-2 ) THEN
1238 ITMP1 = MIN( K2( KI )+1, I-1 ) + 1
1240.EQ.
IF( MOD( K-1, HBL )HBL-2 ) THEN
1241 ITMP1 = MIN( K+4, I2 ) + 1
1243.EQ.
IF( MOD( K-1, HBL )HBL-1 ) THEN
1244 ITMP1 = MIN( K+3, I2 ) + 1
1251 IROW2 = KP2ROW( KI )
1252 CALL INFOG1L( ITMP1, HBL, NPCOL, MYCOL, 0,
1254 ICOL2 = NUMROC( I2, HBL, MYCOL, 0, NPCOL )
1255.LT..OR.
IF( ( MOD( K-1, HBL )HBL-2 )
1256.EQ.
$ ( NPROW1 ) ) THEN
1259 CALL DLAREF( 'row
', A, LDA, WANTZ, Z, LDZ,
1260 $ .FALSE., IROW1, IROW1, ISTART,
1261 $ ISTOP, ICOL1, ICOL2, LILOZ,
1262 $ LIHIZ, WORK( VECSIDX+1 ), V2,
1265.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-2 )
1266.GT.
$ ( NPROW1 ) ) THEN
1267.EQ.
IF( IROW1IROW2 ) THEN
1268 CALL DGESD2D( CONTXT, 1, ICOL2-ICOL1+1,
1269 $ A( ( ICOL1-1 )*LDA+IROW2 ),
1273.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-1 )
1274.GT.
$ ( NPROW1 ) ) THEN
1275.EQ.
IF( IROW1IROW2 ) THEN
1276 CALL DGESD2D( CONTXT, 1, ICOL2-ICOL1+1,
1277 $ A( ( ICOL1-1 )*LDA+IROW1 ),
1278 $ LDA, DOWN, MYCOL )
1286 DO 220 KI = 1, IBULGE
1287.GT.
IF( KROW( KI )KP2ROW( KI ) )
1289.NE..AND.
IF( ( MYROWICURROW( KI ) )
1290.NE.
$ ( DOWNICURROW( KI ) ) )GO TO 220
1291 ISTART = MAX( K1( KI ), M )
1292 ISTOP = MIN( K2( KI ), I-1 )
1293.EQ..OR.
IF( ( ISTARTISTOP )
1294.GE..OR.
$ ( MOD( ISTART-1, HBL )HBL-2 )
1295.NE.
$ ( ICURROW( KI )MYROW ) ) THEN
1296 DO 210 K = ISTART, ISTOP
1297 V2 = WORK( VECSIDX+( K-1 )*3+1 )
1298 V3 = WORK( VECSIDX+( K-1 )*3+2 )
1299 T1 = WORK( VECSIDX+( K-1 )*3+3 )
1300 NR = MIN( 3, I-K+1 )
1301.EQ..AND..LE.
IF( ( NR3 ) ( KROW( KI )
1302 $ KP2ROW( KI ) ) ) THEN
1303.LT..AND.
IF( ( KISTOP )
1304.LT.
$ ( MOD( K-1, HBL )HBL-2 ) ) THEN
1305 ITMP1 = MIN( K2( KI )+1, I-1 ) + 1
1307.LT.
IF( MOD( K-1, HBL )HBL-2 ) THEN
1308 ITMP1 = MIN( K2( KI )+1, I-1 ) + 1
1310.EQ.
IF( MOD( K-1, HBL )HBL-2 ) THEN
1311 ITMP1 = MIN( K+4, I2 ) + 1
1313.EQ.
IF( MOD( K-1, HBL )HBL-1 ) THEN
1314 ITMP1 = MIN( K+3, I2 ) + 1
1318 IROW1 = KROW( KI ) + K - ISTART
1319 IROW2 = KP2ROW( KI ) + K - ISTART
1320 CALL INFOG1L( ITMP1, HBL, NPCOL, MYCOL, 0,
1322 ICOL2 = NUMROC( I2, HBL, MYCOL, 0, NPCOL )
1323.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-2 )
1324.GT.
$ ( NPROW1 ) ) THEN
1325.NE.
IF( IROW1IROW2 ) THEN
1326 CALL DGERV2D( CONTXT, 1, ICOL2-ICOL1+1,
1327 $ WORK( IRBUF+1 ), 1, DOWN,
1331 DO 190 J = ICOL1, ICOL2
1332 SUM = A( ( J-1 )*LDA+IROW1 ) +
1333 $ V2*A( ( J-1 )*LDA+IROW1+1 ) +
1334 $ V3*WORK( IRBUF+J-ICOL1+1 )
1335 A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*
1336 $ LDA+IROW1 ) - SUM*T1
1337 A( ( J-1 )*LDA+IROW1+1 ) = A( ( J-1 )*
1338 $ LDA+IROW1+1 ) - SUM*T2
1339 WORK( IRBUF+J-ICOL1+1 ) = WORK( IRBUF+
1340 $ J-ICOL1+1 ) - SUM*T3
1342 CALL DGESD2D( CONTXT, 1, ICOL2-ICOL1+1,
1343 $ WORK( IRBUF+1 ), 1, DOWN,
1347.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-1 )
1348.GT.
$ ( NPROW1 ) ) THEN
1349.NE.
IF( IROW1IROW2 ) THEN
1350 CALL DGERV2D( CONTXT, 1, ICOL2-ICOL1+1,
1351 $ WORK( IRBUF+1 ), 1, UP,
1355 DO 200 J = ICOL1, ICOL2
1356 SUM = WORK( IRBUF+J-ICOL1+1 ) +
1357 $ V2*A( ( J-1 )*LDA+IROW1 ) +
1358 $ V3*A( ( J-1 )*LDA+IROW1+1 )
1359 WORK( IRBUF+J-ICOL1+1 ) = WORK( IRBUF+
1360 $ J-ICOL1+1 ) - SUM*T1
1361 A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*
1362 $ LDA+IROW1 ) - SUM*T2
1363 A( ( J-1 )*LDA+IROW1+1 ) = A( ( J-1 )*
1364 $ LDA+IROW1+1 ) - SUM*T3
1366 CALL DGESD2D( CONTXT, 1, ICOL2-ICOL1+1,
1367 $ WORK( IRBUF+1 ), 1, UP,
1376 DO 240 KI = 1, IBULGE
1377.GT.
IF( KROW( KI )KP2ROW( KI ) )
1379.NE..AND.
IF( ( MYROWICURROW( KI ) )
1380.NE.
$ ( DOWNICURROW( KI ) ) )GO TO 240
1381 ISTART = MAX( K1( KI ), M )
1382 ISTOP = MIN( K2( KI ), I-1 )
1383.EQ..OR.
IF( ( ISTARTISTOP )
1384.GE..OR.
$ ( MOD( ISTART-1, HBL )HBL-2 )
1385.NE.
$ ( ICURROW( KI )MYROW ) ) THEN
1386 DO 230 K = ISTART, ISTOP
1387 V2 = WORK( VECSIDX+( K-1 )*3+1 )
1388 V3 = WORK( VECSIDX+( K-1 )*3+2 )
1389 T1 = WORK( VECSIDX+( K-1 )*3+3 )
1390 NR = MIN( 3, I-K+1 )
1391.EQ..AND..LE.
IF( ( NR3 ) ( KROW( KI )
1392 $ KP2ROW( KI ) ) ) THEN
1393.LT..AND.
IF( ( KISTOP )
1394.LT.
$ ( MOD( K-1, HBL )HBL-2 ) ) THEN
1395 ITMP1 = MIN( K2( KI )+1, I-1 ) + 1
1397.LT.
IF( MOD( K-1, HBL )HBL-2 ) THEN
1398 ITMP1 = MIN( K2( KI )+1, I-1 ) + 1
1400.EQ.
IF( MOD( K-1, HBL )HBL-2 ) THEN
1401 ITMP1 = MIN( K+4, I2 ) + 1
1403.EQ.
IF( MOD( K-1, HBL )HBL-1 ) THEN
1404 ITMP1 = MIN( K+3, I2 ) + 1
1408 IROW1 = KROW( KI ) + K - ISTART
1409 IROW2 = KP2ROW( KI ) + K - ISTART
1410 CALL INFOG1L( ITMP1, HBL, NPCOL, MYCOL, 0,
1412 ICOL2 = NUMROC( I2, HBL, MYCOL, 0, NPCOL )
1413.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-2 )
1414.GT.
$ ( NPROW1 ) ) THEN
1415.EQ.
IF( IROW1IROW2 ) THEN
1416 CALL DGERV2D( CONTXT, 1, ICOL2-ICOL1+1,
1417 $ A( ( ICOL1-1 )*LDA+IROW2 ),
1421.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-1 )
1422.GT.
$ ( NPROW1 ) ) THEN
1423.EQ.
IF( IROW1IROW2 ) THEN
1424 CALL DGERV2D( CONTXT, 1, ICOL2-ICOL1+1,
1425 $ A( ( ICOL1-1 )*LDA+IROW1 ),
1426 $ LDA, DOWN, MYCOL )
1437 DO 260 KI = 1, IBULGE
1438.NE..AND.
IF( ( MYCOLICURCOL( KI ) )
1439.NE.
$ ( RIGHTICURCOL( KI ) ) )GO TO 260
1440 ISTART = MAX( K1( KI ), M )
1441 ISTOP = MIN( K2( KI ), I-1 )
1443.LT..OR..EQ.
IF( ( ( MOD( ISTART-1, HBL )HBL-2 ) ( NPCOL
1444.AND..EQ..AND.
$ 1 ) ) ( ICURCOL( KI )MYCOL )
1445.GE.
$ ( I-ISTOP+13 ) ) THEN
1447.LT..AND.
IF( ( KISTOP ) ( MOD( K-1,
1448.LT.
$ HBL )HBL-2 ) ) THEN
1449 ITMP1 = MIN( ISTART+1, I ) - 1
1451.LT.
IF( MOD( K-1, HBL )HBL-2 ) THEN
1452 ITMP1 = MIN( K+3, I )
1454.EQ.
IF( MOD( K-1, HBL )HBL-2 ) THEN
1455 ITMP1 = MAX( I1, K-1 ) - 1
1457.EQ.
IF( MOD( K-1, HBL )HBL-1 ) THEN
1458 ITMP1 = MAX( I1, K-2 ) - 1
1463 CALL INFOG1L( I1, HBL, NPROW, MYROW, 0, IROW1, IROW2 )
1464 IROW2 = NUMROC( ITMP1, HBL, MYROW, 0, NPROW )
1465.LE.
IF( IROW1IROW2 ) THEN
1470 CALL DLAREF( 'col
', A, LDA, WANTZ, Z, LDZ, .TRUE.,
1471 $ ICOL1, ICOL1, ISTART, ISTOP, IROW1,
1472 $ IROW2, LILOZ, LIHIZ, WORK( VECSIDX+1 ),
1473 $ V2, V3, T1, T2, T3 )
1475.LT.
IF( MOD( K-1, HBL )HBL-2 ) THEN
1479.LT.
IF( MOD( K-1, HBL )HBL-3 ) THEN
1481.EQ.
IF( MOD( ( ITMP1 / HBL ), NPROW )MYROW )
1483.GT.
IF( ITMP20 ) THEN
1484 IROW2 = ITMP2 + MIN( K+3, I ) - ITMP1
1492 CALL INFOG1L( ITMP1+1, HBL, NPROW, MYROW, 0,
1494 IROW2 = NUMROC( MIN( K+3, I ), HBL, MYROW, 0,
1497 V2 = WORK( VECSIDX+( K-1 )*3+1 )
1498 V3 = WORK( VECSIDX+( K-1 )*3+2 )
1499 T1 = WORK( VECSIDX+( K-1 )*3+3 )
1502 ICOL1 = KCOL( KI ) + ISTOP - ISTART
1503 CALL DLAREF( 'col
', A, LDA, .FALSE., Z, LDZ,
1504 $ .FALSE., ICOL1, ICOL1, ISTART, ISTOP,
1505 $ IROW1, IROW2, LILOZ, LIHIZ,
1506 $ WORK( VECSIDX+1 ), V2, V3, T1, T2,
1512 DO 320 KI = 1, IBULGE
1513.GT.
IF( KCOL( KI )KP2COL( KI ) )
1515.NE..AND.
IF( ( MYCOLICURCOL( KI ) )
1516.NE.
$ ( RIGHTICURCOL( KI ) ) )GO TO 320
1517 ISTART = MAX( K1( KI ), M )
1518 ISTOP = MIN( K2( KI ), I-1 )
1519.GE.
IF( MOD( ISTART-1, HBL )HBL-2 ) THEN
1531 DO 310 K = ISTART, ISTOP
1533 V2 = WORK( VECSIDX+( K-1 )*3+1 )
1534 V3 = WORK( VECSIDX+( K-1 )*3+2 )
1535 T1 = WORK( VECSIDX+( K-1 )*3+3 )
1536 NR = MIN( 3, I-K+1 )
1537.EQ..AND..LE.
IF( ( NR3 ) ( KCOL( KI )KP2COL( KI ) ) )
1540.LT..AND.
IF( ( KISTOP )
1541.LT.
$ ( MOD( K-1, HBL )HBL-2 ) ) THEN
1542 ITMP1 = MIN( ISTART+1, I ) - 1
1544.LT.
IF( MOD( K-1, HBL )HBL-2 ) THEN
1545 ITMP1 = MIN( K+3, I )
1547.EQ.
IF( MOD( K-1, HBL )HBL-2 ) THEN
1548 ITMP1 = MAX( I1, K-1 ) - 1
1550.EQ.
IF( MOD( K-1, HBL )HBL-1 ) THEN
1551 ITMP1 = MAX( I1, K-2 ) - 1
1554 ICOL1 = KCOL( KI ) + K - ISTART
1555 ICOL2 = KP2COL( KI ) + K - ISTART
1556 CALL INFOG1L( I1, HBL, NPROW, MYROW, 0, IROW1,
1558 IROW2 = NUMROC( ITMP1, HBL, MYROW, 0, NPROW )
1559.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-2 )
1560.GT.
$ ( NPCOL1 ) ) THEN
1561.EQ.
IF( ICOL1ICOL2 ) THEN
1562 CALL DGESD2D( CONTXT, IROW2-IROW1+1, 1,
1563 $ A( ( ICOL1-1 )*LDA+IROW1 ),
1564 $ LDA, MYROW, LEFT )
1565 CALL DGERV2D( CONTXT, IROW2-IROW1+1, 1,
1566 $ A( ( ICOL1-1 )*LDA+IROW1 ),
1567 $ LDA, MYROW, LEFT )
1569 CALL DGERV2D( CONTXT, IROW2-IROW1+1, 1,
1570 $ WORK( ICBUF+1 ), IROW2-IROW1+1,
1574 DO 270 J = IROW1, IROW2
1575 SUM = A( ( ICOL1-1 )*LDA+J ) +
1576 $ V2*A( ICOL1*LDA+J ) +
1577 $ V3*WORK( ICBUF+J-IROW1+1 )
1578 A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*
1580 A( ICOL1*LDA+J ) = A( ICOL1*LDA+J ) -
1582 WORK( ICBUF+J-IROW1+1 ) = WORK( ICBUF+J-
1583 $ IROW1+1 ) - SUM*T3
1585 CALL DGESD2D( CONTXT, IROW2-IROW1+1, 1,
1586 $ WORK( ICBUF+1 ), IROW2-IROW1+1,
1590.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-1 )
1591.GT.
$ ( NPCOL1 ) ) THEN
1592.EQ.
IF( ICOL1ICOL2 ) THEN
1593 CALL DGESD2D( CONTXT, IROW2-IROW1+1, 1,
1594 $ A( ( ICOL1-1 )*LDA+IROW1 ),
1595 $ LDA, MYROW, RIGHT )
1596 CALL DGERV2D( CONTXT, IROW2-IROW1+1, 1,
1597 $ A( ( ICOL1-1 )*LDA+IROW1 ),
1598 $ LDA, MYROW, RIGHT )
1600 CALL DGERV2D( CONTXT, IROW2-IROW1+1, 1,
1601 $ WORK( ICBUF+1 ), IROW2-IROW1+1,
1605 DO 280 J = IROW1, IROW2
1606 SUM = WORK( ICBUF+J-IROW1+1 ) +
1607 $ V2*A( ( ICOL1-1 )*LDA+J ) +
1608 $ V3*A( ICOL1*LDA+J )
1609 WORK( ICBUF+J-IROW1+1 ) = WORK( ICBUF+J-
1610 $ IROW1+1 ) - SUM*T1
1611 A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*
1613 A( ICOL1*LDA+J ) = A( ICOL1*LDA+J ) -
1616 CALL DGESD2D( CONTXT, IROW2-IROW1+1, 1,
1617 $ WORK( ICBUF+1 ), IROW2-IROW1+1,
1623.AND.
IF( ( WANTZ ) ( MOD( K-1,
1624.GE..AND..GT.
$ HBL )HBL-2 ) ( NPCOL1 ) ) THEN
1630.EQ.
IF( MOD( K-1, HBL )HBL-2 ) THEN
1631.EQ.
IF( ICOL1ICOL2 ) THEN
1632 CALL DGESD2D( CONTXT, IROW2-IROW1+1, 1,
1633 $ Z( ( ICOL1-1 )*LDZ+IROW1 ),
1634 $ LDZ, MYROW, LEFT )
1635 CALL DGERV2D( CONTXT, IROW2-IROW1+1, 1,
1636 $ Z( ( ICOL1-1 )*LDZ+IROW1 ),
1637 $ LDZ, MYROW, LEFT )
1639 CALL DGERV2D( CONTXT, IROW2-IROW1+1, 1,
1641 $ IROW2-IROW1+1, MYROW,
1645 ICOL1 = ( ICOL1-1 )*LDZ
1646 DO 290 J = IROW1, IROW2
1647 SUM = Z( ICOL1+J ) +
1648 $ V2*Z( ICOL1+J+LDZ ) +
1649 $ V3*WORK( ICBUF+J-IROW1+1 )
1650 Z( J+ICOL1 ) = Z( J+ICOL1 ) - SUM*T1
1651 Z( J+ICOL1+LDZ ) = Z( J+ICOL1+LDZ ) -
1653 WORK( ICBUF+J-IROW1+1 ) = WORK( ICBUF+
1654 $ J-IROW1+1 ) - SUM*T3
1656 CALL DGESD2D( CONTXT, IROW2-IROW1+1, 1,
1658 $ IROW2-IROW1+1, MYROW,
1662.EQ.
IF( MOD( K-1, HBL )HBL-1 ) THEN
1663.EQ.
IF( ICOL1ICOL2 ) THEN
1664 CALL DGESD2D( CONTXT, IROW2-IROW1+1, 1,
1665 $ Z( ( ICOL1-1 )*LDZ+IROW1 ),
1666 $ LDZ, MYROW, RIGHT )
1667 CALL DGERV2D( CONTXT, IROW2-IROW1+1, 1,
1668 $ Z( ( ICOL1-1 )*LDZ+IROW1 ),
1669 $ LDZ, MYROW, RIGHT )
1671 CALL DGERV2D( CONTXT, IROW2-IROW1+1, 1,
1673 $ IROW2-IROW1+1, MYROW, LEFT )
1676 ICOL1 = ( ICOL1-1 )*LDZ
1677 DO 300 J = IROW1, IROW2
1678 SUM = WORK( ICBUF+J-IROW1+1 ) +
1680 $ V3*Z( J+ICOL1+LDZ )
1681 WORK( ICBUF+J-IROW1+1 ) = WORK( ICBUF+
1682 $ J-IROW1+1 ) - SUM*T1
1683 Z( J+ICOL1 ) = Z( J+ICOL1 ) - SUM*T2
1684 Z( J+ICOL1+LDZ ) = Z( J+ICOL1+LDZ ) -
1687 CALL DGESD2D( CONTXT, IROW2-IROW1+1, 1,
1689 $ IROW2-IROW1+1, MYROW, LEFT )
1693.EQ.
IF( ICURCOL( KI )MYCOL ) THEN
1694.EQ..OR..EQ.
IF( ( ISPEC0 ) ( NPCOL1 ) ) THEN
1695 LOCALK2( KI ) = LOCALK2( KI ) + 1
1698.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-1 )
1699.EQ.
$ ( ICURCOL( KI )RIGHT ) ) THEN
1701 LOCALK2( KI ) = LOCALK2( KI ) + 2
1703 LOCALK2( KI ) = LOCALK2( KI ) + 1
1706.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-2 )
1707.EQ..AND..EQ.
$ ( I-K2 ) ( ICURCOL( KI )
1709 LOCALK2( KI ) = LOCALK2( KI ) + 2
1722 DO 410 KI = 1, IBULGE
1723 ISTART = MAX( K1( KI ), M )
1724 ISTOP = MIN( K2( KI ), I-1 )
1725.GE.
IF( MOD( ISTART-1, HBL )HBL-2 ) THEN
1737 DO 400 K = ISTART, ISTOP
1739 V2 = WORK( VECSIDX+( K-1 )*3+1 )
1740 V3 = WORK( VECSIDX+( K-1 )*3+2 )
1741 T1 = WORK( VECSIDX+( K-1 )*3+3 )
1742 NR = MIN( 3, I-K+1 )
1744.EQ.
IF ( ICURROW( KI )MYROW ) THEN
1747.EQ.
IF ( ICURCOL( KI )MYCOL ) THEN
1754 CALL INFOG1L( K, HBL, NPCOL, MYCOL, 0, LILOH,
1756 LIHIH = NUMROC( I2, HBL, MYCOL, 0, NPCOL )
1757 CALL INFOG1L( 1, HBL, NPROW, MYROW, 0, ITMP2,
1759 ITMP1 = NUMROC( K+1, HBL, MYROW, 0, NPROW )
1760.EQ.
IF( ICURROW( KI )MYROW ) THEN
1761.EQ..OR..EQ..OR.
IF( ( ISPEC0 ) ( NPROW1 )
1762.EQ.
$ ( MOD( K-1, HBL )HBL-2 ) ) THEN
1764 DO 340 J = ( LILOH-1 )*LDA,
1765 $ ( LIHIH-1 )*LDA, LDA
1766 SUM = A( ITMP1+J ) + V2*A( ITMP1+1+J )
1767 A( ITMP1+J ) = A( ITMP1+J ) - SUM*T1
1768 A( ITMP1+1+J ) = A( ITMP1+1+J ) - SUM*T2
1771.EQ.
IF( MOD( K-1, HBL )HBL-1 ) THEN
1772 CALL DGERV2D( CONTXT, 1, LIHIH-LILOH+1,
1773 $ WORK( IRBUF+1 ), 1, UP,
1775 DO 350 J = LILOH, LIHIH
1776 SUM = WORK( IRBUF+J-LILOH+1 ) +
1777 $ V2*A( ( J-1 )*LDA+ITMP1 )
1778 WORK( IRBUF+J-LILOH+1 ) = WORK( IRBUF+
1779 $ J-LILOH+1 ) - SUM*T1
1780 A( ( J-1 )*LDA+ITMP1 ) = A( ( J-1 )*
1781 $ LDA+ITMP1 ) - SUM*T2
1783 CALL DGESD2D( CONTXT, 1, LIHIH-LILOH+1,
1784 $ WORK( IRBUF+1 ), 1, UP,
1789.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-1 )
1790.EQ.
$ ( ICURROW( KI )DOWN ) ) THEN
1791 CALL DGESD2D( CONTXT, 1, LIHIH-LILOH+1,
1792 $ A( ( LILOH-1 )*LDA+ITMP1 ),
1793 $ LDA, DOWN, MYCOL )
1794 CALL DGERV2D( CONTXT, 1, LIHIH-LILOH+1,
1795 $ A( ( LILOH-1 )*LDA+ITMP1 ),
1796 $ LDA, DOWN, MYCOL )
1803 CALL INFOG1L( I1, HBL, NPROW, MYROW, 0, LILOH,
1805 LIHIH = NUMROC( I, HBL, MYROW, 0, NPROW )
1807.EQ.
IF( ICURCOL( KI )MYCOL ) THEN
1809.EQ..OR..EQ..OR.
IF( ( ISPEC0 ) ( NPCOL1 )
1810.EQ.
$ ( MOD( K-1, HBL )HBL-2 ) ) THEN
1811 CALL INFOG1L( K, HBL, NPCOL, MYCOL, 0, ITMP1,
1813 ITMP2 = NUMROC( K+1, HBL, MYCOL, 0, NPCOL )
1814 DO 360 J = LILOH, LIHIH
1815 SUM = A( ( ITMP1-1 )*LDA+J ) +
1816 $ V2*A( ITMP1*LDA+J )
1817 A( ( ITMP1-1 )*LDA+J ) = A( ( ITMP1-1 )*
1819 A( ITMP1*LDA+J ) = A( ITMP1*LDA+J ) -
1823 ITMP1 = LOCALK2( KI )
1824.EQ.
IF( MOD( K-1, HBL )HBL-1 ) THEN
1825 CALL DGERV2D( CONTXT, LIHIH-LILOH+1, 1,
1827 $ LIHIH-LILOH+1, MYROW, LEFT )
1828 DO 370 J = LILOH, LIHIH
1829 SUM = WORK( ICBUF+J ) +
1830 $ V2*A( ( ITMP1-1 )*LDA+J )
1831 WORK( ICBUF+J ) = WORK( ICBUF+J ) -
1833 A( ( ITMP1-1 )*LDA+J )
1834 $ = A( ( ITMP1-1 )*LDA+J ) - SUM*T2
1836 CALL DGESD2D( CONTXT, LIHIH-LILOH+1, 1,
1838 $ LIHIH-LILOH+1, MYROW, LEFT )
1842.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-1 )
1843.EQ.
$ ( ICURCOL( KI )RIGHT ) ) THEN
1845 CALL DGESD2D( CONTXT, LIHIH-LILOH+1, 1,
1846 $ A( ( ITMP1-1 )*LDA+LILOH ),
1847 $ LDA, MYROW, RIGHT )
1848 CALL INFOG1L( K, HBL, NPCOL, MYCOL, 0, ITMP1,
1850 ITMP2 = NUMROC( K+1, HBL, MYCOL, 0, NPCOL )
1851 CALL DGERV2D( CONTXT, LIHIH-LILOH+1, 1,
1852 $ A( ( ITMP1-1 )*LDA+LILOH ),
1853 $ LDA, MYROW, RIGHT )
1861.EQ.
IF( ICURCOL( KI )MYCOL ) THEN
1863.EQ..OR..EQ..OR.
IF( ( ISPEC0 ) ( NPCOL1 )
1864.EQ.
$ ( MOD( K-1, HBL )HBL-2 ) ) THEN
1865 ITMP1 = KCOL( KI ) + K - ISTART
1866 ITMP1 = ( ITMP1-1 )*LDZ
1867 DO 380 J = LILOZ, LIHIZ
1868 SUM = Z( J+ITMP1 ) +
1869 $ V2*Z( J+ITMP1+LDZ )
1870 Z( J+ITMP1 ) = Z( J+ITMP1 ) - SUM*T1
1871 Z( J+ITMP1+LDZ ) = Z( J+ITMP1+LDZ ) -
1874 LOCALK2( KI ) = LOCALK2( KI ) + 1
1876 ITMP1 = LOCALK2( KI )
1878.EQ.
IF( MOD( K-1, HBL )HBL-1 ) THEN
1879 CALL DGERV2D( CONTXT, LIHIZ-LILOZ+1, 1,
1880 $ WORK( ICBUF+1 ), LDZ,
1882 ITMP1 = ( ITMP1-1 )*LDZ
1883 DO 390 J = LILOZ, LIHIZ
1884 SUM = WORK( ICBUF+J ) +
1886 WORK( ICBUF+J ) = WORK( ICBUF+J ) -
1888 Z( J+ITMP1 ) = Z( J+ITMP1 ) - SUM*T2
1890 CALL DGESD2D( CONTXT, LIHIZ-LILOZ+1, 1,
1891 $ WORK( ICBUF+1 ), LDZ,
1893 LOCALK2( KI ) = LOCALK2( KI ) + 1
1900.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-1 )
1901.EQ.
$ ( ICURCOL( KI )RIGHT ) ) THEN
1903 ITMP1 = ( ITMP1-1 )*LDZ
1904 CALL DGESD2D( CONTXT, LIHIZ-LILOZ+1, 1,
1905 $ Z( LILOZ+ITMP1 ), LDZ,
1907 CALL DGERV2D( CONTXT, LIHIZ-LILOZ+1, 1,
1908 $ Z( LILOZ+ITMP1 ), LDZ,
1910 LOCALK2( KI ) = LOCALK2( KI ) + 1
1919.EQ.
IF( NPROW1 ) THEN
1920 KROW( KI ) = KROW( KI ) + K2( KI ) - K1( KI ) + 1
1921 KP2ROW( KI ) = KP2ROW( KI ) + K2( KI ) - K1( KI ) + 1
1923.LT..AND.
IF( ( MOD( K1( KI )-1, HBL )HBL-2 )
1924.EQ..AND..GT.
$ ( ICURROW( KI )MYROW ) ( NPROW1 ) )
1926 KROW( KI ) = KROW( KI ) + K2( KI ) - K1( KI ) + 1
1928.LT..AND.
IF( ( MOD( K2( KI ), HBL )HBL-2 )
1929.EQ..AND..GT.
$ ( ICURROW( KI )MYROW ) ( NPROW1 ) )
1931 KP2ROW( KI ) = KP2ROW( KI ) + K2( KI ) - K1( KI ) + 1
1933.GE..AND.
IF( ( MOD( K1( KI )-1, HBL )HBL-2 )
1934.EQ..OR..EQ.
$ ( ( MYROWICURROW( KI ) ) ( DOWN
1935.AND..GT.
$ ICURROW( KI ) ) ) ( NPROW1 ) ) THEN
1936 CALL INFOG1L( K2( KI )+1, HBL, NPROW, MYROW, 0,
1937 $ KROW( KI ), ITMP2 )
1938 ITMP2 = NUMROC( N, HBL, MYROW, 0, NPROW )
1940.GE..AND.
IF( ( MOD( K2( KI ), HBL )HBL-2 )
1941.EQ..OR..EQ.
$ ( ( MYROWICURROW( KI ) ) ( UP
1942.AND..GT.
$ ICURROW( KI ) ) ) ( NPROW1 ) ) THEN
1943 CALL INFOG1L( 1, HBL, NPROW, MYROW, 0, ITMP2,
1945 KP2ROW( KI ) = NUMROC( K2( KI )+3, HBL, MYROW, 0,
1948.EQ.
IF( NPCOL1 ) THEN
1949 KCOL( KI ) = KCOL( KI ) + K2( KI ) - K1( KI ) + 1
1950 KP2COL( KI ) = KP2COL( KI ) + K2( KI ) - K1( KI ) + 1
1952.LT..AND.
IF( ( MOD( K1( KI )-1, HBL )HBL-2 )
1953.EQ..AND..GT.
$ ( ICURCOL( KI )MYCOL ) ( NPCOL1 ) )
1955 KCOL( KI ) = KCOL( KI ) + K2( KI ) - K1( KI ) + 1
1957.LT..AND.
IF( ( MOD( K2( KI ), HBL )HBL-2 )
1958.EQ..AND..GT.
$ ( ICURCOL( KI )MYCOL ) ( NPCOL1 ) )
1960 KP2COL( KI ) = KP2COL( KI ) + K2( KI ) - K1( KI ) + 1
1962.GE..AND.
IF( ( MOD( K1( KI )-1, HBL )HBL-2 )
1963.EQ..OR..EQ.
$ ( ( MYCOLICURCOL( KI ) ) ( RIGHT
1964.AND..GT.
$ ICURCOL( KI ) ) ) ( NPCOL1 ) ) THEN
1965 CALL INFOG1L( K2( KI )+1, HBL, NPCOL, MYCOL, 0,
1966 $ KCOL( KI ), ITMP2 )
1967 ITMP2 = NUMROC( N, HBL, MYCOL, 0, NPCOL )
1969.GE..AND.
IF( ( MOD( K2( KI ), HBL )HBL-2 )
1970.EQ..OR..EQ.
$ ( ( MYCOLICURCOL( KI ) ) ( LEFT
1971.AND..GT.
$ ICURCOL( KI ) ) ) ( NPCOL1 ) ) THEN
1972 CALL INFOG1L( 1, HBL, NPCOL, MYCOL, 0, ITMP2,
1974 KP2COL( KI ) = NUMROC( K2( KI )+3, HBL, MYCOL, 0,
1977 K1( KI ) = K2( KI ) + 1
1978 ISTOP = MIN( K1( KI )+ROTN-MOD( K1( KI ), ROTN ), I-2 )
1979 ISTOP = MIN( ISTOP, K1( KI )+HBL-3-
1980 $ MOD( K1( KI )-1, HBL ) )
1981 ISTOP = MIN( ISTOP, I2-2 )
1982 ISTOP = MAX( ISTOP, K1( KI ) )
1985.EQ.
IF( K1( KI )ISTOP ) THEN
1986.EQ..AND.
IF( ( MOD( ISTOP-1, HBL )HBL-2 )
1987.GT.
$ ( I-ISTOP1 ) ) THEN
1991 ICURROW( KI ) = MOD( ICURROW( KI )+1, NPROW )
1992 ICURCOL( KI ) = MOD( ICURCOL( KI )+1, NPCOL )
1996.LE.
IF( K2( IBULGE )I-1 )
2013 CALL INFOG2L( I, I, DESCA, NPROW, NPCOL, MYROW, MYCOL, IROW,
2014 $ ICOL, ITMP1, ITMP2 )
2015.EQ..AND..EQ.
IF( ( MYROWITMP1 ) ( MYCOLITMP2 ) ) THEN
2016 WR( I ) = A( ( ICOL-1 )*LDA+IROW )
2021.EQ.
ELSE IF( LI-1 ) THEN
2025 CALL PDELGET( 'all
', ' ', H11, A, L, L, DESCA )
2026 CALL PDELGET( 'all',
' ', h21, a, i, l, desca )
2027 CALL pdelget(
'All',
' ', h12, a, l, i, desca )
2028 CALL pdelget(
'All',
' ', h22, a, i, i, desca )
2029 CALL dlanv2( h11, h12, h21, h22, wr( l ), wi( l ), wr( i ),
2031 IF( node .NE. 0 )
THEN
2043 CALL pdlacp3( i-l+1, l, a, desca, s1, 2*iblk, 0, 0, 0 )
2044 CALL dlahqr( .false., .false., jblk, 1, jblk, s1, 2*iblk,
2045 $ wr( l ), wi( l ), 1, jblk, z, ldz, ierr )
2046 IF( node.NE.0 )
THEN
2062 IF( m.EQ.l-10 )
THEN
2071 CALL dgsum2d( contxt,
'All',
' ', n, 1, wr, n, -1, -1 )
2072 CALL dgsum2d( contxt,
'All',
' ', n, 1, wi, n, -1, -1 )