SUBROUTINE DCHDC( A, LDA, N, WORK, IPIVOT, JOB, INFO) INTEGER LDA, N, JOB, INFO INTEGER IPIVOT(*) DOUBLE PRECISION A(LDA,*), WORK(*) SUBROUTINE DCHDC_64( A, LDA, N, WORK, IPIVOT, JOB, INFO) INTEGER*8 LDA, N, JOB, INFO INTEGER*8 IPIVOT(*) DOUBLE PRECISION A(LDA,*), WORK(*)
void dchdc(double *a, int lda, int n, int *ipivot, int job, int *info);
void dchdc_64(double *a, long lda, long n, long *ipivot, long job, long *info);
IPIVOT(k) > 0 A(k,k) is an initial element.
IPIVOT(k) = 0 A(k,k) is a free element.
IPIVOT(k) < 0 A(k,k) is a final element.
Before the decomposition is computed, symmetric row and column interchanges are used to move initial elements to the beginning of A and final elements to the end of A. During the computation, symmetric row and column interchanges are used to move the largest remaining free diagonal element into the pivot position. On exit, IPIVOT(k) contains the index of the diagonal element of A that was moved into the kth position.
not 0 with pivoting