117      SUBROUTINE dsytri2x( UPLO, N, A, LDA, IPIV, WORK, NB, INFO )
 
  125      INTEGER            INFO, LDA, N, NB
 
  129      DOUBLE PRECISION   A( LDA, * ), WORK( N+NB+1,* )
 
  135      DOUBLE PRECISION   ONE, ZERO
 
  136      parameter( one = 1.0d+0, zero = 0.0d+0 )
 
  140      INTEGER            I, IINFO, IP, K, CUT, NNB
 
  144      DOUBLE PRECISION   AK, AKKP1, AKP1, D, T
 
  145      DOUBLE PRECISION   U01_I_J, U01_IP1_J
 
  146      DOUBLE PRECISION   U11_I_J, U11_IP1_J
 
  164      upper = lsame( uplo, 
'U' )
 
  165      IF( .NOT.upper .AND. .NOT.lsame( uplo, 
'L' ) ) 
THEN 
  167      ELSE IF( n.LT.0 ) 
THEN 
  169      ELSE IF( lda.LT.max( 1, n ) ) 
THEN 
  177         CALL xerbla( 
'DSYTRI2X', -info )
 
  186      CALL dsyconv( uplo, 
'C', n, a, lda, ipiv, work, iinfo )
 
  195            IF( ipiv( info ).GT.0 .AND. a( info, info ).EQ.zero )
 
  203            IF( ipiv( info ).GT.0 .AND. a( info, info ).EQ.zero )
 
  223        CALL dtrtri( uplo, 
'U', n, a, lda, info )
 
  228        DO WHILE ( k .LE. n )
 
  229         IF( ipiv( k ).GT.0 ) 
THEN 
  231             work(k,invd) = one /  a( k, k )
 
  238             akp1 = a( k+1, k+1 ) / t
 
  239             akkp1 = work(k+1,1)  / t
 
  240             d = t*( ak*akp1-one )
 
  241             work(k,invd) = akp1 / d
 
  242             work(k+1,invd+1) = ak / d
 
  243             work(k,invd+1) = -akkp1 / d
 
  244             work(k+1,invd) = -akkp1 / d
 
  254        DO WHILE (cut .GT. 0)
 
  256           IF (cut .LE. nnb) 
THEN 
  262                  IF (ipiv(i) .LT. 0) count=count+1
 
  265              IF (mod(count,2) .EQ. 1) nnb=nnb+1
 
  286                work(u11+i,j)=a(cut+i,cut+j)
 
  293           DO WHILE (i .LE. cut)
 
  294             IF (ipiv(i) > 0) 
THEN 
  296                    work(i,j)=work(i,invd)*work(i,j)
 
  302                   u01_ip1_j = work(i+1,j)
 
  303                   work(i,j)=work(i,invd)*u01_i_j+
 
  304     $                      work(i,invd+1)*u01_ip1_j
 
  305                   work(i+1,j)=work(i+1,invd)*u01_i_j+
 
  306     $                      work(i+1,invd+1)*u01_ip1_j
 
  315           DO WHILE (i .LE. nnb)
 
  316             IF (ipiv(cut+i) > 0) 
THEN 
  318                    work(u11+i,j)=work(cut+i,invd)*work(u11+i,j)
 
  323                   u11_i_j = work(u11+i,j)
 
  324                   u11_ip1_j = work(u11+i+1,j)
 
  325                work(u11+i,j)=work(cut+i,invd)*work(u11+i,j) +
 
  326     $                      work(cut+i,invd+1)*work(u11+i+1,j)
 
  327                work(u11+i+1,j)=work(cut+i+1,invd)*u11_i_j+
 
  328     $                      work(cut+i+1,invd+1)*u11_ip1_j
 
  336        CALL dtrmm(
'L',
'U',
'T',
'U',nnb, nnb,
 
  337     $             one,a(cut+1,cut+1),lda,work(u11+1,1),n+nb+1)
 
  341              a(cut+i,cut+j)=work(u11+i,j)
 
  347         CALL dgemm(
'T',
'N',nnb,nnb,cut,one,a(1,cut+1),lda,
 
  348     $              work,n+nb+1, zero, work(u11+1,1), n+nb+1)
 
  355              a(cut+i,cut+j)=a(cut+i,cut+j)+work(u11+i,j)
 
  361         CALL dtrmm(
'L',uplo,
'T',
'U',cut, nnb,
 
  362     $             one,a,lda,work,n+nb+1)
 
  380            DO WHILE ( i .LE. n )
 
  381               IF( ipiv(i) .GT. 0 ) 
THEN 
  383                 IF (i .LT. ip) 
CALL dsyswapr( uplo, n, a, lda, i ,
 
  385                 IF (i .GT. ip) 
CALL dsyswapr( uplo, n, a, lda, ip ,
 
  391     $                  
CALL dsyswapr( uplo, n, a, lda, i-1 ,ip )
 
  393     $                  
CALL dsyswapr( uplo, n, a, lda, ip ,i-1 )
 
  403         CALL dtrtri( uplo, 
'U', n, a, lda, info )
 
  408        DO WHILE ( k .GE. 1 )
 
  409         IF( ipiv( k ).GT.0 ) 
THEN 
  411             work(k,invd) = one /  a( k, k )
 
  417             ak = a( k-1, k-1 ) / t
 
  419             akkp1 = work(k-1,1) / t
 
  420             d = t*( ak*akp1-one )
 
  421             work(k-1,invd) = akp1 / d
 
  422             work(k,invd) = ak / d
 
  423             work(k,invd+1) = -akkp1 / d
 
  424             work(k-1,invd+1) = -akkp1 / d
 
  434        DO WHILE (cut .LT. n)
 
  436           IF (cut + nnb .GT. n) 
THEN 
  442                  IF (ipiv(i) .LT. 0) count=count+1
 
  445              IF (mod(count,2) .EQ. 1) nnb=nnb+1
 
  450              work(i,j)=a(cut+nnb+i,cut+j)
 
  460                work(u11+i,j)=a(cut+i,cut+j)
 
  468             IF (ipiv(cut+nnb+i) > 0) 
THEN 
  470                    work(i,j)=work(cut+nnb+i,invd)*work(i,j)
 
  476                   u01_ip1_j = work(i-1,j)
 
  477                   work(i,j)=work(cut+nnb+i,invd)*u01_i_j+
 
  478     $                        work(cut+nnb+i,invd+1)*u01_ip1_j
 
  479                   work(i-1,j)=work(cut+nnb+i-1,invd+1)*u01_i_j+
 
  480     $                        work(cut+nnb+i-1,invd)*u01_ip1_j
 
  490             IF (ipiv(cut+i) > 0) 
THEN 
  492                    work(u11+i,j)=work(cut+i,invd)*work(u11+i,j)
 
  497                   u11_i_j = work(u11+i,j)
 
  498                   u11_ip1_j = work(u11+i-1,j)
 
  499                work(u11+i,j)=work(cut+i,invd)*work(u11+i,j) +
 
  500     $                      work(cut+i,invd+1)*u11_ip1_j
 
  501                work(u11+i-1,j)=work(cut+i-1,invd+1)*u11_i_j+
 
  502     $                      work(cut+i-1,invd)*u11_ip1_j
 
  510        CALL dtrmm(
'L',uplo,
'T',
'U',nnb, nnb,
 
  511     $             one,a(cut+1,cut+1),lda,work(u11+1,1),n+nb+1)
 
  516              a(cut+i,cut+j)=work(u11+i,j)
 
  520        IF ( (cut+nnb) .LT. n ) 
THEN 
  524         CALL dgemm(
'T',
'N',nnb,nnb,n-nnb-cut,one,a(cut+nnb+1,cut+1)
 
  525     $             ,lda,work,n+nb+1, zero, work(u11+1,1), n+nb+1)
 
  532              a(cut+i,cut+j)=a(cut+i,cut+j)+work(u11+i,j)
 
  538         CALL dtrmm(
'L',uplo,
'T',
'U', n-nnb-cut, nnb,
 
  539     $             one,a(cut+nnb+1,cut+nnb+1),lda,work,n+nb+1)
 
  545              a(cut+nnb+i,cut+j)=work(i,j)
 
  555              a(cut+i,cut+j)=work(u11+i,j)
 
  568            DO WHILE ( i .GE. 1 )
 
  569               IF( ipiv(i) .GT. 0 ) 
THEN 
  571                 IF (i .LT. ip) 
CALL dsyswapr( uplo, n, a, lda, i ,
 
  573                 IF (i .GT. ip) 
CALL dsyswapr( uplo, n, a, lda, ip ,
 
  577                 IF ( i .LT. ip) 
CALL dsyswapr( uplo, n, a, lda, i ,
 
  579                 IF ( i .GT. ip) 
CALL dsyswapr( uplo, n, a, lda, ip,