|
|
| |
| # lines: |
252 | | # code: |
252 | | # comment: | 0 | |
# blank: | 0 |
| # Variables: | 34 |
| # Callers: | 1 |
| # Callings: | 0 |
| # Words: | 119 |
| # Keywords: | 70 |
|
|
|
|
|
..
.. Array Arguments ..
..
Purpose
=======
PZGETF2 computes an LU factorization of a general M-by-N
distributed matrix sub( A ) = A(IA:IA+M-1,JA:JA+N-1) using
partial pivoting with row interchanges.
The factorization has the form sub( A ) = P * L * U, where P is a
permutation matrix, L is lower triangular with unit diagonal
elements (lower trapezoidal if m > n), and U is upper triangular
(upper trapezoidal if m < n).
This is the right-looking Parallel Level 2 BLAS version of the
algorithm.
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
This routine requires N <= NB_A-MOD(JA-1, NB_A) and square block
decomposition ( MB_A = 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 ).
NB_A-MOD(JA-1, NB_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 M-by-N
distributed matrix sub( A ). On exit, this array contains
the local pieces of the factors L and U from the factoriza-
tion sub( A ) = P*L*U; the unit diagonal elements of L are
not stored.
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.
IPIV (local output) INTEGER array, dimension ( LOCr(M_A)+MB_A )
This array contains the pivoting information.
IPIV(i) -> The global row local row i was swapped with.
This array is tied to the distributed matrix A.
INFO (local 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.
> 0: If INFO = K, U(IA+K-1,JA+K-1) is exactly zero.
The factorization has been completed, but the factor U
is exactly singular, and division by zero will occur if
it is used to solve a system of equations.
=====================================================================
.. Parameters ..
|
|
|
|
001 SUBROUTINE PZGETF2( M , N , A , IA , JA , DESCA , IPIV , INFO )
002
003 * -- ScaLAPACK routine(version 1.7) --
004 * University of Tennessee , Knoxville , Oak Ridge National Laboratory ,
005 * and University of California , Berkeley.
006 * May 1 , 1997
007
008 * .. Scalar Arguments ..
009 INTEGER IA , INFO , JA , M , N
010 INTEGER BLOCK_CYCLIC_2D , CSRC_ , CTXT_ , DLEN_ , DTYPE_ ,
011 $LLD_ , MB_ , M_ , NB_ , N_ , RSRC_
012 PARAMETER( BLOCK_CYCLIC_2D = 1 , DLEN_ = 9 , DTYPE_ = 1 ,
013 $CTXT_ = 2 , M_ = 3 , N_ = 4 , MB_ = 5 , NB_ = 6 ,
014 $RSRC_ = 7 , CSRC_ = 8 , LLD_ = 9 )
015 COMPLEX*16 ONE , ZERO
016 PARAMETER( ONE = 1.0D + 0 , ZERO = 0.0D + 0 )
017 * ..
018 * .. Local Scalars ..
019 CHARACTER ROWBTOP
020 INTEGER I , IACOL , IAROW , ICOFF , ICTXT , IIA , IROFF , J ,
021 $JJA , MN , MYCOL , MYROW , NPCOL , NPROW
022 COMPLEX*16 GMAX
023 * ..
024 * .. External Subroutines ..
025 EXTERNAL BLACS_ABORT , BLACS_GRIDINFO , CHK1MAT , IGEBR2D ,
026 $IGEBS2D , INFOG2L , PB_TOPGET , PXERBLA , PZAMAX ,
027 $PZGERU , PZSCAL , PZSWAP
028 * ..
029 * .. Intrinsic Functions ..
030 INTRINSIC MIN , MOD
031 * ..
032 * .. Executable Statements ..
033
034 * Get grid parameters.
035
036 ICTXT = DESCA( CTXT_ )
037 CALL BLACS_GRIDINFO( ICTXT , NPROW , NPCOL , MYROW , MYCOL )
038
039 * Test the input parameters.
040
041 INFO = 0
042 IF( NPROW.EQ. - 1 ) THEN
042
043 INFO = - (600 + CTXT_)
044 ELSE
044
045 CALL CHK1MAT( M , 1 , N , 2 , IA , JA , DESCA , 6 , INFO )
046 IF( INFO.EQ.0 ) THEN
046
047 IROFF = MOD( IA - 1 , DESCA( MB_ ) )
048 ICOFF = MOD( JA - 1 , DESCA( NB_ ) )
049 IF( N + ICOFF.GT.DESCA( NB_ ) ) THEN
049
050 INFO = - 2
051 ELSE IF( IROFF.NE.0 ) THEN
051
052 INFO = - 4
053 ELSE IF( ICOFF.NE.0 ) THEN
053
054 INFO = - 5
055 ELSE IF( DESCA( MB_ ).NE.DESCA( NB_ ) ) THEN
055
056 INFO = - (600 + NB_)
057 END IF
058 END IF
059 END IF
060
061 IF( INFO.NE.0 ) THEN
061
062 CALL PXERBLA( ICTXT , 'PZGETF2' , - INFO )
063 CALL BLACS_ABORT( ICTXT , 1 )
064 RETURN
065 END IF
066
067 * Quick return if possible
068
069 IF( M.EQ.0 .OR. N.EQ.0 )
069
070 $ RETURN
071
072 MN = MIN( M , N )
073 CALL INFOG2L( IA , JA , DESCA , NPROW , NPCOL , MYROW , MYCOL , IIA , JJA ,
074 $ IAROW , IACOL )
075 CALL PB_TOPGET( ICTXT , 'Broadcast' , 'Rowwise' , ROWBTOP )
076
077 IF( MYCOL.EQ.IACOL ) THEN
077
078 DO 10 J = JA , JA + MN - 1
078
079 I = IA + J - JA
080
081 * Find pivot and test for singularity.
082
083 CALL PZAMAX( M - J + JA , GMAX , IPIV( IIA + J - JA ) , A , I , J ,
084 $ DESCA , 1 )
085 IF( GMAX.NE.ZERO ) THEN
086
087 * Apply the row interchanges to columns JA : JA + N - 1
088
088
089 CALL PZSWAP( N , A , I , JA , DESCA , DESCA( M_ ) , A ,
090 $ IPIV( IIA + J - JA ) , JA , DESCA , DESCA( M_ ) )
091
092 * Compute elements I + 1 : IA + M - 1 of J - th column.
093
094 IF( J - JA + 1.LT.M )
094
095 $ CALL PZSCAL( M - J + JA - 1 , ONE / GMAX , A , I + 1 , J ,
096 $ DESCA , 1 )
097 ELSE IF( INFO.EQ.0 ) THEN
097
098 INFO = J - JA + 1
099 END IF
100
101 * Update trailing submatrix
102
103 IF( J - JA + 1.LT.MN ) THEN
103
104 CALL PZGERU( M - J + JA - 1 , N - J + JA - 1 , - ONE , A , I + 1 , J , DESCA ,
105 $ 1 , A , I , J + 1 , DESCA , DESCA( M_ ) , A , I + 1 ,
106 $ J + 1 , DESCA )
107 END IF
108 10 CONTINUE
109
109
110 CALL IGEBS2D( ICTXT , 'Rowwise' , ROWBTOP , MN , 1 , IPIV( IIA ) ,
111 $ MN )
112
113 ELSE
114
114
115 CALL IGEBR2D( ICTXT , 'Rowwise' , ROWBTOP , MN , 1 , IPIV( IIA ) ,
116 $ MN , MYROW , IACOL )
117
118 END IF
119
120 RETURN
121
122 * End of PZGETF2
123
124 END26
17
|
|
Variables in Routine PZGETF2()
| Summary Report |
| Data Type | Quantity | Size(byte) |
| CHARACTER | 1 | 1 |
| COMPLEX*16 | 3 | ? |
| INTEGER | 30 | 120 |
| TOTAL | 34 | 121 |
List of Variables
CHARACTER
COMPLEX*16
INTEGER
| BLOCK_CYCLIC_2D | CSRC_ | CTXT_ | DLEN_ | DTYPE_ |
| I | IA | IACOL | IAROW | ICOFF |
| ICTXT | IIA | INFO | IROFF | J |
| JA | JJA | LLD_ | M | M_ |
| MB_ | MN | MYCOL | MYROW | N |
| N_ | NB_ | NPCOL | NPROW | RSRC_ |
Variables Dependence Graph Put the mouse over a right hand side variable to display the corresponding line of the dependence | | - | | - | - | | I | <--- | JI = IA + J - JA, JAI = IA + J - JA, IAI = IA + J - JA |
| ICOFF | <--- | JAICOFF = MOD( JA-1, DESCA( NB_ ) ), NB_ICOFF = MOD( JA-1, DESCA( NB_ ) ) |
| ICTXT | <--- | CTXT_ICTXT = DESCA( CTXT_ ) |
| INFO | <--- | JINFO = J - JA + 1, JAINFO = J - JA + 1, NB_INFO = -(600+NB_), CTXT_INFO = -(600+CTXT_) |
| IROFF | <--- | MB_IROFF = MOD( IA-1, DESCA( MB_ ) ), IAIROFF = MOD( IA-1, DESCA( MB_ ) ) |
| J | <--- | JADO 10 J = JA, JA+MN-1, MNDO 10 J = JA, JA+MN-1 |
| MN | <--- | MMN = MIN( M, N ), NMN = MIN( M, N ) |
|
|
Analysis elements of the routine PZGETF2() Put the mouse over each element to display detailed matching information
Assigned variables |
| | | BLOCK_CYCLIC_2D , CSRC_ , CTXT_ , DLEN_ , DTYPE_ , I , ICOFF , ICTXT , INFO , IROFF , J , LLD_ , M_ , MB_ , MN , N_ , NB_ , ONE , RSRC_ , ZERO |
|
Active variables |
| | | A , BLOCK_CYCLIC_2D , CSRC_ , CTXT_ , DESCA , DLEN_ , DTYPE_ , GMAX , I , IA , IACOL , IAROW , ICOFF , ICTXT , IIA , INFO , IPIV , IROFF , J , JA , JJA , LLD_ , M , M_ , MB_ , MN , MYCOL , MYROW , N , N_ , NB_ , NPCOL , NPROW , ONE , ROWBTOP , RSRC_ , ZERO |
|
Accessed arrays [ array name : associated index ] |
| | DESCA | : CTXT_ , M_ , M_ , M_ , MB_ , MB_ , NB_ , NB_ , NB_ |
| | IPIV | : IIA , IIA , IIA+J-JA , IIA+J-JA |
|
Conditional statements [ statement : associated predicate ] |
| | do | : ( 10 J = JA , JA + MN - 1 ) |
| | for | : ( singularity. ) |
| | if | : ( NPROW.EQ. - 1 ) , ( INFO.EQ.0 ) , ( (N+ICOFF.GT.DESCA( NB_ ) ) ) , ( IROFF.NE.0 ) , ( ICOFF.NE.0 ) , ( (DESCA( MB_ ).NE.DESCA( NB_ ) ) ) , ( INFO.NE.0 ) , ( possible ) , ( M.EQ.0 .OR. N.EQ.0 ) , ( MYCOL.EQ.IACOL ) , ( GMAX.NE.ZERO ) , ( J-JA+1.LT.M ) , ( INFO.EQ.0 ) , ( J-JA+1.LT.MN ) |
|
| List of variables | BLOCK_CYCLIC_2D CSRC_ CTXT_ DLEN_ DTYPE_ GMAX I
| IA IACOL IAROW ICOFF ICTXT IIA INFO IROFF
| J JA JJA LLD_ M M_ MB_ MN
| MYCOL MYROW N N_ NB_ NPCOL NPROW ONE
| ROWBTOP RSRC_ ZERO | | close
| |
BLOCK_CYCLIC_2D
CSRC_
CTXT_
DLEN_
DTYPE_
GMAX
I
IA
IACOL
IAROW
ICOFF
ICTXT
IIA
INFO
IROFF
J
JA
JJA
LLD_
M
M_
MB_
MN
MYCOL
MYROW
N
N_
NB_
NPCOL
NPROW
ONE
ROWBTOP
RSRC_
ZERO
| |