LAPACK 3.12.0
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches

◆ slarge()

subroutine slarge ( integer  n,
real, dimension( lda, * )  a,
integer  lda,
integer, dimension( 4 )  iseed,
real, dimension( * )  work,
integer  info 
)

SLARGE

Purpose:
 SLARGE pre- and post-multiplies a real general n by n matrix A
 with a random orthogonal matrix: A = U*D*U'.
Parameters
[in]N
          N is INTEGER
          The order of the matrix A.  N >= 0.
[in,out]A
          A is REAL array, dimension (LDA,N)
          On entry, the original n by n matrix A.
          On exit, A is overwritten by U*A*U' for some random
          orthogonal matrix U.
[in]LDA
          LDA is INTEGER
          The leading dimension of the array A.  LDA >= N.
[in,out]ISEED
          ISEED is INTEGER array, dimension (4)
          On entry, the seed of the random number generator; the array
          elements must be between 0 and 4095, and ISEED(4) must be
          odd.
          On exit, the seed is updated.
[out]WORK
          WORK is REAL array, dimension (2*N)
[out]INFO
          INFO is INTEGER
          = 0: successful exit
          < 0: if INFO = -i, the i-th argument had an illegal value
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.

Definition at line 86 of file slarge.f.

87*
88* -- LAPACK auxiliary routine --
89* -- LAPACK is a software package provided by Univ. of Tennessee, --
90* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
91*
92* .. Scalar Arguments ..
93 INTEGER INFO, LDA, N
94* ..
95* .. Array Arguments ..
96 INTEGER ISEED( 4 )
97 REAL A( LDA, * ), WORK( * )
98* ..
99*
100* =====================================================================
101*
102* .. Parameters ..
103 REAL ZERO, ONE
104 parameter( zero = 0.0e+0, one = 1.0e+0 )
105* ..
106* .. Local Scalars ..
107 INTEGER I
108 REAL TAU, WA, WB, WN
109* ..
110* .. External Subroutines ..
111 EXTERNAL sgemv, sger, slarnv, sscal, xerbla
112* ..
113* .. Intrinsic Functions ..
114 INTRINSIC max, sign
115* ..
116* .. External Functions ..
117 REAL SNRM2
118 EXTERNAL snrm2
119* ..
120* .. Executable Statements ..
121*
122* Test the input arguments
123*
124 info = 0
125 IF( n.LT.0 ) THEN
126 info = -1
127 ELSE IF( lda.LT.max( 1, n ) ) THEN
128 info = -3
129 END IF
130 IF( info.LT.0 ) THEN
131 CALL xerbla( 'SLARGE', -info )
132 RETURN
133 END IF
134*
135* pre- and post-multiply A by random orthogonal matrix
136*
137 DO 10 i = n, 1, -1
138*
139* generate random reflection
140*
141 CALL slarnv( 3, iseed, n-i+1, work )
142 wn = snrm2( n-i+1, work, 1 )
143 wa = sign( wn, work( 1 ) )
144 IF( wn.EQ.zero ) THEN
145 tau = zero
146 ELSE
147 wb = work( 1 ) + wa
148 CALL sscal( n-i, one / wb, work( 2 ), 1 )
149 work( 1 ) = one
150 tau = wb / wa
151 END IF
152*
153* multiply A(i:n,1:n) by random reflection from the left
154*
155 CALL sgemv( 'Transpose', n-i+1, n, one, a( i, 1 ), lda, work,
156 $ 1, zero, work( n+1 ), 1 )
157 CALL sger( n-i+1, n, -tau, work, 1, work( n+1 ), 1, a( i, 1 ),
158 $ lda )
159*
160* multiply A(1:n,i:n) by random reflection from the right
161*
162 CALL sgemv( 'No transpose', n, n-i+1, one, a( 1, i ), lda,
163 $ work, 1, zero, work( n+1 ), 1 )
164 CALL sger( n, n-i+1, -tau, work( n+1 ), 1, work, 1, a( 1, i ),
165 $ lda )
166 10 CONTINUE
167 RETURN
168*
169* End of SLARGE
170*
subroutine xerbla(srname, info)
Definition cblat2.f:3285
subroutine sgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
SGEMV
Definition sgemv.f:158
subroutine sger(m, n, alpha, x, incx, y, incy, a, lda)
SGER
Definition sger.f:130
subroutine slarnv(idist, iseed, n, x)
SLARNV returns a vector of random numbers from a uniform or normal distribution.
Definition slarnv.f:97
real(wp) function snrm2(n, x, incx)
SNRM2
Definition snrm2.f90:89
subroutine sscal(n, sa, sx, incx)
SSCAL
Definition sscal.f:79
Here is the call graph for this function:
Here is the caller graph for this function: