329 SUBROUTINE schksb2stg( NSIZES, NN, NWDTHS, KK, NTYPES, DOTYPE,
330 $ ISEED, THRESH, NOUNIT, A, LDA, SD, SE, D1,
331 $ D2, D3, U, LDU, WORK, LWORK, RESULT, INFO )
338 INTEGER INFO, LDA, LDU, LWORK, NOUNIT, NSIZES, NTYPES,
344 INTEGER ISEED( 4 ), KK( * ), NN( * )
345 REAL A( LDA, * ), RESULT( * ), SD( * ), SE( * ),
346 $ d1( * ), d2( * ), d3( * ),
347 $ u( ldu, * ), work( * )
353 REAL ZERO, ONE, TWO, TEN
354 PARAMETER ( ZERO = 0.0e0, one = 1.0e0, two = 2.0e0,
357 PARAMETER ( HALF = one / two )
359 parameter( maxtyp = 15 )
362 LOGICAL BADNN, BADNNB
363 INTEGER I, IINFO, IMODE, ITYPE, J, JC, JCOL, JR, JSIZE,
364 $ jtype, jwidth, k, kmax, lh, lw, mtypes, n,
365 $ nerrs, nmats, nmax, ntest, ntestt
366 REAL ANINV, ANORM, COND, , RTOVFL, RTUNFL,
367 $ , TEMP2, TEMP3, TEMP4, ULP, ULPINV, UNFL
370 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), KMAGN( MAXTYP ),
371 $ KMODE( ), KTYPE( MAXTYP )
382 INTRINSIC abs, real,
max,
min, sqrt
386 DATA kmagn / 2*1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
388 DATA kmode / 2*0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
403 nmax =
max( nmax, nn( j ) )
411 kmax =
max( kmax, kk( j ) )
415 kmax =
min( nmax-1, kmax )
419 IF( nsizes.LT.0 )
THEN
421 ELSE IF( badnn )
THEN
423 ELSE IF( nwdths.LT.0 )
THEN
425 ELSE IF( badnnb )
THEN
427 ELSE IF( ntypes.LT.0 )
THEN
429 ELSE IF( lda.LT.kmax+1 )
THEN
431 ELSE IF( ldu.LT.nmax )
THEN
433 ELSE IF( (
max( lda, nmax )+1 )*nmax.GT.lwork )
THEN
444.EQ..OR..EQ..OR..EQ.
IF( NSIZES0 NTYPES0 NWDTHS0 )
449 UNFL = SLAMCH( 'safe minimum
' )
451 ULP = SLAMCH( 'epsilon
' )*SLAMCH( 'base
' )
453 RTUNFL = SQRT( UNFL )
454 RTOVFL = SQRT( OVFL )
461 DO 190 JSIZE = 1, NSIZES
463 ANINV = ONE / REAL( MAX( 1, N ) )
465 DO 180 JWIDTH = 1, NWDTHS
469 K = MAX( 0, MIN( N-1, K ) )
471.NE.
IF( NSIZES1 ) THEN
472 MTYPES = MIN( MAXTYP, NTYPES )
474 MTYPES = MIN( MAXTYP+1, NTYPES )
477 DO 170 JTYPE = 1, MTYPES
478.NOT.
IF( DOTYPE( JTYPE ) )
484 IOLDSD( J ) = ISEED( J )
504.GT.
IF( MTYPESMAXTYP )
507 ITYPE = KTYPE( JTYPE )
508 IMODE = KMODE( JTYPE )
512 GO TO ( 40, 50, 60 )KMAGN( JTYPE )
519 ANORM = ( RTOVFL*ULP )*ANINV
523 ANORM = RTUNFL*N*ULPINV
528 CALL SLASET( 'full
', LDA, N, ZERO, ZERO, A, LDA )
530.LE.
IF( JTYPE15 ) THEN
533 COND = ULPINV*ANINV / TEN
540.EQ.
IF( ITYPE1 ) THEN
543.EQ.
ELSE IF( ITYPE2 ) THEN
548 A( K+1, JCOL ) = ANORM
551.EQ.
ELSE IF( ITYPE4 ) THEN
555 CALL SLATMS( N, N, 's
', ISEED, 's
', WORK, IMODE, COND,
556 $ ANORM, 0, 0, 'q
', A( K+1, 1 ), LDA,
557 $ WORK( N+1 ), IINFO )
559.EQ.
ELSE IF( ITYPE5 ) THEN
563 CALL SLATMS( N, N, 's
', ISEED, 's
', WORK, IMODE, COND,
564 $ ANORM, K, K, 'q
', A, LDA, WORK( N+1 ),
567.EQ.
ELSE IF( ITYPE7 ) THEN
571 CALL SLATMR( N, N, 's
', ISEED, 's
', WORK, 6, ONE, ONE,
572 $ 't
', 'n
', WORK( N+1 ), 1, ONE,
573 $ WORK( 2*N+1 ), 1, ONE, 'n
', IDUMMA, 0, 0,
574 $ ZERO, ANORM, 'q
', A( K+1, 1 ), LDA,
577.EQ.
ELSE IF( ITYPE8 ) THEN
581 CALL SLATMR( N, N, 's
', ISEED, 's
', WORK, 6, ONE, ONE,
582 $ 't
', 'n
', WORK( N+1 ), 1, ONE,
583 $ WORK( 2*N+1 ), 1, ONE, 'n
', IDUMMA, K, K,
584 $ ZERO, ANORM, 'q
', A, LDA, IDUMMA, IINFO )
586.EQ.
ELSE IF( ITYPE9 ) THEN
590 CALL SLATMS( N, N, 's
', ISEED, 'p
', WORK, IMODE, COND,
591 $ ANORM, K, K, 'q
', A, LDA, WORK( N+1 ),
594.EQ.
ELSE IF( ITYPE10 ) THEN
600 CALL SLATMS( N, N, 's
', ISEED, 'p
', WORK, IMODE, COND,
601 $ ANORM, 1, 1, 'q
', A( K, 1 ), LDA,
602 $ WORK( N+1 ), IINFO )
604 TEMP1 = ABS( A( K, I ) ) /
605 $ SQRT( ABS( A( K+1, I-1 )*A( K+1, I ) ) )
606.GT.
IF( TEMP1HALF ) THEN
607 A( K, I ) = HALF*SQRT( ABS( A( K+1,
608 $ I-1 )*A( K+1, I ) ) )
617.NE.
IF( IINFO0 ) THEN
618 WRITE( NOUNIT, FMT = 9999 )'generator
', IINFO, N,
628 CALL SLACPY( ' ', K+1, N, A, LDA, WORK, LDA )
631 CALL SSBTRD( 'v
', 'u
', N, K, WORK, LDA, SD, SE, U, LDU,
632 $ WORK( LDA*N+1 ), IINFO )
634.NE.
IF( IINFO0 ) THEN
635 WRITE( NOUNIT, FMT = 9999 )'ssbtrd(u)
', IINFO, N,
638.LT.
IF( IINFO0 ) THEN
648 CALL SSBT21( 'upper
', N, K, 1, A, LDA, SD, SE, U, LDU,
649 $ WORK, RESULT( 1 ) )
663 CALL SCOPY( N, SD, 1, D1, 1 )
665 $ CALL SCOPY( N-1, SE, 1, WORK, 1 )
667 CALL SSTEQR( 'n
', N, D1, WORK, WORK( N+1 ), LDU,
668 $ WORK( N+1 ), IINFO )
669.NE.
IF( IINFO0 ) THEN
670 WRITE( NOUNIT, FMT = 9999 )'ssteqr(n)
', IINFO, N,
673.LT.
IF( IINFO0 ) THEN
686 CALL SLASET( 'full
', N, 1, ZERO, ZERO, SD, N )
687 CALL SLASET( 'full
', N, 1, ZERO, ZERO, SE, N )
688 CALL SLACPY( ' ', K+1, N, A, LDA, U, LDU )
691 CALL SSYTRD_SB2ST( 'n
', 'n
', "U", N, K, U, LDU, SD, SE,
692 $ WORK, LH, WORK( LH+1 ), LW, IINFO )
696 CALL SCOPY( N, SD, 1, D2, 1 )
698 $ CALL SCOPY( N-1, SE, 1, WORK, 1 )
700 CALL SSTEQR( 'n
', N, D2, WORK, WORK( N+1 ), LDU,
701 $ WORK( N+1 ), IINFO )
702.NE.
IF( IINFO0 ) THEN
703 WRITE( NOUNIT, FMT = 9999 )'ssteqr(n)
', IINFO, N,
706.LT.
IF( IINFO0 ) THEN
718 DO 110 JR = 0, MIN( K, N-JC )
719 A( JR+1, JC ) = A( K+1-JR, JC+JR )
722 DO 140 JC = N + 1 - K, N
723 DO 130 JR = MIN( K, N-JC ) + 1, K
730 CALL SLACPY( ' ', K+1, N, A, LDA, WORK, LDA )
733 CALL SSBTRD( 'v
', 'l
', N, K, WORK, LDA, SD, SE, U, LDU,
734 $ WORK( LDA*N+1 ), IINFO )
736.NE.
IF( IINFO0 ) THEN
737 WRITE( NOUNIT, FMT = 9999 )'ssbtrd(l)
', IINFO, N,
740.LT.
IF( IINFO0 ) THEN
751 CALL SSBT21( 'lower
', N, K, 1, A, LDA, SD, SE, U, LDU,
752 $ WORK, RESULT( 3 ) )
759 CALL SLASET( 'full
', N, 1, ZERO, ZERO, SD, N )
760 CALL SLASET( 'full
', N, 1, ZERO, ZERO, SE, N )
761 CALL SLACPY( ' ', K+1, N, A, LDA, U, LDU )
764 CALL SSYTRD_SB2ST( 'n
', 'n
', "L", N, K, U, LDU, SD, SE,
765 $ WORK, LH, WORK( LH+1 ), LW, IINFO )
769 CALL SCOPY( N, SD, 1, D3, 1 )
771 $ CALL SCOPY( N-1, SE, 1, WORK, 1 )
773 CALL SSTEQR( 'n
', N, D3, WORK, WORK( N+1 ), LDU,
774 $ WORK( N+1 ), IINFO )
775.NE.
IF( IINFO0 ) THEN
776 WRITE( NOUNIT, FMT = 9999 )'ssteqr(n)
', IINFO, N,
779.LT.
IF( IINFO0 ) THEN
798 TEMP1 = MAX( TEMP1, ABS( D1( J ) ), ABS( D2( J ) ) )
799 TEMP2 = MAX( TEMP2, ABS( D1( J )-D2( J ) ) )
800 TEMP3 = MAX( TEMP3, ABS( D1( J ) ), ABS( D3( J ) ) )
801 TEMP4 = MAX( TEMP4, ABS( D1( J )-D3( J ) ) )
804 RESULT(5) = TEMP2 / MAX( UNFL, ULP*MAX( TEMP1, TEMP2 ) )
805 RESULT(6) = TEMP4 / MAX( UNFL, ULP*MAX( TEMP3, TEMP4 ) )
810 NTESTT = NTESTT + NTEST
815.GE.
IF( RESULT( JR )THRESH ) THEN
820.EQ.
IF( NERRS0 ) THEN
821 WRITE( NOUNIT, FMT = 9998 )'ssb
'
822 WRITE( NOUNIT, FMT = 9997 )
823 WRITE( NOUNIT, FMT = 9996 )
824 WRITE( NOUNIT, FMT = 9995 )'symmetric
'
825 WRITE( NOUNIT, FMT = 9994 )'orthogonal
', '''',
826 $ 'transpose
', ( '''', J = 1, 6 )
829 WRITE( NOUNIT, FMT = 9993 )N, K, IOLDSD, JTYPE,
840 CALL SLASUM( 'ssb
', NOUNIT, NERRS, NTESTT )
843 9999 FORMAT( ' schksb2stg:
', A, ' returned info=
', I6, '.
', / 9X, 'n=
',
844 $ I6, ', jtype=
', I6, ', iseed=(
', 3( I5, ',
' ), I5, ')
' )
846 9998 FORMAT( / 1X, A3,
847 $ ' -- real symmetric banded tridiagonal reduction routines
' )
850 9996 FORMAT( / ' special matrices:
',
851 $ / ' 1=zero matrix.
',
852 $ ' 5=diagonal: clustered entries.
',
853 $ / ' 2=identity matrix.
',
854 $ ' 6=diagonal: large, evenly spaced.
',
855 $ / ' 3=diagonal: evenly spaced entries.
',
856 $ ' 7=diagonal: small, evenly spaced.',
857 $ /
' 4=Diagonal: geometr. spaced entries.' )
858 9995
FORMAT(
' Dense ', a,
' Banded Matrices:',
859 $ /
' 8=Evenly spaced eigenvals. ',
860 $
' 12=Small, evenly spaced eigenvals.',
861 $ /
' 9=Geometrically spaced eigenvals. ',
862 $
' 13=Matrix with random O(1) entries.',
863 $ /
' 10=Clustered eigenvalues. ',
864 $
' 14=Matrix with large random entries.',
865 $ /
' 11=Large, evenly spaced eigenvals. ',
866 $
' 15=Matrix with small random entries.' )
868 9994
FORMAT( /
' Tests performed: (S is Tridiag, U is ', a,
',',
869 $ / 20x, a,
' means ', a,
'.', /
' UPLO=''U'':',
870 $ /
' 1= | A - U S U', a1,
' | / ( |A| n ulp ) ',
871 $
' 2= | I - U U', a1,
' | / ( n ulp )', /
' UPLO=''L'':',
872 $ /
' 3= | A - U S U', a1,
' | / ( |A| n ulp ) ',
873 $
' 4= | I - U U', a1, ' | / ( n ulp )
' / ' eig check:
',
874 $ /' 5= | d1 - d2
', '', ' | / ( |d1| ulp )
',
875 $ ' 6= | d1 - d3
', '', ' | / ( |d1| ulp )
' )
876 9993 FORMAT( ' n=
', I5, ', k=
', I4, ',
seed=
', 4( I4, ',
' ), ' type ',
877 $ I2, ', test(
', I2, ')=
', G10.3 )
subroutine eig(k_diag, k_lt, iadk, jdik, ms, in, nddl, ndof, nnzl, x, d, v, a, bufel, ixs, ixq, ixc, ixt, ixp, ixr, ixtg, pm, geo, cont, icut, skew, xcut, fint, itab, fext, fopt, anin, lpby, npby, nstrf, rwbuf, nprw, tani, elbuf_tab, matparam_tab, dd_iad, fr_iad, dd_front, cluster, weight, eani, ipart, rby, nom_opt, igrsurf, bufsf, idata, rdata, bufmat, bufgeo, kxx, ixx, kxsp, ixsp, nod2sp, spbuf, ixs10, ixs20, ixs16, vr, monvol, volmon, ipm, igeo, iparg, eigipm, eigibuf, eigrpm, ldiag, ljdik, ljdik2, ikc, maxncv, thke, nms, nint2, iint2, ipari, intbuf_tab, nodglob, iad_elem, fr_elem, fr_sec, fr_rby2, iad_rby2, fr_wall, inloc, iddl, partsav, fncont, ftcont, temp, err_thk_sh4, err_thk_sh3, irbe2, irbe3, lrbe2, lrbe3, fr_rbe2, fr_rbe3m, iad_rbe2, weight_md, fcluster, mcluster, xfem_tab, w, nv46, nercvois, nesdvois, lercvois, lesdvois, crkedge, indx_crk, xedge4n, xedge3n, stack, sph2sol, stifn, stifr, drape_q4, drape_t3, h3d_data, subset, igrnod, fcont_max, fncontp2, ftcontp2, ale_connectivity, glob_therm)
subroutine slaset(uplo, m, n, alpha, beta, a, lda)
SLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine slacpy(uplo, m, n, a, lda, b, ldb)
SLACPY copies all or part of one two-dimensional array to another.
subroutine ssteqr(compz, n, d, e, z, ldz, work, info)
SSTEQR
subroutine xerbla(srname, info)
XERBLA
subroutine ssbtrd(vect, uplo, n, kd, ab, ldab, d, e, q, ldq, work, info)
SSBTRD
subroutine slatmr(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)
SLATMR
subroutine slatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
SLATMS
subroutine schksb2stg(nsizes, nn, nwdths, kk, ntypes, dotype, iseed, thresh, nounit, a, lda, sd, se, d1, d2, d3, u, ldu, work, lwork, result, info)
SCHKSB2STG
subroutine ssbt21(uplo, n, ka, ks, a, lda, d, e, u, ldu, work, result)
SSBT21
for(i8=*sizetab-1;i8 >=0;i8--)
subroutine slasum(type, iounit, ie, nrun)
SLASUM
subroutine ssytrd_sb2st(stage1, vect, uplo, n, kd, ab, ldab, d, e, hous, lhous, work, lwork, info)
SSYTRD_SB2ST reduces a real symmetric band matrix A to real symmetric tridiagonal form T