Annotation of rpl/lapack/lapack/dgttrs.f, revision 1.1
1.1 ! bertrand 1: SUBROUTINE DGTTRS( TRANS, N, NRHS, DL, D, DU, DU2, IPIV, B, LDB,
! 2: $ INFO )
! 3: *
! 4: * -- LAPACK routine (version 3.2) --
! 5: * -- LAPACK is a software package provided by Univ. of Tennessee, --
! 6: * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
! 7: * November 2006
! 8: *
! 9: * .. Scalar Arguments ..
! 10: CHARACTER TRANS
! 11: INTEGER INFO, LDB, N, NRHS
! 12: * ..
! 13: * .. Array Arguments ..
! 14: INTEGER IPIV( * )
! 15: DOUBLE PRECISION B( LDB, * ), D( * ), DL( * ), DU( * ), DU2( * )
! 16: * ..
! 17: *
! 18: * Purpose
! 19: * =======
! 20: *
! 21: * DGTTRS solves one of the systems of equations
! 22: * A*X = B or A'*X = B,
! 23: * with a tridiagonal matrix A using the LU factorization computed
! 24: * by DGTTRF.
! 25: *
! 26: * Arguments
! 27: * =========
! 28: *
! 29: * TRANS (input) CHARACTER*1
! 30: * Specifies the form of the system of equations.
! 31: * = 'N': A * X = B (No transpose)
! 32: * = 'T': A'* X = B (Transpose)
! 33: * = 'C': A'* X = B (Conjugate transpose = Transpose)
! 34: *
! 35: * N (input) INTEGER
! 36: * The order of the matrix A.
! 37: *
! 38: * NRHS (input) INTEGER
! 39: * The number of right hand sides, i.e., the number of columns
! 40: * of the matrix B. NRHS >= 0.
! 41: *
! 42: * DL (input) DOUBLE PRECISION array, dimension (N-1)
! 43: * The (n-1) multipliers that define the matrix L from the
! 44: * LU factorization of A.
! 45: *
! 46: * D (input) DOUBLE PRECISION array, dimension (N)
! 47: * The n diagonal elements of the upper triangular matrix U from
! 48: * the LU factorization of A.
! 49: *
! 50: * DU (input) DOUBLE PRECISION array, dimension (N-1)
! 51: * The (n-1) elements of the first super-diagonal of U.
! 52: *
! 53: * DU2 (input) DOUBLE PRECISION array, dimension (N-2)
! 54: * The (n-2) elements of the second super-diagonal of U.
! 55: *
! 56: * IPIV (input) INTEGER array, dimension (N)
! 57: * The pivot indices; for 1 <= i <= n, row i of the matrix was
! 58: * interchanged with row IPIV(i). IPIV(i) will always be either
! 59: * i or i+1; IPIV(i) = i indicates a row interchange was not
! 60: * required.
! 61: *
! 62: * B (input/output) DOUBLE PRECISION array, dimension (LDB,NRHS)
! 63: * On entry, the matrix of right hand side vectors B.
! 64: * On exit, B is overwritten by the solution vectors X.
! 65: *
! 66: * LDB (input) INTEGER
! 67: * The leading dimension of the array B. LDB >= max(1,N).
! 68: *
! 69: * INFO (output) INTEGER
! 70: * = 0: successful exit
! 71: * < 0: if INFO = -i, the i-th argument had an illegal value
! 72: *
! 73: * =====================================================================
! 74: *
! 75: * .. Local Scalars ..
! 76: LOGICAL NOTRAN
! 77: INTEGER ITRANS, J, JB, NB
! 78: * ..
! 79: * .. External Functions ..
! 80: INTEGER ILAENV
! 81: EXTERNAL ILAENV
! 82: * ..
! 83: * .. External Subroutines ..
! 84: EXTERNAL DGTTS2, XERBLA
! 85: * ..
! 86: * .. Intrinsic Functions ..
! 87: INTRINSIC MAX, MIN
! 88: * ..
! 89: * .. Executable Statements ..
! 90: *
! 91: INFO = 0
! 92: NOTRAN = ( TRANS.EQ.'N' .OR. TRANS.EQ.'n' )
! 93: IF( .NOT.NOTRAN .AND. .NOT.( TRANS.EQ.'T' .OR. TRANS.EQ.
! 94: $ 't' ) .AND. .NOT.( TRANS.EQ.'C' .OR. TRANS.EQ.'c' ) ) THEN
! 95: INFO = -1
! 96: ELSE IF( N.LT.0 ) THEN
! 97: INFO = -2
! 98: ELSE IF( NRHS.LT.0 ) THEN
! 99: INFO = -3
! 100: ELSE IF( LDB.LT.MAX( N, 1 ) ) THEN
! 101: INFO = -10
! 102: END IF
! 103: IF( INFO.NE.0 ) THEN
! 104: CALL XERBLA( 'DGTTRS', -INFO )
! 105: RETURN
! 106: END IF
! 107: *
! 108: * Quick return if possible
! 109: *
! 110: IF( N.EQ.0 .OR. NRHS.EQ.0 )
! 111: $ RETURN
! 112: *
! 113: * Decode TRANS
! 114: *
! 115: IF( NOTRAN ) THEN
! 116: ITRANS = 0
! 117: ELSE
! 118: ITRANS = 1
! 119: END IF
! 120: *
! 121: * Determine the number of right-hand sides to solve at a time.
! 122: *
! 123: IF( NRHS.EQ.1 ) THEN
! 124: NB = 1
! 125: ELSE
! 126: NB = MAX( 1, ILAENV( 1, 'DGTTRS', TRANS, N, NRHS, -1, -1 ) )
! 127: END IF
! 128: *
! 129: IF( NB.GE.NRHS ) THEN
! 130: CALL DGTTS2( ITRANS, N, NRHS, DL, D, DU, DU2, IPIV, B, LDB )
! 131: ELSE
! 132: DO 10 J = 1, NRHS, NB
! 133: JB = MIN( NRHS-J+1, NB )
! 134: CALL DGTTS2( ITRANS, N, JB, DL, D, DU, DU2, IPIV, B( 1, J ),
! 135: $ LDB )
! 136: 10 CONTINUE
! 137: END IF
! 138: *
! 139: * End of DGTTRS
! 140: *
! 141: END
CVSweb interface <joel.bertrand@systella.fr>