170
171
172
173
174
175 IMPLICIT NONE
176
177
178 LOGICAL TSTERR
179 INTEGER NN, NNB, NNS, NMAX, NOUT
180 REAL THRESH
181
182
183 LOGICAL DOTYPE( * )
184 INTEGER IWORK( * ), NBVAL( * ), NSVAL( * ), NVAL( * )
185 REAL RWORK( * )
186 COMPLEX A( * ), AFAC( * ), AINV( * ), B( * ),
187 $ WORK( * ), X( * ), XACT( * )
188
189
190
191
192
193 REAL ZERO
194 parameter( zero = 0.0d+0 )
195 COMPLEX CZERO
196 parameter( czero = 0.0e+0 )
197 INTEGER NTYPES
198 parameter( ntypes = 10 )
199 INTEGER NTESTS
200 parameter( ntests = 9 )
201
202
203 LOGICAL ZEROT
204 CHARACTER DIST, TYPE, UPLO, XTYPE
205 CHARACTER*3 PATH, MATPATH
206 INTEGER I, I1, I2, IMAT, IN, INB, INFO, IOFF, IRHS,
207 $ IUPLO, IZERO, J, K, KL, KU, LDA, LWORK, MODE,
208 $ N, NB, NERRS, NFAIL, NIMAT, NRHS, NRUN, NT
209 REAL ANORM, CNDNUM
210
211
212 CHARACTER UPLOS( 2 )
213 INTEGER ISEED( 4 ), ISEEDY( 4 )
214 REAL RESULT( NTESTS )
215
216
220
221
222 INTRINSIC max, min
223
224
225 LOGICAL LERR, OK
226 CHARACTER*32 SRNAMT
227 INTEGER INFOT, NUNIT
228
229
230 COMMON / infoc / infot, nunit, ok, lerr
231 COMMON / srnamc / srnamt
232
233
234 DATA iseedy / 1988, 1989, 1990, 1991 /
235 DATA uplos / 'U', 'L' /
236
237
238
239
240
241
242
243 path( 1: 1 ) = 'Complex precision'
244 path( 2: 3 ) = 'SA'
245
246
247
248 matpath( 1: 1 ) = 'Complex precision'
249 matpath( 2: 3 ) = 'SY'
250 nrun = 0
251 nfail = 0
252 nerrs = 0
253 DO 10 i = 1, 4
254 iseed( i ) = iseedy( i )
255 10 CONTINUE
256
257
258
259 IF( tsterr )
260 $
CALL cerrsy( path, nout )
261 infot = 0
262
263
264
265
267
268
269
270 DO 180 in = 1, nn
271 n = nval( in )
272 IF( n .GT. nmax ) THEN
273 nfail = nfail + 1
274 WRITE(nout, 9995) 'M ', n, nmax
275 GO TO 180
276 END IF
277 lda = max( n, 1 )
278 xtype = 'N'
279 nimat = ntypes
280 IF( n.LE.0 )
281 $ nimat = 1
282
283 izero = 0
284
285
286
287 DO 170 imat = 1, nimat
288
289
290
291 IF( .NOT.dotype( imat ) )
292 $ GO TO 170
293
294
295
296 zerot = imat.GE.3 .AND. imat.LE.6
297 IF( zerot .AND. n.LT.imat-2 )
298 $ GO TO 170
299
300
301
302 DO 160 iuplo = 1, 2
303 uplo = uplos( iuplo )
304
305
306
307
308
309
310
311 CALL clatb4( matpath, imat, n, n,
TYPE, KL, KU,
312 $ ANORM, MODE, CNDNUM, DIST )
313
314
315
316 srnamt = 'CLATMS'
317 CALL clatms( n, n, dist, iseed,
TYPE, RWORK, MODE,
318 $ CNDNUM, ANORM, KL, KU, UPLO, A, LDA, WORK,
319 $ INFO )
320
321
322
323 IF( info.NE.0 ) THEN
324 CALL alaerh( path,
'CLATMS', info, 0, uplo, n, n, -1,
325 $ -1, -1, imat, nfail, nerrs, nout )
326
327
328
329 GO TO 160
330 END IF
331
332
333
334
335
336 IF( zerot ) THEN
337 IF( imat.EQ.3 ) THEN
338 izero = 1
339 ELSE IF( imat.EQ.4 ) THEN
340 izero = n
341 ELSE
342 izero = n / 2 + 1
343 END IF
344
345 IF( imat.LT.6 ) THEN
346
347
348
349 IF( iuplo.EQ.1 ) THEN
350 ioff = ( izero-1 )*lda
351 DO 20 i = 1, izero - 1
352 a( ioff+i ) = czero
353 20 CONTINUE
354 ioff = ioff + izero
355 DO 30 i = izero, n
356 a( ioff ) = czero
357 ioff = ioff + lda
358 30 CONTINUE
359 ELSE
360 ioff = izero
361 DO 40 i = 1, izero - 1
362 a( ioff ) = czero
363 ioff = ioff + lda
364 40 CONTINUE
365 ioff = ioff - izero
366 DO 50 i = izero, n
367 a( ioff+i ) = czero
368 50 CONTINUE
369 END IF
370 ELSE
371 IF( iuplo.EQ.1 ) THEN
372
373
374
375 ioff = 0
376 DO 70 j = 1, n
377 i2 = min( j, izero )
378 DO 60 i = 1, i2
379 a( ioff+i ) = czero
380 60 CONTINUE
381 ioff = ioff + lda
382 70 CONTINUE
383 izero = 1
384 ELSE
385
386
387
388 ioff = 0
389 DO 90 j = 1, n
390 i1 = max( j, izero )
391 DO 80 i = i1, n
392 a( ioff+i ) = czero
393 80 CONTINUE
394 ioff = ioff + lda
395 90 CONTINUE
396 END IF
397 END IF
398 ELSE
399 izero = 0
400 END IF
401
402
403
404
405
406 DO 150 inb = 1, nnb
407
408
409
410
411 nb = nbval( inb )
413
414
415
416
417
418 CALL clacpy( uplo, n, n, a, lda, afac, lda )
419
420
421
422
423
424
425 srnamt = 'CSYTRF_AA'
426 lwork = max( 1, n*nb + n )
427 CALL csytrf_aa( uplo, n, afac, lda, iwork, ainv,
428 $ lwork, info )
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447 k = 0
448
449
450
451
452 IF( info.NE.k ) THEN
453 CALL alaerh( path,
'CSYTRF_AA', info, k, uplo,
454 $ n, n, -1, -1, nb, imat, nfail, nerrs,
455 $ nout )
456 END IF
457
458
459
460
461 CALL csyt01_aa( uplo, n, a, lda, afac, lda, iwork,
462 $ ainv, lda, rwork, result( 1 ) )
463 nt = 1
464
465
466
467
468
469 DO 110 k = 1, nt
470 IF( result( k ).GE.thresh ) THEN
471 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
472 $
CALL alahd( nout, path )
473 WRITE( nout, fmt = 9999 )uplo, n, nb, imat, k,
474 $ result( k )
475 nfail = nfail + 1
476 END IF
477 110 CONTINUE
478 nrun = nrun + nt
479
480
481
482 IF( info.NE.0 ) THEN
483 GO TO 140
484 END IF
485
486
487
488 DO 130 irhs = 1, nns
489 nrhs = nsval( irhs )
490
491
492
493
494
495
496
497 srnamt = 'CLARHS'
498 CALL clarhs( matpath, xtype, uplo,
' ', n, n,
499 $ kl, ku, nrhs, a, lda, xact, lda,
500 $ b, lda, iseed, info )
501 CALL clacpy(
'Full', n, nrhs, b, lda, x, lda )
502
503 srnamt = 'CSYTRS_AA'
504 lwork = max( 1, 3*n-2 )
505 CALL csytrs_aa( uplo, n, nrhs, afac, lda,
506 $ iwork, x, lda, work, lwork,
507 $ info )
508
509
510
511 IF( info.NE.0 ) THEN
512 IF( izero.EQ.0 ) THEN
513 CALL alaerh( path,
'CSYTRS_AA', info, 0,
514 $ uplo, n, n, -1, -1, nrhs, imat,
515 $ nfail, nerrs, nout )
516 END IF
517 ELSE
518 CALL clacpy(
'Full', n, nrhs, b, lda, work, lda
519 $ )
520
521
522
523 CALL csyt02( uplo, n, nrhs, a, lda, x, lda,
524 $ work, lda, rwork, result( 2 ) )
525
526
527
528
529
530 DO 120 k = 2, 2
531 IF( result( k ).GE.thresh ) THEN
532 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
533 $
CALL alahd( nout, path )
534 WRITE( nout, fmt = 9998 )uplo, n, nrhs,
535 $ imat, k, result( k )
536 nfail = nfail + 1
537 END IF
538 120 CONTINUE
539 END IF
540 nrun = nrun + 1
541
542
543
544 130 CONTINUE
545 140 CONTINUE
546 150 CONTINUE
547 160 CONTINUE
548 170 CONTINUE
549 180 CONTINUE
550
551
552
553 CALL alasum( path, nout, nfail, nrun, nerrs )
554
555 9999 FORMAT( ' UPLO = ''', a1, ''', N =', i5, ', NB =', i4, ', type ',
556 $ i2, ', test ', i2, ', ratio =', g12.5 )
557 9998 FORMAT( ' UPLO = ''', a1, ''', N =', i5, ', NRHS=', i3, ', type ',
558 $ i2, ', test(', i2, ') =', g12.5 )
559 9995 FORMAT( ' Invalid input value: ', a4, '=', i6, '; must be <=',
560 $ i6 )
561 RETURN
562
563
564
subroutine alasum(type, nout, nfail, nrun, nerrs)
ALASUM
subroutine clarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
CLARHS
subroutine xlaenv(ispec, nvalue)
XLAENV
subroutine alaerh(path, subnam, info, infoe, opts, m, n, kl, ku, n5, imat, nfail, nerrs, nout)
ALAERH
subroutine alahd(iounit, path)
ALAHD
subroutine cerrsy(path, nunit)
CERRSY
subroutine clatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
CLATB4
subroutine clatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
CLATMS
subroutine csyt01_aa(uplo, n, a, lda, afac, ldafac, ipiv, c, ldc, rwork, resid)
CSYT01
subroutine csyt02(uplo, n, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
CSYT02
subroutine csytrf_aa(uplo, n, a, lda, ipiv, work, lwork, info)
CSYTRF_AA
subroutine csytrs_aa(uplo, n, nrhs, a, lda, ipiv, b, ldb, work, lwork, info)
CSYTRS_AA
subroutine clacpy(uplo, m, n, a, lda, b, ldb)
CLACPY copies all or part of one two-dimensional array to another.