1 SUBROUTINE slagge( M, N, KL, KU, D, A, LDA, ISEED, WORK, INFO )
8 INTEGER INFO, KL, KU, , M, N
12 REAL ( LDA, * ), D( * ), WORK( * )
65 parameter( zero = 0.0e+0, one = 1.0e+0 )
88 ELSE IF( n.LT.0 )
THEN
90 ELSE IF( kl.LT.0 .OR. kl.GT.m-1 )
THEN
92 ELSE IF( ku.LT.0 .OR. ku.GT.n-1 )
THEN
94 ELSE IF( lda.LT.
max( 1, m ) )
THEN
98 CALL xerbla(
'SLAGGE', -info )
109 DO 30 i = 1,
min( m, n )
115 DO 40 i =
min( m, n ), 1, -1
120 CALL slarnv( 3, iseed, m-i+1, work )
121 wn = snrm2( m-i+1, work, 1 )
122 wa = sign( wn, work( 1 ) )
123 IF( wn.EQ.zero )
THEN
127 CALL sscal( m-i, one / wb, work( 2 ), 1 )
134 CALL sgemv( 'transpose
', M-I+1, N-I+1, ONE, A( I, I ), LDA,
135 $ WORK, 1, ZERO, WORK( M+1 ), 1 )
136 CALL SGER( M-I+1, N-I+1, -TAU, WORK, 1, WORK( M+1 ), 1,
143 CALL SLARNV( 3, ISEED, N-I+1, WORK )
144 WN = SNRM2( N-I+1, WORK, 1 )
145 WA = SIGN( WN, WORK( 1 ) )
146.EQ.
IF( WNZERO ) THEN
150 CALL SSCAL( N-I, ONE / WB, WORK( 2 ), 1 )
157 CALL SGEMV( 'no transpose
', M-I+1, N-I+1, ONE, A( I, I ),
158 $ LDA, WORK, 1, ZERO, WORK( N+1 ), 1 )
159 CALL SGER( M-I+1, N-I+1, -TAU, WORK( N+1 ), 1, WORK, 1,
167 DO 70 I = 1, MAX( M-1-KL, N-1-KU )
172.LE.
IF( IMIN( M-1-KL, N ) ) THEN
176 WN = SNRM2( M-KL-I+1, A( KL+I, I ), 1 )
177 WA = SIGN( WN, A( KL+I, I ) )
178.EQ.
IF( WNZERO ) THEN
181 WB = A( KL+I, I ) + WA
182 CALL SSCAL( M-KL-I, ONE / WB, A( KL+I+1, I ), 1 )
189 CALL SGEMV( 'transpose
', M-KL-I+1, N-I, ONE,
190 $ A( KL+I, I+1 ), LDA, A( KL+I, I ), 1, ZERO,
192 CALL SGER( M-KL-I+1, N-I, -TAU, A( KL+I, I ), 1, WORK, 1,
193 $ A( KL+I, I+1 ), LDA )
197.LE.
IF( IMIN( N-1-KU, M ) ) THEN
201 WN = SNRM2( N-KU-I+1, A( I, KU+I ), LDA )
202 WA = SIGN( WN, A( I, KU+I ) )
203.EQ.
IF( WNZERO ) THEN
206 WB = A( I, KU+I ) + WA
207 CALL SSCAL( N-KU-I, ONE / WB, A( I, KU+I+1 ), LDA )
214 CALL SGEMV( 'no transpose
', M-I, N-KU-I+1, ONE,
215 $ A( I+1, KU+I ), LDA, A( I, KU+I ), LDA, ZERO,
217 CALL SGER( M-I, N-KU-I+1, -TAU, WORK, 1, A( I, KU+I ),
218 $ LDA, A( I+1, KU+I ), LDA )
226.LE.
IF( IMIN( N-1-KU, M ) ) THEN
230 WN = SNRM2( N-KU-I+1, A( I, KU+I ), LDA )
231 WA = SIGN( WN, A( I, KU+I ) )
232.EQ.
IF( WNZERO ) THEN
235 WB = A( I, KU+I ) + WA
236 CALL SSCAL( N-KU-I, ONE / WB, A( I, KU+I+1 ), LDA )
243 CALL SGEMV( 'no transpose
', M-I, N-KU-I+1, ONE,
244 $ A( I+1, KU+I ), LDA, A( I, KU+I ), LDA, ZERO,
246 CALL SGER( M-I, N-KU-I+1, -TAU, WORK, 1, A( I, KU+I ),
247 $ LDA, A( I+1, KU+I ), LDA )
251.LE.
IF( IMIN( M-1-KL, N ) ) THEN
255 WN = SNRM2( M-KL-I+1, A( KL+I, I ), 1 )
256 WA = SIGN( WN, A( KL+I, I ) )
257.EQ.
IF( WNZERO ) THEN
260 WB = A( KL+I, I ) + WA
261 CALL SSCAL( M-KL-I, ONE / WB, A( KL+I+1, I ), 1 )
268 CALL SGEMV( 'transpose
', M-KL-I+1, N-I, ONE,
269 $ A( KL+I, I+1 ), LDA, A( KL+I, I ), 1, ZERO,
271 CALL SGER( M-KL-I+1, N-I, -TAU, A( KL+I, I ), 1, WORK, 1,
272 $ A( KL+I, I+1 ), LDA )
277 DO 50 J = KL + I + 1, M
281 DO 60 J = KU + I + 1, N
subroutine slarnv(idist, iseed, n, x)
SLARNV returns a vector of random numbers from a uniform or normal distribution.
subroutine xerbla(srname, info)
XERBLA
subroutine sscal(n, sa, sx, incx)
SSCAL
subroutine sgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
SGEMV
subroutine sger(m, n, alpha, x, incx, y, incy, a, lda)
SGER