3
4
5
6
7
8
9
10
11
12
13
14
15 CHARACTER UPLO, TRANS
16 INTEGER INFO, LDB, N, NRHS
17
18
19 COMPLEX*16 B( LDB, * ), D( * ), DL( * ), DU( * )
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 LOGICAL LOWER, NOTRAN
76 INTEGER I, J
77
78
79 LOGICAL LSAME
81
82
83 EXTERNAL xerbla
84
85
87
88
89
90 info = 0
91 notran =
lsame( trans,
'N' )
92 lower =
lsame( uplo,
'L' )
93 IF( .NOT.lower .AND. .NOT.
lsame( uplo,
'U' ) )
THEN
94 info = -1
95 ELSE IF( .NOT.notran .AND. .NOT.
lsame( trans,
'T' ) .AND. .NOT.
96 $
lsame( trans,
'C' ) )
THEN
97 info = -2
98 ELSE IF( n.LT.0 ) THEN
99 info = -3
100 ELSE IF( nrhs.LT.0 ) THEN
101 info = -4
102 ELSE IF( ldb.LT.
max( n, 1 ) )
THEN
103 info = -9
104 END IF
105 IF( info.NE.0 ) THEN
106 CALL xerbla( 'ZDTTRSV', -info )
107 RETURN
108 END IF
109
110
111
112 IF( n.EQ.0 .OR. nrhs.EQ.0 )
113 $ RETURN
114
115 IF( notran ) THEN
116
117 IF( lower ) THEN
118
119
120 DO 35 j = 1, nrhs
121
122
123
124 DO 10 i = 1, n - 1
125 b( i+1, j ) = b( i+1, j ) - dl( i )*b( i, j )
126 10 CONTINUE
127 35 CONTINUE
128
129 ELSE
130
131
132 DO 30 j = 1, nrhs
133 b( n, j ) = b( n, j ) / d( n )
134 IF( n.GT.1 )
135 $ b( n-1, j ) = ( b( n-1, j )-du( n-1 )*b( n, j ) ) /
136 $ d( n-1 )
137 DO 20 i = n - 2, 1, -1
138 b( i, j ) = ( b( i, j )-du( i )*b( i+1, j ) ) / d( i )
139 20 CONTINUE
140 30 CONTINUE
141
142 ENDIF
143
144 ELSE IF(
lsame( trans,
'T' ) )
THEN
145
146 IF( .NOT. lower ) THEN
147
148
149 DO 65 j = 1, nrhs
150
151
152
153 b( 1, j ) = b( 1, j ) / d( 1 )
154 IF( n.GT.1 )
155 $ b( 2, j ) = ( b( 2, j )-du( 1 )*b( 1, j ) ) / d( 2 )
156 DO 40 i = 3, n
157 b( i, j ) = ( b( i, j )-du( i-1 )*b( i-1, j ) ) / d( i )
158 40 CONTINUE
159 65 CONTINUE
160
161 ELSE
162
163
164 DO 60 j = 1, nrhs
165
166
167
168 DO 50 i = n - 1, 1, -1
169 b( i, j ) = b( i, j ) - dl( i )*b( i+1, j )
170 50 CONTINUE
171 60 CONTINUE
172 ENDIF
173 ELSE
174
175 IF( .NOT. lower ) THEN
176
177
178 DO 95 j = 1, nrhs
179
180
181
182 b( 1, j ) = b( 1, j ) / dconjg( d( 1 ) )
183 IF( n.GT.1 )
184 $ b( 2, j ) = ( b( 2, j )-dconjg( du( 1 ) )*b( 1, j ) ) /
185 $ dconjg( d( 2 ) )
186 DO 70 i = 3, n
187 b( i, j ) = ( b( i, j )
188 $ -dconjg( du( i-1 ) )*b( i-1, j ) ) /
189 $ dconjg( d( i ) )
190 70 CONTINUE
191 95 CONTINUE
192
193 ELSE
194
195
196 DO 90 j = 1, nrhs
197
198
199
200 DO 80 i = n - 1, 1, -1
201 b( i, j ) = b( i, j ) - dconjg( dl( i ) )*b( i+1, j )
202 80 CONTINUE
203 90 CONTINUE
204 ENDIF
205 END IF
206
207
208