111      SUBROUTINE sgetri( N, A, LDA, IPIV, WORK, LWORK, INFO )
 
  118      INTEGER            INFO, LDA, LWORK, N
 
  122      REAL               A( LDA, * ), WORK( * )
 
  129      parameter( zero = 0.0e+0, one = 1.0e+0 )
 
  133      INTEGER            I, IWS, J, JB, JJ, JP, LDWORK, LWKOPT, NB,
 
  140      EXTERNAL           sroundup_lwork
 
  154      nb = ilaenv( 1, 
'SGETRI', 
' ', n, -1, -1, -1 )
 
  155      lwkopt = max( 1, n*nb )
 
  156      work( 1 ) = sroundup_lwork( lwkopt )
 
  158      lquery = ( lwork.EQ.-1 )
 
  161      ELSE IF( lda.LT.max( 1, n ) ) 
THEN 
  163      ELSE IF( lwork.LT.max( 1, n ) .AND. .NOT.lquery ) 
THEN 
  167         CALL xerbla( 
'SGETRI', -info )
 
  169      ELSE IF( lquery ) 
THEN 
  181      CALL strtri( 
'Upper', 
'Non-unit', n, a, lda, info )
 
  187      IF( nb.GT.1 .AND. nb.LT.n ) 
THEN 
  188         iws = max( ldwork*nb, 1 )
 
  189         IF( lwork.LT.iws ) 
THEN 
  191            nbmin = max( 2, ilaenv( 2, 
'SGETRI', 
' ', n, -1, -1,
 
  200      IF( nb.LT.nbmin .OR. nb.GE.n ) 
THEN 
  209               work( i ) = a( i, j )
 
  216     $         
CALL sgemv( 
'No transpose', n, n-j, -one, a( 1, j+1 ),
 
  217     $                     lda, work( j+1 ), 1, one, a( 1, j ), 1 )
 
  223         nn = ( ( n-1 ) / nb )*nb + 1
 
  225            jb = min( nb, n-j+1 )
 
  230            DO 40 jj = j, j + jb - 1
 
  232                  work( i+( jj-j )*ldwork ) = a( i, jj )
 
  240     $         
CALL sgemm( 
'No transpose', 
'No transpose', n, jb,
 
  241     $                     n-j-jb+1, -one, a( 1, j+jb ), lda,
 
  242     $                     work( j+jb ), ldwork, one, a( 1, j ), lda )
 
  243            CALL strsm( 
'Right', 
'Lower', 
'No transpose', 
'Unit', n,
 
  245     $                  one, work( j ), ldwork, a( 1, j ), lda )
 
  251      DO 60 j = n - 1, 1, -1
 
  254     $      
CALL sswap( n, a( 1, j ), 1, a( 1, jp ), 1 )
 
  257      work( 1 ) = sroundup_lwork( iws )
 
 
subroutine sgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
SGEMM
 
subroutine sgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
SGEMV
 
subroutine sgetri(n, a, lda, ipiv, work, lwork, info)
SGETRI
 
subroutine strsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
STRSM