1 SUBROUTINE pzlahqr( WANTT, WANTZ, N, ILO, IHI, A, DESCA, W, ILOZ,
2 $ IHIZ, Z, DESCZ, WORK, LWORK, IWORK, ILWORK,
14 INTEGER IHI, IHIZ, ILO, ILOZ, ILWORK, , LWORK, N
17 INTEGER DESCA( * ), DESCZ( * ), IWORK( * )
18 COMPLEX*16 A( * ), W( * ), WORK( * ), Z( * )
249 INTEGER BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, DT_,
250 $ LLD_, MB_, M_, NB_, N_, RSRC_
251 parameter( block_cyclic_2d = 1, dlen_ = 9, dt_ = 1,
252 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
253 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
254 DOUBLE PRECISION RONE
255 PARAMETER ( RONE = 1.0d+0 )
257 parameter( zero = ( 0.0d+0, 0.0d+0 ),
258 $ one = ( 1.0d+0, 0.0d+0 ) )
259 DOUBLE PRECISION CONST
260 PARAMETER ( CONST = 1.50d+0 )
262 parameter( iblk = 32 )
266 INTEGER CONTXT, DOWN, HBL, I, I1, I2, IAFIRST, IBULGE,
267 $ icbuf, icol, icol1, icol2, idia, ierr, ii,
268 $ irbuf, irow, irow1, irow2, ispec, istart,
269 $ istartcol, istartrow, istop, isub, isup,
270 $ itermax, itmp1, itmp2, itn, its, izbuf, j,
271 $ jafirst, jblk, jj, k, ki, l, lcmrc, lda, ldz,
272 $ left, lihih, lihiz, liloh, liloz, locali1,
273 $ locali2, localk, localm, m, modkm1, mycol,
274 $ myrow, nbulge, nh, node, npcol, nprow, nq, nr,
275 $ num, nz, right, rotn, up, vecsidx
276 DOUBLE PRECISION CS, OVFL, S, SMLNUM, ULP, UNFL
277 COMPLEX*16 , H10, H11, H22, H33, H43H34, H44, SN, SUM,
278 $ t1, t1copy, t2, t3, v1save, v2, v2save, v3,
282 INTEGER ICURCOL( IBLK ), ICURROW( IBLK ), K1( IBLK ),
283 $ K2( IBLK ), KCOL( IBLK ), KP2COL( IBLK ),
284 $ kp2row( iblk ), krow( iblk )
285 COMPLEX*16 S1( 2*IBLK, 2*IBLK ), SMALLA( 6, 6, IBLK ),
290 DOUBLE PRECISION PDLAMCH
291 EXTERNAL ilcm, numroc, pdlamch
302 INTRINSIC abs, dble, dconjg, dimag,
max,
min, mod
305 DOUBLE PRECISION CABS1
308 cabs1( cdum ) = abs( dble( cdum ) ) + abs( dimag( cdum ) )
314 itermax = 30*( ihi-ilo+1 )
321 contxt = desca( ctxt_ )
323 iafirst = desca( rsrc_ )
324 jafirst = desca( csrc_ )
327 node = myrow*npcol + mycol
329 left = mod( mycol+npcol-1, npcol )
330 right = mod( mycol+1, npcol )
331 up = mod( myrow+nprow-1, nprow )
332 down = mod( myrow+1, nprow )
333 lcmrc = ilcm( nprow, npcol )
334 IF( ( nprow.LE.3 ) .OR. ( npcol.LE.3 ) )
THEN
342 nq = numroc( n, hbl, mycol, jafirst, npcol )
347 jj = 3*n +
max( 2*
max( lda, ldz )+2*nq, jj )
348 jj = jj +
max( 2*n, ( 8*lcmrc+2 )**2 )
349 IF( lwork.EQ.-1 )
THEN
353 IF( lwork.LT.jj )
THEN
356 IF( descz( ctxt_ ).NE.desca( ctxt_ ) )
THEN
357 info = -( 1300+ctxt_ )
359 IF( desca( mb_ ).NE.desca( nb_ ) )
THEN
362 IF( descz( mb_ ).NE.descz( nb_ ) )
THEN
365 IF( desca( mb_ ).NE.descz( mb_ ) )
THEN
368 IF( ( desca( rsrc_ ).NE.0 )
THEN
369 info = -( 700+rsrc_ )
371 IF( ( descz( rsrc_ ).NE.0 ) .OR. ( descz( csrc_ ).NE.0 ) )
THEN
372 info = -( 1300+rsrc_ )
374 IF( ( ilo.GT.n ) .OR. ( ilo.LT.1 ) )
THEN
377 IF( ( ihi.GT.n ) .OR. ( ihi.LT.1 ) )
THEN
383 CALL igamn2d( contxt,
'ALL',
' ', 1, 1, info, 1, itmp1, itmp2, -1,
386 CALL pxerbla( contxt,
'PZLAHQR', -info )
403 rotn =
min( rotn, hbl-2 )
404 rotn =
max( rotn, 1 )
406 IF( ilo.EQ.ihi )
THEN
407 CALL infog2l( ilo, ilo, desca, nprow
408 $ irow, icol, ii, jj )
409 IF( ( myrow.EQ.ii ) .AND. ( mycol.EQ.jj ) )
THEN
410 w( ilo ) = a( ( icol-1 )*lda+irow )
420 CALL infog1l( iloz, hbl, nprow, myrow, iafirst, liloz, lihiz )
421 lihiz = numroc( ihiz, hbl, myrow, iafirst, nprow )
426 unfl = pdlamch( contxt,
'SAFE MINIMUM' )
428 CALL pdlabad( contxt, unfl, ovfl )
429 ulp = pdlamch( contxt,
'PRECISION' )
430 smlnum = unfl*( nh / ulp )
466 CALL pzlasmsub( a, desca, i, l, k, smlnum, work( irbuf+1 ),
474 CALL infog2l( l, l-1, desca, nprow, npcol, myrow, mycol,
475 $ irow, icol, itmp1, itmp2 )
476 IF( ( myrow.EQ.itmp1 ) .AND. ( mycol.EQ.itmp2 ) )
THEN
477 a( ( icol-1 )*lda+irow ) = zero
479 work( isub+l-1 ) = zero
491 IF( l.GE.i-( 2*iblk-1 ) )
THEN
500 IF( .NOT.wantt )
THEN
508 jblk =
min( iblk, ( ( i-l+1 ) / 2 )-1 )
509 IF( jblk.GT.lcmrc )
THEN
513 jblk = jblk - mod( jblk, lcmrc )
515 jblk =
min( jblk, 2*lcmrc )
516 jblk =
max( jblk, 1 )
518 CALL pzlacp3( 2*jblk, i-2*jblk+1, a, desca, s1, 2*iblk, -1, -1,
520 IF( ( its.EQ.20 .OR. its.EQ.40 ) .AND. ( jblk.GT.1 ) )
THEN
524 DO 20 ii = 2*jblk, 2, -1
525 s1( ii, ii ) = const*( cabs1( s1( ii, ii ) )+
526 $ cabs1( s1( ii, ii-1 ) ) )
527 s1( ii, ii-1 ) = zero
528 s1( ii-1, ii ) = zero
530 s1( 1, 1 ) = const*cabs1( s1( 1, 1 ) )
532 CALL zlahqr2( .false., .false., 2*jblk, 1, 2*jblk, s1,
533 $ 2*iblk, work( irbuf+1 ), 1, 2*jblk, z, ldz,
538 h44 = s1( 2*jblk, 2*jblk )
539 h33 = s1( 2*jblk-1, 2*jblk-1 )
540 h43h34 = s1( 2*jblk-1, 2*jblk )*s1( 2*jblk, 2*jblk-1 )
547 CALL pzlaconsb( a, desca, i, l, m, h44, h33, h43h34,
548 $ work( irbuf+1 ), lwork-irbuf )
554 istop =
min( m+rotn-1-mod( m-( m / hbl )*hbl-1, rotn ), i-2 )
555 istop =
min( istop, m+hbl-3-mod( m-1, hbl ) )
556 istop =
min( istop, i2-2 )
557 istop =
max( istop, m )
558 nbulge = ( i-1-istop ) / hbl
562 nbulge =
min( nbulge, jblk )
563 IF( nbulge.GT.lcmrc )
THEN
567 nbulge = nbulge - mod( nbulge, lcmrc )
569 nbulge =
max( nbulge, 1 )
576 IF( ( nbulge.GT.1 ) .AND. ( m.GT.l ) )
THEN
580 CALL infog2l( m+2, m+2, desca, nprow, npcol, myrow, mycol,
581 $ irow1, icol1, itmp1, itmp2 )
582 ii =
min( 4*nbulge+2, n-m+2 )
583 CALL pzlacp3( ii, m-1, a, desca, work( irbuf+1 ), ii, itmp1,
585 IF( ( myrow.EQ.itmp1 ) .AND. ( mycol.EQ.itmp2 ) )
THEN
589 CALL zlamsh( s1, 2*iblk, nbulge, jblk, work( irbuf+1 ),
592 CALL igebs2d( contxt,
'ALL',
' ', 1, 1, nbulge, 1 )
598 CALL igebr2d( contxt,
'ALL',
' ', 1, 1, nbulge, 1, itmp1,
609 CALL infog1l( m, hbl, npcol, mycol, jafirst, itmp1, localk )
611 CALL infog1l( 1, hbl, npcol, mycol, jafirst, icol1, locali2 )
612 locali2 = numroc( i2, hbl, mycol, jafirst, npcol )
616 CALL infog1l( i1, hbl, nprow, myrow, iafirst, locali1, icol1 )
617 CALL infog1l( 1, hbl, nprow, myrow, iafirst, localm, icol1 )
618 icol1 = numroc(
min( m+3, i ), hbl, myrow, iafirst, nprow )
622 istartrow = mod( ( m+1 ) / hbl, nprow ) + iafirst
623 istartcol = mod( ( m+1 ) / hbl, npcol ) + jafirst
625 CALL infog1l( m, hbl, nprow, myrow, iafirst, ii, itmp2 )
626 CALL infog1l( m, hbl, npcol, mycol, jafirst, jj, itmp2 )
627 CALL infog1l( 1, hbl, nprow, myrow, iafirst, istop,
629 kp2row( 1 ) = numroc( m+2, hbl, myrow, iafirst, nprow )
630 CALL infog1l( 1, hbl, npcol, mycol, jafirst, istop,
632 kp2col( 1 ) = numroc( m+2, hbl, mycol, jafirst, npcol )
653 istop =
min( m+rotn-1-mod( m-( m / hbl )*hbl-1, rotn ),
655 istop =
min( istop, m+hbl-3-mod( m-1, hbl ) )
656 istop =
min( istop, i2-2 )
657 istop =
max( istop, m )
658 IF( ( mod( m-1, hbl ).EQ.hbl-2 ) .AND.
659 $ ( istop.LT.
min( i-2, i2-2 ) ) )
THEN
663 icurrow( ki ) = istartrow
664 icurcol( ki ) = istartcol
668 $ kp2row( ki ) = kp2row( 1 )
670 $ kp2col( ki ) = kp2col( 1 )
680 CALL pzlawil( itmp1, itmp2, m, a, desca, h44, h33, h43h34,
689 IF( k2( ibulge ).LE.i-1 )
THEN
691 IF( ( k1( ibulge ).GE.m+5 ) .AND. ( ibulge.LT.nbulge ) )
693 IF( ( mod( k2( ibulge )+2, hbl ).EQ.mod( k2( ibulge+1 )+
694 $ 2, hbl ) ) .AND. ( k1( 1 ).LE.i-1 ) )
THEN
695 h44 = s1( 2*jblk-2*ibulge, 2*jblk-2*ibulge )
696 h33 = s1( 2*jblk-2*ibulge-1, 2*jblk-2*ibulge-1 )
697 h43h34 = s1( 2*jblk-2*ibulge-1, 2*jblk-2*ibulge )*
698 $ s1( 2*jblk-2*ibulge, 2*jblk-2*ibulge
701 CALL pzlawil( itmp1, itmp2, m, a, desca, h44, h33,
717 DO 120 ki = 1, ibulge
719 istart =
max( k1( ki ), m )
720 istop =
min( k2( ki ), i-1 )
722 modkm1 = mod( k-1, hbl )
723 IF( ( modkm1.GE.hbl-2 ) .AND. ( k.LE.i-1 ) )
THEN
726 smalla(itmp1, itmp2, ki) = zero
729 IF( ( modkm1.EQ.hbl-2 ) .AND. ( k.LT.i-1 ) )
THEN
733 itmp1 = icurrow( ki )
734 itmp2 = icurcol( ki )
736 $ smalla( 1, 1, ki ), 6, itmp1, itmp2,
739 IF( modkm1.EQ.hbl-1 )
THEN
743 CALL infog2l( k+1, k+1, desca, nprow, npcol, myrow,
744 $ mycol, irow1, icol1, itmp1, itmp2 )
746 $ smalla( 1, 1, ki ), 6, itmp1, itmp2,
786 IF( ( myrow.EQ.icurrow( ki ) ) .AND.
787 $ ( mycol.EQ.icurcol( ki ) ) .AND.
788 $ ( modkm1.EQ.hbl-2 ) .AND.
789 $ ( istart.LT.
min( i-1, istop+1 ) ) )
THEN
793 CALL zcopy( nr, smalla( 2, 1, ki ), 1, vcopy, 1 )
799 CALL zlarfg( nr, vcopy( 1 ), vcopy( 2 ), 1, t1copy )
801 smalla( 2, 1, ki ) = vcopy( 1 )
802 smalla( 3, 1, ki ) = zero
804 $ smalla( 4, 1, ki ) = zero
805 ELSE IF( m.GT.l )
THEN
809 smalla( 2, 1, ki ) = smalla( 2, 1, ki ) -
815 work( vecsidx+( k-1 )*3+1 ) = vcopy( 2 )
816 work( vecsidx+( k-1 )*3+2 ) = vcopy( 3 )
817 work( vecsidx+( k-1 )*3+3 ) = t1copy
825 itmp1 =
min( 6, i2+2-k )
826 itmp2 =
max( i1-k+2, 1 )
828 sum = dconjg( t1 )*smalla( 2, j, ki ) +
829 $ dconjg( t2 )*smalla( 3, j, ki ) +
830 $ dconjg( t3 )*smalla( 4, j, ki )
831 smalla( 2, j, ki ) = smalla( 2, j, ki ) - sum
832 smalla( 3, j, ki ) = smalla( 3, j, ki ) - sum*v2
833 smalla( 4, j, ki ) = smalla( 4, j, ki ) - sum*v3
836 sum = t1*smalla( j, 2, ki ) +
837 $ t2*smalla( j, 3, ki ) +
838 $ t3*smalla( j, 4, ki )
839 smalla( j, 2, ki ) = smalla( j, 2, ki ) - sum
840 smalla( j, 3, ki ) = smalla( j, 3, ki ) -
842 smalla( j, 4, ki ) = smalla( j, 4, ki ) -
848 IF( ( mod( istop-1, hbl ).EQ.hbl-1 ) .AND.
849 $ ( myrow.EQ.icurrow( ki ) ) .AND.
850 $ ( mycol.EQ.icurcol( ki ) ) .AND.
851 $ ( istart.LE.
min( i, istop ) ) )
THEN
855 CALL zcopy( nr, smalla( 3, 2, ki ), 1, vcopy, 1 )
861 CALL zlarfg( nr, vcopy( 1 ), vcopy( 2 ), 1, t1copy )
863 smalla( 3, 2, ki ) = vcopy( 1 )
864 smalla( 4, 2, ki ) = zero
866 $ smalla( 5, 2, ki ) = zero
870 IF( ( k-2.GT.m ) .AND. ( mod( k-1, hbl ).GT.1 ) )
872 h11 = smalla( 1, 1, ki )
873 h10 = smalla( 2, 1, ki )
874 h22 = smalla( 2, 2, ki )
875 s = cabs1( h11 ) + cabs1( h22 )
876 IF( cabs1( h10 ).LE.
max( ulp*s, smlnum ) )
THEN
877 smalla( 2, 1, ki ) = zero
880 ELSE IF( m.GT.l )
THEN
884 smalla( 3, 2, ki ) = smalla( 3, 2, ki ) -
890 work( vecsidx+( k-1 )*3+1 ) = vcopy( 2 )
891 work( vecsidx+( k-1 )*3+2 ) = vcopy( 3 )
892 work( vecsidx+( k-1 )*3+3 ) = t1copy
900 itmp1 =
min( 6, i2-k+3 )
901 itmp2 =
max( i1-k+3, 1 )
903 sum = dconjg( t1 )*smalla( 3, j, ki ) +
904 $ dconjg( t2 )*smalla( 4, j, ki ) +
905 $ dconjg( t3 )*smalla( 5, j, ki )
906 smalla( 3, j, ki ) = smalla( 3, j, ki ) - sum
907 smalla( 4, j, ki ) = smalla( 4, j, ki ) - sum*v2
908 smalla( 5, j, ki ) = smalla( 5, j, ki ) - sum*v3
911 sum = t1*smalla( j, 3, ki ) +
912 $ t2*smalla( j, 4, ki ) +
913 $ t3*smalla( j, 5, ki )
914 smalla( j, 3, ki ) = smalla( j, 3, ki ) - sum
915 smalla( j, 4, ki ) = smalla( j, 4, ki ) -
917 smalla( j, 5, ki ) = smalla( j, 5, ki ) -
923 IF( ( modkm1.EQ.0 ) .AND. ( istart.LE.i-1 ) .AND.
924 $ ( myrow.EQ.icurrow( ki ) ) .AND.
925 $ ( right.EQ.icurcol( ki ) ) )
THEN
935 IF( istart.GT.m )
THEN
936 vcopy( 1 ) = smalla( 4, 3, ki )
937 vcopy( 2 ) = smalla( 5, 3, ki )
938 vcopy( 3 ) = smalla( 6, 3, ki )
939 nr =
min( 3, i-istart+1 )
940 CALL zlarfg( nr, vcopy( 1 ), vcopy( 2 ), 1,
942 a( ( icol1-2 )*lda+irow1 ) = vcopy( 1 )
943 a( ( icol1-2 )*lda+irow1+1 ) = zero
944 IF( istart.LT.i-1 )
THEN
945 a( ( icol1-2 )*lda+irow1+2 ) = zero
951 nr =
min( 3, i-istart+1 )
952 IF( npcol.EQ.1 )
THEN
960 CALL zgerv2d( contxt, 3, 1, vcopy, 3, myrow,
963 CALL zlarfg( nr, vcopy( 1 ), vcopy( 2 ), 1,
969 a( ( icol1-2 )*lda+irow1 ) = a( ( icol1-2 )*lda+
970 $ irow1 )*dconjg( one-t1copy )
975 IF( ( myrow.EQ.icurrow( ki ) ) .AND.
976 $ ( mycol.EQ.icurcol( ki ) ) .AND.
977 $ ( ( ( modkm1.EQ.hbl-2 ) .AND. ( istart.EQ.i-
978 $ 1 ) ) .OR. ( ( modkm1.LT.hbl-2 ) .AND. ( istart.LE.i-
985 DO 110 k = istart, istop
991 IF( mod( k-1, hbl ).EQ.0 )
THEN
992 vcopy( 1 ) = smalla( 4, 3, ki )
993 vcopy( 2 ) = smalla( 5, 3, ki )
994 vcopy( 3 ) = smalla( 6, 3, ki )
996 vcopy( 1 ) = a( ( icol1-2 )*lda+irow1 )
997 vcopy( 2 ) = a( ( icol1-2 )*lda+irow1+1 )
999 vcopy( 3 ) = a( ( icol1-2 )*lda+irow1+2 )
1010 IF( npcol.GT.1 .AND. istart.LE.m .AND.
1011 $ mod( k-1, hbl ).EQ.0 )
THEN
1012 CALL zgesd2d( contxt, 3, 1, vcopy, 3, myrow,
1015 CALL zlarfg( nr, vcopy( 1 ), vcopy( 2 ), 1,
1018 IF( mod( k-1, hbl ).GT.0 )
THEN
1019 a( ( icol1-2 )*lda+irow1 ) = vcopy( 1 )
1020 a( ( icol1-2 )*lda+irow1+1 ) = zero
1022 a( ( icol1-2 )*lda+irow1+2 ) = zero
1027 IF( ( irow1.GT.2 ) .AND. ( icol1.GT.2 ) .AND.
1028 $ ( k-2.GT.m ) .AND. ( mod( k-1,
1029 $ hbl ).GT.1 ) )
THEN
1030 h11 = a( ( icol1-3 )*lda+irow1-2 )
1031 h10 = a( ( icol1-3 )*lda+irow1-1 )
1032 h22 = a( ( icol1-2 )*lda+irow1-1 )
1033 s = cabs1( h11 ) + cabs1( h22 )
1034 IF( cabs1( h10 ).LE.
max( ulp*s, smlnum ) )
1036 a( ( icol1-3 )*lda+irow1-1 ) = zero
1040 ELSE IF( m.GT.l )
THEN
1041 IF( mod( k-1, hbl ).GT.0 )
THEN
1045 a( ( icol1-2 )*lda+irow1 ) = a( ( icol1-2 )*
1046 $ lda+irow1 )*dconjg( one-t1copy )
1051 work( vecsidx+( k-1 )*3+1 ) = vcopy( 2 )
1052 work( vecsidx+( k-1 )*3+2 ) = vcopy( 3 )
1053 work( vecsidx+( k-1 )*3+3 ) = t1copy
1055 IF( k.LT.istop )
THEN
1061 DO 90 j = ( icol1-1 )*lda + irow1,
1062 $ (
min( k2( ki )+1, i-1 )+icol1-k-1 )*
1064 sum = dconjg( t1 )*a( j ) +
1065 $ dconjg( t2 )*a( j+1 ) +
1066 $ dconjg( t3 )*a( j+2 )
1067 a( j ) = a( j ) - sum
1068 a( j+1 ) = a( j+1 ) - sum*v2
1069 a( j+2 ) = a( j+2 ) - sum*v3
1071 DO 100 j = irow1 + 1, irow1 + 3
1072 sum = t1*a( ( icol1-1 )*lda+j ) +
1073 $ t2*a( icol1*lda+j ) +
1074 $ t3*a( ( icol1+1 )*lda+j )
1075 a( ( icol1-1 )*lda+j ) = a( ( icol1-1 )*lda+
1077 a( icol1*lda+j ) = a( icol1*lda+j ) -
1079 a( ( icol1+1 )*lda+j ) = a( ( icol1+1 )*lda+
1080 $ j ) - sum*dconjg( v3 )
1092 DO 130 ki = 1, ibulge
1094 istart =
max( k1( ki ), m )
1095 istop =
min( k2( ki ), i-1 )
1099 IF( ( myrow.EQ.icurrow( ki ) ) .AND. ( npcol.GT.1 ) .AND.
1100 $ ( istart.LE.istop ) )
THEN
1101 IF( mycol.NE.icurcol( ki ) )
THEN
1102 CALL zgebr2d( contxt,
'ROW',
' ',
1103 $ 3*( istop-istart+1 ), 1,
1104 $ work( vecsidx+( istart-1 )*3+1 ),
1105 $ 3*( istop-istart+1 ), myrow,
1108 CALL zgebs2d( contxt,
'ROW',
' ',
1109 $ 3*( istop-istart+1 ), 1,
1110 $ work( vecsidx+( istart-1 )*3+1 ),
1111 $ 3*( istop-istart+1 ) )
1118 DO 140 ki = 1, ibulge
1120 istart =
max( k1( ki ), m )
1121 istop =
min( k2( ki ), i-1 )
1123 IF( ( mycol.EQ.icurcol( ki ) ) .AND. ( nprow.GT.1 ) .AND.
1124 $ ( istart.LE.istop ) )
THEN
1125 IF( myrow.NE.icurrow( ki ) )
THEN
1126 CALL zgebr2d( contxt,
'COL',
' ',
1127 $ 3*( istop-istart+1 ), 1,
1128 $ work( vecsidx+( istart-1 )*3+1 ),
1129 $ 3*( istop-istart+1 ), icurrow( ki ),
1132 CALL zgebs2d( contxt,
'COL',
' ',
1133 $ 3*( istop-istart+1 ), 1,
1134 $ work( vecsidx+( istart-1 )*3+1 ),
1135 $ 3*( istop-istart+1 ) )
1143 DO 160 ki = 1, ibulge
1144 istart =
max( k1( ki ), m )
1145 istop =
min( k2( ki ), i-1 )
1147 modkm1 = mod( istart-1, hbl )
1148 IF( ( myrow.EQ.icurrow( ki ) ) .AND.
1149 $ ( mycol.EQ.icurcol( ki ) ) .AND.
1150 $ ( ( ( modkm1.EQ.hbl-2 ) .AND. ( istart.EQ.i-
1151 $ 1 ) ) .OR. ( ( modkm1.LT.hbl-2 ) .AND. ( istart.LE.i-
1158 DO 150 k = istart, istop
1162 nr =
min( 3, i-k+1 )
1163 v2 = work( vecsidx+( k-1 )*3+1 )
1164 v3 = work( vecsidx+( k-1 )*3+2 )
1165 t1 = work( vecsidx+( k-1 )*3+3 )
1167 IF( k.LT.istop )
THEN
1172 CALL zlaref(
'Col', a, lda, .false., z, ldz,
1173 $ .false., icol1, icol1, istart,
1174 $ istop,
min( istart+1, i )-k+irow1,
1175 $ irow1, liloz, lihiz,
1176 $ work( vecsidx+1 ), v2, v3, t1, t2,
1181 IF( ( nr.EQ.3 ) .AND. ( mod( k-1,
1182 $ hbl ).LT.hbl-2 ) )
THEN
1184 CALL zlaref(
'Row', a, lda, .false., z, ldz,
1185 $ .false., irow1, irow1, istart,
1186 $ istop, icol1,
min(
min( k2( ki )
1187 $ +1, i-1 ), i2 )-k+icol1, liloz,
1188 $ lihiz, work( vecsidx+1 ), v2,
1198 modkm1 = mod( k-1, hbl )
1199 IF( ( modkm1.GE.hbl-2 ) .AND. ( k.LE.i-1 ) )
THEN
1200 IF( ( modkm1.EQ.hbl-2 ) .AND. ( k.LT.i-1 ) )
THEN
1204 itmp1 = icurrow( ki )
1205 itmp2 = icurcol( ki )
1206 CALL pzlacp3(
min( 6, n-k+2 ), k-1, a, desca,
1207 $ smalla( 1, 1, ki ), 6, itmp1, itmp2,
1211 IF( modkm1.EQ.hbl-1 )
THEN
1215 itmp1 = icurrow( ki )
1216 itmp2 = icurcol( ki )
1217 CALL pzlacp3(
min( 6, n-k+3 ), k-2, a, desca,
1218 $ smalla( 1, 1, ki ), 6, itmp1, itmp2,
1229 DO 180 ki = 1, ibulge
1230 IF( ( myrow.NE.icurrow( ki ) ) .AND.
1231 $ ( down.NE.icurrow( ki ) ) )
GO TO 180
1232 istart =
max( k1( ki ), m )
1233 istop =
min( k2( ki ), i-1 )
1235 IF( ( istop.GT.istart ) .AND.
1236 $ ( mod( istart-1, hbl ).LT.hbl-2 ) .AND.
1237 $ ( icurrow( ki ).EQ.myrow ) )
THEN
1238 irow1 =
min( k2( ki )+1, i-1 ) + 1
1239 CALL infog1l( irow1, hbl, npcol, mycol, jafirst,
1243 CALL zlaref(
'Row', a, lda, wantz, z, ldz, .true., ii,
1244 $ ii, istart, istop, itmp1, itmp2, liloz,
1245 $ lihiz, work( vecsidx+1 ), v2, v3, t1, t2,
1250 DO 220 ki = 1, ibulge
1251 IF( krow( ki ).GT.kp2row( ki ) )
1253 IF( ( myrow.NE.icurrow( ki ) ) .AND.
1254 $ ( down.NE.icurrow( ki ) ) )
GO TO 220
1255 istart =
max( k1( ki ), m )
1256 istop =
min( k2( ki ), i-1 )
1257 IF( ( istart.EQ.istop ) .OR.
1258 $ ( mod( istart-1, hbl ).GE.hbl-2 ) .OR.
1259 $ ( icurrow( ki ).NE.myrow ) )
THEN
1260 DO 210 k = istart, istop
1261 v2 = work( vecsidx+( k-1 )*3+1 )
1262 v3 = work( vecsidx+( k-1 )*3+2 )
1263 t1 = work( vecsidx+( k-1 )*3+3 )
1264 nr =
min( 3, i-k+1 )
1265 IF( ( nr.EQ.3 ) .AND. ( krow( ki ).LE.
1266 $ kp2row( ki ) ) )
THEN
1267 IF( ( k.LT.istop ) .AND.
1268 $ ( mod( k-1, hbl ).LT.hbl-2 ) )
THEN
1269 itmp1 =
min( k2( ki )+1, i-1 ) + 1
1271 IF( mod( k-1, hbl ).LT.hbl-2 )
THEN
1272 itmp1 =
min( k2( ki )+1, i-1 ) + 1
1274 IF( mod( k-1, hbl ).EQ.hbl-2 )
THEN
1275 itmp1 =
min( k+4, i2 ) + 1
1277 IF( mod( k-1, hbl ).EQ.hbl-1 )
THEN
1278 itmp1 =
min( k+3, i2 ) + 1
1285 irow2 = kp2row( ki )
1286 IF( ( k.GT.istart ) .AND.
1287 $ ( mod( k-1, hbl ).GE.hbl-2 ) )
THEN
1288 IF( down.EQ.icurrow( ki ) )
THEN
1291 IF( myrow.EQ.icurrow( ki ) )
THEN
1295 CALL infog1l( itmp1, hbl, npcol, mycol, jafirst,
1298 IF( ( mod( k-1, hbl ).LT.hbl-2 ) .OR.
1299 $ ( nprow.EQ.1 ) )
THEN
1302 CALL zlaref(
'Row', a, lda, wantz, z
1304 $ istop, icol1, icol2, liloz,
1305 $ lihiz, work( vecsidx+1 ), v2,
1308 IF( ( mod( k-1, hbl ).EQ.hbl-2 ) .AND.
1309 $ ( nprow.GT.1 ) )
THEN
1310 IF( irow1.NE.irow2 )
THEN
1311 CALL zgesd2d( contxt, 2, icol2-icol1+1,
1312 $ a( ( icol1-1 )*lda+irow1 ),
1313 $ lda, down, mycol )
1314 IF( skip .AND. ( istart.EQ.istop ) )
THEN
1315 CALL zgerv2d( contxt, 2, icol2
1316 $ a( ( icol1-1 )*lda+
1320 ELSE IF( skip )
THEN
1321 CALL zgerv2d( contxt, 2, icol2-icol1+1,
1326 DO 190 j = icol1, icol2
1328 $ work( irbuf+2*( j-icol1 )+1 ) +
1331 $ dconjg( t3 )*a( ( j-1 )*lda+
1333 work( irbuf+2*( j-icol1 )+1 )
1334 $ = work( irbuf+2*( j-icol1 )+1 ) -
1336 work( irbuf+2*( j-icol1 )+2 )
1337 $ = work( irbuf+2*( j-icol1 )+2 ) -
1339 a( ( j-1 )*lda+irow1 ) = a( ( j-1 )*
1340 $ lda+irow1 ) - sum*v3
1342 IF( istart.EQ.istop )
THEN
1343 CALL zgesd2d( contxt, 2, icol2-icol1+1,
1344 $ work( irbuf+1 ), 2, up,
1349 IF( ( mod( k-1, hbl ).EQ.hbl-1 ) .AND.
1350 $ ( nprow.GT.1 ) )
THEN
1351 IF( irow1.EQ.irow2 )
THEN
1352 IF( istart.EQ.istop )
THEN
1353 CALL zgesd2d( contxt, 2, icol2-icol1+1,
1354 $ a( ( icol1-1 )*lda+irow1-
1355 $ 1 ), lda, down, mycol )
1358 CALL zgerv2d( contxt, 2, icol2-icol1+1,
1359 $ a( ( icol1-1 )*lda+irow1-
1360 $ 1 ), lda, down, mycol )
1362 ELSE IF( skip )
THEN
1363 IF( istart.EQ.istop )
THEN
1364 CALL zgerv2d( contxt, 2, icol2-icol1+1,
1365 $ work( irbuf+1 ), 2, up,
1370 DO 200 j = icol1, icol2
1372 $ work( irbuf+2*( j-icol1 )+2 ) +
1373 $ dconjg( t2 )*a( ( j-1 )*lda+
1374 $ irow1 ) + dconjg( t3 )*
1375 $ a( ( j-1 )*lda+irow1+1 )
1376 work( irbuf+2*( j-icol1 )+2 )
1377 $ = work( irbuf+2*( j-icol1 )+2 ) -
1379 a( ( j-1 )*lda+irow1 ) = a( ( j-1 )*
1380 $ lda+irow1 ) - sum*v2
1381 a( ( j-1 )*lda+irow1+1 ) = a( ( j-1 )*
1382 $ lda+irow1+1 ) - sum*v3
1384 CALL zgesd2d( contxt, 2, icol2-icol1+1,
1385 $ work( irbuf+1 ), 2, up,
1398 DO 260 ki = 1, ibulge
1399 IF( krow( ki ).GT.kp2row( ki ) )
1401 IF( ( myrow.NE.icurrow( ki ) ) .AND.
1402 $ ( down.NE.icurrow( ki ) ) )
GO TO 260
1403 istart =
max( k1( ki ), m )
1404 istop =
min( k2( ki ), i-1 )
1405 IF( ( istart.EQ.istop ) .OR.
1406 $ ( mod( istart-1, hbl ).GE.hbl-2 ) .OR.
1407 $ ( icurrow( ki ).NE.myrow ) )
THEN
1408 DO 250 k = istart, istop
1409 v2 = work( vecsidx+( k-1 )*3+1 )
1410 v3 = work( vecsidx+( k-1 )*3+2 )
1411 t1 = work( vecsidx+( k-1 )*3+3 )
1412 nr =
min( 3, i-k+1 )
1413 IF( ( nr.EQ.3 ) .AND. ( krow( ki ).LE.
1414 $ kp2row( ki ) ) )
THEN
1415 IF( ( k.LT.istop ) .AND.
1416 $ ( mod( k-1, hbl ).LT.hbl-2 ) )
THEN
1417 itmp1 =
min( k2( ki )+1, i-1 ) + 1
1419 IF( mod( k-1, hbl ).LT.hbl-2 )
THEN
1420 itmp1 =
min( k2( ki )+1, i-1 ) + 1
1422 IF( mod( k-1, hbl ).EQ.hbl-2 )
THEN
1423 itmp1 =
min( k+4, i2 ) + 1
1425 IF( mod( k-1, hbl ).EQ.hbl-1 )
THEN
1426 itmp1 =
min( k+3, i2 ) + 1
1433 irow2 = kp2row( ki )
1434 IF( ( k.GT.istart ) .AND.
1435 $ ( mod( k-1, hbl ).GE.hbl-2 ) )
THEN
1436 IF( down.EQ.icurrow( ki ) )
THEN
1439 IF( myrow.EQ.icurrow( ki ) )
THEN
1443 CALL infog1l( itmp1, hbl, npcol, mycol, jafirst,
1446 IF( ( mod( k-1, hbl ).EQ.hbl-2 ) .AND.
1447 $ ( nprow.GT.1 ) )
THEN
1448 IF( irow1.EQ.irow2 )
THEN
1449 CALL zgerv2d( contxt, 2, icol2-icol1+1,
1450 $ work( irbuf+1 ), 2, up,
1454 DO 230 j = icol1, icol2
1456 $ work( irbuf+2*( j-icol1 )+1 ) +
1457 $ dconjg( t2 )*work( irbuf+2*
1459 $ dconjg( t3 )*a( ( j-1 )*lda+
1461 work( irbuf+2*( j-icol1 )+1 )
1462 $ = work( irbuf+2*( j-icol1 )+1 ) -
1464 work( irbuf+2*( j-icol1 )+2 )
1465 $ = work( irbuf+2*( j-icol1 )+2 ) -
1467 a( ( j-1 )*lda+irow1 ) = a( ( j-1 )*
1468 $ lda+irow1 ) - sum*v3
1470 IF( istart.EQ.istop )
THEN
1471 CALL zgesd2d( contxt, 2, icol2-icol1+1,
1472 $ work( irbuf+1 ), 2, up,
1477 IF( ( mod( k-1, hbl ).EQ.hbl-1 ) .AND.
1478 $ ( nprow.GT.1 ) )
THEN
1479 IF( irow1.NE.irow2 )
THEN
1480 IF( istart.EQ.istop )
THEN
1481 CALL zgerv2d( contxt, 2, icol2-icol1+1,
1482 $ work( irbuf+1 ), 2, up,
1487 DO 240 j = icol1, icol2
1489 $ work( irbuf+2*( j-icol1 )+2 ) +
1490 $ dconjg( t2 )*a( ( j-1 )*lda+
1491 $ irow1 ) + dconjg( t3 )*
1492 $ a( ( j-1 )*lda+irow1+1 )
1493 work( irbuf+2*( j-icol1 )+2 )
1494 $ = work( irbuf+2*( j-icol1 )+2 ) -
1496 a( ( j-1 )*lda+irow1 ) = a( ( j-1 )*
1497 $ lda+irow1 ) - sum*v2
1498 a( ( j-1 )*lda+irow1+1 ) = a( ( j-1 )*
1499 $ lda+irow1+1 ) - sum*v3
1501 CALL zgesd2d( contxt, 2, icol2-icol1+1,
1502 $ work( irbuf+1 ), 2, up,
1511 DO 280 ki = 1, ibulge
1512 IF( krow( ki ).GT.kp2row( ki ) )
1514 IF( ( myrow.NE.icurrow( ki ) ) .AND.
1515 $ ( down.NE.icurrow( ki ) ) )
GO TO 280
1516 istart =
max( k1( ki ), m )
1517 istop =
min( k2( ki ), i-1 )
1518 IF( ( istart.EQ.istop ) .OR.
1519 $ ( mod( istart-1, hbl ).GE.hbl-2 ) .OR.
1520 $ ( icurrow( ki ).NE.myrow ) )
THEN
1521 DO 270 k = istart, istop
1522 v2 = work( vecsidx+( k-1 )*3+1 )
1523 v3 = work( vecsidx+( k-1 )*3+2 )
1524 t1 = work( vecsidx+( k-1 )*3+3 )
1525 nr =
min( 3, i-k+1 )
1526 IF( ( nr.EQ.3 ) .AND. ( krow( ki ).LE.
1527 $ kp2row( ki ) ) )
THEN
1528 IF( ( k.LT.istop ) .AND.
1529 $ ( mod( k-1, hbl ).LT.hbl-2 ) )
THEN
1530 itmp1 =
min( k2( ki )+1, i-1 ) + 1
1532 IF( mod( k-1, hbl ).LT.hbl-2 )
THEN
1533 itmp1 =
min( k2( ki )+1, i-1 ) + 1
1535 IF( mod( k-1, hbl ).EQ.hbl-2 )
THEN
1536 itmp1 =
min( k+4, i2 ) + 1
1538 IF( mod( k-1, hbl ).EQ.hbl-1 )
THEN
1539 itmp1 =
min( k+3, i2 ) + 1
1546 irow2 = kp2row( ki )
1547 IF( ( k.GT.istart ) .AND.
1548 $ ( mod( k-1, hbl ).GE.hbl-2 ) )
THEN
1549 IF( down.EQ.icurrow( ki ) )
THEN
1552 IF( myrow.EQ.icurrow( ki ) )
THEN
1556 CALL infog1l( itmp1, hbl, npcol, mycol, jafirst,
1559 IF( ( mod( k-1, hbl ).EQ.hbl-2 ) .AND.
1560 $ ( nprow.GT.1 ) )
THEN
1561 IF( irow1.NE.irow2 )
THEN
1562 IF( istart.EQ.istop )
THEN
1563 CALL zgerv2d( contxt, 2, icol2-icol1+1,
1564 $ a( ( icol1-1 )*lda+
1570 IF( ( mod( k-1, hbl ).EQ.hbl-1 ) .AND.
1571 $ ( nprow.GT.1 ) )
THEN
1572 IF( irow1.EQ.irow2 )
THEN
1573 CALL zgerv2d( contxt, 2, icol2-icol1+1,
1574 $ a( ( icol1-1 )*lda+irow1-
1575 $ 1 ), lda, down, mycol )
1587 DO 300 ki = 1, ibulge
1588 IF( ( mycol.NE.icurcol( ki ) ) .AND.
1589 $ ( right.NE.icurcol( ki ) ) )
GO TO 300
1590 istart =
max( k1( ki ), m )
1591 istop =
min( k2( ki ), i-1 )
1593 IF( ( ( mod( istart-1, hbl ).LT.hbl-2 ) .OR. ( npcol.EQ.
1594 $ 1 ) ) .AND. ( icurcol( ki ).EQ.mycol ) .AND.
1595 $ ( i-istop+1.GE.3 ) )
THEN
1597 IF( ( k.LT.istop ) .AND. ( mod( k-1,
1598 $ hbl ).LT.hbl-2 ) )
THEN
1599 itmp1 =
min( istart+1, i ) - 1
1601 IF( mod( k-1, hbl ).LT.hbl-2 )
THEN
1602 itmp1 =
min( k+3, i )
1604 IF( mod( k-1, hbl ).EQ.hbl-2 )
THEN
1605 itmp1 =
max( i1, k-1 ) - 1
1607 IF( mod( k-1, hbl ).EQ.hbl-1 )
THEN
1608 itmp1 =
max( i1, k-2 ) - 1
1613 CALL infog1l( i1, hbl, nprow, myrow, iafirst, irow1,
1615 irow2 = numroc( itmp1, hbl, myrow, iafirst, nprow )
1616 IF( irow1.LE.irow2 )
THEN
1621 CALL zlaref(
'Col', a, lda, wantz, z, ldz, .true.,
1622 $ icol1, icol1, istart, istop, irow1,
1623 $ irow2, liloz, lihiz, work( vecsidx+1 ),
1624 $ v2, v3, t1, t2, t3 )
1626 IF( mod( k-1, hbl ).LT.hbl-2 )
THEN
1630 IF( mod( k-1, hbl ).LT.hbl-3 )
THEN
1632 IF( mod( ( itmp1 / hbl ), nprow ).EQ.myrow )
1634 IF( itmp2.GT.0 )
THEN
1635 irow2 = itmp2 +
min( k+3, i ) - itmp1
1643 CALL infog1l( itmp1+1, hbl, nprow, myrow,
1645 irow2 = numroc(
min( k+3, i ), hbl, myrow,
1648 v2 = work( vecsidx+( k-1 )*3+1 )
1649 v3 = work( vecsidx+( k-1 )*3+2 )
1650 t1 = work( vecsidx+( k-1 )*3+3 )
1653 icol1 = kcol( ki ) + istop - istart
1654 CALL zlaref( 'col
', A, LDA, .FALSE., Z, LDZ,
1655 $ .FALSE., ICOL1, ICOL1, ISTART, ISTOP,
1656 $ IROW1, IROW2, LILOZ, LIHIZ,
1657 $ WORK( VECSIDX+1 ), V2, V3, T1, T2,
1663 DO 360 KI = 1, IBULGE
1664.GT.
IF( KCOL( KI )KP2COL( KI ) )
1666.NE..AND.
IF( ( MYCOLICURCOL( KI ) )
1667.NE.
$ ( RIGHTICURCOL( KI ) ) )GO TO 360
1668 ISTART = MAX( K1( KI ), M )
1669 ISTOP = MIN( K2( KI ), I-1 )
1670.GE.
IF( MOD( ISTART-1, HBL )HBL-2 ) THEN
1681 DO 350 K = ISTART, ISTOP
1683 V2 = WORK( VECSIDX+( K-1 )*3+1 )
1684 V3 = WORK( VECSIDX+( K-1 )*3+2 )
1685 T1 = WORK( VECSIDX+( K-1 )*3+3 )
1686 NR = MIN( 3, I-K+1 )
1687.EQ..AND..LE.
IF( ( NR3 ) ( KCOL( KI )KP2COL( KI ) ) )
1690.LT..AND.
IF( ( KISTOP )
1691.LT.
$ ( MOD( K-1, HBL )HBL-2 ) ) THEN
1692 ITMP1 = MIN( ISTART+1, I ) - 1
1694.LT.
IF( MOD( K-1, HBL )HBL-2 ) THEN
1695 ITMP1 = MIN( K+3, I )
1697.EQ.
IF( MOD( K-1, HBL )HBL-2 ) THEN
1698 ITMP1 = MAX( I1, K-1 ) - 1
1700.EQ.
IF( MOD( K-1, HBL )HBL-1 ) THEN
1701 ITMP1 = MAX( I1, K-2 ) - 1
1704.LT.
IF( MOD( K-1, HBL )HBL-2 ) THEN
1705 ICOL1 = KCOL( KI ) + K - ISTART
1706 ICOL2 = KP2COL( KI ) + K - ISTART
1709 ICOL2 = KP2COL( KI )
1710.GT.
IF( KISTART ) THEN
1711.EQ.
IF( RIGHTICURCOL( KI ) ) THEN
1714.EQ.
IF( MYCOLICURCOL( KI ) ) THEN
1719 CALL INFOG1L( I1, HBL, NPROW, MYROW, IAFIRST,
1721 IROW2 = NUMROC( ITMP1, HBL, MYROW, IAFIRST, NPROW )
1722.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-2 )
1723.GT.
$ ( NPCOL1 ) ) THEN
1724.NE.
IF( ICOL1ICOL2 ) THEN
1725 CALL ZGESD2D( CONTXT, IROW2-IROW1+1, 2,
1726 $ A( ( ICOL1-1 )*LDA+IROW1 ),
1727 $ LDA, MYROW, RIGHT )
1728.EQ..AND.
IF( ( ISTARTISTOP ) SKIP ) THEN
1729 CALL ZGERV2D( CONTXT, IROW2-IROW1+1, 2,
1730 $ A( ( ICOL1-1 )*LDA+IROW1 ),
1731 $ LDA, MYROW, RIGHT )
1733 ELSE IF( SKIP ) THEN
1736 CALL ZGERV2D( CONTXT, IROW2-IROW1+1, 2,
1737 $ WORK( ICBUF+1 ), IROW2-IROW1+1,
1739 II = ICBUF - IROW1 + 1
1740 JJ = ICBUF + IROW2 - 2*IROW1 + 2
1741 DO 310 J = IROW1, IROW2
1742 SUM = T1*WORK( II+J ) + T2*WORK( JJ+J ) +
1743 $ T3*A( ( ICOL1-1 )*LDA+J )
1744 WORK( II+J ) = WORK( II+J ) - SUM
1745 WORK( JJ+J ) = WORK( JJ+J ) -
1747 A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*
1748 $ LDA+J ) - SUM*DCONJG( V3 )
1750.EQ.
IF( ISTARTISTOP ) THEN
1751 CALL ZGESD2D( CONTXT, IROW2-IROW1+1, 2,
1753 $ IROW2-IROW1+1, MYROW, LEFT )
1757.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-1 )
1758.GT.
$ ( NPCOL1 ) ) THEN
1759.EQ.
IF( ICOL1ICOL2 ) THEN
1760.EQ.
IF( ISTARTISTOP ) THEN
1761 CALL ZGESD2D( CONTXT, IROW2-IROW1+1, 2,
1762 $ A( ( ICOL1-2 )*LDA+IROW1 ),
1763 $ LDA, MYROW, RIGHT )
1766 CALL ZGERV2D( CONTXT, IROW2-IROW1+1, 2,
1767 $ A( ( ICOL1-2 )*LDA+IROW1 ),
1768 $ LDA, MYROW, RIGHT )
1770 ELSE IF( SKIP ) THEN
1771.EQ.
IF( ISTARTISTOP ) THEN
1772 CALL ZGERV2D( CONTXT, IROW2-IROW1+1, 2,
1774 $ IROW2-IROW1+1, MYROW, LEFT )
1778 II = ICBUF + IROW2 - 2*IROW1 + 2
1779 DO 320 J = IROW1, IROW2
1780 SUM = T1*WORK( J+II ) +
1781 $ T2*A( ( ICOL1-1 )*LDA+J ) +
1782 $ T3*A( ICOL1*LDA+J )
1783 WORK( J+II ) = WORK( J+II ) - SUM
1784 A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*
1785 $ LDA+J ) - SUM*DCONJG( V2 )
1786 A( ICOL1*LDA+J ) = A( ICOL1*LDA+J ) -
1789 CALL ZGESD2D( CONTXT, IROW2-IROW1+1, 2,
1790 $ WORK( ICBUF+1 ), IROW2-IROW1+1,
1797.AND.
IF( ( WANTZ ) ( MOD( K-1,
1798.GE..AND..GT.
$ HBL )HBL-2 ) ( NPCOL1 ) ) THEN
1804.EQ.
IF( MOD( K-1, HBL )HBL-2 ) THEN
1805.NE.
IF( ICOL1ICOL2 ) THEN
1806 CALL ZGESD2D( CONTXT, IROW2-IROW1+1, 2,
1807 $ Z( ( ICOL1-1 )*LDZ+IROW1 ),
1808 $ LDZ, MYROW, RIGHT )
1809.EQ..AND.
IF( ( ISTARTISTOP ) SKIP ) THEN
1810 CALL ZGERV2D( CONTXT, IROW2-IROW1+1, 2,
1811 $ Z( ( ICOL1-1 )*LDZ+
1812 $ IROW1 ), LDZ, MYROW,
1815 ELSE IF( SKIP ) THEN
1816 CALL ZGERV2D( CONTXT, IROW2-IROW1+1, 2,
1818 $ IROW2-IROW1+1, MYROW, LEFT )
1821 ICOL1 = ( ICOL1-1 )*LDZ
1822 II = IZBUF - IROW1 + 1
1823 JJ = IZBUF + IROW2 - 2*IROW1 + 2
1824 DO 330 J = IROW1, IROW2
1825 SUM = T1*WORK( II+J ) +
1826 $ T2*WORK( JJ+J ) + T3*Z( ICOL1+J )
1827 WORK( II+J ) = WORK( II+J ) - SUM
1828 WORK( JJ+J ) = WORK( JJ+J ) -
1830 Z( ICOL1+J ) = Z( ICOL1+J ) -
1833.EQ.
IF( ISTARTISTOP ) THEN
1834 CALL ZGESD2D( CONTXT, IROW2-IROW1+1, 2,
1836 $ IROW2-IROW1+1, MYROW,
1841.EQ.
IF( MOD( K-1, HBL )HBL-1 ) THEN
1842.EQ.
IF( ICOL1ICOL2 ) THEN
1843.EQ.
IF( ISTARTISTOP ) THEN
1844 CALL ZGESD2D( CONTXT, IROW2-IROW1+1, 2,
1845 $ Z( ( ICOL1-2 )*LDZ+
1846 $ IROW1 ), LDZ, MYROW,
1850 CALL ZGERV2D( CONTXT, IROW2-IROW1+1, 2,
1851 $ Z( ( ICOL1-2 )*LDZ+
1852 $ IROW1 ), LDZ, MYROW,
1855 ELSE IF( SKIP ) THEN
1856.EQ.
IF( ISTARTISTOP ) THEN
1857 CALL ZGERV2D( CONTXT, IROW2-IROW1+1, 2,
1859 $ IROW2-IROW1+1, MYROW,
1864 ICOL1 = ( ICOL1-1 )*LDZ
1865 II = IZBUF + IROW2 - 2*IROW1 + 2
1866 DO 340 J = IROW1, IROW2
1867 SUM = T1*WORK( II+J ) +
1869 $ T3*Z( J+ICOL1+LDZ )
1870 WORK( II+J ) = WORK( II+J ) - SUM
1871 Z( J+ICOL1 ) = Z( J+ICOL1 ) -
1873 Z( J+ICOL1+LDZ ) = Z( J+ICOL1+LDZ ) -
1876 CALL ZGESD2D( CONTXT, IROW2-IROW1+1, 2,
1878 $ IROW2-IROW1+1, MYROW, LEFT )
1889 DO 420 KI = 1, IBULGE
1890.GT.
IF( KCOL( KI )KP2COL( KI ) )
1892.NE..AND.
IF( ( MYCOLICURCOL( KI ) )
1893.NE.
$ ( RIGHTICURCOL( KI ) ) )GO TO 420
1894 ISTART = MAX( K1( KI ), M )
1895 ISTOP = MIN( K2( KI ), I-1 )
1896.GE.
IF( MOD( ISTART-1, HBL )HBL-2 ) THEN
1907 DO 410 K = ISTART, ISTOP
1909 V2 = WORK( VECSIDX+( K-1 )*3+1 )
1910 V3 = WORK( VECSIDX+( K-1 )*3+2 )
1911 T1 = WORK( VECSIDX+( K-1 )*3+3 )
1912 NR = MIN( 3, I-K+1 )
1913.EQ..AND..LE.
IF( ( NR3 ) ( KCOL( KI )KP2COL( KI ) ) )
1916.LT..AND.
IF( ( KISTOP )
1917.LT.
$ ( MOD( K-1, HBL )HBL-2 ) ) THEN
1918 ITMP1 = MIN( ISTART+1, I ) - 1
1920.LT.
IF( MOD( K-1, HBL )HBL-2 ) THEN
1921 ITMP1 = MIN( K+3, I )
1923.EQ.
IF( MOD( K-1, HBL )HBL-2 ) THEN
1924 ITMP1 = MAX( I1, K-1 ) - 1
1926.EQ.
IF( MOD( K-1, HBL )HBL-1 ) THEN
1927 ITMP1 = MAX( I1, K-2 ) - 1
1930.LT.
IF( MOD( K-1, HBL )HBL-2 ) THEN
1931 ICOL1 = KCOL( KI ) + K - ISTART
1932 ICOL2 = KP2COL( KI ) + K - ISTART
1935 ICOL2 = KP2COL( KI )
1936.GT.
IF( KISTART ) THEN
1937.EQ.
IF( RIGHTICURCOL( KI ) ) THEN
1940.EQ.
IF( MYCOLICURCOL( KI ) ) THEN
1945 CALL INFOG1L( I1, HBL, NPROW, MYROW, IAFIRST,
1947 IROW2 = NUMROC( ITMP1, HBL, MYROW, IAFIRST, NPROW )
1948.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-2 )
1949.GT.
$ ( NPCOL1 ) ) THEN
1950.EQ.
IF( ICOL1ICOL2 ) THEN
1951 CALL ZGERV2D( CONTXT, IROW2-IROW1+1, 2,
1952 $ WORK( ICBUF+1 ), IROW2-IROW1+1,
1956 II = ICBUF - IROW1 + 1
1957 JJ = ICBUF + IROW2 - 2*IROW1 + 2
1958 DO 370 J = IROW1, IROW2
1959 SUM = T1*WORK( II+J ) + T2*WORK( JJ+J ) +
1960 $ T3*A( ( ICOL1-1 )*LDA+J )
1961 WORK( II+J ) = WORK( II+J ) - SUM
1962 WORK( JJ+J ) = WORK( JJ+J ) -
1964 A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*
1965 $ LDA+J ) - SUM*DCONJG( V3 )
1967.EQ.
IF( ISTARTISTOP ) THEN
1968 CALL ZGESD2D( CONTXT, IROW2-IROW1+1, 2,
1970 $ IROW2-IROW1+1, MYROW, LEFT )
1974.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-1 )
1975.GT.
$ ( NPCOL1 ) ) THEN
1976.NE.
IF( ICOL1ICOL2 ) THEN
1977.EQ.
IF( ISTARTISTOP ) THEN
1978 CALL ZGERV2D( CONTXT, IROW2-IROW1+1, 2,
1980 $ IROW2-IROW1+1, MYROW, LEFT )
1984 II = ICBUF + IROW2 - 2*IROW1 + 2
1985 DO 380 J = IROW1, IROW2
1986 SUM = T1*WORK( J+II ) +
1987 $ T2*A( ( ICOL1-1 )*LDA+J ) +
1988 $ T3*A( ICOL1*LDA+J )
1989 WORK( J+II ) = WORK( J+II ) - SUM
1990 A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*
1991 $ LDA+J ) - SUM*DCONJG( V2 )
1992 A( ICOL1*LDA+J ) = A( ICOL1*LDA+J ) -
1995 CALL ZGESD2D( CONTXT, IROW2-IROW1+1, 2,
1996 $ WORK( ICBUF+1 ), IROW2-IROW1+1,
2003.AND.
IF( ( WANTZ ) ( MOD( K-1,
2004.GE..AND..GT.
$ HBL )HBL-2 ) ( NPCOL1 ) ) THEN
2010.EQ.
IF( MOD( K-1, HBL )HBL-2 ) THEN
2011.EQ.
IF( ICOL1ICOL2 ) THEN
2012 CALL ZGERV2D( CONTXT, IROW2-IROW1+1, 2,
2014 $ IROW2-IROW1+1, MYROW, LEFT )
2017 ICOL1 = ( ICOL1-1 )*LDZ
2018 II = IZBUF - IROW1 + 1
2019 JJ = IZBUF + IROW2 - 2*IROW1 + 2
2020 DO 390 J = IROW1, IROW2
2021 SUM = T1*WORK( II+J ) +
2022 $ T2*WORK( JJ+J ) + T3*Z( ICOL1+J )
2023 WORK( II+J ) = WORK( II+J ) - SUM
2024 WORK( JJ+J ) = WORK( JJ+J ) -
2026 Z( ICOL1+J ) = Z( ICOL1+J ) -
2029.EQ.
IF( ISTARTISTOP ) THEN
2030 CALL ZGESD2D( CONTXT, IROW2-IROW1+1, 2,
2032 $ IROW2-IROW1+1, MYROW,
2037.EQ.
IF( MOD( K-1, HBL )HBL-1 ) THEN
2038.NE.
IF( ICOL1ICOL2 ) THEN
2039.EQ.
IF( ISTARTISTOP ) THEN
2040 CALL ZGERV2D( CONTXT, IROW2-IROW1+1, 2,
2042 $ IROW2-IROW1+1, MYROW,
2047 ICOL1 = ( ICOL1-1 )*LDZ
2048 II = IZBUF + IROW2 - 2*IROW1 + 2
2049 DO 400 J = IROW1, IROW2
2050 SUM = T1*WORK( II+J ) +
2052 $ T3*Z( J+ICOL1+LDZ )
2053 WORK( II+J ) = WORK( II+J ) - SUM
2054 Z( J+ICOL1 ) = Z( J+ICOL1 ) -
2056 Z( J+ICOL1+LDZ ) = Z( J+ICOL1+LDZ ) -
2059 CALL ZGESD2D( CONTXT, IROW2-IROW1+1, 2,
2061 $ IROW2-IROW1+1, MYROW, LEFT )
2069 DO 440 KI = 1, IBULGE
2070.GT.
IF( KCOL( KI )KP2COL( KI ) )
2072.NE..AND.
IF( ( MYCOLICURCOL( KI ) )
2073.NE.
$ ( RIGHTICURCOL( KI ) ) )GO TO 440
2074 ISTART = MAX( K1( KI ), M )
2075 ISTOP = MIN( K2( KI ), I-1 )
2076.GE.
IF( MOD( ISTART-1, HBL )HBL-2 ) THEN
2087 DO 430 K = ISTART, ISTOP
2089 V2 = WORK( VECSIDX+( K-1 )*3+1 )
2090 V3 = WORK( VECSIDX+( K-1 )*3+2 )
2091 T1 = WORK( VECSIDX+( K-1 )*3+3 )
2092 NR = MIN( 3, I-K+1 )
2093.EQ..AND..LE.
IF( ( NR3 ) ( KCOL( KI )KP2COL( KI ) ) )
2096.LT..AND.
IF( ( KISTOP )
2097.LT.
$ ( MOD( K-1, HBL )HBL-2 ) ) THEN
2098 ITMP1 = MIN( ISTART+1, I ) - 1
2100.LT.
IF( MOD( K-1, HBL )HBL-2 ) THEN
2101 ITMP1 = MIN( K+3, I )
2103.EQ.
IF( MOD( K-1, HBL )HBL-2 ) THEN
2104 ITMP1 = MAX( I1, K-1 ) - 1
2106.EQ.
IF( MOD( K-1, HBL )HBL-1 ) THEN
2107 ITMP1 = MAX( I1, K-2 ) - 1
2110.LT.
IF( MOD( K-1, HBL )HBL-2 ) THEN
2111 ICOL1 = KCOL( KI ) + K - ISTART
2112 ICOL2 = KP2COL( KI ) + K - ISTART
2115 ICOL2 = KP2COL( KI )
2116.GT.
IF( KISTART ) THEN
2117.EQ.
IF( RIGHTICURCOL( KI ) ) THEN
2120.EQ.
IF( MYCOLICURCOL( KI ) ) THEN
2125 CALL INFOG1L( I1, HBL, NPROW, MYROW, IAFIRST,
2127 IROW2 = NUMROC( ITMP1, HBL, MYROW, IAFIRST, NPROW )
2128.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-2 )
2129.GT.
$ ( NPCOL1 ) ) THEN
2130.NE.
IF( ICOL1ICOL2 ) THEN
2131.EQ.
IF( ISTARTISTOP ) THEN
2132 CALL ZGERV2D( CONTXT, IROW2-IROW1+1, 2,
2133 $ A( ( ICOL1-1 )*LDA+IROW1 ),
2134 $ LDA, MYROW, RIGHT )
2138.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-1 )
2139.GT.
$ ( NPCOL1 ) ) THEN
2140.EQ.
IF( ICOL1ICOL2 ) THEN
2141 CALL ZGERV2D( CONTXT, IROW2-IROW1+1, 2,
2142 $ A( ( ICOL1-2 )*LDA+IROW1 ),
2143 $ LDA, MYROW, RIGHT )
2149.AND.
IF( ( WANTZ ) ( MOD( K-1,
2150.GE..AND..GT.
$ HBL )HBL-2 ) ( NPCOL1 ) ) THEN
2156.EQ.
IF( MOD( K-1, HBL )HBL-2 ) THEN
2157.NE.
IF( ICOL1ICOL2 ) THEN
2158.EQ.
IF( ISTARTISTOP ) THEN
2159 CALL ZGERV2D( CONTXT, IROW2-IROW1+1, 2,
2160 $ Z( ( ICOL1-1 )*LDZ+
2161 $ IROW1 ), LDZ, MYROW,
2166.EQ.
IF( MOD( K-1, HBL )HBL-1 ) THEN
2167.EQ.
IF( ICOL1ICOL2 ) THEN
2168 CALL ZGERV2D( CONTXT, IROW2-IROW1+1, 2,
2169 $ Z( ( ICOL1-2 )*LDZ+IROW1 ),
2170 $ LDZ, MYROW, RIGHT )
2184 DO 530 KI = 1, IBULGE
2185 ISTART = MAX( K1( KI ), M )
2186 ISTOP = MIN( K2( KI ), I-1 )
2187.GE.
IF( MOD( ISTART-1, HBL )HBL-2 ) THEN
2199 DO 520 K = ISTART, ISTOP
2201 V2 = WORK( VECSIDX+( K-1 )*3+1 )
2202 V3 = WORK( VECSIDX+( K-1 )*3+2 )
2203 T1 = WORK( VECSIDX+( K-1 )*3+3 )
2204 NR = MIN( 3, I-K+1 )
2206.EQ.
IF ( ICURROW( KI )MYROW ) THEN
2209.EQ.
IF ( ICURCOL( KI )MYCOL ) THEN
2216 CALL INFOG1L( K, HBL, NPCOL, MYCOL, JAFIRST, LILOH,
2219 CALL INFOG1L( 1, HBL, NPROW, MYROW, IAFIRST, ITMP2,
2221 ITMP1 = NUMROC( K+1, HBL, MYROW, IAFIRST, NPROW )
2222.EQ.
IF( ICURROW( KI )MYROW ) THEN
2223.EQ..OR..EQ..OR.
IF( ( ISPEC0 ) ( NPROW1 )
2224.EQ.
$ ( MOD( K-1, HBL )HBL-2 ) ) THEN
2226 DO 460 J = ( LILOH-1 )*LDA,
2227 $ ( LIHIH-1 )*LDA, LDA
2228 SUM = DCONJG( T1 )*A( ITMP1+J ) +
2229 $ DCONJG( T2 )*A( ITMP1+1+J )
2230 A( ITMP1+J ) = A( ITMP1+J ) - SUM
2231 A( ITMP1+1+J ) = A( ITMP1+1+J ) - SUM*V2
2234.EQ.
IF( MOD( K-1, HBL )HBL-1 ) THEN
2235 CALL ZGERV2D( CONTXT, 1, LIHIH-LILOH+1,
2236 $ WORK( IRBUF+1 ), 1, UP,
2238 DO 470 J = LILOH, LIHIH
2240 $ WORK( IRBUF+J-LILOH+1 ) +
2241 $ DCONJG( T2 )*A( ( J-1 )*LDA+
2243 WORK( IRBUF+J-LILOH+1 ) = WORK( IRBUF+
2245 A( ( J-1 )*LDA+ITMP1 ) = A( ( J-1 )*
2246 $ LDA+ITMP1 ) - SUM*V2
2248 CALL ZGESD2D( CONTXT, 1, LIHIH-LILOH+1,
2249 $ WORK( IRBUF+1 ), 1, UP,
2254.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-1 )
2255.EQ.
$ ( ICURROW( KI )DOWN ) ) THEN
2256 CALL ZGESD2D( CONTXT, 1, LIHIH-LILOH+1,
2257 $ A( ( LILOH-1 )*LDA+ITMP1 ),
2258 $ LDA, DOWN, MYCOL )
2259 CALL ZGERV2D( CONTXT, 1, LIHIH-LILOH+1,
2260 $ A( ( LILOH-1 )*LDA+ITMP1 ),
2261 $ LDA, DOWN, MYCOL )
2268 CALL INFOG1L( I1, HBL, NPROW, MYROW, IAFIRST,
2270 LIHIH = NUMROC( I, HBL, MYROW, IAFIRST, NPROW )
2272.EQ.
IF( ICURCOL( KI )MYCOL ) THEN
2274.EQ..OR..EQ..OR.
IF( ( ISPEC0 ) ( NPCOL1 )
2275.EQ.
$ ( MOD( K-1, HBL )HBL-2 ) ) THEN
2276 CALL INFOG1L( K, HBL, NPCOL, MYCOL, JAFIRST,
2278 ITMP2 = NUMROC( K+1, HBL, MYCOL, JAFIRST,
2280 DO 480 J = LILOH, LIHIH
2281 SUM = T1*A( ( ITMP1-1 )*LDA+J ) +
2282 $ T2*A( ITMP1*LDA+J )
2283 A( ( ITMP1-1 )*LDA+J ) = A( ( ITMP1-1 )*
2285 A( ITMP1*LDA+J ) = A( ITMP1*LDA+J ) -
2290.EQ.
IF( MOD( K-1, HBL )HBL-1 ) THEN
2291 CALL ZGERV2D( CONTXT, LIHIH-LILOH+1, 1,
2293 $ LIHIH-LILOH+1, MYROW, LEFT )
2294 DO 490 J = LILOH, LIHIH
2295 SUM = T1*WORK( ICBUF+J ) +
2296 $ T2*A( ( ITMP1-1 )*LDA+J )
2297 WORK( ICBUF+J ) = WORK( ICBUF+J ) - SUM
2298 A( ( ITMP1-1 )*LDA+J )
2299 $ = A( ( ITMP1-1 )*LDA+J ) -
2302 CALL ZGESD2D( CONTXT, LIHIH-LILOH+1, 1,
2304 $ LIHIH-LILOH+1, MYROW, LEFT )
2308.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-1 )
2309.EQ.
$ ( ICURCOL( KI )RIGHT ) ) THEN
2311 CALL ZGESD2D( CONTXT, LIHIH-LILOH+1, 1,
2312 $ A( ( ITMP1-1 )*LDA+LILOH ),
2313 $ LDA, MYROW, RIGHT )
2314 CALL INFOG1L( K, HBL, NPCOL, MYCOL, JAFIRST,
2316 ITMP2 = NUMROC( K+1, HBL, MYCOL, JAFIRST,
2318 CALL ZGERV2D( CONTXT, LIHIH-LILOH+1, 1,
2319 $ A( ( ITMP1-1 )*LDA+LILOH ),
2320 $ LDA, MYROW, RIGHT )
2328.EQ.
IF( ICURCOL( KI )MYCOL ) THEN
2330.EQ..OR..EQ..OR.
IF( ( ISPEC0 ) ( NPCOL1 )
2331.EQ.
$ ( MOD( K-1, HBL )HBL-2 ) ) THEN
2332 ITMP1 = KCOL( KI ) + K - ISTART
2333 ITMP1 = ( ITMP1-1 )*LDZ
2334 DO 500 J = LILOZ, LIHIZ
2335 SUM = T1*Z( J+ITMP1 ) +
2336 $ T2*Z( J+ITMP1+LDZ )
2337 Z( J+ITMP1 ) = Z( J+ITMP1 ) - SUM
2338 Z( J+ITMP1+LDZ ) = Z( J+ITMP1+LDZ ) -
2344.EQ.
IF( MOD( K-1, HBL )HBL-1 ) THEN
2345 CALL ZGERV2D( CONTXT, LIHIZ-LILOZ+1, 1,
2346 $ WORK( IZBUF+1 ), LDZ,
2348 ITMP1 = ( ITMP1-1 )*LDZ
2349 DO 510 J = LILOZ, LIHIZ
2350 SUM = T1*WORK( IZBUF+J ) +
2352 WORK( IZBUF+J ) = WORK( IZBUF+J ) -
2354 Z( J+ITMP1 ) = Z( J+ITMP1 ) -
2357 CALL ZGESD2D( CONTXT, LIHIZ-LILOZ+1, 1,
2358 $ WORK( IZBUF+1 ), LDZ,
2366.EQ..AND.
IF( ( MOD( K-1, HBL )HBL-1 )
2367.EQ.
$ ( ICURCOL( KI )RIGHT ) ) THEN
2369 ITMP1 = ( ITMP1-1 )*LDZ
2370 CALL ZGESD2D( CONTXT, LIHIZ-LILOZ+1, 1,
2371 $ Z( LILOZ+ITMP1 ), LDZ,
2373 CALL ZGERV2D( CONTXT, LIHIZ-LILOZ+1, 1,
2374 $ Z( LILOZ+ITMP1 ), LDZ,
2384.EQ.
IF( NPROW1 ) THEN
2385 KROW( KI ) = KROW( KI ) + K2( KI ) - K1( KI ) + 1
2386 KP2ROW( KI ) = KP2ROW( KI ) + K2( KI ) - K1( KI ) + 1
2388.LT..AND.
IF( ( MOD( K1( KI )-1, HBL )HBL-2 )
2389.EQ..AND..GT.
$ ( ICURROW( KI )MYROW ) ( NPROW1 ) )
2391 KROW( KI ) = KROW( KI ) + K2( KI ) - K1( KI ) + 1
2393.LT..AND.
IF( ( MOD( K2( KI ), HBL )HBL-2 )
2394.EQ..AND..GT.
$ ( ICURROW( KI )MYROW ) ( NPROW1 ) )
2396 KP2ROW( KI ) = KP2ROW( KI ) + K2( KI ) - K1( KI ) + 1
2398.GE..AND.
IF( ( MOD( K1( KI )-1, HBL )HBL-2 )
2399.EQ..OR..EQ.
$ ( ( MYROWICURROW( KI ) ) ( DOWN
2400.AND..GT.
$ ICURROW( KI ) ) ) ( NPROW1 ) ) THEN
2401 CALL INFOG1L( K2( KI )+1, HBL, NPROW, MYROW, IAFIRST,
2402 $ KROW( KI ), ITMP2 )
2404.GE..AND.
IF( ( MOD( K2( KI ), HBL )HBL-2 )
2405.EQ..OR..EQ.
$ ( ( MYROWICURROW( KI ) ) ( UP
2406.AND..GT.
$ ICURROW( KI ) ) ) ( NPROW1 ) ) THEN
2407 KP2ROW( KI ) = NUMROC( K2( KI )+3, HBL, MYROW,
2410.EQ.
IF( NPCOL1 ) THEN
2411 KCOL( KI ) = KCOL( KI ) + K2( KI ) - K1( KI ) + 1
2412 KP2COL( KI ) = KP2COL( KI ) + K2( KI ) - K1( KI ) + 1
2414.LT..AND.
IF( ( MOD( K1( KI )-1, HBL )HBL-2 )
2415.EQ..AND..GT.
$ ( ICURCOL( KI )MYCOL ) ( NPCOL1 ) )
2417 KCOL( KI ) = KCOL( KI ) + K2( KI ) - K1( KI ) + 1
2419.LT..AND.
IF( ( MOD( K2( KI ), HBL )HBL-2 )
2420.EQ..AND..GT.
$ ( ICURCOL( KI )MYCOL ) ( NPCOL1 ) )
2422 KP2COL( KI ) = KP2COL( KI ) + K2( KI ) - K1( KI ) + 1
2424.GE..AND.
IF( ( MOD( K1( KI )-1, HBL )HBL-2 )
2425.EQ..OR..EQ.
$ ( ( MYCOLICURCOL( KI ) ) ( RIGHT
2426.AND..GT.
$ ICURCOL( KI ) ) ) ( NPCOL1 ) ) THEN
2427 CALL INFOG1L( K2( KI )+1, HBL, NPCOL, MYCOL, JAFIRST,
2428 $ KCOL( KI ), ITMP2 )
2430.GE..AND.
IF( ( MOD( K2( KI ), HBL )HBL-2 )
2431.EQ..OR..EQ.
$ ( ( MYCOLICURCOL( KI ) ) ( LEFT
2432.AND..GT.
$ ICURCOL( KI ) ) ) ( NPCOL1 ) ) THEN
2433 KP2COL( KI ) = NUMROC( K2( KI )+3, HBL, MYCOL,
2436 K1( KI ) = K2( KI ) + 1
2437 ISTOP = MIN( K1( KI )+ROTN-MOD( K1( KI ), ROTN ), I-2 )
2438 ISTOP = MIN( ISTOP, K1( KI )+HBL-3-
2439 $ MOD( K1( KI )-1, HBL ) )
2440 ISTOP = MIN( ISTOP, I2-2 )
2441 ISTOP = MAX( ISTOP, K1( KI ) )
2442.EQ..AND.
IF( ( MOD( K1( KI )-1, HBL )HBL-2 )
2443.LT.
$ ( ISTOPMIN( I-2, I2-2 ) ) ) THEN
2447.LE.
IF( K1( KI )ISTOP ) THEN
2448.EQ..AND.
IF( ( MOD( K1( KI )-1, HBL )HBL-2 )
2449.GT.
$ ( I-K1( KI )1 ) ) THEN
2453 ICURROW( KI ) = MOD( ICURROW( KI )+1, NPROW )
2454 ICURCOL( KI ) = MOD( ICURCOL( KI )+1, NPCOL )
2459.LE.
IF( K2( IBULGE )I-1 )
2476 CALL INFOG2L( I, I, DESCA, NPROW, NPCOL, MYROW, MYCOL, IROW,
2477 $ ICOL, ITMP1, ITMP2 )
2478.EQ..AND..EQ.
IF( ( MYROWITMP1 ) ( MYCOLITMP2 ) ) THEN
2479 W( I ) = A( ( ICOL-1 )*LDA+IROW )
2483.EQ.
ELSE IF( LI-1 ) THEN
2487 CALL PZLACP3( 2, I-1, A, DESCA, S1, 2*IBLK, -1, -1, 0 )
2488 CALL ZLANV2( S1( 1, 1 ), S1( 1, 2 ), S1( 2, 1 ), S1( 2, 2 ),
2489 $ W( I-1 ), W( I ), CS, SN )
2490 CALL PZLACP3( 2, I-1, A, DESCA, S1, 2*IBLK, 0, 0, 1 )
2492.NE.
IF( NODE0 ) THEN
2503 CALL PZROT( I2-I, A, I-1, I+1, DESCA, N, A, I, I+1,
2504 $ DESCA, N, CS, SN )
2506 CALL PZROT( I-I1-1, A, I1, I-1, DESCA, 1, A, I1, I, DESCA,
2507 $ 1, CS, DCONJG( SN ) )
2513 CALL PZROT( NZ, Z, ILOZ, I-1, DESCZ, 1, Z, ILOZ, I, DESCZ,
2514 $ 1, CS, DCONJG( SN ) )
2522.LE.
IF( JBLK2*IBLK ) THEN
2523 CALL PZLACP3( I-L+1, L, A, DESCA, S1, 2*IBLK, 0, 0, 0 )
2524 CALL ZLAHQR2( .FALSE., .FALSE., JBLK, 1, JBLK, S1, 2*IBLK,
2525 $ W( L ), 1, JBLK, Z, LDZ, IERR )
2526.NE.
IF( NODE0 ) THEN
2545 CALL ZGSUM2D( CONTXT, 'all
', ' ', N, 1, W, N, -1, -1 )