LAPACK  3.5.0
LAPACK: Linear Algebra PACKage
 All Classes Files Functions Variables Typedefs Macros
dgttrs.f
Go to the documentation of this file.
1 *> \brief \b DGTTRS
2 *
3 * =========== DOCUMENTATION ===========
4 *
5 * Online html documentation available at
6 * http://www.netlib.org/lapack/explore-html/
7 *
8 *> \htmlonly
9 *> Download DGTTRS + dependencies
10 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgttrs.f">
11 *> [TGZ]</a>
12 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgttrs.f">
13 *> [ZIP]</a>
14 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgttrs.f">
15 *> [TXT]</a>
16 *> \endhtmlonly
17 *
18 * Definition:
19 * ===========
20 *
21 * SUBROUTINE DGTTRS( TRANS, N, NRHS, DL, D, DU, DU2, IPIV, B, LDB,
22 * INFO )
23 *
24 * .. Scalar Arguments ..
25 * CHARACTER TRANS
26 * INTEGER INFO, LDB, N, NRHS
27 * ..
28 * .. Array Arguments ..
29 * INTEGER IPIV( * )
30 * DOUBLE PRECISION B( LDB, * ), D( * ), DL( * ), DU( * ), DU2( * )
31 * ..
32 *
33 *
34 *> \par Purpose:
35 * =============
36 *>
37 *> \verbatim
38 *>
39 *> DGTTRS solves one of the systems of equations
40 *> A*X = B or A**T*X = B,
41 *> with a tridiagonal matrix A using the LU factorization computed
42 *> by DGTTRF.
43 *> \endverbatim
44 *
45 * Arguments:
46 * ==========
47 *
48 *> \param[in] TRANS
49 *> \verbatim
50 *> TRANS is CHARACTER*1
51 *> Specifies the form of the system of equations.
52 *> = 'N': A * X = B (No transpose)
53 *> = 'T': A**T* X = B (Transpose)
54 *> = 'C': A**T* X = B (Conjugate transpose = Transpose)
55 *> \endverbatim
56 *>
57 *> \param[in] N
58 *> \verbatim
59 *> N is INTEGER
60 *> The order of the matrix A.
61 *> \endverbatim
62 *>
63 *> \param[in] NRHS
64 *> \verbatim
65 *> NRHS is INTEGER
66 *> The number of right hand sides, i.e., the number of columns
67 *> of the matrix B. NRHS >= 0.
68 *> \endverbatim
69 *>
70 *> \param[in] DL
71 *> \verbatim
72 *> DL is DOUBLE PRECISION array, dimension (N-1)
73 *> The (n-1) multipliers that define the matrix L from the
74 *> LU factorization of A.
75 *> \endverbatim
76 *>
77 *> \param[in] D
78 *> \verbatim
79 *> D is DOUBLE PRECISION array, dimension (N)
80 *> The n diagonal elements of the upper triangular matrix U from
81 *> the LU factorization of A.
82 *> \endverbatim
83 *>
84 *> \param[in] DU
85 *> \verbatim
86 *> DU is DOUBLE PRECISION array, dimension (N-1)
87 *> The (n-1) elements of the first super-diagonal of U.
88 *> \endverbatim
89 *>
90 *> \param[in] DU2
91 *> \verbatim
92 *> DU2 is DOUBLE PRECISION array, dimension (N-2)
93 *> The (n-2) elements of the second super-diagonal of U.
94 *> \endverbatim
95 *>
96 *> \param[in] IPIV
97 *> \verbatim
98 *> IPIV is INTEGER array, dimension (N)
99 *> The pivot indices; for 1 <= i <= n, row i of the matrix was
100 *> interchanged with row IPIV(i). IPIV(i) will always be either
101 *> i or i+1; IPIV(i) = i indicates a row interchange was not
102 *> required.
103 *> \endverbatim
104 *>
105 *> \param[in,out] B
106 *> \verbatim
107 *> B is DOUBLE PRECISION array, dimension (LDB,NRHS)
108 *> On entry, the matrix of right hand side vectors B.
109 *> On exit, B is overwritten by the solution vectors X.
110 *> \endverbatim
111 *>
112 *> \param[in] LDB
113 *> \verbatim
114 *> LDB is INTEGER
115 *> The leading dimension of the array B. LDB >= max(1,N).
116 *> \endverbatim
117 *>
118 *> \param[out] INFO
119 *> \verbatim
120 *> INFO is INTEGER
121 *> = 0: successful exit
122 *> < 0: if INFO = -i, the i-th argument had an illegal value
123 *> \endverbatim
124 *
125 * Authors:
126 * ========
127 *
128 *> \author Univ. of Tennessee
129 *> \author Univ. of California Berkeley
130 *> \author Univ. of Colorado Denver
131 *> \author NAG Ltd.
132 *
133 *> \date September 2012
134 *
135 *> \ingroup doubleGTcomputational
136 *
137 * =====================================================================
138  SUBROUTINE dgttrs( TRANS, N, NRHS, DL, D, DU, DU2, IPIV, B, LDB,
139  $ info )
140 *
141 * -- LAPACK computational routine (version 3.4.2) --
142 * -- LAPACK is a software package provided by Univ. of Tennessee, --
143 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
144 * September 2012
145 *
146 * .. Scalar Arguments ..
147  CHARACTER trans
148  INTEGER info, ldb, n, nrhs
149 * ..
150 * .. Array Arguments ..
151  INTEGER ipiv( * )
152  DOUBLE PRECISION b( ldb, * ), d( * ), dl( * ), du( * ), du2( * )
153 * ..
154 *
155 * =====================================================================
156 *
157 * .. Local Scalars ..
158  LOGICAL notran
159  INTEGER itrans, j, jb, nb
160 * ..
161 * .. External Functions ..
162  INTEGER ilaenv
163  EXTERNAL ilaenv
164 * ..
165 * .. External Subroutines ..
166  EXTERNAL dgtts2, xerbla
167 * ..
168 * .. Intrinsic Functions ..
169  INTRINSIC max, min
170 * ..
171 * .. Executable Statements ..
172 *
173  info = 0
174  notran = ( trans.EQ.'N' .OR. trans.EQ.'n' )
175  IF( .NOT.notran .AND. .NOT.( trans.EQ.'T' .OR. trans.EQ.
176  $ 't' ) .AND. .NOT.( trans.EQ.'C' .OR. trans.EQ.'c' ) ) THEN
177  info = -1
178  ELSE IF( n.LT.0 ) THEN
179  info = -2
180  ELSE IF( nrhs.LT.0 ) THEN
181  info = -3
182  ELSE IF( ldb.LT.max( n, 1 ) ) THEN
183  info = -10
184  END IF
185  IF( info.NE.0 ) THEN
186  CALL xerbla( 'DGTTRS', -info )
187  RETURN
188  END IF
189 *
190 * Quick return if possible
191 *
192  IF( n.EQ.0 .OR. nrhs.EQ.0 )
193  $ RETURN
194 *
195 * Decode TRANS
196 *
197  IF( notran ) THEN
198  itrans = 0
199  ELSE
200  itrans = 1
201  END IF
202 *
203 * Determine the number of right-hand sides to solve at a time.
204 *
205  IF( nrhs.EQ.1 ) THEN
206  nb = 1
207  ELSE
208  nb = max( 1, ilaenv( 1, 'DGTTRS', trans, n, nrhs, -1, -1 ) )
209  END IF
210 *
211  IF( nb.GE.nrhs ) THEN
212  CALL dgtts2( itrans, n, nrhs, dl, d, du, du2, ipiv, b, ldb )
213  ELSE
214  DO 10 j = 1, nrhs, nb
215  jb = min( nrhs-j+1, nb )
216  CALL dgtts2( itrans, n, jb, dl, d, du, du2, ipiv, b( 1, j ),
217  $ ldb )
218  10 CONTINUE
219  END IF
220 *
221 * End of DGTTRS
222 *
223  END