|
|
| |
| # lines: |
515 | | # code: |
515 | | # comment: | 0 | |
# blank: | 0 |
| # Variables: | 45 |
| # Callers: | 1 |
| # Callings: | 2 |
| # Words: | 228 |
| # Keywords: | 107 |
|
|
|
|
|
..
.. Array Arguments ..
..
Purpose
=======
PZLABRD reduces the first NB rows and columns of 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 by an unitary transformation Q' * A * P, and
returns the matrices X and Y which are needed to apply the transfor-
mation to the unreduced part of sub( A ).
If M >= N, sub( A ) is reduced to upper bidiagonal form; if M < N, to
lower bidiagonal form.
This is an auxiliary routine called by PZGEBRD.
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.
NB (global input) INTEGER
The number of leading rows and columns of sub( A ) to be
reduced.
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 ) to be reduced. On exit,
the first NB rows and columns of the matrix are overwritten;
the rest of the distributed matrix sub( A ) is unchanged.
If m >= n, elements on and below the diagonal in the first NB
columns, with the array TAUQ, represent the unitary
matrix Q as a product of elementary reflectors; and
elements above the diagonal in the first NB rows, with the
array TAUP, represent the unitary matrix P as a product
of elementary reflectors.
If m < n, elements below the diagonal in the first NB
columns, with the array TAUQ, represent the unitary
matrix Q as a product of elementary reflectors, and
elements on and above the diagonal in the first NB rows,
with the array TAUP, represent the unitary 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
LOCr(IA+MIN(M,N)-1) if M >= N; LOCc(JA+MIN(M,N)-1) otherwise.
The distributed diagonal elements of the bidiagonal matrix
B: D(i) = A(ia+i-1,ja+i-1). 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(ia+i-1,ja+i) for i = 1,2,...,n-1;
if m < n, E(i) = A(ia+i,ja+i-1) 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.
X (local output) COMPLEX*16 pointer into the local memory
to an array of dimension (LLD_X,NB). On exit, the local
pieces of the distributed M-by-NB matrix
X(IX:IX+M-1,JX:JX+NB-1) required to update the unreduced
part of sub( A ).
IX (global input) INTEGER
The row index in the global array X indicating the first
row of sub( X ).
JX (global input) INTEGER
The column index in the global array X indicating the
first column of sub( X ).
DESCX (global and local input) INTEGER array of dimension DLEN_.
The array descriptor for the distributed matrix X.
Y (local output) COMPLEX*16 pointer into the local memory
to an array of dimension (LLD_Y,NB). On exit, the local
pieces of the distributed N-by-NB matrix
Y(IY:IY+N-1,JY:JY+NB-1) required to update the unreduced
part of sub( A ).
IY (global input) INTEGER
The row index in the global array Y indicating the first
row of sub( Y ).
JY (global input) INTEGER
The column index in the global array Y indicating the
first column of sub( Y ).
DESCY (global and local input) INTEGER array of dimension DLEN_.
The array descriptor for the distributed matrix Y.
WORK (local workspace) COMPLEX*16 array, dimension (LWORK)
LWORK >= NB_A + NQ, with
NQ = NUMROC( N+MOD( IA-1, NB_Y ), NB_Y, MYCOL, IACOL, NPCOL )
IACOL = INDXG2P( JA, NB_A, MYCOL, CSRC_A, NPCOL )
INDXG2P and NUMROC are ScaLAPACK tool functions;
MYROW, MYCOL, NPROW and NPCOL can be determined by calling
the subroutine BLACS_GRIDINFO.
Further Details
===============
The matrices Q and P are represented as products of elementary
reflectors:
Q = H(1) H(2) . . . H(nb) and P = G(1) G(2) . . . G(nb)
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.
If m >= n, v(1:i-1) = 0, v(i) = 1, and v(i:m) is stored on exit in
A(ia+i-1:ia+m-1,ja+i-1); u(1:i) = 0, u(i+1) = 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).
If m < n, v(1:i) = 0, v(i+1) = 1, and v(i+1: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: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 elements of the vectors v and u together form the m-by-nb matrix
V and the nb-by-n matrix U' which are needed, with X and Y, to apply
the transformation to the unreduced part of the matrix, using a block
update of the form: sub( A ) := sub( A ) - V*Y' - X*U'.
The contents of sub( A ) on exit are illustrated by the following
examples with nb = 2:
m = 6 and n = 5 (m > n): m = 5 and n = 6 (m < n):
( 1 1 u1 u1 u1 ) ( 1 u1 u1 u1 u1 u1 )
( v1 1 1 u2 u2 ) ( 1 1 u2 u2 u2 u2 )
( v1 v2 a a a ) ( v1 1 a a a a )
( v1 v2 a a a ) ( v1 v2 a a a a )
( v1 v2 a a a ) ( v1 v2 a a a a )
( v1 v2 a a a )
where a denotes an element of the original matrix which is unchanged,
vi denotes an element of the vector defining H(i), and ui an element
of the vector defining G(i).
=====================================================================
.. Parameters ..
|
|
|
|
001 SUBROUTINE PZLABRD( M , N , NB , A , IA , JA , DESCA , D , E , TAUQ , TAUP ,
002 $X , IX , JX , DESCX , Y , IY , JY , DESCY , 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 INTEGER IA , IX , IY , JA , JX , JY , M , N , NB
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 , ZERO
017 PARAMETER( ONE =( 1.0D + 0 , 0.0D + 0 ) ,
018 $ZERO =( 0.0D + 0 , 0.0D + 0 ) )
019 * ..
020 * .. Local Scalars ..
021 INTEGER I , IACOL , IAROW , ICTXT , II , IPY , IW , J , JJ ,
022 $JWY , K , MYCOL , MYROW , NPCOL , NPROW
023 COMPLEX*16 ALPHA , TAU
024 INTEGER DESCD( DLEN_ ) , DESCE( DLEN_ ) ,
025 $DESCTP( DLEN_ ) , DESCTQ( DLEN_ ) ,
026 $DESCW( DLEN_ ) , DESCWY( DLEN_ )
027 * ..
028 * .. External Subroutines ..
029 EXTERNAL BLACS_GRIDINFO , DESCSET , INFOG2L , PDELSET ,
030 $PZCOPY , PZELGET , PZELSET , PZGEMV ,
031 $PZLACGV , PZLARFG , PZSCAL
032 * ..
033 * .. Intrinsic Functions ..
034 INTRINSIC DCMPLX , MIN , MOD
035 * ..
036 * .. Executable Statements ..
037
038 * Quick return if possible
039
040 IF( M.LE.0 .OR. N.LE.0 )
040
041 $ RETURN
042
043 ICTXT = DESCA( CTXT_ )
044 CALL BLACS_GRIDINFO( ICTXT , NPROW , NPCOL , MYROW , MYCOL )
045 CALL INFOG2L( IA , JA , DESCA , NPROW , NPCOL , MYROW , MYCOL , II , JJ ,
046 $ IAROW , IACOL )
047 IPY = DESCA( MB_ ) + 1
048 IW = MOD( IA - 1 , DESCA( NB_ ) ) + 1
049 ALPHA = ZERO
050
051 CALL DESCSET( DESCWY , 1 , N + MOD( IA - 1 , DESCY( NB_ ) ) , 1 ,
052 $ DESCA( NB_ ) , IAROW , IACOL , ICTXT , 1 )
053 CALL DESCSET( DESCW , DESCA( MB_ ) , 1 , DESCA( MB_ ) , 1 , IAROW ,
054 $ IACOL , ICTXT , DESCA( MB_ ) )
055 CALL DESCSET( DESCTQ , 1 , JA + MIN(M , N) - 1 , 1 , DESCA( NB_ ) , IAROW ,
056 $ DESCA( CSRC_ ) , DESCA( CTXT_ ) , 1 )
057 CALL DESCSET( DESCTP , IA + MIN(M , N) - 1 , 1 , DESCA( MB_ ) , 1 ,
058 $ DESCA( RSRC_ ) , IACOL , DESCA( CTXT_ ) ,
059 $ DESCA( LLD_ ) )
060
061 IF( M.GE.N ) THEN
062
063 * Reduce to upper bidiagonal form
064
064
065 CALL DESCSET( DESCD , 1 , JA + MIN(M , N) - 1 , 1 , DESCA( NB_ ) , MYROW ,
066 $ DESCA( CSRC_ ) , DESCA( CTXT_ ) , 1 )
067 CALL DESCSET( DESCE , IA + MIN(M , N) - 1 , 1 , DESCA( MB_ ) , 1 ,
068 $ DESCA( RSRC_ ) , MYCOL , DESCA( CTXT_ ) ,
069 $ DESCA( LLD_ ) )
070 DO 10 K = 1 , NB
070
071 I = IA + K - 1
072 J = JA + K - 1
073 JWY = IW + K
074
075 * Update A(i : ia + m - 1 , j)
076
077 IF( K.GT.1 ) THEN
077
078 CALL PZGEMV( 'No transpose' , M - K + 1 , K - 1 , - ONE , A , I , JA ,
079 $ DESCA , Y , IY , JY + K - 1 , DESCY , 1 , ONE , A , I ,
080 $ J , DESCA , 1 )
081 CALL PZGEMV( 'No transpose' , M - K + 1 , K - 1 , - ONE , X , IX + K - 1 ,
082 $ JX , DESCX , A , IA , J , DESCA , 1 , ONE , A , I , J ,
083 $ DESCA , 1 )
084 CALL PZELSET( A , I - 1 , J , DESCA , ALPHA )
085 END IF
086
087 * Generate reflection Q(i) to annihilate A(i + 1 : ia + m - 1 , j)
088
089 CALL PZLARFG ( M - K + 1 , ALPHA , I , J , A , I + 1 , J , DESCA , 1 ,
090 $ TAUQ )
091 CALL PDELSET( D , 1 , J , DESCD , DBLE( ALPHA ) )
092 CALL PZELSET( A , I , J , DESCA , ONE )
093
094 * Compute Y(IA + I : IA + N - 1 , J)
095
096 CALL PZGEMV( 'Conjugate transpose' , M - K + 1 , N - K , ONE , A , I ,
097 $ J + 1 , DESCA , A , I , J , DESCA , 1 , ZERO ,
098 $ WORK( IPY ) , 1 , JWY , DESCWY , DESCWY( M_ ) )
099 CALL PZGEMV( 'Conjugate transpose' , M - K + 1 , K - 1 , ONE , A , I ,
100 $ JA , DESCA , A , I , J , DESCA , 1 , ZERO , WORK , IW ,
101 $ 1 , DESCW , 1 )
102 CALL PZGEMV( 'Conjugate transpose' , K - 1 , N - K , - ONE , Y , IY ,
103 $ JY + K , DESCY , WORK , IW , 1 , DESCW , 1 , ONE ,
104 $ WORK( IPY ) , 1 , JWY , DESCWY , DESCWY( M_ ) )
105 CALL PZGEMV( 'Conjugate transpose' , M - K + 1 , K - 1 , ONE , X ,
106 $ IX + K - 1 , JX , DESCX , A , I , J , DESCA , 1 , ZERO ,
107 $ WORK , IW , 1 , DESCW , 1 )
108 CALL PZGEMV( 'Conjugate transpose' , K - 1 , N - K , - ONE , A , IA ,
109 $ J + 1 , DESCA , WORK , IW , 1 , DESCW , 1 , ONE ,
110 $ WORK( IPY ) , 1 , JWY , DESCWY , DESCWY( M_ ) )
111
112 CALL PZELGET( 'Rowwise' , ' ' , TAU , TAUQ , 1 , J , DESCTQ )
113 CALL PZSCAL( N - K , TAU , WORK( IPY ) , 1 , JWY , DESCWY ,
114 $ DESCWY( M_ ) )
115 CALL PZLACGV ( N - K , WORK( IPY ) , 1 , JWY , DESCWY ,
116 $ DESCWY( M_ ) )
117 CALL PZCOPY( N - K , WORK( IPY ) , 1 , JWY , DESCWY , DESCWY( M_ ) ,
118 $ Y , IY + K - 1 , JY + K , DESCY , DESCY( M_ ) )
119
120 * Update A(i , j + 1 : ja + n - 1)
121
122 CALL PZLACGV ( N - K , A , I , J + 1 , DESCA , DESCA( M_ ) )
123 CALL PZLACGV ( K , A , I , JA , DESCA , DESCA( M_ ) )
124 CALL PZGEMV( 'Conjugate transpose' , K , N - K , - ONE , Y , IY ,
125 $ JY + K , DESCY , A , I , JA , DESCA , DESCA( M_ ) , ONE ,
126 $ A , I , J + 1 , DESCA , DESCA( M_ ) )
127 CALL PZLACGV ( K , A , I , JA , DESCA , DESCA( M_ ) )
128 CALL PZLACGV ( K - 1 , X , IX + K - 1 , JX , DESCX , DESCX( M_ ) )
129 CALL PZGEMV( 'Conjugate transpose' , K - 1 , N - K , - ONE , A , IA ,
130 $ J + 1 , DESCA , X , IX + K - 1 , JX , DESCX , DESCX( M_ ) ,
131 $ ONE , A , I , J + 1 , DESCA , DESCA( M_ ) )
132 CALL PZLACGV ( K - 1 , X , IX + K - 1 , JX , DESCX , DESCX( M_ ) )
133 CALL PZELSET( A , I , J , DESCA , DCMPLX( DBLE( ALPHA ) ) )
134
135 * Generate reflection P(i) to annihilate A(i , j + 2 : ja + n - 1)
136
137 CALL PZLARFG ( N - K , ALPHA , I , J + 1 , A , I ,
138 $ MIN( J + 2 , N + JA - 1 ) , DESCA , DESCA( M_ ) , TAUP )
139 CALL PDELSET( E , I , 1 , DESCE , DBLE( ALPHA ) )
140 CALL PZELSET( A , I , J + 1 , DESCA , ONE )
141
142 * Compute X(I + 1 : IA + M - 1 , J)
143
144 CALL PZGEMV( 'No transpose' , M - K , N - K , ONE , A , I + 1 , J + 1 ,
145 $ DESCA , A , I , J + 1 , DESCA , DESCA( M_ ) , ZERO , X ,
146 $ IX + K , JX + K - 1 , DESCX , 1 )
147 CALL PZGEMV( 'No transpose' , K , N - K , ONE , Y , IY , JY + K ,
148 $ DESCY , A , I , J + 1 , DESCA , DESCA( M_ ) , ZERO ,
149 $ WORK , IW , 1 , DESCW , 1 )
150 CALL PZGEMV( 'No transpose' , M - K , K , - ONE , A , I + 1 , JA ,
151 $ DESCA , WORK , IW , 1 , DESCW , 1 , ONE , X , IX + K ,
152 $ JX + K - 1 , DESCX , 1 )
153 CALL PZGEMV( 'No transpose' , K - 1 , N - K , ONE , A , IA , J + 1 ,
154 $ DESCA , A , I , J + 1 , DESCA , DESCA( M_ ) , ZERO ,
155 $ WORK , IW , 1 , DESCW , 1 )
156 CALL PZGEMV( 'No transpose' , M - K , K - 1 , - ONE , X , IX + K , JX ,
157 $ DESCX , WORK , IW , 1 , DESCW , 1 , ONE , X , IX + K ,
158 $ JX + K - 1 , DESCX , 1 )
159
160 CALL PZELGET( 'Columnwise' , ' ' , TAU , TAUP , I , 1 , DESCTP )
161 CALL PZSCAL( M - K , TAU , X , IX + K , JX + K - 1 , DESCX , 1 )
162 CALL PZLACGV ( N - K , A , I , J + 1 , DESCA , DESCA( M_ ) )
163 10 CONTINUE
164
164
165 ELSE
166
167 * Reduce to lower bidiagonal form
168
168
169 CALL DESCSET( DESCD , IA + MIN(M , N) - 1 , 1 , DESCA( MB_ ) , 1 ,
170 $ DESCA( RSRC_ ) , MYCOL , DESCA( CTXT_ ) ,
171 $ DESCA( LLD_ ) )
172 CALL DESCSET( DESCE , 1 , JA + MIN(M , N) - 1 , 1 , DESCA( NB_ ) , MYROW ,
173 $ DESCA( CSRC_ ) , DESCA( CTXT_ ) , 1 )
174 DO 20 K = 1 , NB
174
175 I = IA + K - 1
176 J = JA + K - 1
177 JWY = IW + K
178
179 * Update A(i , j : ja + n - 1)
180
181 CALL PZLACGV ( N - K + 1 , A , I , J , DESCA , DESCA( M_ ) )
182 IF( K.GT.1 ) THEN
182
183 CALL PZLACGV ( K - 1 , A , I , JA , DESCA , DESCA( M_ ) )
184 CALL PZGEMV( 'Conjugate transpose' , K - 1 , N - K + 1 , - ONE , Y ,
185 $ IY , JY + K - 1 , DESCY , A , I , JA , DESCA ,
186 $ DESCA( M_ ) , ONE , A , I , J , DESCA ,
187 $ DESCA( M_ ) )
188 CALL PZLACGV ( K - 1 , A , I , JA , DESCA , DESCA( M_ ) )
189 CALL PZLACGV ( K - 1 , X , IX + K - 1 , JX , DESCX , DESCX( M_ ) )
190 CALL PZGEMV( 'Conjugate transpose' , K - 1 , N - K + 1 , - ONE , A ,
191 $ IA , J , DESCA , X , IX + K - 1 , JX , DESCX ,
192 $ DESCX( M_ ) , ONE , A , I , J , DESCA ,
193 $ DESCA( M_ ) )
194 CALL PZLACGV ( K - 1 , X , IX + K - 1 , JX , DESCX , DESCX( M_ ) )
195 CALL PZELSET( A , I , J - 1 , DESCA , DCMPLX( DBLE( ALPHA ) ) )
196 END IF
197
198 * Generate reflection P(i) to annihilate A(i , j + 1 : ja + n - 1)
199
200 CALL PZLARFG ( N - K + 1 , ALPHA , I , J , A , I , J + 1 , DESCA ,
201 $ DESCA( M_ ) , TAUP )
202 CALL PDELSET( D , I , 1 , DESCD , DBLE( ALPHA ) )
203 CALL PZELSET( A , I , J , DESCA , ONE )
204
205 * Compute X(i + 1 : ia + m - 1 , j)
206
207 CALL PZGEMV( 'No transpose' , M - K , N - K + 1 , ONE , A , I + 1 , J ,
208 $ DESCA , A , I , J , DESCA , DESCA( M_ ) , ZERO , X ,
209 $ IX + K , JX + K - 1 , DESCX , 1 )
210 CALL PZGEMV( 'No transpose' , K - 1 , N - K + 1 , ONE , Y , IY , JY + K - 1 ,
211 $ DESCY , A , I , J , DESCA , DESCA( M_ ) , ZERO ,
212 $ WORK , IW , 1 , DESCW , 1 )
213 CALL PZGEMV( 'No transpose' , M - K , K - 1 , - ONE , A , I + 1 , JA ,
214 $ DESCA , WORK , IW , 1 , DESCW , 1 , ONE , X , IX + K ,
215 $ JX + K - 1 , DESCX , 1 )
216 CALL PZGEMV( 'No transpose' , K - 1 , N - K + 1 , ONE , A , IA , J ,
217 $ DESCA , A , I , J , DESCA , DESCA( M_ ) , ZERO ,
218 $ WORK , IW , 1 , DESCW , 1 )
219 CALL PZGEMV( 'No transpose' , M - K , K - 1 , - ONE , X , IX + K , JX ,
220 $ DESCX , WORK , IW , 1 , DESCW , 1 , ONE , X , IX + K ,
221 $ JX + K - 1 , DESCX , 1 )
222
223 CALL PZELGET( 'Columnwise' , ' ' , TAU , TAUP , I , 1 , DESCTP )
224 CALL PZSCAL( M - K , TAU , X , IX + K , JX + K - 1 , DESCX , 1 )
225 CALL PZLACGV ( N - K + 1 , A , I , J , DESCA , DESCA( M_ ) )
226
227 * Update A(i + 1 : ia + m - 1 , j)
228
229 CALL PZGEMV( 'No transpose' , M - K , K - 1 , - ONE , A , I + 1 , JA ,
230 $ DESCA , Y , IY , JY + K - 1 , DESCY , 1 , ONE , A , I + 1 , J ,
231 $ DESCA , 1 )
232 CALL PZGEMV( 'No transpose' , M - K , K , - ONE , X , IX + K , JX ,
233 $ DESCX , A , IA , J , DESCA , 1 , ONE , A , I + 1 , J ,
234 $ DESCA , 1 )
235 CALL PZELSET( A , I , J , DESCA , ALPHA )
236
237 * Generate reflection Q(i) to annihilate A(i + 2 : ia + m - 1 , j)
238
239 CALL PZLARFG ( M - K , ALPHA , I + 1 , J , A , MIN( I + 2 , M + IA - 1 ) ,
240 $ J , DESCA , 1 , TAUQ )
241 CALL PDELSET( E , 1 , J , DESCE , DBLE( ALPHA ) )
242 CALL PZELSET( A , I + 1 , J , DESCA , ONE )
243
244 * Compute Y(ia + i : ia + n - 1 , j)
245
246 CALL PZGEMV( 'Conjugate transpose' , M - K , N - K , ONE , A , I + 1 ,
247 $ J + 1 , DESCA , A , I + 1 , J , DESCA , 1 , ZERO ,
248 $ WORK( IPY ) , 1 , JWY , DESCWY , DESCWY( M_ ) )
249 CALL PZGEMV( 'Conjugate transpose' , M - K , K - 1 , ONE , A , I + 1 ,
250 $ JA , DESCA , A , I + 1 , J , DESCA , 1 , ZERO , WORK , IW ,
251 $ 1 , DESCW , 1 )
252 CALL PZGEMV( 'Conjugate transpose' , K - 1 , N - K , - ONE , Y , IY ,
253 $ JY + K , DESCY , WORK , IW , 1 , DESCW , 1 , ONE ,
254 $ WORK( IPY ) , 1 , JWY , DESCWY , DESCWY( M_ ) )
255 CALL PZGEMV( 'Conjugate transpose' , M - K , K , ONE , X , IX + K ,
256 $ JX , DESCX , A , I + 1 , J , DESCA , 1 , ZERO , WORK , IW ,
257 $ 1 , DESCW , 1 )
258 CALL PZGEMV( 'Conjugate transpose' , K , N - K , - ONE , A , IA ,
259 $ J + 1 , DESCA , WORK , IW , 1 , DESCW , 1 , ONE ,
260 $ WORK( IPY ) , 1 , JWY , DESCWY , DESCWY( M_ ) )
261
262 CALL PZELGET( 'Rowwise' , ' ' , TAU , TAUQ , 1 , J , DESCTQ )
263 CALL PZSCAL( N - K , TAU , WORK( IPY ) , 1 , JWY , DESCWY ,
264 $ DESCWY( M_ ) )
265 CALL PZLACGV ( N - K , WORK( IPY ) , 1 , JWY , DESCWY ,
266 $ DESCWY( M_ ) )
267 CALL PZCOPY( N - K , WORK( IPY ) , 1 , JWY , DESCWY , DESCWY( M_ ) ,
268 $ Y , IY + K - 1 , JY + K , DESCY , DESCY( M_ ) )
269 20 CONTINUE
269
270 END IF
271
272 RETURN
273
274 * End of PZLABRD
275
276 END43
9
|
|
Variables in Routine PZLABRD()
| Summary Report |
| Data Type | Quantity | Size(byte) |
| COMPLEX*16 | 4 | ? |
| INTEGER | 41 | 164 |
| TOTAL | 45 | 164 |
List of Variables
COMPLEX*16
INTEGER
| BLOCK_CYCLIC_2D | CSRC_ | CTXT_ | DESCD( DLEN_ ) | DESCE( DLEN_ ) |
| DESCTP( DLEN_ ) | DESCTQ( DLEN_ ) | DESCW( DLEN_ ) | DESCWY( DLEN_ ) | DLEN_ |
| DTYPE_ | I | IA | IACOL | IAROW |
| ICTXT | II | IPY | IW | IX |
| IY | J | JA | JJ | JWY |
| JX | JY | K | LLD_ | M |
| M_ | MB_ | MYCOL | MYROW | N |
| N_ | NB | NB_ | NPCOL | NPROW |
| RSRC_ | | | | |
Variables Dependence Graph Put the mouse over a right hand side variable to display the corresponding line of the dependence | | - | | - | - | | ALPHA | <--- | ZEROALPHA = ZERO |
| I | <--- | IAI = IA + K - 1{2I = IA + K - 1}, KI = IA + K - 1{2I = IA + K - 1} |
| ICTXT | <--- | CTXT_ICTXT = DESCA( CTXT_ ) |
| IPY | <--- | MB_IPY = DESCA( MB_ ) + 1 |
| IW | <--- | IAIW = MOD( IA-1, DESCA( NB_ ) ) + 1, NB_IW = MOD( IA-1, DESCA( NB_ ) ) + 1 |
| J | <--- | JAJ = JA + K - 1{2J = JA + K - 1}, KJ = JA + K - 1{2J = JA + K - 1} |
| JWY | <--- | IWJWY = IW + K{2JWY = IW + K}, KJWY = IW + K{2JWY = IW + K} |
| K | <--- | NBDO 20 K = 1, NB{2DO 10 K = 1, NB} |
|
|
Analysis elements of the routine PZLABRD() Put the mouse over each element to display detailed matching information
Assigned variables |
| | | ALPHA , BLOCK_CYCLIC_2D , CSRC_ , CTXT_ , DLEN_ , DTYPE_ , I , ICTXT , IPY , IW , J , JWY , K , LLD_ , M_ , MB_ , N_ , NB_ , ONE , RSRC_ , ZERO |
|
Active variables |
| | | A , ALPHA , BLOCK_CYCLIC_2D , CSRC_ , CTXT_ , D , DESCA , DESCD , DESCE , DESCTP , DESCTQ , DESCW , DESCWY , DESCX , DESCY , DLEN_ , DTYPE_ , E , I , IA , IACOL , IAROW , ICTXT , II , IPY , IW , IX , IY , J , JA , JJ , JWY , JX , JY , K , LLD_ , M , M_ , MB_ , MYCOL , MYROW , N , N_ , NB , NB_ , NPCOL , NPROW , ONE , RSRC_ , TAU , TAUP , TAUQ , WORK , X , Y , ZERO |
|
Accessed arrays [ array name : associated index ] |
| | A | : i,j:ja+n-1 , i,j+1:ja+n-1 , i,j+1:ja+n-1 , i,j+2:ja+n-1 , i:ia+m-1,j , i+1:ia+m-1,j , i+1:ia+m-1,j , i+2:ia+m-1,j |
| | DESCA | : CSRC_ , CSRC_ , CSRC_ , CTXT_ , CTXT_ , CTXT_ , CTXT_ , CTXT_ , CTXT_ , CTXT_ , LLD_ , LLD_ , LLD_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , MB_ , MB_ , MB_ , MB_ , MB_ , MB_ , NB_ , NB_ , NB_ , NB_ , NB_ , RSRC_ , RSRC_ , RSRC_ |
| | DESCD | : DLEN_ |
| | DESCE | : DLEN_ |
| | DESCTP | : DLEN_ |
| | DESCTQ | : DLEN_ |
| | DESCW | : DLEN_ |
| | DESCWY | : DLEN_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ , M_ |
| | DESCX | : M_ , M_ , M_ , M_ , M_ , M_ |
| | DESCY | : M_ , M_ , NB_ |
| | WORK | : IPY , IPY , IPY , IPY , IPY , IPY , IPY , IPY , IPY , IPY , IPY , IPY |
| | X | : I+1:IA+M-1,J , i+1:ia+m-1,j |
| | Y | : ia+i:ia+n-1,j , IA+I:IA+N-1,J |
|
Conditional statements [ statement : associated predicate ] |
| | do | : ( 10 K = 1 , NB ) , ( 20 K = 1 , NB ) |
| | if | : ( possible ) , ( M.LE.0 .OR. N.LE.0 ) , ( M.GE.N ) , ( K.GT.1 ) , ( K.GT.1 ) |
|
| List of variables | ALPHA BLOCK_CYCLIC_2D CSRC_ CTXT_ DESCD( DLEN_ ) DESCE( DLEN_ ) DESCTP( DLEN_ )
| DESCTQ( DLEN_ ) DESCW( DLEN_ ) DESCWY( DLEN_ ) DLEN_ DTYPE_ I IA IACOL
| IAROW ICTXT II IPY IW IX IY J
| JA JJ JWY JX JY K LLD_ M
| M_ MB_ MYCOL MYROW N N_ NB NB_
| NPCOL NPROW ONE RSRC_ TAU ZERO | | close
| |
ALPHA
BLOCK_CYCLIC_2D
CSRC_
CTXT_
DESCD( DLEN_ )
DESCE( DLEN_ )
DESCTP( DLEN_ )
DESCTQ( DLEN_ )
DESCW( DLEN_ )
DESCWY( DLEN_ )
DLEN_
DTYPE_
I
IA
IACOL
IAROW
ICTXT
II
IPY
IW
IX
IY
J
JA
JJ
JWY
JX
JY
K
LLD_
M
M_
MB_
MYCOL
MYROW
N
N_
NB
NB_
NPCOL
NPROW
ONE
RSRC_
TAU
ZERO
534#512
| |