|
|
| |
| # lines: |
455 | | # code: |
455 | | # comment: | 0 | |
# blank: | 0 |
| # Variables: | 72 |
| # Callers: | 1 |
| # Callings: | 2 |
| # Words: | 205 |
| # Keywords: | 135 |
|
|
|
|
|
..
.. Array Arguments ..
..
Purpose
=======
PDLAED2 sorts the two sets of eigenvalues together into a single
sorted set. Then it tries to deflate the size of the problem.
There are two ways in which deflation can occur: when two or more
eigenvalues are close together or if there is a tiny entry in the
Z vector. For each such occurrence the order of the related secular
equation problem is reduced by one.
Arguments
=========
ICTXT (global input) INTEGER
The BLACS context handle, indicating the global context of
the operation on the matrix. The context itself is global.
K (output) INTEGER
The number of non-deflated eigenvalues, and the order of the
related secular equation. 0 <= K <=N.
N (input) INTEGER
The dimension of the symmetric tridiagonal matrix. N >= 0.
N1 (input) INTEGER
The location of the last eigenvalue in the leading sub-matrix.
min(1,N) < N1 < N.
NB (global input) INTEGER
The blocking factor used to distribute the columns of the
matrix. NB >= 1.
D (input/output) DOUBLE PRECISION array, dimension (N)
On entry, D contains the eigenvalues of the two submatrices to
be combined.
On exit, D contains the trailing (N-K) updated eigenvalues
(those which were deflated) sorted into increasing order.
DROW (global input) INTEGER
The process row over which the first row of the matrix D is
distributed. 0 <= DROW < NPROW.
DCOL (global input) INTEGER
The process column over which the first column of the
matrix D is distributed. 0 <= DCOL < NPCOL.
Q (input/output) DOUBLE PRECISION array, dimension (LDQ, N)
On entry, Q contains the eigenvectors of two submatrices in
the two square blocks with corners at (1,1), (N1,N1)
and (N1+1, N1+1), (N,N).
On exit, Q contains the trailing (N-K) updated eigenvectors
(those which were deflated) in its last N-K columns.
LDQ (input) INTEGER
The leading dimension of the array Q. LDQ >= max(1,NQ).
RHO (global input/output) DOUBLE PRECISION
On entry, the off-diagonal element associated with the rank-1
cut which originally split the two submatrices which are now
being recombined.
On exit, RHO has been modified to the value required by
PDLAED3.
Z (global input) DOUBLE PRECISION array, dimension (N)
On entry, Z contains the updating vector (the last
row of the first sub-eigenvector matrix and the first row of
the second sub-eigenvector matrix).
On exit, the contents of Z have been destroyed by the updating
process.
DLAMDA (global output) DOUBLE PRECISION array, dimension (N)
A copy of the first K eigenvalues which will be used by
SLAED3 to form the secular equation.
W (global output) DOUBLE PRECISION array, dimension (N)
The first k values of the final deflation-altered z-vector
which will be passed to SLAED3.
Q2 (output) DOUBLE PRECISION array, dimension (LDQ2, NQ)
A copy of the first K eigenvectors which will be used by
LDQ2 (input) INTEGER
The leading dimension of the array Q2.
QBUF (workspace) DOUBLE PRECISION array, dimension 3*N
CTOT (workspace) INTEGER array, dimension( NPCOL, 4)
PSM (workspace) INTEGER array, dimension( NPCOL, 4)
NPCOL (global input) INTEGER
The total number of columns over which the distributed
submatrix is distributed.
INDX (workspace) INTEGER array, dimension (N)
The permutation used to sort the contents of DLAMDA into
ascending order.
INDXC (output) INTEGER array, dimension (N)
The permutation used to arrange the columns of the deflated
Q matrix into three groups: the first group contains non-zero
elements only at and above N1, the second contains
non-zero elements only below N1, and the third is dense.
INDXP (workspace) INTEGER array, dimension (N)
The permutation used to place deflated values of D at the end
of the array. INDXP(1:K) points to the nondeflated D-values
and INDXP(K+1:N) points to the deflated eigenvalues.
INDCOL (workspace) INTEGER array, dimension (N)
COLTYP (workspace/output) INTEGER array, dimension (N)
During execution, a label which will indicate which of the
following types a column in the Q2 matrix is:
1 : non-zero in the upper half only;
2 : dense;
3 : non-zero in the lower half only;
4 : deflated.
NN (global output) INTEGER, the order of matrix U, (PDLAED1).
NN1 (global output) INTEGER, the order of matrix Q1, (PDLAED1).
NN2 (global output) INTEGER, the order of matrix Q2, (PDLAED1).
IB1 (global output) INTEGER, pointeur on Q1, (PDLAED1).
IB2 (global output) INTEGER, pointeur on Q2, (PDLAED1).
=====================================================================
.. Parameters ..
|
|
|
|
001 SUBROUTINE PDLAED2( ICTXT , K , N , N1 , NB , D , DROW , DCOL , Q , LDQ ,
002 $RHO , Z , W , DLAMDA , Q2 , LDQ2 , QBUF , CTOT , PSM ,
003 $NPCOL , INDX , INDXC , INDXP , INDCOL , COLTYP , NN ,
004 $NN1 , NN2 , IB1 , IB2 )
005
006 * -- ScaLAPACK auxiliary routine(version 1.7) --
007 * University of Tennessee , Knoxville , Oak Ridge National Laboratory ,
008 * and University of California , Berkeley.
009 * December 31 , 1998
010
011 * .. Scalar Arguments ..
012 INTEGER DCOL , DROW , IB1 , IB2 , ICTXT , K , LDQ , LDQ2 , N ,
013 $N1 , NB , NN , NN1 , NN2 , NPCOL
014 DOUBLE PRECISION RHO
015 DOUBLE PRECISION MONE , ZERO , ONE , TWO , EIGHT
016 PARAMETER( MONE = - 1.0D0 , ZERO = 0.0D0 , ONE = 1.0D0 ,
017 $TWO = 2.0D0 , EIGHT = 8.0D0 )
018 * ..
019 * .. Local Scalars ..
020 INTEGER COL , CT , I , IAM , IE1 , IE2 , IMAX , INFO , J , JJQ2 ,
021 $JJS , JMAX , JS , K2 , MYCOL , MYROW , N1P1 , N2 , NJ ,
022 $NJCOL , NJJ , NP , NPROCS , NPROW , PJ , PJCOL , PJJ
023 DOUBLE PRECISION C , EPS , S , T , TAU , TOL
024 * ..
025 * .. External Functions ..
026 INTEGER IDAMAX , INDXG2L , INDXL2G , NUMROC
027 DOUBLE PRECISION DLAPY2 , PDLAMCH
028 EXTERNAL IDAMAX , INDXG2L , INDXL2G , NUMROC , PDLAMCH ,
029 $DLAPY2
030 * ..
031 * .. External Subroutines ..
032 EXTERNAL BLACS_GRIDINFO , BLACS_PINFO , DCOPY , DGERV2D ,
033 $DGESD2D , DLAPST , DROT , DSCAL , INFOG1L
034 * ..
035 * .. Intrinsic Functions ..
036 INTRINSIC ABS , MAX , MIN , MOD , SQRT
037 * ..
038 * .. External Functions ..
039 * ..
040 * .. Local Arrays ..
041 INTEGER PTT( 4 )
042 * ..
043 * .. Executable Statements ..
044
045 * Quick return if possible
046
047 IF( N.EQ.0 )
047
048 $ RETURN
049
050 CALL BLACS_PINFO( IAM , NPROCS )
051 CALL BLACS_GRIDINFO( ICTXT , NPROW , NPCOL , MYROW , MYCOL )
052 NP = NUMROC( N , NB , MYROW , DROW , NPROW )
053
054 N2 = N - N1
055 N1P1 = N1 + 1
056
057 IF( RHO.LT.ZERO ) THEN
057
058 CALL DSCAL( N2 , MONE , Z( N1P1 ) , 1 )
059 END IF
060
061 * Normalize z so that norm(z) = 1. Since z is the concatenation of
062 * two normalized vectors , norm2(z) = sqrt(2).
063
064 T = ONE / SQRT( TWO )
065 CALL DSCAL( N , T , Z , 1 )
066
067 * RHO = ABS( norm(z)**2 * RHO )
068
069 RHO = ABS( TWO*RHO )
070
071 * Calculate the allowable deflation tolerance
072
073 IMAX = IDAMAX( N , Z , 1 )
074 JMAX = IDAMAX( N , D , 1 )
075 EPS = PDLAMCH( ICTXT , 'Epsilon' )
076 TOL = EIGHT*EPS*MAX( ABS( D( JMAX ) ) , ABS( Z( IMAX ) ) )
077
078 * If the rank - 1 modifier is small enough , no more needs to be done
079 * except to reorganize Q so that its columns correspond with the
080 * elements in D.
081
082 IF( RHO*ABS( Z( IMAX ) ).LE.TOL ) THEN
082
083 K = 0
084 GO TO 220
085 END IF
086
087 * If there are multiple eigenvalues then the problem deflates. Here
088 * the number of equal eigenvalues are found. As each equal
089 * eigenvalue is found , an elementary reflector is computed to rotate
090 * the corresponding eigensubspace so that the corresponding
091 * components of Z are zero in this new basis.
092
093 CALL DLAPST ( 'I' , N , D , INDX , INFO )
094
095 DO 10 I = 1 , N1
095
096 COLTYP( I ) = 1
097 10 CONTINUE
097
098 DO 20 I = N1P1 , N
098
099 COLTYP( I ) = 3
100 20 CONTINUE
100
101 COL = DCOL
102 DO 40 I = 1 , N , NB
102
103 DO 30 J = 0 , NB - 1
103
104 IF( I + J.LE.N )
104
105 $ INDCOL( I + J ) = COL
106 30 CONTINUE
106
107 COL = MOD( COL + 1 , NPCOL )
108 40 CONTINUE
109
109
110 K = 0
111 K2 = N + 1
112 DO 50 J = 1 , N
112
113 NJ = INDX( J )
114 IF( RHO*ABS( Z( NJ ) ).LE.TOL ) THEN
115
116 * Deflate due to small z component.
117
117
118 K2 = K2 - 1
119 COLTYP( NJ ) = 4
120 INDXP( K2 ) = NJ
121 IF( J.EQ.N )
121
122 $ GO TO 80
123 ELSE
123
124 PJ = NJ
125 GO TO 60
126 END IF
127 50 CONTINUE
128 60 CONTINUE
129 J = J + 1
130 NJ = INDX( J )
131 IF( J.GT.N )
131
132 $ GO TO 80
133 IF( RHO*ABS( Z( NJ ) ).LE.TOL ) THEN
134
135 * Deflate due to small z component.
136
136
137 K2 = K2 - 1
138 COLTYP( NJ ) = 4
139 INDXP( K2 ) = NJ
140 ELSE
141
142 * Check if eigenvalues are close enough to allow deflation.
143
143
144 S = Z( PJ )
145 C = Z( NJ )
146
147 * Find sqrt(a**2 + b**2) without overflow or
148 * destructive underflow.
149
150 TAU = DLAPY2( C , S )
151 T = D( NJ ) - D( PJ )
152 C = C / TAU
153 S = - S / TAU
154 IF( ABS( T*C*S ).LE.TOL ) THEN
155
156 * Deflation is possible.
157
157
158 Z( NJ ) = TAU
159 Z( PJ ) = ZERO
160 IF( COLTYP( NJ ).NE.COLTYP( PJ ) )
160
161 $ COLTYP( NJ ) = 2
162 COLTYP( PJ ) = 4
163 CALL INFOG1L( NJ , NB , NPCOL , MYCOL , DCOL , NJJ , NJCOL )
164 CALL INFOG1L( PJ , NB , NPCOL , MYCOL , DCOL , PJJ , PJCOL )
165 IF( INDCOL( PJ ).EQ.INDCOL( NJ ) .AND. MYCOL.EQ.NJCOL ) THEN
165
166 CALL DROT( NP , Q( 1 , PJJ ) , 1 , Q( 1 , NJJ ) , 1 , C , S )
167 ELSE IF( MYCOL.EQ.PJCOL ) THEN
167
168 CALL DGESD2D( ICTXT , NP , 1 , Q( 1 , PJJ ) , NP , MYROW ,
169 $ NJCOL )
170 CALL DGERV2D( ICTXT , NP , 1 , QBUF , NP , MYROW , NJCOL )
171 CALL DROT( NP , Q( 1 , PJJ ) , 1 , QBUF , 1 , C , S )
172 ELSE IF( MYCOL.EQ.NJCOL ) THEN
172
173 CALL DGESD2D( ICTXT , NP , 1 , Q( 1 , NJJ ) , NP , MYROW ,
174 $ PJCOL )
175 CALL DGERV2D( ICTXT , NP , 1 , QBUF , NP , MYROW , PJCOL )
176 CALL DROT( NP , QBUF , 1 , Q( 1 , NJJ ) , 1 , C , S )
177 END IF
178 T = D( PJ )*C**2 + D( NJ )*S**2
179 D( NJ ) = D( PJ )*S**2 + D( NJ )*C**2
180 D( PJ ) = T
181 K2 = K2 - 1
182 I = 1
183 70 CONTINUE
184 IF( K2 + I.LE.N ) THEN
184
185 IF( D( PJ ).LT.D( INDXP( K2 + I ) ) ) THEN
185
186 INDXP( K2 + I - 1 ) = INDXP( K2 + I )
187 INDXP( K2 + I ) = PJ
188 I = I + 1
189 GO TO 70
190 ELSE
190
191 INDXP( K2 + I - 1 ) = PJ
192 END IF
193 ELSE
193
194 INDXP( K2 + I - 1 ) = PJ
195 END IF
196 PJ = NJ
197 ELSE
197
198 K = K + 1
199 DLAMDA( K ) = D( PJ )
200 W( K ) = Z( PJ )
201 INDXP( K ) = PJ
202 PJ = NJ
203 END IF
204 END IF
205 GO TO 60
206 80 CONTINUE
207
208 * Record the last eigenvalue.
209
210 K = K + 1
211 DLAMDA( K ) = D( PJ )
212 W( K ) = Z( PJ )
213 INDXP( K ) = PJ
214
215 * Count up the total number of the various types of columns , then
216 * form a permutation which positions the four column types into
217 * four uniform groups(although one or more of these groups may be
218 * empty).
219
220 DO 100 J = 1 , 4
220
221 DO 90 I = 0 , NPCOL - 1
221
222 CTOT( I , J ) = 0
223 90 CONTINUE
223
224 PTT( J ) = 0
225 100 CONTINUE
226 DO 110 J = 1 , N
226
227 CT = COLTYP( J )
228 COL = INDCOL( J )
229 CTOT( COL , CT ) = CTOT( COL , CT ) + 1
230 110 CONTINUE
231
232 * PSM(*) = Position in SubMatrix(of types 1 through 4)
233
234 DO 120 COL = 0 , NPCOL - 1
234
235 PSM( COL , 1 ) = 1
236 PSM( COL , 2 ) = 1 + CTOT( COL , 1 )
237 PSM( COL , 3 ) = PSM( COL , 2 ) + CTOT( COL , 2 )
238 PSM( COL , 4 ) = PSM( COL , 3 ) + CTOT( COL , 3 )
239 120 CONTINUE
240 PTT( 1 ) = 1
241 DO 140 I = 2 , 4
241
242 CT = 0
243 DO 130 J = 0 , NPCOL - 1
243
244 CT = CT + CTOT( J , I - 1 )
245 130 CONTINUE
245
246 PTT( I ) = PTT( I - 1 ) + CT
247 140 CONTINUE
248
249 * Fill out the INDXC array so that the permutation which it induces
250 * will place all type - 1 columns first , all type - 2 columns next ,
251 * then all type - 3's , and finally all type - 4's.
252
253 DO 150 J = 1 , N
253
254 JS = INDXP( J )
255 COL = INDCOL( JS )
256 CT = COLTYP( JS )
257 I = INDXL2G( PSM( COL , CT ) , NB , COL , DCOL , NPCOL )
258 INDX( J ) = I
259 INDXC( PTT( CT ) ) = I
260 PSM( COL , CT ) = PSM( COL , CT ) + 1
261 PTT( CT ) = PTT( CT ) + 1
262 150 CONTINUE
263
264 DO 160 J = 1 , N
264
265 JS = INDXP( J )
266 JJS = INDXG2L( JS , NB , J , J , NPCOL )
267 COL = INDCOL( JS )
268 IF( COL.EQ.MYCOL ) THEN
268
269 I = INDX( J )
270 JJQ2 = INDXG2L( I , NB , J , J , NPCOL )
271 CALL DCOPY( NP , Q( 1 , JJS ) , 1 , Q2( 1 , JJQ2 ) , 1 )
272 END IF
273 160 CONTINUE
274
275 * The deflated eigenvalues and their corresponding vectors go back
276 * into the last N - K slots of D and Q respectively.
277
278 CALL DCOPY( N , D , 1 , Z , 1 )
279 DO 170 J = K + 1 , N
279
280 JS = INDXP( J )
281 I = INDX( J )
282 D( I ) = Z( JS )
283 170 CONTINUE
284
285 PTT( 1 ) = 1
286 DO 190 I = 2 , 4
286
287 CT = 0
288 DO 180 J = 0 , NPCOL - 1
288
289 CT = CT + CTOT( J , I - 1 )
290 180 CONTINUE
290
291 PTT( I ) = PTT( I - 1 ) + CT
292 190 CONTINUE
293
294 IB1 = INDXC( 1 )
295 IE1 = IB1
296 IB2 = INDXC( PTT( 2 ) )
297 IE2 = IB2
298 DO 200 I = 2 , PTT( 3 ) - 1
298
299 IB1 = MIN( IB1 , INDXC( I ) )
300 IE1 = MAX( IE1 , INDXC( I ) )
301 200 CONTINUE
302 DO 210 I = PTT( 2 ) , PTT( 4 ) - 1
302
303 IB2 = MIN( IB2 , INDXC( I ) )
304 IE2 = MAX( IE2 , INDXC( I ) )
305 210 CONTINUE
306 NN1 = IE1 - IB1 + 1
307 NN2 = IE2 - IB2 + 1
308 NN = MAX( IE1 , IE2 ) - MIN( IB1 , IB2 ) + 1
309 220 CONTINUE
310 RETURN
311
312 * End of PDLAED2
313
314 END44
46
|
|
Variables in Routine PDLAED2()
| Summary Report |
| Data Type | Quantity | Size(byte) |
| DOUBLE PRECISION | 14 | 56 |
| INTEGER | 51 | 216 |
| REAL | 7 | 28 |
| TOTAL | 72 | 300 |
List of Variables
DOUBLE PRECISION
| C | DLAPY2 | EIGHT | EPS | MONE |
| ONE | PDLAMCH | RHO | S | T |
| TAU | TOL | TWO | ZERO | |
INTEGER
| COL | CT | DCOL | DROW | I |
| IAM | IB1 | IB2 | ICTXT | IDAMAX |
| IE1 | IE2 | IMAX | INDCOL | INDX |
| INDXC | INDXG2L | INDXL2G | INDXP | INFO |
| J | JJQ2 | JJS | JMAX | JS |
| K | K2 | LDQ | LDQ2 | MYCOL |
| MYROW | N | N1 | N1P1 | N2 |
| NB | NJ | NJCOL | NJJ | NN |
| NN1 | NN2 | NP | NPCOL | NPROCS |
| NPROW | NUMROC | PJ | PJCOL | PJJ |
| PTT( 4 ) | | | | |
REAL
| COLTYP | CTOT | D | DLAMDA | PSM |
| W | Z | | | |
Variables Dependence Graph Put the mouse over a right hand side variable to display the corresponding line of the dependence | | - | | - | - | | C | <--- | CC = C / TAU, NJC = Z( NJ ), TAUC = C / TAU, ZC = Z( NJ ) |
| COL | <--- | COLCOL = MOD( COL+1, NPCOL ), INDCOLCOL = INDCOL( J ){2COL = INDCOL( JS ), 3COL = INDCOL( JS )}, JCOL = INDCOL( J ), JSCOL = INDCOL( JS ){2COL = INDCOL( JS )}, NPCOLCOL = MOD( COL+1, NPCOL ){2DO 120 COL = 0, NPCOL - 1}, DCOLCOL = DCOL |
| CT | <--- | ICT = CT + CTOT( J, I-1 ){2CT = CT + CTOT( J, I-1 )}, JCT = COLTYP( J ){2CT = CT + CTOT( J, I-1 ), 3CT = CT + CTOT( J, I-1 )}, COLTYPCT = COLTYP( J ){2CT = COLTYP( JS )}, JSCT = COLTYP( JS ), CTCT = CT + CTOT( J, I-1 ){2CT = CT + CTOT( J, I-1 )}, CTOTCT = CT + CTOT( J, I-1 ){2CT = CT + CTOT( J, I-1 )} |
| CTOT | <--- | COLCTOT( COL, CT ) = CTOT( COL, CT ) + 1, CTCTOT( COL, CT ) = CTOT( COL, CT ) + 1, CTOTCTOT( COL, CT ) = CTOT( COL, CT ) + 1 |
| D | <--- | CD( NJ ) = D( PJ )*S**2 + D( NJ )*C**2, JSD( I ) = Z( JS ), NJD( NJ ) = D( PJ )*S**2 + D( NJ )*C**2, PJD( NJ ) = D( PJ )*S**2 + D( NJ )*C**2, DD( NJ ) = D( PJ )*S**2 + D( NJ )*C**2, SD( NJ ) = D( PJ )*S**2 + D( NJ )*C**2, TD( PJ ) = T, ZD( I ) = Z( JS ) |
| DLAMDA | <--- | PJDLAMDA( K ) = D( PJ ){2DLAMDA( K ) = D( PJ )}, DDLAMDA( K ) = D( PJ ){2DLAMDA( K ) = D( PJ )} |
| EPS | <--- | ICTXTEPS = PDLAMCH( ICTXT, 'Epsilon' ), PDLAMCHEPS = PDLAMCH( ICTXT, 'Epsilon' ) |
| I | <--- | II = I + 1, COLI = INDXL2G( PSM( COL, CT ), NB, COL, DCOL, NPCOL ), INDXI = INDX( J ){2I = INDX( J )}, INDXL2GI = INDXL2G( PSM( COL, CT ), NB, COL, DCOL, NPCOL ), JI = INDX( J ){2I = INDX( J )}, CTI = INDXL2G( PSM( COL, CT ), NB, COL, DCOL, NPCOL ), NDO 40 I = 1, N, NB{2DO 20 I = N1P1, N}, N1DO 10 I = 1, N1, N1P1DO 20 I = N1P1, N, NBDO 40 I = 1, N, NB{2I = INDXL2G( PSM( COL, CT ), NB, COL, DCOL, NPCOL )}, NPCOLDO 90 I = 0, NPCOL - 1{2I = INDXL2G( PSM( COL, CT ), NB, COL, DCOL, NPCOL )}, PSMI = INDXL2G( PSM( COL, CT ), NB, COL, DCOL, NPCOL ), PTTDO 200 I = 2, PTT( 3 ) - 1{2DO 210 I = PTT( 2 ), PTT( 4 ) - 1}, DCOLI = INDXL2G( PSM( COL, CT ), NB, COL, DCOL, NPCOL ) |
| IB1 | <--- | IIB1 = MIN( IB1, INDXC( I ) ), IB1IB1 = MIN( IB1, INDXC( I ) ), INDXCIB1 = INDXC( 1 ){2IB1 = MIN( IB1, INDXC( I ) )} |
| IB2 | <--- | IIB2 = MIN( IB2, INDXC( I ) ), IB2IB2 = MIN( IB2, INDXC( I ) ), INDXCIB2 = INDXC( PTT( 2 ) ){2IB2 = MIN( IB2, INDXC( I ) )}, PTTIB2 = INDXC( PTT( 2 ) ) |
| IE1 | <--- | IIE1 = MAX( IE1, INDXC( I ) ), IB1IE1 = IB1, IE1IE1 = MAX( IE1, INDXC( I ) ), INDXCIE1 = MAX( IE1, INDXC( I ) ) |
| IE2 | <--- | IIE2 = MAX( IE2, INDXC( I ) ), IB2IE2 = IB2, IE2IE2 = MAX( IE2, INDXC( I ) ), INDXCIE2 = MAX( IE2, INDXC( I ) ) |
| IMAX | <--- | IDAMAXIMAX = IDAMAX( N, Z, 1 ), NIMAX = IDAMAX( N, Z, 1 ), ZIMAX = IDAMAX( N, Z, 1 ) |
| INDX | <--- | IINDX( J ) = I |
| INDXC | <--- | IINDXC( PTT( CT ) ) = I |
| INDXP | <--- | IINDXP( K2+I-1 ) = INDXP( K2+I ), INDXPINDXP( K2+I-1 ) = INDXP( K2+I ), K2INDXP( K2+I-1 ) = INDXP( K2+I ), NJINDXP( K2 ) = NJ{2INDXP( K2 ) = NJ}, PJINDXP( K2+I ) = PJ{2INDXP( K2+I-1 ) = PJ, 3INDXP( K2+I-1 ) = PJ, 4INDXP( K ) = PJ, 5INDXP( K ) = PJ} |
| J | <--- | JJ = J + 1, KDO 170 J = K + 1, N, NDO 50 J = 1, N{2DO 110 J = 1, N, 3DO 150 J = 1, N, 4DO 160 J = 1, N, 5DO 170 J = K + 1, N}, NBDO 30 J = 0, NB - 1, NPCOLDO 130 J = 0, NPCOL - 1{2DO 180 J = 0, NPCOL - 1} |
| JJQ2 | <--- | IJJQ2 = INDXG2L( I, NB, J, J, NPCOL ), INDXG2LJJQ2 = INDXG2L( I, NB, J, J, NPCOL ), JJJQ2 = INDXG2L( I, NB, J, J, NPCOL ), NBJJQ2 = INDXG2L( I, NB, J, J, NPCOL ), NPCOLJJQ2 = INDXG2L( I, NB, J, J, NPCOL ) |
| JJS | <--- | INDXG2LJJS = INDXG2L( JS, NB, J, J, NPCOL ), JJJS = INDXG2L( JS, NB, J, J, NPCOL ), JSJJS = INDXG2L( JS, NB, J, J, NPCOL ), NBJJS = INDXG2L( JS, NB, J, J, NPCOL ), NPCOLJJS = INDXG2L( JS, NB, J, J, NPCOL ) |
| JMAX | <--- | IDAMAXJMAX = IDAMAX( N, D, 1 ), NJMAX = IDAMAX( N, D, 1 ), DJMAX = IDAMAX( N, D, 1 ) |
| JS | <--- | INDXPJS = INDXP( J ){2JS = INDXP( J ), 3JS = INDXP( J )}, JJS = INDXP( J ){2JS = INDXP( J ), 3JS = INDXP( J )} |
| K | <--- | KK = K + 1{2K = K + 1} |
| K2 | <--- | K2K2 = K2 - 1{2K2 = K2 - 1, 3K2 = K2 - 1}, NK2 = N + 1 |
| N1P1 | <--- | N1N1P1 = N1 + 1 |
| N2 | <--- | NN2 = N - N1, N1N2 = N - N1 |
| NJ | <--- | INDXNJ = INDX( J ){2NJ = INDX( J )}, JNJ = INDX( J ){2NJ = INDX( J )} |
| NN | <--- | IB1NN = MAX( IE1, IE2 ) - MIN( IB1, IB2 ) + 1, IB2NN = MAX( IE1, IE2 ) - MIN( IB1, IB2 ) + 1, IE1NN = MAX( IE1, IE2 ) - MIN( IB1, IB2 ) + 1, IE2NN = MAX( IE1, IE2 ) - MIN( IB1, IB2 ) + 1 |
| NN1 | <--- | IB1NN1 = IE1 - IB1 + 1, IE1NN1 = IE1 - IB1 + 1 |
| NN2 | <--- | IB2NN2 = IE2 - IB2 + 1, IE2NN2 = IE2 - IB2 + 1 |
| NP | <--- | DROWNP = NUMROC( N, NB, MYROW, DROW, NPROW ), MYROWNP = NUMROC( N, NB, MYROW, DROW, NPROW ), NNP = NUMROC( N, NB, MYROW, DROW, NPROW ), NBNP = NUMROC( N, NB, MYROW, DROW, NPROW ), NPROWNP = NUMROC( N, NB, MYROW, DROW, NPROW ), NUMROCNP = NUMROC( N, NB, MYROW, DROW, NPROW ) |
| PJ | <--- | NJPJ = NJ{2PJ = NJ, 3PJ = NJ} |
| PSM | <--- | COLPSM( COL, 2 ) = 1 + CTOT( COL, 1 ){2PSM( COL, 3 ) = PSM( COL, 2 ) + CTOT( COL, 2 ), 3PSM( COL, 4 ) = PSM( COL, 3 ) + CTOT( COL, 3 ), 4PSM( COL, CT ) = PSM( COL, CT ) + 1}, CTPSM( COL, CT ) = PSM( COL, CT ) + 1, CTOTPSM( COL, 2 ) = 1 + CTOT( COL, 1 ){2PSM( COL, 3 ) = PSM( COL, 2 ) + CTOT( COL, 2 ), 3PSM( COL, 4 ) = PSM( COL, 3 ) + CTOT( COL, 3 )}, PSMPSM( COL, 3 ) = PSM( COL, 2 ) + CTOT( COL, 2 ){2PSM( COL, 4 ) = PSM( COL, 3 ) + CTOT( COL, 3 ), 3PSM( COL, CT ) = PSM( COL, CT ) + 1} |
| PTT | <--- | IPTT( I ) = PTT( I-1 ) + CT{2PTT( I ) = PTT( I-1 ) + CT}, CTPTT( I ) = PTT( I-1 ) + CT{2PTT( CT ) = PTT( CT ) + 1, 3PTT( I ) = PTT( I-1 ) + CT}, PTTPTT( I ) = PTT( I-1 ) + CT{2PTT( CT ) = PTT( CT ) + 1, 3PTT( I ) = PTT( I-1 ) + CT} |
| RHO | <--- | RHORHO = ABS( TWO*RHO ), TWORHO = ABS( TWO*RHO ) |
| S | <--- | PJS = Z( PJ ), SS = -S / TAU, TAUS = -S / TAU, ZS = Z( PJ ) |
| T | <--- | CT = D( PJ )*C**2 + D( NJ )*S**2, NJT = D( NJ ) - D( PJ ){2T = D( PJ )*C**2 + D( NJ )*S**2}, ONET = ONE / SQRT( TWO ), PJT = D( NJ ) - D( PJ ){2T = D( PJ )*C**2 + D( NJ )*S**2}, DT = D( NJ ) - D( PJ ){2T = D( PJ )*C**2 + D( NJ )*S**2}, ST = D( PJ )*C**2 + D( NJ )*S**2, TWOT = ONE / SQRT( TWO ) |
| TAU | <--- | CTAU = DLAPY2( C, S ), STAU = DLAPY2( C, S ), DLAPY2TAU = DLAPY2( C, S ) |
| TOL | <--- | EIGHTTOL = EIGHT*EPS*MAX( ABS( D( JMAX ) ), ABS( Z( IMAX ) ) ), EPSTOL = EIGHT*EPS*MAX( ABS( D( JMAX ) ), ABS( Z( IMAX ) ) ), IMAXTOL = EIGHT*EPS*MAX( ABS( D( JMAX ) ), ABS( Z( IMAX ) ) ), JMAXTOL = EIGHT*EPS*MAX( ABS( D( JMAX ) ), ABS( Z( IMAX ) ) ), DTOL = EIGHT*EPS*MAX( ABS( D( JMAX ) ), ABS( Z( IMAX ) ) ), ZTOL = EIGHT*EPS*MAX( ABS( D( JMAX ) ), ABS( Z( IMAX ) ) ) |
| W | <--- | PJW( K ) = Z( PJ ){2W( K ) = Z( PJ )}, ZW( K ) = Z( PJ ){2W( K ) = Z( PJ )} |
| Z | <--- | TAUZ( NJ ) = TAU, ZEROZ( PJ ) = ZERO |
|
|
Analysis elements of the routine PDLAED2() Put the mouse over each element to display detailed matching information
Assigned variables |
| | | C , COL , CT , EIGHT , EPS , I , IB1 , IB2 , IE1 , IE2 , IMAX , J , JJQ2 , JJS , JMAX , JS , K , K2 , MONE , N1P1 , N2 , NJ , NN , NN1 , NN2 , NP , ONE , PJ , PSM , PTT , RHO , S , T , TAU , TOL , TWO , z , ZERO |
|
Active variables |
| | | C , COL , COLTYP , CT , CTOT , D , DCOL , DLAMDA , DLAPY2 , DROW , EIGHT , EPS , I , IAM , IB1 , IB2 , ICTXT , IDAMAX , IE1 , IE2 , IMAX , INDCOL , INDX , INDXC , INDXG2L , INDXL2G , INDXP , INFO , J , JJQ2 , JJS , JMAX , JS , K , K2 , LDQ , LDQ2 , MONE , MYCOL , MYROW , N , N1 , N1P1 , N2 , NB , NJ , NJCOL , NJJ , NN , NN1 , NN2 , NP , NPCOL , NPROCS , NPROW , NUMROC , ONE , PDLAMCH , PJ , PJCOL , PJJ , PSM , PTT , Q , Q2 , QBUF , RHO , S , T , TAU , TOL , TWO , W , Z , ZERO |
|
Allocated variables [ statement : associated variable ] |
| | new | : this |
|
Accessed arrays [ array name : associated index ] |
| | COLTYP | : I , I , J , JS , NJ , NJ , NJ , NJ , PJ , PJ |
| | CTOT | : COL, 1 , COL, 2 , COL, 3 , COL, CT , I, J , J, I-1 , J, I-1 |
| | D | : I , INDXP( K2+I ) , JMAX , NJ , NJ , NJ , PJ , PJ , PJ , PJ , PJ , PJ , PJ |
| | DLAMDA | : K , K |
| | DLAPY2 | : C, S |
| | IDAMAX | : N, D, 1 , N, Z, 1 |
| | INDCOL | : I+J , J , JS , JS , NJ , PJ |
| | INDX | : J , J , J , J , J |
| | INDXC | : 1 , I , I , I , I , PTT( 2 ) , PTT( CT ) |
| | INDXG2L | : I, NB, J, J, NPCOL , JS, NB, J, J, NPCOL |
| | INDXL2G | : PSM( COL, CT ), NB, COL, DCOL, NPCOL |
| | INDXP | : J , J , J , K , K , K2 , K2 , K2+I , K2+I , K2+I , K2+I-1 , K2+I-1 , K2+I-1 |
| | NUMROC | : N, NB, MYROW, DROW, NPROW |
| | PDLAMCH | : ICTXT, 'Epsilon' |
| | PSM | : * , COL, 1 , COL, 2 , COL, 2 , COL, 3 , COL, 3 , COL, 4 , COL, CT , COL, CT |
| | PTT | : 1 , 1 , 2 , 2 , 3 , 4 , 4 , CT , CT , I , I , I-1 , I-1 , J |
| | Q | : 1, JJS , 1, NJJ , 1, NJJ , 1, NJJ , 1, PJJ , 1, PJJ , 1, PJJ |
| | Q2 | : 1, JJQ2 |
| | W | : K , K |
| | Z | : IMAX , IMAX , JS , N1P1 , NJ , NJ , NJ , NJ , PJ , PJ , PJ , PJ |
|
Conditional statements [ statement : associated predicate ] |
| | do | : ( 10 I = 1 , N1 ) , ( 20 I = N1P1 , N ) , ( 40 I = 1 , N , NB ) , ( 30 J = 0 , NB - 1 ) , ( 50 J = 1 , N ) , ( 100 J = 1 , 4 ) , ( 90 I = 0 , NPCOL - 1 ) , ( 110 J = 1 , N ) , ( 120 COL = 0 , NPCOL - 1 ) , ( 140 I = 2 , 4 ) , ( 130 J = 0 , NPCOL - 1 ) , ( 150 J = 1 , N ) , ( 160 J = 1 , N ) , ( 170 J = K + 1 , N ) , ( 190 I = 2 , 4 ) , ( 180 J = 0 , NPCOL - 1 ) , ( 200 I = 2 , PTT( 3 ) - 1 ) , ( 210 I = PTT( 2 ) , PTT( 4 ) - 1 ) |
| | if | : ( possible ) , ( N.EQ.0 ) , ( RHO.LT.ZERO ) , ( the rank - 1 modifier is small enough , no more needs to be done ) , ( (RHO*ABS( Z( IMAX ) ).LE.TOL ) ) , ( there are multiple eigenvalues ) , ( I+J.LE.N ) , ( (RHO*ABS( Z( NJ ) ).LE.TOL ) ) , ( J.EQ.N ) , ( J.GT.N ) , ( (RHO*ABS( Z( NJ ) ).LE.TOL ) ) , ( eigenvalues are close enough to allow deflation. ) , ( (ABS( T*C*S ).LE.TOL ) ) , ( (COLTYP( NJ ).NE.COLTYP( PJ ) ) ) , ( (INDCOL( PJ ).EQ.INDCOL( NJ ) .AND. MYCOL.EQ.NJCOL ) ) , ( MYCOL.EQ.PJCOL ) , ( MYCOL.EQ.NJCOL ) , ( K2+I.LE.N ) , ( (D( PJ ).LT.D( INDXP( K2 + I ) ) ) ) , ( COL.EQ.MYCOL ) |
|
| List of variables | C COL COLTYP CT CTOT D DCOL
| DLAMDA DLAPY2 DROW EIGHT EPS I IAM IB1
| IB2 ICTXT IDAMAX IE1 IE2 IMAX INDCOL INDX
| INDXC INDXG2L INDXL2G INDXP INFO J JJQ2 JJS
| JMAX JS K K2 LDQ LDQ2 MONE MYCOL
| MYROW N N1 N1P1 N2 NB NJ NJCOL
| NJJ NN NN1 NN2 NP NPCOL NPROCS NPROW
| NUMROC ONE PDLAMCH PJ PJCOL PJJ PSM PTT( 4 )
| RHO S T TAU TOL TWO W Z
| ZERO | | close
| |
C
COL
COLTYP
CT
CTOT
D
DCOL
DLAMDA
DLAPY2
DROW
EIGHT
EPS
I
IAM
IB1
IB2
ICTXT
IDAMAX
IE1
IE2
IMAX
INDCOL
INDX
INDXC
INDXG2L
INDXL2G
INDXP
INFO
J
JJQ2
JJS
JMAX
JS
K
K2
LDQ
LDQ2
MONE
MYCOL
MYROW
N
N1
N1P1
N2
NB
NJ
NJCOL
NJJ
NN
NN1
NN2
NP
NPCOL
NPROCS
NPROW
NUMROC
ONE
PDLAMCH
PJ
PJCOL
PJJ
PSM
PTT( 4 )
RHO
S
T
TAU
TOL
TWO
W
Z
ZERO
219#18
| |