|
|
| |
| # lines: |
2550 | | # code: |
2550 | | # comment: | 0 | |
# blank: | 0 |
| # Variables: | 73 |
| # Callers: | 0 |
| # Callings: | 4 |
| # Words: | 2886 |
| # Keywords: | 1198 |
|
|
|
|
|
..
.. Local Scalars ..
..
.. Local Arrays ..
..
.. External Functions ..
..
.. External Subroutines ..
..
.. Intrinsic Functions ..
..
.. Statement Functions ..
..
.. Statement Function definitions ..
..
.. Executable Statements ..
NODE (IAFIRST,JAFIRST) OWNS A(1,1)
Determine the number of columns we have so we can check workspace
Set work array indices
Find a value for ROTN
Set machine-dependent constants for the stopping criterion.
If NORM(H) <= SQRT(OVFL), overflow should not occur.
I1 and I2 are the indices of the first row and last column of H
to which transformations must be applied. If eigenvalues only are
being computed, I1 and I2 are set inside the main loop.
ITN is the total number of QR iterations allowed.
The main loop begins here. I is the loop index and decreases from
IHI to ILO in steps of our schur block size (<=2*IBLK). Each
iteration of the loop works with the active submatrix in rows
and columns L to I. Eigenvalues I+1 to IHI have already
converged. Either L = ILO or the global A(L,L-1) is negligible
so that the matrix splits.
Perform QR iterations on rows and columns ILO to I until a
submatrix of order 1 or 2 splits off at the bottom because a
subdiagonal element has become negligible.
Look for a single small subdiagonal element.
H(L,L-1) is negligible
Exit from loop if a submatrix of order 1 or 2 has split off.
For Schur form, use 2x2 blocks
If we don't want the Schur form, use bigger blocks.
Now the active submatrix is in rows and columns L to I. If
eigenvalues only are being computed, only the active submatrix
need be transformed.
Copy submatrix of size 2*JBLK and prepare to do generalized
Wilkinson shift or an exceptional shift
Make sure it's divisible by LCM (we want even workloads!)
Exceptional shift.
Prepare to use Wilkinson's double shift
Look for two consecutive small subdiagonal elements:
PZLACONSB is the routine that does this.
Double-shift QR step
NBULGE is the number of bulges that will be attempted
Do not exceed maximum determined.
Make sure it's divisible by LCM (we want even workloads!)
If we are starting in the middle because of consecutive small
subdiagonal elements, we need to see how many bulges we
can send through without breaking the consecutive small
subdiagonal property.
Copy a chunk of elements from global A(M-1:,M-1:)
Find a new NBULGE based on the bulges we have.
Everyone needs to receive the new NBULGE
IBULGE is the number of bulges going so far
"A" row defs : main row transforms from LOCALK to LOCALI2
"A" col defs : main col transforms from LOCALI1 to LOCALM
Which row & column will start the bulges
Set all values for bulges. All bulges are stored in
intermediate steps as loops over KI. Their current "task"
over the global M to I-1 values is always K1(KI) to K2(KI).
However, because there are many bulges, K1(KI) & K2(KI) might
go past that range while later bulges (KI+1,KI+2,etc..) are
finishing up. Even if ROTN=1, in order to minimize border
communication sometimes K1(KI)=HBL-2 & K2(KI)=HBL-1 so both
border messages can be handled at once.
Rules:
If MOD(K1(KI)-1,HBL) < HBL-2 then MOD(K2(KI)-1,HBL)<HBL-2
If MOD(K1(KI)-1,HBL) = HBL-1 then MOD(K2(KI)-1,HBL)=HBL-1
K2(KI)-K1(KI) <= ROTN
We first hit a border when MOD(K1(KI)-1,HBL)=HBL-2 and we hit
it again when MOD(K1(KI)-1,HBL)=HBL-1.
Get first transform on node who owns M+2,M+2
The main implicit shift Francis loops over the bulges starts
here!
When we hit a border, there are row and column transforms that
overlap over several processors and the code gets very
"congested." As a remedy, when we first hit a border, a 6x6
*local* matrix is generated on one node (called SMALLA) and
work is done on that. At the end of the border, the data is
passed back and everything stays a lot simpler.
Copy 6 elements from global A(K-1:K+4,K-1:K+4)
Copy 6 elements from global A(K-2:K+3,K-2:K+3)
ZLAHQR used to have a single row application and a single
column application to H. Here we do something a little
more clever. We break each transformation down into 3
parts:
1.) The minimum amount of work it takes to determine
a group of ROTN transformations (this is on
the critical path.) (Loops 50-120)
(the data is broadcast now: loops 180-240)
2.) The small work it takes so that each of the rows
and columns is at the same place. For example,
all ROTN row transforms are all complete
through some column TMP. (Loops 250-260)
3.) The majority of the row and column transforms
are then applied in a block fashion.
(row transforms are in loops 280-380)
(col transforms are in loops 400-540)
Each of these three parts are further subdivided into 3
parts:
A.) Work at the start of a border when
MOD(ISTART-1,HBL) = HBL-2
B.) Work at the end of a border when
MOD(ISTART-1,HBL) = HBL-1
C.) Work in the middle of the block when
MOD(ISTART-1,HBL) < HBL-2
Further optimization is met with the boolean SKIP. A border
communication can be broken into several parts for
efficient parallelism:
Loop over all the bulges, just sending the data out
Loop over all the bulges, just doing the work
Loop over all the bulges, just sending the data back.
Following differs in comparison to pdlahqr.
Do some work so next step is ready...
Set a subdiagonal to zero now if it's possible
Following differs in comparison to pdlahqr.
Do some work so next step is ready...
(IROW1,ICOL1) is (I,J)-coordinates of H(ISTART,ISTART)
The ELSE part of this IF needs updated VCOPY, this
was not necessary in PDLAHQR.
|
|
|
|
0001 SUBROUTINE PZLAHQR( WANTT , WANTZ , N , ILO , IHI , A , DESCA , W , ILOZ ,
0002 $IHIZ , Z , DESCZ , WORK , LWORK , IWORK , ILWORK ,
0003 $INFO )
0004
0005 * -- ScaLAPACK routine(version 1.7.3) --
0006 * University of Tennessee , Knoxville , Oak Ridge National Laboratory ,
0007 * and University of California , Berkeley.
0008 * 1.7.3 : March 22 , 2006
0009 * modification suggested by Mark Fahey and Greg Henry
0010 * 1.7.0 : July 31 , 2001
0011
0012 * .. Scalar Arguments ..
0013 LOGICAL WANTT , WANTZ
0014 INTEGER IHI , IHIZ , ILO , ILOZ , ILWORK , INFO , LWORK , N
0015 * ..
0016 * .. Array Arguments ..
0017 INTEGER DESCA( * ) , DESCZ( * ) , IWORK( * )
0018 COMPLEX*16 A( * ) , W( * ) , WORK( * ) , Z( * )
0019 * ..
0020
0021 * Purpose
0022 * === ====
0023
0024 * PZLAHQR is an auxiliary routine used to find the Schur decomposition
0025 * and or eigenvalues of a matrix already in Hessenberg form from
0026 * cols ILO to IHI.
0027 * If Z = I , and WANTT = WANTZ = .TRUE. , H gets replaced with Z'HZ ,
0028 * with Z'Z = I , and H in Schur form.
0029
0030 * Notes
0031 * === ==
0032
0033 * Each global data object is described by an associated description
0034 * vector. This vector stores the information required to establish
0035 * the mapping between an object element and its corresponding process
0036 * and memory location.
0037
0038 * Let A be a generic term for any 2D block cyclicly distributed array.
0039 * Such a global array has an associated description vector DESCA.
0040 * In the following comments , the character _ should be read as
0041 * "of the global array".
0042
0043 * NOTATION STORED IN EXPLANATION
0044 * --- ------------ -------------- --------------------------------------
0045 * DTYPE_A(global) DESCA( DTYPE_ )The descriptor type. In this case ,
0046 * DTYPE_A = 1.
0047 * CTXT_A(global) DESCA( CTXT_ ) The BLACS context handle , indicating
0048 * the BLACS process grid A is distribu -
0049 * ted over. The context itself is glo -
0050 * bal , but the handle(the integer
0051 * value) may vary.
0052 * M_A(global) DESCA( M_ ) The number of rows in the global
0053 * array A.
0054 * N_A(global) DESCA( N_ ) The number of columns in the global
0055 * array A.
0056 * MB_A(global) DESCA( MB_ ) The blocking factor used to distribute
0057 * the rows of the array.
0058 * NB_A(global) DESCA( NB_ ) The blocking factor used to distribute
0059 * the columns of the array.
0060 * RSRC_A(global) DESCA( RSRC_ ) The process row over which the first
0061 * row of the array A is distributed.
0062 * CSRC_A(global) DESCA( CSRC_ ) The process column over which the
0063 * first column of the array A is
0064 * distributed.
0065 * LLD_A(local) DESCA( LLD_ ) The leading dimension of the local
0066 * array. LLD_A >= MAX(1 , LOCp(M_A)).
0067
0068 * Let K be the number of rows or columns of a distributed matrix ,
0069 * and assume that its process grid has dimension p x q.
0070 * LOCp( K ) denotes the number of elements of K that a process
0071 * would receive if K were distributed over the p processes of its
0072 * process column.
0073 * Similarly , LOCq( K ) denotes the number of elements of K that a
0074 * process would receive if K were distributed over the q processes of
0075 * its process row.
0076 * The values of LOCp() and LOCq() may be determined via a call to the
0077 * ScaLAPACK tool function , NUMROC :
0078 * LOCp( M ) = NUMROC( M , MB_A , MYROW , RSRC_A , NPROW ) ,
0079 * LOCq( N ) = NUMROC( N , NB_A , MYCOL , CSRC_A , NPCOL ).
0080 * An upper bound for these quantities may be computed by :
0081 * LOCp( M ) <= ceil( ceil(M / MB_A) / NPROW )*MB_A
0082 * LOCq( N ) <= ceil( ceil(N / NB_A) / NPCOL )*NB_A
0083
0084 * Arguments
0085 * === ======
0086
0087 * WANTT(global input) LOGICAL
0088 * = .TRUE. : the full Schur form T is required ;
0089 * = .FALSE. : only eigenvalues are required.
0090
0091 * WANTZ(global input) LOGICAL
0092 * = .TRUE. : the matrix of Schur vectors Z is required ;
0093 * = .FALSE. : Schur vectors are not required.
0094
0095 * N(global input) INTEGER
0096 * The order of the Hessenberg matrix A(and Z if WANTZ).
0097 * N >= 0.
0098
0099 * ILO(global input) INTEGER
0100 * IHI(global input) INTEGER
0101 * It is assumed that A is already upper quasi - triangular in
0102 * rows and columns IHI + 1 : N , and that A(ILO , ILO - 1) = 0(unless
0103 * ILO = 1). PZLAHQR works primarily with the Hessenberg
0104 * submatrix in rows and columns ILO to IHI , but applies
0105 * transformations to all of H if WANTT is .TRUE..
0106 * 1 <= ILO <= max(1 , IHI) ; IHI <= N.
0107
0108 * A(global input / output) COMPLEX*16 array , dimension
0109 * (DESCA(LLD_) ,*)
0110 * On entry , the upper Hessenberg matrix A.
0111 * On exit , if WANTT is .TRUE. , A is upper triangular in rows
0112 * and columns ILO : IHI. If WANTT is .FALSE. , the contents of
0113 * A are unspecified on exit.
0114
0115 * DESCA(global and local input) INTEGER array of dimension DLEN_.
0116 * The array descriptor for the distributed matrix A.
0117
0118 * W(global replicated output) COMPLEX*16 array , dimension(N)
0119 * The computed eigenvalues ILO to IHI are stored in the
0120 * corresponding elements of W. If WANTT is .TRUE. , the
0121 * eigenvalues are stored in the same order as on the diagonal
0122 * of the Schur form returned in A. A may be returned with
0123 * larger diagonal blocks until the next release.
0124
0125 * ILOZ(global input) INTEGER
0126 * IHIZ(global input) INTEGER
0127 * Specify the rows of Z to which transformations must be
0128 * applied if WANTZ is .TRUE..
0129 * 1 <= ILOZ <= ILO ; IHI <= IHIZ <= N.
0130
0131 * Z(global input / output) COMPLEX*16 array.
0132 * If WANTZ is .TRUE. , on entry Z must contain the current
0133 * matrix Z of transformations accumulated by PZHSEQR , and on
0134 * exit Z has been updated ; transformations are applied only to
0135 * the submatrix Z(ILOZ : IHIZ , ILO : IHI).
0136 * If WANTZ is .FALSE. , Z is not referenced.
0137
0138 * DESCZ(global and local input) INTEGER array of dimension DLEN_.
0139 * The array descriptor for the distributed matrix Z.
0140
0141 * WORK(local output) COMPLEX*16 array of size LWORK
0142 * (Unless LWORK =- 1 , in which case WORK must be at least size 1)
0143
0144 * LWORK(local input) INTEGER
0145 * WORK(LWORK) is a local array and LWORK is assumed big enough
0146 * so that LWORK >= 3*N +
0147 * MAX( 2*MAX(DESCZ(LLD_) , DESCA(LLD_)) + 2*LOCq(N) ,
0148 * 7*Ceil(N / HBL) / LCM(NPROW , NPCOL)) +
0149 * MAX( 2*N ,(8*LCM(NPROW , NPCOL) + 2)**2 )
0150 * If LWORK =- 1 , then WORK(1) gets set to the above number and
0151 * the code returns immediately.
0152
0153 * IWORK(global and local input) INTEGER array of size ILWORK
0154 * This will hold some of the IBLK integer arrays.
0155 * This is held as a place holder for a future release.
0156 * Currently unreferenced.
0157
0158 * ILWORK(local input) INTEGER
0159 * This will hold the size of the IWORK array.
0160 * This is held as a place holder for a future release.
0161 * Currently unreferenced.
0162
0163 * INFO(global output) INTEGER
0164 * < 0 : parameter number - INFO incorrect or inconsistent
0165 * = 0 : successful exit
0166 * > 0 : PZLAHQR failed to compute all the eigenvalues ILO to IHI
0167 * in a total of 30*(IHI - ILO + 1) iterations ; if INFO = i ,
0168 * elements i + 1 : ihi of W contains those eigenvalues
0169 * which have been successfully computed.
0170
0171 * Logic :
0172 * This algorithm is very similar to DLAHQR. Unlike DLAHQR ,
0173 * instead of sending one double shift through the largest
0174 * unreduced submatrix , this algorithm sends multiple double shifts
0175 * and spaces them apart so that there can be parallelism across
0176 * several processor row / columns. Another critical difference is
0177 * that this algorithm aggregrates multiple transforms together in
0178 * order to apply them in a block fashion.
0179
0180 * Important Local Variables :
0181 * IBLK = The maximum number of bulges that can be computed.
0182 * Currently fixed. Future releases this won't be fixed.
0183 * HBL = The square block size(HBL = DESCA(MB_) = DESCA(NB_))
0184 * ROTN = The number of transforms to block together
0185 * NBULGE = The number of bulges that will be attempted on the
0186 * current submatrix.
0187 * IBULGE = The current number of bulges started.
0188 * K1(*) , K2(*) = The current bulge loops from K1(*) to K2(*).
0189
0190 * Subroutines :
0191 * From LAPACK , this routine calls :
0192 * ZLAHQR -> Serial QR used to determine shifts and
0193 * eigenvalues
0194 * ZLARFG -> Determine the Householder transforms
0195
0196 * This ScaLAPACK , this routine calls :
0197 * PZLACONSB -> To determine where to start each iteration
0198 * ZLAMSH -> Sends multiple shifts through a small
0199 * submatrix to see how the consecutive
0200 * subdiagonals change(if PZLACONSB indicates
0201 * we can start a run in the middle)
0202 * PZLAWIL -> Given the shift , get the transformation
0203 * PZLACP3 -> Parallel array to local replicated array copy
0204 * & back.
0205 * ZLAREF -> Row / column reflector applier. Core routine
0206 * here.
0207 * PZLASMSUB -> Finds negligible subdiagonal elements.
0208
0209 * Current Notes and / or Restrictions :
0210 * 1.) This code requires the distributed block size to be square
0211 * and at least six(6) ; unlike simpler codes like LU , this
0212 * algorithm is extremely sensitive to block size. Unwise
0213 * choices of too small a block size can lead to bad
0214 * performance.
0215 * 2.) This code requires A and Z to be distributed identically
0216 * and have identical contxts. A future version may allow Z to
0217 * have a different contxt to 1D row map it to all nodes(so no
0218 * communication on Z is necessary.)
0219 * 3.) This code does not currently block the initial transforms
0220 * so that none of the rows or columns for any bulge are
0221 * completed until all are started. To offset pipeline
0222 * start - up it is recommended that at least 2*LCM(NPROW , NPCOL)
0223 * bulges are used(if possible)
0224 * 4.) The maximum number of bulges currently supported is fixed at
0225 * 32. In future versions this will be limited only by the
0226 * incoming WORK and IWORK array.
0227 * 5.) The matrix A must be in upper Hessenberg form. If elements
0228 * below the subdiagonal are nonzero , the resulting transforms
0229 * may be nonsimilar. This is also true with the LAPACK
0230 * routine ZLAHQR.
0231 * 6.) For this release , this code has only been tested for
0232 * RSRC_ = CSRC_ = 0 , but it has been written for the general case.
0233 * 7.) Currently , all the eigenvalues are distributed to all the
0234 * nodes. Future releases will probably distribute the
0235 * eigenvalues by the column partitioning.
0236 * 8.) The internals of this routine are subject to change.
0237 * 9.) To optimize this for your architecture , try tuning ZLAREF.
0238 * 10.) This code has only been tested for WANTZ = .TRUE. and may
0239 * behave unpredictably for WANTZ set to .FALSE.
0240
0241 * Further Details
0242 * === ============
0243
0244 * Contributed by Mark Fahey , June , 2000.
0245
0246 * === ==================================================================
0247
0248 * .. Parameters ..
0249 INTEGER BLOCK_CYCLIC_2D , CSRC_ , CTXT_ , DLEN_ , DT_ ,
0250 $LLD_ , MB_ , M_ , NB_ , N_ , RSRC_
0251 PARAMETER( BLOCK_CYCLIC_2D = 1 , DLEN_ = 9 , DT_ = 1 ,
0252 $CTXT_ = 2 , M_ = 3 , N_ = 4 , MB_ = 5 , NB_ = 6 ,
0253 $RSRC_ = 7 , CSRC_ = 8 , LLD_ = 9 )
0254 DOUBLE PRECISION RONE
0255 PARAMETER( RONE = 1.0D + 0 )
0256 COMPLEX*16 ZERO , ONE
0257 PARAMETER( ZERO =( 0.0D + 0 , 0.0D + 0 ) ,
0258 $ONE =( 1.0D + 0 , 0.0D + 0 ) )
0259 DOUBLE PRECISION CONST
0260 PARAMETER( CONST = 1.50D + 0 )
0261 INTEGER IBLK
0262 PARAMETER( IBLK = 32 )
0263 IF( ISTART.GT.M ) THEN
0263
0264 VCOPY( 1 ) = SMALLA( 4 , 3 , KI )
0265 VCOPY( 2 ) = SMALLA( 5 , 3 , KI )
0266 VCOPY( 3 ) = SMALLA( 6 , 3 , KI )
0267 NR = MIN( 3 , I - ISTART + 1 )
0268 CALL ZLARFG( NR , VCOPY( 1 ) , VCOPY( 2 ) , 1 ,
0269 $ T1COPY )
0270 A(( ICOL1 - 2 )*LDA + IROW1 ) = VCOPY( 1 )
0271 A(( ICOL1 - 2 )*LDA + IROW1 + 1 ) = ZERO
0272 IF( ISTART.LT.I - 1 ) THEN
0272
0273 A(( ICOL1 - 2 )*LDA + IROW1 + 2 ) = ZERO
0274 END IF
0275 ELSE
0276
0277 * If NPCOL.NE.1 THEN we need updated VCOPY.
0278
0278
0279 NR = MIN( 3 , I - ISTART + 1 )
0280 IF( NPCOL.EQ.1 ) THEN
0280
0281 VCOPY( 1 ) = V1SAVE
0282 VCOPY( 2 ) = V2SAVE
0283 VCOPY( 3 ) = V3SAVE
0284 ELSE
0285
0286 * Get updated VCOPY from RIGHT
0287
0287
0288 CALL ZGERV2D( CONTXT , 3 , 1 , VCOPY , 3 , MYROW ,
0289 $ RIGHT )
0290 END IF
0291 CALL ZLARFG( NR , VCOPY( 1 ) , VCOPY( 2 ) , 1 ,
0292 $ T1COPY )
0293 IF( M.GT.L ) THEN
0294
0295 * Following differs in comparison to pdlahqr.
0296
0296
0297 A(( ICOL1 - 2 )*LDA + IROW1 ) = A(( ICOL1 - 2 )*LDA +
0298 $ IROW1 )*DCONJG( ONE - T1COPY )
0299 END IF
0300 END IF
0301 END IF
0302
0303 IF(( MYROW.EQ.ICURROW( KI ) ) .AND.
0304 $( MYCOL.EQ.ICURCOL( KI ) ) .AND.
0305 $((( MODKM1.EQ.HBL - 2 ) .AND.( ISTART.EQ.I -
0306 $1 ) ) .OR.(( MODKM1.LT.HBL - 2 ) .AND.( ISTART.LE.I -
0307 $1 ) ) ) ) THEN
0308
0309 * (IROW1 , ICOL1) is(I , J) - coordinates of H(ISTART , ISTART)
0310
0311 IROW1 = KROW( KI )
0312 ICOL1 = KCOL( KI )
0313 DO 110 K = ISTART , ISTOP
0314
0315 * Create and do these transforms
0316
0316
0317 NR = MIN( 3 , I - K + 1 )
0318 IF( K.GT.M ) THEN
0318
0319 IF( MOD( K - 1 , HBL ).EQ.0 ) THEN
0319
0320 VCOPY( 1 ) = SMALLA( 4 , 3 , KI )
0321 VCOPY( 2 ) = SMALLA( 5 , 3 , KI )
0322 VCOPY( 3 ) = SMALLA( 6 , 3 , KI )
0323 ELSE
0323
0324 VCOPY( 1 ) = A(( ICOL1 - 2 )*LDA + IROW1 )
0325 VCOPY( 2 ) = A(( ICOL1 - 2 )*LDA + IROW1 + 1 )
0326 IF( NR.EQ.3 ) THEN
0326
0327 VCOPY( 3 ) = A(( ICOL1 - 2 )*LDA + IROW1 + 2 )
0328 END IF
0329 END IF
0330 ELSE
0330
0331 VCOPY( 1 ) = V1SAVE
0332 VCOPY( 2 ) = V2SAVE
0333 VCOPY( 3 ) = V3SAVE
0334 END IF
0335
0336 * Must send uptodate copy of VCOPY to left.
0337
0338 IF( NPCOL.GT.1 .AND. ISTART.LE.M .AND.
0338
0339 $ MOD( K - 1 , HBL ).EQ.0 ) THEN
0340 CALL ZGESD2D( CONTXT , 3 , 1 , VCOPY , 3 , MYROW ,
0341 $ LEFT )
0342 END IF
0343 CALL ZLARFG( NR , VCOPY( 1 ) , VCOPY( 2 ) , 1 ,
0344 $ T1COPY )
0345 IF( K.GT.M ) THEN
0345
0346 IF( MOD( K - 1 , HBL ).GT.0 ) THEN
0346
0347 A(( ICOL1 - 2 )*LDA + IROW1 ) = VCOPY( 1 )
0348 A(( ICOL1 - 2 )*LDA + IROW1 + 1 ) = ZERO
0349 IF( K.LT.I - 1 ) THEN
0349
0350 A(( ICOL1 - 2 )*LDA + IROW1 + 2 ) = ZERO
0351 END IF
0352
0353 * Set a subdiagonal to zero now if it's possible
0354
0355 IF(( IROW1.GT.2 ) .AND.( ICOL1.GT.2 ) .AND.
0356 $( K - 2.GT.M ) .AND.( MOD( K - 1 ,
0356
0357 $ HBL ).GT.1 ) ) THEN
0358 H11 = A(( ICOL1 - 3 )*LDA + IROW1 - 2 )
0359 H10 = A(( ICOL1 - 3 )*LDA + IROW1 - 1 )
0360 H22 = A(( ICOL1 - 2 )*LDA + IROW1 - 1 )
0361 S = CABS1( H11 ) + CABS1( H22 )
0362 IF( CABS1( H10 ).LE.MAX( ULP*S , SMLNUM ) )
0362
0363 $ THEN
0364 A(( ICOL1 - 3 )*LDA + IROW1 - 1 ) = ZERO
0365 END IF
0366 END IF
0367 END IF
0368 ELSE IF( M.GT.L ) THEN
0368
0369 IF( MOD( K - 1 , HBL ).GT.0 ) THEN
0370
0371 * Following differs in comparison to pdlahqr.
0372
0372
0373 A(( ICOL1 - 2 )*LDA + IROW1 ) = A(( ICOL1 - 2 )*
0374 $ LDA + IROW1 )*DCONJG( ONE - T1COPY )
0375 END IF
0376 END IF
0377 V2 = VCOPY( 2 )
0378 T2 = T1COPY*V2
0379 WORK( VECSIDX + ( K - 1 )*3 + 1 ) = VCOPY( 2 )
0380 WORK( VECSIDX + ( K - 1 )*3 + 2 ) = VCOPY( 3 )
0381 WORK( VECSIDX + ( K - 1 )*3 + 3 ) = T1COPY
0382 T1 = T1COPY
0383 IF( K.LT.ISTOP ) THEN
0384
0385 * Do some work so next step is ready...
0386
0386
0387 V3 = VCOPY( 3 )
0388 T3 = T1*V3
0389 DO 90 J =( ICOL1 - 1 )*LDA + IROW1 ,
0390 $( MIN( K2( KI ) + 1 , I - 1 ) + ICOL1 - K - 1 )*
0390
0391 $ LDA + IROW1 , LDA
0392 SUM = DCONJG( T1 )*A( J ) +
0393 $ DCONJG( T2 )*A( J + 1 ) +
0394 $ DCONJG( T3 )*A( J + 2 )
0395 A( J ) = A( J ) - SUM
0396 A( J + 1 ) = A( J + 1 ) - SUM*V2
0397 A( J + 2 ) = A( J + 2 ) - SUM*V3
0398 90 CONTINUE
0398
0399 DO 100 J = IROW1 + 1 , IROW1 + 3
0399
0400 SUM = T1*A(( ICOL1 - 1 )*LDA + J ) +
0401 $ T2*A( ICOL1*LDA + J ) +
0402 $ T3*A(( ICOL1 + 1 )*LDA + J )
0403 A(( ICOL1 - 1 )*LDA + J ) = A(( ICOL1 - 1 )*LDA +
0404 $ J ) - SUM
0405 A( ICOL1*LDA + J ) = A( ICOL1*LDA + J ) -
0406 $ SUM*DCONJG( V2 )
0407 A(( ICOL1 + 1 )*LDA + J ) = A(( ICOL1 + 1 )*LDA +
0408 $ J ) - SUM*DCONJG( V3 )
0409 100 CONTINUE
0410 END IF
0411 IROW1 = IROW1 + 1
0412 ICOL1 = ICOL1 + 1
0413 110 CONTINUE
0414 END IF
0415 120 CONTINUE
0416
0417 * First part of applying the transforms is complete.
0418 * Broadcasts of the Householder data is done here.
0419
0420 DO 130 KI = 1 , IBULGE
0421
0421
0422 ISTART = MAX( K1( KI ) , M )
0423 ISTOP = MIN( K2( KI ) , I - 1 )
0424
0425 * Broadcast Householder information from the block
0426
0427 IF(( MYROW.EQ.ICURROW( KI ) ) .AND.( NPCOL.GT.1 ) .AND.
0428 $( ISTART.LE.ISTOP ) ) THEN
0428
0429 IF( MYCOL.NE.ICURCOL( KI ) ) THEN
0429
0430 CALL ZGEBR2D( CONTXT , 'ROW' , ' ' ,
0431 $ 3*( ISTOP - ISTART + 1 ) , 1 ,
0432 $ WORK( VECSIDX + ( ISTART - 1 )*3 + 1 ) ,
0433 $ 3*( ISTOP - ISTART + 1 ) , MYROW ,
0434 $ ICURCOL( KI ) )
0435 ELSE
0435
0436 CALL ZGEBS2D( CONTXT , 'ROW' , ' ' ,
0437 $ 3*( ISTOP - ISTART + 1 ) , 1 ,
0438 $ WORK( VECSIDX + ( ISTART - 1 )*3 + 1 ) ,
0439 $ 3*( ISTOP - ISTART + 1 ) )
0440 END IF
0441 END IF
0442 130 CONTINUE
0443
0444 * Now do column transforms and finish work
0445
0446 DO 140 KI = 1 , IBULGE
0447
0447
0448 ISTART = MAX( K1( KI ) , M )
0449 ISTOP = MIN( K2( KI ) , I - 1 )
0450
0451 IF(( MYCOL.EQ.ICURCOL( KI ) ) .AND.( NPROW.GT.1 ) .AND.
0452 $( ISTART.LE.ISTOP ) ) THEN
0452
0453 IF( MYROW.NE.ICURROW( KI ) ) THEN
0453
0454 CALL ZGEBR2D( CONTXT , 'COL' , ' ' ,
0455 $ 3*( ISTOP - ISTART + 1 ) , 1 ,
0456 $ WORK( VECSIDX + ( ISTART - 1 )*3 + 1 ) ,
0457 $ 3*( ISTOP - ISTART + 1 ) , ICURROW( KI ) ,
0458 $ MYCOL )
0459 ELSE
0459
0460 CALL ZGEBS2D( CONTXT , 'COL' , ' ' ,
0461 $ 3*( ISTOP - ISTART + 1 ) , 1 ,
0462 $ WORK( VECSIDX + ( ISTART - 1 )*3 + 1 ) ,
0463 $ 3*( ISTOP - ISTART + 1 ) )
0464 END IF
0465 END IF
0466 140 CONTINUE
0467
0468 * Now do make up work to have things in block fashion
0469
0470 DO 160 KI = 1 , IBULGE
0470
0471 ISTART = MAX( K1( KI ) , M )
0472 ISTOP = MIN( K2( KI ) , I - 1 )
0473
0474 MODKM1 = MOD( ISTART - 1 , HBL )
0475 IF(( MYROW.EQ.ICURROW( KI ) ) .AND.
0476 $( MYCOL.EQ.ICURCOL( KI ) ) .AND.
0477 $((( MODKM1.EQ.HBL - 2 ) .AND.( ISTART.EQ.I -
0477
0478 $ 1 ) ) .OR.(( MODKM1.LT.HBL - 2 ) .AND.( ISTART.LE.I -
0479 $ 1 ) ) ) ) THEN
0480
0481 * (IROW1 , ICOL1) is(I , J) - coordinates of H(ISTART , ISTART)
0482
0483 IROW1 = KROW( KI )
0484 ICOL1 = KCOL( KI )
0485 DO 150 K = ISTART , ISTOP
0486
0487 * Catch up on column & border work
0488
0488
0489 NR = MIN( 3 , I - K + 1 )
0490 V2 = WORK( VECSIDX + ( K - 1 )*3 + 1 )
0491 V3 = WORK( VECSIDX + ( K - 1 )*3 + 2 )
0492 T1 = WORK( VECSIDX + ( K - 1 )*3 + 3 )
0493 T2 = T1*V2
0494 IF( K.LT.ISTOP ) THEN
0495
0496 * Do some work so next step is ready...
0497
0497
0498 T3 = T1*V3
0499 CALL ZLAREF ( 'Col' , A , LDA , .FALSE. , Z , LDZ ,
0500 $ .FALSE. , ICOL1 , ICOL1 , ISTART ,
0501 $ ISTOP , MIN( ISTART + 1 , I ) - K + IROW1 ,
0502 $ IROW1 , LILOZ , LIHIZ ,
0503 $ WORK( VECSIDX + 1 ) , V2 , V3 , T1 , T2 ,
0504 $ T3 )
0505 IROW1 = IROW1 + 1
0506 ICOL1 = ICOL1 + 1
0507 ELSE
0507
0508 IF(( NR.EQ.3 ) .AND.( MOD( K - 1 ,
0509 $ HBL ).LT.HBL - 2 ) ) THEN
0510 T3 = T1*V3
0511 CALL ZLAREF ( 'Row' , A , LDA , .FALSE. , Z , LDZ ,
0512 $ .FALSE. , IROW1 , IROW1 , ISTART ,
0513 $ ISTOP , ICOL1 , MIN( MIN( K2( KI )
0514 $ + 1 , I - 1 ) , I2 ) - K + ICOL1 , LILOZ ,
0515 $ LIHIZ , WORK( VECSIDX + 1 ) , V2 ,
0516 $ V3 , T1 , T2 , T3 )
0517 END IF
0518 END IF
0519 150 CONTINUE
0520 END IF
0521
0522 * Send SMALLA back again.
0523
0524 K = ISTART
0525 MODKM1 = MOD( K - 1 , HBL )
0526 IF(( MODKM1.GE.HBL - 2 ) .AND.( K.LE.I - 1 ) ) THEN
0526
0527 IF(( MODKM1.EQ.HBL - 2 ) .AND.( K.LT.I - 1 ) ) THEN
0528
0529 * Copy 6 elements from global A(K - 1 : K + 4 , K - 1 : K + 4)
0530
0530
0531 ITMP1 = ICURROW( KI )
0532 ITMP2 = ICURCOL( KI )
0533 CALL PZLACP3 ( MIN( 6 , N - K + 2 ) , K - 1 , A , DESCA ,
0534 $ SMALLA( 1 , 1 , KI ) , 6 , ITMP1 , ITMP2 ,
0535 $ 1 )
0536
0537 END IF
0538 IF( MODKM1.EQ.HBL - 1 ) THEN
0539
0540 * Copy 6 elements from global A(K - 2 : K + 3 , K - 2 : K + 3)
0541
0541
0542 ITMP1 = ICURROW( KI )
0543 ITMP2 = ICURCOL( KI )
0544 CALL PZLACP3 ( MIN( 6 , N - K + 3 ) , K - 2 , A , DESCA ,
0545 $ SMALLA( 1 , 1 , KI ) , 6 , ITMP1 , ITMP2 ,
0546 $ 1 )
0547 END IF
0548 END IF
0549
0550 160 CONTINUE
0551
0552 170 CONTINUE
0553
0554 * Now start major set of block ROW reflections
0555
0556 DO 180 KI = 1 , IBULGE
0556
0557 IF(( MYROW.NE.ICURROW( KI ) ) .AND.
0558 $( DOWN.NE.ICURROW( KI ) ) )GO TO 180
0558
0559 ISTART = MAX( K1( KI ) , M )
0560 ISTOP = MIN( K2( KI ) , I - 1 )
0561
0562 IF(( ISTOP.GT.ISTART ) .AND.
0563 $( MOD( ISTART - 1 , HBL ).LT.HBL - 2 ) .AND.
0564 $( ICURROW( KI ).EQ.MYROW ) ) THEN
0564
0565 IROW1 = MIN( K2( KI ) + 1 , I - 1 ) + 1
0566 CALL INFOG1L( IROW1 , HBL , NPCOL , MYCOL , JAFIRST ,
0567 $ ITMP1 , ITMP2 )
0568 ITMP2 = LOCALI2
0569 II = KROW( KI )
0570 CALL ZLAREF ( 'Row' , A , LDA , WANTZ , Z , LDZ , .TRUE. , II ,
0571 $ II , ISTART , ISTOP , ITMP1 , ITMP2 , LILOZ ,
0572 $ LIHIZ , WORK( VECSIDX + 1 ) , V2 , V3 , T1 , T2 ,
0573 $ T3 )
0574 END IF
0575 180 CONTINUE
0576
0577 DO 220 KI = 1 , IBULGE
0577
0578 IF( KROW( KI ).GT.KP2ROW( KI ) )
0578
0579 $ GO TO 220
0580 IF(( MYROW.NE.ICURROW( KI ) ) .AND.
0581 $( DOWN.NE.ICURROW( KI ) ) )GO TO 220
0581
0582 ISTART = MAX( K1( KI ) , M )
0583 ISTOP = MIN( K2( KI ) , I - 1 )
0584 IF(( ISTART.EQ.ISTOP ) .OR.
0585 $( MOD( ISTART - 1 , HBL ).GE.HBL - 2 ) .OR.
0586 $( ICURROW( KI ).NE.MYROW ) ) THEN
0586
0587 DO 210 K = ISTART , ISTOP
0587
0588 V2 = WORK( VECSIDX + ( K - 1 )*3 + 1 )
0589 V3 = WORK( VECSIDX + ( K - 1 )*3 + 2 )
0590 T1 = WORK( VECSIDX + ( K - 1 )*3 + 3 )
0591 NR = MIN( 3 , I - K + 1 )
0592 IF(( NR.EQ.3 ) .AND.( KROW( KI ).LE.
0593 $ KP2ROW( KI ) ) ) THEN
0594 IF(( K.LT.ISTOP ) .AND.
0595 $( MOD( K - 1 , HBL ).LT.HBL - 2 ) ) THEN
0595
0596 ITMP1 = MIN( K2( KI ) + 1 , I - 1 ) + 1
0597 ELSE
0597
0598 IF( MOD( K - 1 , HBL ).LT.HBL - 2 ) THEN
0598
0599 ITMP1 = MIN( K2( KI ) + 1 , I - 1 ) + 1
0600 END IF
0601 IF( MOD( K - 1 , HBL ).EQ.HBL - 2 ) THEN
0601
0602 ITMP1 = MIN( K + 4 , I2 ) + 1
0603 END IF
0604 IF( MOD( K - 1 , HBL ).EQ.HBL - 1 ) THEN
0604
0605 ITMP1 = MIN( K + 3 , I2 ) + 1
0606 END IF
0607 END IF
0608
0609 * Find local coor of rows K through K + 2
0610
0611 IROW1 = KROW( KI )
0612 IROW2 = KP2ROW( KI )
0613 IF(( K.GT.ISTART ) .AND.
0614 $( MOD( K - 1 , HBL ).GE.HBL - 2 ) ) THEN
0614
0615 IF( DOWN.EQ.ICURROW( KI ) ) THEN
0615
0616 IROW1 = IROW1 + 1
0617 END IF
0618 IF( MYROW.EQ.ICURROW( KI ) ) THEN
0618
0619 IROW2 = IROW2 + 1
0620 END IF
0621 END IF
0622 CALL INFOG1L( ITMP1 , HBL , NPCOL , MYCOL , JAFIRST ,
0623 $ ICOL1 , ICOL2 )
0624 ICOL2 = LOCALI2
0625 IF(( MOD( K - 1 , HBL ).LT.HBL - 2 ) .OR.
0626 $( NPROW.EQ.1 ) ) THEN
0626
0627 T2 = T1*V2
0628 T3 = T1*V3
0629 CALL ZLAREF ( 'Row' , A , LDA , WANTZ , Z , LDZ ,
0630 $ .FALSE. , IROW1 , IROW1 , ISTART ,
0631 $ ISTOP , ICOL1 , ICOL2 , LILOZ ,
0632 $ LIHIZ , WORK( VECSIDX + 1 ) , V2 ,
0633 $ V3 , T1 , T2 , T3 )
0634 END IF
0635 IF(( MOD( K - 1 , HBL ).EQ.HBL - 2 ) .AND.
0636 $( NPROW.GT.1 ) ) THEN
0637 IF( IROW1.NE.IROW2 ) THEN
0637
0638 CALL ZGESD2D( CONTXT , 2 , ICOL2 - ICOL1 + 1 ,
0639 $ A(( ICOL1 - 1 )*LDA + IROW1 ) ,
0640 $ LDA , DOWN , MYCOL )
0641 IF( SKIP .AND.( ISTART.EQ.ISTOP ) ) THEN
0641
0642 CALL ZGERV2D( CONTXT , 2 , ICOL2 - ICOL1 + 1 ,
0643 $ A(( ICOL1 - 1 )*LDA +
0644 $ IROW1 ) , LDA , DOWN ,
0645 $ MYCOL )
0646 END IF
0647 ELSE IF( SKIP ) THEN
0647
0648 CALL ZGERV2D( CONTXT , 2 , ICOL2 - ICOL1 + 1 ,
0649 $ WORK( IRBUF + 1 ) , 2 , UP ,
0650 $ MYCOL )
0651 T2 = T1*V2
0652 T3 = T1*V3
0653 DO 190 J = ICOL1 , ICOL2
0653
0654 SUM = DCONJG( T1 )*
0655 $ WORK( IRBUF + 2*( J - ICOL1 ) + 1 ) +
0656 $ DCONJG( T2 )*WORK( IRBUF + 2*
0657 $( J - ICOL1 ) + 2 ) +
0657
0658 $ DCONJG( T3 )*A(( J - 1 )*LDA +
0659 $ IROW1 )
0660 WORK( IRBUF + 2*( J - ICOL1 ) + 1 )
0661 $ = WORK( IRBUF + 2*( J - ICOL1 ) + 1 ) -
0662 $ SUM
0663 WORK( IRBUF + 2*( J - ICOL1 ) + 2 )
0664 $ = WORK( IRBUF + 2*( J - ICOL1 ) + 2 ) -
0665 $ SUM*V2
0666 A(( J - 1 )*LDA + IROW1 ) = A(( J - 1 )*
0667 $ LDA + IROW1 ) - SUM*V3
0668 190 CONTINUE
0668
0669 IF( ISTART.EQ.ISTOP ) THEN
0669
0670 CALL ZGESD2D( CONTXT , 2 , ICOL2 - ICOL1 + 1 ,
0671 $ WORK( IRBUF + 1 ) , 2 , UP ,
0672 $ MYCOL )
0673 END IF
0674 END IF
0675 END IF
0676 IF(( MOD( K - 1 , HBL ).EQ.HBL - 1 ) .AND.
0677 $( NPROW.GT.1 ) ) THEN
0678 IF( IROW1.EQ.IROW2 ) THEN
0678
0679 IF( ISTART.EQ.ISTOP ) THEN
0679
0680 CALL ZGESD2D( CONTXT , 2 , ICOL2 - ICOL1 + 1 ,
0681 $ A(( ICOL1 - 1 )*LDA + IROW1 -
0682 $ 1 ) , LDA , DOWN , MYCOL )
0683 END IF
0684 IF( SKIP ) THEN
0684
0685 CALL ZGERV2D( CONTXT , 2 , ICOL2 - ICOL1 + 1 ,
0686 $ A(( ICOL1 - 1 )*LDA + IROW1 -
0687 $ 1 ) , LDA , DOWN , MYCOL )
0688 END IF
0689 ELSE IF( SKIP ) THEN
0689
0690 IF( ISTART.EQ.ISTOP ) THEN
0690
0691 CALL ZGERV2D( CONTXT , 2 , ICOL2 - ICOL1 + 1 ,
0692 $ WORK( IRBUF + 1 ) , 2 , UP ,
0693 $ MYCOL )
0694 END IF
0695 T2 = T1*V2
0696 T3 = T1*V3
0697 DO 200 J = ICOL1 , ICOL2
0697
0698 SUM = DCONJG( T1 )*
0699 $ WORK( IRBUF + 2*( J - ICOL1 ) + 2 ) +
0700 $ DCONJG( T2 )*A(( J - 1 )*LDA +
0701 $ IROW1 ) + DCONJG( T3 )*
0702 $ A(( J - 1 )*LDA + IROW1 + 1 )
0703 WORK( IRBUF + 2*( J - ICOL1 ) + 2 )
0704 $ = WORK( IRBUF + 2*( J - ICOL1 ) + 2 ) -
0705 $ SUM
0706 A(( J - 1 )*LDA + IROW1 ) = A(( J - 1 )*
0707 $ LDA + IROW1 ) - SUM*V2
0708 A(( J - 1 )*LDA + IROW1 + 1 ) = A(( J - 1 )*
0709 $ LDA + IROW1 + 1 ) - SUM*V3
0710 200 CONTINUE
0710
0711 CALL ZGESD2D( CONTXT , 2 , ICOL2 - ICOL1 + 1 ,
0712 $ WORK( IRBUF + 1 ) , 2 , UP ,
0713 $ MYCOL )
0714
0715 END IF
0716 END IF
0717 END IF
0718 210 CONTINUE
0719 END IF
0720 220 CONTINUE
0721
0722 IF( SKIP )
0722
0723 $ GO TO 290
0724
0725 DO 260 KI = 1 , IBULGE
0725
0726 IF( KROW( KI ).GT.KP2ROW( KI ) )
0726
0727 $ GO TO 260
0728 IF(( MYROW.NE.ICURROW( KI ) ) .AND.
0729 $( DOWN.NE.ICURROW( KI ) ) )GO TO 260
0729
0730 ISTART = MAX( K1( KI ) , M )
0731 ISTOP = MIN( K2( KI ) , I - 1 )
0732 IF(( ISTART.EQ.ISTOP ) .OR.
0733 $( MOD( ISTART - 1 , HBL ).GE.HBL - 2 ) .OR.
0734 $( ICURROW( KI ).NE.MYROW ) ) THEN
0734
0735 DO 250 K = ISTART , ISTOP
0735
0736 V2 = WORK( VECSIDX + ( K - 1 )*3 + 1 )
0737 V3 = WORK( VECSIDX + ( K - 1 )*3 + 2 )
0738 T1 = WORK( VECSIDX + ( K - 1 )*3 + 3 )
0739 NR = MIN( 3 , I - K + 1 )
0740 IF(( NR.EQ.3 ) .AND.( KROW( KI ).LE.
0741 $ KP2ROW( KI ) ) ) THEN
0742 IF(( K.LT.ISTOP ) .AND.
0743 $( MOD( K - 1 , HBL ).LT.HBL - 2 ) ) THEN
0743
0744 ITMP1 = MIN( K2( KI ) + 1 , I - 1 ) + 1
0745 ELSE
0745
0746 IF( MOD( K - 1 , HBL ).LT.HBL - 2 ) THEN
0746
0747 ITMP1 = MIN( K2( KI ) + 1 , I - 1 ) + 1
0748 END IF
0749 IF( MOD( K - 1 , HBL ).EQ.HBL - 2 ) THEN
0749
0750 ITMP1 = MIN( K + 4 , I2 ) + 1
0751 END IF
0752 IF( MOD( K - 1 , HBL ).EQ.HBL - 1 ) THEN
0752
0753 ITMP1 = MIN( K + 3 , I2 ) + 1
0754 END IF
0755 END IF
0756
0757 * Find local coor of rows K through K + 2
0758
0759 IROW1 = KROW( KI )
0760 IROW2 = KP2ROW( KI )
0761 IF(( K.GT.ISTART ) .AND.
0762 $( MOD( K - 1 , HBL ).GE.HBL - 2 ) ) THEN
0762
0763 IF( DOWN.EQ.ICURROW( KI ) ) THEN
0763
0764 IROW1 = IROW1 + 1
0765 END IF
0766 IF( MYROW.EQ.ICURROW( KI ) ) THEN
0766
0767 IROW2 = IROW2 + 1
0768 END IF
0769 END IF
0770 CALL INFOG1L( ITMP1 , HBL , NPCOL , MYCOL , JAFIRST ,
0771 $ ICOL1 , ICOL2 )
0772 ICOL2 = LOCALI2
0773 IF(( MOD( K - 1 , HBL ).EQ.HBL - 2 ) .AND.
0774 $( NPROW.GT.1 ) ) THEN
0774
0775 IF( IROW1.EQ.IROW2 ) THEN
0775
0776 CALL ZGERV2D( CONTXT , 2 , ICOL2 - ICOL1 + 1 ,
0777 $ WORK( IRBUF + 1 ) , 2 , UP ,
0778 $ MYCOL )
0779 T2 = T1*V2
0780 T3 = T1*V3
0781 DO 230 J = ICOL1 , ICOL2
0781
0782 SUM = DCONJG( T1 )*
0783 $ WORK( IRBUF + 2*( J - ICOL1 ) + 1 ) +
0784 $ DCONJG( T2 )*WORK( IRBUF + 2*
0785 $( J - ICOL1 ) + 2 ) +
0785
0786 $ DCONJG( T3 )*A(( J - 1 )*LDA +
0787 $ IROW1 )
0788 WORK( IRBUF + 2*( J - ICOL1 ) + 1 )
0789 $ = WORK( IRBUF + 2*( J - ICOL1 ) + 1 ) -
0790 $ SUM
0791 WORK( IRBUF + 2*( J - ICOL1 ) + 2 )
0792 $ = WORK( IRBUF + 2*( J - ICOL1 ) + 2 ) -
0793 $ SUM*V2
0794 A(( J - 1 )*LDA + IROW1 ) = A(( J - 1 )*
0795 $ LDA + IROW1 ) - SUM*V3
0796 230 CONTINUE
0796
0797 IF( ISTART.EQ.ISTOP ) THEN
0797
0798 CALL ZGESD2D( CONTXT , 2 , ICOL2 - ICOL1 + 1 ,
0799 $ WORK( IRBUF + 1 ) , 2 , UP ,
0800 $ MYCOL )
0801 END IF
0802 END IF
0803 END IF
0804 IF(( MOD( K - 1 , HBL ).EQ.HBL - 1 ) .AND.
0805 $( NPROW.GT.1 ) ) THEN
0805
0806 IF( IROW1.NE.IROW2 ) THEN
0806
0807 IF( ISTART.EQ.ISTOP ) THEN
0807
0808 CALL ZGERV2D( CONTXT , 2 , ICOL2 - ICOL1 + 1 ,
0809 $ WORK( IRBUF + 1 ) , 2 , UP ,
0810 $ MYCOL )
0811 END IF
0812 T2 = T1*V2
0813 T3 = T1*V3
0814 DO 240 J = ICOL1 , ICOL2
0814
0815 SUM = DCONJG( T1 )*
0816 $ WORK( IRBUF + 2*( J - ICOL1 ) + 2 ) +
0817 $ DCONJG( T2 )*A(( J - 1 )*LDA +
0818 $ IROW1 ) + DCONJG( T3 )*
0819 $ A(( J - 1 )*LDA + IROW1 + 1 )
0820 WORK( IRBUF + 2*( J - ICOL1 ) + 2 )
0821 $ = WORK( IRBUF + 2*( J - ICOL1 ) + 2 ) -
0822 $ SUM
0823 A(( J - 1 )*LDA + IROW1 ) = A(( J - 1 )*
0824 $ LDA + IROW1 ) - SUM*V2
0825 A(( J - 1 )*LDA + IROW1 + 1 ) = A(( J - 1 )*
0826 $ LDA + IROW1 + 1 ) - SUM*V3
0827 240 CONTINUE
0827
0828 CALL ZGESD2D( CONTXT , 2 , ICOL2 - ICOL1 + 1 ,
0829 $ WORK( IRBUF + 1 ) , 2 , UP ,
0830 $ MYCOL )
0831 END IF
0832 END IF
0833 END IF
0834 250 CONTINUE
0835 END IF
0836 260 CONTINUE
0837
0838 DO 280 KI = 1 , IBULGE
0838
0839 IF( KROW( KI ).GT.KP2ROW( KI ) )
0839
0840 $ GO TO 280
0841 IF(( MYROW.NE.ICURROW( KI ) ) .AND.
0842 $( DOWN.NE.ICURROW( KI ) ) )GO TO 280
0842
0843 ISTART = MAX( K1( KI ) , M )
0844 ISTOP = MIN( K2( KI ) , I - 1 )
0845 IF(( ISTART.EQ.ISTOP ) .OR.
0846 $( MOD( ISTART - 1 , HBL ).GE.HBL - 2 ) .OR.
0847 $( ICURROW( KI ).NE.MYROW ) ) THEN
0847
0848 DO 270 K = ISTART , ISTOP
0848
0849 V2 = WORK( VECSIDX + ( K - 1 )*3 + 1 )
0850 V3 = WORK( VECSIDX + ( K - 1 )*3 + 2 )
0851 T1 = WORK( VECSIDX + ( K - 1 )*3 + 3 )
0852 NR = MIN( 3 , I - K + 1 )
0853 IF(( NR.EQ.3 ) .AND.( KROW( KI ).LE.
0854 $ KP2ROW( KI ) ) ) THEN
0855 IF(( K.LT.ISTOP ) .AND.
0856 $( MOD( K - 1 , HBL ).LT.HBL - 2 ) ) THEN
0856
0857 ITMP1 = MIN( K2( KI ) + 1 , I - 1 ) + 1
0858 ELSE
0858
0859 IF( MOD( K - 1 , HBL ).LT.HBL - 2 ) THEN
0859
0860 ITMP1 = MIN( K2( KI ) + 1 , I - 1 ) + 1
0861 END IF
0862 IF( MOD( K - 1 , HBL ).EQ.HBL - 2 ) THEN
0862
0863 ITMP1 = MIN( K + 4 , I2 ) + 1
0864 END IF
0865 IF( MOD( K - 1 , HBL ).EQ.HBL - 1 ) THEN
0865
0866 ITMP1 = MIN( K + 3 , I2 ) + 1
0867 END IF
0868 END IF
0869
0870 * Find local coor of rows K through K + 2
0871
0872 IROW1 = KROW( KI )
0873 IROW2 = KP2ROW( KI )
0874 IF(( K.GT.ISTART ) .AND.
0875 $( MOD( K - 1 , HBL ).GE.HBL - 2 ) ) THEN
0875
0876 IF( DOWN.EQ.ICURROW( KI ) ) THEN
0876
0877 IROW1 = IROW1 + 1
0878 END IF
0879 IF( MYROW.EQ.ICURROW( KI ) ) THEN
0879
0880 IROW2 = IROW2 + 1
0881 END IF
0882 END IF
0883 CALL INFOG1L( ITMP1 , HBL , NPCOL , MYCOL , JAFIRST ,
0884 $ ICOL1 , ICOL2 )
0885 ICOL2 = LOCALI2
0886 IF(( MOD( K - 1 , HBL ).EQ.HBL - 2 ) .AND.
0887 $( NPROW.GT.1 ) ) THEN
0887
0888 IF( IROW1.NE.IROW2 ) THEN
0888
0889 IF( ISTART.EQ.ISTOP ) THEN
0889
0890 CALL ZGERV2D( CONTXT , 2 , ICOL2 - ICOL1 + 1 ,
0891 $ A(( ICOL1 - 1 )*LDA +
0892 $ IROW1 ) , LDA , DOWN ,
0893 $ MYCOL )
0894 END IF
0895 END IF
0896 END IF
0897 IF(( MOD( K - 1 , HBL ).EQ.HBL - 1 ) .AND.
0898 $( NPROW.GT.1 ) ) THEN
0899 IF( IROW1.EQ.IROW2 ) THEN
0899
0900 CALL ZGERV2D( CONTXT , 2 , ICOL2 - ICOL1 + 1 ,
0901 $ A(( ICOL1 - 1 )*LDA + IROW1 -
0902 $ 1 ) , LDA , DOWN , MYCOL )
0903 END IF
0904 END IF
0905 END IF
0906 270 CONTINUE
0907 END IF
0908 280 CONTINUE
0909
0910 290 CONTINUE
0911
0912 * Now start major set of block COL reflections
0913
0914 DO 300 KI = 1 , IBULGE
0914
0915 IF(( MYCOL.NE.ICURCOL( KI ) ) .AND.
0916 $( RIGHT.NE.ICURCOL( KI ) ) )GO TO 300
0916
0917 ISTART = MAX( K1( KI ) , M )
0918 ISTOP = MIN( K2( KI ) , I - 1 )
0919
0920 IF((( MOD( ISTART - 1 , HBL ).LT.HBL - 2 ) .OR.( NPCOL.EQ.
0921 $ 1 ) ) .AND.( ICURCOL( KI ).EQ.MYCOL ) .AND.
0922 $( I - ISTOP + 1.GE.3 ) ) THEN
0922
0923 K = ISTART
0924 IF(( K.LT.ISTOP ) .AND.( MOD( K - 1 ,
0925 $ HBL ).LT.HBL - 2 ) ) THEN
0926 ITMP1 = MIN( ISTART + 1 , I ) - 1
0927 ELSE
0927
0928 IF( MOD( K - 1 , HBL ).LT.HBL - 2 ) THEN
0928
0929 ITMP1 = MIN( K + 3 , I )
0930 END IF
0931 IF( MOD( K - 1 , HBL ).EQ.HBL - 2 ) THEN
0931
0932 ITMP1 = MAX( I1 , K - 1 ) - 1
0933 END IF
0934 IF( MOD( K - 1 , HBL ).EQ.HBL - 1 ) THEN
0934
0935 ITMP1 = MAX( I1 , K - 2 ) - 1
0936 END IF
0937 END IF
0938
0939 ICOL1 = KCOL( KI )
0940 CALL INFOG1L( I1 , HBL , NPROW , MYROW , IAFIRST , IROW1 ,
0941 $IROW2 )
0942 IROW2 = NUMROC( ITMP1 , HBL , MYROW , IAFIRST , NPROW )
0943 IF( IROW1.LE.IROW2 ) THEN
0943
0944 ITMP2 = IROW2
0945 ELSE
0945
0946 ITMP2 = - 1
0947 END IF
0948 CALL ZLAREF ( 'Col' , A , LDA , WANTZ , Z , LDZ , .TRUE. ,
0949 $ICOL1 , ICOL1 , ISTART , ISTOP , IROW1 ,
0950 $IROW2 , LILOZ , LIHIZ , WORK( VECSIDX + 1 ) ,
0951 $V2 , V3 , T1 , T2 , T3 )
0952 K = ISTOP
0953 IF( MOD( K - 1 , HBL ).LT.HBL - 2 ) THEN
0954
0955 * Do from ITMP1 + 1 to MIN(K + 3 , I)
0956
0956
0957 IF( MOD( K - 1 , HBL ).LT.HBL - 3 ) THEN
0957
0958 IROW1 = ITMP2 + 1
0959 IF( MOD(( ITMP1 / HBL ) , NPROW ).EQ.MYROW )
0959
0960 $ THEN
0961 IF( ITMP2.GT.0 ) THEN
0961
0962 IROW2 = ITMP2 + MIN( K + 3 , I ) - ITMP1
0963 ELSE
0963
0964 IROW2 = IROW1 - 1
0965 END IF
0966 ELSE
0966
0967 IROW2 = IROW1 - 1
0968 END IF
0969 ELSE
0969
0970 CALL INFOG1L( ITMP1 + 1 , HBL , NPROW , MYROW ,
0971 $ IAFIRST , IROW1 , IROW2 )
0972 IROW2 = NUMROC( MIN( K + 3 , I ) , HBL , MYROW ,
0973 $ IAFIRST , NPROW )
0974 END IF
0975 V2 = WORK( VECSIDX + ( K - 1 )*3 + 1 )
0976 V3 = WORK( VECSIDX + ( K - 1 )*3 + 2 )
0977 T1 = WORK( VECSIDX + ( K - 1 )*3 + 3 )
0978 T2 = T1*V2
0979 T3 = T1*V3
0980 ICOL1 = KCOL( KI ) + ISTOP - ISTART
0981 CALL ZLAREF ( 'Col' , A , LDA , .FALSE. , Z , LDZ ,
0982 $ .FALSE. , ICOL1 , ICOL1 , ISTART , ISTOP ,
0983 $ IROW1 , IROW2 , LILOZ , LIHIZ ,
0984 $ WORK( VECSIDX + 1 ) , V2 , V3 , T1 , T2 ,
0985 $ T3 )
0986 END IF
0987 END IF
0988 300 CONTINUE
0989
0990 DO 360 KI = 1 , IBULGE
0990
0991 IF( KCOL( KI ).GT.KP2COL( KI ) )
0991
0992 $ GO TO 360
0993 IF(( MYCOL.NE.ICURCOL( KI ) ) .AND.
0994 $( RIGHT.NE.ICURCOL( KI ) ) )GO TO 360
0994
0995 ISTART = MAX( K1( KI ) , M )
0996 ISTOP = MIN( K2( KI ) , I - 1 )
0997 IF( MOD( ISTART - 1 , HBL ).GE.HBL - 2 ) THEN
0998
0999 * INFO is found in a buffer
1000
1000
1001 ISPEC = 1
1002 ELSE
1003
1004 * All INFO is local
1005
1005
1006 ISPEC = 0
1007 END IF
1008 DO 350 K = ISTART , ISTOP
1009
1009
1010 V2 = WORK( VECSIDX + ( K - 1 )*3 + 1 )
1011 V3 = WORK( VECSIDX + ( K - 1 )*3 + 2 )
1012 T1 = WORK( VECSIDX + ( K - 1 )*3 + 3 )
1013 NR = MIN( 3 , I - K + 1 )
1014 IF(( NR.EQ.3 ) .AND.( KCOL( KI ).LE.KP2COL( KI ) ) )
1014
1015 $ THEN
1016
1017 IF(( K.LT.ISTOP ) .AND.
1018 $( MOD( K - 1 , HBL ).LT.HBL - 2 ) ) THEN
1018
1019 ITMP1 = MIN( ISTART + 1 , I ) - 1
1020 ELSE
1020
1021 IF( MOD( K - 1 , HBL ).LT.HBL - 2 ) THEN
1021
1022 ITMP1 = MIN( K + 3 , I )
1023 END IF
1024 IF( MOD( K - 1 , HBL ).EQ.HBL - 2 ) THEN
1024
1025 ITMP1 = MAX( I1 , K - 1 ) - 1
1026 END IF
1027 IF( MOD( K - 1 , HBL ).EQ.HBL - 1 ) THEN
1027
1028 ITMP1 = MAX( I1 , K - 2 ) - 1
1029 END IF
1030 END IF
1031 IF( MOD( K - 1 , HBL ).LT.HBL - 2 ) THEN
1031
1032 ICOL1 = KCOL( KI ) + K - ISTART
1033 ICOL2 = KP2COL( KI ) + K - ISTART
1034 ELSE
1034
1035 ICOL1 = KCOL( KI )
1036 ICOL2 = KP2COL( KI )
1037 IF( K.GT.ISTART ) THEN
1037
1038 IF( RIGHT.EQ.ICURCOL( KI ) ) THEN
1038
1039 ICOL1 = ICOL1 + 1
1040 END IF
1041 IF( MYCOL.EQ.ICURCOL( KI ) ) THEN
1041
1042 ICOL2 = ICOL2 + 1
1043 END IF
1044 END IF
1045 END IF
1046 CALL INFOG1L( I1 , HBL , NPROW , MYROW , IAFIRST ,
1047 $ IROW1 , IROW2 )
1048 IROW2 = NUMROC( ITMP1 , HBL , MYROW , IAFIRST , NPROW )
1049 IF(( MOD( K - 1 , HBL ).EQ.HBL - 2 ) .AND.
1050 $( NPCOL.GT.1 ) ) THEN
1050
1051 IF( ICOL1.NE.ICOL2 ) THEN
1051
1052 CALL ZGESD2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1053 $ A(( ICOL1 - 1 )*LDA + IROW1 ) ,
1054 $ LDA , MYROW , RIGHT )
1055 IF(( ISTART.EQ.ISTOP ) .AND. SKIP ) THEN
1055
1056 CALL ZGERV2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1057 $ A(( ICOL1 - 1 )*LDA + IROW1 ) ,
1058 $ LDA , MYROW , RIGHT )
1059 END IF
1060 ELSE IF( SKIP ) THEN
1060
1061 T2 = T1*V2
1062 T3 = T1*V3
1063 CALL ZGERV2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1064 $ WORK( ICBUF + 1 ) , IROW2 - IROW1 + 1 ,
1065 $ MYROW , LEFT )
1066 II = ICBUF - IROW1 + 1
1067 JJ = ICBUF + IROW2 - 2*IROW1 + 2
1068 DO 310 J = IROW1 , IROW2
1068
1069 SUM = T1*WORK( II + J ) + T2*WORK( JJ + J ) +
1070 $ T3*A(( ICOL1 - 1 )*LDA + J )
1071 WORK( II + J ) = WORK( II + J ) - SUM
1072 WORK( JJ + J ) = WORK( JJ + J ) -
1073 $ SUM*DCONJG( V2 )
1074 A(( ICOL1 - 1 )*LDA + J ) = A(( ICOL1 - 1 )*
1075 $ LDA + J ) - SUM*DCONJG( V3 )
1076 310 CONTINUE
1076
1077 IF( ISTART.EQ.ISTOP ) THEN
1077
1078 CALL ZGESD2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1079 $ WORK( ICBUF + 1 ) ,
1080 $ IROW2 - IROW1 + 1 , MYROW , LEFT )
1081 END IF
1082 END IF
1083 END IF
1084 IF(( MOD( K - 1 , HBL ).EQ.HBL - 1 ) .AND.
1085 $( NPCOL.GT.1 ) ) THEN
1085
1086 IF( ICOL1.EQ.ICOL2 ) THEN
1086
1087 IF( ISTART.EQ.ISTOP ) THEN
1087
1088 CALL ZGESD2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1089 $ A(( ICOL1 - 2 )*LDA + IROW1 ) ,
1090 $ LDA , MYROW , RIGHT )
1091 END IF
1092 IF( SKIP ) THEN
1092
1093 CALL ZGERV2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1094 $ A(( ICOL1 - 2 )*LDA + IROW1 ) ,
1095 $ LDA , MYROW , RIGHT )
1096 END IF
1097 ELSE IF( SKIP ) THEN
1097
1098 IF( ISTART.EQ.ISTOP ) THEN
1098
1099 CALL ZGERV2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1100 $ WORK( ICBUF + 1 ) ,
1101 $ IROW2 - IROW1 + 1 , MYROW , LEFT )
1102 END IF
1103 T2 = T1*V2
1104 T3 = T1*V3
1105 II = ICBUF + IROW2 - 2*IROW1 + 2
1106 DO 320 J = IROW1 , IROW2
1106
1107 SUM = T1*WORK( J + II ) +
1108 $ T2*A(( ICOL1 - 1 )*LDA + J ) +
1109 $ T3*A( ICOL1*LDA + J )
1110 WORK( J + II ) = WORK( J + II ) - SUM
1111 A(( ICOL1 - 1 )*LDA + J ) = A(( ICOL1 - 1 )*
1112 $ LDA + J ) - SUM*DCONJG( V2 )
1113 A( ICOL1*LDA + J ) = A( ICOL1*LDA + J ) -
1114 $ SUM*DCONJG( V3 )
1115 320 CONTINUE
1115
1116 CALL ZGESD2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1117 $ WORK( ICBUF + 1 ) , IROW2 - IROW1 + 1 ,
1118 $ MYROW , LEFT )
1119 END IF
1120 END IF
1121
1122 * If we want Z and we haven't already done any Z
1123
1124 IF(( WANTZ ) .AND.( MOD( K - 1 ,
1125 $ HBL ).GE.HBL - 2 ) .AND.( NPCOL.GT.1 ) ) THEN
1126
1127 * Accumulate transformations in the matrix Z
1128
1129 IROW1 = LILOZ
1130 IROW2 = LIHIZ
1131 IF( MOD( K - 1 , HBL ).EQ.HBL - 2 ) THEN
1131
1132 IF( ICOL1.NE.ICOL2 ) THEN
1132
1133 CALL ZGESD2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1134 $ Z(( ICOL1 - 1 )*LDZ + IROW1 ) ,
1135 $ LDZ , MYROW , RIGHT )
1136 IF(( ISTART.EQ.ISTOP ) .AND. SKIP ) THEN
1136
1137 CALL ZGERV2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1138 $ Z(( ICOL1 - 1 )*LDZ +
1139 $ IROW1 ) , LDZ , MYROW ,
1140 $ RIGHT )
1141 END IF
1142 ELSE IF( SKIP ) THEN
1142
1143 CALL ZGERV2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1144 $ WORK( IZBUF + 1 ) ,
1145 $ IROW2 - IROW1 + 1 , MYROW , LEFT )
1146 T2 = T1*V2
1147 T3 = T1*V3
1148 ICOL1 =( ICOL1 - 1 )*LDZ
1149 II = IZBUF - IROW1 + 1
1150 JJ = IZBUF + IROW2 - 2*IROW1 + 2
1151 DO 330 J = IROW1 , IROW2
1151
1152 SUM = T1*WORK( II + J ) +
1153 $ T2*WORK( JJ + J ) + T3*Z( ICOL1 + J )
1154 WORK( II + J ) = WORK( II + J ) - SUM
1155 WORK( JJ + J ) = WORK( JJ + J ) -
1156 $ SUM*DCONJG( V2 )
1157 Z( ICOL1 + J ) = Z( ICOL1 + J ) -
1158 $ SUM*DCONJG( V3 )
1159 330 CONTINUE
1159
1160 IF( ISTART.EQ.ISTOP ) THEN
1160
1161 CALL ZGESD2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1162 $ WORK( IZBUF + 1 ) ,
1163 $ IROW2 - IROW1 + 1 , MYROW ,
1164 $ LEFT )
1165 END IF
1166 END IF
1167 END IF
1168 IF( MOD( K - 1 , HBL ).EQ.HBL - 1 ) THEN
1168
1169 IF( ICOL1.EQ.ICOL2 ) THEN
1169
1170 IF( ISTART.EQ.ISTOP ) THEN
1170
1171 CALL ZGESD2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1172 $ Z(( ICOL1 - 2 )*LDZ +
1173 $ IROW1 ) , LDZ , MYROW ,
1174 $ RIGHT )
1175 END IF
1176 IF( SKIP ) THEN
1176
1177 CALL ZGERV2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1178 $ Z(( ICOL1 - 2 )*LDZ +
1179 $ IROW1 ) , LDZ , MYROW ,
1180 $ RIGHT )
1181 END IF
1182 ELSE IF( SKIP ) THEN
1182
1183 IF( ISTART.EQ.ISTOP ) THEN
1183
1184 CALL ZGERV2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1185 $ WORK( IZBUF + 1 ) ,
1186 $ IROW2 - IROW1 + 1 , MYROW ,
1187 $ LEFT )
1188 END IF
1189 T2 = T1*V2
1190 T3 = T1*V3
1191 ICOL1 =( ICOL1 - 1 )*LDZ
1192 II = IZBUF + IROW2 - 2*IROW1 + 2
1193 DO 340 J = IROW1 , IROW2
1193
1194 SUM = T1*WORK( II + J ) +
1195 $ T2*Z( J + ICOL1 ) +
1196 $ T3*Z( J + ICOL1 + LDZ )
1197 WORK( II + J ) = WORK( II + J ) - SUM
1198 Z( J + ICOL1 ) = Z( J + ICOL1 ) -
1199 $ SUM*DCONJG( V2 )
1200 Z( J + ICOL1 + LDZ ) = Z( J + ICOL1 + LDZ ) -
1201 $ SUM*DCONJG( V3 )
1202 340 CONTINUE
1202
1203 CALL ZGESD2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1204 $ WORK( IZBUF + 1 ) ,
1205 $ IROW2 - IROW1 + 1 , MYROW , LEFT )
1206 END IF
1207 END IF
1208 END IF
1209 END IF
1210 350 CONTINUE
1211 360 CONTINUE
1212
1213 IF( SKIP )
1213
1214 $ GO TO 450
1215
1216 DO 420 KI = 1 , IBULGE
1216
1217 IF( KCOL( KI ).GT.KP2COL( KI ) )
1217
1218 $ GO TO 420
1219 IF(( MYCOL.NE.ICURCOL( KI ) ) .AND.
1220 $( RIGHT.NE.ICURCOL( KI ) ) )GO TO 420
1220
1221 ISTART = MAX( K1( KI ) , M )
1222 ISTOP = MIN( K2( KI ) , I - 1 )
1223 IF( MOD( ISTART - 1 , HBL ).GE.HBL - 2 ) THEN
1224
1225 * INFO is found in a buffer
1226
1226
1227 ISPEC = 1
1228 ELSE
1229
1230 * All INFO is local
1231
1231
1232 ISPEC = 0
1233 END IF
1234 DO 410 K = ISTART , ISTOP
1235
1235
1236 V2 = WORK( VECSIDX + ( K - 1 )*3 + 1 )
1237 V3 = WORK( VECSIDX + ( K - 1 )*3 + 2 )
1238 T1 = WORK( VECSIDX + ( K - 1 )*3 + 3 )
1239 NR = MIN( 3 , I - K + 1 )
1240 IF(( NR.EQ.3 ) .AND.( KCOL( KI ).LE.KP2COL( KI ) ) )
1240
1241 $ THEN
1242
1243 IF(( K.LT.ISTOP ) .AND.
1244 $( MOD( K - 1 , HBL ).LT.HBL - 2 ) ) THEN
1244
1245 ITMP1 = MIN( ISTART + 1 , I ) - 1
1246 ELSE
1246
1247 IF( MOD( K - 1 , HBL ).LT.HBL - 2 ) THEN
1247
1248 ITMP1 = MIN( K + 3 , I )
1249 END IF
1250 IF( MOD( K - 1 , HBL ).EQ.HBL - 2 ) THEN
1250
1251 ITMP1 = MAX( I1 , K - 1 ) - 1
1252 END IF
1253 IF( MOD( K - 1 , HBL ).EQ.HBL - 1 ) THEN
1253
1254 ITMP1 = MAX( I1 , K - 2 ) - 1
1255 END IF
1256 END IF
1257 IF( MOD( K - 1 , HBL ).LT.HBL - 2 ) THEN
1257
1258 ICOL1 = KCOL( KI ) + K - ISTART
1259 ICOL2 = KP2COL( KI ) + K - ISTART
1260 ELSE
1260
1261 ICOL1 = KCOL( KI )
1262 ICOL2 = KP2COL( KI )
1263 IF( K.GT.ISTART ) THEN
1263
1264 IF( RIGHT.EQ.ICURCOL( KI ) ) THEN
1264
1265 ICOL1 = ICOL1 + 1
1266 END IF
1267 IF( MYCOL.EQ.ICURCOL( KI ) ) THEN
1267
1268 ICOL2 = ICOL2 + 1
1269 END IF
1270 END IF
1271 END IF
1272 CALL INFOG1L( I1 , HBL , NPROW , MYROW , IAFIRST ,
1273 $ IROW1 , IROW2 )
1274 IROW2 = NUMROC( ITMP1 , HBL , MYROW , IAFIRST , NPROW )
1275 IF(( MOD( K - 1 , HBL ).EQ.HBL - 2 ) .AND.
1276 $( NPCOL.GT.1 ) ) THEN
1276
1277 IF( ICOL1.EQ.ICOL2 ) THEN
1277
1278 CALL ZGERV2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1279 $ WORK( ICBUF + 1 ) , IROW2 - IROW1 + 1 ,
1280 $ MYROW , LEFT )
1281 T2 = T1*V2
1282 T3 = T1*V3
1283 II = ICBUF - IROW1 + 1
1284 JJ = ICBUF + IROW2 - 2*IROW1 + 2
1285 DO 370 J = IROW1 , IROW2
1285
1286 SUM = T1*WORK( II + J ) + T2*WORK( JJ + J ) +
1287 $ T3*A(( ICOL1 - 1 )*LDA + J )
1288 WORK( II + J ) = WORK( II + J ) - SUM
1289 WORK( JJ + J ) = WORK( JJ + J ) -
1290 $ SUM*DCONJG( V2 )
1291 A(( ICOL1 - 1 )*LDA + J ) = A(( ICOL1 - 1 )*
1292 $ LDA + J ) - SUM*DCONJG( V3 )
1293 370 CONTINUE
1293
1294 IF( ISTART.EQ.ISTOP ) THEN
1294
1295 CALL ZGESD2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1296 $ WORK( ICBUF + 1 ) ,
1297 $ IROW2 - IROW1 + 1 , MYROW , LEFT )
1298 END IF
1299 END IF
1300 END IF
1301 IF(( MOD( K - 1 , HBL ).EQ.HBL - 1 ) .AND.
1302 $( NPCOL.GT.1 ) ) THEN
1302
1303 IF( ICOL1.NE.ICOL2 ) THEN
1303
1304 IF( ISTART.EQ.ISTOP ) THEN
1304
1305 CALL ZGERV2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1306 $ WORK( ICBUF + 1 ) ,
1307 $ IROW2 - IROW1 + 1 , MYROW , LEFT )
1308 END IF
1309 T2 = T1*V2
1310 T3 = T1*V3
1311 II = ICBUF + IROW2 - 2*IROW1 + 2
1312 DO 380 J = IROW1 , IROW2
1312
1313 SUM = T1*WORK( J + II ) +
1314 $ T2*A(( ICOL1 - 1 )*LDA + J ) +
1315 $ T3*A( ICOL1*LDA + J )
1316 WORK( J + II ) = WORK( J + II ) - SUM
1317 A(( ICOL1 - 1 )*LDA + J ) = A(( ICOL1 - 1 )*
1318 $ LDA + J ) - SUM*DCONJG( V2 )
1319 A( ICOL1*LDA + J ) = A( ICOL1*LDA + J ) -
1320 $ SUM*DCONJG( V3 )
1321 380 CONTINUE
1321
1322 CALL ZGESD2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1323 $ WORK( ICBUF + 1 ) , IROW2 - IROW1 + 1 ,
1324 $ MYROW , LEFT )
1325 END IF
1326 END IF
1327
1328 * If we want Z and we haven't already done any Z
1329 IF(( WANTZ ) .AND.( MOD( K - 1 ,
1330 $ HBL ).GE.HBL - 2 ) .AND.( NPCOL.GT.1 ) ) THEN
1331
1332 * Accumulate transformations in the matrix Z
1333
1334 IROW1 = LILOZ
1335 IROW2 = LIHIZ
1336 IF( MOD( K - 1 , HBL ).EQ.HBL - 2 ) THEN
1336
1337 IF( ICOL1.EQ.ICOL2 ) THEN
1337
1338 CALL ZGERV2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1339 $ WORK( IZBUF + 1 ) ,
1340 $ IROW2 - IROW1 + 1 , MYROW , LEFT )
1341 T2 = T1*V2
1342 T3 = T1*V3
1343 ICOL1 =( ICOL1 - 1 )*LDZ
1344 II = IZBUF - IROW1 + 1
1345 JJ = IZBUF + IROW2 - 2*IROW1 + 2
1346 DO 390 J = IROW1 , IROW2
1346
1347 SUM = T1*WORK( II + J ) +
1348 $ T2*WORK( JJ + J ) + T3*Z( ICOL1 + J )
1349 WORK( II + J ) = WORK( II + J ) - SUM
1350 WORK( JJ + J ) = WORK( JJ + J ) -
1351 $ SUM*DCONJG( V2 )
1352 Z( ICOL1 + J ) = Z( ICOL1 + J ) -
1353 $ SUM*DCONJG( V3 )
1354 390 CONTINUE
1354
1355 IF( ISTART.EQ.ISTOP ) THEN
1355
1356 CALL ZGESD2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1357 $ WORK( IZBUF + 1 ) ,
1358 $ IROW2 - IROW1 + 1 , MYROW ,
1359 $ LEFT )
1360 END IF
1361 END IF
1362 END IF
1363 IF( MOD( K - 1 , HBL ).EQ.HBL - 1 ) THEN
1363
1364 IF( ICOL1.NE.ICOL2 ) THEN
1364
1365 IF( ISTART.EQ.ISTOP ) THEN
1365
1366 CALL ZGERV2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1367 $ WORK( IZBUF + 1 ) ,
1368 $ IROW2 - IROW1 + 1 , MYROW ,
1369 $ LEFT )
1370 END IF
1371 T2 = T1*V2
1372 T3 = T1*V3
1373 ICOL1 =( ICOL1 - 1 )*LDZ
1374 II = IZBUF + IROW2 - 2*IROW1 + 2
1375 DO 400 J = IROW1 , IROW2
1375
1376 SUM = T1*WORK( II + J ) +
1377 $ T2*Z( J + ICOL1 ) +
1378 $ T3*Z( J + ICOL1 + LDZ )
1379 WORK( II + J ) = WORK( II + J ) - SUM
1380 Z( J + ICOL1 ) = Z( J + ICOL1 ) -
1381 $ SUM*DCONJG( V2 )
1382 Z( J + ICOL1 + LDZ ) = Z( J + ICOL1 + LDZ ) -
1383 $ SUM*DCONJG( V3 )
1384 400 CONTINUE
1384
1385 CALL ZGESD2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1386 $ WORK( IZBUF + 1 ) ,
1387 $ IROW2 - IROW1 + 1 , MYROW , LEFT )
1388 END IF
1389 END IF
1390 END IF
1391 END IF
1392 410 CONTINUE
1393 420 CONTINUE
1394
1395 DO 440 KI = 1 , IBULGE
1395
1396 IF( KCOL( KI ).GT.KP2COL( KI ) )
1396
1397 $ GO TO 440
1398 IF(( MYCOL.NE.ICURCOL( KI ) ) .AND.
1399 $( RIGHT.NE.ICURCOL( KI ) ) )GO TO 440
1399
1400 ISTART = MAX( K1( KI ) , M )
1401 ISTOP = MIN( K2( KI ) , I - 1 )
1402 IF( MOD( ISTART - 1 , HBL ).GE.HBL - 2 ) THEN
1403
1404 * INFO is found in a buffer
1405
1405
1406 ISPEC = 1
1407 ELSE
1408
1409 * All INFO is local
1410
1410
1411 ISPEC = 0
1412 END IF
1413 DO 430 K = ISTART , ISTOP
1414
1414
1415 V2 = WORK( VECSIDX + ( K - 1 )*3 + 1 )
1416 V3 = WORK( VECSIDX + ( K - 1 )*3 + 2 )
1417 T1 = WORK( VECSIDX + ( K - 1 )*3 + 3 )
1418 NR = MIN( 3 , I - K + 1 )
1419 IF(( NR.EQ.3 ) .AND.( KCOL( KI ).LE.KP2COL( KI ) ) )
1419
1420 $ THEN
1421
1422 IF(( K.LT.ISTOP ) .AND.
1423 $( MOD( K - 1 , HBL ).LT.HBL - 2 ) ) THEN
1423
1424 ITMP1 = MIN( ISTART + 1 , I ) - 1
1425 ELSE
1425
1426 IF( MOD( K - 1 , HBL ).LT.HBL - 2 ) THEN
1426
1427 ITMP1 = MIN( K + 3 , I )
1428 END IF
1429 IF( MOD( K - 1 , HBL ).EQ.HBL - 2 ) THEN
1429
1430 ITMP1 = MAX( I1 , K - 1 ) - 1
1431 END IF
1432 IF( MOD( K - 1 , HBL ).EQ.HBL - 1 ) THEN
1432
1433 ITMP1 = MAX( I1 , K - 2 ) - 1
1434 END IF
1435 END IF
1436 IF( MOD( K - 1 , HBL ).LT.HBL - 2 ) THEN
1436
1437 ICOL1 = KCOL( KI ) + K - ISTART
1438 ICOL2 = KP2COL( KI ) + K - ISTART
1439 ELSE
1439
1440 ICOL1 = KCOL( KI )
1441 ICOL2 = KP2COL( KI )
1442 IF( K.GT.ISTART ) THEN
1442
1443 IF( RIGHT.EQ.ICURCOL( KI ) ) THEN
1443
1444 ICOL1 = ICOL1 + 1
1445 END IF
1446 IF( MYCOL.EQ.ICURCOL( KI ) ) THEN
1446
1447 ICOL2 = ICOL2 + 1
1448 END IF
1449 END IF
1450 END IF
1451 CALL INFOG1L( I1 , HBL , NPROW , MYROW , IAFIRST ,
1452 $ IROW1 , IROW2 )
1453 IROW2 = NUMROC( ITMP1 , HBL , MYROW , IAFIRST , NPROW )
1454 IF(( MOD( K - 1 , HBL ).EQ.HBL - 2 ) .AND.
1455 $( NPCOL.GT.1 ) ) THEN
1455
1456 IF( ICOL1.NE.ICOL2 ) THEN
1456
1457 IF( ISTART.EQ.ISTOP ) THEN
1457
1458 CALL ZGERV2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1459 $ A(( ICOL1 - 1 )*LDA + IROW1 ) ,
1460 $ LDA , MYROW , RIGHT )
1461 END IF
1462 END IF
1463 END IF
1464 IF(( MOD( K - 1 , HBL ).EQ.HBL - 1 ) .AND.
1465 $( NPCOL.GT.1 ) ) THEN
1465
1466 IF( ICOL1.EQ.ICOL2 ) THEN
1466
1467 CALL ZGERV2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1468 $ A(( ICOL1 - 2 )*LDA + IROW1 ) ,
1469 $ LDA , MYROW , RIGHT )
1470 END IF
1471 END IF
1472
1473 * If we want Z and we haven't already done any Z
1474
1475 IF(( WANTZ ) .AND.( MOD( K - 1 ,
1476 $ HBL ).GE.HBL - 2 ) .AND.( NPCOL.GT.1 ) ) THEN
1477
1478 * Accumulate transformations in the matrix Z
1479
1480 IROW1 = LILOZ
1481 IROW2 = LIHIZ
1482 IF( MOD( K - 1 , HBL ).EQ.HBL - 2 ) THEN
1482
1483 IF( ICOL1.NE.ICOL2 ) THEN
1483
1484 IF( ISTART.EQ.ISTOP ) THEN
1484
1485 CALL ZGERV2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1486 $ Z(( ICOL1 - 1 )*LDZ +
1487 $ IROW1 ) , LDZ , MYROW ,
1488 $ RIGHT )
1489 END IF
1490 END IF
1491 END IF
1492 IF( MOD( K - 1 , HBL ).EQ.HBL - 1 ) THEN
1492
1493 IF( ICOL1.EQ.ICOL2 ) THEN
1493
1494 CALL ZGERV2D( CONTXT , IROW2 - IROW1 + 1 , 2 ,
1495 $ Z(( ICOL1 - 2 )*LDZ + IROW1 ) ,
1496 $ LDZ , MYROW , RIGHT )
1497 END IF
1498 END IF
1499 END IF
1500 END IF
1501 430 CONTINUE
1502 440 CONTINUE
1503
1504 * Column work done
1505
1506 450 CONTINUE
1507
1508 * Now do NR = 2 work
1509
1510 DO 530 KI = 1 , IBULGE
1510
1511 ISTART = MAX( K1( KI ) , M )
1512 ISTOP = MIN( K2( KI ) , I - 1 )
1513 IF( MOD( ISTART - 1 , HBL ).GE.HBL - 2 ) THEN
1514
1515 * INFO is found in a buffer
1516
1516
1517 ISPEC = 1
1518 ELSE
1519
1520 * All INFO is local
1521
1521
1522 ISPEC = 0
1523 END IF
1524
1525 DO 520 K = ISTART , ISTOP
1526
1526
1527 V2 = WORK( VECSIDX + ( K - 1 )*3 + 1 )
1528 V3 = WORK( VECSIDX + ( K - 1 )*3 + 2 )
1529 T1 = WORK( VECSIDX + ( K - 1 )*3 + 3 )
1530 NR = MIN( 3 , I - K + 1 )
1531 IF( NR.EQ.2 ) THEN
1531
1532 IF( ICURROW( KI ).EQ.MYROW ) THEN
1532
1533 T2 = T1*V2
1534 END IF
1535 IF( ICURCOL( KI ).EQ.MYCOL ) THEN
1535
1536 T2 = T1*V2
1537 END IF
1538
1539 * Apply G from the left to transform the rows of the matrix
1540 * in columns K to I2.
1541
1542 CALL INFOG1L( K , HBL , NPCOL , MYCOL , JAFIRST , LILOH ,
1543 $ LIHIH )
1544 LIHIH = LOCALI2
1545 CALL INFOG1L( 1 , HBL , NPROW , MYROW , IAFIRST , ITMP2 ,
1546 $ ITMP1 )
1547 ITMP1 = NUMROC( K + 1 , HBL , MYROW , IAFIRST , NPROW )
1548 IF( ICURROW( KI ).EQ.MYROW ) THEN
1548
1549 IF(( ISPEC.EQ.0 ) .OR.( NPROW.EQ.1 ) .OR.
1550 $( MOD( K - 1 , HBL ).EQ.HBL - 2 ) ) THEN
1550
1551 ITMP1 = ITMP1 - 1
1552 DO 460 J =( LILOH - 1 )*LDA ,
1553 $( LIHIH - 1 )*LDA , LDA
1553
1554 SUM = DCONJG( T1 )*A( ITMP1 + J ) +
1555 $ DCONJG( T2 )*A( ITMP1 + 1 + J )
1556 A( ITMP1 + J ) = A( ITMP1 + J ) - SUM
1557 A( ITMP1 + 1 + J ) = A( ITMP1 + 1 + J ) - SUM*V2
1558 460 CONTINUE
1558
1559 ELSE
1559
1560 IF( MOD( K - 1 , HBL ).EQ.HBL - 1 ) THEN
1560
1561 CALL ZGERV2D( CONTXT , 1 , LIHIH - LILOH + 1 ,
1562 $ WORK( IRBUF + 1 ) , 1 , UP ,
1563 $ MYCOL )
1564 DO 470 J = LILOH , LIHIH
1564
1565 SUM = DCONJG( T1 )*
1566 $ WORK( IRBUF + J - LILOH + 1 ) +
1567 $ DCONJG( T2 )*A(( J - 1 )*LDA +
1568 $ ITMP1 )
1569 WORK( IRBUF + J - LILOH + 1 ) = WORK( IRBUF +
1570 $ J - LILOH + 1 ) - SUM
1571 A(( J - 1 )*LDA + ITMP1 ) = A(( J - 1 )*
1572 $ LDA + ITMP1 ) - SUM*V2
1573 470 CONTINUE
1573
1574 CALL ZGESD2D( CONTXT , 1 , LIHIH - LILOH + 1 ,
1575 $ WORK( IRBUF + 1 ) , 1 , UP ,
1576 $ MYCOL )
1577 END IF
1578 END IF
1579 ELSE
1579
1580 IF(( MOD( K - 1 , HBL ).EQ.HBL - 1 ) .AND.
1581 $( ICURROW( KI ).EQ.DOWN ) ) THEN
1581
1582 CALL ZGESD2D( CONTXT , 1 , LIHIH - LILOH + 1 ,
1583 $ A(( LILOH - 1 )*LDA + ITMP1 ) ,
1584 $ LDA , DOWN , MYCOL )
1585 CALL ZGERV2D( CONTXT , 1 , LIHIH - LILOH + 1 ,
1586 $ A(( LILOH - 1 )*LDA + ITMP1 ) ,
1587 $ LDA , DOWN , MYCOL )
1588 END IF
1589 END IF
1590
1591 * Apply G from the right to transform the columns of the
1592 * matrix in rows I1 to MIN(K + 3 , I).
1593
1594 CALL INFOG1L( I1 , HBL , NPROW , MYROW , IAFIRST ,
1595 $ LILOH , LIHIH )
1596 LIHIH = NUMROC( I , HBL , MYROW , IAFIRST , NPROW )
1597
1598 IF( ICURCOL( KI ).EQ.MYCOL ) THEN
1599 * LOCAL A(LILOZ : LIHIZ , KCOL : KCOL + 2)
1599
1600 IF(( ISPEC.EQ.0 ) .OR.( NPCOL.EQ.1 ) .OR.
1601 $( MOD( K - 1 , HBL ).EQ.HBL - 2 ) ) THEN
1601
1602 CALL INFOG1L( K , HBL , NPCOL , MYCOL , JAFIRST ,
1603 $ ITMP1 , ITMP2 )
1604 ITMP2 = NUMROC( K + 1 , HBL , MYCOL , JAFIRST ,
1605 $ NPCOL )
1606 DO 480 J = LILOH , LIHIH
1606
1607 SUM = T1*A(( ITMP1 - 1 )*LDA + J ) +
1608 $ T2*A( ITMP1*LDA + J )
1609 A(( ITMP1 - 1 )*LDA + J ) = A(( ITMP1 - 1 )*
1610 $ LDA + J ) - SUM
1611 A( ITMP1*LDA + J ) = A( ITMP1*LDA + J ) -
1612 $ SUM*DCONJG( V2 )
1613 480 CONTINUE
1613
1614 ELSE
1614
1615 ITMP1 = KCOL( KI )
1616 IF( MOD( K - 1 , HBL ).EQ.HBL - 1 ) THEN
1616
1617 CALL ZGERV2D( CONTXT , LIHIH - LILOH + 1 , 1 ,
1618 $ WORK( ICBUF + 1 ) ,
1619 $ LIHIH - LILOH + 1 , MYROW , LEFT )
1620 DO 490 J = LILOH , LIHIH
1620
1621 SUM = T1*WORK( ICBUF + J ) +
1622 $ T2*A(( ITMP1 - 1 )*LDA + J )
1623 WORK( ICBUF + J ) = WORK( ICBUF + J ) - SUM
1624 A(( ITMP1 - 1 )*LDA + J )
1625 $ = A(( ITMP1 - 1 )*LDA + J ) -
1626 $ SUM*DCONJG( V2 )
1627 490 CONTINUE
1627
1628 CALL ZGESD2D( CONTXT , LIHIH - LILOH + 1 , 1 ,
1629 $ WORK( ICBUF + 1 ) ,
1630 $ LIHIH - LILOH + 1 , MYROW , LEFT )
1631 END IF
1632 END IF
1633 ELSE
1633
1634 IF(( MOD( K - 1 , HBL ).EQ.HBL - 1 ) .AND.
1635 $( ICURCOL( KI ).EQ.RIGHT ) ) THEN
1635
1636 ITMP1 = KCOL( KI )
1637 CALL ZGESD2D( CONTXT , LIHIH - LILOH + 1 , 1 ,
1638 $ A(( ITMP1 - 1 )*LDA + LILOH ) ,
1639 $ LDA , MYROW , RIGHT )
1640 CALL INFOG1L( K , HBL , NPCOL , MYCOL , JAFIRST ,
1641 $ ITMP1 , ITMP2 )
1642 ITMP2 = NUMROC( K + 1 , HBL , MYCOL , JAFIRST ,
1643 $ NPCOL )
1644 CALL ZGERV2D( CONTXT , LIHIH - LILOH + 1 , 1 ,
1645 $ A(( ITMP1 - 1 )*LDA + LILOH ) ,
1646 $ LDA , MYROW , RIGHT )
1647 END IF
1648 END IF
1649
1650 IF( WANTZ ) THEN
1651
1652 * Accumulate transformations in the matrix Z
1653
1653
1654 IF( ICURCOL( KI ).EQ.MYCOL ) THEN
1655 * LOCAL Z(LILOZ : LIHIZ , KCOL : KCOL + 2)
1655
1656 IF(( ISPEC.EQ.0 ) .OR.( NPCOL.EQ.1 ) .OR.
1657 $( MOD( K - 1 , HBL ).EQ.HBL - 2 ) ) THEN
1657
1658 ITMP1 = KCOL( KI ) + K - ISTART
1659 ITMP1 =( ITMP1 - 1 )*LDZ
1660 DO 500 J = LILOZ , LIHIZ
1660
1661 SUM = T1*Z( J + ITMP1 ) +
1662 $ T2*Z( J + ITMP1 + LDZ )
1663 Z( J + ITMP1 ) = Z( J + ITMP1 ) - SUM
1664 Z( J + ITMP1 + LDZ ) = Z( J + ITMP1 + LDZ ) -
1665 $ SUM*DCONJG( V2 )
1666 500 CONTINUE
1666
1667 ELSE
1667
1668 ITMP1 = KCOL( KI )
1669 * IF WE ACTUALLY OWN COLUMN K
1670 IF( MOD( K - 1 , HBL ).EQ.HBL - 1 ) THEN
1670
1671 CALL ZGERV2D( CONTXT , LIHIZ - LILOZ + 1 , 1 ,
1672 $ WORK( IZBUF + 1 ) , LDZ ,
1673 $ MYROW , LEFT )
1674 ITMP1 =( ITMP1 - 1 )*LDZ
1675 DO 510 J = LILOZ , LIHIZ
1675
1676 SUM = T1*WORK( IZBUF + J ) +
1677 $ T2*Z( J + ITMP1 )
1678 WORK( IZBUF + J ) = WORK( IZBUF + J ) -
1679 $ SUM
1680 Z( J + ITMP1 ) = Z( J + ITMP1 ) -
1681 $ SUM*DCONJG( V2 )
1682 510 CONTINUE
1682
1683 CALL ZGESD2D( CONTXT , LIHIZ - LILOZ + 1 , 1 ,
1684 $ WORK( IZBUF + 1 ) , LDZ ,
1685 $ MYROW , LEFT )
1686 END IF
1687 END IF
1688 ELSE
1689
1690 * NO WORK BUT NEED TO UPDATE ANYWAY????
1691
1691
1692 IF(( MOD( K - 1 , HBL ).EQ.HBL - 1 ) .AND.
1693 $( ICURCOL( KI ).EQ.RIGHT ) ) THEN
1693
1694 ITMP1 = KCOL( KI )
1695 ITMP1 =( ITMP1 - 1 )*LDZ
1696 CALL ZGESD2D( CONTXT , LIHIZ - LILOZ + 1 , 1 ,
1697 $ Z( LILOZ + ITMP1 ) , LDZ ,
1698 $ MYROW , RIGHT )
1699 CALL ZGERV2D( CONTXT , LIHIZ - LILOZ + 1 , 1 ,
1700 $ Z( LILOZ + ITMP1 ) , LDZ ,
1701 $ MYROW , RIGHT )
1702 END IF
1703 END IF
1704 END IF
1705 END IF
1706 520 CONTINUE
1707
1708 * Adjust local information for this bulge
1709
1710 IF( NPROW.EQ.1 ) THEN
1710
1711 KROW( KI ) = KROW( KI ) + K2( KI ) - K1( KI ) + 1
1712 KP2ROW( KI ) = KP2ROW( KI ) + K2( KI ) - K1( KI ) + 1
1713 END IF
1714 IF(( MOD( K1( KI ) - 1 , HBL ).LT.HBL - 2 ) .AND.
1715 $( ICURROW( KI ).EQ.MYROW ) .AND.( NPROW.GT.1 ) )
1716 $THEN
1717 KROW( KI ) = KROW( KI ) + K2( KI ) - K1( KI ) + 1
1718 END IF
1719 IF(( MOD( K2( KI ) , HBL ).LT.HBL - 2 ) .AND.
1720 $( ICURROW( KI ).EQ.MYROW ) .AND.( NPROW.GT.1 ) )
1721 $THEN
1722 KP2ROW( KI ) = KP2ROW( KI ) + K2( KI ) - K1( KI ) + 1
1723 END IF
1724 IF(( MOD( K1( KI ) - 1 , HBL ).GE.HBL - 2 ) .AND.
1725 $(( MYROW.EQ.ICURROW( KI ) ) .OR.( DOWN.EQ.
1726 $ICURROW( KI ) ) ) .AND.( NPROW.GT.1 ) ) THEN
1727 CALL INFOG1L( K2( KI ) + 1 , HBL , NPROW , MYROW , IAFIRST ,
1728 $KROW( KI ) , ITMP2 )
1729 END IF
1730 IF(( MOD( K2( KI ) , HBL ).GE.HBL - 2 ) .AND.
1731 $(( MYROW.EQ.ICURROW( KI ) ) .OR.( UP.EQ.
1732 $ICURROW( KI ) ) ) .AND.( NPROW.GT.1 ) ) THEN
1733 KP2ROW( KI ) = NUMROC( K2( KI ) + 3 , HBL , MYROW ,
1734 $IAFIRST , NPROW )
1735 END IF
1736 IF( NPCOL.EQ.1 ) THEN
1736
1737 KCOL( KI ) = KCOL( KI ) + K2( KI ) - K1( KI ) + 1
1738 KP2COL( KI ) = KP2COL( KI ) + K2( KI ) - K1( KI ) + 1
1739 END IF
1740 IF(( MOD( K1( KI ) - 1 , HBL ).LT.HBL - 2 ) .AND.
1741 $( ICURCOL( KI ).EQ.MYCOL ) .AND.( NPCOL.GT.1 ) )
1742 $THEN
1743 KCOL( KI ) = KCOL( KI ) + K2( KI ) - K1( KI ) + 1
1744 END IF
1745 IF(( MOD( K2( KI ) , HBL ).LT.HBL - 2 ) .AND.
1746 $( ICURCOL( KI ).EQ.MYCOL ) .AND.( NPCOL.GT.1 ) )
1747 $THEN
1748 KP2COL( KI ) = KP2COL( KI ) + K2( KI ) - K1( KI ) + 1
1749 END IF
1750 IF(( MOD( K1( KI ) - 1 , HBL ).GE.HBL - 2 ) .AND.
1751 $(( MYCOL.EQ.ICURCOL( KI ) ) .OR.( RIGHT.EQ.
1752 $ICURCOL( KI ) ) ) .AND.( NPCOL.GT.1 ) ) THEN
1753 CALL INFOG1L( K2( KI ) + 1 , HBL , NPCOL , MYCOL , JAFIRST ,
1754 $KCOL( KI ) , ITMP2 )
1755 END IF
1756 IF(( MOD( K2( KI ) , HBL ).GE.HBL - 2 ) .AND.
1757 $(( MYCOL.EQ.ICURCOL( KI ) ) .OR.( LEFT.EQ.
1758 $ICURCOL( KI ) ) ) .AND.( NPCOL.GT.1 ) ) THEN
1759 KP2COL( KI ) = NUMROC( K2( KI ) + 3 , HBL , MYCOL ,
1760 $JAFIRST , NPCOL )
1761 END IF
1762 K1( KI ) = K2( KI ) + 1
1763 ISTOP = MIN( K1( KI ) + ROTN - MOD( K1( KI ) , ROTN ) , I - 2 )
1764 ISTOP = MIN( ISTOP , K1( KI ) + HBL - 3 -
1765 $MOD( K1( KI ) - 1 , HBL ) )
1766 ISTOP = MIN( ISTOP , I2 - 2 )
1767 ISTOP = MAX( ISTOP , K1( KI ) )
1768 IF(( MOD( K1( KI ) - 1 , HBL ).EQ.HBL - 2 ) .AND.
1769 $( ISTOP.LT.MIN( I - 2 , I2 - 2 ) ) ) THEN
1770 ISTOP = ISTOP + 1
1771 END IF
1772 K2( KI ) = ISTOP
1773 IF( K1( KI ).LE.ISTOP ) THEN
1773
1774 IF(( MOD( K1( KI ) - 1 , HBL ).EQ.HBL - 2 ) .AND.
1775 $( I - K1( KI ).GT.1 ) ) THEN
1776
1777 * Next step switches rows & cols
1778
1778
1779 ICURROW( KI ) = MOD( ICURROW( KI ) + 1 , NPROW )
1780 ICURCOL( KI ) = MOD( ICURCOL( KI ) + 1 , NPCOL )
1781 END IF
1782 END IF
1783 530 CONTINUE
1784
1785 IF( K2( IBULGE ).LE.I - 1 )
1785
1786 $ GO TO 40
1787 END IF
1788
1789 540 CONTINUE
1790
1791 * Failure to converge in remaining number of iterations
1792
1793 INFO = I
1794 RETURN
1795
1796 550 CONTINUE
1797
1798 IF( L.EQ.I ) THEN
1799
1800 * H(I , I - 1) is negligible : one eigenvalue has converged.
1801
1801
1802 CALL INFOG2L( I , I , DESCA , NPROW , NPCOL , MYROW , MYCOL , IROW ,
1803 $ ICOL , ITMP1 , ITMP2 )
1804 IF(( MYROW.EQ.ITMP1 ) .AND.( MYCOL.EQ.ITMP2 ) ) THEN
1804
1805 W( I ) = A(( ICOL - 1 )*LDA + IROW )
1806 ELSE
1806
1807 W( I ) = ZERO
1808 END IF
1809 ELSE IF( L.EQ.I - 1 ) THEN
1810
1811 * H(I - 1 , I - 2) is negligible : a pair of eigenvalues have converged.
1812
1812
1813 CALL PZLACP3 ( 2 , I - 1 , A , DESCA , S1 , 2*IBLK , - 1 , - 1 , 0 )
1814 CALL ZLANV2 ( S1( 1 , 1 ) , S1( 1 , 2 ) , S1( 2 , 1 ) , S1( 2 , 2 ) ,
1815 $ W( I - 1 ) , W( I ) , CS , SN )
1816 CALL PZLACP3 ( 2 , I - 1 , A , DESCA , S1 , 2*IBLK , 0 , 0 , 1 )
1817
1818 IF( NODE.NE.0 ) THEN
1819 * Erase the eigenvalues other eigenvalues
1819
1820 W( I - 1 ) = ZERO
1821 W( I ) = ZERO
1822 END IF
1823
1824 IF( WANTT ) THEN
1825
1826 * Apply the transformation to A.
1827
1827
1828 IF( I2.GT.I ) THEN
1828
1829 CALL PZROT( I2 - I , A , I - 1 , I + 1 , DESCA , N , A , I , I + 1 ,
1830 $ DESCA , N , CS , SN )
1831 END IF
1832 CALL PZROT( I - I1 - 1 , A , I1 , I - 1 , DESCA , 1 , A , I1 , I , DESCA ,
1833 $ 1 , CS , DCONJG( SN ) )
1834 END IF
1835 IF( WANTZ ) THEN
1836
1837 * Apply the transformation to Z.
1838
1838
1839 CALL PZROT( NZ , Z , ILOZ , I - 1 , DESCZ , 1 , Z , ILOZ , I , DESCZ ,
1840 $ 1 , CS , DCONJG( SN ) )
1841 END IF
1842
1843 ELSE
1844
1845 * Find the eigenvalues in H(L : I , L : I) , L < I - 1
1846
1846
1847 JBLK = I - L + 1
1848 IF( JBLK.LE.2*IBLK ) THEN
1848
1849 CALL PZLACP3 ( I - L + 1 , L , A , DESCA , S1 , 2*IBLK , 0 , 0 , 0 )
1850 CALL ZLAHQR2 ( .FALSE. , .FALSE. , JBLK , 1 , JBLK , S1 , 2*IBLK ,
1851 $ W( L ) , 1 , JBLK , Z , LDZ , IERR )
1852 IF( NODE.NE.0 ) THEN
1853
1854 * Erase the eigenvalues
1855
1855
1856 DO 560 K = L , I
1856
1857 W( K ) = ZERO
1858 560 CONTINUE
1858
1859 END IF
1860 END IF
1861 END IF
1862
1863 * Decrement number of remaining iterations , and return to start of
1864 * the main loop with new value of I.
1865
1866 ITN = ITN - ITS
1867 I = L - 1
1868 GO TO 10
1869
1870 570 CONTINUE
1871 CALL ZGSUM2D( CONTXT , 'All' , ' ' , N , 1 , W , N , - 1 , - 1 )
1872 RETURN
1873
1874 * END OF PZLAHQR
1875
1876 END184
297
|
|
Variables in Routine PZLAHQR()
| Summary Report |
| Data Type | Quantity | Size(byte) |
| COMPLEX*16 | 6 | ? |
| DOUBLE PRECISION | 2 | 8 |
| INTEGER | 51 | 204 |
| LOGICAL | 2 | 2 |
| REAL | 12 | 48 |
| TOTAL | 73 | 262 |
List of Variables
COMPLEX*16
| A( * ) | ONE | W( * ) | WORK( * ) | Z( * ) |
| ZERO | | | | |
DOUBLE PRECISION
INTEGER
| BLOCK_CYCLIC_2D | CSRC_ | CTXT_ | DESCA( * ) | DESCZ( * ) |
| DLEN_ | DT_ | I | IBLK | ICOL1 |
| ICOL2 | ICURCOL | ICURROW | IHI | IHIZ |
| II | ILO | ILOZ | ILWORK | INFO |
| IROW1 | IROW2 | ISPEC | ISTART | ISTOP |
| ITMP1 | ITMP2 | ITN | IWORK( * ) | J |
| JBLK | JJ | K | K1 | K2 |
| KCOL | KI | KP2COL | KP2ROW | KROW |
| LIHIH | LLD_ | LWORK | M_ | MB_ |
| MODKM1 | N | N_ | NB_ | NR |
| RSRC_ | | | | |
LOGICAL
REAL
| $ | H10 | H11 | H22 | S |
| SUM | T1 | T2 | T3 | V2 |
| V3 | VCOPY | | | |
Variables Dependence Graph Put the mouse over a right hand side variable to display the corresponding line of the dependence | | - | | - | - | | A | <--- | ICOL1A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*{2A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*, 3A( ICOL1*LDA+J ) = A( ICOL1*LDA+J ) -, 4A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*, 5A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*, 6A( ICOL1*LDA+J ) = A( ICOL1*LDA+J ) -, 7A( ( ICOL1-2 )*LDA+IROW1 ) = A( ( ICOL1-2 )*LDA+, 8A( ( ICOL1-2 )*LDA+IROW1 ) = A( ( ICOL1-2 )*, 9A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*LDA+, 10A( ICOL1*LDA+J ) = A( ICOL1*LDA+J ) -, 11A( ( ICOL1+1 )*LDA+J ) = A( ( ICOL1+1 )*LDA+}, AA( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*{2A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*, 3A( ICOL1*LDA+J ) = A( ICOL1*LDA+J ) -, 4A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*, 5A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*, 6A( ICOL1*LDA+J ) = A( ICOL1*LDA+J ) -, 7A( ITMP1+J ) = A( ITMP1+J ) - SUM, 8A( ITMP1+1+J ) = A( ITMP1+1+J ) - SUM*V2, 9A( ( J-1 )*LDA+ITMP1 ) = A( ( J-1 )*, 10A( ( ITMP1-1 )*LDA+J ) = A( ( ITMP1-1 )*, 11A( ITMP1*LDA+J ) = A( ITMP1*LDA+J ) -, 12A( ( ITMP1-1 )*LDA+J ), 13A( ( ICOL1-2 )*LDA+IROW1 ) = A( ( ICOL1-2 )*LDA+, 14A( ( ICOL1-2 )*LDA+IROW1 ) = A( ( ICOL1-2 )*, 15A( J ) = A( J ) - SUM, 16A( J+1 ) = A( J+1 ) - SUM*V2, 17A( J+2 ) = A( J+2 ) - SUM*V3, 18A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*LDA+, 19A( ICOL1*LDA+J ) = A( ICOL1*LDA+J ) -, 20A( ( ICOL1+1 )*LDA+J ) = A( ( ICOL1+1 )*LDA+, 21A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*, 22A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*, 23A( ( J-1 )*LDA+IROW1+1 ) = A( ( J-1 )*, 24A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*, 25A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*, 26A( ( J-1 )*LDA+IROW1+1 ) = A( ( J-1 )*}, IROW1A( ( ICOL1-2 )*LDA+IROW1 ) = A( ( ICOL1-2 )*LDA+{2A( ( ICOL1-2 )*LDA+IROW1 ) = A( ( ICOL1-2 )*, 3A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*, 4A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*, 5A( ( J-1 )*LDA+IROW1+1 ) = A( ( J-1 )*, 6A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*, 7A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*, 8A( ( J-1 )*LDA+IROW1+1 ) = A( ( J-1 )*}, ITMP1A( ITMP1+J ) = A( ITMP1+J ) - SUM{2A( ITMP1+1+J ) = A( ITMP1+1+J ) - SUM*V2, 3A( ( J-1 )*LDA+ITMP1 ) = A( ( J-1 )*, 4A( ( ITMP1-1 )*LDA+J ) = A( ( ITMP1-1 )*, 5A( ITMP1*LDA+J ) = A( ITMP1*LDA+J ) -, 6A( ( ITMP1-1 )*LDA+J )}, JA( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*{2A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*, 3A( ICOL1*LDA+J ) = A( ICOL1*LDA+J ) -, 4A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*, 5A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*, 6A( ICOL1*LDA+J ) = A( ICOL1*LDA+J ) -, 7A( ITMP1+J ) = A( ITMP1+J ) - SUM, 8A( ITMP1+1+J ) = A( ITMP1+1+J ) - SUM*V2, 9A( ( J-1 )*LDA+ITMP1 ) = A( ( J-1 )*, 10A( ( ITMP1-1 )*LDA+J ) = A( ( ITMP1-1 )*, 11A( ITMP1*LDA+J ) = A( ITMP1*LDA+J ) -, 12A( ( ITMP1-1 )*LDA+J ), 13A( J ) = A( J ) - SUM, 14A( J+1 ) = A( J+1 ) - SUM*V2, 15A( J+2 ) = A( J+2 ) - SUM*V3, 16A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*LDA+, 17A( ICOL1*LDA+J ) = A( ICOL1*LDA+J ) -, 18A( ( ICOL1+1 )*LDA+J ) = A( ( ICOL1+1 )*LDA+, 19A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*, 20A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*, 21A( ( J-1 )*LDA+IROW1+1 ) = A( ( J-1 )*, 22A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*, 23A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*, 24A( ( J-1 )*LDA+IROW1+1 ) = A( ( J-1 )*}, ONEA( ( ICOL1-2 )*LDA+IROW1 ) = A( ( ICOL1-2 )*LDA+{2A( ( ICOL1-2 )*LDA+IROW1 ) = A( ( ICOL1-2 )*}, SUMA( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*{2A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*, 3A( ICOL1*LDA+J ) = A( ICOL1*LDA+J ) -, 4A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*, 5A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*, 6A( ICOL1*LDA+J ) = A( ICOL1*LDA+J ) -, 7A( ITMP1+J ) = A( ITMP1+J ) - SUM, 8A( ITMP1+1+J ) = A( ITMP1+1+J ) - SUM*V2, 9A( ( J-1 )*LDA+ITMP1 ) = A( ( J-1 )*, 10A( ( ITMP1-1 )*LDA+J ) = A( ( ITMP1-1 )*, 11A( ITMP1*LDA+J ) = A( ITMP1*LDA+J ) -, 12A( ( ITMP1-1 )*LDA+J ), 13A( J ) = A( J ) - SUM, 14A( J+1 ) = A( J+1 ) - SUM*V2, 15A( J+2 ) = A( J+2 ) - SUM*V3, 16A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*LDA+, 17A( ICOL1*LDA+J ) = A( ICOL1*LDA+J ) -, 18A( ( ICOL1+1 )*LDA+J ) = A( ( ICOL1+1 )*LDA+, 19A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*, 20A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*, 21A( ( J-1 )*LDA+IROW1+1 ) = A( ( J-1 )*, 22A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*, 23A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*, 24A( ( J-1 )*LDA+IROW1+1 ) = A( ( J-1 )*}, V2A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*{2A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*, 3A( ITMP1+1+J ) = A( ITMP1+1+J ) - SUM*V2, 4A( ( J-1 )*LDA+ITMP1 ) = A( ( J-1 )*, 5A( ITMP1*LDA+J ) = A( ITMP1*LDA+J ) -, 6A( ( ITMP1-1 )*LDA+J ), 7A( J+1 ) = A( J+1 ) - SUM*V2, 8A( ICOL1*LDA+J ) = A( ICOL1*LDA+J ) -, 9A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*, 10A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*}, V3A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*{2A( ICOL1*LDA+J ) = A( ICOL1*LDA+J ) -, 3A( ( ICOL1-1 )*LDA+J ) = A( ( ICOL1-1 )*, 4A( ICOL1*LDA+J ) = A( ICOL1*LDA+J ) -, 5A( J+2 ) = A( J+2 ) - SUM*V3, 6A( ( ICOL1+1 )*LDA+J ) = A( ( ICOL1+1 )*LDA+, 7A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*, 8A( ( J-1 )*LDA+IROW1+1 ) = A( ( J-1 )*, 9A( ( J-1 )*LDA+IROW1 ) = A( ( J-1 )*, 10A( ( J-1 )*LDA+IROW1+1 ) = A( ( J-1 )*}, VCOPYA( ( ICOL1-2 )*LDA+IROW1 ) = VCOPY( 1 ){2A( ( ICOL1-2 )*LDA+IROW1 ) = VCOPY( 1 )}, ZEROA( ( ICOL1-2 )*LDA+IROW1+1 ) = ZERO{2A( ( ICOL1-2 )*LDA+IROW1+2 ) = ZERO, 3A( ( ICOL1-2 )*LDA+IROW1+1 ) = ZERO, 4A( ( ICOL1-2 )*LDA+IROW1+2 ) = ZERO, 5A( ( ICOL1-3 )*LDA+IROW1-1 ) = ZERO} |
| H10 | <--- | ICOL1H10 = A( ( ICOL1-3 )*LDA+IROW1-1 ), AH10 = A( ( ICOL1-3 )*LDA+IROW1-1 ), IROW1H10 = A( ( ICOL1-3 )*LDA+IROW1-1 ) |
| H11 | <--- | ICOL1H11 = A( ( ICOL1-3 )*LDA+IROW1-2 ), AH11 = A( ( ICOL1-3 )*LDA+IROW1-2 ), IROW1H11 = A( ( ICOL1-3 )*LDA+IROW1-2 ) |
| H22 | <--- | ICOL1H22 = A( ( ICOL1-2 )*LDA+IROW1-1 ), AH22 = A( ( ICOL1-2 )*LDA+IROW1-1 ), IROW1H22 = A( ( ICOL1-2 )*LDA+IROW1-1 ) |
| ICOL1 | <--- | ICOL1ICOL1 = ICOL1 + 1{2ICOL1 = ( ICOL1-1 )*LDZ, 3ICOL1 = ( ICOL1-1 )*LDZ, 4ICOL1 = ICOL1 + 1, 5ICOL1 = ( ICOL1-1 )*LDZ, 6ICOL1 = ( ICOL1-1 )*LDZ, 7ICOL1 = ICOL1 + 1, 8ICOL1 = ICOL1 + 1, 9ICOL1 = ICOL1 + 1}, ISTARTICOL1 = KCOL( KI ) + K - ISTART{2ICOL1 = KCOL( KI ) + K - ISTART, 3ICOL1 = KCOL( KI ) + K - ISTART, 4ICOL1 = KCOL( KI ) + ISTOP - ISTART}, ISTOPICOL1 = KCOL( KI ) + ISTOP - ISTART, KICOL1 = KCOL( KI ) + K - ISTART{2ICOL1 = KCOL( KI ) + K - ISTART, 3ICOL1 = KCOL( KI ) + K - ISTART}, KCOLICOL1 = KCOL( KI ) + K - ISTART{2ICOL1 = KCOL( KI ), 3ICOL1 = KCOL( KI ) + K - ISTART, 4ICOL1 = KCOL( KI ), 5ICOL1 = KCOL( KI ) + K - ISTART, 6ICOL1 = KCOL( KI ), 7ICOL1 = KCOL( KI ), 8ICOL1 = KCOL( KI ), 9ICOL1 = KCOL( KI ), 10ICOL1 = KCOL( KI ) + ISTOP - ISTART}, KIICOL1 = KCOL( KI ) + K - ISTART{2ICOL1 = KCOL( KI ), 3ICOL1 = KCOL( KI ) + K - ISTART, 4ICOL1 = KCOL( KI ), 5ICOL1 = KCOL( KI ) + K - ISTART, 6ICOL1 = KCOL( KI ), 7ICOL1 = KCOL( KI ), 8ICOL1 = KCOL( KI ), 9ICOL1 = KCOL( KI ), 10ICOL1 = KCOL( KI ) + ISTOP - ISTART} |
| ICOL2 | <--- | ICOL2ICOL2 = ICOL2 + 1{2ICOL2 = ICOL2 + 1, 3ICOL2 = ICOL2 + 1}, ISTARTICOL2 = KP2COL( KI ) + K - ISTART{2ICOL2 = KP2COL( KI ) + K - ISTART, 3ICOL2 = KP2COL( KI ) + K - ISTART}, KICOL2 = KP2COL( KI ) + K - ISTART{2ICOL2 = KP2COL( KI ) + K - ISTART, 3ICOL2 = KP2COL( KI ) + K - ISTART}, KIICOL2 = KP2COL( KI ) + K - ISTART{2ICOL2 = KP2COL( KI ), 3ICOL2 = KP2COL( KI ) + K - ISTART, 4ICOL2 = KP2COL( KI ), 5ICOL2 = KP2COL( KI ) + K - ISTART, 6ICOL2 = KP2COL( KI )}, KP2COLICOL2 = KP2COL( KI ) + K - ISTART{2ICOL2 = KP2COL( KI ), 3ICOL2 = KP2COL( KI ) + K - ISTART, 4ICOL2 = KP2COL( KI ), 5ICOL2 = KP2COL( KI ) + K - ISTART, 6ICOL2 = KP2COL( KI )} |
| ICURCOL | <--- | ICURCOLICURCOL( KI ) = MOD( ICURCOL( KI )+1, NPCOL ), KIICURCOL( KI ) = MOD( ICURCOL( KI )+1, NPCOL ) |
| ICURROW | <--- | ICURROWICURROW( KI ) = MOD( ICURROW( KI )+1, NPROW ), KIICURROW( KI ) = MOD( ICURROW( KI )+1, NPROW ) |
| II | <--- | IROW1II = ICBUF - IROW1 + 1{2II = ICBUF + IROW2 - 2*IROW1 + 2, 3II = IZBUF - IROW1 + 1, 4II = IZBUF + IROW2 - 2*IROW1 + 2, 5II = ICBUF - IROW1 + 1, 6II = ICBUF + IROW2 - 2*IROW1 + 2, 7II = IZBUF - IROW1 + 1, 8II = IZBUF + IROW2 - 2*IROW1 + 2}, IROW2II = ICBUF + IROW2 - 2*IROW1 + 2{2II = IZBUF + IROW2 - 2*IROW1 + 2, 3II = ICBUF + IROW2 - 2*IROW1 + 2, 4II = IZBUF + IROW2 - 2*IROW1 + 2}, KIII = KROW( KI ), KROWII = KROW( KI ) |
| INFO | <--- | IINFO = I |
| IROW1 | <--- | IIROW1 = MIN( K2( KI )+1, I-1 ) + 1, IROW1IROW1 = IROW1 + 1{2IROW1 = IROW1 + 1, 3IROW1 = IROW1 + 1, 4IROW1 = IROW1 + 1, 5IROW1 = IROW1 + 1}, ITMP2IROW1 = ITMP2 + 1, K2IROW1 = MIN( K2( KI )+1, I-1 ) + 1, KIIROW1 = KROW( KI ){2IROW1 = KROW( KI ), 3IROW1 = MIN( K2( KI )+1, I-1 ) + 1, 4IROW1 = KROW( KI ), 5IROW1 = KROW( KI ), 6IROW1 = KROW( KI )}, KROWIROW1 = KROW( KI ){2IROW1 = KROW( KI ), 3IROW1 = KROW( KI ), 4IROW1 = KROW( KI ), 5IROW1 = KROW( KI )} |
| IROW2 | <--- | IIROW2 = ITMP2 + MIN( K+3, I ) - ITMP1{2IROW2 = NUMROC( MIN( K+3, I ), HBL, MYROW,}, IROW1IROW2 = IROW1 - 1{2IROW2 = IROW1 - 1}, IROW2IROW2 = IROW2 + 1{2IROW2 = IROW2 + 1, 3IROW2 = IROW2 + 1}, ITMP1IROW2 = NUMROC( ITMP1, HBL, MYROW, IAFIRST, NPROW ){2IROW2 = NUMROC( ITMP1, HBL, MYROW, IAFIRST, NPROW ), 3IROW2 = NUMROC( ITMP1, HBL, MYROW, IAFIRST, NPROW ), 4IROW2 = NUMROC( ITMP1, HBL, MYROW, IAFIRST, NPROW ), 5IROW2 = ITMP2 + MIN( K+3, I ) - ITMP1}, ITMP2IROW2 = ITMP2 + MIN( K+3, I ) - ITMP1, KIROW2 = ITMP2 + MIN( K+3, I ) - ITMP1{2IROW2 = NUMROC( MIN( K+3, I ), HBL, MYROW,}, KIIROW2 = KP2ROW( KI ){2IROW2 = KP2ROW( KI ), 3IROW2 = KP2ROW( KI )}, KP2ROWIROW2 = KP2ROW( KI ){2IROW2 = KP2ROW( KI ), 3IROW2 = KP2ROW( KI )} |
| ISTART | <--- | K1ISTART = MAX( K1( KI ), M ){2ISTART = MAX( K1( KI ), M ), 3ISTART = MAX( K1( KI ), M ), 4ISTART = MAX( K1( KI ), M ), 5ISTART = MAX( K1( KI ), M ), 6ISTART = MAX( K1( KI ), M ), 7ISTART = MAX( K1( KI ), M ), 8ISTART = MAX( K1( KI ), M ), 9ISTART = MAX( K1( KI ), M ), 10ISTART = MAX( K1( KI ), M ), 11ISTART = MAX( K1( KI ), M ), 12ISTART = MAX( K1( KI ), M )}, KIISTART = MAX( K1( KI ), M ){2ISTART = MAX( K1( KI ), M ), 3ISTART = MAX( K1( KI ), M ), 4ISTART = MAX( K1( KI ), M ), 5ISTART = MAX( K1( KI ), M ), 6ISTART = MAX( K1( KI ), M ), 7ISTART = MAX( K1( KI ), M ), 8ISTART = MAX( K1( KI ), M ), 9ISTART = MAX( K1( KI ), M ), 10ISTART = MAX( K1( KI ), M ), 11ISTART = MAX( K1( KI ), M ), 12ISTART = MAX( K1( KI ), M )} |
| ISTOP | <--- | IISTOP = MIN( K2( KI ), I-1 ){2ISTOP = MIN( K2( KI ), I-1 ), 3ISTOP = MIN( K2( KI ), I-1 ), 4ISTOP = MIN( K2( KI ), I-1 ), 5ISTOP = MIN( K1( KI )+ROTN-MOD( K1( KI ), ROTN ), I-2 ), 6ISTOP = MIN( K2( KI ), I-1 ), 7ISTOP = MIN( K2( KI ), I-1 ), 8ISTOP = MIN( K2( KI ), I-1 ), 9ISTOP = MIN( K2( KI ), I-1 ), 10ISTOP = MIN( K2( KI ), I-1 ), 11ISTOP = MIN( K2( KI ), I-1 ), 12ISTOP = MIN( K2( KI ), I-1 ), 13ISTOP = MIN( K2( KI ), I-1 )}, ISTOPISTOP = MIN( ISTOP, K1( KI )+HBL-3-{2ISTOP = MIN( ISTOP, I2-2 ), 3ISTOP = MAX( ISTOP, K1( KI ) ), 4ISTOP = ISTOP + 1}, K1ISTOP = MIN( K1( KI )+ROTN-MOD( K1( KI ), ROTN ), I-2 ){2ISTOP = MIN( ISTOP, K1( KI )+HBL-3-, 3ISTOP = MAX( ISTOP, K1( KI ) )}, K2ISTOP = MIN( K2( KI ), I-1 ){2ISTOP = MIN( K2( KI ), I-1 ), 3ISTOP = MIN( K2( KI ), I-1 ), 4ISTOP = MIN( K2( KI ), I-1 ), 5ISTOP = MIN( K2( KI ), I-1 ), 6ISTOP = MIN( K2( KI ), I-1 ), 7ISTOP = MIN( K2( KI ), I-1 ), 8ISTOP = MIN( K2( KI ), I-1 ), 9ISTOP = MIN( K2( KI ), I-1 ), 10ISTOP = MIN( K2( KI ), I-1 ), 11ISTOP = MIN( K2( KI ), I-1 ), 12ISTOP = MIN( K2( KI ), I-1 )}, KIISTOP = MIN( K2( KI ), I-1 ){2ISTOP = MIN( K2( KI ), I-1 ), 3ISTOP = MIN( K2( KI ), I-1 ), 4ISTOP = MIN( K2( KI ), I-1 ), 5ISTOP = MIN( K1( KI )+ROTN-MOD( K1( KI ), ROTN ), I-2 ), 6ISTOP = MIN( ISTOP, K1( KI )+HBL-3-, 7ISTOP = MAX( ISTOP, K1( KI ) ), 8ISTOP = MIN( K2( KI ), I-1 ), 9ISTOP = MIN( K2( KI ), I-1 ), 10ISTOP = MIN( K2( KI ), I-1 ), 11ISTOP = MIN( K2( KI ), I-1 ), 12ISTOP = MIN( K2( KI ), I-1 ), 13ISTOP = MIN( K2( KI ), I-1 ), 14ISTOP = MIN( K2( KI ), I-1 ), 15ISTOP = MIN( K2( KI ), I-1 )} |
| ITMP1 | <--- | IITMP1 = MIN( ISTART+1, I ) - 1{2ITMP1 = MIN( K+3, I ), 3ITMP1 = MIN( ISTART+1, I ) - 1, 4ITMP1 = MIN( K+3, I ), 5ITMP1 = MIN( ISTART+1, I ) - 1, 6ITMP1 = MIN( K+3, I ), 7ITMP1 = MIN( K2( KI )+1, I-1 ) + 1, 8ITMP1 = MIN( K2( KI )+1, I-1 ) + 1, 9ITMP1 = MIN( K2( KI )+1, I-1 ) + 1, 10ITMP1 = MIN( K2( KI )+1, I-1 ) + 1, 11ITMP1 = MIN( K2( KI )+1, I-1 ) + 1, 12ITMP1 = MIN( K2( KI )+1, I-1 ) + 1, 13ITMP1 = MIN( ISTART+1, I ) - 1, 14ITMP1 = MIN( K+3, I )}, ICURROWITMP1 = ICURROW( KI ){2ITMP1 = ICURROW( KI )}, ISTARTITMP1 = MIN( ISTART+1, I ) - 1{2ITMP1 = MIN( ISTART+1, I ) - 1, 3ITMP1 = MIN( ISTART+1, I ) - 1, 4ITMP1 = KCOL( KI ) + K - ISTART, 5ITMP1 = MIN( ISTART+1, I ) - 1}, ITMP1ITMP1 = ITMP1 - 1{2ITMP1 = ( ITMP1-1 )*LDZ, 3ITMP1 = ( ITMP1-1 )*LDZ, 4ITMP1 = ( ITMP1-1 )*LDZ}, KITMP1 = MIN( K+3, I ){2ITMP1 = MAX( I1, K-1 ) - 1, 3ITMP1 = MAX( I1, K-2 ) - 1, 4ITMP1 = MIN( K+3, I ), 5ITMP1 = MAX( I1, K-1 ) - 1, 6ITMP1 = MAX( I1, K-2 ) - 1, 7ITMP1 = MIN( K+3, I ), 8ITMP1 = MAX( I1, K-1 ) - 1, 9ITMP1 = MAX( I1, K-2 ) - 1, 10ITMP1 = NUMROC( K+1, HBL, MYROW, IAFIRST, NPROW ), 11ITMP1 = KCOL( KI ) + K - ISTART, 12ITMP1 = MIN( K+4, I2 ) + 1, 13ITMP1 = MIN( K+3, I2 ) + 1, 14ITMP1 = MIN( K+4, I2 ) + 1, 15ITMP1 = MIN( K+3, I2 ) + 1, 16ITMP1 = MIN( K+4, I2 ) + 1, 17ITMP1 = MIN( K+3, I2 ) + 1, 18ITMP1 = MIN( K+3, I ), 19ITMP1 = MAX( I1, K-1 ) - 1, 20ITMP1 = MAX( I1, K-2 ) - 1}, K2ITMP1 = MIN( K2( KI )+1, I-1 ) + 1{2ITMP1 = MIN( K2( KI )+1, I-1 ) + 1, 3ITMP1 = MIN( K2( KI )+1, I-1 ) + 1, 4ITMP1 = MIN( K2( KI )+1, I-1 ) + 1, 5ITMP1 = MIN( K2( KI )+1, I-1 ) + 1, 6ITMP1 = MIN( K2( KI )+1, I-1 ) + 1}, KCOLITMP1 = KCOL( KI ){2ITMP1 = KCOL( KI ), 3ITMP1 = KCOL( KI ) + K - ISTART, 4ITMP1 = KCOL( KI ), 5ITMP1 = KCOL( KI )}, KIITMP1 = KCOL( KI ){2ITMP1 = KCOL( KI ), 3ITMP1 = KCOL( KI ) + K - ISTART, 4ITMP1 = KCOL( KI ), 5ITMP1 = KCOL( KI ), 6ITMP1 = ICURROW( KI ), 7ITMP1 = ICURROW( KI ), 8ITMP1 = MIN( K2( KI )+1, I-1 ) + 1, 9ITMP1 = MIN( K2( KI )+1, I-1 ) + 1, 10ITMP1 = MIN( K2( KI )+1, I-1 ) + 1, 11ITMP1 = MIN( K2( KI )+1, I-1 ) + 1, 12ITMP1 = MIN( K2( KI )+1, I-1 ) + 1, 13ITMP1 = MIN( K2( KI )+1, I-1 ) + 1} |
| ITMP2 | <--- | ICURCOLITMP2 = ICURCOL( KI ){2ITMP2 = ICURCOL( KI )}, IROW2ITMP2 = IROW2, KITMP2 = NUMROC( K+1, HBL, MYCOL, JAFIRST,{2ITMP2 = NUMROC( K+1, HBL, MYCOL, JAFIRST,}, KIITMP2 = ICURCOL( KI ){2ITMP2 = ICURCOL( KI )} |
| ITN | <--- | ITNITN = ITN - ITS |
| J | <--- | IDO 90 J = ( ICOL1-1 )*LDA + IROW1,, ICOL1DO 90 J = ( ICOL1-1 )*LDA + IROW1,{2DO 190 J = ICOL1, ICOL2, 3DO 200 J = ICOL1, ICOL2, 4DO 230 J = ICOL1, ICOL2, 5DO 240 J = ICOL1, ICOL2}, ICOL2DO 190 J = ICOL1, ICOL2{2DO 200 J = ICOL1, ICOL2, 3DO 230 J = ICOL1, ICOL2, 4DO 240 J = ICOL1, ICOL2}, IROW1DO 310 J = IROW1, IROW2{2DO 320 J = IROW1, IROW2, 3DO 330 J = IROW1, IROW2, 4DO 340 J = IROW1, IROW2, 5DO 370 J = IROW1, IROW2, 6DO 380 J = IROW1, IROW2, 7DO 390 J = IROW1, IROW2, 8DO 400 J = IROW1, IROW2, 9DO 90 J = ( ICOL1-1 )*LDA + IROW1,, 10DO 100 J = IROW1 + 1, IROW1 + 3}, IROW2DO 310 J = IROW1, IROW2{2DO 320 J = IROW1, IROW2, 3DO 330 J = IROW1, IROW2, 4DO 340 J = IROW1, IROW2, 5DO 370 J = IROW1, IROW2, 6DO 380 J = IROW1, IROW2, 7DO 390 J = IROW1, IROW2, 8DO 400 J = IROW1, IROW2}, KDO 90 J = ( ICOL1-1 )*LDA + IROW1,, K2DO 90 J = ( ICOL1-1 )*LDA + IROW1,, KIDO 90 J = ( ICOL1-1 )*LDA + IROW1,, LIHIHDO 460 J = ( LILOH-1 )*LDA,{2DO 470 J = LILOH, LIHIH, 3DO 480 J = LILOH, LIHIH, 4DO 490 J = LILOH, LIHIH} |
| JBLK | <--- | IJBLK = I - L + 1 |
| JJ | <--- | IROW1JJ = ICBUF + IROW2 - 2*IROW1 + 2{2JJ = IZBUF + IROW2 - 2*IROW1 + 2, 3JJ = ICBUF + IROW2 - 2*IROW1 + 2, 4JJ = IZBUF + IROW2 - 2*IROW1 + 2}, IROW2JJ = ICBUF + IROW2 - 2*IROW1 + 2{2JJ = IZBUF + IROW2 - 2*IROW1 + 2, 3JJ = ICBUF + IROW2 - 2*IROW1 + 2, 4JJ = IZBUF + IROW2 - 2*IROW1 + 2} |
| K | <--- | IDO 560 K = L, I, ISTARTDO 350 K = ISTART, ISTOP{2DO 410 K = ISTART, ISTOP, 3DO 430 K = ISTART, ISTOP, 4DO 520 K = ISTART, ISTOP, 5DO 110 K = ISTART, ISTOP, 6DO 150 K = ISTART, ISTOP, 7K = ISTART, 8DO 210 K = ISTART, ISTOP, 9DO 250 K = ISTART, ISTOP, 10DO 270 K = ISTART, ISTOP, 11K = ISTART}, ISTOPDO 350 K = ISTART, ISTOP{2DO 410 K = ISTART, ISTOP, 3DO 430 K = ISTART, ISTOP, 4DO 520 K = ISTART, ISTOP, 5DO 110 K = ISTART, ISTOP, 6DO 150 K = ISTART, ISTOP, 7DO 210 K = ISTART, ISTOP, 8DO 250 K = ISTART, ISTOP, 9DO 270 K = ISTART, ISTOP, 10K = ISTOP} |
| K1 | <--- | K2K1( KI ) = K2( KI ) + 1, KIK1( KI ) = K2( KI ) + 1 |
| K2 | <--- | ISTOPK2( KI ) = ISTOP |
| KCOL | <--- | K1KCOL( KI ) = KCOL( KI ) + K2( KI ) - K1( KI ) + 1{2KCOL( KI ) = KCOL( KI ) + K2( KI ) - K1( KI ) + 1}, K2KCOL( KI ) = KCOL( KI ) + K2( KI ) - K1( KI ) + 1{2KCOL( KI ) = KCOL( KI ) + K2( KI ) - K1( KI ) + 1}, KCOLKCOL( KI ) = KCOL( KI ) + K2( KI ) - K1( KI ) + 1{2KCOL( KI ) = KCOL( KI ) + K2( KI ) - K1( KI ) + 1}, KIKCOL( KI ) = KCOL( KI ) + K2( KI ) - K1( KI ) + 1{2KCOL( KI ) = KCOL( KI ) + K2( KI ) - K1( KI ) + 1} |
| KP2COL | <--- | K1KP2COL( KI ) = KP2COL( KI ) + K2( KI ) - K1( KI ) + 1{2KP2COL( KI ) = KP2COL( KI ) + K2( KI ) - K1( KI ) + 1}, K2KP2COL( KI ) = KP2COL( KI ) + K2( KI ) - K1( KI ) + 1{2KP2COL( KI ) = KP2COL( KI ) + K2( KI ) - K1( KI ) + 1, 3KP2COL( KI ) = NUMROC( K2( KI )+3, HBL, MYCOL,}, KIKP2COL( KI ) = KP2COL( KI ) + K2( KI ) - K1( KI ) + 1{2KP2COL( KI ) = KP2COL( KI ) + K2( KI ) - K1( KI ) + 1, 3KP2COL( KI ) = NUMROC( K2( KI )+3, HBL, MYCOL,}, KP2COLKP2COL( KI ) = KP2COL( KI ) + K2( KI ) - K1( KI ) + 1{2KP2COL( KI ) = KP2COL( KI ) + K2( KI ) - K1( KI ) + 1} |
| KP2ROW | <--- | K1KP2ROW( KI ) = KP2ROW( KI ) + K2( KI ) - K1( KI ) + 1{2KP2ROW( KI ) = KP2ROW( KI ) + K2( KI ) - K1( KI ) + 1}, K2KP2ROW( KI ) = KP2ROW( KI ) + K2( KI ) - K1( KI ) + 1{2KP2ROW( KI ) = KP2ROW( KI ) + K2( KI ) - K1( KI ) + 1, 3KP2ROW( KI ) = NUMROC( K2( KI )+3, HBL, MYROW,}, KIKP2ROW( KI ) = KP2ROW( KI ) + K2( KI ) - K1( KI ) + 1{2KP2ROW( KI ) = KP2ROW( KI ) + K2( KI ) - K1( KI ) + 1, 3KP2ROW( KI ) = NUMROC( K2( KI )+3, HBL, MYROW,}, KP2ROWKP2ROW( KI ) = KP2ROW( KI ) + K2( KI ) - K1( KI ) + 1{2KP2ROW( KI ) = KP2ROW( KI ) + K2( KI ) - K1( KI ) + 1} |
| KROW | <--- | K1KROW( KI ) = KROW( KI ) + K2( KI ) - K1( KI ) + 1{2KROW( KI ) = KROW( KI ) + K2( KI ) - K1( KI ) + 1}, K2KROW( KI ) = KROW( KI ) + K2( KI ) - K1( KI ) + 1{2KROW( KI ) = KROW( KI ) + K2( KI ) - K1( KI ) + 1}, KIKROW( KI ) = KROW( KI ) + K2( KI ) - K1( KI ) + 1{2KROW( KI ) = KROW( KI ) + K2( KI ) - K1( KI ) + 1}, KROWKROW( KI ) = KROW( KI ) + K2( KI ) - K1( KI ) + 1{2KROW( KI ) = KROW( KI ) + K2( KI ) - K1( KI ) + 1} |
| LIHIH | <--- | ILIHIH = NUMROC( I, HBL, MYROW, IAFIRST, NPROW ) |
| MODKM1 | <--- | ISTARTMODKM1 = MOD( ISTART-1, HBL ), KMODKM1 = MOD( K-1, HBL ) |
| NR | <--- | INR = MIN( 3, I-K+1 ){2NR = MIN( 3, I-K+1 ), 3NR = MIN( 3, I-K+1 ), 4NR = MIN( 3, I-K+1 ), 5NR = MIN( 3, I-ISTART+1 ), 6NR = MIN( 3, I-ISTART+1 ), 7NR = MIN( 3, I-K+1 ), 8NR = MIN( 3, I-K+1 ), 9NR = MIN( 3, I-K+1 ), 10NR = MIN( 3, I-K+1 ), 11NR = MIN( 3, I-K+1 )}, ISTARTNR = MIN( 3, I-ISTART+1 ){2NR = MIN( 3, I-ISTART+1 )}, KNR = MIN( 3, I-K+1 ){2NR = MIN( 3, I-K+1 ), 3NR = MIN( 3, I-K+1 ), 4NR = MIN( 3, I-K+1 ), 5NR = MIN( 3, I-K+1 ), 6NR = MIN( 3, I-K+1 ), 7NR = MIN( 3, I-K+1 ), 8NR = MIN( 3, I-K+1 ), 9NR = MIN( 3, I-K+1 )} |
| S | <--- | H11S = CABS1( H11 ) + CABS1( H22 ), H22S = CABS1( H11 ) + CABS1( H22 ) |
| SUM | <--- | ICOL1SUM = T1*WORK( II+J ) + T2*WORK( JJ+J ) +{2SUM = T1*WORK( J+II ) +, 3SUM = T1*WORK( II+J ) +, 4SUM = T1*WORK( II+J ) +, 5SUM = T1*WORK( II+J ) + T2*WORK( JJ+J ) +, 6SUM = T1*WORK( J+II ) +, 7SUM = T1*WORK( II+J ) +, 8SUM = T1*WORK( II+J ) +, 9SUM = T1*A( ( ICOL1-1 )*LDA+J ) +, 10SUM = DCONJG( T1 )*, 11SUM = DCONJG( T1 )*, 12SUM = DCONJG( T1 )*, 13SUM = DCONJG( T1 )*}, ASUM = T1*WORK( II+J ) + T2*WORK( JJ+J ) +{2SUM = T1*WORK( J+II ) +, 3SUM = T1*WORK( II+J ) + T2*WORK( JJ+J ) +, 4SUM = T1*WORK( J+II ) +, 5SUM = DCONJG( T1 )*A( ITMP1+J ) +, 6SUM = DCONJG( T1 )*, 7SUM = T1*A( ( ITMP1-1 )*LDA+J ) +, 8SUM = T1*WORK( ICBUF+J ) +, 9SUM = DCONJG( T1 )*A( J ) +, 10SUM = T1*A( ( ICOL1-1 )*LDA+J ) +, 11SUM = DCONJG( T1 )*, 12SUM = DCONJG( T1 )*, 13SUM = DCONJG( T1 )*, 14SUM = DCONJG( T1 )*}, IISUM = T1*WORK( II+J ) + T2*WORK( JJ+J ) +{2SUM = T1*WORK( J+II ) +, 3SUM = T1*WORK( II+J ) +, 4SUM = T1*WORK( II+J ) +, 5SUM = T1*WORK( II+J ) + T2*WORK( JJ+J ) +, 6SUM = T1*WORK( J+II ) +, 7SUM = T1*WORK( II+J ) +, 8SUM = T1*WORK( II+J ) +}, IROW1SUM = DCONJG( T1 )*{2SUM = DCONJG( T1 )*, 3SUM = DCONJG( T1 )*, 4SUM = DCONJG( T1 )*}, ITMP1SUM = DCONJG( T1 )*A( ITMP1+J ) +{2SUM = DCONJG( T1 )*, 3SUM = T1*A( ( ITMP1-1 )*LDA+J ) +, 4SUM = T1*WORK( ICBUF+J ) +}, JSUM = T1*WORK( II+J ) + T2*WORK( JJ+J ) +{2SUM = T1*WORK( J+II ) +, 3SUM = T1*WORK( II+J ) +, 4SUM = T1*WORK( II+J ) +, 5SUM = T1*WORK( II+J ) + T2*WORK( JJ+J ) +, 6SUM = T1*WORK( J+II ) +, 7SUM = T1*WORK( II+J ) +, 8SUM = T1*WORK( II+J ) +, 9SUM = DCONJG( T1 )*A( ITMP1+J ) +, 10SUM = DCONJG( T1 )*, 11SUM = T1*A( ( ITMP1-1 )*LDA+J ) +, 12SUM = T1*WORK( ICBUF+J ) +, 13SUM = T1*Z( J+ITMP1 ) +, 14SUM = DCONJG( T1 )*A( J ) +, 15SUM = T1*A( ( ICOL1-1 )*LDA+J ) +, 16SUM = DCONJG( T1 )*, 17SUM = DCONJG( T1 )*, 18SUM = DCONJG( T1 )*, 19SUM = DCONJG( T1 )*}, JJSUM = T1*WORK( II+J ) + T2*WORK( JJ+J ) +{2SUM = T1*WORK( II+J ) +, 3SUM = T1*WORK( II+J ) + T2*WORK( JJ+J ) +, 4SUM = T1*WORK( II+J ) +}, T1SUM = T1*WORK( II+J ) + T2*WORK( JJ+J ) +{2SUM = T1*WORK( J+II ) +, 3SUM = T1*WORK( II+J ) +, 4SUM = T1*WORK( II+J ) +, 5SUM = T1*WORK( II+J ) + T2*WORK( JJ+J ) +, 6SUM = T1*WORK( J+II ) +, 7SUM = T1*WORK( II+J ) +, 8SUM = T1*WORK( II+J ) +, 9SUM = DCONJG( T1 )*A( ITMP1+J ) +, 10SUM = DCONJG( T1 )*, 11SUM = T1*A( ( ITMP1-1 )*LDA+J ) +, 12SUM = T1*WORK( ICBUF+J ) +, 13SUM = T1*Z( J+ITMP1 ) +, 14SUM = DCONJG( T1 )*A( J ) +, 15SUM = T1*A( ( ICOL1-1 )*LDA+J ) +, 16SUM = DCONJG( T1 )*, 17SUM = DCONJG( T1 )*, 18SUM = DCONJG( T1 )*, 19SUM = DCONJG( T1 )*}, T2SUM = T1*WORK( II+J ) + T2*WORK( JJ+J ) +{2SUM = T1*WORK( J+II ) +, 3SUM = T1*WORK( II+J ) +, 4SUM = T1*WORK( II+J ) +, 5SUM = T1*WORK( II+J ) + T2*WORK( JJ+J ) +, 6SUM = T1*WORK( J+II ) +, 7SUM = T1*WORK( II+J ) +, 8SUM = T1*WORK( II+J ) +, 9SUM = DCONJG( T1 )*A( ITMP1+J ) +, 10SUM = DCONJG( T1 )*, 11SUM = T1*A( ( ITMP1-1 )*LDA+J ) +, 12SUM = T1*WORK( ICBUF+J ) +, 13SUM = DCONJG( T1 )*A( J ) +, 14SUM = T1*A( ( ICOL1-1 )*LDA+J ) +, 15SUM = DCONJG( T1 )*, 16SUM = DCONJG( T1 )*, 17SUM = DCONJG( T1 )*, 18SUM = DCONJG( T1 )*}, T3SUM = T1*WORK( II+J ) + T2*WORK( JJ+J ) +{2SUM = T1*WORK( J+II ) +, 3SUM = T1*WORK( II+J ) +, 4SUM = T1*WORK( II+J ) +, 5SUM = T1*WORK( II+J ) + T2*WORK( JJ+J ) +, 6SUM = T1*WORK( J+II ) +, 7SUM = T1*WORK( II+J ) +, 8SUM = T1*WORK( II+J ) +, 9SUM = DCONJG( T1 )*A( J ) +, 10SUM = T1*A( ( ICOL1-1 )*LDA+J ) +, 11SUM = DCONJG( T1 )*, 12SUM = DCONJG( T1 )*, 13SUM = DCONJG( T1 )*, 14SUM = DCONJG( T1 )*}, WORKSUM = T1*WORK( II+J ) + T2*WORK( JJ+J ) +{2SUM = T1*WORK( J+II ) +, 3SUM = T1*WORK( II+J ) +, 4SUM = T1*WORK( II+J ) +, 5SUM = T1*WORK( II+J ) + T2*WORK( JJ+J ) +, 6SUM = T1*WORK( J+II ) +, 7SUM = T1*WORK( II+J ) +, 8SUM = T1*WORK( II+J ) +, 9SUM = DCONJG( T1 )*, 10SUM = T1*WORK( ICBUF+J ) +, 11SUM = DCONJG( T1 )*, 12SUM = DCONJG( T1 )*, 13SUM = DCONJG( T1 )*, 14SUM = DCONJG( T1 )*}, ZSUM = T1*WORK( II+J ) +{2SUM = T1*WORK( II+J ) +, 3SUM = T1*WORK( II+J ) +, 4SUM = T1*WORK( II+J ) +, 5SUM = T1*Z( J+ITMP1 ) +} |
| T1 | <--- | KT1 = WORK( VECSIDX+( K-1 )*3+3 ){2T1 = WORK( VECSIDX+( K-1 )*3+3 ), 3T1 = WORK( VECSIDX+( K-1 )*3+3 ), 4T1 = WORK( VECSIDX+( K-1 )*3+3 ), 5T1 = WORK( VECSIDX+( K-1 )*3+3 ), 6T1 = WORK( VECSIDX+( K-1 )*3+3 ), 7T1 = WORK( VECSIDX+( K-1 )*3+3 ), 8T1 = WORK( VECSIDX+( K-1 )*3+3 ), 9T1 = WORK( VECSIDX+( K-1 )*3+3 )}, WORKT1 = WORK( VECSIDX+( K-1 )*3+3 ){2T1 = WORK( VECSIDX+( K-1 )*3+3 ), 3T1 = WORK( VECSIDX+( K-1 )*3+3 ), 4T1 = WORK( VECSIDX+( K-1 )*3+3 ), 5T1 = WORK( VECSIDX+( K-1 )*3+3 ), 6T1 = WORK( VECSIDX+( K-1 )*3+3 ), 7T1 = WORK( VECSIDX+( K-1 )*3+3 ), 8T1 = WORK( VECSIDX+( K-1 )*3+3 ), 9T1 = WORK( VECSIDX+( K-1 )*3+3 )} |
| T2 | <--- | T1T2 = T1*V2{2T2 = T1*V2, 3T2 = T1*V2, 4T2 = T1*V2, 5T2 = T1*V2, 6T2 = T1*V2, 7T2 = T1*V2, 8T2 = T1*V2, 9T2 = T1*V2, 10T2 = T1*V2, 11T2 = T1*V2, 12T2 = T1*V2, 13T2 = T1*V2, 14T2 = T1*V2, 15T2 = T1*V2, 16T2 = T1*V2, 17T2 = T1*V2}, V2T2 = T1*V2{2T2 = T1*V2, 3T2 = T1*V2, 4T2 = T1*V2, 5T2 = T1*V2, 6T2 = T1*V2, 7T2 = T1*V2, 8T2 = T1*V2, 9T2 = T1*V2, 10T2 = T1*V2, 11T2 = T1COPY*V2, 12T2 = T1*V2, 13T2 = T1*V2, 14T2 = T1*V2, 15T2 = T1*V2, 16T2 = T1*V2, 17T2 = T1*V2, 18T2 = T1*V2} |
| T3 | <--- | T1T3 = T1*V3{2T3 = T1*V3, 3T3 = T1*V3, 4T3 = T1*V3, 5T3 = T1*V3, 6T3 = T1*V3, 7T3 = T1*V3, 8T3 = T1*V3, 9T3 = T1*V3, 10T3 = T1*V3, 11T3 = T1*V3, 12T3 = T1*V3, 13T3 = T1*V3, 14T3 = T1*V3, 15T3 = T1*V3, 16T3 = T1*V3, 17T3 = T1*V3}, V3T3 = T1*V3{2T3 = T1*V3, 3T3 = T1*V3, 4T3 = T1*V3, 5T3 = T1*V3, 6T3 = T1*V3, 7T3 = T1*V3, 8T3 = T1*V3, 9T3 = T1*V3, 10T3 = T1*V3, 11T3 = T1*V3, 12T3 = T1*V3, 13T3 = T1*V3, 14T3 = T1*V3, 15T3 = T1*V3, 16T3 = T1*V3, 17T3 = T1*V3} |
| V2 | <--- | KV2 = WORK( VECSIDX+( K-1 )*3+1 ){2V2 = WORK( VECSIDX+( K-1 )*3+1 ), 3V2 = WORK( VECSIDX+( K-1 )*3+1 ), 4V2 = WORK( VECSIDX+( K-1 )*3+1 ), 5V2 = WORK( VECSIDX+( K-1 )*3+1 ), 6V2 = WORK( VECSIDX+( K-1 )*3+1 ), 7V2 = WORK( VECSIDX+( K-1 )*3+1 ), 8V2 = WORK( VECSIDX+( K-1 )*3+1 ), 9V2 = WORK( VECSIDX+( K-1 )*3+1 )}, VCOPYV2 = VCOPY( 2 ), WORKV2 = WORK( VECSIDX+( K-1 )*3+1 ){2V2 = WORK( VECSIDX+( K-1 )*3+1 ), 3V2 = WORK( VECSIDX+( K-1 )*3+1 ), 4V2 = WORK( VECSIDX+( K-1 )*3+1 ), 5V2 = WORK( VECSIDX+( K-1 )*3+1 ), 6V2 = WORK( VECSIDX+( K-1 )*3+1 ), 7V2 = WORK( VECSIDX+( K-1 )*3+1 ), 8V2 = WORK( VECSIDX+( K-1 )*3+1 ), 9V2 = WORK( VECSIDX+( K-1 )*3+1 )} |
| V3 | <--- | KV3 = WORK( VECSIDX+( K-1 )*3+2 ){2V3 = WORK( VECSIDX+( K-1 )*3+2 ), 3V3 = WORK( VECSIDX+( K-1 )*3+2 ), 4V3 = WORK( VECSIDX+( K-1 )*3+2 ), 5V3 = WORK( VECSIDX+( K-1 )*3+2 ), 6V3 = WORK( VECSIDX+( K-1 )*3+2 ), 7V3 = WORK( VECSIDX+( K-1 )*3+2 ), 8V3 = WORK( VECSIDX+( K-1 )*3+2 ), 9V3 = WORK( VECSIDX+( K-1 )*3+2 )}, VCOPYV3 = VCOPY( 3 ), WORKV3 = WORK( VECSIDX+( K-1 )*3+2 ){2V3 = WORK( VECSIDX+( K-1 )*3+2 ), 3V3 = WORK( VECSIDX+( K-1 )*3+2 ), 4V3 = WORK( VECSIDX+( K-1 )*3+2 ), 5V3 = WORK( VECSIDX+( K-1 )*3+2 ), 6V3 = WORK( VECSIDX+( K-1 )*3+2 ), 7V3 = WORK( VECSIDX+( K-1 )*3+2 ), 8V3 = WORK( VECSIDX+( K-1 )*3+2 ), 9V3 = WORK( VECSIDX+( K-1 )*3+2 )} |
| VCOPY | <--- | ICOL1VCOPY( 1 ) = A( ( ICOL1-2 )*LDA+IROW1 ){2VCOPY( 2 ) = A( ( ICOL1-2 )*LDA+IROW1+1 ), 3VCOPY( 3 ) = A( ( ICOL1-2 )*LDA+IROW1+2 )}, AVCOPY( 1 ) = A( ( ICOL1-2 )*LDA+IROW1 ){2VCOPY( 2 ) = A( ( ICOL1-2 )*LDA+IROW1+1 ), 3VCOPY( 3 ) = A( ( ICOL1-2 )*LDA+IROW1+2 )}, IROW1VCOPY( 1 ) = A( ( ICOL1-2 )*LDA+IROW1 ){2VCOPY( 2 ) = A( ( ICOL1-2 )*LDA+IROW1+1 ), 3VCOPY( 3 ) = A( ( ICOL1-2 )*LDA+IROW1+2 )}, KIVCOPY( 1 ) = SMALLA( 4, 3, KI ){2VCOPY( 2 ) = SMALLA( 5, 3, KI ), 3VCOPY( 3 ) = SMALLA( 6, 3, KI ), 4VCOPY( 1 ) = SMALLA( 4, 3, KI ), 5VCOPY( 2 ) = SMALLA( 5, 3, KI ), 6VCOPY( 3 ) = SMALLA( 6, 3, KI )} |
| W | <--- | AW( I ) = A( ( ICOL-1 )*LDA+IROW ), ZEROW( I ) = ZERO{2W( I-1 ) = ZERO, 3W( I ) = ZERO, 4W( K ) = ZERO} |
| WORK | <--- | ICOL1WORK( IRBUF+2*( J-ICOL1 )+1 ){2WORK( IRBUF+2*( J-ICOL1 )+2 ), 3WORK( IRBUF+2*( J-ICOL1 )+2 ), 4WORK( IRBUF+2*( J-ICOL1 )+1 ), 5WORK( IRBUF+2*( J-ICOL1 )+2 ), 6WORK( IRBUF+2*( J-ICOL1 )+2 )}, IIWORK( II+J ) = WORK( II+J ) - SUM{2WORK( J+II ) = WORK( J+II ) - SUM, 3WORK( II+J ) = WORK( II+J ) - SUM, 4WORK( II+J ) = WORK( II+J ) - SUM, 5WORK( II+J ) = WORK( II+J ) - SUM, 6WORK( J+II ) = WORK( J+II ) - SUM, 7WORK( II+J ) = WORK( II+J ) - SUM, 8WORK( II+J ) = WORK( II+J ) - SUM}, JWORK( II+J ) = WORK( II+J ) - SUM{2WORK( JJ+J ) = WORK( JJ+J ) -, 3WORK( J+II ) = WORK( J+II ) - SUM, 4WORK( II+J ) = WORK( II+J ) - SUM, 5WORK( JJ+J ) = WORK( JJ+J ) -, 6WORK( II+J ) = WORK( II+J ) - SUM, 7WORK( II+J ) = WORK( II+J ) - SUM, 8WORK( JJ+J ) = WORK( JJ+J ) -, 9WORK( J+II ) = WORK( J+II ) - SUM, 10WORK( II+J ) = WORK( II+J ) - SUM, 11WORK( JJ+J ) = WORK( JJ+J ) -, 12WORK( II+J ) = WORK( II+J ) - SUM, 13WORK( IRBUF+J-LILOH+1 ) = WORK( IRBUF+, 14WORK( ICBUF+J ) = WORK( ICBUF+J ) - SUM, 15WORK( IZBUF+J ) = WORK( IZBUF+J ) -, 16WORK( IRBUF+2*( J-ICOL1 )+1 ), 17WORK( IRBUF+2*( J-ICOL1 )+2 ), 18WORK( IRBUF+2*( J-ICOL1 )+2 ), 19WORK( IRBUF+2*( J-ICOL1 )+1 ), 20WORK( IRBUF+2*( J-ICOL1 )+2 ), 21WORK( IRBUF+2*( J-ICOL1 )+2 )}, JJWORK( JJ+J ) = WORK( JJ+J ) -{2WORK( JJ+J ) = WORK( JJ+J ) -, 3WORK( JJ+J ) = WORK( JJ+J ) -, 4WORK( JJ+J ) = WORK( JJ+J ) -}, SUMWORK( II+J ) = WORK( II+J ) - SUM{2WORK( JJ+J ) = WORK( JJ+J ) -, 3WORK( J+II ) = WORK( J+II ) - SUM, 4WORK( II+J ) = WORK( II+J ) - SUM, 5WORK( JJ+J ) = WORK( JJ+J ) -, 6WORK( II+J ) = WORK( II+J ) - SUM, 7WORK( II+J ) = WORK( II+J ) - SUM, 8WORK( JJ+J ) = WORK( JJ+J ) -, 9WORK( J+II ) = WORK( J+II ) - SUM, 10WORK( II+J ) = WORK( II+J ) - SUM, 11WORK( JJ+J ) = WORK( JJ+J ) -, 12WORK( II+J ) = WORK( II+J ) - SUM, 13WORK( IRBUF+J-LILOH+1 ) = WORK( IRBUF+, 14WORK( ICBUF+J ) = WORK( ICBUF+J ) - SUM, 15WORK( IZBUF+J ) = WORK( IZBUF+J ) -, 16WORK( IRBUF+2*( J-ICOL1 )+1 ), 17WORK( IRBUF+2*( J-ICOL1 )+2 ), 18WORK( IRBUF+2*( J-ICOL1 )+2 ), 19WORK( IRBUF+2*( J-ICOL1 )+1 ), 20WORK( IRBUF+2*( J-ICOL1 )+2 ), 21WORK( IRBUF+2*( J-ICOL1 )+2 )}, V2WORK( JJ+J ) = WORK( JJ+J ) -{2WORK( JJ+J ) = WORK( JJ+J ) -, 3WORK( JJ+J ) = WORK( JJ+J ) -, 4WORK( JJ+J ) = WORK( JJ+J ) -, 5WORK( IRBUF+2*( J-ICOL1 )+2 ), 6WORK( IRBUF+2*( J-ICOL1 )+2 )}, VCOPYWORK( VECSIDX+( K-1 )*3+1 ) = VCOPY( 2 ){2WORK( VECSIDX+( K-1 )*3+2 ) = VCOPY( 3 )}, WORKWORK( II+J ) = WORK( II+J ) - SUM{2WORK( JJ+J ) = WORK( JJ+J ) -, 3WORK( J+II ) = WORK( J+II ) - SUM, 4WORK( II+J ) = WORK( II+J ) - SUM, 5WORK( JJ+J ) = WORK( JJ+J ) -, 6WORK( II+J ) = WORK( II+J ) - SUM, 7WORK( II+J ) = WORK( II+J ) - SUM, 8WORK( JJ+J ) = WORK( JJ+J ) -, 9WORK( J+II ) = WORK( J+II ) - SUM, 10WORK( II+J ) = WORK( II+J ) - SUM, 11WORK( JJ+J ) = WORK( JJ+J ) -, 12WORK( II+J ) = WORK( II+J ) - SUM, 13WORK( IRBUF+J-LILOH+1 ) = WORK( IRBUF+, 14WORK( ICBUF+J ) = WORK( ICBUF+J ) - SUM, 15WORK( IZBUF+J ) = WORK( IZBUF+J ) -, 16WORK( IRBUF+2*( J-ICOL1 )+1 ), 17WORK( IRBUF+2*( J-ICOL1 )+2 ), 18WORK( IRBUF+2*( J-ICOL1 )+2 ), 19WORK( IRBUF+2*( J-ICOL1 )+1 ), 20WORK( IRBUF+2*( J-ICOL1 )+2 ), 21WORK( IRBUF+2*( J-ICOL1 )+2 )} |
| Z | <--- | ICOL1Z( ICOL1+J ) = Z( ICOL1+J ) -{2Z( J+ICOL1 ) = Z( J+ICOL1 ) -, 3Z( J+ICOL1+LDZ ) = Z( J+ICOL1+LDZ ) -, 4Z( ICOL1+J ) = Z( ICOL1+J ) -, 5Z( J+ICOL1 ) = Z( J+ICOL1 ) -, 6Z( J+ICOL1+LDZ ) = Z( J+ICOL1+LDZ ) -}, ITMP1Z( J+ITMP1 ) = Z( J+ITMP1 ) - SUM{2Z( J+ITMP1+LDZ ) = Z( J+ITMP1+LDZ ) -, 3Z( J+ITMP1 ) = Z( J+ITMP1 ) -}, JZ( ICOL1+J ) = Z( ICOL1+J ) -{2Z( J+ICOL1 ) = Z( J+ICOL1 ) -, 3Z( J+ICOL1+LDZ ) = Z( J+ICOL1+LDZ ) -, 4Z( ICOL1+J ) = Z( ICOL1+J ) -, 5Z( J+ICOL1 ) = Z( J+ICOL1 ) -, 6Z( J+ICOL1+LDZ ) = Z( J+ICOL1+LDZ ) -, 7Z( J+ITMP1 ) = Z( J+ITMP1 ) - SUM, 8Z( J+ITMP1+LDZ ) = Z( J+ITMP1+LDZ ) -, 9Z( J+ITMP1 ) = Z( J+ITMP1 ) -}, SUMZ( ICOL1+J ) = Z( ICOL1+J ) -{2Z( J+ICOL1 ) = Z( J+ICOL1 ) -, 3Z( J+ICOL1+LDZ ) = Z( J+ICOL1+LDZ ) -, 4Z( ICOL1+J ) = Z( ICOL1+J ) -, 5Z( J+ICOL1 ) = Z( J+ICOL1 ) -, 6Z( J+ICOL1+LDZ ) = Z( J+ICOL1+LDZ ) -, 7Z( J+ITMP1 ) = Z( J+ITMP1 ) - SUM, 8Z( J+ITMP1+LDZ ) = Z( J+ITMP1+LDZ ) -, 9Z( J+ITMP1 ) = Z( J+ITMP1 ) -}, V2Z( J+ICOL1 ) = Z( J+ICOL1 ) -{2Z( J+ICOL1 ) = Z( J+ICOL1 ) -, 3Z( J+ITMP1+LDZ ) = Z( J+ITMP1+LDZ ) -, 4Z( J+ITMP1 ) = Z( J+ITMP1 ) -}, V3Z( ICOL1+J ) = Z( ICOL1+J ) -{2Z( J+ICOL1+LDZ ) = Z( J+ICOL1+LDZ ) -, 3Z( ICOL1+J ) = Z( ICOL1+J ) -, 4Z( J+ICOL1+LDZ ) = Z( J+ICOL1+LDZ ) -}, ZZ( ICOL1+J ) = Z( ICOL1+J ) -{2Z( J+ICOL1 ) = Z( J+ICOL1 ) -, 3Z( J+ICOL1+LDZ ) = Z( J+ICOL1+LDZ ) -, 4Z( ICOL1+J ) = Z( ICOL1+J ) -, 5Z( J+ICOL1 ) = Z( J+ICOL1 ) -, 6Z( J+ICOL1+LDZ ) = Z( J+ICOL1+LDZ ) -, 7Z( J+ITMP1 ) = Z( J+ITMP1 ) - SUM, 8Z( J+ITMP1+LDZ ) = Z( J+ITMP1+LDZ ) -, 9Z( J+ITMP1 ) = Z( J+ITMP1 ) -} |
|
|
Analysis elements of the routine PZLAHQR() Put the mouse over each element to display detailed matching information
Assigned variables |
| | | BLOCK_CYCLIC_2D , CONST , CSRC_ , CTXT_ , DLEN_ , DT_ , H10 , H11 , H22 , I , IBLK , ICOL1 , ICOL2 , IHI , IHIZ , II , ILO , ILOZ , INFO , IROW1 , IROW2 , ISPEC , ISTART , ISTOP , ITMP1 , ITMP2 , ITN , J , JBLK , JJ , K , K2 , KI , LIHIH , LLD_ , LWORK , M_ , MB_ , MODKM1 , N , N_ , NB_ , NR , ONE , RONE , RSRC_ , S , SUM , T1 , T2 , T3 , V2 , V3 , VCOPY , WANTT , WANTZ , Z , ZERO |
|
Active variables |
| | | A , BLOCK_CYCLIC_2D , CONST , CSRC_ , CTXT_ , DESCA , DESCZ , DLEN_ , DT_ , H10 , H11 , H22 , I , IBLK , ICOL1 , ICOL2 , ICURCOL , ICURROW , IHI , IHIZ , II , ILO , ILOZ , ILWORK , INFO , IROW1 , IROW2 , ISPEC , ISTART , ISTOP , ITMP1 , ITMP2 , ITN , IWORK , J , JBLK , JJ , K , K1 , K2 , KCOL , KI , KP2COL , KP2ROW , KROW , LIHIH , LLD_ , LWORK , M_ , MB_ , MODKM1 , N , N_ , NB_ , NR , one , RONE , RSRC_ , s , SUM , T1 , T2 , T3 , V2 , V3 , VCOPY , W , WANTT , WANTZ , WORK , Z , ZERO |
|
Allocated variables [ statement : associated variable ] |
| | new | : with |
|
Accessed arrays [ array name : associated index ] |
| | A | : ( ICOL-1 )*LDA+IROW , ( ICOL1+1 )*LDA+J , ( ICOL1+1 )*LDA+J , ( ICOL1-1 )*LDA+IROW1 , ( ICOL1-1 )*LDA+IROW1 , ( ICOL1-1 )*LDA+IROW1 , ( ICOL1-1 )*LDA+IROW1 , ( ICOL1-1 )*LDA+J , ( ICOL1-1 )*LDA+J , ( ICOL1-1 )*LDA+J , ( ICOL1-1 )*LDA+J , ( ICOL1-1 )*LDA+J , ( ICOL1-1 )*LDA+J , ( ICOL1-1 )*LDA+J , ( ICOL1-1 )*LDA+J , ( ICOL1-1 )*LDA+J , ( ICOL1-1 )*LDA+J , ( ICOL1-2 )*LDA+IROW1 , ( ICOL1-2 )*LDA+IROW1 , ( ICOL1-2 )*LDA+IROW1 , ( ICOL1-2 )*LDA+IROW1 , ( ICOL1-2 )*LDA+IROW1 , ( ICOL1-2 )*LDA+IROW1 , ( ICOL1-2 )*LDA+IROW1 , ( ICOL1-2 )*LDA+IROW1 , ( ICOL1-2 )*LDA+IROW1+1 , ( ICOL1-2 )*LDA+IROW1+1 , ( ICOL1-2 )*LDA+IROW1+1 , ( ICOL1-2 )*LDA+IROW1+2 , ( ICOL1-2 )*LDA+IROW1+2 , ( ICOL1-2 )*LDA+IROW1+2 , ( ICOL1-2 )*LDA+IROW1-1 , ( ICOL1-3 )*LDA+IROW1-1 , ( ICOL1-3 )*LDA+IROW1-1 , ( ICOL1-3 )*LDA+IROW1-2 , ( ITMP1-1 )*LDA+J , ( ITMP1-1 )*LDA+J , ( ITMP1-1 )*LDA+J , ( ITMP1-1 )*LDA+J , ( ITMP1-1 )*LDA+J , ( ITMP1-1 )*LDA+LILOH , ( ITMP1-1 )*LDA+LILOH , ( J-1 )*LDA+IROW1 , ( J-1 )*LDA+IROW1 , ( J-1 )*LDA+IROW1 , ( J-1 )*LDA+IROW1 , ( J-1 )*LDA+IROW1+1 , ( J-1 )*LDA+IROW1+1 , ( J-1 )*LDA+IROW1+1 , ( J-1 )*LDA+IROW1+1 , ( J-1 )*LDA+ITMP1 , ( LILOH-1 )*LDA+ITMP1 , ( LILOH-1 )*LDA+ITMP1 , * , ICOL1*LDA+J , ICOL1*LDA+J , ICOL1*LDA+J , ICOL1*LDA+J , ICOL1*LDA+J , ICOL1*LDA+J , ILO,ILO-1 , ITMP1*LDA+J , ITMP1*LDA+J , ITMP1+1+J , ITMP1+1+J , ITMP1+J , ITMP1+J , J , J , J+1 , J+1 , J+2 , J+2 , K-1:K+4,K-1:K+4 , K-2:K+3,K-2:K+3 , LILOZ:LIHIZ,KCOL:KCOL+2 |
| | DESCA | : * , CSRC_ , CTXT_ , DTYPE_ , LLD_ , LLD_ , LLD_ , M_ , MB_ , MB_ , N_ , NB_ , NB_ , RSRC_ |
| | DESCZ | : * , LLD_ |
| | ICURCOL | : KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI |
| | ICURROW | : KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI |
| | IWORK | : * |
| | K1 | : * , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI |
| | K2 | : * , IBULGE , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI |
| | KCOL | : KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI |
| | KP2COL | : KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI |
| | KP2ROW | : KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI |
| | KROW | : KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI , KI |
| | VCOPY | : 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 3 |
| | W | : * , I , I , I , I , I-1 , I-1 , K , L |
| | WORK | : * , 1 , ICBUF+1 , ICBUF+1 , ICBUF+1 , ICBUF+1 , ICBUF+1 , ICBUF+1 , ICBUF+1 , ICBUF+1 , ICBUF+1 , ICBUF+1 , ICBUF+J , ICBUF+J , II+J , II+J , II+J , II+J , II+J , II+J , II+J , II+J , II+J , II+J , II+J , II+J , IRBUF+1 , IRBUF+1 , IRBUF+1 , IRBUF+1 , IRBUF+1 , IRBUF+1 , IRBUF+1 , IRBUF+1 , IRBUF+1 , IRBUF+1 , IRBUF+2*( J-ICOL1 )+1 , IRBUF+2*( J-ICOL1 )+1 , IRBUF+2*( J-ICOL1 )+1 , IRBUF+2*( J-ICOL1 )+1 , IRBUF+2*( J-ICOL1 )+1 , IRBUF+2*( J-ICOL1 )+1 , IRBUF+2*( J-ICOL1 )+2 , IRBUF+2*( J-ICOL1 )+2 , IRBUF+2*( J-ICOL1 )+2 , IRBUF+2*( J-ICOL1 )+2 , IRBUF+2*( J-ICOL1 )+2 , IRBUF+2*( J-ICOL1 )+2 , IRBUF+2*( J-ICOL1 )+2 , IRBUF+2*( J-ICOL1 )+2 , IRBUF+2*( J-ICOL1 )+2 , IRBUF+2*( J-ICOL1 )+2 , IRBUF+J-LILOH+1 , IRBUF+J-LILOH+1 , IZBUF+1 , IZBUF+1 , IZBUF+1 , IZBUF+1 , IZBUF+1 , IZBUF+1 , IZBUF+1 , IZBUF+1 , IZBUF+1 , IZBUF+1 , IZBUF+J , IZBUF+J , J+II , J+II , J+II , J+II , JJ+J , JJ+J , JJ+J , JJ+J , JJ+J , JJ+J , JJ+J , JJ+J , LWORK , VECSIDX+( ISTART-1 )*3+1 , VECSIDX+( ISTART-1 )*3+1 , VECSIDX+( ISTART-1 )*3+1 , VECSIDX+( ISTART-1 )*3+1 , VECSIDX+( K-1 )*3+1 , VECSIDX+( K-1 )*3+1 , VECSIDX+( K-1 )*3+1 , VECSIDX+( K-1 )*3+1 , VECSIDX+( K-1 )*3+1 , VECSIDX+( K-1 )*3+1 , VECSIDX+( K-1 )*3+1 , VECSIDX+( K-1 )*3+1 , VECSIDX+( K-1 )*3+1 , VECSIDX+( K-1 )*3+1 , VECSIDX+( K-1 )*3+2 , VECSIDX+( K-1 )*3+2 , VECSIDX+( K-1 )*3+2 , VECSIDX+( K-1 )*3+2 , VECSIDX+( K-1 )*3+2 , VECSIDX+( K-1 )*3+2 , VECSIDX+( K-1 )*3+2 , VECSIDX+( K-1 )*3+2 , VECSIDX+( K-1 )*3+2 , VECSIDX+( K-1 )*3+2 , VECSIDX+( K-1 )*3+3 , VECSIDX+( K-1 )*3+3 , VECSIDX+( K-1 )*3+3 , VECSIDX+( K-1 )*3+3 , VECSIDX+( K-1 )*3+3 , VECSIDX+( K-1 )*3+3 , VECSIDX+( K-1 )*3+3 , VECSIDX+( K-1 )*3+3 , VECSIDX+( K-1 )*3+3 , VECSIDX+( K-1 )*3+3 , VECSIDX+1 , VECSIDX+1 , VECSIDX+1 , VECSIDX+1 , VECSIDX+1 , VECSIDX+1 |
| | Z | : ( ICOL1-1 )*LDZ+IROW1 , ( ICOL1-2 )*LDZ+IROW1 , * , ICOL1+J , ICOL1+J , ICOL1+J , ICOL1+J , ILOZ:IHIZ,ILO:IHI , J+ICOL1 , J+ICOL1 , J+ICOL1 , J+ICOL1 , J+ICOL1+LDZ , J+ICOL1+LDZ , J+ICOL1+LDZ , J+ICOL1+LDZ , J+ITMP1 , J+ITMP1 , J+ITMP1 , J+ITMP1 , J+ITMP1+LDZ , J+ITMP1+LDZ , LILOZ:LIHIZ,KCOL:KCOL+2 , LILOZ+ITMP1 , LILOZ+ITMP1 |
|
Conditional statements [ statement : associated predicate ] |
| | do | : ( 110 K = ISTART , ISTOP ) , ( these transforms ) , ( some work so next step is ready... ) , ( 90 J = ( ICOL1 - 1 )*LDA + IROW1 , ) , ( 100 J = IROW1 + 1 , IROW1 + 3 ) , ( 130 KI = 1 , IBULGE ) , ( column transforms and finish work ) , ( 140 KI = 1 , IBULGE ) , ( make up work to have things in block fashion ) , ( 160 KI = 1 , IBULGE ) , ( 150 K = ISTART , ISTOP ) , ( some work so next step is ready... ) , ( 180 KI = 1 , IBULGE ) , ( 220 KI = 1 , IBULGE ) , ( 210 K = ISTART , ISTOP ) , ( 190 J = ICOL1 , ICOL2 ) , ( 200 J = ICOL1 , ICOL2 ) , ( 260 KI = 1 , IBULGE ) , ( 250 K = ISTART , ISTOP ) , ( 230 J = ICOL1 , ICOL2 ) , ( 240 J = ICOL1 , ICOL2 ) , ( 280 KI = 1 , IBULGE ) , ( 270 K = ISTART , ISTOP ) , ( 300 KI = 1 , IBULGE ) , ( from ITMP1 + 1 to MIN(K + 3 , I) ) , ( 360 KI = 1 , IBULGE ) , ( 350 K = ISTART , ISTOP ) , ( 310 J = IROW1 , IROW2 ) , ( 320 J = IROW1 , IROW2 ) , ( 330 J = IROW1 , IROW2 ) , ( 340 J = IROW1 , IROW2 ) , ( 420 KI = 1 , IBULGE ) , ( 410 K = ISTART , ISTOP ) , ( 370 J = IROW1 , IROW2 ) , ( 380 J = IROW1 , IROW2 ) , ( 390 J = IROW1 , IROW2 ) , ( 400 J = IROW1 , IROW2 ) , ( 440 KI = 1 , IBULGE ) , ( 430 K = ISTART , ISTOP ) , ( NR=2 work ) , ( 530 KI = 1 , IBULGE ) , ( 520 K = ISTART , ISTOP ) , ( 460 J = ( LILOH - 1 )*LDA , ) , ( 470 J = LILOH , LIHIH ) , ( 480 J = LILOH , LIHIH ) , ( 490 J = LILOH , LIHIH ) , ( 500 J = LILOZ , LIHIZ ) , ( 510 J = LILOZ , LIHIZ ) , ( 560 K = L , I ) |
| | for | : ( any 2D block cyclicly distributed array. ) , ( these quantities may be computed by : ) , ( the distributed matrix A. ) , ( the distributed matrix Z. ) , ( a future release. ) , ( a future release. ) , ( any bulge are ) , ( this release , this code has only been tested for ) , ( the general case. ) , ( your architecture , try tuning ZLAREF. ) , ( WANTZ = .TRUE. and may ) , ( WANTZ set to .FALSE. ) , ( this bulge ) |
| | if | : ( Z = I, and WANTT = WANTZ = .TRUE. , H gets replaced with Z'HZ , ) , ( K were distributed over the p processes of its ) , ( K were distributed over the q processes of ) , ( WANTZ). ) , ( WANTT is .TRUE.. ) , ( WANTT is .TRUE. , A is upper triangular in rows ) , ( WANTT is .FALSE. , the contents of ) , ( WANTT is .TRUE. , the ) , ( WANTZ is .TRUE.. ) , ( WANTZ is .TRUE. , on entry Z must contain the current ) , ( WANTZ is .FALSE. , Z is not referenced. ) , ( LWORK= - 1 , ) , ( INFO = i , ) , ( PZLACONSB indicates ) , ( possible) ) , ( elements ) , ( ISTART.GT.M ) , ( ISTART.LT.I - 1 ) , ( NPCOL.NE.1 ) , ( NPCOL.EQ.1 ) , ( M.GT.L ) , ( (( MYROW.EQ.ICURROW( KI ) ) .AND. ) , ( K.GT.M ) , ( (MOD( K - 1 , HBL ).EQ.0 ) ) , ( NR.EQ.3 ) , ( NPCOL.GT.1 .AND. ISTART.LE.M .AND. ) , ( K.GT.M ) , ( (MOD( K - 1 , HBL ).GT.0 ) ) , ( K.LT.I - 1 ) , ( it's possible ) , ( (( IROW1.GT.2 ) .AND. ( ICOL1.GT.2 ) .AND. ) , ( (CABS1( H10 ).LE.MAX( ULP*S , SMLNUM ) ) ) , ( M.GT.L ) , ( (MOD( K - 1 , HBL ).GT.0 ) ) , ( K.LT.ISTOP ) , ( (( MYROW.EQ.ICURROW( KI ) ) .AND. ( NPCOL.GT.1 ) .AND. ) , ( (MYCOL.NE.ICURCOL( KI ) ) ) , ( (( MYCOL.EQ.ICURCOL( KI ) ) .AND. ( NPROW.GT.1 ) .AND. ) , ( (MYROW.NE.ICURROW( KI ) ) ) , ( (( MYROW.EQ.ICURROW( KI ) ) .AND. ) , ( K.LT.ISTOP ) , ( (( NR.EQ.3 ) .AND. ( MOD( K - 1 , ) , ( (( MODKM1.GE.HBL - 2 ) .AND. ( K.LE.I - 1 ) ) ) , ( (( MODKM1.EQ.HBL - 2 ) .AND. ( K.LT.I - 1 ) ) ) , ( MODKM1.EQ.HBL - 1 ) , ( (( MYROW.NE.ICURROW( KI ) ) .AND. ) , ( (( ISTOP.GT.ISTART ) .AND. ) , ( (KROW( KI ).GT.KP2ROW( KI ) ) ) , ( (( MYROW.NE.ICURROW( KI ) ) .AND. ) , ( (( ISTART.EQ.ISTOP ) .OR. ) , ( (( NR.EQ.3 ) .AND. ( KROW( KI ).LE. ) , ( (( K.LT.ISTOP ) .AND. ) , ( (MOD( K - 1 , HBL ).LT.HBL - 2 ) ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 2 ) ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 1 ) ) , ( (( K.GT.ISTART ) .AND. ) , ( (DOWN.EQ.ICURROW( KI ) ) ) , ( (MYROW.EQ.ICURROW( KI ) ) ) , ( (( MOD( K - 1 , HBL ).LT.HBL - 2 ) .OR. ) , ( (( MOD( K - 1 , HBL ).EQ.HBL - 2 ) .AND. ) , ( IROW1.NE.IROW2 ) , ( (SKIP .AND. ( ISTART.EQ.ISTOP ) ) ) , ( SKIP ) , ( ISTART.EQ.ISTOP ) , ( (( MOD( K - 1 , HBL ).EQ.HBL - 1 ) .AND. ) , ( IROW1.EQ.IROW2 ) , ( ISTART.EQ.ISTOP ) , ( SKIP ) , ( SKIP ) , ( ISTART.EQ.ISTOP ) , ( SKIP ) , ( (KROW( KI ).GT.KP2ROW( KI ) ) ) , ( (( MYROW.NE.ICURROW( KI ) ) .AND. ) , ( (( ISTART.EQ.ISTOP ) .OR. ) , ( (( NR.EQ.3 ) .AND. ( KROW( KI ).LE. ) , ( (( K.LT.ISTOP ) .AND. ) , ( (MOD( K - 1 , HBL ).LT.HBL - 2 ) ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 2 ) ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 1 ) ) , ( (( K.GT.ISTART ) .AND. ) , ( (DOWN.EQ.ICURROW( KI ) ) ) , ( (MYROW.EQ.ICURROW( KI ) ) ) , ( (( MOD( K - 1 , HBL ).EQ.HBL - 2 ) .AND. ) , ( IROW1.EQ.IROW2 ) , ( ISTART.EQ.ISTOP ) , ( (( MOD( K - 1 , HBL ).EQ.HBL - 1 ) .AND. ) , ( IROW1.NE.IROW2 ) , ( ISTART.EQ.ISTOP ) , ( (KROW( KI ).GT.KP2ROW( KI ) ) ) , ( (( MYROW.NE.ICURROW( KI ) ) .AND. ) , ( (( ISTART.EQ.ISTOP ) .OR. ) , ( (( NR.EQ.3 ) .AND. ( KROW( KI ).LE. ) , ( (( K.LT.ISTOP ) .AND. ) , ( (MOD( K - 1 , HBL ).LT.HBL - 2 ) ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 2 ) ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 1 ) ) , ( (( K.GT.ISTART ) .AND. ) , ( (DOWN.EQ.ICURROW( KI ) ) ) , ( (MYROW.EQ.ICURROW( KI ) ) ) , ( (( MOD( K - 1 , HBL ).EQ.HBL - 2 ) .AND. ) , ( IROW1.NE.IROW2 ) , ( ISTART.EQ.ISTOP ) , ( (( MOD( K - 1 , HBL ).EQ.HBL - 1 ) .AND. ) , ( IROW1.EQ.IROW2 ) , ( (( MYCOL.NE.ICURCOL( KI ) ) .AND. ) , ( (( ( MOD( ISTART - 1 , HBL ).LT.HBL - 2 ) .OR. ( NPCOL.EQ. ) , ( (( K.LT.ISTOP ) .AND. ( MOD( K - 1 , ) , ( (MOD( K - 1 , HBL ).LT.HBL - 2 ) ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 2 ) ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 1 ) ) , ( IROW1.LE.IROW2 ) , ( (MOD( K - 1 , HBL ).LT.HBL - 2 ) ) , ( (MOD( K - 1 , HBL ).LT.HBL - 3 ) ) , ( (MOD( ( ITMP1 / HBL ) , NPROW ).EQ.MYROW ) ) , ( ITMP2.GT.0 ) , ( (KCOL( KI ).GT.KP2COL( KI ) ) ) , ( (( MYCOL.NE.ICURCOL( KI ) ) .AND. ) , ( (MOD( ISTART - 1 , HBL ).GE.HBL - 2 ) ) , ( (( NR.EQ.3 ) .AND. ( KCOL( KI ).LE.KP2COL( KI ) ) ) ) , ( (( K.LT.ISTOP ) .AND. ) , ( (MOD( K - 1 , HBL ).LT.HBL - 2 ) ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 2 ) ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 1 ) ) , ( (MOD( K - 1 , HBL ).LT.HBL - 2 ) ) , ( K.GT.ISTART ) , ( (RIGHT.EQ.ICURCOL( KI ) ) ) , ( (MYCOL.EQ.ICURCOL( KI ) ) ) , ( (( MOD( K - 1 , HBL ).EQ.HBL - 2 ) .AND. ) , ( ICOL1.NE.ICOL2 ) , ( (( ISTART.EQ.ISTOP ) .AND. SKIP ) ) , ( SKIP ) , ( ISTART.EQ.ISTOP ) , ( (( MOD( K - 1 , HBL ).EQ.HBL - 1 ) .AND. ) , ( ICOL1.EQ.ICOL2 ) , ( ISTART.EQ.ISTOP ) , ( SKIP ) , ( SKIP ) , ( ISTART.EQ.ISTOP ) , ( we want Z and we haven't already done any Z ) , ( (( WANTZ ) .AND. ( MOD( K - 1 , ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 2 ) ) , ( ICOL1.NE.ICOL2 ) , ( (( ISTART.EQ.ISTOP ) .AND. SKIP ) ) , ( SKIP ) , ( ISTART.EQ.ISTOP ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 1 ) ) , ( ICOL1.EQ.ICOL2 ) , ( ISTART.EQ.ISTOP ) , ( SKIP ) , ( SKIP ) , ( ISTART.EQ.ISTOP ) , ( SKIP ) , ( (KCOL( KI ).GT.KP2COL( KI ) ) ) , ( (( MYCOL.NE.ICURCOL( KI ) ) .AND. ) , ( (MOD( ISTART - 1 , HBL ).GE.HBL - 2 ) ) , ( (( NR.EQ.3 ) .AND. ( KCOL( KI ).LE.KP2COL( KI ) ) ) ) , ( (( K.LT.ISTOP ) .AND. ) , ( (MOD( K - 1 , HBL ).LT.HBL - 2 ) ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 2 ) ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 1 ) ) , ( (MOD( K - 1 , HBL ).LT.HBL - 2 ) ) , ( K.GT.ISTART ) , ( (RIGHT.EQ.ICURCOL( KI ) ) ) , ( (MYCOL.EQ.ICURCOL( KI ) ) ) , ( (( MOD( K - 1 , HBL ).EQ.HBL - 2 ) .AND. ) , ( ICOL1.EQ.ICOL2 ) , ( ISTART.EQ.ISTOP ) , ( (( MOD( K - 1 , HBL ).EQ.HBL - 1 ) .AND. ) , ( ICOL1.NE.ICOL2 ) , ( ISTART.EQ.ISTOP ) , ( we want Z and we haven't already done any Z ) , ( (( WANTZ ) .AND. ( MOD( K - 1 , ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 2 ) ) , ( ICOL1.EQ.ICOL2 ) , ( ISTART.EQ.ISTOP ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 1 ) ) , ( ICOL1.NE.ICOL2 ) , ( ISTART.EQ.ISTOP ) , ( (KCOL( KI ).GT.KP2COL( KI ) ) ) , ( (( MYCOL.NE.ICURCOL( KI ) ) .AND. ) , ( (MOD( ISTART - 1 , HBL ).GE.HBL - 2 ) ) , ( (( NR.EQ.3 ) .AND. ( KCOL( KI ).LE.KP2COL( KI ) ) ) ) , ( (( K.LT.ISTOP ) .AND. ) , ( (MOD( K - 1 , HBL ).LT.HBL - 2 ) ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 2 ) ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 1 ) ) , ( (MOD( K - 1 , HBL ).LT.HBL - 2 ) ) , ( K.GT.ISTART ) , ( (RIGHT.EQ.ICURCOL( KI ) ) ) , ( (MYCOL.EQ.ICURCOL( KI ) ) ) , ( (( MOD( K - 1 , HBL ).EQ.HBL - 2 ) .AND. ) , ( ICOL1.NE.ICOL2 ) , ( ISTART.EQ.ISTOP ) , ( (( MOD( K - 1 , HBL ).EQ.HBL - 1 ) .AND. ) , ( ICOL1.EQ.ICOL2 ) , ( we want Z and we haven't already done any Z ) , ( (( WANTZ ) .AND. ( MOD( K - 1 , ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 2 ) ) , ( ICOL1.NE.ICOL2 ) , ( ISTART.EQ.ISTOP ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 1 ) ) , ( ICOL1.EQ.ICOL2 ) , ( (MOD( ISTART - 1 , HBL ).GE.HBL - 2 ) ) , ( NR.EQ.2 ) , ( (ICURROW( KI ).EQ.MYROW ) ) , ( (ICURCOL( KI ).EQ.MYCOL ) ) , ( (ICURROW( KI ).EQ.MYROW ) ) , ( (( ISPEC.EQ.0 ) .OR. ( NPROW.EQ.1 ) .OR. ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 1 ) ) , ( (( MOD( K - 1 , HBL ).EQ.HBL - 1 ) .AND. ) , ( (ICURCOL( KI ).EQ.MYCOL ) ) , ( (( ISPEC.EQ.0 ) .OR. ( NPCOL.EQ.1 ) .OR. ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 1 ) ) , ( (( MOD( K - 1 , HBL ).EQ.HBL - 1 ) .AND. ) , ( WANTZ ) , ( (ICURCOL( KI ).EQ.MYCOL ) ) , ( (( ISPEC.EQ.0 ) .OR. ( NPCOL.EQ.1 ) .OR. ) , ( WE ACTUALLY OWN COLUMN K ) , ( (MOD( K - 1 , HBL ).EQ.HBL - 1 ) ) , ( (( MOD( K - 1 , HBL ).EQ.HBL - 1 ) .AND. ) , ( NPROW.EQ.1 ) , ( (( MOD( K1( KI ) - 1 , HBL ).LT.HBL - 2 ) .AND. ) , ( (( MOD( K2( KI ) , HBL ).LT.HBL - 2 ) .AND. ) , ( (( MOD( K1( KI ) - 1 , HBL ).GE.HBL - 2 ) .AND. ) , ( (( MOD( K2( KI ) , HBL ).GE.HBL - 2 ) .AND. ) , ( NPCOL.EQ.1 ) , ( (( MOD( K1( KI ) - 1 , HBL ).LT.HBL - 2 ) .AND. ) , ( (( MOD( K2( KI ) , HBL ).LT.HBL - 2 ) .AND. ) , ( (( MOD( K1( KI ) - 1 , HBL ).GE.HBL - 2 ) .AND. ) , ( (( MOD( K2( KI ) , HBL ).GE.HBL - 2 ) .AND. ) , ( (( MOD( K1( KI ) - 1 , HBL ).EQ.HBL - 2 ) .AND. ) , ( (K1( KI ).LE.ISTOP ) ) , ( (( MOD( K1( KI ) - 1 , HBL ).EQ.HBL - 2 ) .AND. ) , ( (K2( IBULGE ).LE.I - 1 ) ) , ( L.EQ.I ) , ( (( MYROW.EQ.ITMP1 ) .AND. ( MYCOL.EQ.ITMP2 ) ) ) , ( L.EQ.I - 1 ) , ( NODE.NE.0 ) , ( WANTT ) , ( I2.GT.I ) , ( WANTZ ) , ( JBLK.LE.2*IBLK ) , ( NODE.NE.0 ) |
| | until | : ( the next release. ) , ( all are started. To offset pipeline ) |
|
| List of variables | $ A( * ) BLOCK_CYCLIC_2D CONST CSRC_ CTXT_ DESCA( * )
| DESCZ( * ) DLEN_ DT_ H10 H11 H22 I IBLK
| ICOL1 ICOL2 ICURCOL ICURROW IHI IHIZ II ILO
| ILOZ ILWORK INFO IROW1 IROW2 ISPEC ISTART ISTOP
| ITMP1 ITMP2 ITN IWORK( * ) J JBLK JJ K
| K1 K2 KCOL KI KP2COL KP2ROW KROW LIHIH
| LLD_ LWORK M_ MB_ MODKM1 N N_ NB_
| NR ONE RONE RSRC_ S SUM T1 T2
| T3 V2 V3 VCOPY W( * ) WANTT WANTZ WORK( * )
| Z( * ) ZERO | | close
| |
$
A( * )
BLOCK_CYCLIC_2D
CONST
CSRC_
CTXT_
DESCA( * )
DESCZ( * )
DLEN_
DT_
H10
H11
H22
I
IBLK
ICOL1
ICOL2
ICURCOL
ICURROW
IHI
IHIZ
II
ILO
ILOZ
ILWORK
INFO
IROW1
IROW2
ISPEC
ISTART
ISTOP
ITMP1
ITMP2
ITN
IWORK( * )
J
JBLK
JJ
K
K1
K2
KCOL
KI
KP2COL
KP2ROW
KROW
LIHIH
LLD_
LWORK
M_
MB_
MODKM1
N
N_
NB_
NR
ONE
RONE
RSRC_
S
SUM
T1
T2
T3
V2
V3
VCOPY
W( * )
WANTT
WANTZ
WORK( * )
Z( * )
ZERO
622#516#621#619
| |