annotate main/splines/dgtsv.f @ 0:6b33357c7561 octave-forge

Initial revision
author pkienzle
date Wed, 10 Oct 2001 19:54:49 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
1 SUBROUTINE DGTSV( N, NRHS, DL, D, DU, B, LDB, INFO )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
2 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
3 * -- LAPACK routine (version 3.0) --
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
4 * Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
5 * Courant Institute, Argonne National Lab, and Rice University
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
6 * October 31, 1999
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
7 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
8 * .. Scalar Arguments ..
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
9 INTEGER INFO, LDB, N, NRHS
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
10 * ..
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
11 * .. Array Arguments ..
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
12 DOUBLE PRECISION B( LDB, * ), D( * ), DL( * ), DU( * )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
13 * ..
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
14 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
15 * Purpose
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
16 * =======
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
17 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
18 * DGTSV solves the equation
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
19 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
20 * A*X = B,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
21 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
22 * where A is an n by n tridiagonal matrix, by Gaussian elimination with
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
23 * partial pivoting.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
24 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
25 * Note that the equation A'*X = B may be solved by interchanging the
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
26 * order of the arguments DU and DL.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
27 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
28 * Arguments
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
29 * =========
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
30 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
31 * N (input) INTEGER
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
32 * The order of the matrix A. N >= 0.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
33 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
34 * NRHS (input) INTEGER
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
35 * The number of right hand sides, i.e., the number of columns
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
36 * of the matrix B. NRHS >= 0.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
37 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
38 * DL (input/output) DOUBLE PRECISION array, dimension (N-1)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
39 * On entry, DL must contain the (n-1) sub-diagonal elements of
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
40 * A.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
41 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
42 * On exit, DL is overwritten by the (n-2) elements of the
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
43 * second super-diagonal of the upper triangular matrix U from
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
44 * the LU factorization of A, in DL(1), ..., DL(n-2).
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
45 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
46 * D (input/output) DOUBLE PRECISION array, dimension (N)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
47 * On entry, D must contain the diagonal elements of A.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
48 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
49 * On exit, D is overwritten by the n diagonal elements of U.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
50 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
51 * DU (input/output) DOUBLE PRECISION array, dimension (N-1)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
52 * On entry, DU must contain the (n-1) super-diagonal elements
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
53 * of A.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
54 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
55 * On exit, DU is overwritten by the (n-1) elements of the first
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
56 * super-diagonal of U.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
57 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
58 * B (input/output) DOUBLE PRECISION array, dimension (LDB,NRHS)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
59 * On entry, the N by NRHS matrix of right hand side matrix B.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
60 * On exit, if INFO = 0, the N by NRHS solution matrix X.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
61 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
62 * LDB (input) INTEGER
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
63 * The leading dimension of the array B. LDB >= max(1,N).
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
64 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
65 * INFO (output) INTEGER
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
66 * = 0: successful exit
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
67 * < 0: if INFO = -i, the i-th argument had an illegal value
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
68 * > 0: if INFO = i, U(i,i) is exactly zero, and the solution
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
69 * has not been computed. The factorization has not been
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
70 * completed unless i = N.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
71 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
72 * =====================================================================
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
73 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
74 * .. Parameters ..
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
75 DOUBLE PRECISION ZERO
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
76 PARAMETER ( ZERO = 0.0D+0 )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
77 * ..
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
78 * .. Local Scalars ..
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
79 INTEGER I, J
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
80 DOUBLE PRECISION FACT, TEMP
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
81 * ..
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
82 * .. Intrinsic Functions ..
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
83 INTRINSIC ABS, MAX
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
84 * ..
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
85 * .. External Subroutines ..
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
86 EXTERNAL XERBLA
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
87 * ..
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
88 * .. Executable Statements ..
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
89 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
90 INFO = 0
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
91 IF( N.LT.0 ) THEN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
92 INFO = -1
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
93 ELSE IF( NRHS.LT.0 ) THEN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
94 INFO = -2
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
95 ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
96 INFO = -7
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
97 END IF
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
98 IF( INFO.NE.0 ) THEN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
99 CALL XERBLA( 'DGTSV ', -INFO )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
100 RETURN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
101 END IF
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
102 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
103 IF( N.EQ.0 )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
104 $ RETURN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
105 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
106 IF( NRHS.EQ.1 ) THEN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
107 DO 10 I = 1, N - 2
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
108 IF( ABS( D( I ) ).GE.ABS( DL( I ) ) ) THEN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
109 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
110 * No row interchange required
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
111 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
112 IF( D( I ).NE.ZERO ) THEN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
113 FACT = DL( I ) / D( I )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
114 D( I+1 ) = D( I+1 ) - FACT*DU( I )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
115 B( I+1, 1 ) = B( I+1, 1 ) - FACT*B( I, 1 )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
116 ELSE
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
117 INFO = I
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
118 RETURN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
119 END IF
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
120 DL( I ) = ZERO
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
121 ELSE
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
122 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
123 * Interchange rows I and I+1
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
124 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
125 FACT = D( I ) / DL( I )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
126 D( I ) = DL( I )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
127 TEMP = D( I+1 )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
128 D( I+1 ) = DU( I ) - FACT*TEMP
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
129 DL( I ) = DU( I+1 )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
130 DU( I+1 ) = -FACT*DL( I )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
131 DU( I ) = TEMP
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
132 TEMP = B( I, 1 )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
133 B( I, 1 ) = B( I+1, 1 )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
134 B( I+1, 1 ) = TEMP - FACT*B( I+1, 1 )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
135 END IF
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
136 10 CONTINUE
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
137 IF( N.GT.1 ) THEN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
138 I = N - 1
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
139 IF( ABS( D( I ) ).GE.ABS( DL( I ) ) ) THEN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
140 IF( D( I ).NE.ZERO ) THEN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
141 FACT = DL( I ) / D( I )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
142 D( I+1 ) = D( I+1 ) - FACT*DU( I )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
143 B( I+1, 1 ) = B( I+1, 1 ) - FACT*B( I, 1 )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
144 ELSE
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
145 INFO = I
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
146 RETURN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
147 END IF
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
148 ELSE
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
149 FACT = D( I ) / DL( I )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
150 D( I ) = DL( I )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
151 TEMP = D( I+1 )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
152 D( I+1 ) = DU( I ) - FACT*TEMP
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
153 DU( I ) = TEMP
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
154 TEMP = B( I, 1 )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
155 B( I, 1 ) = B( I+1, 1 )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
156 B( I+1, 1 ) = TEMP - FACT*B( I+1, 1 )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
157 END IF
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
158 END IF
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
159 IF( D( N ).EQ.ZERO ) THEN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
160 INFO = N
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
161 RETURN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
162 END IF
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
163 ELSE
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
164 DO 40 I = 1, N - 2
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
165 IF( ABS( D( I ) ).GE.ABS( DL( I ) ) ) THEN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
166 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
167 * No row interchange required
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
168 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
169 IF( D( I ).NE.ZERO ) THEN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
170 FACT = DL( I ) / D( I )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
171 D( I+1 ) = D( I+1 ) - FACT*DU( I )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
172 DO 20 J = 1, NRHS
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
173 B( I+1, J ) = B( I+1, J ) - FACT*B( I, J )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
174 20 CONTINUE
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
175 ELSE
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
176 INFO = I
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
177 RETURN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
178 END IF
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
179 DL( I ) = ZERO
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
180 ELSE
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
181 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
182 * Interchange rows I and I+1
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
183 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
184 FACT = D( I ) / DL( I )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
185 D( I ) = DL( I )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
186 TEMP = D( I+1 )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
187 D( I+1 ) = DU( I ) - FACT*TEMP
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
188 DL( I ) = DU( I+1 )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
189 DU( I+1 ) = -FACT*DL( I )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
190 DU( I ) = TEMP
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
191 DO 30 J = 1, NRHS
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
192 TEMP = B( I, J )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
193 B( I, J ) = B( I+1, J )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
194 B( I+1, J ) = TEMP - FACT*B( I+1, J )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
195 30 CONTINUE
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
196 END IF
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
197 40 CONTINUE
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
198 IF( N.GT.1 ) THEN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
199 I = N - 1
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
200 IF( ABS( D( I ) ).GE.ABS( DL( I ) ) ) THEN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
201 IF( D( I ).NE.ZERO ) THEN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
202 FACT = DL( I ) / D( I )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
203 D( I+1 ) = D( I+1 ) - FACT*DU( I )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
204 DO 50 J = 1, NRHS
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
205 B( I+1, J ) = B( I+1, J ) - FACT*B( I, J )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
206 50 CONTINUE
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
207 ELSE
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
208 INFO = I
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
209 RETURN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
210 END IF
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
211 ELSE
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
212 FACT = D( I ) / DL( I )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
213 D( I ) = DL( I )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
214 TEMP = D( I+1 )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
215 D( I+1 ) = DU( I ) - FACT*TEMP
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
216 DU( I ) = TEMP
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
217 DO 60 J = 1, NRHS
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
218 TEMP = B( I, J )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
219 B( I, J ) = B( I+1, J )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
220 B( I+1, J ) = TEMP - FACT*B( I+1, J )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
221 60 CONTINUE
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
222 END IF
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
223 END IF
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
224 IF( D( N ).EQ.ZERO ) THEN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
225 INFO = N
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
226 RETURN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
227 END IF
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
228 END IF
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
229 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
230 * Back solve with the matrix U from the factorization.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
231 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
232 IF( NRHS.LE.2 ) THEN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
233 J = 1
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
234 70 CONTINUE
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
235 B( N, J ) = B( N, J ) / D( N )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
236 IF( N.GT.1 )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
237 $ B( N-1, J ) = ( B( N-1, J )-DU( N-1 )*B( N, J ) ) / D( N-1 )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
238 DO 80 I = N - 2, 1, -1
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
239 B( I, J ) = ( B( I, J )-DU( I )*B( I+1, J )-DL( I )*
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
240 $ B( I+2, J ) ) / D( I )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
241 80 CONTINUE
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
242 IF( J.LT.NRHS ) THEN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
243 J = J + 1
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
244 GO TO 70
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
245 END IF
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
246 ELSE
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
247 DO 100 J = 1, NRHS
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
248 B( N, J ) = B( N, J ) / D( N )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
249 IF( N.GT.1 )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
250 $ B( N-1, J ) = ( B( N-1, J )-DU( N-1 )*B( N, J ) ) /
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
251 $ D( N-1 )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
252 DO 90 I = N - 2, 1, -1
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
253 B( I, J ) = ( B( I, J )-DU( I )*B( I+1, J )-DL( I )*
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
254 $ B( I+2, J ) ) / D( I )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
255 90 CONTINUE
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
256 100 CONTINUE
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
257 END IF
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
258 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
259 RETURN
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
260 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
261 * End of DGTSV
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
262 *
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
263 END