112 SUBROUTINE dlagge( M, N, KL, KU, D, A, LDA, ISEED, WORK, INFO )
119 INTEGER INFO, KL, KU, LDA, M, N
123 DOUBLE PRECISION A( LDA, * ), D( * ), WORK( * )
129 DOUBLE PRECISION ZERO, ONE
130 parameter( zero = 0.0d+0, one = 1.0d+0 )
134 DOUBLE PRECISION TAU, WA, WB, WN
143 DOUBLE PRECISION DNRM2
153 ELSE IF( n.LT.0 )
THEN
155 ELSE IF( kl.LT.0 .OR. kl.GT.m-1 )
THEN
157 ELSE IF( ku.LT.0 .OR. ku.GT.n-1 )
THEN
159 ELSE IF( lda.LT.
max( 1, m ) )
THEN
174 DO 30 I = 1, MIN( M, N )
180.EQ..AND..EQ.
IF(( KL 0 )( KU 0)) RETURN
184 DO 40 I = MIN( M, N ), 1, -1
189 CALL DLARNV( 3, ISEED, M-I+1, WORK )
190 WN = DNRM2( M-I+1, WORK, 1 )
191 WA = SIGN( WN, WORK( 1 ) )
192.EQ.
IF( WNZERO ) THEN
196 CALL DSCAL( M-I, ONE / WB, WORK( 2 ), 1 )
203 CALL DGEMV( 'transpose
', M-I+1, N-I+1, ONE, A( I, I ), LDA,
204 $ WORK, 1, ZERO, WORK( M+1 ), 1 )
205 CALL DGER( M-I+1, N-I+1, -TAU, WORK, 1, WORK( M+1 ), 1,
212 CALL DLARNV( 3, ISEED, N-I+1, WORK )
213 WN = DNRM2( N-I+1, WORK, 1 )
214 WA = SIGN( WN, WORK( 1 ) )
215.EQ.
IF( WNZERO ) THEN
219 CALL DSCAL( N-I, ONE / WB, WORK( 2 ), 1 )
226 CALL DGEMV( 'no transpose
', M-I+1, N-I+1, ONE, A( I, I ),
227 $ LDA, WORK, 1, ZERO, WORK( N+1 ), 1 )
228 CALL DGER( M-I+1, N-I+1, -TAU, WORK( N+1 ), 1, WORK, 1,
236 DO 70 I = 1, MAX( M-1-KL, N-1-KU )
241.LE.
IF( IMIN( M-1-KL, N ) ) THEN
245 WN = DNRM2( M-KL-I+1, A( KL+I, I ), 1 )
246 WA = SIGN( WN, A( KL+I, I ) )
247.EQ.
IF( WNZERO ) THEN
250 WB = A( KL+I, I ) + WA
251 CALL DSCAL( M-KL-I, ONE / WB, A( KL+I+1, I ), 1 )
258 CALL DGEMV( 'transpose
', M-KL-I+1, N-I, ONE,
259 $ A( KL+I, I+1 ), LDA, A( KL+I, I ), 1, ZERO,
261 CALL DGER( M-KL-I+1, N-I, -TAU, A( KL+I, I ), 1, WORK, 1,
262 $ A( KL+I, I+1 ), LDA )
266.LE.
IF( IMIN( N-1-KU, M ) ) THEN
270 WN = DNRM2( N-KU-I+1, A( I, KU+I ), LDA )
271 WA = SIGN( WN, A( I, KU+I ) )
272.EQ.
IF( WNZERO ) THEN
275 WB = A( I, KU+I ) + WA
276 CALL DSCAL( N-KU-I, ONE / WB, A( I, KU+I+1 ), LDA )
283 CALL DGEMV( 'no transpose
', M-I, N-KU-I+1, ONE,
284 $ A( I+1, KU+I ), LDA, A( I, KU+I ), LDA, ZERO,
286 CALL DGER( M-I, N-KU-I+1, -TAU, WORK, 1, A( I, KU+I ),
287 $ LDA, A( I+1, KU+I ), LDA )
295.LE.
IF( IMIN( N-1-KU, M ) ) THEN
299 WN = DNRM2( N-KU-I+1, A( I, KU+I ), LDA )
300 WA = SIGN( WN, A( I, KU+I ) )
301.EQ.
IF( WNZERO ) THEN
304 WB = A( I, KU+I ) + WA
305 CALL DSCAL( N-KU-I, ONE / WB, A( I, KU+I+1 ), LDA )
312 CALL DGEMV( 'no transpose
', M-I, N-KU-I+1, ONE,
313 $ A( I+1, KU+I ), LDA, A( I, KU+I ), LDA, ZERO,
315 CALL DGER( M-I, N-KU-I+1, -TAU, WORK, 1, A( I, KU+I ),
316 $ LDA, A( I+1, KU+I ), LDA )
320.LE.
IF( IMIN( M-1-KL, N ) ) THEN
324 WN = DNRM2( M-KL-I+1, A( KL+I, I ), 1 )
325 WA = SIGN( WN, A( KL+I, I ) )
326.EQ.
IF( WNZERO ) THEN
329 WB = A( KL+I, I ) + WA
330 CALL DSCAL( M-KL-I, ONE / WB, A( KL+I+1, I ), 1 )
337 CALL DGEMV( 'transpose
', M-KL-I+1, N-I, ONE,
338 $ A( KL+I, I+1 ), LDA, A( KL+I, I ), 1, ZERO,
340 CALL DGER( M-KL-I+1, N-I, -TAU, A( KL+I, I ), 1, WORK, 1,
341 $ A( KL+I, I+1 ), LDA )
347 DO 50 J = KL + I + 1, M
353 DO 60 J = KU + I + 1, N
subroutine dlarnv(idist, iseed, n, x)
DLARNV returns a vector of random numbers from a uniform or normal distribution.
subroutine xerbla(srname, info)
XERBLA
subroutine dscal(n, da, dx, incx)
DSCAL
subroutine dgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
DGEMV
subroutine dger(m, n, alpha, x, incx, y, incy, a, lda)
DGER
subroutine dlagge(m, n, kl, ku, d, a, lda, iseed, work, info)
DLAGGE