57 REAL *p_k=NULL, *p_row=NULL, *p_col=NULL;
61 for (k = 0, p_k = A; k < n; p_k += n, k++) {
65 max = fabs( *(p_k + k) );
66 for (j = k + 1, p_row = p_k + n; j < n; ++j, p_row += n) {
67 if ( max < fabs(*(p_row + k)) ) {
68 max = fabs(*(p_row + k));
76 for (j = 0; j < n; ++j) {
78 *(p_k + j) = *(p_col + j);
83 if ( fabs( *(p_k + k) ) <
SMALLREAL )
return -1;
86 for (i = k+1, p_row = p_k + n; i < n; p_row += n, ++i) {
87 *(p_row + k) /= *(p_k + k);
91 for (i = k+1, p_row = p_k + n; i < n; p_row += n, ++i)
92 for (j = k+1; j < n; ++j)
93 *(p_row + j) -= *(p_row + k) * *(p_k + j);
135 for (k = 0, p_k = A; k < n; p_k += n, k++) {
136 if (pivot[k] != k) {dum = b[k]; b[k] = b[pivot[k]]; b[pivot[k]] = dum; }
138 for (i = 0; i < k; ++i) x[k] -= x[i] * *(p_k + i);
142 for (k = n-1, p_k = A + n*(n-1); k >= 0; k--, p_k -= n) {
143 if (pivot[k] != k) {dum = b[k]; b[k] = b[pivot[k]]; b[pivot[k]] = dum; }
144 for (i = k + 1; i < n; ++i) x[k] -= x[i] * *(p_k + i);
145 if (*(p_k + k) == 0.0)
return -1;
SHORT fasp_smat_lu_decomp(REAL *A, INT pivot[], const INT n)
LU decomposition of A using Doolittle's method.
SHORT fasp_smat_lu_solve(const REAL *A, REAL b[], const INT pivot[], REAL x[], const INT n)
Solving Ax=b using LU decomposition.
Main header file for the FASP project.
#define SHORT
FASP integer and floating point numbers.
#define FASP_SUCCESS
Definition of return status and error messages.