1 SUBROUTINE ddrvls( DOTYPE, NM, MVAL, NN, NVAL, NNS, NSVAL, NNB,
2 $ nbval, nxval, thresh, tsterr, a, copya, b,
3 $ copyb, c, s, copys, ibval, work, iwork, nout )
13 INTEGER nm, nn, nnb, nns, nout
14 DOUBLE PRECISION thresh
18 INTEGER iwork( * ), mval( * ), nbval( * ), nsval( * ),
19 $ nval( * ), nxval( * ), ibval( * )
20 DOUBLE PRECISION a( * ), b( * ), c( * ), copya( * ), copyb( * ),
21 $ copys( * ), s( * ), work( * )
122 parameter( ntests = 18 )
124 parameter( smlsiz = 25 )
125 DOUBLE PRECISION one, two, zero
126 parameter( one = 1.0d0, two = 2.0d0, zero = 0.0d0 )
131 INTEGER crank, i, im, in, inb, info, ins, irank,
132 $ iscale, itran,
itype, j, k, lda, ldb, ldwork,
133 $ lwlsy, lwork, m, mnmin, n, nb, ib, ncols,
134 $ nerrs, nfail, nlvl, nrhs, nrows, nrun, rank,
137 DOUBLE PRECISION eps, norma, normb, rcond
140 INTEGER iseed( 4 ), iseedy( 4 )
141 DOUBLE PRECISION result( ntests )
149 $ dgelsd, dgelss, dgelsx, dgelsy, dgemm, dlacpy,
154 INTRINSIC dble, int, log,
max,
min, sqrt
159 INTEGER infot, iounit
162 common / infoc / infot, iounit, ok, lerr
163 common / srnamc / srnamt
166 DATA iseedy / 1988, 1989, 1990, 1991 /
172 path( 1: 1 ) =
'Double precision'
178 iseed( i ) = iseedy( i )
180 eps = dlamch(
'Epsilon' )
184 rcond = sqrt( eps ) - ( sqrt( eps )-eps ) / 2
191 $ CALL
derrls( path, nout )
195 IF( ( nm.EQ.0 .OR. nn.EQ.0 ) .AND. thresh.EQ.zero )
196 $ CALL
alahd( nout, path )
212 nlvl =
max( int( log(
max( one, dble( mnmin ) ) /
213 $ dble( smlsiz+1 ) ) / log( two ) ) + 1, 0 )
214 lwork =
max( 1, ( m+nrhs )*( n+2 ), ( n+nrhs )*( m+2 ),
215 $ m*n+4*mnmin+
max( m, n ), 12*mnmin+2*mnmin*smlsiz+
216 $ 8*mnmin*nlvl+mnmin*nrhs+(smlsiz+1)**2 )
220 itype = ( irank-1 )*3 + iscale
221 IF( .NOT.dotype(
itype ) )
224 IF( irank.EQ.1 )
THEN
230 CALL
dqrt13( iscale, m, n, copya, lda, norma,
236 CALL
xlaenv( 3, nxval( inb ) )
237 IF ( (
max(m, n) / 25) .GT. nb )
THEN
254 IF( itran.EQ.1 )
THEN
256 plasma_trans = plasmanotrans
261 plasma_trans = plasmatrans
265 ldwork =
max( 1, ncols )
269 IF( ncols.GT.0 )
THEN
270 CALL dlarnv( 2, iseed, ncols*nrhs,
272 CALL dscal( ncols*nrhs,
273 $ one / dble( ncols ), work,
276 CALL dgemm(
trans,
'No transpose', nrows,
277 $ nrhs, ncols, one, copya, lda,
278 $ work, ldwork, zero, b, ldb )
279 CALL dlacpy(
'Full', nrows, nrhs, b, ldb,
284 IF( m.GT.0 .AND. n.GT.0 )
THEN
285 CALL dlacpy(
'Full', m, n, copya, lda,
287 CALL dlacpy(
'Full', nrows, nrhs,
288 $ copyb, ldb, b, ldb )
294 $ a, lda, ht, b, ldb,
298 $ CALL
alaerh( path,
'DGELS ', info, 0,
299 $
trans, m, n, nrhs, -1, nb,
300 $
itype, nfail, nerrs,
305 ldwork =
max( 1, nrows )
306 IF( nrows.GT.0 .AND. nrhs.GT.0 )
307 $ CALL dlacpy(
'Full', nrows, nrhs,
308 $ copyb, ldb, c, ldb )
310 $ lda, b, ldb, c, ldb, work,
313 IF( ( itran.EQ.1 .AND. m.GE.n ) .OR.
314 $ ( itran.EQ.2 .AND. m.LT.n ) )
THEN
319 $ nrhs, copya, lda, b, ldb,
320 $ copyb, ldb, c, work,
327 $ nrhs, copya, lda, b, ldb,
335 IF( result( k ).GE.thresh )
THEN
336 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
337 $ CALL
alahd( nout, path )
338 WRITE( nout, fmt = 9999 )
trans, m,
339 $ n, nrhs, nb,
itype, k,
349 CALL plasma_dealloc_handle( ht, info )
361 CALL
alasvm( path, nout, nfail, nrun, nerrs )
363 9999
format(
' TRANS=''', a1,
''', M=', i5,
', N=', i5,
', NRHS=', i4,
364 $
', NB=', i4,
', type', i2,
', test(', i2,
')=', g12.5 )
365 9998
format(
' M=', i5,
', N=', i5,
', NRHS=', i4,
', NB=', i4,
366 $
', type', i2,
', test(', i2,
')=', g12.5 )