|
|
| |
| # lines: |
414 | | # code: |
414 | | # comment: | 0 | |
# blank: | 0 |
| # Variables: | 53 |
| # Callers: | 1 |
| # Callings: | 2 |
| # Words: | 143 |
| # Keywords: | 72 |
|
|
|
|
|
..
.. Array Arguments ..
..
Purpose
=======
PZGEBRD reduces a complex general M-by-N distributed matrix
sub( A ) = A(IA:IA+M-1,JA:JA+N-1) to upper or lower bidiagonal
form B by an unitary transformation: Q' * sub( A ) * P = B.
If M >= N, B is upper bidiagonal; if M < N, B is lower bidiagonal.
Notes
=====
Each global data object is described by an associated description
vector. This vector stores the information required to establish
the mapping between an object element and its corresponding process
and memory location.
Let A be a generic term for any 2D block cyclicly distributed array.
Such a global array has an associated description vector DESCA.
In the following comments, the character _ should be read as
"of the global array".
NOTATION STORED IN EXPLANATION
--------------- -------------- --------------------------------------
DTYPE_A(global) DESCA( DTYPE_ )The descriptor type. In this case,
DTYPE_A = 1.
CTXT_A (global) DESCA( CTXT_ ) The BLACS context handle, indicating
the BLACS process grid A is distribu-
ted over. The context itself is glo-
bal, but the handle (the integer
value) may vary.
M_A (global) DESCA( M_ ) The number of rows in the global
array A.
N_A (global) DESCA( N_ ) The number of columns in the global
array A.
MB_A (global) DESCA( MB_ ) The blocking factor used to distribute
the rows of the array.
NB_A (global) DESCA( NB_ ) The blocking factor used to distribute
the columns of the array.
RSRC_A (global) DESCA( RSRC_ ) The process row over which the first
row of the array A is distributed.
CSRC_A (global) DESCA( CSRC_ ) The process column over which the
first column of the array A is
distributed.
LLD_A (local) DESCA( LLD_ ) The leading dimension of the local
array. LLD_A >= MAX(1,LOCr(M_A)).
Let K be the number of rows or columns of a distributed matrix,
and assume that its process grid has dimension p x q.
LOCr( K ) denotes the number of elements of K that a process
would receive if K were distributed over the p processes of its
process column.
Similarly, LOCc( K ) denotes the number of elements of K that a
process would receive if K were distributed over the q processes of
its process row.
The values of LOCr() and LOCc() may be determined via a call to the
ScaLAPACK tool function, NUMROC:
LOCr( M ) = NUMROC( M, MB_A, MYROW, RSRC_A, NPROW ),
LOCc( N ) = NUMROC( N, NB_A, MYCOL, CSRC_A, NPCOL ).
An upper bound for these quantities may be computed by:
LOCr( M ) <= ceil( ceil(M/MB_A)/NPROW )*MB_A
LOCc( N ) <= ceil( ceil(N/NB_A)/NPCOL )*NB_A
Arguments
=========
M (global input) INTEGER
The number of rows to be operated on, i.e. the number of rows
of the distributed submatrix sub( A ). M >= 0.
N (global input) INTEGER
The number of columns to be operated on, i.e. the number of
columns of the distributed submatrix sub( A ). N >= 0.
A (local input/local output) COMPLEX*16 pointer into the
local memory to an array of dimension (LLD_A,LOCc(JA+N-1)).
On entry, this array contains the local pieces of the
general distributed matrix sub( A ). On exit, if M >= N,
the diagonal and the first superdiagonal of sub( A ) are
overwritten with the upper bidiagonal matrix B; the elements
below the diagonal, with the array TAUQ, represent the
unitary matrix Q as a product of elementary reflectors, and
the elements above the first superdiagonal, with the array
TAUP, represent the orthogonal matrix P as a product of
elementary reflectors. If M < N, the diagonal and the first
subdiagonal are overwritten with the lower bidiagonal
matrix B; the elements below the first subdiagonal, with the
array TAUQ, represent the unitary matrix Q as a product of
elementary reflectors, and the elements above the diagonal,
with the array TAUP, represent the orthogonal matrix P as a
product of elementary reflectors. See Further Details.
IA (global input) INTEGER
The row index in the global array A indicating the first
row of sub( A ).
JA (global input) INTEGER
The column index in the global array A indicating the
first column of sub( A ).
DESCA (global and local input) INTEGER array of dimension DLEN_.
The array descriptor for the distributed matrix A.
D (local output) DOUBLE PRECISION array, dimension
LOCc(JA+MIN(M,N)-1) if M >= N; LOCr(IA+MIN(M,N)-1) otherwise.
The distributed diagonal elements of the bidiagonal matrix
B: D(i) = A(i,i). D is tied to the distributed matrix A.
E (local output) DOUBLE PRECISION array, dimension
LOCr(IA+MIN(M,N)-1) if M >= N; LOCc(JA+MIN(M,N)-2) otherwise.
The distributed off-diagonal elements of the bidiagonal
distributed matrix B:
if m >= n, E(i) = A(i,i+1) for i = 1,2,...,n-1;
if m < n, E(i) = A(i+1,i) for i = 1,2,...,m-1.
E is tied to the distributed matrix A.
TAUQ (local output) COMPLEX*16 array dimension
LOCc(JA+MIN(M,N)-1). The scalar factors of the elementary
reflectors which represent the unitary matrix Q. TAUQ is
tied to the distributed matrix A. See Further Details.
TAUP (local output) COMPLEX*16 array, dimension
LOCr(IA+MIN(M,N)-1). The scalar factors of the elementary
reflectors which represent the unitary matrix P. TAUP is
tied to the distributed matrix A. See Further Details.
WORK (local workspace/local output) COMPLEX*16 array,
dimension (LWORK)
On exit, WORK( 1 ) returns the minimal and optimal LWORK.
LWORK (local or global input) INTEGER
The dimension of the array WORK.
LWORK is local input and must be at least
LWORK >= NB*( MpA0 + NqA0 + 1 ) + NqA0
where NB = MB_A = NB_A,
IROFFA = MOD( IA-1, NB ), ICOFFA = MOD( JA-1, NB ),
IAROW = INDXG2P( IA, NB, MYROW, RSRC_A, NPROW ),
IACOL = INDXG2P( JA, NB, MYCOL, CSRC_A, NPCOL ),
MpA0 = NUMROC( M+IROFFA, NB, MYROW, IAROW, NPROW ),
NqA0 = NUMROC( N+ICOFFA, NB, MYCOL, IACOL, NPCOL ).
INDXG2P and NUMROC are ScaLAPACK tool functions;
MYROW, MYCOL, NPROW and NPCOL can be determined by calling
the subroutine BLACS_GRIDINFO.
If LWORK = -1, then LWORK is global input and a workspace
query is assumed; the routine only calculates the minimum
and optimal size for all work arrays. Each of these
values is returned in the first entry of the corresponding
work array, and no error message is issued by PXERBLA.
INFO (global output) INTEGER
= 0: successful exit
< 0: If the i-th argument is an array and the j-entry had
an illegal value, then INFO = -(i*100+j), if the i-th
argument is a scalar and had an illegal value, then
INFO = -i.
Further Details
===============
The matrices Q and P are represented as products of elementary
reflectors:
If m >= n,
Q = H(1) H(2) . . . H(n) and P = G(1) G(2) . . . G(n-1)
Each H(i) and G(i) has the form:
H(i) = I - tauq * v * v' and G(i) = I - taup * u * u'
where tauq and taup are complex scalars, and v and u are complex
vectors;
v(1:i-1) = 0, v(i) = 1, and v(i+1:m) is stored on exit in
A(ia+i:ia+m-1,ja+i-1);
u(1:i) = 0, u(i+1) = 1, and u(i+2:n) is stored on exit in
A(ia+i-1,ja+i+1:ja+n-1);
tauq is stored in TAUQ(ja+i-1) and taup in TAUP(ia+i-1).
If m < n,
Q = H(1) H(2) . . . H(m-1) and P = G(1) G(2) . . . G(m)
Each H(i) and G(i) has the form:
H(i) = I - tauq * v * v' and G(i) = I - taup * u * u'
where tauq and taup are complex scalars, and v and u are complex
vectors;
v(1:i) = 0, v(i+1) = 1, and v(i+2:m) is stored on exit in
A(ia+i+1:ia+m-1,ja+i-1);
u(1:i-1) = 0, u(i) = 1, and u(i+1:n) is stored on exit in
A(ia+i-1,ja+i:ja+n-1);
tauq is stored in TAUQ(ja+i-1) and taup in TAUP(ia+i-1).
The contents of sub( A ) on exit are illustrated by the following
examples:
m = 6 and n = 5 (m > n): m = 5 and n = 6 (m < n):
( d e u1 u1 u1 ) ( d u1 u1 u1 u1 u1 )
( v1 d e u2 u2 ) ( e d u2 u2 u2 u2 )
( v1 v2 d e u3 ) ( v1 e d u3 u3 u3 )
( v1 v2 v3 d e ) ( v1 v2 e d u4 u4 )
( v1 v2 v3 v4 d ) ( v1 v2 v3 e d u5 )
( v1 v2 v3 v4 v5 )
where d and e denote diagonal and off-diagonal elements of B, vi
denotes an element of the vector defining H(i), and ui an element of
the vector defining G(i).
Alignment requirements
======================
The distributed submatrix sub( A ) must verify some alignment proper-
ties, namely the following expressions should be true:
( MB_A.EQ.NB_A .AND. IROFFA.EQ.ICOFFA )
=====================================================================
.. Parameters ..
|
|
|
|
001 SUBROUTINE PZGEBRD( M , N , A , IA , JA , DESCA , D , E , TAUQ , TAUP ,
002 $WORK , LWORK , INFO )
003
004 * -- ScaLAPACK routine(version 1.7) --
005 * University of Tennessee , Knoxville , Oak Ridge National Laboratory ,
006 * and University of California , Berkeley.
007 * May 25 , 2001
008
009 * .. Scalar Arguments ..
010 INTEGER IA , INFO , JA , LWORK , M , N
011 INTEGER BLOCK_CYCLIC_2D , CSRC_ , CTXT_ , DLEN_ , DTYPE_ ,
012 $LLD_ , MB_ , M_ , NB_ , N_ , RSRC_
013 PARAMETER( BLOCK_CYCLIC_2D = 1 , DLEN_ = 9 , DTYPE_ = 1 ,
014 $CTXT_ = 2 , M_ = 3 , N_ = 4 , MB_ = 5 , NB_ = 6 ,
015 $RSRC_ = 7 , CSRC_ = 8 , LLD_ = 9 )
016 COMPLEX*16 ONE
017 PARAMETER( ONE =( 1.0D + 0 , 0.0D + 0 ) )
018 * ..
019 * .. Local Scalars ..
020 LOGICAL LQUERY
021 CHARACTER COLCTOP , ROWCTOP
022 INTEGER I , IACOL , IAROW , ICTXT , IINFO , IOFF , IPW , IPY ,
023 $IW , J , JB , JS , JW , K , L , LWMIN , MN , MP , MYCOL ,
024 $MYROW , NB , NPCOL , NPROW , NQ
025 * ..
026 * .. Local Arrays ..
027 INTEGER DESCWX( DLEN_ ) , DESCWY( DLEN_ ) , IDUM1( 1 ) ,
028 $IDUM2( 1 )
029 * ..
030 * .. External Subroutines ..
031 EXTERNAL BLACS_GRIDINFO , CHK1MAT , DESCSET , PCHK1MAT ,
032 $PB_TOPGET , PB_TOPSET , PXERBLA , PZELSET ,
033 $PZGEBD2 , PZGEMM , PZLABRD
034 * ..
035 * .. External Functions ..
036 INTEGER INDXG2L , INDXG2P , NUMROC
037 EXTERNAL INDXG2L , INDXG2P , NUMROC
038 * ..
039 * .. Intrinsic Functions ..
040 INTRINSIC DCMPLX , DBLE , MAX , MIN , MOD
041 * ..
042 * .. Executable Statements ..
043
044 * Get grid parameters
045
046 ICTXT = DESCA( CTXT_ )
047 CALL BLACS_GRIDINFO( ICTXT , NPROW , NPCOL , MYROW , MYCOL )
048
049 * Test the input parameters
050
051 INFO = 0
052 IF( NPROW.EQ. - 1 ) THEN
052
053 INFO = - (600 + CTXT_)
054 ELSE
054
055 CALL CHK1MAT( M , 1 , N , 2 , IA , JA , DESCA , 6 , INFO )
056 IF( INFO.EQ.0 ) THEN
056
057 NB = DESCA( MB_ )
058 IOFF = MOD( IA - 1 , DESCA( MB_ ) )
059 IAROW = INDXG2P( IA , NB , MYROW , DESCA( RSRC_ ) , NPROW )
060 IACOL = INDXG2P( JA , NB , MYCOL , DESCA( CSRC_ ) , NPCOL )
061 MP = NUMROC( M + IOFF , NB , MYROW , IAROW , NPROW )
062 NQ = NUMROC( N + IOFF , NB , MYCOL , IACOL , NPCOL )
063 LWMIN = NB*( MP + NQ + 1 ) + NQ
064
065 WORK( 1 ) = DCMPLX( DBLE( LWMIN ) )
066 LQUERY =( LWORK.EQ. - 1 )
067 IF( IOFF.NE.MOD( JA - 1 , DESCA( NB_ ) ) ) THEN
067
068 INFO = - 5
069 ELSE IF( NB.NE.DESCA( NB_ ) ) THEN
069
070 INFO = - (600 + NB_)
071 ELSE IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) THEN
071
072 INFO = - 12
073 END IF
074 END IF
075 IF( LQUERY ) THEN
075
076 IDUM1( 1 ) = - 1
077 ELSE
077
078 IDUM1( 1 ) = 1
079 END IF
080 IDUM2( 1 ) = 12
081 CALL PCHK1MAT( M , 1 , N , 2 , IA , JA , DESCA , 6 , 1 , IDUM1 , IDUM2 ,
082 $ INFO )
083 END IF
084
085 IF( INFO.LT.0 ) THEN
085
086 CALL PXERBLA( ICTXT , 'PZGEBRD' , - INFO )
087 RETURN
088 ELSE IF( LQUERY ) THEN
088
089 RETURN
090 END IF
091
092 * Quick return if possible
093
094 MN = MIN( M , N )
095 IF( MN.EQ.0 )
095
096 $ RETURN
097
098 * Initialize parameters.
099
100 CALL PB_TOPGET( ICTXT , 'Combine' , 'Columnwise' , COLCTOP )
101 CALL PB_TOPGET( ICTXT , 'Combine' , 'Rowwise' , ROWCTOP )
102 CALL PB_TOPSET( ICTXT , 'Combine' , 'Columnwise' , '1 - tree' )
103 CALL PB_TOPSET( ICTXT , 'Combine' , 'Rowwise' , '1 - tree' )
104
105 IPY = MP * NB + 1
106 IPW = NQ * NB + IPY
107
108 CALL DESCSET( DESCWX , M + IOFF , NB , NB , NB , IAROW , IACOL , ICTXT ,
109 $ MAX( 1 , MP ) )
110 CALL DESCSET( DESCWY , NB , N + IOFF , NB , NB , IAROW , IACOL , ICTXT ,
111 $ NB )
112
113 MP = NUMROC( M + IA - 1 , NB , MYROW , DESCA( RSRC_ ) , NPROW )
114 NQ = NUMROC( N + JA - 1 , NB , MYCOL , DESCA( CSRC_ ) , NPCOL )
115 K = 1
116 JB = NB - IOFF
117 IW = IOFF + 1
118 JW = IOFF + 1
119
120 DO 10 L = 1 , MN + IOFF - NB , NB
120
121 I = IA + K - 1
122 J = JA + K - 1
123
124 * Reduce rows and columns i : i + nb - 1 to bidiagonal form and return
125 * the matrices X and Y which are needed to update the unreduced
126 * part of the matrix.
127
128 CALL PZLABRD ( M - K + 1 , N - K + 1 , JB , A , I , J , DESCA , D , E , TAUQ ,
129 $ TAUP , WORK , IW , JW , DESCWX , WORK( IPY ) , IW ,
130 $ JW , DESCWY , WORK( IPW ) )
131
132 * Update the trailing submatrix A(i + nb : ia + m - 1 , j + nb : ja + n - 1) , using
133 * an update of the form A := A - V*Y' - X*U'.
134
135 CALL PZGEMM( 'No transpose' , 'No transpose' , M - K - JB + 1 ,
136 $ N - K - JB + 1 , JB , - ONE , A , I + JB , J , DESCA ,
137 $ WORK( IPY ) , IW , JW + JB , DESCWY , ONE , A , I + JB ,
138 $ J + JB , DESCA )
139 CALL PZGEMM( 'No transpose' , 'No transpose' , M - K - JB + 1 ,
140 $ N - K - JB + 1 , JB , - ONE , WORK , IW + JB , JW , DESCWX , A , I ,
141 $ J + JB , DESCA , ONE , A , I + JB , J + JB , DESCA )
142
143 * Copy last off - diagonal elements of B back into sub( A ).
144
145 IF( M.GE.N ) THEN
145
146 JS = MIN( INDXG2L( I + JB - 1 , NB , 0 , DESCA( RSRC_ ) , NPROW ) ,
147 $ MP )
148 IF( JS.GT.0 )
148
149 $ CALL PZELSET( A , I + JB - 1 , J + JB , DESCA , DCMPLX( E( JS ) ) )
150 ELSE
150
151 JS = MIN( INDXG2L( J + JB - 1 , NB , 0 , DESCA( CSRC_ ) , NPCOL ) ,
152 $ NQ )
153 IF( JS.GT.0 )
153
154 $ CALL PZELSET( A , I + JB , J + JB - 1 , DESCA , DCMPLX( E( JS ) ) )
155 END IF
156
157 K = K + JB
158 JB = NB
159 IW = 1
160 JW = 1
161 DESCWX( M_ ) = DESCWX( M_ ) - JB
162 DESCWX( RSRC_ ) = MOD( DESCWX( RSRC_ ) + 1 , NPROW )
163 DESCWX( CSRC_ ) = MOD( DESCWX( CSRC_ ) + 1 , NPCOL )
164 DESCWY( N_ ) = DESCWY( N_ ) - JB
165 DESCWY( RSRC_ ) = MOD( DESCWY( RSRC_ ) + 1 , NPROW )
166 DESCWY( CSRC_ ) = MOD( DESCWY( CSRC_ ) + 1 , NPCOL )
167
168 10 CONTINUE
169
170 * Use unblocked code to reduce the remainder of the matrix.
171
171
172 CALL PZGEBD2 ( M - K + 1 , N - K + 1 , A , IA + K - 1 , JA + K - 1 , DESCA , D , E , TAUQ ,
173 $ TAUP , WORK , LWORK , IINFO )
174
175 CALL PB_TOPSET( ICTXT , 'Combine' , 'Columnwise' , COLCTOP )
176 CALL PB_TOPSET( ICTXT , 'Combine' , 'Rowwise' , ROWCTOP )
177
178 WORK( 1 ) = DCMPLX( DBLE( LWMIN ) )
179
180 RETURN
181
182 * End of PZGEBRD
183
184 END31
17
|
|
Variables in Routine PZGEBRD()
| Summary Report |
| Data Type | Quantity | Size(byte) |
| CHARACTER | 2 | 2 |
| COMPLEX*16 | 1 | ? |
| INTEGER | 48 | 196 |
| LOGICAL | 1 | 1 |
| REAL | 1 | 4 |
| TOTAL | 53 | 203 |
List of Variables
CHARACTER
COMPLEX*16
INTEGER
| BLOCK_CYCLIC_2D | CSRC_ | CTXT_ | DESCWX( DLEN_ ) | DESCWY( DLEN_ ) |
| DLEN_ | DTYPE_ | I | IA | IACOL |
| IAROW | ICTXT | IDUM1( 1 ) | IDUM2( 1 ) | IINFO |
| INDXG2L | INDXG2P | INFO | IOFF | IPW |
| IPY | IW | J | JA | JB |
| JS | JW | K | L | LLD_ |
| LWMIN | LWORK | M | M_ | MB_ |
| MN | MP | MYCOL | MYROW | N |
| N_ | NB | NB_ | NPCOL | NPROW |
| NQ | NUMROC | RSRC_ | | |
LOGICAL
REAL
Variables Dependence Graph Put the mouse over a right hand side variable to display the corresponding line of the dependence | | - | | - | - | | DESCWX | <--- | JBDESCWX( M_ ) = DESCWX( M_ ) - JB, CSRC_DESCWX( CSRC_ ) = MOD( DESCWX( CSRC_ ) + 1, NPCOL ), M_DESCWX( M_ ) = DESCWX( M_ ) - JB, NPCOLDESCWX( CSRC_ ) = MOD( DESCWX( CSRC_ ) + 1, NPCOL ), NPROWDESCWX( RSRC_ ) = MOD( DESCWX( RSRC_ ) + 1, NPROW ), DESCWXDESCWX( M_ ) = DESCWX( M_ ) - JB{2DESCWX( RSRC_ ) = MOD( DESCWX( RSRC_ ) + 1, NPROW ), 3DESCWX( CSRC_ ) = MOD( DESCWX( CSRC_ ) + 1, NPCOL )}, RSRC_DESCWX( RSRC_ ) = MOD( DESCWX( RSRC_ ) + 1, NPROW ) |
| DESCWY | <--- | JBDESCWY( N_ ) = DESCWY( N_ ) - JB, CSRC_DESCWY( CSRC_ ) = MOD( DESCWY( CSRC_ ) + 1, NPCOL ), N_DESCWY( N_ ) = DESCWY( N_ ) - JB, NPCOLDESCWY( CSRC_ ) = MOD( DESCWY( CSRC_ ) + 1, NPCOL ), NPROWDESCWY( RSRC_ ) = MOD( DESCWY( RSRC_ ) + 1, NPROW ), RSRC_DESCWY( RSRC_ ) = MOD( DESCWY( RSRC_ ) + 1, NPROW ), DESCWYDESCWY( N_ ) = DESCWY( N_ ) - JB{2DESCWY( RSRC_ ) = MOD( DESCWY( RSRC_ ) + 1, NPROW ), 3DESCWY( CSRC_ ) = MOD( DESCWY( CSRC_ ) + 1, NPCOL )} |
| I | <--- | IAI = IA + K - 1, KI = IA + K - 1 |
| IACOL | <--- | INDXG2PIACOL = INDXG2P( JA, NB, MYCOL, DESCA( CSRC_ ), NPCOL ), JAIACOL = INDXG2P( JA, NB, MYCOL, DESCA( CSRC_ ), NPCOL ), CSRC_IACOL = INDXG2P( JA, NB, MYCOL, DESCA( CSRC_ ), NPCOL ), MYCOLIACOL = INDXG2P( JA, NB, MYCOL, DESCA( CSRC_ ), NPCOL ), NBIACOL = INDXG2P( JA, NB, MYCOL, DESCA( CSRC_ ), NPCOL ), NPCOLIACOL = INDXG2P( JA, NB, MYCOL, DESCA( CSRC_ ), NPCOL ) |
| IAROW | <--- | IAIAROW = INDXG2P( IA, NB, MYROW, DESCA( RSRC_ ), NPROW ), INDXG2PIAROW = INDXG2P( IA, NB, MYROW, DESCA( RSRC_ ), NPROW ), MYROWIAROW = INDXG2P( IA, NB, MYROW, DESCA( RSRC_ ), NPROW ), NBIAROW = INDXG2P( IA, NB, MYROW, DESCA( RSRC_ ), NPROW ), NPROWIAROW = INDXG2P( IA, NB, MYROW, DESCA( RSRC_ ), NPROW ), RSRC_IAROW = INDXG2P( IA, NB, MYROW, DESCA( RSRC_ ), NPROW ) |
| ICTXT | <--- | CTXT_ICTXT = DESCA( CTXT_ ) |
| INFO | <--- | CTXT_INFO = -(600+CTXT_), NB_INFO = -(600+NB_) |
| IOFF | <--- | IAIOFF = MOD( IA-1, DESCA( MB_ ) ), MB_IOFF = MOD( IA-1, DESCA( MB_ ) ) |
| IPW | <--- | IPYIPW = NQ * NB + IPY, NBIPW = NQ * NB + IPY, NQIPW = NQ * NB + IPY |
| IPY | <--- | MPIPY = MP * NB + 1, NBIPY = MP * NB + 1 |
| IW | <--- | IOFFIW = IOFF + 1 |
| J | <--- | JAJ = JA + K - 1, KJ = JA + K - 1 |
| JB | <--- | IOFFJB = NB - IOFF, NBJB = NB - IOFF{2JB = NB} |
| JS | <--- | INDXG2LJS = MIN( INDXG2L( I+JB-1, NB, 0, DESCA( RSRC_ ), NPROW ),{2JS = MIN( INDXG2L( J+JB-1, NB, 0, DESCA( CSRC_ ), NPCOL ),}, JJS = MIN( INDXG2L( J+JB-1, NB, 0, DESCA( CSRC_ ), NPCOL ),, JBJS = MIN( INDXG2L( I+JB-1, NB, 0, DESCA( RSRC_ ), NPROW ),{2JS = MIN( INDXG2L( J+JB-1, NB, 0, DESCA( CSRC_ ), NPCOL ),}, CSRC_JS = MIN( INDXG2L( J+JB-1, NB, 0, DESCA( CSRC_ ), NPCOL ),, MPJS = MIN( INDXG2L( I+JB-1, NB, 0, DESCA( RSRC_ ), NPROW ),, NBJS = MIN( INDXG2L( I+JB-1, NB, 0, DESCA( RSRC_ ), NPROW ),{2JS = MIN( INDXG2L( J+JB-1, NB, 0, DESCA( CSRC_ ), NPCOL ),}, NPCOLJS = MIN( INDXG2L( J+JB-1, NB, 0, DESCA( CSRC_ ), NPCOL ),, NPROWJS = MIN( INDXG2L( I+JB-1, NB, 0, DESCA( RSRC_ ), NPROW ),, NQJS = MIN( INDXG2L( J+JB-1, NB, 0, DESCA( CSRC_ ), NPCOL ),, RSRC_JS = MIN( INDXG2L( I+JB-1, NB, 0, DESCA( RSRC_ ), NPROW ),, IJS = MIN( INDXG2L( I+JB-1, NB, 0, DESCA( RSRC_ ), NPROW ), |
| JW | <--- | IOFFJW = IOFF + 1 |
| K | <--- | JBK = K + JB, KK = K + JB |
| L | <--- | IOFFDO 10 L = 1, MN+IOFF-NB, NB, MNDO 10 L = 1, MN+IOFF-NB, NB, NBDO 10 L = 1, MN+IOFF-NB, NB |
| LWMIN | <--- | MPLWMIN = NB*( MP+NQ+1 ) + NQ, NBLWMIN = NB*( MP+NQ+1 ) + NQ, NQLWMIN = NB*( MP+NQ+1 ) + NQ |
| MN | <--- | MMN = MIN( M, N ), NMN = MIN( M, N ) |
| MP | <--- | IAMP = NUMROC( M+IA-1, NB, MYROW, DESCA( RSRC_ ), NPROW ), IAROWMP = NUMROC( M+IOFF, NB, MYROW, IAROW, NPROW ), IOFFMP = NUMROC( M+IOFF, NB, MYROW, IAROW, NPROW ), MMP = NUMROC( M+IA-1, NB, MYROW, DESCA( RSRC_ ), NPROW ){2MP = NUMROC( M+IOFF, NB, MYROW, IAROW, NPROW )}, MYROWMP = NUMROC( M+IA-1, NB, MYROW, DESCA( RSRC_ ), NPROW ){2MP = NUMROC( M+IOFF, NB, MYROW, IAROW, NPROW )}, NBMP = NUMROC( M+IA-1, NB, MYROW, DESCA( RSRC_ ), NPROW ){2MP = NUMROC( M+IOFF, NB, MYROW, IAROW, NPROW )}, NPROWMP = NUMROC( M+IA-1, NB, MYROW, DESCA( RSRC_ ), NPROW ){2MP = NUMROC( M+IOFF, NB, MYROW, IAROW, NPROW )}, NUMROCMP = NUMROC( M+IA-1, NB, MYROW, DESCA( RSRC_ ), NPROW ){2MP = NUMROC( M+IOFF, NB, MYROW, IAROW, NPROW )}, RSRC_MP = NUMROC( M+IA-1, NB, MYROW, DESCA( RSRC_ ), NPROW ) |
| NB | <--- | MB_NB = DESCA( MB_ ) |
| NQ | <--- | IACOLNQ = NUMROC( N+IOFF, NB, MYCOL, IACOL, NPCOL ), IOFFNQ = NUMROC( N+IOFF, NB, MYCOL, IACOL, NPCOL ), JANQ = NUMROC( N+JA-1, NB, MYCOL, DESCA( CSRC_ ), NPCOL ), CSRC_NQ = NUMROC( N+JA-1, NB, MYCOL, DESCA( CSRC_ ), NPCOL ), MYCOLNQ = NUMROC( N+JA-1, NB, MYCOL, DESCA( CSRC_ ), NPCOL ){2NQ = NUMROC( N+IOFF, NB, MYCOL, IACOL, NPCOL )}, NNQ = NUMROC( N+JA-1, NB, MYCOL, DESCA( CSRC_ ), NPCOL ){2NQ = NUMROC( N+IOFF, NB, MYCOL, IACOL, NPCOL )}, NBNQ = NUMROC( N+JA-1, NB, MYCOL, DESCA( CSRC_ ), NPCOL ){2NQ = NUMROC( N+IOFF, NB, MYCOL, IACOL, NPCOL )}, NPCOLNQ = NUMROC( N+JA-1, NB, MYCOL, DESCA( CSRC_ ), NPCOL ){2NQ = NUMROC( N+IOFF, NB, MYCOL, IACOL, NPCOL )}, NUMROCNQ = NUMROC( N+JA-1, NB, MYCOL, DESCA( CSRC_ ), NPCOL ){2NQ = NUMROC( N+IOFF, NB, MYCOL, IACOL, NPCOL )} |
| WORK | <--- | LWMINWORK( 1 ) = DCMPLX( DBLE( LWMIN ) ){2WORK( 1 ) = DCMPLX( DBLE( LWMIN ) )} |
|
|
Analysis elements of the routine PZGEBRD() Put the mouse over each element to display detailed matching information
Assigned variables |
| | | A , BLOCK_CYCLIC_2D , CSRC_ , CTXT_ , DLEN_ , DTYPE_ , I , IACOL , IAROW , ICTXT , IDUM1 , IDUM2 , INFO , IOFF , IPW , IPY , IW , J , JB , JS , JW , K , L , LLD_ , LQUERY , LWMIN , M_ , MB_ , MN , MP , N_ , NB , NB_ , NQ , ONE , RSRC_ , WORK |
|
Active variables |
| | | A , BLOCK_CYCLIC_2D , COLCTOP , CSRC_ , CTXT_ , D , DESCA , DESCWX , DESCWY , DLEN_ , DTYPE_ , E , I , IA , IACOL , IAROW , ICTXT , IDUM1 , IDUM2 , IINFO , INDXG2L , INDXG2P , INFO , IOFF , IPW , IPY , IW , J , JA , JB , JS , JW , K , L , LLD_ , LQUERY , LWMIN , LWORK , M , M_ , MB_ , MN , MP , MYCOL , MYROW , N , N_ , NB , NB_ , NPCOL , NPROW , NQ , NUMROC , ONE , ROWCTOP , RSRC_ , TAUP , TAUQ , WORK |
|
Accessed arrays [ array name : associated index ] |
| | A | : i+nb:ia+m-1,j+nb:ja+n-1 |
| | DESCA | : CSRC_ , CSRC_ , CSRC_ , CTXT_ , MB_ , MB_ , NB_ , NB_ , RSRC_ , RSRC_ , RSRC_ |
| | DESCWX | : CSRC_ , DLEN_ , M_ , RSRC_ |
| | DESCWY | : CSRC_ , DLEN_ , N_ , RSRC_ |
| | E | : JS , JS |
| | IDUM1 | : 1 , 1 , 1 |
| | IDUM2 | : 1 , 1 |
| | INDXG2L | : I+JB-1, NB, 0, DESCA( RSRC_ ), NPROW , J+JB-1, NB, 0, DESCA( CSRC_ ), NPCOL |
| | INDXG2P | : IA, NB, MYROW, DESCA( RSRC_ ), NPROW , JA, NB, MYCOL, DESCA( CSRC_ ), NPCOL |
| | NUMROC | : M+IA-1, NB, MYROW, DESCA( RSRC_ ), NPROW , M+IOFF, NB, MYROW, IAROW, NPROW , N+IOFF, NB, MYCOL, IACOL, NPCOL , N+JA-1, NB, MYCOL, DESCA( CSRC_ ), NPCOL |
| | WORK | : 1 , 1 , IPW , IPY , IPY |
|
Conditional statements [ statement : associated predicate ] |
| | do | : ( 10 L = 1 , MN + IOFF - NB , NB ) |
| | if | : ( NPROW.EQ. - 1 ) , ( INFO.EQ.0 ) , ( (IOFF.NE.MOD( JA - 1 , DESCA( NB_ ) ) ) ) , ( (NB.NE.DESCA( NB_ ) ) ) , ( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) , ( LQUERY ) , ( INFO.LT.0 ) , ( LQUERY ) , ( possible ) , ( MN.EQ.0 ) , ( M.GE.N ) , ( JS.GT.0 ) , ( JS.GT.0 ) |
|
| List of variables | BLOCK_CYCLIC_2D COLCTOP CSRC_ CTXT_ DESCWX( DLEN_ ) DESCWY( DLEN_ ) DLEN_
| DTYPE_ I IA IACOL IAROW ICTXT IDUM1( 1 ) IDUM2( 1 )
| IINFO INDXG2L INDXG2P INFO IOFF IPW IPY IW
| J JA JB JS JW K L LLD_
| LQUERY LWMIN LWORK M M_ MB_ MN MP
| MYCOL MYROW N N_ NB NB_ NPCOL NPROW
| NQ NUMROC ONE ROWCTOP RSRC_ WORK | | close
| |
BLOCK_CYCLIC_2D
COLCTOP
CSRC_
CTXT_
DESCWX( DLEN_ )
DESCWY( DLEN_ )
DLEN_
DTYPE_
I
IA
IACOL
IAROW
ICTXT
IDUM1( 1 )
IDUM2( 1 )
IINFO
INDXG2L
INDXG2P
INFO
IOFF
IPW
IPY
IW
J
JA
JB
JS
JW
K
L
LLD_
LQUERY
LWMIN
LWORK
M
M_
MB_
MN
MP
MYCOL
MYROW
N
N_
NB
NB_
NPCOL
NPROW
NQ
NUMROC
ONE
ROWCTOP
RSRC_
WORK
511#474
| |