Routine: PCPOTRI()  File: SRC\pcpotri.f

 
 
# 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 ..

 
Display dynamic version Find AutoScroll Reload FontSize: - + Hide Comments Hide Blanks Frame FullScreen MailPrint

 
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
46            INFO = - (600 + CTXT_)
47        ELSE
48            UPPER = LSAME( UPLO , 'U' )
49            CALL CHK1MAT( N , 2 , N , 2 , IA , JA , DESCA , 6 , INFO )
50            IF( INFO.NE.0 ) THEN
51                IROFF = MOD( IA - 1 , DESCA( MB_ ) )
52                ICOFF = MOD( JA - 1 , DESCA( NB_ ) )
53                IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO , 'L' ) ) THEN
54                    INFO = - 1
55                ELSE IF( IROFF.NE.ICOFF .OR. IROFF.NE.0 ) THEN
56                    INFO = - 5
57                ELSE IF( DESCA( MB_ ).NE.DESCA( NB_ ) ) THEN
58                    INFO = - (600 + NB_)
59                END IF
60            END IF
61  
62            IF( UPPER ) THEN
63                IDUM1( 1 ) = ICHAR( 'U' )
64            ELSE
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
73            CALL PXERBLA( ICTXT , 'PCPOTRI' , - INFO )
74            RETURN
75        END IF
76  
77  *     Quick return if possible
78  
79        IF( N.EQ.0 )
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 )
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            END