2
3
4
5
6
7
8
9 CHARACTER*1 DIAG, UPLO
10 INTEGER IOFFD, LDA, LDB, M, N
11
12
13 DOUBLE PRECISION A( LDA, * ), B( LDB, * )
14
15
16
17
18
19
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119 DOUBLE PRECISION ONE, ZERO
120 parameter( one = 1.0d+0, zero = 0.0d+0 )
121
122
123 INTEGER I, ITMP, J, JTMP, MN
124
125
126 LOGICAL LSAME
128
129
131
132
133
134
135 IF( m.LE.0 .OR. n.LE.0 )
136 $ RETURN
137
138
139
140 IF(
lsame( uplo,
'L' ) )
THEN
141
142 mn =
max( 0, -ioffd )
143 DO 20 j = 1,
min( mn, n )
144 DO 10 i = 1, m
145 b( i, j ) = a( i, j )
146 10 CONTINUE
147 20 CONTINUE
148
149 jtmp =
min( m - ioffd, n )
150
151 IF(
lsame( diag,
'N' ) )
THEN
152 DO 50 j = mn + 1, jtmp
153 itmp = j + ioffd
154 DO 30 i = 1, itmp - 1
155 b( i, j ) = zero
156 30 CONTINUE
157 DO 40 i = itmp, m
158 b( i, j ) = a( i, j )
159 40 CONTINUE
160 50 CONTINUE
161 ELSE
162 DO 80 j = mn + 1, jtmp
163 itmp = j + ioffd
164 DO 60 i = 1, itmp - 1
165 b( i, j ) = zero
166 60 CONTINUE
167 b( itmp, j ) = one
168 DO 70 i = itmp + 1, m
169 b( i, j ) = a( i, j )
170 70 CONTINUE
171 80 CONTINUE
172 END IF
173
174 DO 100 j = jtmp + 1, n
175 DO 90 i = 1, m
176 b( i, j ) = zero
177 90 CONTINUE
178 100 CONTINUE
179
180 ELSE IF(
lsame( uplo,
'U' ) )
THEN
181
182 jtmp =
max( 0, -ioffd )
183
184 DO 120 j = 1, jtmp
185 DO 110 i = 1, m
186 b( i, j ) = zero
187 110 CONTINUE
188 120 CONTINUE
189
190 mn =
min( m - ioffd, n )
191
192 IF(
lsame( diag,
'N' ) )
THEN
193 DO 150 j = jtmp + 1, mn
194 itmp = j + ioffd
195 DO 130 i = 1, itmp
196 b( i, j ) = a( i, j )
197 130 CONTINUE
198 DO 140 i = itmp + 1, m
199 b( i, j ) = zero
200 140 CONTINUE
201 150 CONTINUE
202 ELSE
203 DO 180 j = jtmp + 1, mn
204 itmp = j + ioffd
205 DO 160 i = 1, itmp - 1
206 b( i, j ) = a( i, j )
207 160 CONTINUE
208 b( itmp, j ) = one
209 DO 170 i = itmp + 1, m
210 b( i, j ) = zero
211 170 CONTINUE
212 180 CONTINUE
213 END IF
214
215 DO 200 j =
max( 0, mn ) + 1, n
216 DO 190 i = 1, m
217 b( i, j ) = a( i, j )
218 190 CONTINUE
219 200 CONTINUE
220
221 ELSE
222
223 DO 220 j = 1, n
224 DO 210 i = 1, m
225 b( i, j ) = a( i, j )
226 210 CONTINUE
227 220 CONTINUE
228
229 END IF
230
231 RETURN
232
233
234