225 SUBROUTINE claed8( K, N, QSIZ, Q, LDQ, D, RHO, CUTPNT, Z, DLAMDA,
226 $ Q2, LDQ2, W, INDXP, INDX, INDXQ, PERM, GIVPTR,
227 $ GIVCOL, GIVNUM, INFO )
234 INTEGER CUTPNT, GIVPTR, INFO, K, , LDQ2, N, QSIZ
238 INTEGER GIVCOL( 2, * ), INDX( * ), INDXP( * ),
239 $ INDXQ( * ), PERM( * )
240 REAL D( * ), DLAMDA( * ), GIVNUM( 2, * ), W( * ),
242 COMPLEX Q( LDQ, * ), Q2( LDQ2, * )
248 REAL MONE, ZERO, ONE, TWO, EIGHT
249 PARAMETER ( MONE = -1.0e0, zero = 0.0e0, one = 1.0e0,
250 $ two = 2.0e0, eight = 8.0e0 )
253 INTEGER , IMAX, J, JLAM, JMAX, JP, K2, N1, N1P1, N2
254 REAL C, EPS, S, T, TAU, TOL
259 EXTERNAL isamax, slamch, slapy2
266 INTRINSIC abs,
max,
min, sqrt
276 ELSE IF( qsiz.LT.n )
THEN
278 ELSE IF( ldq.LT.
max( 1, n ) )
THEN
280 ELSE IF( cutpnt.LT.
min( 1, n ) .OR. cutpnt.GT.n )
THEN
282 ELSE IF( ldq2.LT.
max( 1, n ) )
THEN
306.LT.
IF( RHOZERO ) THEN
307 CALL SSCAL( N2, MONE, Z( N1P1 ), 1 )
312 T = ONE / SQRT( TWO )
316 CALL SSCAL( N, T, Z, 1 )
321 DO 20 I = CUTPNT + 1, N
322 INDXQ( I ) = INDXQ( I ) + CUTPNT
325 DLAMDA( I ) = D( INDXQ( I ) )
326 W( I ) = Z( INDXQ( I ) )
330 CALL SLAMRG( N1, N2, DLAMDA, 1, 1, INDX )
332 D( I ) = DLAMDA( INDX( I ) )
333 Z( I ) = W( INDX( I ) )
338 IMAX = ISAMAX( N, Z, 1 )
339 JMAX = ISAMAX( N, D, 1 )
340 EPS = SLAMCH( 'epsilon
' )
341 TOL = EIGHT*EPS*ABS( D( JMAX ) )
347.LE.
IF( RHO*ABS( Z( IMAX ) )TOL ) THEN
350 PERM( J ) = INDXQ( INDX( J ) )
351 CALL CCOPY( QSIZ, Q( 1, PERM( J ) ), 1, Q2( 1, J ), 1 )
353 CALL CLACPY( 'a
', QSIZ, N, Q2( 1, 1 ), LDQ2, Q( 1, 1 ), LDQ )
366.LE.
IF( RHO*ABS( Z( J ) )TOL ) THEN
383.LE.
IF( RHO*ABS( Z( J ) )TOL ) THEN
400 T = D( J ) - D( JLAM )
403.LE.
IF( ABS( T*C*S )TOL ) THEN
413 GIVCOL( 1, GIVPTR ) = INDXQ( INDX( JLAM ) )
414 GIVCOL( 2, GIVPTR ) = INDXQ( INDX( J ) )
415 GIVNUM( 1, GIVPTR ) = C
416 GIVNUM( 2, GIVPTR ) = S
417 CALL CSROT( QSIZ, Q( 1, INDXQ( INDX( JLAM ) ) ), 1,
418 $ Q( 1, INDXQ( INDX( J ) ) ), 1, C, S )
419 T = D( JLAM )*C*C + D( J )*S*S
420 D( J ) = D( JLAM )*S*S + D( J )*C*C
426.LT.
IF( D( JLAM )D( INDXP( K2+I ) ) ) THEN
427 INDXP( K2+I-1 ) = INDXP( K2+I )
432 INDXP( K2+I-1 ) = JLAM
435 INDXP( K2+I-1 ) = JLAM
441 DLAMDA( K ) = D( JLAM )
453 DLAMDA( K ) = D( JLAM )
465 DLAMDA( J ) = D( JP )
466 PERM( J ) = INDXQ( INDX( JP ) )
467 CALL CCOPY( QSIZ, Q( 1, PERM( J ) ), 1, Q2( 1, J ), 1 )
474 CALL SCOPY( N-K, DLAMDA( K+1 ), 1, D( K+1 ), 1 )
475 CALL CLACPY( 'a
', QSIZ, N-K, Q2( 1, K+1 ), LDQ2, Q( 1, K+1 ),
subroutine slamrg(n1, n2, a, strd1, strd2, index)
SLAMRG creates a permutation list to merge the entries of two independently sorted sets into a single...
subroutine clacpy(uplo, m, n, a, lda, b, ldb)
CLACPY copies all or part of one two-dimensional array to another.
subroutine claed8(k, n, qsiz, q, ldq, d, rho, cutpnt, z, dlamda, q2, ldq2, w, indxp, indx, indxq, perm, givptr, givcol, givnum, info)
CLAED8 used by CSTEDC. Merges eigenvalues and deflates secular equation. Used when the original matri...
subroutine csrot(n, cx, incx, cy, incy, c, s)
CSROT