1 #include <../../nrnconf.h>
33 static char rcsid[] =
"vecop.c,v 1.1 1997/12/04 17:56:02 hines Exp";
47 limit =
min(a->dim,b->dim);
51 return __ip__(&(a->ve[i0]),&(b->ve[i0]),(
int)(limit-i0));
99 if ( vec1->dim != vec2->dim )
101 if ( out==(
VEC *)
NULL || out->
dim != vec1->dim )
104 __add__(vec1->ve,vec2->ve,out->
ve,(
int)dim);
126 if ( v1->dim != v2->dim )
131 return v_add(v1,v2,out);
143 out =
v_add(v1,out,out);
157 VEC *vec1,*vec2,*out;
164 if ( vec1->dim != vec2->dim )
166 if ( out==(
VEC *)
NULL || out->
dim != vec1->dim )
169 __sub__(vec1->ve,vec2->ve,out->
ve,(
int)(vec1->dim));
184 #ifdef PROTOTYPES_IN_STRUCT
196 if ( ! out || out->dim != x->dim )
199 dim = x->dim; x_ve = x->ve; out_ve = out->ve;
200 for (
i = 0;
i < dim;
i++ )
201 *out_ve++ = (*f)(*x_ve++);
207 #ifdef PROTOTYPES_IN_STRUCT
208 double (*f)(
void *,double);
220 if ( ! out || out->dim != x->dim )
223 dim = x->dim; x_ve = x->ve; out_ve = out->ve;
224 for (
i = 0;
i < dim;
i++ )
225 *out_ve++ = (*f)(params,*x_ve++);
243 for (
i = 1;
i <
n;
i++ )
248 for (
i = 1;
i <
n;
i++ )
252 if (
v[
i]->dim != out->dim )
281 while ((par = va_arg(ap,
VEC *))) {
282 a_par = va_arg(ap,
double);
283 if (a_par == 0.0)
continue;
286 if ( out->
dim != par->
dim )
290 out =
v_add(out,par,out);
291 else if (a_par == -1.0)
292 out =
v_sub(out,par,out);
316 out = va_arg(ap,
VEC *);
317 par = va_arg(ap,
VEC *);
323 a_par = va_arg(ap,
double);
324 out =
sv_mlt(a_par,par,out);
326 while ((par = va_arg(ap,
VEC *))) {
327 a_par = va_arg(ap,
double);
328 if (a_par == 0.0)
continue;
331 if ( out->
dim != par->
dim )
335 out =
v_add(out,par,out);
336 else if (a_par == -1.0)
337 out =
v_sub(out,par,out);
361 if ( x1->dim != x2->dim )
365 for (
i = 0;
i < x1->dim;
i++ )
366 out->ve[
i] = x1->ve[
i] * x2->ve[
i];
383 if ( x1->dim != x2->dim )
387 for (
i = 0;
i < x1->dim;
i++ )
392 out->ve[
i] = x2->ve[
i] / tmp;
413 for (
i = 1;
i < x->dim;
i++ )
423 if ( min_idx !=
NULL )
443 for (
i = 1;
i < x->dim;
i++ )
453 if ( max_idx !=
NULL )
472 int dim,
i,
j, l, r, tmp_i;
491 l = 0; r = dim-1;
v = x_ve[0];
502 while ( x_ve[++
i] <
v )
504 while ( x_ve[--
j] >
v )
525 order->pe[r] = tmp_i;
555 for (
i = 0;
i < x->dim;
i++ )
569 if ( x1 == out || x2 == out )
571 if ( x1->dim == 0 || x2->dim == 0 )
574 out =
v_resize(out,x1->dim + x2->dim - 1);
576 for (
i = 0;
i < x1->dim;
i++ )
591 if ( x1 == out || x2 == out )
598 for (
i = 0;
i < x1->dim;
i++ )
static double order(void *v)
#define error(err_num, fn_name)
#define tracecatch(ok_part, function)
PERM * px_ident(PERM *px)
static Object ** v_resize(void *v)
void __add__(Real *dp1, Real *dp2, Real *out, int len)
double __ip__(Real *dp1, Real *dp2, int len)
void __smlt__(Real *dp, double s, Real *out, int len)
void __mltadd__(Real *dp1, Real *dp2, double s, int len)
void __sub__(Real *dp1, Real *dp2, Real *out, int len)
PERM * px_resize(PERM *, int)
int const size_t const size_t n
double _in_prod(VEC *a, VEC *b, u_int i0)
VEC * v_conv(VEC *x1, VEC *x2, VEC *out)
double v_min(VEC *x, int *min_idx)
VEC * v_map(double(*f)(), VEC *x, VEC *out)
VEC * v_slash(VEC *x1, VEC *x2, VEC *out)
VEC * v_sort(VEC *x, PERM *order)
VEC * v_lincomb(int n, v, a, *out)
VEC * v_sub(VEC *vec1, VEC *vec2, VEC *out)
VEC * v_pconv(VEC *x1, VEC *x2, VEC *out)
VEC * _v_map(double(*f)(), void *params, VEC *x, VEC *out)
VEC * v_star(VEC *x1, VEC *x2, VEC *out)
VEC * sv_mlt(double scalar, VEC *vector, VEC *out)
double v_max(VEC *x, int *max_idx)
VEC * v_linlist(VEC *out, VEC *v1, double a1,...)
VEC * v_mltadd(VEC *v1, VEC *v2, double scale, VEC *out)
VEC * v_add(VEC *vec1, VEC *vec2, VEC *out)