void soltripiv(float sub[], float diag[], float super[], int n, float aid[], int piv[], float b[]) { int i,n1; float bi,bi1,r,s,t; n1=n-1; for (i=1; i<=n1; i++) { if (piv[i]) { bi=b[i+1]; bi1=b[i]; } else { bi=b[i]; bi1=b[i+1]; } r=b[i]=bi/diag[i]; b[i+1]=bi1-sub[i]*r; } r = b[n] /= diag[n]; t = b[n1] -= super[n1]*r; for (i=n-2; i>=1; i--) { s=r; r=t; t = b[i] -= super[i]*r + ((piv[i]) ? aid[i]*s : 0.0); } }