|
|
| |
| # lines: |
208 | | # code: |
208 | | # comment: | 0 | |
# blank: | 0 |
| # Variables: | 27 |
| # Callers: | 0 |
| # Callings: | 2 |
| # Words: | 85 |
| # Keywords: | 54 |
|
|
|
|
|
..
.. Array Arguments ..
..
Purpose
=======
PCPOTRI computes the inverse of a complex Hermitian positive definite
distributed matrix sub( A ) = A(IA:IA+N-1,JA:JA+N-1) using the
Cholesky factorization sub( A ) = U**H*U or L*L**H computed by
PCPOTRF.
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
=========
UPLO (global input) CHARACTER*1
= 'U': Upper triangle of sub( A ) is stored;
= 'L': Lower triangle of sub( A ) is stored.
N (global input) INTEGER
The number of rows and columns to be operated on, i.e. the
order of the distributed submatrix sub( A ). N >= 0.
A (local input/local output) COMPLEX pointer into the
local memory to an array of dimension (LLD_A, LOCc(JA+N-1)).
On entry, the local pieces of the triangular factor U or L
from the Cholesky factorization of the distributed matrix
sub( A ) = U**H*U or L*L**H, as computed by PCPOTRF.
On exit, the local pieces of the upper or lower triangle of
the (Hermitian) inverse of sub( A ), overwriting the input
factor U or L.
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.
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.
> 0: If INFO = i, the (i,i) element of the factor U or L is
zero, and the inverse could not be computed.
=====================================================================
.. Parameters ..
|
|
|
|
01 SUBROUTINE PCPOTRI( UPLO , N , A , IA , JA , DESCA , INFO )
02
03 * -- ScaLAPACK routine(version 1.7) --
04 * University of Tennessee , Knoxville , Oak Ridge National Laboratory ,
05 * and University of California , Berkeley.
06 * May 1 , 1997
07
08 * .. Scalar Arguments ..
09 CHARACTER UPLO
10 INTEGER IA , INFO , JA , N
11 INTEGER BLOCK_CYCLIC_2D , CSRC_ , CTXT_ , DLEN_ , DTYPE_ ,
12 $LLD_ , MB_ , M_ , NB_ , N_ , RSRC_
13 PARAMETER( BLOCK_CYCLIC_2D = 1 , DLEN_ = 9 , DTYPE_ = 1 ,
14 $CTXT_ = 2 , M_ = 3 , N_ = 4 , MB_ = 5 , NB_ = 6 ,
15 $RSRC_ = 7 , CSRC_ = 8 , LLD_ = 9 )
16 * ..
17 * .. Local Scalars ..
18 LOGICAL UPPER
19 INTEGER ICOFF , ICTXT , IROFF , MYCOL , MYROW , NPCOL , NPROW
20 * ..
21 * .. Local Arrays ..
22 INTEGER IDUM1( 1 ) , IDUM2( 1 )
23 * ..
24 * .. External Subroutines ..
25 EXTERNAL BLACS_GRIDINFO , CHK1MAT , PCHK1MAT , PCLAUUM ,
26 $PCTRTRI , PXERBLA
27 * ..
28 * .. External Functions ..
29 LOGICAL LSAME
30 EXTERNAL LSAME
31 * ..
32 * .. Intrinsic Functions ..
33 INTRINSIC ICHAR , MOD
34 * ..
35 * .. Executable Statements ..
36
37 * Get grid parameters
38
39 ICTXT = DESCA( CTXT_ )
40 CALL BLACS_GRIDINFO( ICTXT , NPROW , NPCOL , MYROW , MYCOL )
41
42 * Test the input parameters
43
44 INFO = 0
45 IF( NPROW.EQ. - 1 ) THEN
45
46 INFO = - (600 + CTXT_)
47 ELSE
47
48 UPPER = LSAME( UPLO , 'U' )
49 CALL CHK1MAT( N , 2 , N , 2 , IA , JA , DESCA , 6 , INFO )
50 IF( INFO.NE.0 ) THEN
50
51 IROFF = MOD( IA - 1 , DESCA( MB_ ) )
52 ICOFF = MOD( JA - 1 , DESCA( NB_ ) )
53 IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO , 'L' ) ) THEN
53
54 INFO = - 1
55 ELSE IF( IROFF.NE.ICOFF .OR. IROFF.NE.0 ) THEN
55
56 INFO = - 5
57 ELSE IF( DESCA( MB_ ).NE.DESCA( NB_ ) ) THEN
57
58 INFO = - (600 + NB_)
59 END IF
60 END IF
61
62 IF( UPPER ) THEN
62
63 IDUM1( 1 ) = ICHAR( 'U' )
64 ELSE
64
65 IDUM1( 1 ) = ICHAR( 'L' )
66 END IF
67 IDUM2( 1 ) = 1
68 CALL PCHK1MAT( N , 2 , N , 2 , IA , JA , DESCA , 6 , 1 , IDUM1 , IDUM2 ,
69 $ INFO )
70 END IF
71
72 IF( INFO.NE.0 ) THEN
72
73 CALL PXERBLA( ICTXT , 'PCPOTRI' , - INFO )
74 RETURN
75 END IF
76
77 * Quick return if possible
78
79 IF( N.EQ.0 )
79
80 $ RETURN
81
82 * Invert the triangular Cholesky factor U or L.
83
84 CALL PCTRTRI ( UPLO , 'Non - unit' , N , A , IA , JA , DESCA , INFO )
85
86 IF( INFO.GT.0 )
86
87 $ RETURN
88
89 * Form inv(U)*inv(U)' or inv(L)'*inv(L).
90
91 CALL PCLAUUM ( UPLO , N , A , IA , JA , DESCA )
92
93 RETURN
94
95 * End of PCPOTRI
96
97 END18
11
|
|
Variables in Routine PCPOTRI()
| Summary Report |
| Data Type | Quantity | Size(byte) |
| CHARACTER | 1 | 1 |
| INTEGER | 24 | 100 |
| LOGICAL | 2 | 2 |
| TOTAL | 27 | 103 |
List of Variables
CHARACTER
INTEGER
| BLOCK_CYCLIC_2D | CSRC_ | CTXT_ | DLEN_ | DTYPE_ |
| IA | ICOFF | ICTXT | IDUM1( 1 ) | IDUM2( 1 ) |
| INFO | IROFF | JA | LLD_ | M_ |
| MB_ | MYCOL | MYROW | N | N_ |
| NB_ | NPCOL | NPROW | RSRC_ | |
LOGICAL
Variables Dependence Graph Put the mouse over a right hand side variable to display the corresponding line of the dependence | | - | | - | - | | ICOFF | <--- | JAICOFF = MOD( JA-1, DESCA( NB_ ) ), NB_ICOFF = MOD( JA-1, DESCA( NB_ ) ) |
| ICTXT | <--- | CTXT_ICTXT = DESCA( CTXT_ ) |
| INFO | <--- | NB_INFO = -(600+NB_), CTXT_INFO = -(600+CTXT_) |
| IROFF | <--- | MB_IROFF = MOD( IA-1, DESCA( MB_ ) ), IAIROFF = MOD( IA-1, DESCA( MB_ ) ) |
| UPPER | <--- | LSAMEUPPER = LSAME( UPLO, 'U' ), UPLOUPPER = LSAME( UPLO, 'U' ) |
|
|
Analysis elements of the routine PCPOTRI() Put the mouse over each element to display detailed matching information
Assigned variables |
| | | BLOCK_CYCLIC_2D , CSRC_ , CTXT_ , DLEN_ , DTYPE_ , ICOFF , ICTXT , IDUM1 , IDUM2 , INFO , IROFF , LLD_ , M_ , MB_ , N_ , NB_ , RSRC_ , UPPER |
|
Active variables |
| | | A , BLOCK_CYCLIC_2D , CSRC_ , CTXT_ , DESCA , DLEN_ , DTYPE_ , IA , ICOFF , ICTXT , IDUM1 , IDUM2 , INFO , IROFF , JA , LLD_ , LSAME , M_ , MB_ , MYCOL , MYROW , N , N_ , NB_ , NPCOL , NPROW , RSRC_ , UPLO , UPPER |
|
Accessed arrays [ array name : associated index ] |
| | DESCA | : CTXT_ , MB_ , MB_ , NB_ , NB_ |
| | IDUM1 | : 1 , 1 , 1 |
| | IDUM2 | : 1 , 1 |
| | LSAME | : UPLO, 'L' , UPLO, 'U' |
|
Conditional statements [ statement : associated predicate ] |
| | if | : ( NPROW.EQ. - 1 ) , ( INFO.NE.0 ) , ( (.NOT.UPPER .AND. .NOT.LSAME( UPLO , 'L' ) ) ) , ( IROFF.NE.ICOFF .OR. IROFF.NE.0 ) , ( (DESCA( MB_ ).NE.DESCA( NB_ ) ) ) , ( UPPER ) , ( INFO.NE.0 ) , ( possible ) , ( N.EQ.0 ) , ( INFO.GT.0 ) |
|
| List of variables | BLOCK_CYCLIC_2D CSRC_ CTXT_ DLEN_ DTYPE_ IA ICOFF
| ICTXT IDUM1( 1 ) IDUM2( 1 ) INFO IROFF JA LLD_ LSAME
| M_ MB_ MYCOL MYROW N N_ NB_ NPCOL
| NPROW RSRC_ UPLO UPPER | | close
| |
BLOCK_CYCLIC_2D
CSRC_
CTXT_
DLEN_
DTYPE_
IA
ICOFF
ICTXT
IDUM1( 1 )
IDUM2( 1 )
INFO
IROFF
JA
LLD_
LSAME
M_
MB_
MYCOL
MYROW
N
N_
NB_
NPCOL
NPROW
RSRC_
UPLO
UPPER
141#115
| |