267 SUBROUTINE zlaqr2( WANTT, WANTZ, N, KTOP, KBOT, NW, H, LDH, ILOZ,
268 $ IHIZ, Z, LDZ, NS, ND, SH, V, LDV, NH, T, LDT,
269 $ NV, WV, LDWV, WORK, LWORK )
276 INTEGER IHIZ, ILOZ, KBOT, KTOP, LDH, LDT, LDV, LDWV,
277 $ LDZ, LWORK, N, ND, NH, NS, NV, NW
281 COMPLEX*16 H( , * ), SH( * ), T( LDT, * ), V( LDV, * ),
282 $ WORK( * ), WV( LDWV, * ), Z( LDZ, * )
289 PARAMETER ( ZERO = ( 0.0d0, 0.0d0 ),
290 $ one = ( 1.0d0, 0.0d0 ) )
291 DOUBLE PRECISION RZERO, RONE
292 PARAMETER ( RZERO = 0.0d0, rone = 1.0d0 )
295 COMPLEX*16 BETA, CDUM, S, TAU
296 DOUBLE PRECISION FOO, SAFMAX, SAFMIN, SMLNUM, ULP
297 INTEGER I, IFST, ILST, INFO, INFQR, J, JW, KCOL, KLN,
298 $ knt, krow, kwtop, ltop, lwk1, lwk2, lwkopt
301 DOUBLE PRECISION DLAMCH
309 INTRINSIC abs, dble, dcmplx, dconjg, dimag, int,
max,
min
315 cabs1( cdum ) = abs( dble( cdum ) ) + abs( dimag( cdum ) )
321 jw =
min( nw, kbot-ktop+1 )
328 CALL zgehrd( jw, 1, jw-1, t, ldt, work, work, -1, info )
329 lwk1 = int( work( 1 ) )
333 CALL zunmhr(
'R',
'N', jw, jw, 1, jw-1, t, ldt, work, v, ldv,
335 lwk2 = int( work( 1 ) )
339 lwkopt = jw +
max( lwk1, lwk2 )
344 IF( lwork.EQ.-1 )
THEN
345 work( 1 ) = dcmplx( lwkopt, 0 )
362 safmin = dlamch(
'SAFE MINIMUM' )
363 safmax = rone / safmin
364 CALL dlabad( safmin, safmax )
365 ulp = dlamch(
'PRECISION' )
366 smlnum = safmin*( dble( n ) / ulp )
370 jw =
min( nw, kbot-ktop+1 )
371 kwtop = kbot - jw + 1
372 IF( kwtop.EQ.ktop )
THEN
375 s = h( kwtop, kwtop-1 )
378 IF( kbot.EQ.kwtop )
THEN
382 sh( kwtop ) = h( kwtop, kwtop )
385 IF( cabs1( s ).LE.
max( smlnum, ulp*cabs1( h( kwtop,
390 $ h( kwtop, kwtop-1 ) = zero
402 CALL zlacpy(
'U', jw, jw, h( kwtop, kwtop ), ldh, t, ldt )
403 CALL zcopy( jw-1, h( kwtop
405 CALL zlaset( 'a
', JW, JW, ZERO, ONE, V, LDV )
406 CALL ZLAHQR( .true., .true., JW, 1, JW, T, LDT, SH( KWTOP ), 1,
407 $ JW, V, LDV, INFQR )
413 DO 10 KNT = INFQR + 1, JW
417 FOO = CABS1( T( NS, NS ) )
420.LE.
IF( CABS1( S )*CABS1( V( 1, NS ) )MAX( SMLNUM, ULP*FOO ) )
432 CALL ZTREXC( 'v
', JW, T, LDT, V, LDV, IFST, ILST, INFO )
447 DO 30 I = INFQR + 1, NS
450.GT.
IF( CABS1( T( J, J ) )CABS1( T( IFST, IFST ) ) )
455 $ CALL ZTREXC( 'v
', JW, T, LDT, V, LDV, IFST, ILST, INFO )
461 DO 40 I = INFQR + 1, JW
462 SH( KWTOP+I-1 ) = T( I, I )
466.LT..OR..EQ.
IF( NSJW SZERO ) THEN
467.GT..AND..NE.
IF( NS1 SZERO ) THEN
471 CALL ZCOPY( NS, V, LDV, WORK, 1 )
473 WORK( I ) = DCONJG( WORK( I ) )
476 CALL ZLARFG( NS, BETA, WORK( 2 ), 1, TAU )
479 CALL ZLASET( 'l
', JW-2, JW-2, ZERO, ZERO, T( 3, 1 ), LDT )
481 CALL ZLARF( 'l
', NS, JW, WORK, 1, DCONJG( TAU ), T, LDT,
483 CALL ZLARF( 'r
', NS, NS, WORK, 1, TAU, T, LDT,
485 CALL ZLARF( 'r
', JW, NS, WORK, 1, TAU, V, LDV,
488 CALL ZGEHRD( JW, 1, NS, T, LDT, WORK, WORK( JW+1 ),
495 $ H( KWTOP, KWTOP-1 ) = S*DCONJG( V( 1, 1 ) )
496 CALL ZLACPY( 'u
', JW, JW, T, LDT, H( KWTOP, KWTOP ), LDH )
497 CALL ZCOPY( JW-1, T( 2, 1 ), LDT+1, H( KWTOP+1, KWTOP ),
503.GT..AND..NE.
IF( NS1 SZERO )
504 $ CALL ZUNMHR( 'r
', 'n
', JW, NS, 1, NS, T, LDT, WORK, V, LDV,
505 $ WORK( JW+1 ), LWORK-JW, INFO )
514 DO 60 KROW = LTOP, KWTOP - 1, NV
515 KLN = MIN( NV, KWTOP-KROW )
516 CALL ZGEMM( 'n
', 'n
', KLN, JW, JW, ONE, H( KROW, KWTOP ),
517 $ LDH, V, LDV, ZERO, WV, LDWV )
518 CALL ZLACPY( 'a
', KLN, JW, WV, LDWV, H( KROW, KWTOP ), LDH )
524 DO 70 KCOL = KBOT + 1, N, NH
525 KLN = MIN( NH, N-KCOL+1 )
526 CALL ZGEMM( 'c
', 'n
', JW, KLN, JW, ONE, V, LDV,
527 $ H( KWTOP, KCOL ), LDH, ZERO, T, LDT )
528 CALL ZLACPY( 'a
', JW, KLN, T, LDT, H( KWTOP, KCOL ),
536 DO 80 KROW = ILOZ, IHIZ, NV
537 KLN = MIN( NV, IHIZ-KROW+1 )
538 CALL ZGEMM( 'n
', 'n
', KLN, JW, JW, ONE, Z( KROW, KWTOP ),
539 $ LDZ, V, LDV, ZERO, WV, LDWV )
540 CALL ZLACPY( 'a
', KLN, JW, WV, LDWV, Z( KROW, KWTOP ),
560 WORK( 1 ) = DCMPLX( LWKOPT, 0 )
subroutine zlahqr(wantt, wantz, n, ilo, ihi, h, ldh, w, iloz, ihiz, z, ldz, info)
ZLAHQR computes the eigenvalues and Schur factorization of an upper Hessenberg matrix,...
subroutine zlaqr2(wantt, wantz, n, ktop, kbot, nw, h, ldh, iloz, ihiz, z, ldz, ns, nd, sh, v, ldv, nh, t, ldt, nv, wv, ldwv, work, lwork)
ZLAQR2 performs the unitary similarity transformation of a Hessenberg matrix to detect and deflate fu...
subroutine zunmhr(side, trans, m, n, ilo, ihi, a, lda, tau, c, ldc, work, lwork, info)
ZUNMHR