1 SUBROUTINE zdrvge( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX,
2 $ a, afac, asav, b, bsav, x, xact, s, work,
13 INTEGER nmax, nn, nout, nrhs
14 DOUBLE PRECISION thresh
18 INTEGER iwork( * ), nval( * )
19 DOUBLE PRECISION rwork( * ), s( * )
20 COMPLEX*16 a( * ), afac( * ), asav( * ), b( * ),
21 $ bsav( * ), work( * ), x( * ), xact( * )
88 DOUBLE PRECISION one, zero
89 parameter( one = 1.0d+0, zero = 0.0d+0 )
91 parameter( ntypes = 11 )
93 parameter( ntests = 7 )
95 parameter( ntran = 1 )
98 LOGICAL equil, nofact, prefac, trfcon, zerot
99 CHARACTER dist, equed, fact,
trans, type, xtype
101 INTEGER hl( 2 ), hpiv( 2 ), ib, plasma_trans
102 INTEGER i, iequed, ifact, imat, in, info, ioff, itran,
103 $ izero, k, k1, kl, ku, lda, lwork, mode, n, nb,
104 $ nbmin, nerrs, nfact, nfail, nimat, nrun, nt
105 DOUBLE PRECISION ainvnm, amax, anorm, anormi, anormo, cndnum,
106 $ colcnd, rcond, rcondc, rcondi, rcondo, roldc,
107 $ roldi, roldo, rowcnd, rpvgrw
110 CHARACTER equeds( 4 ), facts( 3 ), transs( ntran )
111 INTEGER iseed( 4 ), iseedy( 4 ), plasma_transs( ntran)
112 DOUBLE PRECISION rdum( 1 ), result( ntests )
116 DOUBLE PRECISION dget06, dlamch, zlange, zlantr
117 EXTERNAL lsame,
dget06, dlamch, zlange, zlantr
126 INTRINSIC abs, dcmplx,
max
134 common / infoc / infot, nunit, ok, lerr
135 common / srnamc / srnamt
138 DATA iseedy / 1988, 1989, 1990, 1991 /
141 DATA plasma_transs / plasmanotrans /
142 DATA facts /
'F',
'N',
'E' /
143 DATA equeds /
'N',
'R',
'C',
'B' /
149 path( 1: 1 ) =
'Zomplex precision'
157 iseed( i ) = iseedy( i )
163 $ CALL
zerrvx( path, nout )
174 CALL
plasma_set( plasma_inner_block_size, ib, info )
192 DO 80 imat = 1, nimat
196 IF( .NOT.dotype( imat ) )
201 zerot = imat.GE.5 .AND. imat.LE.7
202 IF( zerot .AND. n.LT.imat-4 )
208 CALL
zlatb4( path, imat, n, n, type, kl, ku, anorm, mode,
210 rcondc = one / cndnum
213 CALL
zlatms( n, n, dist, iseed, type, rwork, mode, cndnum,
214 $ anorm, kl, ku,
'No packing', a, lda, work,
220 CALL
alaerh( path,
'ZLATMS', info, 0,
' ', n, n, -1, -1,
221 $ -1, imat, nfail, nerrs, nout )
231 ELSE IF( imat.EQ.6 )
THEN
236 ioff = ( izero-1 )*lda
242 CALL
zlaset(
'Full', n, n-izero+1, dcmplx( zero ),
243 $ dcmplx( zero ), a( ioff+1 ), lda )
251 CALL zlacpy(
'Full', n, n, a, lda, asav, lda )
254 equed = equeds( iequed )
255 IF( iequed.EQ.1 )
THEN
261 DO 60 ifact = 1, nfact
262 fact = facts( ifact )
263 prefac = lsame( fact,
'F' )
264 nofact = lsame( fact,
'N' )
265 equil = lsame( fact,
'E' )
273 ELSE IF( .NOT.nofact )
THEN
280 CALL zlacpy(
'Full', n, n, asav, lda, afac, lda )
281 IF( equil .OR. iequed.GT.1 )
THEN
286 CALL
zgeequ( n, n, afac, lda, s, s( n+1 ),
287 $ rowcnd, colcnd, amax, info )
288 IF( info.EQ.0 .AND. n.GT.0 )
THEN
289 IF( lsame( equed,
'R' ) )
THEN
292 ELSE IF( lsame( equed,
'C' ) )
THEN
295 ELSE IF( lsame( equed,
'B' ) )
THEN
302 CALL
zlaqge( n, n, afac, lda, s, s( n+1 ),
303 $ rowcnd, colcnd, amax, equed )
317 anormo = zlange(
'1', n, n, afac, lda, rwork )
318 anormi = zlange(
'I', n, n, afac, lda, rwork )
329 DO 50 itran = 1, ntran
333 trans = transs( itran )
334 plasma_trans = plasma_transs( itran )
335 IF( itran.EQ.1 )
THEN
343 CALL zlacpy(
'Full', n, n, asav, lda, a, lda )
349 $ ku, nrhs, a, lda, xact, lda, b, lda,
352 CALL zlacpy(
'Full', n, nrhs, b, lda, bsav, lda )
354 IF( nofact .AND. itran.EQ.1 )
THEN
361 CALL zlacpy(
'Full', n, n, a, lda, afac, lda )
362 CALL zlacpy(
'Full', n, nrhs, b, lda, x, lda )
368 $ iwork, x, lda, info )
373 $ CALL
alaerh( path,
'ZGESV ', info, izero,
374 $
' ', n, n, -1, -1, nrhs, imat,
375 $ nfail, nerrs, nout )
377 IF( izero.EQ.0 )
THEN
381 CALL zlacpy(
'Full', n, nrhs, b, lda, work,
383 CALL
zget02(
'No transpose', n, n, nrhs, a,
384 $ lda, x, lda, work, lda, rwork,
389 CALL
zget04( n, nrhs, x, lda, xact, lda,
390 $ rcondc, result( 2 ) )
398 IF( result( k ).GE.thresh )
THEN
399 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
400 $ CALL
aladhd( nout, path )
401 WRITE( nout, fmt = 9999 )
'ZGESV ', n,
402 $ imat, k, result( k )
422 CALL
alasvm( path, nout, nfail, nrun, nerrs )
424 9999
format( 1x, a,
', N =', i5,
', type ', i2,
', test(', i2,
') =',
426 9998
format( 1x, a,
', FACT=''', a1,
''', TRANS=''', a1,
''', N=', i5,
427 $
', type ', i2,
', test(', i1,
')=', g12.5 )
428 9997
format( 1x, a,
', FACT=''', a1,
''', TRANS=''', a1,
''', N=', i5,
429 $
', EQUED=''', a1,
''', type ', i2,
', test(', i1,
')=',