1 #include <../../nrnconf.h>
33 static char rcsid[] =
"lufactor.c,v 1.1 1997/12/04 17:55:32 hines Exp";
52 Real **A_v, *A_piv, *A_row;
53 Real max1, temp, tiny;
58 if ( pivot->
size !=
A->m )
78 max1 =
max(max1,temp);
85 for (
k=0;
k<k_max;
k++ )
88 max1 = 0.0; i_max = -1;
94 { max1 = temp; i_max =
i; }
110 for (
j=0;
j<
n;
j++ )
112 temp = A_v[i_max][
j];
113 A_v[i_max][
j] = A_v[
k][
j];
119 for (
i=
k+1;
i<m;
i++ )
121 temp = A_v[
i][
k] = A_v[
i][
k]/A_v[
k][
k];
122 A_piv = &(A_v[
k][
k+1]);
123 A_row = &(A_v[
i][
k+1]);
147 if (
A->m !=
A->n ||
A->n != b->
dim )
164 if ( ! LU || ! b || ! pivot )
166 if ( LU->m != LU->n || LU->n != b->
dim )
191 if ( ! out || out->m <
A->m || out->n <
A->n )
204 for (
i = 0;
i <
A->n;
i++ )
222 Real cond_est=0.0, L_norm, U_norm, sum, tiny;
225 if ( ! LU || ! pivot )
227 if ( LU->m != LU->n )
229 if ( LU->n != pivot->
size )
240 for (
i = 0;
i <
n;
i++ )
243 for (
j = 0;
j <
i;
j++ )
244 sum -= LU->me[
j][
i]*y->
ve[
j];
245 sum -= (sum < 0.0) ? 1.0 : -1.0;
248 y->
ve[
i] = sum / LU->me[
i][
i];
260 for (
i = 0;
i <
n;
i++ )
263 for (
j =
i;
j <
n;
j++ )
264 sum +=
fabs(LU->me[
i][
j]);
269 for (
i = 0;
i <
n;
i++ )
272 for (
j = 0;
j <
i;
j++ )
273 sum +=
fabs(LU->me[
i][
j]);
#define error(err_num, fn_name)
#define tracecatch(ok_part, function)
static Object ** v_resize(void *v)
MAT * LUfactor(MAT *A, PERM *pivot)
MAT * m_inverse(MAT *A, MAT *out)
double LUcondest(MAT *LU, PERM *pivot)
VEC * LUsolve(MAT *A, PERM *pivot, VEC *b, VEC *x)
VEC * LUTsolve(MAT *LU, PERM *pivot, VEC *b, VEC *x)
void __mltadd__(Real *dp1, Real *dp2, double s, int len)
VEC * LTsolve(MAT *A, VEC *b, VEC *x, double diag_val)
VEC * Lsolve(MAT *A, VEC *b, VEC *x, double diag_val)
VEC * Usolve(MAT *A, VEC *b, VEC *x, double diag_val)
VEC * UTsolve(MAT *A, VEC *b, VEC *x, double diag_val)
static Object ** m_resize(void *v)
PERM * px_transp(PERM *px, u_int i, u_int j)
VEC * px_vec(PERM *, VEC *, VEC *)
#define set_col(mat, col, vec)
PERM * px_resize(PERM *, int)
VEC * pxinv_vec(PERM *, VEC *, VEC *)
#define MEM_STAT_REG(var, type)
int const size_t const size_t n
static philox4x32_key_t k