|
|
| |
| # lines: |
948 | | # code: |
948 | | # comment: | 0 | |
# blank: | 0 |
| # Variables: | 38 |
| # Callers: | 4 |
| # Callings: | 0 |
| # Words: | 502 |
| # Keywords: | 225 |
|
|
|
|
|
..
.. Local Scalars ..
..
.. Local Arrays ..
..
.. External Subroutines ..
..
.. External Functions ..
..
.. Intrinsic Functions ..
..
.. Executable Statements ..
Get grid parameters and local indexes.
If the matrix is Hermitian, we address only a triangular portion
of the matrix. A sum of row (column) i of the complete matrix
can be obtained by adding along row i and column i of the the
triangular matrix, stopping/starting at the diagonal, which is
the point of reflection. The pictures below demonstrate this.
In the following code, the row sums created by --- rows below are
refered to as ROWSUMS, and the column sums shown by | are refered
to as COLSUMS. Infinity-norm = 1-norm = ROWSUMS+COLSUMS.
UPLO = 'U' UPLO = 'L'
____i______ ___________
|\ | | |\ |
| \ | | | \ |
| \ | | | \ |
| \|------| i i|---\ |
| \ | | |\ |
| \ | | | \ |
| \ | | | \ |
| \ | | | \ |
| \ | | | \ |
| \ | | | \ |
|__________\| |___|______\|
i
II, JJ : local indices into array A
ICURROW : process row containing diagonal block
ICURCOL : process column containing diagonal block
IRSC0 : pointer to part of work used to store the ROWSUMS while
they are stored along a process column
IRSR0 : pointer to part of work used to store the ROWSUMS after
they have been transposed to be along a process row
Find max(abs(A(i,j))).
Handle first block separately
Find COLMAXS
Reset local indices so we can find ROWMAXS
Find ROWMAXS
Loop over the remaining rows/columns of the matrix.
Find COLMAXS
Reset local indices so we can find ROWMAXS
Find ROWMAXS
Handle first block separately
Find COLMAXS
Reset local indices so we can find ROWMAXS
Find ROWMAXS
Loop over rows/columns of global matrix.
Find COLMAXS
Reset local indices so we can find ROWMAXS
Find ROWMAXS
Gather the result on process (IAROW,IACOL).
Find normI( sub( A ) ) ( = norm1( sub( A ) ), since sub( A ) is
hermitian).
Handle first block separately
Find COLSUMS
Reset local indices so we can find ROWSUMS
Find ROWSUMS
Loop over remaining rows/columns of global matrix.
Find COLSUMS
Reset local indices so we can find ROWSUMS
Find ROWSUMS
Handle first block separately
|
|
|
|
001 REAL FUNCTION PCLANHE( NORM , UPLO , N , A , IA , JA ,
002 $DESCA , WORK )
003
004 * -- ScaLAPACK auxiliary routine(version 1.7) --
005 * University of Tennessee , Knoxville , Oak Ridge National Laboratory ,
006 * and University of California , Berkeley.
007 * May 1 , 1997
008
009 * .. Scalar Arguments ..
010 CHARACTER NORM , UPLO
011 INTEGER IA , JA , N
012 * ..
013 * .. Array Arguments ..
014 INTEGER DESCA( * )
015 REAL WORK( * )
016 COMPLEX A( * )
017 * ..
018
019 * Purpose
020 * === ====
021
022 * PCLANHE returns the value of the one norm , or the Frobenius norm ,
023 * or the infinity norm , or the element of largest absolute value of a
024 * complex hermitian distributed matrix sub(A) = A(IA : IA + N - 1 , JA : JA + N - 1).
025
026 * PCLANHE returns the value
027
028 * ( max(abs(A(i , j))) , NORM = 'M' or 'm' with IA <= i <= IA + N - 1 ,
029 * ( and JA <= j <= JA + N - 1 ,
030 * (
031 * ( norm1( sub( A ) ) , NORM = '1' , 'O' or 'o'
032 * (
033 * ( normI( sub( A ) ) , NORM = 'I' or 'i'
034 * (
035 * ( normF( sub( A ) ) , NORM = 'F' , 'f' , 'E' or 'e'
036
037 * where norm1 denotes the one norm of a matrix(maximum column sum) ,
038 * normI denotes the infinity norm of a matrix(maximum row sum) and
039 * normF denotes the Frobenius norm of a matrix(square root of sum of
040 * squares). Note that max(abs(A(i , j))) is not a matrix norm.
041
042 * Notes
043 * === ==
044
045 * Each global data object is described by an associated description
046 * vector. This vector stores the information required to establish
047 * the mapping between an object element and its corresponding process
048 * and memory location.
049
050 * Let A be a generic term for any 2D block cyclicly distributed array.
051 * Such a global array has an associated description vector DESCA.
052 * In the following comments , the character _ should be read as
053 * "of the global array".
054
055 * NOTATION STORED IN EXPLANATION
056 * --- ------------ -------------- --------------------------------------
057 * DTYPE_A(global) DESCA( DTYPE_ )The descriptor type. In this case ,
058 * DTYPE_A = 1.
059 * CTXT_A(global) DESCA( CTXT_ ) The BLACS context handle , indicating
060 * the BLACS process grid A is distribu -
061 * ted over. The context itself is glo -
062 * bal , but the handle(the integer
063 * value) may vary.
064 * M_A(global) DESCA( M_ ) The number of rows in the global
065 * array A.
066 * N_A(global) DESCA( N_ ) The number of columns in the global
067 * array A.
068 * MB_A(global) DESCA( MB_ ) The blocking factor used to distribute
069 * the rows of the array.
070 * NB_A(global) DESCA( NB_ ) The blocking factor used to distribute
071 * the columns of the array.
072 * RSRC_A(global) DESCA( RSRC_ ) The process row over which the first
073 * row of the array A is distributed.
074 * CSRC_A(global) DESCA( CSRC_ ) The process column over which the
075 * first column of the array A is
076 * distributed.
077 * LLD_A(local) DESCA( LLD_ ) The leading dimension of the local
078 * array. LLD_A >= MAX(1 , LOCr(M_A)).
079
080 * Let K be the number of rows or columns of a distributed matrix ,
081 * and assume that its process grid has dimension p x q.
082 * LOCr( K ) denotes the number of elements of K that a process
083 * would receive if K were distributed over the p processes of its
084 * process column.
085 * Similarly , LOCc( K ) denotes the number of elements of K that a
086 * process would receive if K were distributed over the q processes of
087 * its process row.
088 * The values of LOCr() and LOCc() may be determined via a call to the
089 * ScaLAPACK tool function , NUMROC :
090 * LOCr( M ) = NUMROC( M , MB_A , MYROW , RSRC_A , NPROW ) ,
091 * LOCc( N ) = NUMROC( N , NB_A , MYCOL , CSRC_A , NPCOL ).
092 * An upper bound for these quantities may be computed by :
093 * LOCr( M ) <= ceil( ceil(M / MB_A) / NPROW )*MB_A
094 * LOCc( N ) <= ceil( ceil(N / NB_A) / NPCOL )*NB_A
095
096 * Arguments
097 * === ======
098
099 * NORM(global input) CHARACTER
100 * Specifies the value to be returned in PCLANHE as described
101 * above.
102
103 * UPLO(global input) CHARACTER
104 * Specifies whether the upper or lower triangular part of the
105 * hermitian matrix sub( A ) is to be referenced.
106 * = 'U' : Upper triangular part of sub( A ) is referenced ,
107 * = 'L' : Lower triangular part of sub( A ) is referenced.
108
109 * N(global input) INTEGER
110 * The number of rows and columns to be operated on i.e the
111 * number of rows and columns of the distributed submatrix
112 * sub( A ). When N = 0 , PCLANHE is set to zero. N >= 0.
113
114 * A(local input) COMPLEX pointer into the local memory
115 * to an array of dimension(LLD_A , LOCc(JA + N - 1)) containing the
116 * local pieces of the hermitian distributed matrix sub( A ).
117 * If UPLO = 'U' , the leading N - by - N upper triangular part of
118 * sub( A ) contains the upper triangular matrix which norm is
119 * to be computed , and the strictly lower triangular part of
120 * this matrix is not referenced. If UPLO = 'L' , the leading
121 * N - by - N lower triangular part of sub( A ) contains the lower
122 * triangular matrix which norm is to be computed , and the
123 * strictly upper triangular part of sub( A ) is not referenced.
124
125 * IA(global input) INTEGER
126 * The row index in the global array A indicating the first
127 * row of sub( A ).
128
129 * JA(global input) INTEGER
130 * The column index in the global array A indicating the
131 * first column of sub( A ).
132
133 * DESCA(global and local input) INTEGER array of dimension DLEN_.
134 * The array descriptor for the distributed matrix A.
135
136 * WORK(local workspace) REAL array dimension(LWORK)
137 * LWORK >= 0 if NORM = 'M' or 'm'(not referenced) ,
138 * 2*Nq0 + Np0 + LDW if NORM = '1' , 'O' , 'o' , 'I' or 'i' ,
139 * where LDW is given by :
140 * IF( NPROW.NE.NPCOL ) THEN
141 * LDW = MB_A*CEIL(CEIL(Np0 / MB_A) / (LCM / NPROW))
142 * ELSE
143 * LDW = 0
144 * END IF
145 * 0 if NORM = 'F' , 'f' , 'E' or 'e'(not referenced) ,
146
147 * where LCM is the least common multiple of NPROW and NPCOL
148 * LCM = ILCM( NPROW , NPCOL ) and CEIL denotes the ceiling
149 * operation(ICEIL).
150
151 * IROFFA = MOD( IA - 1 , MB_A ) , ICOFFA = MOD( JA - 1 , NB_A ) ,
152 * IAROW = INDXG2P( IA , MB_A , MYROW , RSRC_A , NPROW ) ,
153 * IACOL = INDXG2P( JA , NB_A , MYCOL , CSRC_A , NPCOL ) ,
154 * Np0 = NUMROC( N + IROFFA , MB_A , MYROW , IAROW , NPROW ) ,
155 * Nq0 = NUMROC( N + ICOFFA , NB_A , MYCOL , IACOL , NPCOL ) ,
156
157 * ICEIL , ILCM , INDXG2P and NUMROC are ScaLAPACK tool functions ;
158 * MYROW , MYCOL , NPROW and NPCOL can be determined by calling
159 * the subroutine BLACS_GRIDINFO.
160
161 * === ==================================================================
162
163 * .. Parameters ..
164 INTEGER BLOCK_CYCLIC_2D , CSRC_ , CTXT_ , DLEN_ , DTYPE_ ,
165 $LLD_ , MB_ , M_ , NB_ , N_ , RSRC_
166 PARAMETER( BLOCK_CYCLIC_2D = 1 , DLEN_ = 9 , DTYPE_ = 1 ,
167 $CTXT_ = 2 , M_ = 3 , N_ = 4 , MB_ = 5 , NB_ = 6 ,
168 $RSRC_ = 7 , CSRC_ = 8 , LLD_ = 9 )
169 REAL ONE , ZERO
170 PARAMETER( ONE = 1.0E + 0 , ZERO = 0.0E + 0 )
171 IB = IN - IA + 1
172
173 * Find COLSUMS
174
175 IF( MYCOL.EQ.IACOL ) THEN
175
176 IOFFA =(JJ - 1)*LDA
177 DO 290 K = 0 , IB - 1
177
178 SUM = ZERO
179 IF( MYROW.EQ.IAROW ) THEN
179
180 IF( IIA + NP.GT.II ) THEN
180
181 SUM = ABS( REAL( A( IOFFA + II ) ) )
182 DO 280 LL = II + 1 , IIA + NP - 1
182
183 SUM = SUM + ABS( A( IOFFA + LL ) )
184 280 CONTINUE
184
185 END IF
186 ELSE
186
187 DO 285 LL = II , IIA + NP - 1
187
188 SUM = SUM + ABS( A( IOFFA + LL ) )
189 285 CONTINUE
189
190 END IF
191 IOFFA = IOFFA + LDA
192 WORK( JJ + K - JJA + ICSR0 ) = SUM
193 IF( MYROW.EQ.IAROW )
193
194 $ II = II + 1
195 290 CONTINUE
196
197 * Reset local indices so we can find ROWSUMS
198
198
199 IF( MYROW.EQ.IAROW )
199
200 $ II = II - IB
201
202 END IF
203
204 * Find ROWSUMS
205
206 IF( MYROW.EQ.IAROW ) THEN
206
207 DO 310 K = II , II + IB - 1
207
208 SUM = ZERO
209 IF( JJ.GT.JJA ) THEN
209
210 DO 300 LL =(JJA - 1)*LDA ,(JJ - 2)*LDA , LDA
210
211 SUM = SUM + ABS( A( K + LL ) )
212 300 CONTINUE
212
213 END IF
214 WORK( K - IIA + IRSC0 ) = SUM
215 IF( MYCOL.EQ.IACOL )
215
216 $ JJ = JJ + 1
217 310 CONTINUE
217
218 II = II + IB
219 ELSE IF( MYCOL.EQ.IACOL ) THEN
219
220 JJ = JJ + IB
221 END IF
222
223 ICURROW = MOD( IAROW + 1 , NPROW )
224 ICURCOL = MOD( IACOL + 1 , NPCOL )
225
226 * Loop over rows / columns of global matrix.
227
228 DO 360 I = IN + 1 , IA + N - 1 , DESCA( MB_ )
228
229 IB = MIN( DESCA( MB_ ) , IA + N - I )
230
231 * Find COLSUMS
232
233 IF( MYCOL.EQ.ICURCOL ) THEN
233
234 IOFFA =( JJ - 1 ) * LDA
235 DO 330 K = 0 , IB - 1
235
236 SUM = ZERO
237 IF( MYROW.EQ.ICURROW ) THEN
237
238 IF( IIA + NP.GT.II ) THEN
238
239 SUM = ABS( REAL( A( II + IOFFA ) ) )
240 DO 320 LL = II + 1 , IIA + NP - 1
240
241 SUM = SUM + ABS( A( LL + IOFFA ) )
242 320 CONTINUE
242
243 ELSE IF( II.EQ.IIA + NP - 1 ) THEN
243
244 SUM = ABS( REAL( A( II + IOFFA ) ) )
245 END IF
246 ELSE
246
247 DO 325 LL = II , IIA + NP - 1
247
248 SUM = SUM + ABS( A( LL + IOFFA ) )
249 325 CONTINUE
249
250 END IF
251 IOFFA = IOFFA + LDA
252 WORK( JJ + K - JJA + ICSR0 ) = SUM
253 IF( MYROW.EQ.ICURROW )
253
254 $ II = II + 1
255 330 CONTINUE
256
257 * Reset local indices so we can find ROWSUMS
258
258
259 IF( MYROW.EQ.ICURROW )
259
260 $ II = II - IB
261
262 END IF
263
264 * Find ROWSUMS
265
266 IF( MYROW.EQ.ICURROW ) THEN
266
267 DO 350 K = II , II + IB - 1
267
268 SUM = ZERO
269 IF( JJ.GT.JJA ) THEN
269
270 DO 340 LL =(JJA - 1)*LDA ,(JJ - 2)*LDA , LDA
270
271 SUM = SUM + ABS( A( K + LL ) )
272 340 CONTINUE
272
273 END IF
274 WORK(K - IIA + IRSC0) = SUM
275 IF( MYCOL.EQ.ICURCOL )
275
276 $ JJ = JJ + 1
277 350 CONTINUE
277
278 II = II + IB
279 ELSE IF( MYCOL.EQ.ICURCOL ) THEN
279
280 JJ = JJ + IB
281 END IF
282
283 ICURROW = MOD( ICURROW + 1 , NPROW )
284 ICURCOL = MOD( ICURCOL + 1 , NPCOL )
285
286 360 CONTINUE
287 END IF
288
289 * After calls to SGSUM2D , process row 0 will have global
290 * COLSUMS and process column 0 will have global ROWSUMS.
291 * Transpose ROWSUMS and add to COLSUMS to get global row / column
292 * sum , the max of which is the infinity or 1 norm.
293
294 IF( MYCOL.EQ.IACOL )
294
295 $ NQ = NQ + ICOFF
296 CALL SGSUM2D( ICTXT , 'Columnwise' , ' ' , 1 , NQ , WORK( ICSR ) , 1 ,
297 $ IAROW , MYCOL )
298 IF( MYROW.EQ.IAROW )
298
299 $ NP = NP + IROFF
300 CALL SGSUM2D( ICTXT , 'Rowwise' , ' ' , NP , 1 , WORK( IRSC ) ,
301 $ MAX( 1 , NP ) , MYROW , IACOL )
302
303 CALL PSCOL2ROW( ICTXT , N , 1 , DESCA( MB_ ) , WORK( IRSC ) ,
304 $ MAX( 1 , NP ) , WORK( IRSR ) , MAX( 1 , NQ ) ,
305 $ IAROW , IACOL , IAROW , IACOL , WORK( IRSC + NP ) )
306
307 IF( MYROW.EQ.IAROW ) THEN
307
308 IF( MYCOL.EQ.IACOL )
308
309 $ NQ = NQ - ICOFF
310 CALL SAXPY( NQ , ONE , WORK( IRSR0 ) , 1 , WORK( ICSR0 ) , 1 )
311 IF( NQ.LT.1 ) THEN
311
312 VALUE = ZERO
313 ELSE
313
314 VALUE = WORK( ISAMAX( NQ , WORK( ICSR0 ) , 1 ) )
315 END IF
316 CALL SGAMX2D( ICTXT , 'Rowwise' , ' ' , 1 , 1 , VALUE , 1 , I , K ,
317 $ - 1 , IAROW , IACOL )
318 END IF
319
320 ELSE IF( LSAME( NORM , 'F' ) .OR. LSAME( NORM , 'E' ) ) THEN
321
322 * Find normF( sub( A ) ).
323
323
324 SCALE = ZERO
325 SUM = ONE
326
327 * Add off - diagonal entries , first
328
329 IF( LSAME( UPLO , 'U' ) ) THEN
330
331 * Handle first block separately
332
332
333 IB = IN - IA + 1
334
335 IF( MYCOL.EQ.IACOL ) THEN
335
336 DO 370 K =(JJ - 1)*LDA ,(JJ + IB - 2)*LDA , LDA
336
337 CALL CLASSQ( II - IIA , A( IIA + K ) , 1 , SCALE , SUM )
338 CALL CLASSQ( II - IIA , A( IIA + K ) , 1 , SCALE , SUM )
339 IF( MYROW.EQ.IAROW ) THEN
339
340 IF( REAL( A( II + K ) ).NE.ZERO ) THEN
340
341 ABSA = ABS( REAL( A( II + K ) ) )
342 IF( SCALE.LT.ABSA ) THEN
342
343 SUM = ONE + SUM * ( SCALE / ABSA )**2
344 SCALE = ABSA
345 ELSE
345
346 SUM = SUM + ( ABSA / SCALE )**2
347 END IF
348 END IF
349 II = II + 1
350 END IF
351 370 CONTINUE
352
352
353 JJ = JJ + IB
354 ELSE IF( MYROW.EQ.IAROW ) THEN
354
355 II = II + IB
356 END IF
357
358 ICURROW = MOD( IAROW + 1 , NPROW )
359 ICURCOL = MOD( IACOL + 1 , NPCOL )
360
361 * Loop over rows / columns of global matrix.
362
363 DO 390 I = IN + 1 , IA + N - 1 , DESCA( MB_ )
363
364 IB = MIN( DESCA( MB_ ) , IA + N - I )
365
366 IF( MYCOL.EQ.ICURCOL ) THEN
366
367 DO 380 K =(JJ - 1)*LDA ,(JJ + IB - 2)*LDA , LDA
367
368 CALL CLASSQ( II - IIA , A( IIA + K ) , 1 , SCALE , SUM )
369 CALL CLASSQ( II - IIA , A( IIA + K ) , 1 , SCALE , SUM )
370 IF( MYROW.EQ.ICURROW ) THEN
370
371 IF( REAL( A( II + K ) ).NE.ZERO ) THEN
371
372 ABSA = ABS( REAL( A( II + K ) ) )
373 IF( SCALE.LT.ABSA ) THEN
373
374 SUM = ONE + SUM*( SCALE / ABSA )**2
375 SCALE = ABSA
376 ELSE
376
377 SUM = SUM + ( ABSA / SCALE )**2
378 END IF
379 END IF
380 II = II + 1
381 END IF
382 380 CONTINUE
383
383
384 JJ = JJ + IB
385 ELSE IF( MYROW.EQ.ICURROW ) THEN
385
386 II = II + IB
387 END IF
388
389 ICURROW = MOD( ICURROW + 1 , NPROW )
390 ICURCOL = MOD( ICURCOL + 1 , NPCOL )
391
392 390 CONTINUE
393
393
394 ELSE
395
396 * Handle first block separately
397
397
398 IB = IN - IA + 1
399
400 IF( MYCOL.EQ.IACOL ) THEN
400
401 DO 400 K =(JJ - 1)*LDA ,(JJ + IB - 2)*LDA , LDA
401
402 IF( MYROW.EQ.IAROW ) THEN
402
403 IF( REAL( A( II + K ) ).NE.ZERO ) THEN
403
404 ABSA = ABS( REAL( A( II + K ) ) )
405 IF( SCALE.LT.ABSA ) THEN
405
406 SUM = ONE + SUM * ( SCALE / ABSA )**2
407 SCALE = ABSA
408 ELSE
408
409 SUM = SUM + ( ABSA / SCALE )**2
410 END IF
411 END IF
412 II = II + 1
413 END IF
414 CALL CLASSQ( IIA + NP - II , A( II + K ) , 1 , SCALE , SUM )
415 CALL CLASSQ( IIA + NP - II , A( II + K ) , 1 , SCALE , SUM )
416 400 CONTINUE
417
417
418 JJ = JJ + IB
419 ELSE IF( MYROW.EQ.IAROW ) THEN
419
420 II = II + IB
421 END IF
422
423 ICURROW = MOD( IAROW + 1 , NPROW )
424 ICURCOL = MOD( IACOL + 1 , NPCOL )
425
426 * Loop over rows / columns of global matrix.
427
428 DO 420 I = IN + 1 , IA + N - 1 , DESCA( MB_ )
428
429 IB = MIN( DESCA( MB_ ) , IA + N - I )
430
431 IF( MYCOL.EQ.ICURCOL ) THEN
431
432 DO 410 K =(JJ - 1)*LDA ,(JJ + IB - 2)*LDA , LDA
432
433 IF( MYROW.EQ.ICURROW ) THEN
433
434 IF( REAL( A( II + K ) ).NE.ZERO ) THEN
434
435 ABSA = ABS( REAL( A( II + K ) ) )
436 IF( SCALE.LT.ABSA ) THEN
436
437 SUM = ONE + SUM * ( SCALE / ABSA )**2
438 SCALE = ABSA
439 ELSE
439
440 SUM = SUM + ( ABSA / SCALE )**2
441 END IF
442 END IF
443 II = II + 1
444 END IF
445 CALL CLASSQ( IIA + NP - II , A( II + K ) , 1 , SCALE , SUM )
446 CALL CLASSQ( IIA + NP - II , A( II + K ) , 1 , SCALE , SUM )
447 410 CONTINUE
448
448
449 JJ = JJ + IB
450 ELSE IF( MYROW.EQ.ICURROW ) THEN
450
451 II = II + IB
452 END IF
453
454 ICURROW = MOD( ICURROW + 1 , NPROW )
455 ICURCOL = MOD( ICURCOL + 1 , NPCOL )
456
457 420 CONTINUE
458
458
459 END IF
460
461 * Perform the global scaled sum
462
463 RWORK( 1 ) = SCALE
464 RWORK( 2 ) = SUM
465
466 CALL PSTREECOMB( ICTXT , 'All' , 2 , RWORK , IAROW , IACOL ,
467 $ SCOMBSSQ )
468 VALUE = RWORK( 1 ) * SQRT( RWORK( 2 ) )
469
470 END IF
471
472 * Broadcast the result to the other processes
473
474 IF( MYROW.EQ.IAROW .AND. MYCOL.EQ.IACOL ) THEN
474
475 CALL SGEBS2D( ICTXT , 'All' , ' ' , 1 , 1 , VALUE , 1 )
476 ELSE
476
477 CALL SGEBR2D( ICTXT , 'All' , ' ' , 1 , 1 , VALUE , 1 , IAROW ,
478 $ IACOL )
479 END IF
480
481 PCLANHE = VALUE
482
483 RETURN
484
485 * End of PCLANHE
486
487 END88
89
|
|
Variables in Routine PCLANHE()
| Summary Report |
| Data Type | Quantity | Size(byte) |
| CHARACTER | 2 | 2 |
| COMPLEX | 1 | 4 |
| INTEGER | 26 | 104 |
| REAL | 9 | 36 |
| TOTAL | 38 | 146 |
List of Variables
CHARACTER
COMPLEX
INTEGER
| BLOCK_CYCLIC_2D | CSRC_ | CTXT_ | DESCA( * ) | DLEN_ |
| DTYPE_ | I | IA | IB | ICURCOL |
| ICURROW | II | IOFFA | JA | JJ |
| K | LL | LLD_ | M_ | MB_ |
| N | N_ | NB_ | NP | NQ |
| RSRC_ | | | | |
REAL
| ABSA | ONE | PCLANHE | RWORK | SCALE |
| SUM | VALUE | WORK( * ) | ZERO | |
Variables Dependence Graph Put the mouse over a right hand side variable to display the corresponding line of the dependence | | - | | - | - | | ABSA | <--- | AABSA = ABS( REAL( A( II+K ) ) ){2ABSA = ABS( REAL( A( II+K ) ) ), 3ABSA = ABS( REAL( A( II+K ) ) ), 4ABSA = ABS( REAL( A( II+K ) ) )}, IIABSA = ABS( REAL( A( II+K ) ) ){2ABSA = ABS( REAL( A( II+K ) ) ), 3ABSA = ABS( REAL( A( II+K ) ) ), 4ABSA = ABS( REAL( A( II+K ) ) )}, KABSA = ABS( REAL( A( II+K ) ) ){2ABSA = ABS( REAL( A( II+K ) ) ), 3ABSA = ABS( REAL( A( II+K ) ) ), 4ABSA = ABS( REAL( A( II+K ) ) )} |
| I | <--- | IADO 360 I = IN+1, IA+N-1, DESCA( MB_ ){2DO 390 I = IN+1, IA+N-1, DESCA( MB_ ), 3DO 420 I = IN+1, IA+N-1, DESCA( MB_ )}, MB_DO 360 I = IN+1, IA+N-1, DESCA( MB_ ){2DO 390 I = IN+1, IA+N-1, DESCA( MB_ ), 3DO 420 I = IN+1, IA+N-1, DESCA( MB_ )}, NDO 360 I = IN+1, IA+N-1, DESCA( MB_ ){2DO 390 I = IN+1, IA+N-1, DESCA( MB_ ), 3DO 420 I = IN+1, IA+N-1, DESCA( MB_ )}, DESCADO 360 I = IN+1, IA+N-1, DESCA( MB_ ){2DO 390 I = IN+1, IA+N-1, DESCA( MB_ ), 3DO 420 I = IN+1, IA+N-1, DESCA( MB_ )} |
| IB | <--- | IAIB = IN-IA+1{2IB = MIN( DESCA( MB_ ), IA+N-I ), 3IB = IN-IA+1, 4IB = MIN( DESCA( MB_ ), IA+N-I ), 5IB = IN-IA+1, 6IB = MIN( DESCA( MB_ ), IA+N-I )}, MB_IB = MIN( DESCA( MB_ ), IA+N-I ){2IB = MIN( DESCA( MB_ ), IA+N-I ), 3IB = MIN( DESCA( MB_ ), IA+N-I )}, NIB = MIN( DESCA( MB_ ), IA+N-I ){2IB = MIN( DESCA( MB_ ), IA+N-I ), 3IB = MIN( DESCA( MB_ ), IA+N-I )}, DESCAIB = MIN( DESCA( MB_ ), IA+N-I ){2IB = MIN( DESCA( MB_ ), IA+N-I ), 3IB = MIN( DESCA( MB_ ), IA+N-I )}, IIB = MIN( DESCA( MB_ ), IA+N-I ){2IB = MIN( DESCA( MB_ ), IA+N-I ), 3IB = MIN( DESCA( MB_ ), IA+N-I )} |
| ICURCOL | <--- | ICURCOLICURCOL = MOD( ICURCOL+1, NPCOL ){2ICURCOL = MOD( ICURCOL+1, NPCOL ), 3ICURCOL = MOD( ICURCOL+1, NPCOL )} |
| ICURROW | <--- | ICURROWICURROW = MOD( ICURROW+1, NPROW ){2ICURROW = MOD( ICURROW+1, NPROW ), 3ICURROW = MOD( ICURROW+1, NPROW )} |
| II | <--- | IBII = II + IB{2II = II + IB, 3II = II + IB, 4II = II + IB, 5II = II + IB, 6II = II + IB}, IIII = II + IB{2II = II + IB, 3II = II + 1, 4II = II + IB, 5II = II + 1, 6II = II + IB, 7II = II + 1, 8II = II + IB, 9II = II + 1, 10II = II + IB} |
| IOFFA | <--- | IOFFAIOFFA = IOFFA + LDA{2IOFFA = IOFFA + LDA}, JJIOFFA = (JJ-1)*LDA{2IOFFA = ( JJ - 1 ) * LDA} |
| JJ | <--- | IBJJ = JJ + IB{2JJ = JJ + IB, 3JJ = JJ + IB, 4JJ = JJ + IB, 5JJ = JJ + IB, 6JJ = JJ + IB}, JJJJ = JJ + IB{2JJ = JJ + IB, 3JJ = JJ + IB, 4JJ = JJ + IB, 5JJ = JJ + IB, 6JJ = JJ + IB} |
| K | <--- | IBDO 290 K = 0, IB-1{2DO 310 K = II, II+IB-1, 3DO 330 K = 0, IB-1, 4DO 350 K = II, II+IB-1, 5DO 370 K = (JJ-1)*LDA, (JJ+IB-2)*LDA, LDA, 6DO 380 K = (JJ-1)*LDA, (JJ+IB-2)*LDA, LDA, 7DO 400 K = (JJ-1)*LDA, (JJ+IB-2)*LDA, LDA, 8DO 410 K = (JJ-1)*LDA, (JJ+IB-2)*LDA, LDA}, IIDO 310 K = II, II+IB-1{2DO 350 K = II, II+IB-1}, JJDO 370 K = (JJ-1)*LDA, (JJ+IB-2)*LDA, LDA{2DO 380 K = (JJ-1)*LDA, (JJ+IB-2)*LDA, LDA, 3DO 400 K = (JJ-1)*LDA, (JJ+IB-2)*LDA, LDA, 4DO 410 K = (JJ-1)*LDA, (JJ+IB-2)*LDA, LDA} |
| LL | <--- | IIDO 280 LL = II+1, IIA+NP-1{2DO 285 LL = II, IIA+NP-1, 3DO 320 LL = II+1, IIA+NP-1, 4DO 325 LL = II, IIA+NP-1}, JJDO 300 LL = (JJA-1)*LDA, (JJ-2)*LDA, LDA{2DO 340 LL = (JJA-1)*LDA, (JJ-2)*LDA, LDA}, NPDO 280 LL = II+1, IIA+NP-1{2DO 285 LL = II, IIA+NP-1, 3DO 320 LL = II+1, IIA+NP-1, 4DO 325 LL = II, IIA+NP-1} |
| PCLANHE | <--- | VALUEPCLANHE = VALUE |
| RWORK | <--- | SCALERWORK( 1 ) = SCALE, SUMRWORK( 2 ) = SUM |
| SCALE | <--- | ABSASCALE = ABSA{2SCALE = ABSA, 3SCALE = ABSA, 4SCALE = ABSA}, ZEROSCALE = ZERO |
| SUM | <--- | ASUM = ABS( REAL( A( IOFFA+II ) ) ){2SUM = SUM + ABS( A( IOFFA+LL ) ), 3SUM = SUM + ABS( A( IOFFA+LL ) ), 4SUM = SUM + ABS( A( K+LL ) ), 5SUM = ABS( REAL( A( II+IOFFA ) ) ), 6SUM = SUM + ABS( A( LL+IOFFA ) ), 7SUM = ABS( REAL( A( II+IOFFA ) ) ), 8SUM = SUM + ABS( A( LL+IOFFA ) ), 9SUM = SUM + ABS( A( K+LL ) )}, IISUM = ABS( REAL( A( IOFFA+II ) ) ){2SUM = ABS( REAL( A( II+IOFFA ) ) ), 3SUM = ABS( REAL( A( II+IOFFA ) ) )}, IOFFASUM = ABS( REAL( A( IOFFA+II ) ) ){2SUM = SUM + ABS( A( IOFFA+LL ) ), 3SUM = SUM + ABS( A( IOFFA+LL ) ), 4SUM = ABS( REAL( A( II+IOFFA ) ) ), 5SUM = SUM + ABS( A( LL+IOFFA ) ), 6SUM = ABS( REAL( A( II+IOFFA ) ) ), 7SUM = SUM + ABS( A( LL+IOFFA ) )}, KSUM = SUM + ABS( A( K+LL ) ){2SUM = SUM + ABS( A( K+LL ) )}, LLSUM = SUM + ABS( A( IOFFA+LL ) ){2SUM = SUM + ABS( A( IOFFA+LL ) ), 3SUM = SUM + ABS( A( K+LL ) ), 4SUM = SUM + ABS( A( LL+IOFFA ) ), 5SUM = SUM + ABS( A( LL+IOFFA ) ), 6SUM = SUM + ABS( A( K+LL ) )}, ABSASUM = ONE + SUM * ( SCALE / ABSA )**2{2SUM = SUM + ( ABSA / SCALE )**2, 3SUM = ONE + SUM*( SCALE / ABSA )**2, 4SUM = SUM + ( ABSA / SCALE )**2, 5SUM = ONE + SUM * ( SCALE / ABSA )**2, 6SUM = SUM + ( ABSA / SCALE )**2, 7SUM = ONE + SUM * ( SCALE / ABSA )**2, 8SUM = SUM + ( ABSA / SCALE )**2}, ONESUM = ONE{2SUM = ONE + SUM * ( SCALE / ABSA )**2, 3SUM = ONE + SUM*( SCALE / ABSA )**2, 4SUM = ONE + SUM * ( SCALE / ABSA )**2, 5SUM = ONE + SUM * ( SCALE / ABSA )**2}, SCALESUM = ONE + SUM * ( SCALE / ABSA )**2{2SUM = SUM + ( ABSA / SCALE )**2, 3SUM = ONE + SUM*( SCALE / ABSA )**2, 4SUM = SUM + ( ABSA / SCALE )**2, 5SUM = ONE + SUM * ( SCALE / ABSA )**2, 6SUM = SUM + ( ABSA / SCALE )**2, 7SUM = ONE + SUM * ( SCALE / ABSA )**2, 8SUM = SUM + ( ABSA / SCALE )**2}, SUMSUM = SUM + ABS( A( IOFFA+LL ) ){2SUM = SUM + ABS( A( IOFFA+LL ) ), 3SUM = SUM + ABS( A( K+LL ) ), 4SUM = SUM + ABS( A( LL+IOFFA ) ), 5SUM = SUM + ABS( A( LL+IOFFA ) ), 6SUM = SUM + ABS( A( K+LL ) ), 7SUM = ONE + SUM * ( SCALE / ABSA )**2, 8SUM = SUM + ( ABSA / SCALE )**2, 9SUM = ONE + SUM*( SCALE / ABSA )**2, 10SUM = SUM + ( ABSA / SCALE )**2, 11SUM = ONE + SUM * ( SCALE / ABSA )**2, 12SUM = SUM + ( ABSA / SCALE )**2, 13SUM = ONE + SUM * ( SCALE / ABSA )**2, 14SUM = SUM + ( ABSA / SCALE )**2}, ZEROSUM = ZERO{2SUM = ZERO, 3SUM = ZERO, 4SUM = ZERO} |
| VALUE | <--- | NQVALUE = WORK( ISAMAX( NQ, WORK( ICSR0 ), 1 ) ), RWORKVALUE = RWORK( 1 ) * SQRT( RWORK( 2 ) ), WORKVALUE = WORK( ISAMAX( NQ, WORK( ICSR0 ), 1 ) ), ZEROVALUE = ZERO |
| WORK | <--- | SUMWORK( JJ+K-JJA+ICSR0 ) = SUM{2WORK( K-IIA+IRSC0 ) = SUM, 3WORK( JJ+K-JJA+ICSR0 ) = SUM, 4WORK(K-IIA+IRSC0) = SUM} |
|
|
Analysis elements of the routine PCLANHE() Put the mouse over each element to display detailed matching information
Assigned variables |
| | | A , ABSA , BLOCK_CYCLIC_2D , CSRC_ , CTXT_ , DLEN_ , DTYPE_ , i , IA , IB , ICURCOL , ICURROW , II , IOFFA , JA , JJ , K , LL , LLD_ , M_ , MB_ , N , N_ , NB_ , NORM , NP , NQ , ONE , PCLANHE , RSRC_ , RWORK , SCALE , SUM , UPLO , VALUE , ZERO |
|
Active variables |
| | | A , ABSA , BLOCK_CYCLIC_2D , CSRC_ , CTXT_ , DESCA , DLEN_ , DTYPE_ , i , IA , IB , ICURCOL , ICURROW , II , IOFFA , JA , JJ , K , LL , LLD_ , M_ , MB_ , N , N_ , NB_ , NORM , NP , NQ , one , PCLANHE , RSRC_ , RWORK , SCALE , sum , UPLO , value , WORK , zero |
|
Accessed arrays [ array name : associated index ] |
| | A | : * , i,j , i,j , IA:IA+N-1,JA:JA+N-1 , II+IOFFA , II+IOFFA , II+K , II+K , II+K , II+K , II+K , II+K , II+K , II+K , II+K , II+K , II+K , II+K , IIA+K , IIA+K , IIA+K , IIA+K , IOFFA+II , IOFFA+LL , IOFFA+LL , K+LL , K+LL , LL+IOFFA , LL+IOFFA |
| | DESCA | : * , CSRC_ , CTXT_ , DTYPE_ , LLD_ , M_ , MB_ , MB_ , MB_ , MB_ , MB_ , MB_ , MB_ , MB_ , N_ , NB_ , RSRC_ |
| | RWORK | : 1 , 1 , 2 , 2 |
| | WORK | : * , ICSR , ICSR0 , ICSR0 , IRSC , IRSC , IRSC+NP , IRSR , IRSR0 , ISAMAX( NQ, WORK( ICSR0 ), 1 ) , JJ+K-JJA+ICSR0 , JJ+K-JJA+ICSR0 , K-IIA+IRSC0 , K-IIA+IRSC0 |
|
Conditional statements [ statement : associated predicate ] |
| | do | : ( 290 K = 0 , IB - 1 ) , ( 280 LL = II + 1 , IIA + NP - 1 ) , ( 285 LL = II , IIA + NP - 1 ) , ( 310 K = II , II + IB - 1 ) , ( 300 LL = (JJA - 1)*LDA , (JJ - 2)*LDA , LDA ) , ( 360 I = IN + 1 , IA + N - 1 , DESCA( MB_ ) ) , ( 330 K = 0 , IB - 1 ) , ( 320 LL = II + 1 , IIA + NP - 1 ) , ( 325 LL = II , IIA + NP - 1 ) , ( 350 K = II , II + IB - 1 ) , ( 340 LL = (JJA - 1)*LDA , (JJ - 2)*LDA , LDA ) , ( 370 K = (JJ - 1)*LDA , (JJ + IB - 2)*LDA , LDA ) , ( 390 I = IN + 1 , IA + N - 1 , DESCA( MB_ ) ) , ( 380 K = (JJ - 1)*LDA , (JJ + IB - 2)*LDA , LDA ) , ( 400 K = (JJ - 1)*LDA , (JJ + IB - 2)*LDA , LDA ) , ( 420 I = IN + 1 , IA + N - 1 , DESCA( MB_ ) ) , ( 410 K = (JJ - 1)*LDA , (JJ + IB - 2)*LDA , LDA ) |
| | for | : ( any 2D block cyclicly distributed array. ) , ( these quantities may be computed by : ) , ( the distributed matrix A. ) |
| | if | : ( K were distributed over the p processes of its ) , ( K were distributed over the q processes of ) , ( UPLO = 'U' , the leading N - by - N upper triangular part of ) , ( UPLO = 'L' , the leading ) , ( NORM = 'M' or 'm' (not referenced) , ) , ( NORM = '1' , 'O' , 'o' , 'I' or 'i' , ) , ( NPROW.NE.NPCOL ) , ( NORM = 'F' , 'f' , 'E' or 'e' (not referenced) , ) , ( MYCOL.EQ.IACOL ) , ( MYROW.EQ.IAROW ) , ( IIA+NP.GT.II ) , ( MYROW.EQ.IAROW ) , ( MYROW.EQ.IAROW ) , ( MYROW.EQ.IAROW ) , ( JJ.GT.JJA ) , ( MYCOL.EQ.IACOL ) , ( MYCOL.EQ.IACOL ) , ( MYCOL.EQ.ICURCOL ) , ( MYROW.EQ.ICURROW ) , ( IIA+NP.GT.II ) , ( II.EQ.IIA + NP - 1 ) , ( MYROW.EQ.ICURROW ) , ( MYROW.EQ.ICURROW ) , ( MYROW.EQ.ICURROW ) , ( JJ.GT.JJA ) , ( MYCOL.EQ.ICURCOL ) , ( MYCOL.EQ.ICURCOL ) , ( MYCOL.EQ.IACOL ) , ( MYROW.EQ.IAROW ) , ( MYROW.EQ.IAROW ) , ( MYCOL.EQ.IACOL ) , ( NQ.LT.1 ) , ( (LSAME( NORM , 'F' ) .OR. LSAME( NORM , 'E' ) ) ) , ( (LSAME( UPLO , 'U' ) ) ) , ( MYCOL.EQ.IACOL ) , ( MYROW.EQ.IAROW ) , ( (REAL( A( II + K ) ).NE.ZERO ) ) , ( SCALE.LT.ABSA ) , ( MYROW.EQ.IAROW ) , ( MYCOL.EQ.ICURCOL ) , ( MYROW.EQ.ICURROW ) , ( (REAL( A( II + K ) ).NE.ZERO ) ) , ( SCALE.LT.ABSA ) , ( MYROW.EQ.ICURROW ) , ( MYCOL.EQ.IACOL ) , ( MYROW.EQ.IAROW ) , ( (REAL( A( II + K ) ).NE.ZERO ) ) , ( SCALE.LT.ABSA ) , ( MYROW.EQ.IAROW ) , ( MYCOL.EQ.ICURCOL ) , ( MYROW.EQ.ICURROW ) , ( (REAL( A( II + K ) ).NE.ZERO ) ) , ( SCALE.LT.ABSA ) , ( MYROW.EQ.ICURROW ) , ( MYROW.EQ.IAROW .AND. MYCOL.EQ.IACOL ) |
|
| List of variables | A( * ) ABSA BLOCK_CYCLIC_2D CSRC_ CTXT_ DESCA( * ) DLEN_
| DTYPE_ I IA IB ICURCOL ICURROW II IOFFA
| JA JJ K LL LLD_ M_ MB_ N
| N_ NB_ NORM NP NQ ONE PCLANHE RSRC_
| RWORK SCALE SUM UPLO VALUE WORK( * ) ZERO | | close
| |
A( * )
ABSA
BLOCK_CYCLIC_2D
CSRC_
CTXT_
DESCA( * )
DLEN_
DTYPE_
I
IA
IB
ICURCOL
ICURROW
II
IOFFA
JA
JJ
K
LL
LLD_
M_
MB_
N
N_
NB_
NORM
NP
NQ
ONE
PCLANHE
RSRC_
RWORK
SCALE
SUM
UPLO
VALUE
WORK( * )
ZERO
| |