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;
62 { k =
i;
i =
j;
j =
k; }
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 )
242 if ( b->
dim != n || pivot->
size != n || block->
size != n )
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++ )
#define m_sub_val(A, i, j, val)
VEC * BKPsolve(MAT *A, PERM *pivot, PERM *block, VEC *b, VEC *x)
MAT * BKPfactor(MAT *A, PERM *pivot, PERM *blocks)
static Object ** v_resize(void *v)
#define m_set_val(A, i, j, val)
static philox4x32_key_t k
VEC * px_vec(PERM *, VEC *, VEC *)
PERM * px_transp(PERM *px, u_int i, u_int j)
static void interchange(MAT *A, int i, int j)
int const size_t const size_t n
#define v_set_val(x, i, val)
VEC * pxinv_vec(PERM *, VEC *, VEC *)
#define MEM_STAT_REG(var, type)
#define error(err_num, fn_name)
PERM * px_ident(PERM *px)