122 SUBROUTINE dlatm7( MODE, COND, IRSIGN, IDIST, ISEED, D, N,
131 DOUBLE PRECISION cond
132 INTEGER idist, info, irsign, mode, n, rank
135 DOUBLE PRECISION d( * )
143 parameter( one = 1.0d0 )
144 DOUBLE PRECISION zero
145 parameter( zero = 0.0d0 )
146 DOUBLE PRECISION half
147 parameter( half = 0.5d0 )
150 DOUBLE PRECISION alpha, temp
161 INTRINSIC abs, dble, exp, log
176 IF( mode.LT.-6 .OR. mode.GT.6 )
THEN
178 ELSE IF( ( mode.NE.-6 .AND. mode.NE.0 .AND. mode.NE.6 ) .AND.
179 $ ( irsign.NE.0 .AND. irsign.NE.1 ) )
THEN
181 ELSE IF( ( mode.NE.-6 .AND. mode.NE.0 .AND. mode.NE.6 ) .AND.
184 ELSE IF( ( mode.EQ.6 .OR. mode.EQ.-6 ) .AND.
185 $ ( idist.LT.1 .OR. idist.GT.3 ) )
THEN
187 ELSE IF( n.LT.0 )
THEN
192 CALL
xerbla(
'DLATM7', -info )
199 go to( 100, 130, 160, 190, 210, 230 )abs( mode )
207 DO 120 i = rank + 1, n
216 DO 140 i = 1, rank - 1
219 DO 150 i = rank + 1, n
222 d( rank ) = one / cond
229 IF( n.GT.1 .AND. rank.GT.1 )
THEN
230 alpha = cond**( -one / dble( rank-1 ) )
232 d( i ) = alpha**( i-1 )
234 DO 180 i = rank + 1, n
246 alpha = ( one-temp ) / dble( n-1 )
248 d( i ) = dble( n-i )*alpha + temp
256 alpha = log( one / cond )
258 d( i ) = exp( alpha*
dlaran( iseed ) )
265 CALL
dlarnv( idist, iseed, n, d )
272 IF( ( mode.NE.-6 .AND. mode.NE.0 .AND. mode.NE.6 ) .AND.