/* 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. */ #include "petsc.h" int Linpack_DGEFA(Scalar *a, int n, int *ipvt) { int a_offset, i__1, i__2, i__3, kp1, nm1, j, k, l,ll; Scalar t,*aa,*ax,*ay; double tmp,max; /* gaussian elimination with partial pivoting */ /* Parameter adjustments */ --ipvt; a_offset = n + 1; a -= a_offset; /* Function Body */ nm1 = n - 1; if (nm1 < 1) { goto L70; } i__1 = nm1; for (k = 1; k <= i__1; ++k) { kp1 = k + 1; /* find l = pivot index */ i__2 = n - k + 1; /* l = idamax_(&i__2, &a[k + k * n], &c__1) + k - 1; */ aa = &a[k + k * n]; max = PetscAbsScalar(aa[0]); l = 1; for ( ll=1; ll max) { max = tmp; l = ll+1;} } l += k - 1; ipvt[k] = l; /* zero pivot implies this column already triangularized */ if (a[l + k * n] == 0.) { SETERRQ(k,"Linpack_DGEFA:Zero pivot"); } /* interchange if necessary */ if (l != k) { t = a[l + k * n]; a[l + k * n] = a[k + k * n]; a[k + k * n] = t; } /* compute multipliers */ t = -1. / a[k + k * n]; i__2 = n - k; /* dscal_(&i__2, &t, &a[k + 1 + k * n], &c__1); */ aa = &a[k + 1 + k * n]; for ( ll=0; ll