120 SUBROUTINE dlatm7( MODE, COND, IRSIGN, IDIST, ISEED, D, N,
128 DOUBLE PRECISION COND
129 INTEGER IDIST, INFO, IRSIGN, MODE, N, RANK
132 DOUBLE PRECISION D( * )
140 parameter( one = 1.0d0 )
141 DOUBLE PRECISION ZERO
142 parameter( zero = 0.0d0 )
143 DOUBLE PRECISION HALF
144 parameter( half = 0.5d0 )
147 DOUBLE PRECISION ALPHA, TEMP
151 DOUBLE PRECISION DLARAN
158 INTRINSIC abs, dble, exp, log
173 IF( mode.LT.-6 .OR. mode.GT.6 )
THEN
175 ELSE IF( ( mode.NE.-6 .AND. mode.NE.0 .AND. mode.NE.6 ) .AND.
176 $ ( irsign.NE.0 .AND. irsign.NE.1 ) )
THEN
178 ELSE IF( ( mode.NE.-6 .AND. mode.NE.0 .AND. mode.NE.6 ) .AND.
181 ELSE IF( ( mode.EQ.6 .OR. mode.EQ.-6 ) .AND.
182 $ ( idist.LT.1 .OR. idist.GT.3 ) )
THEN
184 ELSE IF( n.LT.0 )
THEN
189 CALL xerbla(
'DLATM7', -info )
196 GO TO ( 100, 130, 160, 190, 210, 230 )abs( mode )
204 DO 120 i = rank + 1, n
213 DO 140 i = 1, rank - 1
216 DO 150 i = rank + 1, n
219 d( rank ) = one / cond
226 IF( n.GT.1 .AND. rank.GT.1 )
THEN
227 alpha = cond**( -one / dble( rank-1 ) )
229 d( i ) = alpha**( i-1 )
231 DO 180 i = rank + 1, n
243 alpha = ( one-temp ) / dble( n-1 )
245 d( i ) = dble( n-i )*alpha + temp
253 alpha = log( one / cond )
255 d( i ) = exp( alpha*dlaran( iseed ) )
262 CALL dlarnv( idist, iseed, n, d )
269 IF( ( mode.NE.-6 .AND. mode.NE.0 .AND. mode.NE.6 ) .AND.
272 temp = dlaran( iseed )
subroutine xerbla(srname, info)
subroutine dlatm7(mode, cond, irsign, idist, iseed, d, n, rank, info)
DLATM7
subroutine dlarnv(idist, iseed, n, x)
DLARNV returns a vector of random numbers from a uniform or normal distribution.