LAPACK  3.10.1 LAPACK: Linear Algebra PACKage

## ◆ dlarge()

 subroutine dlarge ( integer N, double precision, dimension( lda, * ) A, integer LDA, integer, dimension( 4 ) ISEED, double precision, dimension( * ) WORK, integer INFO )

DLARGE

Purpose:
``` DLARGE 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 DOUBLE PRECISION 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 DOUBLE PRECISION array, dimension (2*N)` [out] INFO ``` INFO is INTEGER = 0: successful exit < 0: if INFO = -i, the i-th argument had an illegal value```

Definition at line 86 of file dlarge.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  DOUBLE PRECISION A( LDA, * ), WORK( * )
98 * ..
99 *
100 * =====================================================================
101 *
102 * .. Parameters ..
103  DOUBLE PRECISION ZERO, ONE
104  parameter( zero = 0.0d+0, one = 1.0d+0 )
105 * ..
106 * .. Local Scalars ..
107  INTEGER I
108  DOUBLE PRECISION TAU, WA, WB, WN
109 * ..
110 * .. External Subroutines ..
111  EXTERNAL dgemv, dger, dlarnv, dscal, xerbla
112 * ..
113 * .. Intrinsic Functions ..
114  INTRINSIC max, sign
115 * ..
116 * .. External Functions ..
117  DOUBLE PRECISION DNRM2
118  EXTERNAL dnrm2
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( 'DLARGE', -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 dlarnv( 3, iseed, n-i+1, work )
142  wn = dnrm2( 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 dscal( 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 dgemv( 'Transpose', n-i+1, n, one, a( i, 1 ), lda, work,
156  \$ 1, zero, work( n+1 ), 1 )
157  CALL dger( 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 dgemv( 'No transpose', n, n-i+1, one, a( 1, i ), lda,
163  \$ work, 1, zero, work( n+1 ), 1 )
164  CALL dger( 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 DLARGE
170 *
subroutine dlarnv(IDIST, ISEED, N, X)
DLARNV returns a vector of random numbers from a uniform or normal distribution.
Definition: dlarnv.f:97
subroutine xerbla(SRNAME, INFO)
XERBLA
Definition: xerbla.f:60
subroutine dscal(N, DA, DX, INCX)
DSCAL
Definition: dscal.f:79
subroutine dger(M, N, ALPHA, X, INCX, Y, INCY, A, LDA)
DGER
Definition: dger.f:130
subroutine dgemv(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
DGEMV
Definition: dgemv.f:156
real(wp) function dnrm2(n, x, incx)
DNRM2
Definition: dnrm2.f90:89
Here is the call graph for this function:
Here is the caller graph for this function: