Routine: ZPTTRSV()  File: SRC\zpttrsv.f

 
 
# lines: 177
  # code: 177
  # comment: 0
  # blank:0
# Variables:12
# Callers:1
# Callings:0
# Words:84
# Keywords:63
 

 

..
     .. Array Arguments ..
     ..
  Purpose
  =======
  ZPTTRSV solves one of the triangular systems
     L * X = B, or  L**H * X = B,
     U * X = B, or  U**H * X = B,
  where L or U is the Cholesky factor of a Hermitian positive
  definite tridiagonal matrix A such that
  A = U**H*D*U or A = L*D*L**H (computed by ZPTTRF).
  Arguments
  =========
  UPLO    (input) CHARACTER*1
          Specifies whether the superdiagonal or the subdiagonal
          of the tridiagonal matrix A is stored and the form of the
          factorization:
          = 'U':  E is the superdiagonal of U, and A = U'*D*U;
          = 'L':  E is the subdiagonal of L, and A = L*D*L'.
          (The two forms are equivalent if A is real.)
  TRANS   (input) CHARACTER
          Specifies the form of the system of equations:
          = 'N':  L * X = B     (No transpose)
          = 'N':  L * X = B     (No transpose)
          = 'C':  U**H * X = B  (Conjugate transpose)
          = 'C':  L**H * X = B  (Conjugate transpose)
  N       (input) INTEGER
          The order of the tridiagonal matrix A.  N >= 0.
  NRHS    (input) INTEGER
          The number of right hand sides, i.e., the number of columns
          of the matrix B.  NRHS >= 0.
  D       (input) REAL array, dimension (N)
          The n diagonal elements of the diagonal matrix D from the
          factorization computed by ZPTTRF.
  E       (input) COMPLEX array, dimension (N-1)
          The (n-1) off-diagonal elements of the unit bidiagonal
          factor U or L from the factorization computed by ZPTTRF
          (see UPLO).
  B       (input/output) COMPLEX array, dimension (LDB,NRHS)
          On entry, the right hand side matrix B.
          On exit, the solution matrix X.
  LDB     (input) INTEGER
          The leading dimension of the array B.  LDB >= max(1,N).
  INFO    (output) INTEGER
          = 0:  successful exit
          < 0:  if INFO = -i, the i-th argument had an illegal value
  =====================================================================
     .. Local Scalars ..

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

 
001        SUBROUTINE ZPTTRSV( UPLO , TRANS , N , NRHS , D , E , B , LDB ,
002       $INFO )
003  
004  *     Written by Andrew J. Cleary , University of Tennessee.
005  *     November , 1996.
006  *     Modified from ZPTTRS :
007  *     -- LAPACK routine(preliminary version) --
008  *     Univ. of Tennessee , Univ. of California Berkeley , NAG Ltd. ,
009  *     Courant Institute , Argonne National Lab , and Rice University
010  
011  *     .. Scalar Arguments ..
012        CHARACTER UPLO , TRANS
013        INTEGER INFO , LDB , N , NRHS
014        LOGICAL NOTRAN , UPPER
015        INTEGER I , J
016  *     ..
017  *     .. External Functions ..
018        LOGICAL LSAME
019        EXTERNAL LSAME
020  *     ..
021  *     .. External Subroutines ..
022        EXTERNAL XERBLA
023  *     ..
024  *     .. Intrinsic Functions ..
025        INTRINSIC DCONJG , MAX
026  *     ..
027  *     .. Executable Statements ..
028  
029  *     Test the input arguments.
030  
031        INFO = 0
032        NOTRAN = LSAME( TRANS , 'N' )
033        UPPER = LSAME( UPLO , 'U' )
034        IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO , 'L' ) ) THEN
035            INFO = - 1
036        ELSE IF( .NOT.NOTRAN .AND. .NOT.
037       $    LSAME( TRANS , 'C' ) ) THEN
038            INFO = - 2
039        ELSE IF( N.LT.0 ) THEN
040            INFO = - 3
041        ELSE IF( NRHS.LT.0 ) THEN
042            INFO = - 4
043        ELSE IF( LDB.LT.MAX( 1 , N ) ) THEN
044            INFO = - 8
045        END IF
046        IF( INFO.NE.0 ) THEN
047            CALL XERBLA( 'ZPTTRS' , - INFO )
048            RETURN
049        END IF
050  
051  *     Quick return if possible
052  
053        IF( N.EQ.0 )
054       $    RETURN
055  
056            IF( UPPER ) THEN
057  
058                IF( .NOT.NOTRAN ) THEN
059  
060                    DO 30 J = 1 , NRHS
061  
062  *                     Solve U**T(or H) * x = b.
063  
064                        DO 10 I = 2 , N
065                            B( I , J ) = B( I , J ) - B( I - 1 , J )*DCONJG( E( I - 1 ) )
066     10                 CONTINUE
067     30             CONTINUE
068  
069                ELSE
070  
071                    DO 35 J = 1 , NRHS
072  
073  *                     Solve U * x = b.
074  
075                        DO 20 I = N - 1 , 1 , - 1
076                            B( I , J ) = B( I , J ) - B( I + 1 , J )*E( I )
077     20                 CONTINUE
078     35             CONTINUE
079                ENDIF
080  
081            ELSE
082  
083                IF( NOTRAN ) THEN
084  
085                    DO 60 J = 1 , NRHS
086  
087  *                     Solve L * x = b.
088  
089                        DO 40 I = 2 , N
090                            B( I , J ) = B( I , J ) - B( I - 1 , J )*E( I - 1 )
091     40                 CONTINUE
092     60             CONTINUE
093  
094                ELSE
095  
096                    DO 65 J = 1 , NRHS
097  
098  *                     Solve L**H * x = b.
099  
100                        DO 50 I = N - 1 , 1 , - 1
101                            B( I , J ) = B( I , J ) -
102       $                    B( I + 1 , J )*DCONJG( E( I ) )
103     50                 CONTINUE
104     65             CONTINUE
105                ENDIF
106  
107            END IF
108  
109            RETURN
110  
111  *         End of ZPTTRS
112  
113        END