227 SUBROUTINE slar1v( N, B1, BN, LAMBDA, D, L, LD, LLD,
228 $ PIVMIN, GAPTOL, Z, WANTNC, NEGCNT, ZTZ, MINGMA,
229 $ R, ISUPPZ, NRMINV, RESID, RQCORR, WORK )
237 INTEGER B1, BN, N, NEGCNT, R
238 REAL GAPTOL, LAMBDA, MINGMA, NRMINV, PIVMIN, RESID,
243 REAL D( * ), L( * ), LD( * ), ( * ),
252 PARAMETER ( = 0.0e0, one = 1.0e0 )
256 LOGICAL SAWNAN1, SAWNAN2
257 INTEGER I, INDLPL, INDP, INDS, , NEG1, NEG2, R1,
259 REAL , DPLUS, EPS, S, TMP
271 eps =
slamch( 'precision
' )
292 WORK( INDS+B1-1 ) = LLD( B1-1 )
301 S = WORK( INDS+B1-1 ) - LAMBDA
304 WORK( INDLPL+I ) = LD( I ) / DPLUS
305.LT.
IF(DPLUSZERO) NEG1 = NEG1 + 1
306 WORK( INDS+I ) = S*WORK( INDLPL+I )*L( I )
307 S = WORK( INDS+I ) - LAMBDA
309 SAWNAN1 = SISNAN( S )
310 IF( SAWNAN1 ) GOTO 60
313 WORK( INDLPL+I ) = LD( I ) / DPLUS
314 WORK( INDS+I ) = S*WORK( INDLPL+I )*L( I )
315 S = WORK( INDS+I ) - LAMBDA
317 SAWNAN1 = SISNAN( S )
323 S = WORK( INDS+B1-1 ) - LAMBDA
326.LT.
IF(ABS(DPLUS)PIVMIN) DPLUS = -PIVMIN
327 WORK( INDLPL+I ) = LD( I ) / DPLUS
328.LT.
IF(DPLUSZERO) NEG1 = NEG1 + 1
329 WORK( INDS+I ) = S*WORK( INDLPL+I )*L( I )
330.EQ.
IF( WORK( INDLPL+I )ZERO )
331 $ WORK( INDS+I ) = LLD( I )
332 S = WORK( INDS+I ) - LAMBDA
336.LT.
IF(ABS(DPLUS)PIVMIN) DPLUS = -PIVMIN
337 WORK( INDLPL+I ) = LD( I ) / DPLUS
338 WORK( INDS+I ) = S*WORK( INDLPL+I )*L( I )
339.EQ.
IF( WORK( INDLPL+I )ZERO )
340 $ WORK( INDS+I ) = LLD( I )
341 S = WORK( INDS+I ) - LAMBDA
350 WORK( INDP+BN-1 ) = D( BN ) - LAMBDA
351 DO 80 I = BN - 1, R1, -1
352 DMINUS = LLD( I ) + WORK( INDP+I )
353 TMP = D( I ) / DMINUS
354.LT.
IF(DMINUSZERO) NEG2 = NEG2 + 1
355 WORK( INDUMN+I ) = L( I )*TMP
356 WORK( INDP+I-1 ) = WORK( INDP+I )*TMP - LAMBDA
358 TMP = WORK( INDP+R1-1 )
359 SAWNAN2 = SISNAN( TMP )
364 DO 100 I = BN-1, R1, -1
365 DMINUS = LLD( I ) + WORK( INDP+I )
366.LT.
IF(ABS(DMINUS)PIVMIN) DMINUS = -PIVMIN
367 TMP = D( I ) / DMINUS
368.LT.
IF(DMINUSZERO) NEG2 = NEG2 + 1
369 WORK( INDUMN+I ) = L( I )*TMP
370 WORK( INDP+I-1 ) = WORK( INDP+I )*TMP - LAMBDA
372 $ WORK( INDP+I-1 ) = D( I ) - LAMBDA
379 MINGMA = WORK( INDS+R1-1 ) + WORK( INDP+R1-1 )
380.LT.
IF( MINGMAZERO ) NEG1 = NEG1 + 1
386.EQ.
IF( ABS(MINGMA)ZERO )
387 $ MINGMA = EPS*WORK( INDS+R1-1 )
389 DO 110 I = R1, R2 - 1
390 TMP = WORK( INDS+I ) + WORK( INDP+I )
392 $ TMP = EPS*WORK( INDS+I )
393.LE.
IF( ABS( TMP )ABS( MINGMA ) ) THEN
408.NOT..AND..NOT.
IF( SAWNAN1 SAWNAN2 ) THEN
409 DO 210 I = R-1, B1, -1
410 Z( I ) = -( WORK( INDLPL+I )*Z( I+1 ) )
411.LT.
IF( (ABS(Z(I))+ABS(Z(I+1)))* ABS(LD(I))GAPTOL )
417 ZTZ = ZTZ + Z( I )*Z( I )
422 DO 230 I = R - 1, B1, -1
423.EQ.
IF( Z( I+1 )ZERO ) THEN
424 Z( I ) = -( LD( I+1 ) / LD( I ) )*Z( I+2 )
426 Z( I ) = -( WORK( INDLPL+I )*Z( I+1 ) )
428.LT.
IF( (ABS(Z(I))+ABS(Z(I+1)))* ABS(LD(I))GAPTOL )
434 ZTZ = ZTZ + Z( I )*Z( I )
440.NOT..AND..NOT.
IF( SAWNAN1 SAWNAN2 ) THEN
442 Z( I+1 ) = -( WORK( INDUMN+I )*Z( I ) )
443.LT.
IF( (ABS(Z(I))+ABS(Z(I+1)))* ABS(LD(I))GAPTOL )
449 ZTZ = ZTZ + Z( I+1 )*Z( I+1 )
455.EQ.
IF( Z( I )ZERO ) THEN
456 Z( I+1 ) = -( LD( I-1 ) / LD( I ) )*Z( I-1 )
458 Z( I+1 ) = -( WORK( INDUMN+I )*Z( I ) )
460.LT.
IF( (ABS(Z(I))+ABS(Z(I+1)))* ABS(LD(I))GAPTOL )
466 ZTZ = ZTZ + Z( I+1 )*Z( I+1 )
475 RESID = ABS( MINGMA )*NRMINV
subroutine slar1v(n, b1, bn, lambda, d, l, ld, lld, pivmin, gaptol, z, wantnc, negcnt, ztz, mingma, r, isuppz, nrminv, resid, rqcorr, work)
SLAR1V computes the (scaled) r-th column of the inverse of the submatrix in rows b1 through bn of the...