308 INTEGER info, lda, m, n
312 DOUBLE PRECISION a( lda, * )
362 parameter( one = 1.0d+0 )
365 INTEGER i, iinfo, j, jb, nb
384 ELSE IF( n.LT.0 )
THEN 386 ELSE IF( lda.LT.
max( 1, m ) )
THEN 390 CALL xerbla(
'DGETRF', -info )
396 IF( m.EQ.0 .OR. n.EQ.0 )
401 nb =
ilaenv( 1,
'DGETRF',
' ', m, n, -1, -1 )
402 IF( nb.LE.1 .OR. nb.GE.
min( m, n ) )
THEN 406 CALL dgetf2( m, n, a, lda, ipiv, info )
411 DO 20 j = 1,
min( m, n ), nb
412 jb =
min(
min( m, n )-j+1, nb )
417 CALL dgetf2( m-j+1, jb, a( j, j ), lda, ipiv( j ), iinfo )
421 IF( info.EQ.0 .AND. iinfo.GT.0 )
422 $ info = iinfo + j - 1
423 DO 10 i = j,
min( m, j+jb-1 )
424 ipiv( i ) = j - 1 + ipiv( i )
429 CALL dlaswp( j-1, a, lda, j, j+jb-1, ipiv, 1 )
435 CALL dlaswp( n-j-jb+1, a( 1, j+jb ), lda, j, j+jb-1,
440 CALL dtrsm(
'Left',
'Lower',
'No transpose',
'Unit', jb,
441 $ n-j-jb+1, one, a( j, j ), lda, a( j, j+jb ),
447 CALL dgemm(
'No transpose',
'No transpose', m-j-jb+1,
448 $ n-j-jb+1, jb, -one, a( j+jb, j ), lda,
449 $ a( j, j+jb ), lda, one, a( j+jb, j+jb ),
#define max(a, b)
Definition: cascade.c:32
#define min(a, b)
Definition: cascade.c:31
subroutine dgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
Definition: dgesv.f:2170
integer function ilaenv(ISPEC, NAME, OPTS, N1, N2, N3, N4)
Definition: dgesv.f:880
subroutine dtrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
Definition: dgesv.f:1791
subroutine dlaswp(N, A, LDA, K1, K2, IPIV, INCX)
Definition: dgesv.f:611
subroutine dgetf2(M, N, A, LDA, IPIV, INFO)
Definition: dgesv.f:166