1 SUBROUTINE DLATB4( PATH, IMAT, M, N, TYPE, KL, KU, ANORM, MODE,
2 $ CNDNUM, DIST )
3 *
4 * -- LAPACK test routine (version 3.1) --
5 * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
6 * November 2006
7 *
8 * .. Scalar Arguments ..
9 CHARACTER DIST, TYPE
10 CHARACTER*3 PATH
11 INTEGER IMAT, KL, KU, M, MODE, N
12 DOUBLE PRECISION ANORM, CNDNUM
13 * ..
14 *
15 * Purpose
16 * =======
17 *
18 * DLATB4 sets parameters for the matrix generator based on the type of
19 * matrix to be generated.
20 *
21 * Arguments
22 * =========
23 *
24 * PATH (input) CHARACTER*3
25 * The LAPACK path name.
26 *
27 * IMAT (input) INTEGER
28 * An integer key describing which matrix to generate for this
29 * path.
30 *
31 * M (input) INTEGER
32 * The number of rows in the matrix to be generated.
33 *
34 * N (input) INTEGER
35 * The number of columns in the matrix to be generated.
36 *
37 * TYPE (output) CHARACTER*1
38 * The type of the matrix to be generated:
39 * = 'S': symmetric matrix
40 * = 'P': symmetric positive (semi)definite matrix
41 * = 'N': nonsymmetric matrix
42 *
43 * KL (output) INTEGER
44 * The lower band width of the matrix to be generated.
45 *
46 * KU (output) INTEGER
47 * The upper band width of the matrix to be generated.
48 *
49 * ANORM (output) DOUBLE PRECISION
50 * The desired norm of the matrix to be generated. The diagonal
51 * matrix of singular values or eigenvalues is scaled by this
52 * value.
53 *
54 * MODE (output) INTEGER
55 * A key indicating how to choose the vector of eigenvalues.
56 *
57 * CNDNUM (output) DOUBLE PRECISION
58 * The desired condition number.
59 *
60 * DIST (output) CHARACTER*1
61 * The type of distribution to be used by the random number
62 * generator.
63 *
64 * =====================================================================
65 *
66 * .. Parameters ..
67 DOUBLE PRECISION SHRINK, TENTH
68 PARAMETER ( SHRINK = 0.25D0, TENTH = 0.1D+0 )
69 DOUBLE PRECISION ONE
70 PARAMETER ( ONE = 1.0D+0 )
71 DOUBLE PRECISION TWO
72 PARAMETER ( TWO = 2.0D+0 )
73 * ..
74 * .. Local Scalars ..
75 LOGICAL FIRST
76 CHARACTER*2 C2
77 INTEGER MAT
78 DOUBLE PRECISION BADC1, BADC2, EPS, LARGE, SMALL
79 * ..
80 * .. External Functions ..
81 LOGICAL LSAMEN
82 DOUBLE PRECISION DLAMCH
83 EXTERNAL LSAMEN, DLAMCH
84 * ..
85 * .. Intrinsic Functions ..
86 INTRINSIC ABS, MAX, SQRT
87 * ..
88 * .. External Subroutines ..
89 EXTERNAL DLABAD
90 * ..
91 * .. Save statement ..
92 SAVE EPS, SMALL, LARGE, BADC1, BADC2, FIRST
93 * ..
94 * .. Data statements ..
95 DATA FIRST / .TRUE. /
96 * ..
97 * .. Executable Statements ..
98 *
99 * Set some constants for use in the subroutine.
100 *
101 IF( FIRST ) THEN
102 FIRST = .FALSE.
103 EPS = DLAMCH( 'Precision' )
104 BADC2 = TENTH / EPS
105 BADC1 = SQRT( BADC2 )
106 SMALL = DLAMCH( 'Safe minimum' )
107 LARGE = ONE / SMALL
108 *
109 * If it looks like we're on a Cray, take the square root of
110 * SMALL and LARGE to avoid overflow and underflow problems.
111 *
112 CALL DLABAD( SMALL, LARGE )
113 SMALL = SHRINK*( SMALL / EPS )
114 LARGE = ONE / SMALL
115 END IF
116 *
117 C2 = PATH( 2: 3 )
118 *
119 * Set some parameters we don't plan to change.
120 *
121 DIST = 'S'
122 MODE = 3
123 *
124 IF( LSAMEN( 2, C2, 'QR' ) .OR. LSAMEN( 2, C2, 'LQ' ) .OR.
125 $ LSAMEN( 2, C2, 'QL' ) .OR. LSAMEN( 2, C2, 'RQ' ) ) THEN
126 *
127 * xQR, xLQ, xQL, xRQ: Set parameters to generate a general
128 * M x N matrix.
129 *
130 * Set TYPE, the type of matrix to be generated.
131 *
132 TYPE = 'N'
133 *
134 * Set the lower and upper bandwidths.
135 *
136 IF( IMAT.EQ.1 ) THEN
137 KL = 0
138 KU = 0
139 ELSE IF( IMAT.EQ.2 ) THEN
140 KL = 0
141 KU = MAX( N-1, 0 )
142 ELSE IF( IMAT.EQ.3 ) THEN
143 KL = MAX( M-1, 0 )
144 KU = 0
145 ELSE
146 KL = MAX( M-1, 0 )
147 KU = MAX( N-1, 0 )
148 END IF
149 *
150 * Set the condition number and norm.
151 *
152 IF( IMAT.EQ.5 ) THEN
153 CNDNUM = BADC1
154 ELSE IF( IMAT.EQ.6 ) THEN
155 CNDNUM = BADC2
156 ELSE
157 CNDNUM = TWO
158 END IF
159 *
160 IF( IMAT.EQ.7 ) THEN
161 ANORM = SMALL
162 ELSE IF( IMAT.EQ.8 ) THEN
163 ANORM = LARGE
164 ELSE
165 ANORM = ONE
166 END IF
167 *
168 ELSE IF( LSAMEN( 2, C2, 'GE' ) ) THEN
169 *
170 * xGE: Set parameters to generate a general M x N matrix.
171 *
172 * Set TYPE, the type of matrix to be generated.
173 *
174 TYPE = 'N'
175 *
176 * Set the lower and upper bandwidths.
177 *
178 IF( IMAT.EQ.1 ) THEN
179 KL = 0
180 KU = 0
181 ELSE IF( IMAT.EQ.2 ) THEN
182 KL = 0
183 KU = MAX( N-1, 0 )
184 ELSE IF( IMAT.EQ.3 ) THEN
185 KL = MAX( M-1, 0 )
186 KU = 0
187 ELSE
188 KL = MAX( M-1, 0 )
189 KU = MAX( N-1, 0 )
190 END IF
191 *
192 * Set the condition number and norm.
193 *
194 IF( IMAT.EQ.8 ) THEN
195 CNDNUM = BADC1
196 ELSE IF( IMAT.EQ.9 ) THEN
197 CNDNUM = BADC2
198 ELSE
199 CNDNUM = TWO
200 END IF
201 *
202 IF( IMAT.EQ.10 ) THEN
203 ANORM = SMALL
204 ELSE IF( IMAT.EQ.11 ) THEN
205 ANORM = LARGE
206 ELSE
207 ANORM = ONE
208 END IF
209 *
210 ELSE IF( LSAMEN( 2, C2, 'GB' ) ) THEN
211 *
212 * xGB: Set parameters to generate a general banded matrix.
213 *
214 * Set TYPE, the type of matrix to be generated.
215 *
216 TYPE = 'N'
217 *
218 * Set the condition number and norm.
219 *
220 IF( IMAT.EQ.5 ) THEN
221 CNDNUM = BADC1
222 ELSE IF( IMAT.EQ.6 ) THEN
223 CNDNUM = TENTH*BADC2
224 ELSE
225 CNDNUM = TWO
226 END IF
227 *
228 IF( IMAT.EQ.7 ) THEN
229 ANORM = SMALL
230 ELSE IF( IMAT.EQ.8 ) THEN
231 ANORM = LARGE
232 ELSE
233 ANORM = ONE
234 END IF
235 *
236 ELSE IF( LSAMEN( 2, C2, 'GT' ) ) THEN
237 *
238 * xGT: Set parameters to generate a general tridiagonal matrix.
239 *
240 * Set TYPE, the type of matrix to be generated.
241 *
242 TYPE = 'N'
243 *
244 * Set the lower and upper bandwidths.
245 *
246 IF( IMAT.EQ.1 ) THEN
247 KL = 0
248 ELSE
249 KL = 1
250 END IF
251 KU = KL
252 *
253 * Set the condition number and norm.
254 *
255 IF( IMAT.EQ.3 ) THEN
256 CNDNUM = BADC1
257 ELSE IF( IMAT.EQ.4 ) THEN
258 CNDNUM = BADC2
259 ELSE
260 CNDNUM = TWO
261 END IF
262 *
263 IF( IMAT.EQ.5 .OR. IMAT.EQ.11 ) THEN
264 ANORM = SMALL
265 ELSE IF( IMAT.EQ.6 .OR. IMAT.EQ.12 ) THEN
266 ANORM = LARGE
267 ELSE
268 ANORM = ONE
269 END IF
270 *
271 ELSE IF( LSAMEN( 2, C2, 'PO' ) .OR. LSAMEN( 2, C2, 'PP' ) .OR.
272 $ LSAMEN( 2, C2, 'SY' ) .OR. LSAMEN( 2, C2, 'SP' ) ) THEN
273 *
274 * xPO, xPP, xSY, xSP: Set parameters to generate a
275 * symmetric matrix.
276 *
277 * Set TYPE, the type of matrix to be generated.
278 *
279 TYPE = C2( 1: 1 )
280 *
281 * Set the lower and upper bandwidths.
282 *
283 IF( IMAT.EQ.1 ) THEN
284 KL = 0
285 ELSE
286 KL = MAX( N-1, 0 )
287 END IF
288 KU = KL
289 *
290 * Set the condition number and norm.
291 *
292 IF( IMAT.EQ.6 ) THEN
293 CNDNUM = BADC1
294 ELSE IF( IMAT.EQ.7 ) THEN
295 CNDNUM = BADC2
296 ELSE
297 CNDNUM = TWO
298 END IF
299 *
300 IF( IMAT.EQ.8 ) THEN
301 ANORM = SMALL
302 ELSE IF( IMAT.EQ.9 ) THEN
303 ANORM = LARGE
304 ELSE
305 ANORM = ONE
306 END IF
307 *
308 ELSE IF( LSAMEN( 2, C2, 'PB' ) ) THEN
309 *
310 * xPB: Set parameters to generate a symmetric band matrix.
311 *
312 * Set TYPE, the type of matrix to be generated.
313 *
314 TYPE = 'P'
315 *
316 * Set the norm and condition number.
317 *
318 IF( IMAT.EQ.5 ) THEN
319 CNDNUM = BADC1
320 ELSE IF( IMAT.EQ.6 ) THEN
321 CNDNUM = BADC2
322 ELSE
323 CNDNUM = TWO
324 END IF
325 *
326 IF( IMAT.EQ.7 ) THEN
327 ANORM = SMALL
328 ELSE IF( IMAT.EQ.8 ) THEN
329 ANORM = LARGE
330 ELSE
331 ANORM = ONE
332 END IF
333 *
334 ELSE IF( LSAMEN( 2, C2, 'PT' ) ) THEN
335 *
336 * xPT: Set parameters to generate a symmetric positive definite
337 * tridiagonal matrix.
338 *
339 TYPE = 'P'
340 IF( IMAT.EQ.1 ) THEN
341 KL = 0
342 ELSE
343 KL = 1
344 END IF
345 KU = KL
346 *
347 * Set the condition number and norm.
348 *
349 IF( IMAT.EQ.3 ) THEN
350 CNDNUM = BADC1
351 ELSE IF( IMAT.EQ.4 ) THEN
352 CNDNUM = BADC2
353 ELSE
354 CNDNUM = TWO
355 END IF
356 *
357 IF( IMAT.EQ.5 .OR. IMAT.EQ.11 ) THEN
358 ANORM = SMALL
359 ELSE IF( IMAT.EQ.6 .OR. IMAT.EQ.12 ) THEN
360 ANORM = LARGE
361 ELSE
362 ANORM = ONE
363 END IF
364 *
365 ELSE IF( LSAMEN( 2, C2, 'TR' ) .OR. LSAMEN( 2, C2, 'TP' ) ) THEN
366 *
367 * xTR, xTP: Set parameters to generate a triangular matrix
368 *
369 * Set TYPE, the type of matrix to be generated.
370 *
371 TYPE = 'N'
372 *
373 * Set the lower and upper bandwidths.
374 *
375 MAT = ABS( IMAT )
376 IF( MAT.EQ.1 .OR. MAT.EQ.7 ) THEN
377 KL = 0
378 KU = 0
379 ELSE IF( IMAT.LT.0 ) THEN
380 KL = MAX( N-1, 0 )
381 KU = 0
382 ELSE
383 KL = 0
384 KU = MAX( N-1, 0 )
385 END IF
386 *
387 * Set the condition number and norm.
388 *
389 IF( MAT.EQ.3 .OR. MAT.EQ.9 ) THEN
390 CNDNUM = BADC1
391 ELSE IF( MAT.EQ.4 ) THEN
392 CNDNUM = BADC2
393 ELSE IF( MAT.EQ.10 ) THEN
394 CNDNUM = BADC2
395 ELSE
396 CNDNUM = TWO
397 END IF
398 *
399 IF( MAT.EQ.5 ) THEN
400 ANORM = SMALL
401 ELSE IF( MAT.EQ.6 ) THEN
402 ANORM = LARGE
403 ELSE
404 ANORM = ONE
405 END IF
406 *
407 ELSE IF( LSAMEN( 2, C2, 'TB' ) ) THEN
408 *
409 * xTB: Set parameters to generate a triangular band matrix.
410 *
411 * Set TYPE, the type of matrix to be generated.
412 *
413 TYPE = 'N'
414 *
415 * Set the norm and condition number.
416 *
417 IF( IMAT.EQ.2 .OR. IMAT.EQ.8 ) THEN
418 CNDNUM = BADC1
419 ELSE IF( IMAT.EQ.3 .OR. IMAT.EQ.9 ) THEN
420 CNDNUM = BADC2
421 ELSE
422 CNDNUM = TWO
423 END IF
424 *
425 IF( IMAT.EQ.4 ) THEN
426 ANORM = SMALL
427 ELSE IF( IMAT.EQ.5 ) THEN
428 ANORM = LARGE
429 ELSE
430 ANORM = ONE
431 END IF
432 END IF
433 IF( N.LE.1 )
434 $ CNDNUM = ONE
435 *
436 RETURN
437 *
438 * End of DLATB4
439 *
440 END
2 $ CNDNUM, DIST )
3 *
4 * -- LAPACK test routine (version 3.1) --
5 * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
6 * November 2006
7 *
8 * .. Scalar Arguments ..
9 CHARACTER DIST, TYPE
10 CHARACTER*3 PATH
11 INTEGER IMAT, KL, KU, M, MODE, N
12 DOUBLE PRECISION ANORM, CNDNUM
13 * ..
14 *
15 * Purpose
16 * =======
17 *
18 * DLATB4 sets parameters for the matrix generator based on the type of
19 * matrix to be generated.
20 *
21 * Arguments
22 * =========
23 *
24 * PATH (input) CHARACTER*3
25 * The LAPACK path name.
26 *
27 * IMAT (input) INTEGER
28 * An integer key describing which matrix to generate for this
29 * path.
30 *
31 * M (input) INTEGER
32 * The number of rows in the matrix to be generated.
33 *
34 * N (input) INTEGER
35 * The number of columns in the matrix to be generated.
36 *
37 * TYPE (output) CHARACTER*1
38 * The type of the matrix to be generated:
39 * = 'S': symmetric matrix
40 * = 'P': symmetric positive (semi)definite matrix
41 * = 'N': nonsymmetric matrix
42 *
43 * KL (output) INTEGER
44 * The lower band width of the matrix to be generated.
45 *
46 * KU (output) INTEGER
47 * The upper band width of the matrix to be generated.
48 *
49 * ANORM (output) DOUBLE PRECISION
50 * The desired norm of the matrix to be generated. The diagonal
51 * matrix of singular values or eigenvalues is scaled by this
52 * value.
53 *
54 * MODE (output) INTEGER
55 * A key indicating how to choose the vector of eigenvalues.
56 *
57 * CNDNUM (output) DOUBLE PRECISION
58 * The desired condition number.
59 *
60 * DIST (output) CHARACTER*1
61 * The type of distribution to be used by the random number
62 * generator.
63 *
64 * =====================================================================
65 *
66 * .. Parameters ..
67 DOUBLE PRECISION SHRINK, TENTH
68 PARAMETER ( SHRINK = 0.25D0, TENTH = 0.1D+0 )
69 DOUBLE PRECISION ONE
70 PARAMETER ( ONE = 1.0D+0 )
71 DOUBLE PRECISION TWO
72 PARAMETER ( TWO = 2.0D+0 )
73 * ..
74 * .. Local Scalars ..
75 LOGICAL FIRST
76 CHARACTER*2 C2
77 INTEGER MAT
78 DOUBLE PRECISION BADC1, BADC2, EPS, LARGE, SMALL
79 * ..
80 * .. External Functions ..
81 LOGICAL LSAMEN
82 DOUBLE PRECISION DLAMCH
83 EXTERNAL LSAMEN, DLAMCH
84 * ..
85 * .. Intrinsic Functions ..
86 INTRINSIC ABS, MAX, SQRT
87 * ..
88 * .. External Subroutines ..
89 EXTERNAL DLABAD
90 * ..
91 * .. Save statement ..
92 SAVE EPS, SMALL, LARGE, BADC1, BADC2, FIRST
93 * ..
94 * .. Data statements ..
95 DATA FIRST / .TRUE. /
96 * ..
97 * .. Executable Statements ..
98 *
99 * Set some constants for use in the subroutine.
100 *
101 IF( FIRST ) THEN
102 FIRST = .FALSE.
103 EPS = DLAMCH( 'Precision' )
104 BADC2 = TENTH / EPS
105 BADC1 = SQRT( BADC2 )
106 SMALL = DLAMCH( 'Safe minimum' )
107 LARGE = ONE / SMALL
108 *
109 * If it looks like we're on a Cray, take the square root of
110 * SMALL and LARGE to avoid overflow and underflow problems.
111 *
112 CALL DLABAD( SMALL, LARGE )
113 SMALL = SHRINK*( SMALL / EPS )
114 LARGE = ONE / SMALL
115 END IF
116 *
117 C2 = PATH( 2: 3 )
118 *
119 * Set some parameters we don't plan to change.
120 *
121 DIST = 'S'
122 MODE = 3
123 *
124 IF( LSAMEN( 2, C2, 'QR' ) .OR. LSAMEN( 2, C2, 'LQ' ) .OR.
125 $ LSAMEN( 2, C2, 'QL' ) .OR. LSAMEN( 2, C2, 'RQ' ) ) THEN
126 *
127 * xQR, xLQ, xQL, xRQ: Set parameters to generate a general
128 * M x N matrix.
129 *
130 * Set TYPE, the type of matrix to be generated.
131 *
132 TYPE = 'N'
133 *
134 * Set the lower and upper bandwidths.
135 *
136 IF( IMAT.EQ.1 ) THEN
137 KL = 0
138 KU = 0
139 ELSE IF( IMAT.EQ.2 ) THEN
140 KL = 0
141 KU = MAX( N-1, 0 )
142 ELSE IF( IMAT.EQ.3 ) THEN
143 KL = MAX( M-1, 0 )
144 KU = 0
145 ELSE
146 KL = MAX( M-1, 0 )
147 KU = MAX( N-1, 0 )
148 END IF
149 *
150 * Set the condition number and norm.
151 *
152 IF( IMAT.EQ.5 ) THEN
153 CNDNUM = BADC1
154 ELSE IF( IMAT.EQ.6 ) THEN
155 CNDNUM = BADC2
156 ELSE
157 CNDNUM = TWO
158 END IF
159 *
160 IF( IMAT.EQ.7 ) THEN
161 ANORM = SMALL
162 ELSE IF( IMAT.EQ.8 ) THEN
163 ANORM = LARGE
164 ELSE
165 ANORM = ONE
166 END IF
167 *
168 ELSE IF( LSAMEN( 2, C2, 'GE' ) ) THEN
169 *
170 * xGE: Set parameters to generate a general M x N matrix.
171 *
172 * Set TYPE, the type of matrix to be generated.
173 *
174 TYPE = 'N'
175 *
176 * Set the lower and upper bandwidths.
177 *
178 IF( IMAT.EQ.1 ) THEN
179 KL = 0
180 KU = 0
181 ELSE IF( IMAT.EQ.2 ) THEN
182 KL = 0
183 KU = MAX( N-1, 0 )
184 ELSE IF( IMAT.EQ.3 ) THEN
185 KL = MAX( M-1, 0 )
186 KU = 0
187 ELSE
188 KL = MAX( M-1, 0 )
189 KU = MAX( N-1, 0 )
190 END IF
191 *
192 * Set the condition number and norm.
193 *
194 IF( IMAT.EQ.8 ) THEN
195 CNDNUM = BADC1
196 ELSE IF( IMAT.EQ.9 ) THEN
197 CNDNUM = BADC2
198 ELSE
199 CNDNUM = TWO
200 END IF
201 *
202 IF( IMAT.EQ.10 ) THEN
203 ANORM = SMALL
204 ELSE IF( IMAT.EQ.11 ) THEN
205 ANORM = LARGE
206 ELSE
207 ANORM = ONE
208 END IF
209 *
210 ELSE IF( LSAMEN( 2, C2, 'GB' ) ) THEN
211 *
212 * xGB: Set parameters to generate a general banded matrix.
213 *
214 * Set TYPE, the type of matrix to be generated.
215 *
216 TYPE = 'N'
217 *
218 * Set the condition number and norm.
219 *
220 IF( IMAT.EQ.5 ) THEN
221 CNDNUM = BADC1
222 ELSE IF( IMAT.EQ.6 ) THEN
223 CNDNUM = TENTH*BADC2
224 ELSE
225 CNDNUM = TWO
226 END IF
227 *
228 IF( IMAT.EQ.7 ) THEN
229 ANORM = SMALL
230 ELSE IF( IMAT.EQ.8 ) THEN
231 ANORM = LARGE
232 ELSE
233 ANORM = ONE
234 END IF
235 *
236 ELSE IF( LSAMEN( 2, C2, 'GT' ) ) THEN
237 *
238 * xGT: Set parameters to generate a general tridiagonal matrix.
239 *
240 * Set TYPE, the type of matrix to be generated.
241 *
242 TYPE = 'N'
243 *
244 * Set the lower and upper bandwidths.
245 *
246 IF( IMAT.EQ.1 ) THEN
247 KL = 0
248 ELSE
249 KL = 1
250 END IF
251 KU = KL
252 *
253 * Set the condition number and norm.
254 *
255 IF( IMAT.EQ.3 ) THEN
256 CNDNUM = BADC1
257 ELSE IF( IMAT.EQ.4 ) THEN
258 CNDNUM = BADC2
259 ELSE
260 CNDNUM = TWO
261 END IF
262 *
263 IF( IMAT.EQ.5 .OR. IMAT.EQ.11 ) THEN
264 ANORM = SMALL
265 ELSE IF( IMAT.EQ.6 .OR. IMAT.EQ.12 ) THEN
266 ANORM = LARGE
267 ELSE
268 ANORM = ONE
269 END IF
270 *
271 ELSE IF( LSAMEN( 2, C2, 'PO' ) .OR. LSAMEN( 2, C2, 'PP' ) .OR.
272 $ LSAMEN( 2, C2, 'SY' ) .OR. LSAMEN( 2, C2, 'SP' ) ) THEN
273 *
274 * xPO, xPP, xSY, xSP: Set parameters to generate a
275 * symmetric matrix.
276 *
277 * Set TYPE, the type of matrix to be generated.
278 *
279 TYPE = C2( 1: 1 )
280 *
281 * Set the lower and upper bandwidths.
282 *
283 IF( IMAT.EQ.1 ) THEN
284 KL = 0
285 ELSE
286 KL = MAX( N-1, 0 )
287 END IF
288 KU = KL
289 *
290 * Set the condition number and norm.
291 *
292 IF( IMAT.EQ.6 ) THEN
293 CNDNUM = BADC1
294 ELSE IF( IMAT.EQ.7 ) THEN
295 CNDNUM = BADC2
296 ELSE
297 CNDNUM = TWO
298 END IF
299 *
300 IF( IMAT.EQ.8 ) THEN
301 ANORM = SMALL
302 ELSE IF( IMAT.EQ.9 ) THEN
303 ANORM = LARGE
304 ELSE
305 ANORM = ONE
306 END IF
307 *
308 ELSE IF( LSAMEN( 2, C2, 'PB' ) ) THEN
309 *
310 * xPB: Set parameters to generate a symmetric band matrix.
311 *
312 * Set TYPE, the type of matrix to be generated.
313 *
314 TYPE = 'P'
315 *
316 * Set the norm and condition number.
317 *
318 IF( IMAT.EQ.5 ) THEN
319 CNDNUM = BADC1
320 ELSE IF( IMAT.EQ.6 ) THEN
321 CNDNUM = BADC2
322 ELSE
323 CNDNUM = TWO
324 END IF
325 *
326 IF( IMAT.EQ.7 ) THEN
327 ANORM = SMALL
328 ELSE IF( IMAT.EQ.8 ) THEN
329 ANORM = LARGE
330 ELSE
331 ANORM = ONE
332 END IF
333 *
334 ELSE IF( LSAMEN( 2, C2, 'PT' ) ) THEN
335 *
336 * xPT: Set parameters to generate a symmetric positive definite
337 * tridiagonal matrix.
338 *
339 TYPE = 'P'
340 IF( IMAT.EQ.1 ) THEN
341 KL = 0
342 ELSE
343 KL = 1
344 END IF
345 KU = KL
346 *
347 * Set the condition number and norm.
348 *
349 IF( IMAT.EQ.3 ) THEN
350 CNDNUM = BADC1
351 ELSE IF( IMAT.EQ.4 ) THEN
352 CNDNUM = BADC2
353 ELSE
354 CNDNUM = TWO
355 END IF
356 *
357 IF( IMAT.EQ.5 .OR. IMAT.EQ.11 ) THEN
358 ANORM = SMALL
359 ELSE IF( IMAT.EQ.6 .OR. IMAT.EQ.12 ) THEN
360 ANORM = LARGE
361 ELSE
362 ANORM = ONE
363 END IF
364 *
365 ELSE IF( LSAMEN( 2, C2, 'TR' ) .OR. LSAMEN( 2, C2, 'TP' ) ) THEN
366 *
367 * xTR, xTP: Set parameters to generate a triangular matrix
368 *
369 * Set TYPE, the type of matrix to be generated.
370 *
371 TYPE = 'N'
372 *
373 * Set the lower and upper bandwidths.
374 *
375 MAT = ABS( IMAT )
376 IF( MAT.EQ.1 .OR. MAT.EQ.7 ) THEN
377 KL = 0
378 KU = 0
379 ELSE IF( IMAT.LT.0 ) THEN
380 KL = MAX( N-1, 0 )
381 KU = 0
382 ELSE
383 KL = 0
384 KU = MAX( N-1, 0 )
385 END IF
386 *
387 * Set the condition number and norm.
388 *
389 IF( MAT.EQ.3 .OR. MAT.EQ.9 ) THEN
390 CNDNUM = BADC1
391 ELSE IF( MAT.EQ.4 ) THEN
392 CNDNUM = BADC2
393 ELSE IF( MAT.EQ.10 ) THEN
394 CNDNUM = BADC2
395 ELSE
396 CNDNUM = TWO
397 END IF
398 *
399 IF( MAT.EQ.5 ) THEN
400 ANORM = SMALL
401 ELSE IF( MAT.EQ.6 ) THEN
402 ANORM = LARGE
403 ELSE
404 ANORM = ONE
405 END IF
406 *
407 ELSE IF( LSAMEN( 2, C2, 'TB' ) ) THEN
408 *
409 * xTB: Set parameters to generate a triangular band matrix.
410 *
411 * Set TYPE, the type of matrix to be generated.
412 *
413 TYPE = 'N'
414 *
415 * Set the norm and condition number.
416 *
417 IF( IMAT.EQ.2 .OR. IMAT.EQ.8 ) THEN
418 CNDNUM = BADC1
419 ELSE IF( IMAT.EQ.3 .OR. IMAT.EQ.9 ) THEN
420 CNDNUM = BADC2
421 ELSE
422 CNDNUM = TWO
423 END IF
424 *
425 IF( IMAT.EQ.4 ) THEN
426 ANORM = SMALL
427 ELSE IF( IMAT.EQ.5 ) THEN
428 ANORM = LARGE
429 ELSE
430 ANORM = ONE
431 END IF
432 END IF
433 IF( N.LE.1 )
434 $ CNDNUM = ONE
435 *
436 RETURN
437 *
438 * End of DLATB4
439 *
440 END