153
  154
  155
  156
  157
  158
  159      LOGICAL            TSTERR
  160      INTEGER            NMAX, NN, NOUT, NRHS
  161      REAL               THRESH
  162
  163
  164      LOGICAL            DOTYPE( * )
  165      INTEGER            IWORK( * ), NVAL( * )
  166      REAL               RWORK( * )
  167      COMPLEX            A( * ), AFAC( * ), AINV( * ), B( * ),
  168     $                   WORK( * ), X( * ), XACT( * )
  169
  170
  171
  172
  173
  174      REAL               ZERO
  175      parameter( zero = 0.0d+0 )
  176      COMPLEX            CZERO
  177      parameter( czero = 0.0e+0 )
  178      INTEGER            NTYPES, NTESTS
  179      parameter( ntypes = 10, ntests = 3 )
  180      INTEGER            NFACT
  181      parameter( nfact = 2 )
  182
  183
  184      LOGICAL            ZEROT
  185      CHARACTER          DIST, FACT, TYPE, UPLO, XTYPE
  186      CHARACTER*3        MATPATH, PATH
  187      INTEGER            I, I1, I2, IFACT, IMAT, IN, INFO, IOFF, IUPLO,
  188     $                   IZERO, J, K, KL, KU, LDA, LWORK, MODE, N,
  189     $                   NB, NBMIN, NERRS, NFAIL, NIMAT, NRUN, NT
  190      REAL               ANORM, CNDNUM
  191
  192
  193      CHARACTER          FACTS( NFACT ), UPLOS( 2 )
  194      INTEGER            ISEED( 4 ), ISEEDY( 4 )
  195      REAL   RESULT( NTESTS )
  196
  197
  198      REAL               DGET06, CLANSY
  200
  201
  205
  206
  207      LOGICAL            LERR, OK
  208      CHARACTER*32       SRNAMT
  209      INTEGER            INFOT, NUNIT
  210
  211
  212      COMMON             / infoc / infot, nunit, ok, lerr
  213      COMMON             / srnamc / srnamt
  214
  215
  216      INTRINSIC          max, min
  217
  218
  219      DATA               iseedy / 1988, 1989, 1990, 1991 /
  220      DATA               uplos / 'U', 'L' / , facts / 'F', 'N' /
  221
  222
  223
  224
  225
  226
  227
  228      path( 1: 1 ) = 'Complex precision'
  229      path( 2: 3 ) = 'SA'
  230
  231
  232
  233      matpath( 1: 1 ) = 'Complex precision'
  234      matpath( 2: 3 ) = 'SY'
  235
  236      nrun = 0
  237      nfail = 0
  238      nerrs = 0
  239      DO 10 i = 1, 4
  240         iseed( i ) = iseedy( i )
  241   10 CONTINUE
  242
  243
  244
  245      IF( tsterr )
  246     $   
CALL cerrvx( path, nout )
 
  247      infot = 0
  248
  249
  250
  251      nb = 1
  252      nbmin = 2
  255
  256
  257
  258      DO 180 in = 1, nn
  259         n = nval( in )
  260         lwork = max( 3*n-2, n*(1+nb) )
  261         lwork = max( lwork, 1 )
  262         lda = max( n, 1 )
  263         xtype = 'N'
  264         nimat = ntypes
  265         IF( n.LE.0 )
  266     $      nimat = 1
  267
  268         DO 170 imat = 1, nimat
  269
  270
  271
  272            IF( .NOT.dotype( imat ) )
  273     $         GO TO 170
  274
  275
  276
  277            zerot = imat.GE.3 .AND. imat.LE.6
  278            IF( zerot .AND. n.LT.imat-2 )
  279     $         GO TO 170
  280
  281
  282
  283            DO 160 iuplo = 1, 2
  284               uplo = uplos( iuplo )
  285
  286
  287
  288
  289               CALL clatb4( matpath, imat, n, n, 
TYPE, KL, KU, ANORM,
 
  290     $                      MODE, CNDNUM, DIST )
  291
  292               srnamt = 'CLATMS'
  293               CALL clatms( n, n, dist, iseed, 
TYPE, RWORK, MODE,
 
  294     $                      CNDNUM, ANORM, KL, KU, UPLO, A, LDA, WORK,
  295     $                      INFO )
  296
  297
  298
  299               IF( info.NE.0 ) THEN
  300                  CALL alaerh( path, 
'CLATMS', info, 0, uplo, n, n, -1,
 
  301     $                         -1, -1, imat, nfail, nerrs, nout )
  302                  GO TO 160
  303               END IF
  304
  305
  306
  307
  308               IF( zerot ) THEN
  309                  IF( imat.EQ.3 ) THEN
  310                     izero = 1
  311                  ELSE IF( imat.EQ.4 ) THEN
  312                     izero = n
  313                  ELSE
  314                     izero = n / 2 + 1
  315                  END IF
  316
  317                  IF( imat.LT.6 ) THEN
  318
  319
  320
  321                     IF( iuplo.EQ.1 ) THEN
  322                        ioff = ( izero-1 )*lda
  323                        DO 20 i = 1, izero - 1
  324                           a( ioff+i ) = czero
  325   20                   CONTINUE
  326                        ioff = ioff + izero
  327                        DO 30 i = izero, n
  328                           a( ioff ) = czero
  329                           ioff = ioff + lda
  330   30                   CONTINUE
  331                     ELSE
  332                        ioff = izero
  333                        DO 40 i = 1, izero - 1
  334                           a( ioff ) = czero
  335                           ioff = ioff + lda
  336   40                   CONTINUE
  337                        ioff = ioff - izero
  338                        DO 50 i = izero, n
  339                           a( ioff+i ) = czero
  340   50                   CONTINUE
  341                     END IF
  342                  ELSE
  343                     ioff = 0
  344                     IF( iuplo.EQ.1 ) THEN
  345
  346
  347
  348                        DO 70 j = 1, n
  349                           i2 = min( j, izero )
  350                           DO 60 i = 1, i2
  351                              a( ioff+i ) = czero
  352   60                      CONTINUE
  353                           ioff = ioff + lda
  354   70                   CONTINUE
  355                        izero = 1
  356                     ELSE
  357
  358
  359
  360                        DO 90 j = 1, n
  361                           i1 = max( j, izero )
  362                           DO 80 i = i1, n
  363                              a( ioff+i ) = czero
  364   80                      CONTINUE
  365                           ioff = ioff + lda
  366   90                   CONTINUE
  367                     END IF
  368                  END IF
  369               ELSE
  370                  izero = 0
  371               END IF
  372
  373               DO 150 ifact = 1, nfact
  374
  375
  376
  377                  fact = facts( ifact )
  378
  379
  380
  381                  srnamt = 'CLARHS'
  382                  CALL clarhs( matpath, xtype, uplo, 
' ', n, n, kl, ku,
 
  383     $                         nrhs, a, lda, xact, lda, b, lda, iseed,
  384     $                         info )
  385                  xtype = 'C'
  386
  387
  388
  389                  IF( ifact.EQ.2 ) THEN
  390                     CALL clacpy( uplo, n, n, a, lda, afac, lda )
 
  391                     CALL clacpy( 
'Full', n, nrhs, b, lda, x, lda )
 
  392
  393
  394
  395                     srnamt = 'CSYSV_AA'
  396                     CALL csysv_aa( uplo, n, nrhs, afac, lda, iwork,
 
  397     $                                 x, lda, work, lwork, info )
  398
  399
  400
  401
  402                     IF( izero.GT.0 ) THEN
  403                        j = 1
  404                        k = izero
  405  100                   CONTINUE
  406                        IF( j.EQ.k ) THEN
  407                           k = iwork( j )
  408                        ELSE IF( iwork( j ).EQ.k ) THEN
  409                           k = j
  410                        END IF
  411                        IF( j.LT.k ) THEN
  412                           j = j + 1
  413                           GO TO 100
  414                        END IF
  415                     ELSE
  416                        k = 0
  417                     END IF
  418
  419
  420
  421                     IF( info.NE.k ) THEN
  422                        CALL alaerh( path, 
'CSYSV_AA ', info, k,
 
  423     $                               uplo, n, n, -1, -1, nrhs,
  424     $                               imat, nfail, nerrs, nout )
  425                        GO TO 120
  426                     ELSE IF( info.NE.0 ) THEN
  427                        GO TO 120
  428                     END IF
  429
  430
  431
  432
  433                     CALL csyt01_aa( uplo, n, a, lda, afac, lda,
 
  434     $                               iwork, ainv, lda, rwork,
  435     $                               result( 1 ) )
  436
  437
  438
  439                     CALL clacpy( 
'Full', n, nrhs, b, lda, work, lda )
 
  440                     CALL csyt02( uplo, n, nrhs, a, lda, x, lda, work,
 
  441     $                            lda, rwork, result( 2 ) )
  442                     nt = 2
  443
  444
  445
  446
  447                     DO 110 k = 1, nt
  448                        IF( result( k ).GE.thresh ) THEN
  449                           IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
  450     $                        
CALL aladhd( nout, path )
 
  451                           WRITE( nout, fmt = 9999 )'CSYSV_AA ',
  452     $                        uplo, n, imat, k, result( k )
  453                           nfail = nfail + 1
  454                        END IF
  455  110                CONTINUE
  456                     nrun = nrun + nt
  457  120                CONTINUE
  458                  END IF
  459
  460  150          CONTINUE
  461
  462  160       CONTINUE
  463  170    CONTINUE
  464  180 CONTINUE
  465
  466
  467
  468      CALL alasvm( path, nout, nfail, nrun, nerrs )
 
  469
  470 9999 FORMAT( 1x, a, ', UPLO=''', a1, ''', N =', i5, ', type ', i2,
  471     $      ', test ', i2, ', ratio =', g12.5 )
  472      RETURN
  473
  474
  475
subroutine alasvm(type, nout, nfail, nrun, nerrs)
ALASVM
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 aladhd(iounit, path)
ALADHD
subroutine alaerh(path, subnam, info, infoe, opts, m, n, kl, ku, n5, imat, nfail, nerrs, nout)
ALAERH
subroutine cerrvx(path, nunit)
CERRVX
subroutine cget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
CGET04
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
double precision function dget06(rcond, rcondc)
DGET06
subroutine csysv_aa(uplo, n, nrhs, a, lda, ipiv, b, ldb, work, lwork, info)
CSYSV_AA computes the solution to system of linear equations A * X = B for SY matrices
subroutine csytrf_aa(uplo, n, a, lda, ipiv, work, lwork, info)
CSYTRF_AA
subroutine clacpy(uplo, m, n, a, lda, b, ldb)
CLACPY copies all or part of one two-dimensional array to another.
real function clansy(norm, uplo, n, a, lda, work)
CLANSY returns the value of the 1-norm, or the Frobenius norm, or the infinity norm,...
subroutine claset(uplo, m, n, alpha, beta, a, lda)
CLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.