|
|
| |
| # lines: |
895 | | # code: |
895 | | # comment: | 0 | |
# blank: | 0 |
| # Variables: | 105 |
| # Callers: | 1 |
| # Callings: | 3 |
| # Words: | 565 |
| # Keywords: | 378 |
|
|
|
|
|
..
.. Array Arguments ..
..
Purpose
=======
PCGERFS improves the computed solution to a system of linear
equations and provides error bounds and backward error estimates for
the solutions.
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
In the following comments, sub( A ), sub( X ) and sub( B ) denote
respectively A(IA:IA+N-1,JA:JA+N-1), X(IX:IX+N-1,JX:JX+NRHS-1) and
B(IB:IB+N-1,JB:JB+NRHS-1).
Arguments
=========
TRANS (global input) CHARACTER*1
Specifies the form of the system of equations.
= 'N': sub( A ) * sub( X ) = sub( B ) (No transpose)
= 'T': sub( A )**T * sub( X ) = sub( B ) (Transpose)
= 'C': sub( A )**H * sub( X ) = sub( B )
(Conjugate transpose)
N (global input) INTEGER
The order of the matrix sub( A ). N >= 0.
NRHS (global input) INTEGER
The number of right hand sides, i.e., the number of columns
of the matrices sub( B ) and sub( X ). NRHS >= 0.
A (local input) COMPLEX pointer into the local
memory to an array of local dimension (LLD_A,LOCc(JA+N-1)).
This array contains the local pieces of the distributed
matrix sub( A ).
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.
AF (local input) COMPLEX pointer into the local
memory to an array of local dimension (LLD_AF,LOCc(JA+N-1)).
This array contains the local pieces of the distributed
factors of the matrix sub( A ) = P * L * U as computed by
PCGETRF.
IAF (global input) INTEGER
The row index in the global array AF indicating the first
row of sub( AF ).
JAF (global input) INTEGER
The column index in the global array AF indicating the
first column of sub( AF ).
DESCAF (global and local input) INTEGER array of dimension DLEN_.
The array descriptor for the distributed matrix AF.
IPIV (local input) INTEGER array of dimension LOCr(M_AF)+MB_AF.
This array contains the pivoting information as computed
by PCGETRF. IPIV(i) -> The global row local row i
was swapped with. This array is tied to the distributed
matrix A.
B (local input) COMPLEX pointer into the local
memory to an array of local dimension
(LLD_B,LOCc(JB+NRHS-1)). This array contains the local
pieces of the distributed matrix of right hand sides
sub( B ).
IB (global input) INTEGER
The row index in the global array B indicating the first
row of sub( B ).
JB (global input) INTEGER
The column index in the global array B indicating the
first column of sub( B ).
DESCB (global and local input) INTEGER array of dimension DLEN_.
The array descriptor for the distributed matrix B.
X (local input and output) COMPLEX pointer into the
local memory to an array of local dimension
(LLD_X,LOCc(JX+NRHS-1)). On entry, this array contains
the local pieces of the distributed matrix solution
sub( X ). On exit, the improved solution vectors.
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.
FERR (local output) REAL array of local dimension
LOCc(JB+NRHS-1).
The estimated forward error bound for each solution vector
of sub( X ). If XTRUE is the true solution corresponding
to sub( X ), FERR is an estimated upper bound for the
magnitude of the largest element in (sub( X ) - XTRUE)
divided by the magnitude of the largest element in sub( X ).
The estimate is as reliable as the estimate for RCOND, and
is almost always a slight overestimate of the true error.
This array is tied to the distributed matrix X.
BERR (local output) REAL array of local dimension
LOCc(JB+NRHS-1). The componentwise relative backward
error of each solution vector (i.e., the smallest re-
lative change in any entry of sub( A ) or sub( B )
that makes sub( X ) an exact solution).
This array is tied to the distributed matrix X.
WORK (local workspace/local output) COMPLEX 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 >= 2*LOCr( N + MOD(IA-1,MB_A) )
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.
RWORK (local workspace/local output) REAL array,
dimension (LRWORK)
On exit, RWORK(1) returns the minimal and optimal LRWORK.
LRWORK (local or global input) INTEGER
The dimension of the array RWORK.
LRWORK is local input and must be at least
LRWORK >= LOCr( N + MOD(IB-1,MB_B) ).
If LRWORK = -1, then LRWORK 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.
Internal Parameters
===================
ITMAX is the maximum number of steps of iterative refinement.
Notes
=====
This routine temporarily returns when N <= 1.
The distributed submatrices op( A ) and op( AF ) (respectively
sub( X ) and sub( B ) ) should be distributed the same way on the
same processes. These conditions ensure that sub( A ) and sub( AF )
(resp. sub( X ) and sub( B ) ) are "perfectly" aligned.
Moreover, this routine requires the distributed submatrices sub( A ),
sub( AF ), sub( X ), and sub( B ) to be aligned on a block boundary,
i.e., if f(x,y) = MOD( x-1, y ):
f( IA, DESCA( MB_ ) ) = f( JA, DESCA( NB_ ) ) = 0,
f( IAF, DESCAF( MB_ ) ) = f( JAF, DESCAF( NB_ ) ) = 0,
f( IB, DESCB( MB_ ) ) = f( JB, DESCB( NB_ ) ) = 0, and
f( IX, DESCX( MB_ ) ) = f( JX, DESCX( NB_ ) ) = 0.
=====================================================================
.. Parameters ..
|
|
|
|
001 SUBROUTINE PCGERFS( TRANS , N , NRHS , A , IA , JA , DESCA , AF , IAF ,
002 $JAF , DESCAF , IPIV , B , IB , JB , DESCB , X , IX ,
003 $JX , DESCX , FERR , BERR , WORK , LWORK , RWORK ,
004 $LRWORK , INFO )
005
006 * -- ScaLAPACK routine(version 1.7) --
007 * University of Tennessee , Knoxville , Oak Ridge National Laboratory ,
008 * and University of California , Berkeley.
009 * November 15 , 1997
010
011 * .. Scalar Arguments ..
012 CHARACTER TRANS
013 INTEGER IA , IAF , IB , IX , INFO , JA , JAF , JB , JX ,
014 $LRWORK , LWORK , N , NRHS
015 INTEGER BLOCK_CYCLIC_2D , CSRC_ , CTXT_ , DLEN_ , DTYPE_ ,
016 $LLD_ , MB_ , M_ , NB_ , N_ , RSRC_
017 PARAMETER( BLOCK_CYCLIC_2D = 1 , DLEN_ = 9 , DTYPE_ = 1 ,
018 $CTXT_ = 2 , M_ = 3 , N_ = 4 , MB_ = 5 , NB_ = 6 ,
019 $RSRC_ = 7 , CSRC_ = 8 , LLD_ = 9 )
020 INTEGER ITMAX
021 PARAMETER( ITMAX = 5 )
022 REAL ZERO , RONE , TWO , THREE
023 PARAMETER( ZERO = 0.0E + 0 , RONE = 1.0E + 0 , TWO = 2.0E + 0 ,
024 $THREE = 3.0E + 0 )
025 COMPLEX ONE
026 PARAMETER( ONE =( 1.0E + 0 , 0.0E + 0 ) )
027 * ..
028 * .. Local Scalars ..
029 LOGICAL LQUERY , NOTRAN
030 CHARACTER TRANSN , TRANST
031 INTEGER COUNT , IACOL , IAFCOL , IAFROW , IAROW , IXBCOL ,
032 $IXBROW , IXCOL , IXROW , ICOFFA , ICOFFAF , ICOFFB ,
033 $ICOFFX , ICTXT , ICURCOL , IDUM , II , IIXB , IIW ,
034 $IOFFXB , IPB , IPR , IPV , IROFFA , IROFFAF , IROFFB ,
035 $IROFFX , IW , J , JBRHS , JJ , JJFBE , JJXB , JN , JW ,
036 $K , KASE , LDXB , LRWMIN , LWMIN , MYCOL , MYRHS ,
037 $MYROW , NP , NP0 , NPCOL , NPMOD , NPROW , NZ
038 REAL EPS , EST , LSTRES , S , SAFE1 , SAFE2 , SAFMIN
039 COMPLEX ZDUM
040 * ..
041 * .. Local Arrays ..
042 INTEGER DESCW( DLEN_ ) , IDUM1( 5 ) , IDUM2( 5 )
043 * ..
044 * .. External Functions ..
045 LOGICAL LSAME
046 INTEGER ICEIL , INDXG2P , NUMROC
047 REAL PSLAMCH
048 EXTERNAL ICEIL , INDXG2P , LSAME , NUMROC , PSLAMCH
049 * ..
050 * .. External Subroutines ..
051 EXTERNAL BLACS_GRIDINFO , CGEBR2D , CGEBS2D , CHK1MAT ,
052 $DESCSET , INFOG2L , PCAGEMV , PCAXPY , PCHK2MAT ,
053 $PCCOPY , PCGEMV , PCGETRS , PCLACON ,
054 $PXERBLA , SGAMX2D
055 * ..
056 * .. Intrinsic Functions ..
057 INTRINSIC ABS , AIMAG , CMPLX , ICHAR , MAX , MIN , MOD , REAL
058 * ..
059 * .. Statement Functions ..
060 REAL CABS1
061 * ..
062 * .. Statement Function definitions ..
063 CABS1( ZDUM ) = ABS( REAL( ZDUM ) ) + ABS( AIMAG( ZDUM ) )
064 * ..
065 * .. Executable Statements ..
066
067 * Get grid parameters
068
069 ICTXT = DESCA( CTXT_ )
070 CALL BLACS_GRIDINFO( ICTXT , NPROW , NPCOL , MYROW , MYCOL )
071
072 * Test the input parameters.
073
074 NOTRAN = LSAME( TRANS , 'N' )
075
076 INFO = 0
077 IF( NPROW.EQ. - 1 ) THEN
077
078 INFO = - (700 + CTXT_)
079 ELSE
079
080 CALL CHK1MAT( N , 2 , N , 2 , IA , JA , DESCA , 7 , INFO )
081 CALL CHK1MAT( N , 2 , N , 2 , IAF , JAF , DESCAF , 11 , INFO )
082 CALL CHK1MAT( N , 2 , NRHS , 3 , IB , JB , DESCB , 16 , INFO )
083 CALL CHK1MAT( N , 2 , NRHS , 3 , IX , JX , DESCX , 20 , INFO )
084 IF( INFO.EQ.0 ) THEN
084
085 IROFFA = MOD( IA - 1 , DESCA( MB_ ) )
086 ICOFFA = MOD( JA - 1 , DESCA( NB_ ) )
087 IROFFAF = MOD( IAF - 1 , DESCAF( MB_ ) )
088 ICOFFAF = MOD( JAF - 1 , DESCAF( NB_ ) )
089 IROFFB = MOD( IB - 1 , DESCB( MB_ ) )
090 ICOFFB = MOD( JB - 1 , DESCB( NB_ ) )
091 IROFFX = MOD( IX - 1 , DESCX( MB_ ) )
092 ICOFFX = MOD( JX - 1 , DESCX( NB_ ) )
093 IAROW = INDXG2P( IA , DESCA( MB_ ) , MYROW , DESCA( RSRC_ ) ,
094 $ NPROW )
095 IAFCOL = INDXG2P( JAF , DESCAF( NB_ ) , MYCOL ,
096 $ DESCAF( CSRC_ ) , NPCOL )
097 IAFROW = INDXG2P( IAF , DESCAF( MB_ ) , MYROW ,
098 $ DESCAF( RSRC_ ) , NPROW )
099 IACOL = INDXG2P( JA , DESCA( NB_ ) , MYCOL , DESCA( CSRC_ ) ,
100 $ NPCOL )
101 CALL INFOG2L( IB , JB , DESCB , NPROW , NPCOL , MYROW , MYCOL ,
102 $ IIXB , JJXB , IXBROW , IXBCOL )
103 IXROW = INDXG2P( IX , DESCX( MB_ ) , MYROW , DESCX( RSRC_ ) ,
104 $ NPROW )
105 IXCOL = INDXG2P( JX , DESCX( NB_ ) , MYCOL , DESCX( CSRC_ ) ,
106 $ NPCOL )
107 NPMOD = NUMROC( N + IROFFA , DESCA( MB_ ) , MYROW , IAROW ,
108 $ NPROW )
109 LWMIN = 2 * NPMOD
110 LRWMIN = NPMOD
111 WORK( 1 ) = CMPLX( REAL( LWMIN ) )
112 RWORK( 1 ) = REAL( LRWMIN )
113 LQUERY =( LWORK.EQ. - 1 .OR. LRWORK.EQ. - 1 )
114
115 IF(( .NOT.NOTRAN ) .AND.( .NOT.LSAME( TRANS , 'T' ) ) .AND.
116 $( .NOT.LSAME( TRANS , 'C' ) ) ) THEN
116
117 INFO = - 1
118 ELSE IF( N.LT.0 ) THEN
118
119 INFO = - 2
120 ELSE IF( NRHS.LT.0 ) THEN
120
121 INFO = - 3
122 ELSE IF( IROFFA.NE.0 ) THEN
122
123 INFO = - 5
124 ELSE IF( ICOFFA.NE.0 ) THEN
124
125 INFO = - 6
126 ELSE IF( DESCA( MB_ ).NE.DESCA( NB_ ) ) THEN
126
127 INFO = - ( 700 + NB_ )
128 ELSE IF( DESCA( MB_ ).NE.DESCAF( MB_ ) ) THEN
128
129 INFO = - ( 1100 + MB_ )
130 ELSE IF( IROFFAF.NE.0 .OR. IAROW.NE.IAFROW ) THEN
130
131 INFO = - 9
132 ELSE IF( DESCA( NB_ ).NE.DESCAF( NB_ ) ) THEN
132
133 INFO = - ( 1100 + NB_ )
134 ELSE IF( ICOFFAF.NE.0 .OR. IACOL.NE.IAFCOL ) THEN
134
135 INFO = - 10
136 ELSE IF( ICTXT.NE.DESCAF( CTXT_ ) ) THEN
136
137 INFO = - ( 1100 + CTXT_ )
138 ELSE IF( IROFFA.NE.IROFFB .OR. IAROW.NE.IXBROW ) THEN
138
139 INFO = - 14
140 ELSE IF( DESCA( MB_ ).NE.DESCB( MB_ ) ) THEN
140
141 INFO = - ( 1600 + MB_ )
142 ELSE IF( ICTXT.NE.DESCB( CTXT_ ) ) THEN
142
143 INFO = - ( 1600 + CTXT_ )
144 ELSE IF( DESCB( MB_ ).NE.DESCX( MB_ ) ) THEN
144
145 INFO = - ( 2000 + MB_ )
146 ELSE IF( IROFFX.NE.0 .OR. IXBROW.NE.IXROW ) THEN
146
147 INFO = - 18
148 ELSE IF( DESCB( NB_ ).NE.DESCX( NB_ ) ) THEN
148
149 INFO = - ( 2000 + NB_ )
150 ELSE IF( ICOFFB.NE.ICOFFX .OR. IXBCOL.NE.IXCOL ) THEN
150
151 INFO = - 19
152 ELSE IF( ICTXT.NE.DESCX( CTXT_ ) ) THEN
152
153 INFO = - ( 2000 + CTXT_ )
154 ELSE IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) THEN
154
155 INFO = - 24
156 ELSE IF( LRWORK.LT.LRWMIN .AND. .NOT.LQUERY ) THEN
156
157 INFO = - 26
158 END IF
159 END IF
160
161 IF( NOTRAN ) THEN
161
162 IDUM1( 1 ) = ICHAR( 'N' )
163 ELSE IF( LSAME( TRANS , 'T' ) ) THEN
163
164 IDUM1( 1 ) = ICHAR( 'T' )
165 ELSE
165
166 IDUM1( 1 ) = ICHAR( 'C' )
167 END IF
168 IDUM2( 1 ) = 1
169 IDUM1( 2 ) = N
170 IDUM2( 2 ) = 2
171 IDUM1( 3 ) = NRHS
172 IDUM2( 3 ) = 3
173 IF( LWORK.EQ. - 1 ) THEN
173
174 IDUM1( 4 ) = - 1
175 ELSE
175
176 IDUM1( 4 ) = 1
177 END IF
178 IDUM2( 4 ) = 24
179 IF( LRWORK.EQ. - 1 ) THEN
179
180 IDUM1( 5 ) = - 1
181 ELSE
181
182 IDUM1( 5 ) = 1
183 END IF
184 IDUM2( 5 ) = 26
185 CALL PCHK2MAT( N , 2 , N , 2 , IA , JA , DESCA , 7 , N , 2 , N , 2 , IAF ,
186 $JAF , DESCAF , 11 , 5 , IDUM1 , IDUM2 , INFO )
187 CALL PCHK2MAT( N , 2 , NRHS , 3 , IB , JB , DESCB , 16 , N , 2 , NRHS , 3 ,
188 $IX , JX , DESCX , 20 , 5 , IDUM1 , IDUM2 , INFO )
189 END IF
190 IF( INFO.NE.0 ) THEN
190
191 CALL PXERBLA( ICTXT , 'PCGERFS' , - INFO )
192 RETURN
193 ELSE IF( LQUERY ) THEN
193
194 RETURN
195 END IF
196
197 JJFBE = JJXB
198 MYRHS = NUMROC( JB + NRHS - 1 , DESCB( NB_ ) , MYCOL , DESCB( CSRC_ ) ,
199 $NPCOL )
200
201 * Quick return if possible
202
203 IF( N.LE.1 .OR. NRHS.EQ.0 ) THEN
203
204 DO 10 JJ = JJFBE , MYRHS
204
205 FERR( JJ ) = ZERO
206 BERR( JJ ) = ZERO
207 10 CONTINUE
207
208 RETURN
209 END IF
210
211 IF( NOTRAN ) THEN
211
212 TRANSN = 'N'
213 TRANST = 'C'
214 ELSE
214
215 TRANSN = 'C'
216 TRANST = 'N'
217 END IF
218
219 NP0 = NUMROC( N + IROFFB , DESCB( MB_ ) , MYROW , IXBROW , NPROW )
220 CALL DESCSET( DESCW , N + IROFFB , 1 , DESCA( MB_ ) , 1 , IXBROW , IXBCOL ,
221 $ICTXT , MAX( 1 , NP0 ) )
222 IPB = 1
223 IPR = 1
224 IPV = IPR + NP0
225 IF( MYROW.EQ.IXBROW ) THEN
225
226 IIW = 1 + IROFFB
227 NP = NP0 - IROFFB
228 ELSE
228
229 IIW = 1
230 NP = NP0
231 END IF
232 IW = 1 + IROFFB
233 JW = 1
234 LDXB = DESCB( LLD_ )
235 IOFFXB =( JJXB - 1 )*LDXB
236
237 * NZ = 1 + maximum number of nonzero entries in each row of sub( A )
238
239 NZ = N + 1
240 EPS = PSLAMCH( ICTXT , 'Epsilon' )
241 SAFMIN = PSLAMCH( ICTXT , 'Safe minimum' )
242 SAFE1 = NZ*SAFMIN
243 SAFE2 = SAFE1 / EPS
244 JN = MIN( ICEIL( JB , DESCB( NB_ ) ) * DESCB( NB_ ) , JB + NRHS - 1 )
245
246 * Handle first block separately
247
248 JBRHS = JN - JB + 1
249 DO 100 K = 0 , JBRHS - 1
250
250
251 COUNT = 1
252 LSTRES = THREE
253 20 CONTINUE
254
255 * Loop until stopping criterion is satisfied.
256
257 * Compute residual R = sub(B) - op(sub(A)) * sub(X) ,
258 * where op(sub(A)) = sub(A) , or sub(A)'(A**T or A**H) ,
259 * depending on TRANS.
260
261 CALL PCCOPY( N , B , IB , JB + K , DESCB , 1 , WORK( IPR ) , IW , JW ,
262 $DESCW , 1 )
263 CALL PCGEMV( TRANS , N , N , - ONE , A , IA , JA , DESCA , X , IX ,
264 $JX + K , DESCX , 1 , ONE , WORK( IPR ) , IW , JW ,
265 $DESCW , 1 )
266
267 * Compute componentwise relative backward error from formula
268
269 * max(i)( abs(R(i)) / ( abs(op(A))*abs(X) + abs(B) )(i) )
270
271 * where abs(Z) is the componentwise absolute value of the
272 * matrix or vector Z. If the i - th component of the
273 * denominator is less than SAFE2 , then SAFE1 is added to the
274 * i - th components of the numerator and denominator before
275 * dividing.
276
277 IF( MYCOL.EQ.IXBCOL ) THEN
277
278 IF( NP.GT.0 ) THEN
278
279 DO 30 II = IIXB , IIXB + NP - 1
279
280 RWORK( IIW + II - IIXB ) = CABS1( B( II + IOFFXB ) )
281 30 CONTINUE
281
282 END IF
283 END IF
284
285 CALL PCAGEMV( TRANS , N , N , RONE , A , IA , JA , DESCA , X , IX , JX + K ,
286 $DESCX , 1 , RONE , RWORK( IPB ) , IW , JW , DESCW , 1 )
287
288 S = ZERO
289 IF( MYCOL.EQ.IXBCOL ) THEN
289
290 IF( NP.GT.0 ) THEN
290
291 DO 40 II = IIW - 1 , IIW + NP - 2
291
292 IF( RWORK( IPB + II ).GT.SAFE2 ) THEN
292
293 S = MAX( S , CABS1( WORK( IPR + II ) ) /
294 $ RWORK( IPB + II ) )
295 ELSE
295
296 S = MAX( S ,( CABS1( WORK( IPR + II ) ) + SAFE1 ) /
297 $( RWORK( IPB + II ) + SAFE1 ) )
297
298 END IF
299 40 CONTINUE
299
300 END IF
301 END IF
302
303 CALL SGAMX2D( ICTXT , 'All' , ' ' , 1 , 1 , S , 1 , IDUM , IDUM , 1 ,
304 $- 1 , MYCOL )
305 IF( MYCOL.EQ.IXBCOL )
305
306 $ BERR( JJFBE ) = S
307
308 * Test stopping criterion. Continue iterating if
309 * 1) The residual BERR(J + K) is larger than machine epsilon ,
310 * and
311 * 2) BERR(J + K) decreased by at least a factor of 2 during the
312 * last iteration , and
313 * 3) At most ITMAX iterations tried.
314
315 IF( S.GT.EPS .AND. TWO*S.LE.LSTRES .AND. COUNT.LE.ITMAX ) THEN
316
317 * Update solution and try again.
318
318
319 CALL PCGETRS ( TRANS , N , 1 , AF , IAF , JAF , DESCAF , IPIV ,
320 $ WORK( IPR ) , IW , JW , DESCW , INFO )
321 CALL PCAXPY( N , ONE , WORK( IPR ) , IW , JW , DESCW , 1 , X , IX ,
322 $ JX + K , DESCX , 1 )
323 LSTRES = S
324 COUNT = COUNT + 1
325 GO TO 20
326 END IF
327
328 * Bound error from formula
329
330 * norm(sub(X) - XTRUE) / norm(sub(X)) .le. FERR =
331 * norm( abs(inv(op(sub(A))))*
332 * ( abs(R) + NZ*EPS*(
333 * abs(op(sub(A)))*abs(sub(X)) + abs(sub(B))))) / norm(sub(X))
334
335 * where
336 * norm(Z) is the magnitude of the largest component of Z
337 * inv(op(sub(A))) is the inverse of op(sub(A))
338 * abs(Z) is the componentwise absolute value of the matrix
339 * or vector Z
340 * NZ is the maximum number of nonzeros in any row of sub(A) ,
341 * plus 1
342 * EPS is machine epsilon
343
344 * The i - th component of
345 * abs(R) + NZ*EPS*(abs(op(sub(A)))*abs(sub(X)) + abs(sub(B)))
346 * is incremented by SAFE1 if the i - th component of
347 * abs(op(sub(A)))*abs(sub(X)) + abs(sub(B)) is less than
348 * SAFE2.
349
350 * Use PCLACON to estimate the infinity - norm of the matrix
351 * inv(op(sub(A))) * diag(W) , where
352 * W = abs(R) + NZ*EPS*(abs(op(sub(A)))*abs(sub(X)) + abs(sub(B))).
353
354 IF( MYCOL.EQ.IXBCOL ) THEN
354
355 IF( NP.GT.0 ) THEN
355
356 DO 50 II = IIW - 1 , IIW + NP - 2
356
357 IF( RWORK( IPB + II ).GT.SAFE2 ) THEN
357
358 RWORK( IPB + II ) = CABS1( WORK( IPR + II ) ) +
359 $ NZ*EPS*RWORK( IPB + II )
360 ELSE
360
361 RWORK( IPB + II ) = CABS1( WORK( IPR + II ) ) +
362 $ NZ*EPS*RWORK( IPB + II ) + SAFE1
363 END IF
364 50 CONTINUE
364
365 END IF
366 END IF
367
368 KASE = 0
369 60 CONTINUE
370 IF( MYCOL.EQ.IXBCOL ) THEN
370
371 CALL CGEBS2D( ICTXT , 'Rowwise' , ' ' , NP , 1 , WORK( IPR ) ,
372 $ DESCW( LLD_ ) )
373 ELSE
373
374 CALL CGEBR2D( ICTXT , 'Rowwise' , ' ' , NP , 1 , WORK( IPR ) ,
375 $ DESCW( LLD_ ) , MYROW , IXBCOL )
376 END IF
377 DESCW( CSRC_ ) = MYCOL
378 CALL PCLACON ( N , WORK( IPV ) , IW , JW , DESCW , WORK( IPR ) ,
379 $IW , JW , DESCW , EST , KASE )
380 DESCW( CSRC_ ) = IXBCOL
381
382 IF( KASE.NE.0 ) THEN
382
383 IF( KASE.EQ.1 ) THEN
384
385 * Multiply by diag(W)*inv(op(sub(A))').
386
386
387 CALL PCGETRS ( TRANST , N , 1 , AF , IAF , JAF , DESCAF ,
388 $ IPIV , WORK( IPR ) , IW , JW , DESCW , INFO )
389
390 IF( MYCOL.EQ.IXBCOL ) THEN
390
391 IF( NP.GT.0 ) THEN
391
392 DO 70 II = IIW - 1 , IIW + NP - 2
392
393 WORK( IPR + II ) = RWORK( IPB + II )*WORK( IPR + II )
394 70 CONTINUE
394
395 END IF
396 END IF
397 ELSE
398
399 * Multiply by inv(op(sub(A)))*diag(W).
400
400
401 IF( MYCOL.EQ.IXBCOL ) THEN
401
402 IF( NP.GT.0 ) THEN
402
403 DO 80 II = IIW - 1 , IIW + NP - 2
403
404 WORK( IPR + II ) = RWORK( IPB + II )*WORK( IPR + II )
405 80 CONTINUE
405
406 END IF
407 END IF
408
409 CALL PCGETRS ( TRANSN , N , 1 , AF , IAF , JAF , DESCAF ,
410 $ IPIV , WORK( IPR ) , IW , JW , DESCW , INFO )
411 END IF
412 GO TO 60
413 END IF
414
415 * Normalize error.
416
417 LSTRES = ZERO
418 IF( MYCOL.EQ.IXBCOL ) THEN
418
419 IF( NP.GT.0 ) THEN
419
420 DO 90 II = IIXB , IIXB + NP - 1
420
421 LSTRES = MAX( LSTRES , CABS1( X( IOFFXB + II ) ) )
422 90 CONTINUE
422
423 END IF
424 CALL SGAMX2D( ICTXT , 'Column' , ' ' , 1 , 1 , LSTRES , 1 , IDUM ,
425 $ IDUM , 1 , - 1 , MYCOL )
426 IF( LSTRES.NE.ZERO )
426
427 $ FERR( JJFBE ) = EST / LSTRES
428
429 JJXB = JJXB + 1
430 JJFBE = JJFBE + 1
431 IOFFXB = IOFFXB + LDXB
432
433 END IF
434
435 100 CONTINUE
436
437 ICURCOL = MOD( IXBCOL + 1 , NPCOL )
438
439 * Do for each right hand side
440
441 DO 200 J = JN + 1 , JB + NRHS - 1 , DESCB( NB_ )
441
442 JBRHS = MIN( JB + NRHS - J , DESCB( NB_ ) )
443 DESCW( CSRC_ ) = ICURCOL
444
445 DO 190 K = 0 , JBRHS - 1
446
446
447 COUNT = 1
448 LSTRES = THREE
449 110 CONTINUE
450
451 * Loop until stopping criterion is satisfied.
452
453 * Compute residual R = sub(B) - op(sub(A)) * sub(X) ,
454 * where op(sub(A)) = sub(A) , or sub(A)'(A**T or A**H) ,
455 * depending on TRANS.
456
457 CALL PCCOPY( N , B , IB , J + K , DESCB , 1 , WORK( IPR ) , IW , JW ,
458 $DESCW , 1 )
459 CALL PCGEMV( TRANS , N , N , - ONE , A , IA , JA , DESCA , X ,
460 $IX , J + K , DESCX , 1 , ONE , WORK( IPR ) , IW , JW ,
461 $DESCW , 1 )
462
463 * Compute componentwise relative backward error from formula
464
465 * max(i)(abs(R(i)) / (abs(op(sub(A)))*abs(sub(X)) +
466 * abs(sub(B)))(i))
467
468 * where abs(Z) is the componentwise absolute value of the
469 * matrix or vector Z. If the i - th component of the
470 * denominator is less than SAFE2 , then SAFE1 is added to the
471 * i - th components of the numerator and denominator before
472 * dividing.
473
474 IF( MYCOL.EQ.ICURCOL ) THEN
474
475 IF( NP.GT.0 ) THEN
475
476 DO 120 II = IIXB , IIXB + NP - 1
476
477 RWORK( IIW + II - IIXB ) = CABS1( B( II + IOFFXB ) )
478 120 CONTINUE
478
479 END IF
480 END IF
481
482 CALL PCAGEMV( TRANS , N , N , RONE , A , IA , JA , DESCA , X , IX ,
483 $J + K , DESCX , 1 , RONE , RWORK( IPB ) , IW , JW ,
484 $DESCW , 1 )
485
486 S = ZERO
487 IF( MYCOL.EQ.ICURCOL ) THEN
487
488 IF( NP.GT.0 )THEN
488
489 DO 130 II = IIW - 1 , IIW + NP - 2
489
490 IF( RWORK( IPB + II ).GT.SAFE2 ) THEN
490
491 S = MAX( S , CABS1( WORK( IPR + II ) ) /
492 $ RWORK( IPB + II ) )
493 ELSE
493
494 S = MAX( S ,( CABS1( WORK( IPR + II ) ) + SAFE1 ) /
495 $( RWORK( IPB + II ) + SAFE1 ) )
495
496 END IF
497 130 CONTINUE
497
498 END IF
499 END IF
500
501 CALL SGAMX2D( ICTXT , 'All' , ' ' , 1 , 1 , S , 1 , IDUM , IDUM , 1 ,
502 $- 1 , MYCOL )
503 IF( MYCOL.EQ.ICURCOL )
503
504 $ BERR( JJFBE ) = S
505
506 * Test stopping criterion. Continue iterating if
507 * 1) The residual BERR(J + K) is larger than machine epsilon ,
508 * and
509 * 2) BERR(J + K) decreased by at least a factor of 2 during
510 * the last iteration , and
511 * 3) At most ITMAX iterations tried.
512
513 IF( S.GT.EPS .AND. TWO*S.LE.LSTRES .AND.
513
514 $ COUNT.LE.ITMAX ) THEN
515
516 * Update solution and try again.
517
518 CALL PCGETRS ( TRANS , N , 1 , AF , IAF , JAF , DESCAF , IPIV ,
519 $ WORK( IPR ) , IW , JW , DESCW , INFO )
520 CALL PCAXPY( N , ONE , WORK( IPR ) , IW , JW , DESCW , 1 , X ,
521 $ IX , J + K , DESCX , 1 )
522 LSTRES = S
523 COUNT = COUNT + 1
524 GO TO 110
525 END IF
526
527 * Bound error from formula
528
529 * norm(sub(X) - XTRUE) / norm(sub(X)) .le. FERR =
530 * norm( abs(inv(op(sub(A))))*
531 * ( abs(R) + NZ*EPS*(
532 * abs(op(sub(A)))*abs(sub(X)) + abs(sub(B))))) / norm(sub(X))
533
534 * where
535 * norm(Z) is the magnitude of the largest component of Z
536 * inv(op(sub(A))) is the inverse of op(sub(A))
537 * abs(Z) is the componentwise absolute value of the matrix
538 * or vector Z
539 * NZ is the maximum number of nonzeros in any row of sub(A) ,
540 * plus 1
541 * EPS is machine epsilon
542
543 * The i - th component of
544 * abs(R) + NZ*EPS*(abs(op(sub(A)))*abs(sub(X)) + abs(sub(B)))
545 * is incremented by SAFE1 if the i - th component of
546 * abs(op(sub(A)))*abs(sub(X)) + abs(sub(B)) is less than
547 * SAFE2.
548
549 * Use PCLACON to estimate the infinity - norm of the matrix
550 * inv(op(sub(A))) * diag(W) , where
551 * W = abs(R) + NZ*EPS*(abs(op(sub(A)))*abs(sub(X)) + abs(sub(B))).
552
553 IF( MYCOL.EQ.ICURCOL ) THEN
553
554 IF( NP.GT.0 ) THEN
554
555 DO 140 II = IIW - 1 , IIW + NP - 2
555
556 IF( RWORK( IPB + II ).GT.SAFE2 ) THEN
556
557 RWORK( IPB + II ) = CABS1( WORK( IPR + II ) ) +
558 $ NZ*EPS*RWORK( IPB + II )
559 ELSE
559
560 RWORK( IPB + II ) = CABS1( WORK( IPR + II ) ) +
561 $ NZ*EPS*RWORK( IPB + II ) + SAFE1
562 END IF
563 140 CONTINUE
563
564 END IF
565 END IF
566
567 KASE = 0
568 150 CONTINUE
569 IF( MYCOL.EQ.ICURCOL ) THEN
569
570 CALL CGEBS2D( ICTXT , 'Rowwise' , ' ' , NP , 1 , WORK( IPR ) ,
571 $ DESCW( LLD_ ) )
572 ELSE
572
573 CALL CGEBR2D( ICTXT , 'Rowwise' , ' ' , NP , 1 , WORK( IPR ) ,
574 $ DESCW( LLD_ ) , MYROW , ICURCOL )
575 END IF
576 DESCW( CSRC_ ) = MYCOL
577 CALL PCLACON ( N , WORK( IPV ) , IW , JW , DESCW , WORK( IPR ) ,
578 $IW , JW , DESCW , EST , KASE )
579 DESCW( CSRC_ ) = ICURCOL
580
581 IF( KASE.NE.0 ) THEN
581
582 IF( KASE.EQ.1 ) THEN
583
584 * Multiply by diag(W)*inv(op(sub(A))').
585
585
586 CALL PCGETRS ( TRANST , N , 1 , AF , IAF , JAF , DESCAF ,
587 $ IPIV , WORK( IPR ) , IW , JW , DESCW , INFO )
588
589 IF( MYCOL.EQ.ICURCOL ) THEN
589
590 IF( NP.GT.0 ) THEN
590
591 DO 160 II = IIW - 1 , IIW + NP - 2
591
592 WORK( IPR + II ) = RWORK( IPB + II )*
593 $ WORK( IPR + II )
594 160 CONTINUE
594
595 END IF
596 END IF
597 ELSE
598
599 * Multiply by inv(op(sub(A)))*diag(W).
600
600
601 IF( MYCOL.EQ.ICURCOL ) THEN
601
602 IF( NP.GT.0 ) THEN
602
603 DO 170 II = IIW - 1 , IIW + NP - 2
603
604 WORK( IPR + II ) = RWORK( IPB + II )*
605 $ WORK( IPR + II )
606 170 CONTINUE
606
607 END IF
608 END IF
609
610 CALL PCGETRS ( TRANSN , N , 1 , AF , IAF , JAF , DESCAF ,
611 $ IPIV , WORK( IPR ) , IW , JW , DESCW ,
612 $ INFO )
613 END IF
614 GO TO 150
615 END IF
616
617 * Normalize error.
618
619 LSTRES = ZERO
620 IF( MYCOL.EQ.ICURCOL ) THEN
620
621 IF( NP.GT.0 ) THEN
621
622 DO 180 II = IIXB , IIXB + NP - 1
622
623 LSTRES = MAX( LSTRES , CABS1( X( IOFFXB + II ) ) )
624 180 CONTINUE
624
625 END IF
626 CALL SGAMX2D( ICTXT , 'Column' , ' ' , 1 , 1 , LSTRES ,
627 $ 1 , IDUM , IDUM , 1 , - 1 , MYCOL )
628 IF( LSTRES.NE.ZERO )
628
629 $ FERR( JJFBE ) = EST / LSTRES
630
631 JJXB = JJXB + 1
632 JJFBE = JJFBE + 1
633 IOFFXB = IOFFXB + LDXB
634
635 END IF
636
637 190 CONTINUE
638
639 ICURCOL = MOD( ICURCOL + 1 , NPCOL )
640
641 200 CONTINUE
642
643 WORK( 1 ) = CMPLX( REAL( LWMIN ) )
644 RWORK( 1 ) = REAL( LRWMIN )
645
646 RETURN
647
648 * End of PCGERFS
649
650 END96
117
|
|
Variables in Routine PCGERFS()
| Summary Report |
| Data Type | Quantity | Size(byte) |
| CHARACTER | 3 | 3 |
| COMPLEX | 2 | 8 |
| INTEGER | 80 | 356 |
| LOGICAL | 3 | 3 |
| REAL | 17 | 68 |
| TOTAL | 105 | 438 |
List of Variables
CHARACTER
COMPLEX
INTEGER
| BLOCK_CYCLIC_2D | COUNT | CSRC_ | CTXT_ | DESCW( DLEN_ ) |
| DLEN_ | DTYPE_ | IA | IACOL | IAF |
| IAFCOL | IAFROW | IAROW | IB | ICEIL |
| ICOFFA | ICOFFAF | ICOFFB | ICOFFX | ICTXT |
| ICURCOL | IDUM | IDUM1( 5 ) | IDUM2( 5 ) | II |
| IIW | IIXB | INDXG2P | INFO | IOFFXB |
| IPB | IPR | IPV | IROFFA | IROFFAF |
| IROFFB | IROFFX | ITMAX | IW | IX |
| IXBCOL | IXBROW | IXCOL | IXROW | J |
| JA | JAF | JB | JBRHS | JJ |
| JJFBE | JJXB | JN | JW | JX |
| K | KASE | LDXB | LLD_ | LRWMIN |
| LRWORK | LWMIN | LWORK | M_ | MB_ |
| MYCOL | MYRHS | MYROW | N | N_ |
| NB_ | NP | NP0 | NPCOL | NPMOD |
| NPROW | NRHS | NUMROC | NZ | RSRC_ |
LOGICAL
REAL
| BERR | CABS1 | EPS | EST | FERR |
| LSTRES | PSLAMCH | RONE | RWORK | S |
| SAFE1 | SAFE2 | SAFMIN | THREE | TWO |
| WORK | ZERO | | | |
Variables Dependence Graph Put the mouse over a right hand side variable to display the corresponding line of the dependence | | - | | - | - | | BERR | <--- | ZEROBERR( JJ ) = ZERO |
| CABS1 | <--- | ZDUMCABS1( ZDUM ) = ABS( REAL( ZDUM ) ) + ABS( AIMAG( ZDUM ) ) |
| COUNT | <--- | COUNTCOUNT = COUNT + 1{2COUNT = COUNT + 1} |
| DESCW | <--- | ICURCOLDESCW( CSRC_ ) = ICURCOL{2DESCW( CSRC_ ) = ICURCOL}, IXBCOLDESCW( CSRC_ ) = IXBCOL, MYCOLDESCW( CSRC_ ) = MYCOL{2DESCW( CSRC_ ) = MYCOL} |
| EPS | <--- | ICTXTEPS = PSLAMCH( ICTXT, 'Epsilon' ), PSLAMCHEPS = PSLAMCH( ICTXT, 'Epsilon' ) |
| FERR | <--- | ZEROFERR( JJ ) = ZERO |
| IACOL | <--- | INDXG2PIACOL = INDXG2P( JA, DESCA( NB_ ), MYCOL, DESCA( CSRC_ ),, CSRC_IACOL = INDXG2P( JA, DESCA( NB_ ), MYCOL, DESCA( CSRC_ ),, JAIACOL = INDXG2P( JA, DESCA( NB_ ), MYCOL, DESCA( CSRC_ ),, MYCOLIACOL = INDXG2P( JA, DESCA( NB_ ), MYCOL, DESCA( CSRC_ ),, NB_IACOL = INDXG2P( JA, DESCA( NB_ ), MYCOL, DESCA( CSRC_ ),, NPCOLIACOL = INDXG2P( JA, DESCA( NB_ ), MYCOL, DESCA( CSRC_ ), |
| IAFCOL | <--- | INDXG2PIAFCOL = INDXG2P( JAF, DESCAF( NB_ ), MYCOL,, CSRC_IAFCOL = INDXG2P( JAF, DESCAF( NB_ ), MYCOL,, JAFIAFCOL = INDXG2P( JAF, DESCAF( NB_ ), MYCOL,, MYCOLIAFCOL = INDXG2P( JAF, DESCAF( NB_ ), MYCOL,, NB_IAFCOL = INDXG2P( JAF, DESCAF( NB_ ), MYCOL,, NPCOLIAFCOL = INDXG2P( JAF, DESCAF( NB_ ), MYCOL, |
| IAFROW | <--- | IAFIAFROW = INDXG2P( IAF, DESCAF( MB_ ), MYROW,, INDXG2PIAFROW = INDXG2P( IAF, DESCAF( MB_ ), MYROW,, MB_IAFROW = INDXG2P( IAF, DESCAF( MB_ ), MYROW,, MYROWIAFROW = INDXG2P( IAF, DESCAF( MB_ ), MYROW,, NPROWIAFROW = INDXG2P( IAF, DESCAF( MB_ ), MYROW,, RSRC_IAFROW = INDXG2P( IAF, DESCAF( MB_ ), MYROW, |
| IAROW | <--- | IAIAROW = INDXG2P( IA, DESCA( MB_ ), MYROW, DESCA( RSRC_ ),, INDXG2PIAROW = INDXG2P( IA, DESCA( MB_ ), MYROW, DESCA( RSRC_ ),, MB_IAROW = INDXG2P( IA, DESCA( MB_ ), MYROW, DESCA( RSRC_ ),, MYROWIAROW = INDXG2P( IA, DESCA( MB_ ), MYROW, DESCA( RSRC_ ),, NPROWIAROW = INDXG2P( IA, DESCA( MB_ ), MYROW, DESCA( RSRC_ ),, RSRC_IAROW = INDXG2P( IA, DESCA( MB_ ), MYROW, DESCA( RSRC_ ), |
| ICOFFA | <--- | JAICOFFA = MOD( JA-1, DESCA( NB_ ) ), NB_ICOFFA = MOD( JA-1, DESCA( NB_ ) ) |
| ICOFFAF | <--- | JAFICOFFAF = MOD( JAF-1, DESCAF( NB_ ) ), NB_ICOFFAF = MOD( JAF-1, DESCAF( NB_ ) ) |
| ICOFFB | <--- | JBICOFFB = MOD( JB-1, DESCB( NB_ ) ), NB_ICOFFB = MOD( JB-1, DESCB( NB_ ) ) |
| ICOFFX | <--- | JXICOFFX = MOD( JX-1, DESCX( NB_ ) ), NB_ICOFFX = MOD( JX-1, DESCX( NB_ ) ) |
| ICTXT | <--- | CTXT_ICTXT = DESCA( CTXT_ ) |
| ICURCOL | <--- | ICURCOLICURCOL = MOD( ICURCOL+1, NPCOL ), IXBCOLICURCOL = MOD( IXBCOL+1, NPCOL ), NPCOLICURCOL = MOD( IXBCOL+1, NPCOL ){2ICURCOL = MOD( ICURCOL+1, NPCOL )} |
| IDUM1 | <--- | NIDUM1( 1 ) = ICHAR( 'N' ){2IDUM1( 2 ) = N}, NRHSIDUM1( 3 ) = NRHS |
| II | <--- | IIWDO 40 II = IIW-1, IIW+NP-2{2DO 50 II = IIW-1, IIW+NP-2, 3DO 70 II = IIW-1, IIW+NP-2, 4DO 80 II = IIW-1, IIW+NP-2, 5DO 130 II = IIW-1, IIW+NP-2, 6DO 140 II = IIW-1, IIW+NP-2, 7DO 160 II = IIW-1, IIW+NP-2, 8DO 170 II = IIW-1, IIW+NP-2}, IIXBDO 30 II = IIXB, IIXB + NP - 1{2DO 90 II = IIXB, IIXB+NP-1, 3DO 120 II = IIXB, IIXB+NP-1, 4DO 180 II = IIXB, IIXB+NP-1}, NPDO 30 II = IIXB, IIXB + NP - 1{2DO 40 II = IIW-1, IIW+NP-2, 3DO 50 II = IIW-1, IIW+NP-2, 4DO 70 II = IIW-1, IIW+NP-2, 5DO 80 II = IIW-1, IIW+NP-2, 6DO 90 II = IIXB, IIXB+NP-1, 7DO 120 II = IIXB, IIXB+NP-1, 8DO 130 II = IIW-1, IIW+NP-2, 9DO 140 II = IIW-1, IIW+NP-2, 10DO 160 II = IIW-1, IIW+NP-2, 11DO 170 II = IIW-1, IIW+NP-2, 12DO 180 II = IIXB, IIXB+NP-1} |
| IIW | <--- | IROFFBIIW = 1 + IROFFB |
| INFO | <--- | CTXT_INFO = -( 1100 + CTXT_ ){2INFO = -( 1600 + CTXT_ ), 3INFO = -( 2000 + CTXT_ ), 4INFO = -(700+CTXT_)}, MB_INFO = -( 1100 + MB_ ){2INFO = -( 1600 + MB_ ), 3INFO = -( 2000 + MB_ )}, NB_INFO = -( 700 + NB_ ){2INFO = -( 1100 + NB_ ), 3INFO = -( 2000 + NB_ )} |
| IOFFXB | <--- | IOFFXBIOFFXB = IOFFXB + LDXB{2IOFFXB = IOFFXB + LDXB}, JJXBIOFFXB = ( JJXB-1 )*LDXB, LDXBIOFFXB = ( JJXB-1 )*LDXB{2IOFFXB = IOFFXB + LDXB, 3IOFFXB = IOFFXB + LDXB} |
| IPV | <--- | IPRIPV = IPR + NP0, NP0IPV = IPR + NP0 |
| IROFFA | <--- | IAIROFFA = MOD( IA-1, DESCA( MB_ ) ), MB_IROFFA = MOD( IA-1, DESCA( MB_ ) ) |
| IROFFAF | <--- | IAFIROFFAF = MOD( IAF-1, DESCAF( MB_ ) ), MB_IROFFAF = MOD( IAF-1, DESCAF( MB_ ) ) |
| IROFFB | <--- | IBIROFFB = MOD( IB-1, DESCB( MB_ ) ), MB_IROFFB = MOD( IB-1, DESCB( MB_ ) ) |
| IROFFX | <--- | IXIROFFX = MOD( IX-1, DESCX( MB_ ) ), MB_IROFFX = MOD( IX-1, DESCX( MB_ ) ) |
| IW | <--- | IROFFBIW = 1 + IROFFB |
| IXCOL | <--- | INDXG2PIXCOL = INDXG2P( JX, DESCX( NB_ ), MYCOL, DESCX( CSRC_ ),, CSRC_IXCOL = INDXG2P( JX, DESCX( NB_ ), MYCOL, DESCX( CSRC_ ),, JXIXCOL = INDXG2P( JX, DESCX( NB_ ), MYCOL, DESCX( CSRC_ ),, MYCOLIXCOL = INDXG2P( JX, DESCX( NB_ ), MYCOL, DESCX( CSRC_ ),, NB_IXCOL = INDXG2P( JX, DESCX( NB_ ), MYCOL, DESCX( CSRC_ ),, NPCOLIXCOL = INDXG2P( JX, DESCX( NB_ ), MYCOL, DESCX( CSRC_ ), |
| IXROW | <--- | INDXG2PIXROW = INDXG2P( IX, DESCX( MB_ ), MYROW, DESCX( RSRC_ ),, IXIXROW = INDXG2P( IX, DESCX( MB_ ), MYROW, DESCX( RSRC_ ),, MB_IXROW = INDXG2P( IX, DESCX( MB_ ), MYROW, DESCX( RSRC_ ),, MYROWIXROW = INDXG2P( IX, DESCX( MB_ ), MYROW, DESCX( RSRC_ ),, NPROWIXROW = INDXG2P( IX, DESCX( MB_ ), MYROW, DESCX( RSRC_ ),, RSRC_IXROW = INDXG2P( IX, DESCX( MB_ ), MYROW, DESCX( RSRC_ ), |
| J | <--- | JBDO 200 J = JN+1, JB+NRHS-1, DESCB( NB_ ), JNDO 200 J = JN+1, JB+NRHS-1, DESCB( NB_ ), NB_DO 200 J = JN+1, JB+NRHS-1, DESCB( NB_ ), NRHSDO 200 J = JN+1, JB+NRHS-1, DESCB( NB_ ) |
| JBRHS | <--- | JJBRHS = MIN( JB+NRHS-J, DESCB( NB_ ) ), JBJBRHS = JN - JB + 1{2JBRHS = MIN( JB+NRHS-J, DESCB( NB_ ) )}, JNJBRHS = JN - JB + 1, NB_JBRHS = MIN( JB+NRHS-J, DESCB( NB_ ) ), NRHSJBRHS = MIN( JB+NRHS-J, DESCB( NB_ ) ) |
| JJ | <--- | JJFBEDO 10 JJ = JJFBE, MYRHS, MYRHSDO 10 JJ = JJFBE, MYRHS |
| JJFBE | <--- | JJFBEJJFBE = JJFBE + 1{2JJFBE = JJFBE + 1}, JJXBJJFBE = JJXB |
| JJXB | <--- | JJXBJJXB = JJXB + 1{2JJXB = JJXB + 1} |
| JN | <--- | ICEILJN = MIN( ICEIL( JB, DESCB( NB_ ) ) * DESCB( NB_ ), JB+NRHS-1 ), JBJN = MIN( ICEIL( JB, DESCB( NB_ ) ) * DESCB( NB_ ), JB+NRHS-1 ), NB_JN = MIN( ICEIL( JB, DESCB( NB_ ) ) * DESCB( NB_ ), JB+NRHS-1 ), NRHSJN = MIN( ICEIL( JB, DESCB( NB_ ) ) * DESCB( NB_ ), JB+NRHS-1 ) |
| K | <--- | JBRHSDO 100 K = 0, JBRHS-1{2DO 190 K = 0, JBRHS-1} |
| LDXB | <--- | LLD_LDXB = DESCB( LLD_ ) |
| LRWMIN | <--- | NPMODLRWMIN = NPMOD |
| LSTRES | <--- | ZEROLSTRES = ZERO{2LSTRES = ZERO}, CABS1LSTRES = MAX( LSTRES, CABS1( X( IOFFXB+II ) ) ){2LSTRES = MAX( LSTRES, CABS1( X( IOFFXB+II ) ) )}, IILSTRES = MAX( LSTRES, CABS1( X( IOFFXB+II ) ) ){2LSTRES = MAX( LSTRES, CABS1( X( IOFFXB+II ) ) )}, IOFFXBLSTRES = MAX( LSTRES, CABS1( X( IOFFXB+II ) ) ){2LSTRES = MAX( LSTRES, CABS1( X( IOFFXB+II ) ) )}, LSTRESLSTRES = MAX( LSTRES, CABS1( X( IOFFXB+II ) ) ){2LSTRES = MAX( LSTRES, CABS1( X( IOFFXB+II ) ) )}, SLSTRES = S{2LSTRES = S}, THREELSTRES = THREE{2LSTRES = THREE} |
| LWMIN | <--- | NPMODLWMIN = 2 * NPMOD |
| MYRHS | <--- | CSRC_MYRHS = NUMROC( JB+NRHS-1, DESCB( NB_ ), MYCOL, DESCB( CSRC_ ),, JBMYRHS = NUMROC( JB+NRHS-1, DESCB( NB_ ), MYCOL, DESCB( CSRC_ ),, MYCOLMYRHS = NUMROC( JB+NRHS-1, DESCB( NB_ ), MYCOL, DESCB( CSRC_ ),, NB_MYRHS = NUMROC( JB+NRHS-1, DESCB( NB_ ), MYCOL, DESCB( CSRC_ ),, NPCOLMYRHS = NUMROC( JB+NRHS-1, DESCB( NB_ ), MYCOL, DESCB( CSRC_ ),, NRHSMYRHS = NUMROC( JB+NRHS-1, DESCB( NB_ ), MYCOL, DESCB( CSRC_ ),, NUMROCMYRHS = NUMROC( JB+NRHS-1, DESCB( NB_ ), MYCOL, DESCB( CSRC_ ), |
| NOTRAN | <--- | LSAMENOTRAN = LSAME( TRANS, 'N' ), NNOTRAN = LSAME( TRANS, 'N' ), TRANSNOTRAN = LSAME( TRANS, 'N' ) |
| NP | <--- | IROFFBNP = NP0 - IROFFB, NP0NP = NP0 - IROFFB{2NP = NP0} |
| NP0 | <--- | IROFFBNP0 = NUMROC( N+IROFFB, DESCB( MB_ ), MYROW, IXBROW, NPROW ), IXBROWNP0 = NUMROC( N+IROFFB, DESCB( MB_ ), MYROW, IXBROW, NPROW ), MB_NP0 = NUMROC( N+IROFFB, DESCB( MB_ ), MYROW, IXBROW, NPROW ), MYROWNP0 = NUMROC( N+IROFFB, DESCB( MB_ ), MYROW, IXBROW, NPROW ), NNP0 = NUMROC( N+IROFFB, DESCB( MB_ ), MYROW, IXBROW, NPROW ), NPROWNP0 = NUMROC( N+IROFFB, DESCB( MB_ ), MYROW, IXBROW, NPROW ), NUMROCNP0 = NUMROC( N+IROFFB, DESCB( MB_ ), MYROW, IXBROW, NPROW ) |
| NPMOD | <--- | IAROWNPMOD = NUMROC( N+IROFFA, DESCA( MB_ ), MYROW, IAROW,, IROFFANPMOD = NUMROC( N+IROFFA, DESCA( MB_ ), MYROW, IAROW,, MB_NPMOD = NUMROC( N+IROFFA, DESCA( MB_ ), MYROW, IAROW,, MYROWNPMOD = NUMROC( N+IROFFA, DESCA( MB_ ), MYROW, IAROW,, NNPMOD = NUMROC( N+IROFFA, DESCA( MB_ ), MYROW, IAROW,, NPROWNPMOD = NUMROC( N+IROFFA, DESCA( MB_ ), MYROW, IAROW,, NUMROCNPMOD = NUMROC( N+IROFFA, DESCA( MB_ ), MYROW, IAROW, |
| NZ | <--- | NNZ = N + 1 |
| RWORK | <--- | EPSRWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +{2RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +, 3RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +, 4RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +}, WORKRWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +{2RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +, 3RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +, 4RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +}, CABS1RWORK( IIW+II-IIXB ) = CABS1( B( II+IOFFXB ) ){2RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +, 3RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +, 4RWORK( IIW+II-IIXB ) = CABS1( B( II+IOFFXB ) ), 5RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +, 6RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +}, IIRWORK( IIW+II-IIXB ) = CABS1( B( II+IOFFXB ) ){2RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +, 3RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +, 4RWORK( IIW+II-IIXB ) = CABS1( B( II+IOFFXB ) ), 5RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +, 6RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +}, IOFFXBRWORK( IIW+II-IIXB ) = CABS1( B( II+IOFFXB ) ){2RWORK( IIW+II-IIXB ) = CABS1( B( II+IOFFXB ) )}, IPBRWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +{2RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +, 3RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +, 4RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +}, IPRRWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +{2RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +, 3RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +, 4RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +}, LRWMINRWORK( 1 ) = REAL( LRWMIN ){2RWORK( 1 ) = REAL( LRWMIN )}, NZRWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +{2RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +, 3RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +, 4RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +}, RWORKRWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +{2RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +, 3RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +, 4RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +}, SAFE1RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +{2RWORK( IPB+II ) = CABS1( WORK( IPR+II ) ) +} |
| S | <--- | WORKS = MAX( S, CABS1( WORK( IPR+II ) ) /{2S = MAX( S, ( CABS1( WORK( IPR+II ) )+SAFE1 ) /, 3S = MAX( S, CABS1( WORK( IPR+II ) ) /, 4S = MAX( S, ( CABS1( WORK( IPR+II ) )+SAFE1 ) /}, ZEROS = ZERO{2S = ZERO}, CABS1S = MAX( S, CABS1( WORK( IPR+II ) ) /{2S = MAX( S, ( CABS1( WORK( IPR+II ) )+SAFE1 ) /, 3S = MAX( S, CABS1( WORK( IPR+II ) ) /, 4S = MAX( S, ( CABS1( WORK( IPR+II ) )+SAFE1 ) /}, IIS = MAX( S, CABS1( WORK( IPR+II ) ) /{2S = MAX( S, ( CABS1( WORK( IPR+II ) )+SAFE1 ) /, 3S = MAX( S, CABS1( WORK( IPR+II ) ) /, 4S = MAX( S, ( CABS1( WORK( IPR+II ) )+SAFE1 ) /}, IPBS = MAX( S, CABS1( WORK( IPR+II ) ) /{2S = MAX( S, ( CABS1( WORK( IPR+II ) )+SAFE1 ) /, 3S = MAX( S, CABS1( WORK( IPR+II ) ) /, 4S = MAX( S, ( CABS1( WORK( IPR+II ) )+SAFE1 ) /}, IPRS = MAX( S, CABS1( WORK( IPR+II ) ) /{2S = MAX( S, ( CABS1( WORK( IPR+II ) )+SAFE1 ) /, 3S = MAX( S, CABS1( WORK( IPR+II ) ) /, 4S = MAX( S, ( CABS1( WORK( IPR+II ) )+SAFE1 ) /}, RWORKS = MAX( S, CABS1( WORK( IPR+II ) ) /{2S = MAX( S, ( CABS1( WORK( IPR+II ) )+SAFE1 ) /, 3S = MAX( S, CABS1( WORK( IPR+II ) ) /, 4S = MAX( S, ( CABS1( WORK( IPR+II ) )+SAFE1 ) /}, SS = MAX( S, CABS1( WORK( IPR+II ) ) /{2S = MAX( S, ( CABS1( WORK( IPR+II ) )+SAFE1 ) /, 3S = MAX( S, CABS1( WORK( IPR+II ) ) /, 4S = MAX( S, ( CABS1( WORK( IPR+II ) )+SAFE1 ) /}, SAFE1S = MAX( S, ( CABS1( WORK( IPR+II ) )+SAFE1 ) /{2S = MAX( S, ( CABS1( WORK( IPR+II ) )+SAFE1 ) /} |
| SAFE1 | <--- | NZSAFE1 = NZ*SAFMIN, SAFMINSAFE1 = NZ*SAFMIN |
| SAFE2 | <--- | EPSSAFE2 = SAFE1 / EPS, SAFE1SAFE2 = SAFE1 / EPS |
| SAFMIN | <--- | ICTXTSAFMIN = PSLAMCH( ICTXT, 'Safe minimum' ), PSLAMCHSAFMIN = PSLAMCH( ICTXT, 'Safe minimum' ) |
| TRANSN | <--- | NTRANSN = 'N' |
| TRANST | <--- | NTRANST = 'N' |
| WORK | <--- | WORKWORK( IPR+II ) = RWORK( IPB+II )*WORK( IPR+II ){2WORK( IPR+II ) = RWORK( IPB+II )*WORK( IPR+II ), 3WORK( IPR+II ) = RWORK( IPB+II )*, 4WORK( IPR+II ) = RWORK( IPB+II )*}, IIWORK( IPR+II ) = RWORK( IPB+II )*WORK( IPR+II ){2WORK( IPR+II ) = RWORK( IPB+II )*WORK( IPR+II ), 3WORK( IPR+II ) = RWORK( IPB+II )*, 4WORK( IPR+II ) = RWORK( IPB+II )*}, IPBWORK( IPR+II ) = RWORK( IPB+II )*WORK( IPR+II ){2WORK( IPR+II ) = RWORK( IPB+II )*WORK( IPR+II ), 3WORK( IPR+II ) = RWORK( IPB+II )*, 4WORK( IPR+II ) = RWORK( IPB+II )*}, IPRWORK( IPR+II ) = RWORK( IPB+II )*WORK( IPR+II ){2WORK( IPR+II ) = RWORK( IPB+II )*WORK( IPR+II ), 3WORK( IPR+II ) = RWORK( IPB+II )*, 4WORK( IPR+II ) = RWORK( IPB+II )*}, LWMINWORK( 1 ) = CMPLX( REAL( LWMIN ) ){2WORK( 1 ) = CMPLX( REAL( LWMIN ) )}, RWORKWORK( IPR+II ) = RWORK( IPB+II )*WORK( IPR+II ){2WORK( IPR+II ) = RWORK( IPB+II )*WORK( IPR+II ), 3WORK( IPR+II ) = RWORK( IPB+II )*, 4WORK( IPR+II ) = RWORK( IPB+II )*} |
|
|
Analysis elements of the routine PCGERFS() Put the mouse over each element to display detailed matching information
Assigned variables |
| | | A , BLOCK_CYCLIC_2D , COUNT , CSRC_ , CTXT_ , DLEN_ , DTYPE_ , EPS , FERR , IACOL , IAFCOL , IAFROW , IAROW , ICOFFA , ICOFFAF , ICOFFB , ICOFFX , ICTXT , ICURCOL , IDUM1 , IDUM2 , II , IIW , IIXB , INFO , IOFFXB , IPB , IPR , IPV , IROFFA , IROFFAF , IROFFB , IROFFX , ITMAX , IW , IXCOL , IXROW , J , JBRHS , JJ , JJFBE , JJXB , JN , JW , K , KASE , LDXB , LLD_ , LQUERY , LRWMIN , LSTRES , LWMIN , M_ , MB_ , MYRHS , N_ , NB_ , NOTRAN , NP , NP0 , NPMOD , NZ , ONE , RONE , RSRC_ , RWORK , S , SAFE1 , SAFE2 , SAFMIN , THREE , TRANSN , TRANST , TWO , WORK , ZDUM , ZERO |
|
Active variables |
| | | A , AF , B , BERR , BLOCK_CYCLIC_2D , CABS1 , COUNT , CSRC_ , CTXT_ , DESCA , DESCAF , DESCB , DESCW , DESCX , DLEN_ , DTYPE_ , EPS , EST , FERR , IA , IACOL , IAF , IAFCOL , IAFROW , IAROW , IB , ICEIL , ICOFFA , ICOFFAF , ICOFFB , ICOFFX , ICTXT , ICURCOL , IDUM , IDUM1 , IDUM2 , II , IIW , IIXB , INDXG2P , INFO , IOFFXB , IPB , IPIV , IPR , IPV , IROFFA , IROFFAF , IROFFB , IROFFX , ITMAX , IW , IX , IXBCOL , IXBROW , IXCOL , IXROW , J , JA , JAF , JB , JBRHS , JJ , JJFBE , JJXB , JN , JW , JX , K , KASE , LDXB , LLD_ , LQUERY , LRWMIN , LRWORK , LSAME , LSTRES , LWMIN , LWORK , M_ , MB_ , MYCOL , MYRHS , MYROW , N , N_ , NB_ , NOTRAN , NP , NP0 , NPCOL , NPMOD , NPROW , NRHS , NUMROC , NZ , ONE , PSLAMCH , RONE , RSRC_ , RWORK , S , SAFE1 , SAFE2 , SAFMIN , THREE , TRANS , TRANSN , TRANST , TWO , WORK , X , ZDUM , ZERO |
|
Accessed arrays [ array name : associated index ] |
| | B | : II+IOFFXB , II+IOFFXB |
| | BERR | : J+K , J+K , J+K , J+K , JJ , JJFBE , JJFBE |
| | CABS1 | : B( II+IOFFXB ) , B( II+IOFFXB ) , WORK( IPR+II ) , WORK( IPR+II ) , WORK( IPR+II ) , WORK( IPR+II ) , WORK( IPR+II ) , WORK( IPR+II ) , WORK( IPR+II ) , WORK( IPR+II ) , X( IOFFXB+II ) , X( IOFFXB+II ) , ZDUM |
| | DESCA | : CSRC_ , CTXT_ , MB_ , MB_ , MB_ , MB_ , MB_ , MB_ , MB_ , NB_ , NB_ , NB_ , NB_ , RSRC_ |
| | DESCAF | : CSRC_ , CTXT_ , MB_ , MB_ , MB_ , NB_ , NB_ , NB_ , RSRC_ |
| | DESCB | : CSRC_ , CTXT_ , LLD_ , MB_ , MB_ , MB_ , MB_ , NB_ , NB_ , NB_ , NB_ , NB_ , NB_ |
| | DESCW | : CSRC_ , CSRC_ , CSRC_ , CSRC_ , CSRC_ , DLEN_ , LLD_ , LLD_ , LLD_ , LLD_ |
| | DESCX | : CSRC_ , CTXT_ , MB_ , MB_ , MB_ , NB_ , NB_ , NB_ , RSRC_ |
| | FERR | : JJ , JJFBE , JJFBE |
| | ICEIL | : JB, DESCB( NB_ ) |
| | IDUM1 | : 1 , 1 , 1 , 2 , 3 , 4 , 4 , 5 , 5 , 5 |
| | IDUM2 | : 1 , 2 , 3 , 4 , 5 , 5 |
| | LSAME | : TRANS, 'C' , TRANS, 'N' , TRANS, 'T' , TRANS, 'T' |
| | NUMROC | : N+IROFFB, DESCB( MB_ ), MYROW, IXBROW, NPROW |
| | PSLAMCH | : ICTXT, 'Epsilon' , ICTXT, 'Safe minimum' |
| | RWORK | : 1 , 1 , IIW+II-IIXB , IIW+II-IIXB , IPB , IPB , IPB+II , IPB+II , IPB+II , IPB+II , IPB+II , IPB+II , IPB+II , IPB+II , IPB+II , IPB+II , IPB+II , IPB+II , IPB+II , IPB+II , IPB+II , IPB+II , IPB+II , IPB+II , IPB+II , IPB+II |
| | WORK | : 1 , 1 , IPR , IPR , IPR , IPR , IPR , IPR , IPR , IPR , IPR , IPR , IPR , IPR , IPR , IPR , IPR , IPR , IPR , IPR , IPR+II , IPR+II , IPR+II , IPR+II , IPR+II , IPR+II , IPR+II , IPR+II , IPR+II , IPR+II , IPR+II , IPR+II , IPR+II , IPR+II , IPV , IPV |
| | X | : IOFFXB+II , IOFFXB+II |
|
Conditional statements [ statement : associated predicate ] |
| | do | : ( 10 JJ = JJFBE , MYRHS ) , ( 100 K = 0 , JBRHS - 1 ) , ( 30 II = IIXB , IIXB + NP - 1 ) , ( 40 II = IIW - 1 , IIW + NP - 2 ) , ( 50 II = IIW - 1 , IIW + NP - 2 ) , ( 70 II = IIW - 1 , IIW + NP - 2 ) , ( 80 II = IIW - 1 , IIW + NP - 2 ) , ( 90 II = IIXB , IIXB + NP - 1 ) , ( for each right hand side ) , ( 200 J = JN + 1 , JB + NRHS - 1 , DESCB( NB_ ) ) , ( 190 K = 0 , JBRHS - 1 ) , ( 120 II = IIXB , IIXB + NP - 1 ) , ( 130 II = IIW - 1 , IIW + NP - 2 ) , ( 140 II = IIW - 1 , IIW + NP - 2 ) , ( 160 II = IIW - 1 , IIW + NP - 2 ) , ( 170 II = IIW - 1 , IIW + NP - 2 ) , ( 180 II = IIXB , IIXB + NP - 1 ) |
| | for | : ( each right hand side ) |
| | if | : ( NPROW.EQ. - 1 ) , ( INFO.EQ.0 ) , ( (( .NOT.NOTRAN ) .AND. ( .NOT.LSAME( TRANS , 'T' ) ) .AND. ) , ( N.LT.0 ) , ( NRHS.LT.0 ) , ( IROFFA.NE.0 ) , ( ICOFFA.NE.0 ) , ( (DESCA( MB_ ).NE.DESCA( NB_ ) ) ) , ( (DESCA( MB_ ).NE.DESCAF( MB_ ) ) ) , ( IROFFAF.NE.0 .OR. IAROW.NE.IAFROW ) , ( (DESCA( NB_ ).NE.DESCAF( NB_ ) ) ) , ( ICOFFAF.NE.0 .OR. IACOL.NE.IAFCOL ) , ( (ICTXT.NE.DESCAF( CTXT_ ) ) ) , ( IROFFA.NE.IROFFB .OR. IAROW.NE.IXBROW ) , ( (DESCA( MB_ ).NE.DESCB( MB_ ) ) ) , ( (ICTXT.NE.DESCB( CTXT_ ) ) ) , ( (DESCB( MB_ ).NE.DESCX( MB_ ) ) ) , ( IROFFX.NE.0 .OR. IXBROW.NE.IXROW ) , ( (DESCB( NB_ ).NE.DESCX( NB_ ) ) ) , ( ICOFFB.NE.ICOFFX .OR. IXBCOL.NE.IXCOL ) , ( (ICTXT.NE.DESCX( CTXT_ ) ) ) , ( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) , ( LRWORK.LT.LRWMIN .AND. .NOT.LQUERY ) , ( NOTRAN ) , ( (LSAME( TRANS , 'T' ) ) ) , ( LWORK.EQ. - 1 ) , ( LRWORK.EQ. - 1 ) , ( INFO.NE.0 ) , ( LQUERY ) , ( possible ) , ( N.LE.1 .OR. NRHS.EQ.0 ) , ( NOTRAN ) , ( MYROW.EQ.IXBROW ) , ( the i-th component of the ) , ( MYCOL.EQ.IXBCOL ) , ( NP.GT.0 ) , ( MYCOL.EQ.IXBCOL ) , ( NP.GT.0 ) , ( (RWORK( IPB + II ).GT.SAFE2 ) ) , ( MYCOL.EQ.IXBCOL ) , ( S.GT.EPS .AND. TWO*S.LE.LSTRES .AND. COUNT.LE.ITMAX ) , ( the i-th component of ) , ( MYCOL.EQ.IXBCOL ) , ( NP.GT.0 ) , ( (RWORK( IPB + II ).GT.SAFE2 ) ) , ( MYCOL.EQ.IXBCOL ) , ( KASE.NE.0 ) , ( KASE.EQ.1 ) , ( MYCOL.EQ.IXBCOL ) , ( NP.GT.0 ) , ( MYCOL.EQ.IXBCOL ) , ( NP.GT.0 ) , ( MYCOL.EQ.IXBCOL ) , ( NP.GT.0 ) , ( LSTRES.NE.ZERO ) , ( the i-th component of the ) , ( MYCOL.EQ.ICURCOL ) , ( NP.GT.0 ) , ( MYCOL.EQ.ICURCOL ) , ( NP.GT.0 ) , ( (RWORK( IPB + II ).GT.SAFE2 ) ) , ( MYCOL.EQ.ICURCOL ) , ( S.GT.EPS .AND. TWO*S.LE.LSTRES .AND. ) , ( the i-th component of ) , ( MYCOL.EQ.ICURCOL ) , ( NP.GT.0 ) , ( (RWORK( IPB + II ).GT.SAFE2 ) ) , ( MYCOL.EQ.ICURCOL ) , ( KASE.NE.0 ) , ( KASE.EQ.1 ) , ( MYCOL.EQ.ICURCOL ) , ( NP.GT.0 ) , ( MYCOL.EQ.ICURCOL ) , ( NP.GT.0 ) , ( MYCOL.EQ.ICURCOL ) , ( NP.GT.0 ) , ( LSTRES.NE.ZERO ) |
| | until | : ( stopping criterion is satisfied. ) , ( stopping criterion is satisfied. ) |
|
| List of variables | BERR BLOCK_CYCLIC_2D CABS1 COUNT CSRC_ CTXT_ DESCW( DLEN_ )
| DLEN_ DTYPE_ EPS EST FERR IA IACOL IAF
| IAFCOL IAFROW IAROW IB ICEIL ICOFFA ICOFFAF ICOFFB
| ICOFFX ICTXT ICURCOL IDUM IDUM1( 5 ) IDUM2( 5 ) II IIW
| IIXB INDXG2P INFO IOFFXB IPB IPR IPV IROFFA
| IROFFAF IROFFB IROFFX ITMAX IW IX IXBCOL IXBROW
| IXCOL IXROW J JA JAF JB JBRHS JJ
| JJFBE JJXB JN JW JX K KASE LDXB
| LLD_ LQUERY LRWMIN LRWORK LSAME LSTRES LWMIN LWORK
| M_ MB_ MYCOL MYRHS MYROW N N_ NB_
| NOTRAN NP NP0 NPCOL NPMOD NPROW NRHS NUMROC
| NZ ONE PSLAMCH RONE RSRC_ RWORK S SAFE1
| SAFE2 SAFMIN THREE TRANS TRANSN TRANST TWO WORK
| ZDUM ZERO | | close
| |
BERR
BLOCK_CYCLIC_2D
CABS1
COUNT
CSRC_
CTXT_
DESCW( DLEN_ )
DLEN_
DTYPE_
EPS
EST
FERR
IA
IACOL
IAF
IAFCOL
IAFROW
IAROW
IB
ICEIL
ICOFFA
ICOFFAF
ICOFFB
ICOFFX
ICTXT
ICURCOL
IDUM
IDUM1( 5 )
IDUM2( 5 )
II
IIW
IIXB
INDXG2P
INFO
IOFFXB
IPB
IPR
IPV
IROFFA
IROFFAF
IROFFB
IROFFX
ITMAX
IW
IX
IXBCOL
IXBROW
IXCOL
IXROW
J
JA
JAF
JB
JBRHS
JJ
JJFBE
JJXB
JN
JW
JX
K
KASE
LDXB
LLD_
LQUERY
LRWMIN
LRWORK
LSAME
LSTRES
LWMIN
LWORK
M_
MB_
MYCOL
MYRHS
MYROW
N
N_
NB_
NOTRAN
NP
NP0
NPCOL
NPMOD
NPROW
NRHS
NUMROC
NZ
ONE
PSLAMCH
RONE
RSRC_
RWORK
S
SAFE1
SAFE2
SAFMIN
THREE
TRANS
TRANSN
TRANST
TWO
WORK
ZDUM
ZERO
369#60#76
| |