 LAPACK  3.10.1 LAPACK: Linear Algebra PACKage

## ◆ zlatb4()

 subroutine zlatb4 ( character*3 PATH, integer IMAT, integer M, integer N, character TYPE, integer KL, integer KU, double precision ANORM, integer MODE, double precision CNDNUM, character DIST )

ZLATB4

Purpose:
``` ZLATB4 sets parameters for the matrix generator based on the type of
matrix to be generated.```
Parameters
 [in] PATH ``` PATH is CHARACTER*3 The LAPACK path name.``` [in] IMAT ``` IMAT is INTEGER An integer key describing which matrix to generate for this path.``` [in] M ``` M is INTEGER The number of rows in the matrix to be generated.``` [in] N ``` N is INTEGER The number of columns in the matrix to be generated.``` [out] TYPE ``` TYPE is CHARACTER*1 The type of the matrix to be generated: = 'S': symmetric matrix = 'H': Hermitian matrix = 'P': Hermitian positive (semi)definite matrix = 'N': nonsymmetric matrix``` [out] KL ``` KL is INTEGER The lower band width of the matrix to be generated.``` [out] KU ``` KU is INTEGER The upper band width of the matrix to be generated.``` [out] ANORM ``` ANORM is DOUBLE PRECISION The desired norm of the matrix to be generated. The diagonal matrix of singular values or eigenvalues is scaled by this value.``` [out] MODE ``` MODE is INTEGER A key indicating how to choose the vector of eigenvalues.``` [out] CNDNUM ``` CNDNUM is DOUBLE PRECISION The desired condition number.``` [out] DIST ``` DIST is CHARACTER*1 The type of distribution to be used by the random number generator.```

Definition at line 119 of file zlatb4.f.

121 *
122 * -- LAPACK test routine --
123 * -- LAPACK is a software package provided by Univ. of Tennessee, --
124 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
125 *
126 * .. Scalar Arguments ..
127  CHARACTER DIST, TYPE
128  CHARACTER*3 PATH
129  INTEGER IMAT, KL, KU, M, MODE, N
130  DOUBLE PRECISION ANORM, CNDNUM
131 * ..
132 *
133 * =====================================================================
134 *
135 * .. Parameters ..
136  DOUBLE PRECISION SHRINK, TENTH
137  parameter( shrink = 0.25d0, tenth = 0.1d+0 )
138  DOUBLE PRECISION ONE
139  parameter( one = 1.0d+0 )
140  DOUBLE PRECISION TWO
141  parameter( two = 2.0d+0 )
142 * ..
143 * .. Local Scalars ..
144  LOGICAL FIRST
145  CHARACTER*2 C2
146  INTEGER MAT
148 * ..
149 * .. External Functions ..
150  LOGICAL LSAMEN
151  DOUBLE PRECISION DLAMCH
152  EXTERNAL lsamen, dlamch
153 * ..
154 * .. Intrinsic Functions ..
155  INTRINSIC abs, max, sqrt
156 * ..
157 * .. External Subroutines ..
159 * ..
160 * .. Save statement ..
162 * ..
163 * .. Data statements ..
164  DATA first / .true. /
165 * ..
166 * .. Executable Statements ..
167 *
168 * Set some constants for use in the subroutine.
169 *
170  IF( first ) THEN
171  first = .false.
172  eps = dlamch( 'Precision' )
173  badc2 = tenth / eps
175  small = dlamch( 'Safe minimum' )
176  large = one / small
177 *
178 * If it looks like we're on a Cray, take the square root of
179 * SMALL and LARGE to avoid overflow and underflow problems.
180 *
181  CALL dlabad( small, large )
182  small = shrink*( small / eps )
183  large = one / small
184  END IF
185 *
186  c2 = path( 2: 3 )
187 *
188 * Set some parameters we don't plan to change.
189 *
190  dist = 'S'
191  mode = 3
192 *
193 * xQR, xLQ, xQL, xRQ: Set parameters to generate a general
194 * M x N matrix.
195 *
196  IF( lsamen( 2, c2, 'QR' ) .OR. lsamen( 2, c2, 'LQ' ) .OR.
197  \$ lsamen( 2, c2, 'QL' ) .OR. lsamen( 2, c2, 'RQ' ) ) THEN
198 *
199 * Set TYPE, the type of matrix to be generated.
200 *
201  TYPE = 'N'
202 *
203 * Set the lower and upper bandwidths.
204 *
205  IF( imat.EQ.1 ) THEN
206  kl = 0
207  ku = 0
208  ELSE IF( imat.EQ.2 ) THEN
209  kl = 0
210  ku = max( n-1, 0 )
211  ELSE IF( imat.EQ.3 ) THEN
212  kl = max( m-1, 0 )
213  ku = 0
214  ELSE
215  kl = max( m-1, 0 )
216  ku = max( n-1, 0 )
217  END IF
218 *
219 * Set the condition number and norm.
220 *
221  IF( imat.EQ.5 ) THEN
223  ELSE IF( imat.EQ.6 ) THEN
225  ELSE
226  cndnum = two
227  END IF
228 *
229  IF( imat.EQ.7 ) THEN
230  anorm = small
231  ELSE IF( imat.EQ.8 ) THEN
232  anorm = large
233  ELSE
234  anorm = one
235  END IF
236 *
237  ELSE IF( lsamen( 2, c2, 'GE' ) ) THEN
238 *
239 * xGE: Set parameters to generate a general M x N matrix.
240 *
241 * Set TYPE, the type of matrix to be generated.
242 *
243  TYPE = 'N'
244 *
245 * Set the lower and upper bandwidths.
246 *
247  IF( imat.EQ.1 ) THEN
248  kl = 0
249  ku = 0
250  ELSE IF( imat.EQ.2 ) THEN
251  kl = 0
252  ku = max( n-1, 0 )
253  ELSE IF( imat.EQ.3 ) THEN
254  kl = max( m-1, 0 )
255  ku = 0
256  ELSE
257  kl = max( m-1, 0 )
258  ku = max( n-1, 0 )
259  END IF
260 *
261 * Set the condition number and norm.
262 *
263  IF( imat.EQ.8 ) THEN
265  ELSE IF( imat.EQ.9 ) THEN
267  ELSE
268  cndnum = two
269  END IF
270 *
271  IF( imat.EQ.10 ) THEN
272  anorm = small
273  ELSE IF( imat.EQ.11 ) THEN
274  anorm = large
275  ELSE
276  anorm = one
277  END IF
278 *
279  ELSE IF( lsamen( 2, c2, 'GB' ) ) THEN
280 *
281 * xGB: Set parameters to generate a general banded matrix.
282 *
283 * Set TYPE, the type of matrix to be generated.
284 *
285  TYPE = 'N'
286 *
287 * Set the condition number and norm.
288 *
289  IF( imat.EQ.5 ) THEN
291  ELSE IF( imat.EQ.6 ) THEN
293  ELSE
294  cndnum = two
295  END IF
296 *
297  IF( imat.EQ.7 ) THEN
298  anorm = small
299  ELSE IF( imat.EQ.8 ) THEN
300  anorm = large
301  ELSE
302  anorm = one
303  END IF
304 *
305  ELSE IF( lsamen( 2, c2, 'GT' ) ) THEN
306 *
307 * xGT: Set parameters to generate a general tridiagonal matrix.
308 *
309 * Set TYPE, the type of matrix to be generated.
310 *
311  TYPE = 'N'
312 *
313 * Set the lower and upper bandwidths.
314 *
315  IF( imat.EQ.1 ) THEN
316  kl = 0
317  ELSE
318  kl = 1
319  END IF
320  ku = kl
321 *
322 * Set the condition number and norm.
323 *
324  IF( imat.EQ.3 ) THEN
326  ELSE IF( imat.EQ.4 ) THEN
328  ELSE
329  cndnum = two
330  END IF
331 *
332  IF( imat.EQ.5 .OR. imat.EQ.11 ) THEN
333  anorm = small
334  ELSE IF( imat.EQ.6 .OR. imat.EQ.12 ) THEN
335  anorm = large
336  ELSE
337  anorm = one
338  END IF
339 *
340  ELSE IF( lsamen( 2, c2, 'PO' ) .OR. lsamen( 2, c2, 'PP' ) ) THEN
341 *
342 * xPO, xPP: Set parameters to generate a
343 * symmetric or Hermitian positive definite matrix.
344 *
345 * Set TYPE, the type of matrix to be generated.
346 *
347  TYPE = c2( 1: 1 )
348 *
349 * Set the lower and upper bandwidths.
350 *
351  IF( imat.EQ.1 ) THEN
352  kl = 0
353  ELSE
354  kl = max( n-1, 0 )
355  END IF
356  ku = kl
357 *
358 * Set the condition number and norm.
359 *
360  IF( imat.EQ.6 ) THEN
362  ELSE IF( imat.EQ.7 ) THEN
364  ELSE
365  cndnum = two
366  END IF
367 *
368  IF( imat.EQ.8 ) THEN
369  anorm = small
370  ELSE IF( imat.EQ.9 ) THEN
371  anorm = large
372  ELSE
373  anorm = one
374  END IF
375 *
376  ELSE IF( lsamen( 2, c2, 'HE' ) .OR. lsamen( 2, c2, 'HP' ) .OR.
377  \$ lsamen( 2, c2, 'SY' ) .OR. lsamen( 2, c2, 'SP' ) ) THEN
378 *
379 * xHE, xHP, xSY, xSP: Set parameters to generate a
380 * symmetric or Hermitian matrix.
381 *
382 * Set TYPE, the type of matrix to be generated.
383 *
384  TYPE = c2( 1: 1 )
385 *
386 * Set the lower and upper bandwidths.
387 *
388  IF( imat.EQ.1 ) THEN
389  kl = 0
390  ELSE
391  kl = max( n-1, 0 )
392  END IF
393  ku = kl
394 *
395 * Set the condition number and norm.
396 *
397  IF( imat.EQ.7 ) THEN
399  ELSE IF( imat.EQ.8 ) THEN
401  ELSE
402  cndnum = two
403  END IF
404 *
405  IF( imat.EQ.9 ) THEN
406  anorm = small
407  ELSE IF( imat.EQ.10 ) THEN
408  anorm = large
409  ELSE
410  anorm = one
411  END IF
412 *
413  ELSE IF( lsamen( 2, c2, 'PB' ) ) THEN
414 *
415 * xPB: Set parameters to generate a symmetric band matrix.
416 *
417 * Set TYPE, the type of matrix to be generated.
418 *
419  TYPE = 'P'
420 *
421 * Set the norm and condition number.
422 *
423  IF( imat.EQ.5 ) THEN
425  ELSE IF( imat.EQ.6 ) THEN
427  ELSE
428  cndnum = two
429  END IF
430 *
431  IF( imat.EQ.7 ) THEN
432  anorm = small
433  ELSE IF( imat.EQ.8 ) THEN
434  anorm = large
435  ELSE
436  anorm = one
437  END IF
438 *
439  ELSE IF( lsamen( 2, c2, 'PT' ) ) THEN
440 *
441 * xPT: Set parameters to generate a symmetric positive definite
442 * tridiagonal matrix.
443 *
444  TYPE = 'P'
445  IF( imat.EQ.1 ) THEN
446  kl = 0
447  ELSE
448  kl = 1
449  END IF
450  ku = kl
451 *
452 * Set the condition number and norm.
453 *
454  IF( imat.EQ.3 ) THEN
456  ELSE IF( imat.EQ.4 ) THEN
458  ELSE
459  cndnum = two
460  END IF
461 *
462  IF( imat.EQ.5 .OR. imat.EQ.11 ) THEN
463  anorm = small
464  ELSE IF( imat.EQ.6 .OR. imat.EQ.12 ) THEN
465  anorm = large
466  ELSE
467  anorm = one
468  END IF
469 *
470  ELSE IF( lsamen( 2, c2, 'TR' ) .OR. lsamen( 2, c2, 'TP' ) ) THEN
471 *
472 * xTR, xTP: Set parameters to generate a triangular matrix
473 *
474 * Set TYPE, the type of matrix to be generated.
475 *
476  TYPE = 'N'
477 *
478 * Set the lower and upper bandwidths.
479 *
480  mat = abs( imat )
481  IF( mat.EQ.1 .OR. mat.EQ.7 ) THEN
482  kl = 0
483  ku = 0
484  ELSE IF( imat.LT.0 ) THEN
485  kl = max( n-1, 0 )
486  ku = 0
487  ELSE
488  kl = 0
489  ku = max( n-1, 0 )
490  END IF
491 *
492 * Set the condition number and norm.
493 *
494  IF( mat.EQ.3 .OR. mat.EQ.9 ) THEN
496  ELSE IF( mat.EQ.4 .OR. mat.EQ.10 ) THEN
498  ELSE
499  cndnum = two
500  END IF
501 *
502  IF( mat.EQ.5 ) THEN
503  anorm = small
504  ELSE IF( mat.EQ.6 ) THEN
505  anorm = large
506  ELSE
507  anorm = one
508  END IF
509 *
510  ELSE IF( lsamen( 2, c2, 'TB' ) ) THEN
511 *
512 * xTB: Set parameters to generate a triangular band matrix.
513 *
514 * Set TYPE, the type of matrix to be generated.
515 *
516  TYPE = 'N'
517 *
518 * Set the norm and condition number.
519 *
520  IF( imat.EQ.2 .OR. imat.EQ.8 ) THEN
522  ELSE IF( imat.EQ.3 .OR. imat.EQ.9 ) THEN
524  ELSE
525  cndnum = two
526  END IF
527 *
528  IF( imat.EQ.4 ) THEN
529  anorm = small
530  ELSE IF( imat.EQ.5 ) THEN
531  anorm = large
532  ELSE
533  anorm = one
534  END IF
535  END IF
536  IF( n.LE.1 )
537  \$ cndnum = one
538 *
539  RETURN
540 *
541 * End of ZLATB4
542 *
double precision function dlamch(CMACH)
DLAMCH
Definition: dlamch.f:69
logical function lsamen(N, CA, CB)
LSAMEN
Definition: lsamen.f:74