#ifndef lint static char vcid[] = "$Id: dgefa4.c,v 1.1 1997/06/10 03:18:18 bsmith Exp bsmith $"; #endif /* Inverts 4 by 4 matrix using partial pivoting. */ #include "petsc.h" #undef __FUNC__ #define __FUNC__ "Kernel_A_gets_inverse_A_4" int Kernel_A_gets_inverse_A_4(Scalar *a) { int i__2, i__3, kp1, j, k, l,ll,i,ipvt_l[4],*ipvt = ipvt_l-1,kb,k3; int k4,j3; Scalar *aa,*ax,*ay,work_l[16],*work = work_l-1,stmp; double tmp,max; /* gaussian elimination with partial pivoting */ /* Parameter adjustments */ a -= 5; for (k = 1; k <= 3; ++k) { kp1 = k + 1; k3 = 4*k; k4 = k3 + k; /* find l = pivot index */ i__2 = 4 - k; aa = &a[k4]; 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 + k3] == 0.) { SETERRQ(k,0,"Zero pivot"); } /* interchange if necessary */ if (l != k) { stmp = a[l + k3]; a[l + k3] = a[k4]; a[k4] = stmp; } /* compute multipliers */ stmp = -1. / a[k4]; i__2 = 4 - k; aa = &a[1 + k4]; for ( ll=0; ll