1 SUBROUTINE CLATB4( 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 REAL ANORM, CNDNUM
13 * ..
14 *
15 * Purpose
16 * =======
17 *
18 * CLATB4 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) REAL
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) REAL
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 REAL SHRINK, TENTH
68 PARAMETER ( SHRINK = 0.25E0, TENTH = 0.1E+0 )
69 REAL ONE
70 PARAMETER ( ONE = 1.0E+0 )
71 REAL TWO
72 PARAMETER ( TWO = 2.0E+0 )
73 * ..
74 * .. Local Scalars ..
75 LOGICAL FIRST
76 CHARACTER*2 C2
77 INTEGER MAT
78 REAL BADC1, BADC2, EPS, LARGE, SMALL
79 * ..
80 * .. External Functions ..
81 LOGICAL LSAMEN
82 REAL SLAMCH
83 EXTERNAL LSAMEN, SLAMCH
84 * ..
85 * .. Intrinsic Functions ..
86 INTRINSIC ABS, MAX, SQRT
87 * ..
88 * .. External Subroutines ..
89 EXTERNAL SLABAD
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 = SLAMCH( 'Precision' )
104 BADC2 = TENTH / EPS
105 BADC1 = SQRT( BADC2 )
106 SMALL = SLAMCH( '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 SLABAD( 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 * xQR, xLQ, xQL, xRQ: Set parameters to generate a general
125 * M x N matrix.
126 *
127 IF( LSAMEN( 2, C2, 'QR' ) .OR. LSAMEN( 2, C2, 'LQ' ) .OR.
128 $ LSAMEN( 2, C2, 'QL' ) .OR. LSAMEN( 2, C2, 'RQ' ) ) THEN
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, 'HE' ) .OR. LSAMEN( 2, C2, 'HP' ) .OR.
273 $ LSAMEN( 2, C2, 'SY' ) .OR. LSAMEN( 2, C2, 'SP' ) ) THEN
274 *
275 * xPO, xPP, xHE, xHP, xSY, xSP: Set parameters to generate a
276 * symmetric or Hermitian matrix.
277 *
278 * Set TYPE, the type of matrix to be generated.
279 *
280 TYPE = C2( 1: 1 )
281 *
282 * Set the lower and upper bandwidths.
283 *
284 IF( IMAT.EQ.1 ) THEN
285 KL = 0
286 ELSE
287 KL = MAX( N-1, 0 )
288 END IF
289 KU = KL
290 *
291 * Set the condition number and norm.
292 *
293 IF( IMAT.EQ.6 ) THEN
294 CNDNUM = BADC1
295 ELSE IF( IMAT.EQ.7 ) THEN
296 CNDNUM = BADC2
297 ELSE
298 CNDNUM = TWO
299 END IF
300 *
301 IF( IMAT.EQ.8 ) THEN
302 ANORM = SMALL
303 ELSE IF( IMAT.EQ.9 ) THEN
304 ANORM = LARGE
305 ELSE
306 ANORM = ONE
307 END IF
308 *
309 ELSE IF( LSAMEN( 2, C2, 'PB' ) ) THEN
310 *
311 * xPB: Set parameters to generate a symmetric band matrix.
312 *
313 * Set TYPE, the type of matrix to be generated.
314 *
315 TYPE = 'P'
316 *
317 * Set the norm and condition number.
318 *
319 IF( IMAT.EQ.5 ) THEN
320 CNDNUM = BADC1
321 ELSE IF( IMAT.EQ.6 ) THEN
322 CNDNUM = BADC2
323 ELSE
324 CNDNUM = TWO
325 END IF
326 *
327 IF( IMAT.EQ.7 ) THEN
328 ANORM = SMALL
329 ELSE IF( IMAT.EQ.8 ) THEN
330 ANORM = LARGE
331 ELSE
332 ANORM = ONE
333 END IF
334 *
335 ELSE IF( LSAMEN( 2, C2, 'PT' ) ) THEN
336 *
337 * xPT: Set parameters to generate a symmetric positive definite
338 * tridiagonal matrix.
339 *
340 TYPE = 'P'
341 IF( IMAT.EQ.1 ) THEN
342 KL = 0
343 ELSE
344 KL = 1
345 END IF
346 KU = KL
347 *
348 * Set the condition number and norm.
349 *
350 IF( IMAT.EQ.3 ) THEN
351 CNDNUM = BADC1
352 ELSE IF( IMAT.EQ.4 ) THEN
353 CNDNUM = BADC2
354 ELSE
355 CNDNUM = TWO
356 END IF
357 *
358 IF( IMAT.EQ.5 .OR. IMAT.EQ.11 ) THEN
359 ANORM = SMALL
360 ELSE IF( IMAT.EQ.6 .OR. IMAT.EQ.12 ) THEN
361 ANORM = LARGE
362 ELSE
363 ANORM = ONE
364 END IF
365 *
366 ELSE IF( LSAMEN( 2, C2, 'TR' ) .OR. LSAMEN( 2, C2, 'TP' ) ) THEN
367 *
368 * xTR, xTP: Set parameters to generate a triangular matrix
369 *
370 * Set TYPE, the type of matrix to be generated.
371 *
372 TYPE = 'N'
373 *
374 * Set the lower and upper bandwidths.
375 *
376 MAT = ABS( IMAT )
377 IF( MAT.EQ.1 .OR. MAT.EQ.7 ) THEN
378 KL = 0
379 KU = 0
380 ELSE IF( IMAT.LT.0 ) THEN
381 KL = MAX( N-1, 0 )
382 KU = 0
383 ELSE
384 KL = 0
385 KU = MAX( N-1, 0 )
386 END IF
387 *
388 * Set the condition number and norm.
389 *
390 IF( MAT.EQ.3 .OR. MAT.EQ.9 ) THEN
391 CNDNUM = BADC1
392 ELSE IF( MAT.EQ.4 .OR. MAT.EQ.10 ) THEN
393 CNDNUM = BADC2
394 ELSE
395 CNDNUM = TWO
396 END IF
397 *
398 IF( MAT.EQ.5 ) THEN
399 ANORM = SMALL
400 ELSE IF( MAT.EQ.6 ) THEN
401 ANORM = LARGE
402 ELSE
403 ANORM = ONE
404 END IF
405 *
406 ELSE IF( LSAMEN( 2, C2, 'TB' ) ) THEN
407 *
408 * xTB: Set parameters to generate a triangular band matrix.
409 *
410 * Set TYPE, the type of matrix to be generated.
411 *
412 TYPE = 'N'
413 *
414 * Set the norm and condition number.
415 *
416 IF( IMAT.EQ.2 .OR. IMAT.EQ.8 ) THEN
417 CNDNUM = BADC1
418 ELSE IF( IMAT.EQ.3 .OR. IMAT.EQ.9 ) THEN
419 CNDNUM = BADC2
420 ELSE
421 CNDNUM = TWO
422 END IF
423 *
424 IF( IMAT.EQ.4 ) THEN
425 ANORM = SMALL
426 ELSE IF( IMAT.EQ.5 ) THEN
427 ANORM = LARGE
428 ELSE
429 ANORM = ONE
430 END IF
431 END IF
432 IF( N.LE.1 )
433 $ CNDNUM = ONE
434 *
435 RETURN
436 *
437 * End of CLATB4
438 *
439 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 REAL ANORM, CNDNUM
13 * ..
14 *
15 * Purpose
16 * =======
17 *
18 * CLATB4 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) REAL
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) REAL
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 REAL SHRINK, TENTH
68 PARAMETER ( SHRINK = 0.25E0, TENTH = 0.1E+0 )
69 REAL ONE
70 PARAMETER ( ONE = 1.0E+0 )
71 REAL TWO
72 PARAMETER ( TWO = 2.0E+0 )
73 * ..
74 * .. Local Scalars ..
75 LOGICAL FIRST
76 CHARACTER*2 C2
77 INTEGER MAT
78 REAL BADC1, BADC2, EPS, LARGE, SMALL
79 * ..
80 * .. External Functions ..
81 LOGICAL LSAMEN
82 REAL SLAMCH
83 EXTERNAL LSAMEN, SLAMCH
84 * ..
85 * .. Intrinsic Functions ..
86 INTRINSIC ABS, MAX, SQRT
87 * ..
88 * .. External Subroutines ..
89 EXTERNAL SLABAD
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 = SLAMCH( 'Precision' )
104 BADC2 = TENTH / EPS
105 BADC1 = SQRT( BADC2 )
106 SMALL = SLAMCH( '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 SLABAD( 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 * xQR, xLQ, xQL, xRQ: Set parameters to generate a general
125 * M x N matrix.
126 *
127 IF( LSAMEN( 2, C2, 'QR' ) .OR. LSAMEN( 2, C2, 'LQ' ) .OR.
128 $ LSAMEN( 2, C2, 'QL' ) .OR. LSAMEN( 2, C2, 'RQ' ) ) THEN
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, 'HE' ) .OR. LSAMEN( 2, C2, 'HP' ) .OR.
273 $ LSAMEN( 2, C2, 'SY' ) .OR. LSAMEN( 2, C2, 'SP' ) ) THEN
274 *
275 * xPO, xPP, xHE, xHP, xSY, xSP: Set parameters to generate a
276 * symmetric or Hermitian matrix.
277 *
278 * Set TYPE, the type of matrix to be generated.
279 *
280 TYPE = C2( 1: 1 )
281 *
282 * Set the lower and upper bandwidths.
283 *
284 IF( IMAT.EQ.1 ) THEN
285 KL = 0
286 ELSE
287 KL = MAX( N-1, 0 )
288 END IF
289 KU = KL
290 *
291 * Set the condition number and norm.
292 *
293 IF( IMAT.EQ.6 ) THEN
294 CNDNUM = BADC1
295 ELSE IF( IMAT.EQ.7 ) THEN
296 CNDNUM = BADC2
297 ELSE
298 CNDNUM = TWO
299 END IF
300 *
301 IF( IMAT.EQ.8 ) THEN
302 ANORM = SMALL
303 ELSE IF( IMAT.EQ.9 ) THEN
304 ANORM = LARGE
305 ELSE
306 ANORM = ONE
307 END IF
308 *
309 ELSE IF( LSAMEN( 2, C2, 'PB' ) ) THEN
310 *
311 * xPB: Set parameters to generate a symmetric band matrix.
312 *
313 * Set TYPE, the type of matrix to be generated.
314 *
315 TYPE = 'P'
316 *
317 * Set the norm and condition number.
318 *
319 IF( IMAT.EQ.5 ) THEN
320 CNDNUM = BADC1
321 ELSE IF( IMAT.EQ.6 ) THEN
322 CNDNUM = BADC2
323 ELSE
324 CNDNUM = TWO
325 END IF
326 *
327 IF( IMAT.EQ.7 ) THEN
328 ANORM = SMALL
329 ELSE IF( IMAT.EQ.8 ) THEN
330 ANORM = LARGE
331 ELSE
332 ANORM = ONE
333 END IF
334 *
335 ELSE IF( LSAMEN( 2, C2, 'PT' ) ) THEN
336 *
337 * xPT: Set parameters to generate a symmetric positive definite
338 * tridiagonal matrix.
339 *
340 TYPE = 'P'
341 IF( IMAT.EQ.1 ) THEN
342 KL = 0
343 ELSE
344 KL = 1
345 END IF
346 KU = KL
347 *
348 * Set the condition number and norm.
349 *
350 IF( IMAT.EQ.3 ) THEN
351 CNDNUM = BADC1
352 ELSE IF( IMAT.EQ.4 ) THEN
353 CNDNUM = BADC2
354 ELSE
355 CNDNUM = TWO
356 END IF
357 *
358 IF( IMAT.EQ.5 .OR. IMAT.EQ.11 ) THEN
359 ANORM = SMALL
360 ELSE IF( IMAT.EQ.6 .OR. IMAT.EQ.12 ) THEN
361 ANORM = LARGE
362 ELSE
363 ANORM = ONE
364 END IF
365 *
366 ELSE IF( LSAMEN( 2, C2, 'TR' ) .OR. LSAMEN( 2, C2, 'TP' ) ) THEN
367 *
368 * xTR, xTP: Set parameters to generate a triangular matrix
369 *
370 * Set TYPE, the type of matrix to be generated.
371 *
372 TYPE = 'N'
373 *
374 * Set the lower and upper bandwidths.
375 *
376 MAT = ABS( IMAT )
377 IF( MAT.EQ.1 .OR. MAT.EQ.7 ) THEN
378 KL = 0
379 KU = 0
380 ELSE IF( IMAT.LT.0 ) THEN
381 KL = MAX( N-1, 0 )
382 KU = 0
383 ELSE
384 KL = 0
385 KU = MAX( N-1, 0 )
386 END IF
387 *
388 * Set the condition number and norm.
389 *
390 IF( MAT.EQ.3 .OR. MAT.EQ.9 ) THEN
391 CNDNUM = BADC1
392 ELSE IF( MAT.EQ.4 .OR. MAT.EQ.10 ) THEN
393 CNDNUM = BADC2
394 ELSE
395 CNDNUM = TWO
396 END IF
397 *
398 IF( MAT.EQ.5 ) THEN
399 ANORM = SMALL
400 ELSE IF( MAT.EQ.6 ) THEN
401 ANORM = LARGE
402 ELSE
403 ANORM = ONE
404 END IF
405 *
406 ELSE IF( LSAMEN( 2, C2, 'TB' ) ) THEN
407 *
408 * xTB: Set parameters to generate a triangular band matrix.
409 *
410 * Set TYPE, the type of matrix to be generated.
411 *
412 TYPE = 'N'
413 *
414 * Set the norm and condition number.
415 *
416 IF( IMAT.EQ.2 .OR. IMAT.EQ.8 ) THEN
417 CNDNUM = BADC1
418 ELSE IF( IMAT.EQ.3 .OR. IMAT.EQ.9 ) THEN
419 CNDNUM = BADC2
420 ELSE
421 CNDNUM = TWO
422 END IF
423 *
424 IF( IMAT.EQ.4 ) THEN
425 ANORM = SMALL
426 ELSE IF( IMAT.EQ.5 ) THEN
427 ANORM = LARGE
428 ELSE
429 ANORM = ONE
430 END IF
431 END IF
432 IF( N.LE.1 )
433 $ CNDNUM = ONE
434 *
435 RETURN
436 *
437 * End of CLATB4
438 *
439 END