254 SUBROUTINE slaqr0( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI,
255 $ ILOZ, IHIZ, Z, LDZ, WORK, LWORK, INFO )
262 INTEGER IHI, IHIZ, ILO, ILOZ
266 REAL H( LDH, * ), WI( * ), WORK( * ), WR( * ),
277 parameter( ntiny = 15 )
283 parameter( kexnw = 5 )
289 parameter( kexsh = 6 )
294 parameter( wilk1 = 0.75e0, wilk2 = -0.4375e0 )
296 parameter( zero = 0.0e0, one = 1.0e0
299 REAL AA, BB, CC, CS, DD, SN, SS, SWAP
300 INTEGER I, INF, IT, ITMAX, K, KACC22, KBOT, KDU, KS,
301 $ kt, ktop, ku, kv, kwh, kwtop, kwv, ld, ls,
302 $ lwkopt, ndec, ndfl, nh, nho, nibble, nmin, ns
303 $ nsmax, nsr, nve, nw, nwmax, nwr, nwupbd
318 INTRINSIC abs, int,
max,
min, mod, real
330 IF( n.LE.ntiny )
THEN
336 $
CALL slahqr( wantt, wantz, n, ilo, ihi, h, ldh, wr, wi,
337 $ iloz, ihiz, z, ldz, info )
366 nwr = ilaenv( 13,
'SLAQR0', jbcmpz, n, ilo, ihi, lwork )
368 nwr =
min( ihi-ilo+1, ( n-1 ) / 3, nwr )
375 nsr = ilaenv( 15, '
slaqr0', JBCMPZ, N, ILO, IHI, LWORK )
376 NSR = MIN( NSR, ( N-3 ) / 6, IHI-ILO )
377 NSR = MAX( 2, NSR-MOD( NSR, 2 ) )
383 CALL SLAQR3( WANTT, WANTZ, N, ILO, IHI, NWR+1, H, LDH, ILOZ,
384 $ IHIZ, Z, LDZ, LS, LD, WR, WI, H, LDH, N, H, LDH,
385 $ N, H, LDH, WORK, -1 )
389 LWKOPT = MAX( 3*NSR / 2, INT( WORK( 1 ) ) )
393.EQ.
IF( LWORK-1 ) THEN
394 WORK( 1 ) = REAL( LWKOPT )
400 NMIN = ILAENV( 12, 'slaqr0', JBCMPZ, N, ILO, IHI, LWORK )
401 NMIN = MAX( NTINY, NMIN )
405 NIBBLE = ILAENV( 14, 'slaqr0', JBCMPZ, N, ILO, IHI, LWORK )
406 NIBBLE = MAX( 0, NIBBLE )
411 KACC22 = ILAENV( 16, 'slaqr0', JBCMPZ, N, ILO, IHI, LWORK )
412 KACC22 = MAX( 0, KACC22 )
413 KACC22 = MIN( 2, KACC22 )
418 NWMAX = MIN( ( N-1 ) / 3, LWORK / 2 )
424 NSMAX = MIN( ( N-3 ) / 6, 2*LWORK / 3 )
425 NSMAX = NSMAX - MOD( NSMAX, 2 )
433 ITMAX = MAX( 30, 2*KEXSH )*MAX( 10, ( IHI-ILO+1 ) )
450 DO 10 K = KBOT, ILO + 1, -1
451.EQ.
IF( H( K, K-1 )ZERO )
475 NWUPBD = MIN( NH, NWMAX )
476.LT.
IF( NDFLKEXNW ) THEN
477 NW = MIN( NWUPBD, NWR )
479 NW = MIN( NWUPBD, 2*NW )
481.LT.
IF( NWNWMAX ) THEN
482.GE.
IF( NWNH-1 ) THEN
485 KWTOP = KBOT - NW + 1
486.GT.
IF( ABS( H( KWTOP, KWTOP-1 ) )
487 $ ABS( H( KWTOP-1, KWTOP-2 ) ) )NW = NW + 1
490.LT.
IF( NDFLKEXNW ) THEN
492.GE..OR..GE.
ELSE IF( NDEC0 NWNWUPBD ) THEN
512 NHO = ( N-NW-1 ) - KT + 1
514 NVE = ( N-NW ) - KWV + 1
518 CALL SLAQR3( WANTT, WANTZ, N, KTOP, KBOT, NW, H, LDH, ILOZ,
519 $ IHIZ, Z, LDZ, LS, LD, WR, WI, H( KV, 1 ), LDH,
520 $ NHO, H( KV, KT ), LDH, NVE, H( KWV, 1 ), LDH,
537.EQ..OR..LE..AND.
IF( ( LD0 ) ( ( 100*LDNW*NIBBLE ) ( KBOT-
538.GT.
$ KTOP+1MIN( NMIN, NWMAX ) ) ) ) THEN
544 NS = MIN( NSMAX, NSR, MAX( 2, KBOT-KTOP ) )
545 NS = NS - MOD( NS, 2 )
554.EQ.
IF( MOD( NDFL, KEXSH )0 ) THEN
556 DO 30 I = KBOT, MAX( KS+1, KTOP+2 ), -2
557 SS = ABS( H( I, I-1 ) ) + ABS( H( I-1, I-2 ) )
558 AA = WILK1*SS + H( I, I )
562 CALL SLANV2( AA, BB, CC, DD, WR( I-1 ), WI( I-1 ),
563 $ WR( I ), WI( I ), CS, SN )
565.EQ.
IF( KSKTOP ) THEN
566 WR( KS+1 ) = H( KS+1, KS+1 )
568 WR( KS ) = WR( KS+1 )
569 WI( KS ) = WI( KS+1 )
579.LE.
IF( KBOT-KS+1NS / 2 ) THEN
582 CALL SLACPY( 'a
', NS, NS, H( KS, KS ), LDH,
584.GT.
IF( NSNMIN ) THEN
585 CALL SLAQR4( .false., .false., NS, 1, NS,
586 $ H( KT, 1 ), LDH, WR( KS ),
587 $ WI( KS ), 1, 1, ZDUM, 1, WORK,
590 CALL SLAHQR( .false., .false., NS, 1, NS,
591 $ H( KT, 1 ), LDH, WR( KS ),
592 $ WI( KS ), 1, 1, ZDUM, 1, INF )
600.GE.
IF( KSKBOT ) THEN
601 AA = H( KBOT-1, KBOT-1 )
602 CC = H( KBOT, KBOT-1 )
603 BB = H( KBOT-1, KBOT )
605 CALL SLANV2( AA, BB, CC, DD, WR( KBOT-1 ),
606 $ WI( KBOT-1 ), WR( KBOT ),
607 $ WI( KBOT ), CS, SN )
612.GT.
IF( KBOT-KS+1NS ) THEN
619 DO 50 K = KBOT, KS + 1, -1
624.LT.
IF( ABS( WR( I ) )+ABS( WI( I ) )
625 $ ABS( WR( I+1 ) )+ABS( WI( I+1 ) ) ) THEN
647 DO 70 I = KBOT, KS + 2, -2
648.NE.
IF( WI( I )-WI( I-1 ) ) THEN
652 WR( I-1 ) = WR( I-2 )
657 WI( I-1 ) = WI( I-2 )
666.EQ.
IF( KBOT-KS+12 ) THEN
667.EQ.
IF( WI( KBOT )ZERO ) THEN
668.LT.
IF( ABS( WR( KBOT )-H( KBOT, KBOT ) )
669 $ ABS( WR( KBOT-1 )-H( KBOT, KBOT ) ) ) THEN
670 WR( KBOT-1 ) = WR( KBOT )
672 WR( KBOT ) = WR( KBOT-1 )
682 NS = MIN( NS, KBOT-KS+1 )
683 NS = NS - MOD( NS, 2 )
700 NHO = ( N-KDU+1-4 ) - ( KDU+1 ) + 1
702 NVE = N - KDU - KWV + 1
706 CALL SLAQR5( WANTT, WANTZ, KACC22, N, KTOP, KBOT, NS,
707 $ WR( KS ), WI( KS ), H, LDH, ILOZ, IHIZ, Z,
708 $ LDZ, WORK, 3, H( KU, 1 ), LDH, NVE,
709 $ H( KWV, 1 ), LDH, NHO, H( KU, KWH ), LDH )
732 WORK( 1 ) = REAL( LWKOPT )
subroutine slacpy(uplo, m, n, a, lda, b, ldb)
SLACPY copies all or part of one two-dimensional array to another.
subroutine slaqr3(wantt, wantz, n, ktop, kbot, nw, h, ldh, iloz, ihiz, z, ldz, ns, nd, sr, si, v, ldv, nh, t, ldt, nv, wv, ldwv, work, lwork)
SLAQR3 performs the orthogonal similarity transformation of a Hessenberg matrix to detect and deflate...
subroutine slaqr4(wantt, wantz, n, ilo, ihi, h, ldh, wr, wi, iloz, ihiz, z, ldz, work, lwork, info)
SLAQR4 computes the eigenvalues of a Hessenberg matrix, and optionally the matrices from the Schur de...
subroutine slaqr0(wantt, wantz, n, ilo, ihi, h, ldh, wr, wi, iloz, ihiz, z, ldz, work, lwork, info)
SLAQR0 computes the eigenvalues of a Hessenberg matrix, and optionally the matrices from the Schur de...
subroutine slahqr(wantt, wantz, n, ilo, ihi, h, ldh, wr, wi, iloz, ihiz, z, ldz, info)
SLAHQR computes the eigenvalues and Schur factorization of an upper Hessenberg matrix,...
subroutine slanv2(a, b, c, d, rt1r, rt1i, rt2r, rt2i, cs, sn)
SLANV2 computes the Schur factorization of a real 2-by-2 nonsymmetric matrix in standard form.
subroutine slaqr5(wantt, wantz, kacc22, n, ktop, kbot, nshfts, sr, si, h, ldh, iloz, ihiz, z, ldz, v, ldv, u, ldu, nv, wv, ldwv, nh, wh, ldwh)
SLAQR5 performs a single small-bulge multi-shift QR sweep.