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