/*$Id: dgefa.c,v 1.18 2000/04/09 04:36:19 bsmith Exp bsmith $*/
/*
This routine was converted by f2c from Linpack source
linpack. this version dated 08/14/78
cleve moler, university of new mexico, argonne national lab.
Does an LU factorization with partial pivoting of a dense
n by n matrix.
Used by the sparse factorization routines in
src/mat/impls/baij/seq and src/mat/impls/bdiag/seq
See also src/inline/ilu.h
*/
#include "petsc.h"
#undef __FUNC__
#define __FUNC__ /**/"LINPACKdgefa"
int LINPACKdgefa(MatScalar *a,int n,int *ipvt)
{
int i__2,i__3,kp1,nm1,j,k,l,ll,kn,knp1,jn1;
MatScalar t,*ax,*ay,*aa;
MatReal tmp,max;
/* gaussian elimination with partial pivoting */
PetscFunctionBegin;
/* Parameter adjustments */
--ipvt;
a -= n + 1;
/* Function Body */
nm1 = n - 1;
for (k = 1; k <= nm1; ++k) {
kp1 = k + 1;
kn = k*n;
knp1 = k*n + k;
/* find l = pivot index */
i__2 = n - k + 1;
aa = &a[knp1];
max = PetscAbsScalar(aa[0]);
l = 1;
for (ll=1; ll max) { max = tmp; l = ll+1;}
}
l += k - 1;
ipvt[k] = l;
if (a[l + kn] == 0.) {
SETERRQ(k,0,"Zero pivot");
}
/* interchange if necessary */
if (l != k) {
t = a[l + kn];
a[l + kn] = a[knp1];
a[knp1] = t;
}
/* compute multipliers */
t = -1. / a[knp1];
i__2 = n - k;
aa = &a[1 + knp1];
for (ll=0; ll