183 SUBROUTINE slaed3( K, N, N1, D, Q, LDQ, RHO, DLAMDA, Q2, INDX,
191 INTEGER INFO, K, LDQ, N, N1
195 INTEGER CTOT( * ), INDX( * )
196 REAL D( * ), DLAMDA( * ), Q( ldq, * ), Q2( * ),
204 parameter( one = 1.0e0, zero = 0.0e0 )
207 INTEGER I, II, IQ2, J, N12, N2, N23
212 EXTERNAL slamc3, snrm2
218 INTRINSIC max, sign, sqrt
228 ELSE IF( n.LT.k )
THEN 230 ELSE IF( ldq.LT.max( 1, n ) )
THEN 234 CALL xerbla(
'SLAED3', -info )
261 dlamda( i ) = slamc3( dlamda( i ), dlamda( i ) ) - dlamda( i )
265 CALL slaed4( k, j, dlamda, w, q( 1, j ), rho, d( j ), info )
289 CALL scopy( k, w, 1, s, 1 )
293 CALL scopy( k, q, ldq+1, w, 1 )
296 w( i ) = w( i )*( q( i, j ) / ( dlamda( i )-dlamda( j ) ) )
299 w( i ) = w( i )*( q( i, j ) / ( dlamda( i )-dlamda( j ) ) )
303 w( i ) = sign( sqrt( -w( i ) ), s( i ) )
310 s( i ) = w( i ) / q( i, j )
312 temp = snrm2( k, s, 1 )
315 q( i, j ) = s( ii ) / temp
324 n12 = ctot( 1 ) + ctot( 2 )
325 n23 = ctot( 2 ) + ctot( 3 )
327 CALL slacpy(
'A', n23, k, q( ctot( 1 )+1, 1 ), ldq, s, n23 )
330 CALL sgemm(
'N',
'N', n2, k, n23, one, q2( iq2 ), n2, s, n23,
331 $ zero, q( n1+1, 1 ), ldq )
333 CALL slaset(
'A', n2, k, zero, zero, q( n1+1, 1 ), ldq )
336 CALL slacpy(
'A', n12, k, q, ldq, s, n12 )
338 CALL sgemm(
'N',
'N', n1, k, n12, one, q2, n1, s, n12, zero, q,
341 CALL slaset(
'A', n1, k, zero, zero, q( 1, 1 ), ldq )
subroutine slaed3(K, N, N1, D, Q, LDQ, RHO, DLAMDA, Q2, INDX, CTOT, W, S, INFO)
SLAED3 used by SSTEDC. Finds the roots of the secular equation and updates the eigenvectors. Used when the original matrix is tridiagonal.
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine sgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
SGEMM
subroutine slaed4(N, I, D, Z, DELTA, RHO, DLAM, INFO)
SLAED4 used by SSTEDC. Finds a single root of the secular equation.
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 scopy(N, SX, INCX, SY, INCY)
SCOPY
subroutine slacpy(UPLO, M, N, A, LDA, B, LDB)
SLACPY copies all or part of one two-dimensional array to another.