1 #include <../../nrnconf.h>
32 static char rcsid[] =
"bkpfacto.c,v 1.1 1997/12/04 17:55:14 hines Exp";
39 #define btos(x) ((x) ? "TRUE" : "FALSE")
43 #define alpha 0.6403882032022076
58 A_me =
A->me;
n =
A->n;
63 for (
k = 0;
k <
i;
k++ )
72 for (
k =
j+1;
k <
n;
k++ )
81 for (
k =
i+1;
k <
j;
k++ )
105 PERM *pivot, *blocks;
107 int i,
j,
k,
n, onebyone, r;
108 Real **A_me, aii, aip1, aip1i, lambda, sigma, tmp;
111 if ( !
A || ! pivot || ! blocks )
122 for (
i = 0;
i <
n;
i = onebyone ?
i+1 :
i+2 )
126 lambda = 0.0; r = (
i+1 <
n) ?
i+1 :
i;
127 for (
k =
i+1;
k <
n;
k++ )
140 if ( aii >=
alpha*lambda )
147 for (
k =
i;
k <
n;
k++ )
156 if ( aii*sigma >=
alpha*
sqr(lambda) )
185 for (
j =
i+1;
j <
n;
j++ )
188 for (
k =
j;
k <
n;
k++ )
202 for (
j =
i+2;
j <
n;
j++ )
206 for (
k =
j;
k <
n;
k++ )
219 for (
i = 0;
i <
A->m;
i++ )
220 for (
j = 0;
j <
i;
j++ )
234 int i,
j,
n, onebyone;
235 Real **A_me, a11, a12, a22, b1, b2, det, sum, *tmp_ve, tmp_diag;
237 if ( !
A || ! pivot || ! block || ! b )
248 A_me =
A->me; tmp_ve = tmp->
ve;
252 for (
i = 0;
i <
n;
i++ )
255 if ( block->
pe[
i] <
i )
256 for (
j = 0;
j <
i-1;
j++ )
259 for (
j = 0;
j <
i;
j++ )
265 for (
i = 0;
i <
n;
i = onebyone ?
i+1 :
i+2 )
267 onebyone = ( block->
pe[
i] ==
i );
271 if ( tmp_diag == 0.0 )
282 det = a11*a22-a12*a12;
292 for (
i =
n-1;
i >= 0;
i-- )
295 if ( block->
pe[
i] >
i )
296 for (
j =
i+2;
j <
n;
j++ )
299 for (
j =
i+1;
j <
n;
j++ )
VEC * BKPsolve(MAT *A, PERM *pivot, PERM *block, VEC *b, VEC *x)
static void interchange(MAT *A, int i, int j)
MAT * BKPfactor(MAT *A, PERM *pivot, PERM *blocks)
#define error(err_num, fn_name)
PERM * px_ident(PERM *px)
static Object ** v_resize(void *v)
PERM * px_transp(PERM *px, u_int i, u_int j)
#define m_set_val(A, i, j, val)
VEC * px_vec(PERM *, VEC *, VEC *)
#define v_set_val(x, i, val)
#define m_sub_val(A, i, j, val)
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