1 #include <../../nrnconf.h> 44 static char rcsid[] =
"iter0.c,v 1.1 1997/12/04 17:55:26 hines Exp";
56 printf(
" %d. residual = %g\n",ip->steps,nres);
58 printf(
" %d. residual = %g (WARNING !!! should be >= 0) \n",
97 if (lenb > 0) ip->
b =
v_get(lenb);
98 else ip->
b = (
VEC *)NULL;
100 if (lenx > 0) ip->
x =
v_get(lenx);
101 else ip->
x = (
VEC *)NULL;
128 if ( !ip->shared_x && ip->x != NULL )
v_free(ip->x);
129 if ( !ip->shared_b && ip->b != NULL )
v_free(ip->b);
138 int new_lenb, new_lenx;
147 if ( ip->shared_x && old != ip->x )
151 if ( ip->shared_b && old != ip->b )
169 fprintf(
fp,
" ip->shared_x = %s, ip->shared_b = %s\n",
170 (ip->shared_x ?
"TRUE" :
"FALSE"),
171 (ip->shared_b ?
"TRUE" :
"FALSE") );
172 fprintf(
fp,
" ip->k = %d, ip->limit = %d, ip->steps = %d, ip->eps = %g\n",
173 ip->k,ip->limit,ip->steps,ip->eps);
174 fprintf(
fp,
" ip->x = 0x%p, ip->b = 0x%p\n",ip->x,ip->b);
175 fprintf(
fp,
" ip->Ax = 0x%p, ip->A_par = 0x%p\n",ip->Ax,ip->A_par);
176 fprintf(
fp,
" ip->ATx = 0x%p, ip->AT_par = 0x%p\n",ip->ATx,ip->AT_par);
177 fprintf(
fp,
" ip->Bx = 0x%p, ip->B_par = 0x%p\n",ip->Bx,ip->B_par);
178 fprintf(
fp,
" ip->info = 0x%p, ip->stop_crit = 0x%p, ip->init_res = %g\n",
179 ip->info,ip->stop_crit,ip->init_res);
199 if (ip2 == (
ITER *)NULL) {
206 ip2->x = ip2->b =
NULL;
207 ip2->shared_x = ip2->shared_x =
FALSE;
233 if (ip2 == (
ITER *)NULL) {
247 ip2->x =
v_copy(ip1->x,x);
249 ip2->b =
v_copy(ip1->b,b);
251 ip2->shared_x = ip2->shared_b =
FALSE;
272 if (nrow <= 1) nrow = 2;
274 if ((nrow & 1)) nrow -= 1;
278 for ( i = 0; i < A->
m; i++ )
280 k_max = ((rand() >> 8) % (nrow/2));
281 for ( k = 0; k <= k_max; k++ )
283 j = (rand() >> 8) % A->
n;
292 for ( i = 0; i < A->
m; i++ )
314 if (nrow <= 1) nrow = 2;
318 for ( i = 0; i < A->
m; i++ )
320 k_max = (rand() >> 8) % (nrow-1);
321 for ( k = 0; k <= k_max; k++ )
323 j = (rand() >> 8) % A->
n;
329 for ( i = 0; i < 2*A->
n; i++ )
331 j = (rand() >> 8) % A->
n;
332 k = (rand() >> 8) % A->
n;
335 for ( i = 0; i < A->
n; i++ )
356 if (nrow <= 1) nrow = 2;
361 for ( i = 0; i < A->
m; i++ )
363 k_max = (rand() >> 8) % (nrow-1);
364 for ( k = 0; k <= k_max; k++ )
366 j = (rand() >> 8) % A->
n;
373 for ( i = 0; i < A->
m; i++ )
ITER * iter_get(int lenb, int lenx)
double sp_set_val(SPMAT *A, int i, int j, double val)
static Object ** v_resize(void *v)
SPMAT * iter_gen_sym(int n, int nrow)
static philox4x32_key_t k
PERM * px_transp(PERM *px, u_int i, u_int j)
int const size_t const size_t n
#define mem_bytes(type, old_size, new_size)
ITER * iter_copy2(ITER *ip1, ITER *ip2)
SPMAT * sp_get(int m, int n, int maxlen)
VEC *(* Fun_Ax)(void *, VEC *, VEC *)
fprintf(stderr, "Don't know the location of params at %p\, pp)
ITER * iter_copy(ITER *ip1, ITER *ip2)
static double v_get(void *v)
SPMAT * iter_gen_nonsym(int m, int n, int nrow, double diag)
void iter_dump(FILE *fp, ITER *ip)
SPMAT * iter_gen_nonsym_posdef(int n, int nrow)
void warning(const char *s, const char *t)
int iter_std_stop_crit(ITER *ip, double nres, VEC *res, VEC *Bres)
#define error(err_num, fn_name)
#define mem_numvar(type, num)
void iter_std_info(ITER *ip, double nres, VEC *res, VEC *Bres)
ITER * iter_resize(ITER *ip, int new_lenb, int new_lenx)