LAPACK 3.12.0 LAPACK: Linear Algebra PACKage
Searching...
No Matches
dchksb.f
Go to the documentation of this file.
1*> \brief \b DCHKSB
2*
3* =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6* http://www.netlib.org/lapack/explore-html/
7*
8* Definition:
9* ===========
10*
11* SUBROUTINE DCHKSB( NSIZES, NN, NWDTHS, KK, NTYPES, DOTYPE, ISEED,
12* THRESH, NOUNIT, A, LDA, SD, SE, U, LDU, WORK,
13* LWORK, RESULT, INFO )
14*
15* .. Scalar Arguments ..
16* INTEGER INFO, LDA, LDU, LWORK, NOUNIT, NSIZES, NTYPES,
17* \$ NWDTHS
18* DOUBLE PRECISION THRESH
19* ..
20* .. Array Arguments ..
21* LOGICAL DOTYPE( * )
22* INTEGER ISEED( 4 ), KK( * ), NN( * )
23* DOUBLE PRECISION A( LDA, * ), RESULT( * ), SD( * ), SE( * ),
24* \$ U( LDU, * ), WORK( * )
25* ..
26*
27*
28*> \par Purpose:
29* =============
30*>
31*> \verbatim
32*>
33*> DCHKSB tests the reduction of a symmetric band matrix to tridiagonal
34*> form, used with the symmetric eigenvalue problem.
35*>
36*> DSBTRD factors a symmetric band matrix A as U S U' , where ' means
37*> transpose, S is symmetric tridiagonal, and U is orthogonal.
38*> DSBTRD can use either just the lower or just the upper triangle
39*> of A; DCHKSB checks both cases.
40*>
41*> When DCHKSB is called, a number of matrix "sizes" ("n's"), a number
42*> of bandwidths ("k's"), and a number of matrix "types" are
43*> specified. For each size ("n"), each bandwidth ("k") less than or
44*> equal to "n", and each type of matrix, one matrix will be generated
45*> and used to test the symmetric banded reduction routine. For each
46*> matrix, a number of tests will be performed:
47*>
48*> (1) | A - V S V' | / ( |A| n ulp ) computed by DSBTRD with
49*> UPLO='U'
50*>
51*> (2) | I - UU' | / ( n ulp )
52*>
53*> (3) | A - V S V' | / ( |A| n ulp ) computed by DSBTRD with
54*> UPLO='L'
55*>
56*> (4) | I - UU' | / ( n ulp )
57*>
58*> The "sizes" are specified by an array NN(1:NSIZES); the value of
59*> each element NN(j) specifies one size.
60*> The "types" are specified by a logical array DOTYPE( 1:NTYPES );
61*> if DOTYPE(j) is .TRUE., then matrix type "j" will be generated.
62*> Currently, the list of possible types is:
63*>
64*> (1) The zero matrix.
65*> (2) The identity matrix.
66*>
67*> (3) A diagonal matrix with evenly spaced entries
68*> 1, ..., ULP and random signs.
69*> (ULP = (first number larger than 1) - 1 )
70*> (4) A diagonal matrix with geometrically spaced entries
71*> 1, ..., ULP and random signs.
72*> (5) A diagonal matrix with "clustered" entries 1, ULP, ..., ULP
73*> and random signs.
74*>
75*> (6) Same as (4), but multiplied by SQRT( overflow threshold )
76*> (7) Same as (4), but multiplied by SQRT( underflow threshold )
77*>
78*> (8) A matrix of the form U' D U, where U is orthogonal and
79*> D has evenly spaced entries 1, ..., ULP with random signs
80*> on the diagonal.
81*>
82*> (9) A matrix of the form U' D U, where U is orthogonal and
83*> D has geometrically spaced entries 1, ..., ULP with random
84*> signs on the diagonal.
85*>
86*> (10) A matrix of the form U' D U, where U is orthogonal and
87*> D has "clustered" entries 1, ULP,..., ULP with random
88*> signs on the diagonal.
89*>
90*> (11) Same as (8), but multiplied by SQRT( overflow threshold )
91*> (12) Same as (8), but multiplied by SQRT( underflow threshold )
92*>
93*> (13) Symmetric matrix with random entries chosen from (-1,1).
94*> (14) Same as (13), but multiplied by SQRT( overflow threshold )
95*> (15) Same as (13), but multiplied by SQRT( underflow threshold )
96*> \endverbatim
97*
98* Arguments:
99* ==========
100*
101*> \param[in] NSIZES
102*> \verbatim
103*> NSIZES is INTEGER
104*> The number of sizes of matrices to use. If it is zero,
105*> DCHKSB does nothing. It must be at least zero.
106*> \endverbatim
107*>
108*> \param[in] NN
109*> \verbatim
110*> NN is INTEGER array, dimension (NSIZES)
111*> An array containing the sizes to be used for the matrices.
112*> Zero values will be skipped. The values must be at least
113*> zero.
114*> \endverbatim
115*>
116*> \param[in] NWDTHS
117*> \verbatim
118*> NWDTHS is INTEGER
119*> The number of bandwidths to use. If it is zero,
120*> DCHKSB does nothing. It must be at least zero.
121*> \endverbatim
122*>
123*> \param[in] KK
124*> \verbatim
125*> KK is INTEGER array, dimension (NWDTHS)
126*> An array containing the bandwidths to be used for the band
127*> matrices. The values must be at least zero.
128*> \endverbatim
129*>
130*> \param[in] NTYPES
131*> \verbatim
132*> NTYPES is INTEGER
133*> The number of elements in DOTYPE. If it is zero, DCHKSB
134*> does nothing. It must be at least zero. If it is MAXTYP+1
135*> and NSIZES is 1, then an additional type, MAXTYP+1 is
136*> defined, which is to use whatever matrix is in A. This
137*> is only useful if DOTYPE(1:MAXTYP) is .FALSE. and
138*> DOTYPE(MAXTYP+1) is .TRUE. .
139*> \endverbatim
140*>
141*> \param[in] DOTYPE
142*> \verbatim
143*> DOTYPE is LOGICAL array, dimension (NTYPES)
144*> If DOTYPE(j) is .TRUE., then for each size in NN a
145*> matrix of that size and of type j will be generated.
146*> If NTYPES is smaller than the maximum number of types
147*> defined (PARAMETER MAXTYP), then types NTYPES+1 through
148*> MAXTYP will not be generated. If NTYPES is larger
149*> than MAXTYP, DOTYPE(MAXTYP+1) through DOTYPE(NTYPES)
150*> will be ignored.
151*> \endverbatim
152*>
153*> \param[in,out] ISEED
154*> \verbatim
155*> ISEED is INTEGER array, dimension (4)
156*> On entry ISEED specifies the seed of the random number
157*> generator. The array elements should be between 0 and 4095;
158*> if not they will be reduced mod 4096. Also, ISEED(4) must
159*> be odd. The random number generator uses a linear
160*> congruential sequence limited to small integers, and so
161*> should produce machine independent random numbers. The
162*> values of ISEED are changed on exit, and can be used in the
163*> next call to DCHKSB to continue the same random number
164*> sequence.
165*> \endverbatim
166*>
167*> \param[in] THRESH
168*> \verbatim
169*> THRESH is DOUBLE PRECISION
170*> A test will count as "failed" if the "error", computed as
171*> described above, exceeds THRESH. Note that the error
172*> is scaled to be O(1), so THRESH should be a reasonably
173*> small multiple of 1, e.g., 10 or 100. In particular,
174*> it should not depend on the precision (single vs. double)
175*> or the size of the matrix. It must be at least zero.
176*> \endverbatim
177*>
178*> \param[in] NOUNIT
179*> \verbatim
180*> NOUNIT is INTEGER
181*> The FORTRAN unit number for printing out error messages
182*> (e.g., if a routine returns IINFO not equal to 0.)
183*> \endverbatim
184*>
185*> \param[in,out] A
186*> \verbatim
187*> A is DOUBLE PRECISION array, dimension
188*> (LDA, max(NN))
189*> Used to hold the matrix whose eigenvalues are to be
190*> computed.
191*> \endverbatim
192*>
193*> \param[in] LDA
194*> \verbatim
195*> LDA is INTEGER
196*> The leading dimension of A. It must be at least 2 (not 1!)
197*> and at least max( KK )+1.
198*> \endverbatim
199*>
200*> \param[out] SD
201*> \verbatim
202*> SD is DOUBLE PRECISION array, dimension (max(NN))
203*> Used to hold the diagonal of the tridiagonal matrix computed
204*> by DSBTRD.
205*> \endverbatim
206*>
207*> \param[out] SE
208*> \verbatim
209*> SE is DOUBLE PRECISION array, dimension (max(NN))
210*> Used to hold the off-diagonal of the tridiagonal matrix
211*> computed by DSBTRD.
212*> \endverbatim
213*>
214*> \param[out] U
215*> \verbatim
216*> U is DOUBLE PRECISION array, dimension (LDU, max(NN))
217*> Used to hold the orthogonal matrix computed by DSBTRD.
218*> \endverbatim
219*>
220*> \param[in] LDU
221*> \verbatim
222*> LDU is INTEGER
223*> The leading dimension of U. It must be at least 1
224*> and at least max( NN ).
225*> \endverbatim
226*>
227*> \param[out] WORK
228*> \verbatim
229*> WORK is DOUBLE PRECISION array, dimension (LWORK)
230*> \endverbatim
231*>
232*> \param[in] LWORK
233*> \verbatim
234*> LWORK is INTEGER
235*> The number of entries in WORK. This must be at least
236*> max( LDA+1, max(NN)+1 )*max(NN).
237*> \endverbatim
238*>
239*> \param[out] RESULT
240*> \verbatim
241*> RESULT is DOUBLE PRECISION array, dimension (4)
242*> The values computed by the tests described above.
243*> The values are currently limited to 1/ulp, to avoid
244*> overflow.
245*> \endverbatim
246*>
247*> \param[out] INFO
248*> \verbatim
249*> INFO is INTEGER
250*> If 0, then everything ran OK.
251*>
252*>-----------------------------------------------------------------------
253*>
254*> Some Local Variables and Parameters:
255*> ---- ----- --------- --- ----------
256*> ZERO, ONE Real 0 and 1.
257*> MAXTYP The number of types defined.
258*> NTEST The number of tests performed, or which can
259*> be performed so far, for the current matrix.
260*> NTESTT The total number of tests performed so far.
261*> NMAX Largest value in NN.
262*> NMATS The number of matrices generated so far.
263*> NERRS The number of tests which have exceeded THRESH
264*> so far.
265*> COND, IMODE Values to be passed to the matrix generators.
266*> ANORM Norm of A; passed to matrix generators.
267*>
268*> OVFL, UNFL Overflow and underflow thresholds.
269*> ULP, ULPINV Finest relative precision and its inverse.
270*> RTOVFL, RTUNFL Square roots of the previous 2 values.
271*> The following four arrays decode JTYPE:
272*> KTYPE(j) The general type (1-10) for type "j".
273*> KMODE(j) The MODE value to be passed to the matrix
274*> generator for type "j".
275*> KMAGN(j) The order of magnitude ( O(1),
276*> O(overflow^(1/2) ), O(underflow^(1/2) )
277*> \endverbatim
278*
279* Authors:
280* ========
281*
282*> \author Univ. of Tennessee
283*> \author Univ. of California Berkeley
284*> \author Univ. of Colorado Denver
285*> \author NAG Ltd.
286*
287*> \ingroup double_eig
288*
289* =====================================================================
290 SUBROUTINE dchksb( NSIZES, NN, NWDTHS, KK, NTYPES, DOTYPE, ISEED,
291 \$ THRESH, NOUNIT, A, LDA, SD, SE, U, LDU, WORK,
292 \$ LWORK, RESULT, INFO )
293*
294* -- LAPACK test routine --
295* -- LAPACK is a software package provided by Univ. of Tennessee, --
296* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
297*
298* .. Scalar Arguments ..
299 INTEGER INFO, LDA, LDU, LWORK, NOUNIT, NSIZES, NTYPES,
300 \$ NWDTHS
301 DOUBLE PRECISION THRESH
302* ..
303* .. Array Arguments ..
304 LOGICAL DOTYPE( * )
305 INTEGER ISEED( 4 ), KK( * ), NN( * )
306 DOUBLE PRECISION A( LDA, * ), RESULT( * ), SD( * ), SE( * ),
307 \$ u( ldu, * ), work( * )
308* ..
309*
310* =====================================================================
311*
312* .. Parameters ..
313 DOUBLE PRECISION ZERO, ONE, TWO, TEN
314 PARAMETER ( ZERO = 0.0d0, one = 1.0d0, two = 2.0d0,
315 \$ ten = 10.0d0 )
316 DOUBLE PRECISION HALF
317 PARAMETER ( HALF = one / two )
318 INTEGER MAXTYP
319 parameter( maxtyp = 15 )
320* ..
321* .. Local Scalars ..
323 INTEGER I, IINFO, IMODE, ITYPE, J, JC, JCOL, JR, JSIZE,
324 \$ jtype, jwidth, k, kmax, mtypes, n, nerrs,
325 \$ nmats, nmax, ntest, ntestt
326 DOUBLE PRECISION ANINV, ANORM, COND, OVFL, RTOVFL, RTUNFL,
327 \$ TEMP1, ULP, ULPINV, UNFL
328* ..
329* .. Local Arrays ..
330 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), KMAGN( MAXTYP ),
331 \$ KMODE( MAXTYP ), KTYPE( MAXTYP )
332* ..
333* .. External Functions ..
334 DOUBLE PRECISION DLAMCH
335 EXTERNAL DLAMCH
336* ..
337* .. External Subroutines ..
338 EXTERNAL dlacpy, dlaset, dlasum, dlatmr, dlatms, dsbt21,
339 \$ dsbtrd, xerbla
340* ..
341* .. Intrinsic Functions ..
342 INTRINSIC abs, dble, max, min, sqrt
343* ..
344* .. Data statements ..
345 DATA ktype / 1, 2, 5*4, 5*5, 3*8 /
346 DATA kmagn / 2*1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
347 \$ 2, 3 /
348 DATA kmode / 2*0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
349 \$ 0, 0 /
350* ..
351* .. Executable Statements ..
352*
353* Check for errors
354*
355 ntestt = 0
356 info = 0
357*
358* Important constants
359*
361 nmax = 1
362 DO 10 j = 1, nsizes
363 nmax = max( nmax, nn( j ) )
364 IF( nn( j ).LT.0 )
366 10 CONTINUE
367*
369 kmax = 0
370 DO 20 j = 1, nsizes
371 kmax = max( kmax, kk( j ) )
372 IF( kk( j ).LT.0 )
374 20 CONTINUE
375 kmax = min( nmax-1, kmax )
376*
377* Check for errors
378*
379 IF( nsizes.LT.0 ) THEN
380 info = -1
381 ELSE IF( badnn ) THEN
382 info = -2
383 ELSE IF( nwdths.LT.0 ) THEN
384 info = -3
385 ELSE IF( badnnb ) THEN
386 info = -4
387 ELSE IF( ntypes.LT.0 ) THEN
388 info = -5
389 ELSE IF( lda.LT.kmax+1 ) THEN
390 info = -11
391 ELSE IF( ldu.LT.nmax ) THEN
392 info = -15
393 ELSE IF( ( max( lda, nmax )+1 )*nmax.GT.lwork ) THEN
394 info = -17
395 END IF
396*
397 IF( info.NE.0 ) THEN
398 CALL xerbla( 'DCHKSB', -info )
399 RETURN
400 END IF
401*
402* Quick return if possible
403*
404 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 .OR. nwdths.EQ.0 )
405 \$ RETURN
406*
407* More Important constants
408*
409 unfl = dlamch( 'Safe minimum' )
410 ovfl = one / unfl
411 ulp = dlamch( 'Epsilon' )*dlamch( 'Base' )
412 ulpinv = one / ulp
413 rtunfl = sqrt( unfl )
414 rtovfl = sqrt( ovfl )
415*
416* Loop over sizes, types
417*
418 nerrs = 0
419 nmats = 0
420*
421 DO 190 jsize = 1, nsizes
422 n = nn( jsize )
423 aninv = one / dble( max( 1, n ) )
424*
425 DO 180 jwidth = 1, nwdths
426 k = kk( jwidth )
427 IF( k.GT.n )
428 \$ GO TO 180
429 k = max( 0, min( n-1, k ) )
430*
431 IF( nsizes.NE.1 ) THEN
432 mtypes = min( maxtyp, ntypes )
433 ELSE
434 mtypes = min( maxtyp+1, ntypes )
435 END IF
436*
437 DO 170 jtype = 1, mtypes
438 IF( .NOT.dotype( jtype ) )
439 \$ GO TO 170
440 nmats = nmats + 1
441 ntest = 0
442*
443 DO 30 j = 1, 4
444 ioldsd( j ) = iseed( j )
445 30 CONTINUE
446*
447* Compute "A".
448* Store as "Upper"; later, we will copy to other format.
449*
450* Control parameters:
451*
452* KMAGN KMODE KTYPE
453* =1 O(1) clustered 1 zero
454* =2 large clustered 2 identity
455* =3 small exponential (none)
456* =4 arithmetic diagonal, (w/ eigenvalues)
457* =5 random log symmetric, w/ eigenvalues
458* =6 random (none)
459* =7 random diagonal
460* =8 random symmetric
461* =9 positive definite
462* =10 diagonally dominant tridiagonal
463*
464 IF( mtypes.GT.maxtyp )
465 \$ GO TO 100
466*
467 itype = ktype( jtype )
468 imode = kmode( jtype )
469*
470* Compute norm
471*
472 GO TO ( 40, 50, 60 )kmagn( jtype )
473*
474 40 CONTINUE
475 anorm = one
476 GO TO 70
477*
478 50 CONTINUE
479 anorm = ( rtovfl*ulp )*aninv
480 GO TO 70
481*
482 60 CONTINUE
483 anorm = rtunfl*n*ulpinv
484 GO TO 70
485*
486 70 CONTINUE
487*
488 CALL dlaset( 'Full', lda, n, zero, zero, a, lda )
489 iinfo = 0
490 IF( jtype.LE.15 ) THEN
491 cond = ulpinv
492 ELSE
493 cond = ulpinv*aninv / ten
494 END IF
495*
496* Special Matrices -- Identity & Jordan block
497*
498* Zero
499*
500 IF( itype.EQ.1 ) THEN
501 iinfo = 0
502*
503 ELSE IF( itype.EQ.2 ) THEN
504*
505* Identity
506*
507 DO 80 jcol = 1, n
508 a( k+1, jcol ) = anorm
509 80 CONTINUE
510*
511 ELSE IF( itype.EQ.4 ) THEN
512*
513* Diagonal Matrix, [Eigen]values Specified
514*
515 CALL dlatms( n, n, 'S', iseed, 'S', work, imode, cond,
516 \$ anorm, 0, 0, 'Q', a( k+1, 1 ), lda,
517 \$ work( n+1 ), iinfo )
518*
519 ELSE IF( itype.EQ.5 ) THEN
520*
521* Symmetric, eigenvalues specified
522*
523 CALL dlatms( n, n, 'S', iseed, 'S', work, imode, cond,
524 \$ anorm, k, k, 'Q', a, lda, work( n+1 ),
525 \$ iinfo )
526*
527 ELSE IF( itype.EQ.7 ) THEN
528*
529* Diagonal, random eigenvalues
530*
531 CALL dlatmr( n, n, 'S', iseed, 'S', work, 6, one, one,
532 \$ 'T', 'N', work( n+1 ), 1, one,
533 \$ work( 2*n+1 ), 1, one, 'N', idumma, 0, 0,
534 \$ zero, anorm, 'Q', a( k+1, 1 ), lda,
535 \$ idumma, iinfo )
536*
537 ELSE IF( itype.EQ.8 ) THEN
538*
539* Symmetric, random eigenvalues
540*
541 CALL dlatmr( n, n, 'S', iseed, 'S', work, 6, one, one,
542 \$ 'T', 'N', work( n+1 ), 1, one,
543 \$ work( 2*n+1 ), 1, one, 'N', idumma, k, k,
544 \$ zero, anorm, 'Q', a, lda, idumma, iinfo )
545*
546 ELSE IF( itype.EQ.9 ) THEN
547*
548* Positive definite, eigenvalues specified.
549*
550 CALL dlatms( n, n, 'S', iseed, 'P', work, imode, cond,
551 \$ anorm, k, k, 'Q', a, lda, work( n+1 ),
552 \$ iinfo )
553*
554 ELSE IF( itype.EQ.10 ) THEN
555*
556* Positive definite tridiagonal, eigenvalues specified.
557*
558 IF( n.GT.1 )
559 \$ k = max( 1, k )
560 CALL dlatms( n, n, 'S', iseed, 'P', work, imode, cond,
561 \$ anorm, 1, 1, 'Q', a( k, 1 ), lda,
562 \$ work( n+1 ), iinfo )
563 DO 90 i = 2, n
564 temp1 = abs( a( k, i ) ) /
565 \$ sqrt( abs( a( k+1, i-1 )*a( k+1, i ) ) )
566 IF( temp1.GT.half ) THEN
567 a( k, i ) = half*sqrt( abs( a( k+1,
568 \$ i-1 )*a( k+1, i ) ) )
569 END IF
570 90 CONTINUE
571*
572 ELSE
573*
574 iinfo = 1
575 END IF
576*
577 IF( iinfo.NE.0 ) THEN
578 WRITE( nounit, fmt = 9999 )'Generator', iinfo, n,
579 \$ jtype, ioldsd
580 info = abs( iinfo )
581 RETURN
582 END IF
583*
584 100 CONTINUE
585*
586* Call DSBTRD to compute S and U from upper triangle.
587*
588 CALL dlacpy( ' ', k+1, n, a, lda, work, lda )
589*
590 ntest = 1
591 CALL dsbtrd( 'V', 'U', n, k, work, lda, sd, se, u, ldu,
592 \$ work( lda*n+1 ), iinfo )
593*
594 IF( iinfo.NE.0 ) THEN
595 WRITE( nounit, fmt = 9999 )'DSBTRD(U)', iinfo, n,
596 \$ jtype, ioldsd
597 info = abs( iinfo )
598 IF( iinfo.LT.0 ) THEN
599 RETURN
600 ELSE
601 result( 1 ) = ulpinv
602 GO TO 150
603 END IF
604 END IF
605*
606* Do tests 1 and 2
607*
608 CALL dsbt21( 'Upper', n, k, 1, a, lda, sd, se, u, ldu,
609 \$ work, result( 1 ) )
610*
611* Convert A from Upper-Triangle-Only storage to
612* Lower-Triangle-Only storage.
613*
614 DO 120 jc = 1, n
615 DO 110 jr = 0, min( k, n-jc )
616 a( jr+1, jc ) = a( k+1-jr, jc+jr )
617 110 CONTINUE
618 120 CONTINUE
619 DO 140 jc = n + 1 - k, n
620 DO 130 jr = min( k, n-jc ) + 1, k
621 a( jr+1, jc ) = zero
622 130 CONTINUE
623 140 CONTINUE
624*
625* Call DSBTRD to compute S and U from lower triangle
626*
627 CALL dlacpy( ' ', k+1, n, a, lda, work, lda )
628*
629 ntest = 3
630 CALL dsbtrd( 'V', 'L', n, k, work, lda, sd, se, u, ldu,
631 \$ work( lda*n+1 ), iinfo )
632*
633 IF( iinfo.NE.0 ) THEN
634 WRITE( nounit, fmt = 9999 )'DSBTRD(L)', iinfo, n,
635 \$ jtype, ioldsd
636 info = abs( iinfo )
637 IF( iinfo.LT.0 ) THEN
638 RETURN
639 ELSE
640 result( 3 ) = ulpinv
641 GO TO 150
642 END IF
643 END IF
644 ntest = 4
645*
646* Do tests 3 and 4
647*
648 CALL dsbt21( 'Lower', n, k, 1, a, lda, sd, se, u, ldu,
649 \$ work, result( 3 ) )
650*
651* End of Loop -- Check for RESULT(j) > THRESH
652*
653 150 CONTINUE
654 ntestt = ntestt + ntest
655*
656* Print out tests which fail.
657*
658 DO 160 jr = 1, ntest
659 IF( result( jr ).GE.thresh ) THEN
660*
661* If this is the first test to fail,
662* print a header to the data file.
663*
664 IF( nerrs.EQ.0 ) THEN
665 WRITE( nounit, fmt = 9998 )'DSB'
666 WRITE( nounit, fmt = 9997 )
667 WRITE( nounit, fmt = 9996 )
668 WRITE( nounit, fmt = 9995 )'Symmetric'
669 WRITE( nounit, fmt = 9994 )'orthogonal', '''',
670 \$ 'transpose', ( '''', j = 1, 4 )
671 END IF
672 nerrs = nerrs + 1
673 WRITE( nounit, fmt = 9993 )n, k, ioldsd, jtype,
674 \$ jr, result( jr )
675 END IF
676 160 CONTINUE
677*
678 170 CONTINUE
679 180 CONTINUE
680 190 CONTINUE
681*
682* Summary
683*
684 CALL dlasum( 'DSB', nounit, nerrs, ntestt )
685 RETURN
686*
687 9999 FORMAT( ' DCHKSB: ', a, ' returned INFO=', i6, '.', / 9x, 'N=',
688 \$ i6, ', JTYPE=', i6, ', ISEED=(', 3( i5, ',' ), i5, ')' )
689*
690 9998 FORMAT( / 1x, a3,
691 \$ ' -- Real Symmetric Banded Tridiagonal Reduction Routines' )
692 9997 FORMAT( ' Matrix types (see DCHKSB for details): ' )
693*
694 9996 FORMAT( / ' Special Matrices:',
695 \$ / ' 1=Zero matrix. ',
696 \$ ' 5=Diagonal: clustered entries.',
697 \$ / ' 2=Identity matrix. ',
698 \$ ' 6=Diagonal: large, evenly spaced.',
699 \$ / ' 3=Diagonal: evenly spaced entries. ',
700 \$ ' 7=Diagonal: small, evenly spaced.',
701 \$ / ' 4=Diagonal: geometr. spaced entries.' )
702 9995 FORMAT( ' Dense ', a, ' Banded Matrices:',
703 \$ / ' 8=Evenly spaced eigenvals. ',
704 \$ ' 12=Small, evenly spaced eigenvals.',
705 \$ / ' 9=Geometrically spaced eigenvals. ',
706 \$ ' 13=Matrix with random O(1) entries.',
707 \$ / ' 10=Clustered eigenvalues. ',
708 \$ ' 14=Matrix with large random entries.',
709 \$ / ' 11=Large, evenly spaced eigenvals. ',
710 \$ ' 15=Matrix with small random entries.' )
711*
712 9994 FORMAT( / ' Tests performed: (S is Tridiag, U is ', a, ',',
713 \$ / 20x, a, ' means ', a, '.', / ' UPLO=''U'':',
714 \$ / ' 1= | A - U S U', a1, ' | / ( |A| n ulp ) ',
715 \$ ' 2= | I - U U', a1, ' | / ( n ulp )', / ' UPLO=''L'':',
716 \$ / ' 3= | A - U S U', a1, ' | / ( |A| n ulp ) ',
717 \$ ' 4= | I - U U', a1, ' | / ( n ulp )' )
718 9993 FORMAT( ' N=', i5, ', K=', i4, ', seed=', 4( i4, ',' ), ' type ',
719 \$ i2, ', test(', i2, ')=', g10.3 )
720*
721* End of DCHKSB
722*
723 END
subroutine xerbla(srname, info)
Definition cblat2.f:3285
subroutine dchksb(nsizes, nn, nwdths, kk, ntypes, dotype, iseed, thresh, nounit, a, lda, sd, se, u, ldu, work, lwork, result, info)
DCHKSB
Definition dchksb.f:293
subroutine dlasum(type, iounit, ie, nrun)
DLASUM
Definition dlasum.f:43
subroutine dlatmr(m, n, dist, iseed, sym, d, mode, cond, dmax, rsign, grade, dl, model, condl, dr, moder, condr, pivtng, ipivot, kl, ku, sparse, anorm, pack, a, lda, iwork, info)
DLATMR
Definition dlatmr.f:471
subroutine dlatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
DLATMS
Definition dlatms.f:321
subroutine dsbt21(uplo, n, ka, ks, a, lda, d, e, u, ldu, work, result)
DSBT21
Definition dsbt21.f:147
subroutine dsbtrd(vect, uplo, n, kd, ab, ldab, d, e, q, ldq, work, info)
DSBTRD
Definition dsbtrd.f:163
subroutine dlacpy(uplo, m, n, a, lda, b, ldb)
DLACPY copies all or part of one two-dimensional array to another.
Definition dlacpy.f:103
subroutine dlaset(uplo, m, n, alpha, beta, a, lda)
DLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
Definition dlaset.f:110