1 #include <../../nrnconf.h>
31 static char rcsid[] =
"zvecop.c,v 1.1 1997/12/04 17:56:19 hines Exp";
46 limit =
min(a->dim,b->dim);
50 return __zip__(&(a->ve[i0]),&(b->ve[i0]),(
int)(limit-i0),flag);
65 if ( scalar.re == 0.0 && scalar.im == 0.0 )
67 if ( scalar.re == 1.0 && scalar.im == 0.0 )
77 ZVEC *vec1,*vec2,*out;
83 if ( vec1->dim != vec2->dim )
85 if ( out==
ZVNULL || out->
dim != vec1->dim )
104 if ( v1->dim != v2->dim )
106 if ( scale.
re == 0.0 && scale.
im == 0.0 )
108 if ( scale.
re == 1.0 && scale.
im == 0.0 )
129 ZVEC *vec1,*vec2,*out;
136 if ( vec1->dim != vec2->dim )
138 if ( out==
ZVNULL || out->
dim != vec1->dim )
141 __zsub__(vec1->ve,vec2->ve,out->
ve,(
int)(vec1->dim));
149 #ifdef PROTOYPES_IN_STRUCT
161 if ( ! out || out->dim != x->dim )
164 dim = x->dim; x_ve = x->ve; out_ve = out->ve;
165 for (
i = 0;
i < dim;
i++ )
166 out_ve[
i] = (*f)(x_ve[
i]);
172 #ifdef PROTOTYPES_IN_STRUCT
185 if ( ! out || out->dim != x->dim )
188 dim = x->dim; x_ve = x->ve; out_ve = out->ve;
189 for (
i = 0;
i < dim;
i++ )
190 out_ve[
i] = (*f)(params,x_ve[
i]);
208 for (
i = 1;
i <
n;
i++ )
213 for (
i = 1;
i <
n;
i++ )
217 if (
v[
i]->dim != out->dim )
247 while ((par = va_arg(ap,
ZVEC *))) {
249 if (a_par.
re == 0.0 && a_par.
im == 0.0)
continue;
252 if ( out->
dim != par->
dim )
255 if (a_par.
re == 1.0 && a_par.
im == 0.0)
256 out =
zv_add(out,par,out);
257 else if (a_par.
re == -1.0 && a_par.
im == 0.0)
258 out =
zv_sub(out,par,out);
282 out = va_arg(ap,
ZVEC *);
283 par = va_arg(ap,
ZVEC *);
290 out =
zv_mlt(a_par,par,out);
292 while ((par = va_arg(ap,
ZVEC *))) {
294 if (a_par.
re == 0.0 && a_par.
im == 0.0)
continue;
297 if ( out->
dim != par->
dim )
300 if (a_par.
re == 1.0 && a_par.
im == 0.0)
301 out =
zv_add(out,par,out);
302 else if (a_par.
re == -1.0 && a_par.
im == 0.0)
303 out =
zv_sub(out,par,out);
327 if ( x1->dim != x2->dim )
331 for (
i = 0;
i < x1->dim;
i++ )
334 t_re = x1->ve[
i].re*x2->ve[
i].re - x1->ve[
i].im*x2->ve[
i].im;
335 t_im = x1->ve[
i].re*x2->ve[
i].im + x1->ve[
i].im*x2->ve[
i].re;
336 out->ve[
i].re = t_re;
337 out->ve[
i].im = t_im;
356 if ( x1->dim != x2->dim )
360 for (
i = 0;
i < x1->dim;
i++ )
362 r2 = x1->ve[
i].re*x1->ve[
i].re + x1->ve[
i].im*x1->ve[
i].im;
365 tmp.
re = x1->ve[
i].re / r2;
366 tmp.
im = - x1->ve[
i].im / r2;
367 t_re = tmp.
re*x2->ve[
i].re - tmp.
im*x2->ve[
i].im;
368 t_im = tmp.
re*x2->ve[
i].im - tmp.
im*x2->ve[
i].re;
369 out->ve[
i].re = t_re;
370 out->ve[
i].im = t_im;
386 sum.
re = sum.
im = 0.0;
387 for (
i = 0;
i < x->dim;
i++ )
389 sum.
re += x->ve[
i].re;
390 sum.
im += x->ve[
i].im;
406 if ( px->size > vector->
dim )
408 if ( out==
ZVNULL || out->dim < vector->
dim )
417 for (
i=0;
i<size;
i++ )
418 if ( px->pe[
i] >= size )
421 out->ve[
i] = vector->
ve[px->pe[
i]];
426 while (
start < size )
438 vector->
ve[old_i] = vector->
ve[
i];
439 px->pe[old_i] =
i+size;
446 vector->
ve[old_i] = tmp;
447 px->pe[old_i] =
i+size;
454 for (
i = 0;
i < size;
i++ )
455 if ( px->pe[
i] < size )
458 px->pe[
i] = px->pe[
i]-size;
474 if ( px->size > x->dim )
476 if ( ! out || out->dim < x->dim )
484 for (
i=0;
i<size;
i++ )
485 if ( px->pe[
i] >= size )
488 out->ve[px->pe[
i]] = x->ve[
i];
#define error(err_num, fn_name)
#define tracecatch(ok_part, function)
void mrandlist(a, int len)
PERM * px_inv(PERM *px, PERM *out)
int const size_t const size_t n
void __zsub__(complex *zp1, complex *zp2, complex *out, int len)
void __zadd__(complex *zp1, complex *zp2, complex *out, int len)
complex __zip__(complex *zp1, complex *zp2, int len, int flag)
void __zmltadd__(complex *zp1, complex *zp2, complex s, int len, int flag)
void __zmlt__(complex *zp, complex s, complex *out, int len)
ZVEC * zv_resize(ZVEC *x, int new_dim)
ZVEC * zv_sub(ZVEC *vec1, ZVEC *vec2, ZVEC *out)
ZVEC * zv_mlt(complex scalar, ZVEC *vector, ZVEC *out)
ZVEC * zv_map(complex(*f)(), ZVEC *x, ZVEC *out)
ZVEC * _zv_map(complex(*f)(), void *params, ZVEC *x, ZVEC *out)
ZVEC * px_zvec(PERM *px, ZVEC *vector, ZVEC *out)
ZVEC * zv_star(ZVEC *x1, ZVEC *x2, ZVEC *out)
ZVEC * zv_slash(ZVEC *x1, ZVEC *x2, ZVEC *out)
complex _zin_prod(ZVEC *a, ZVEC *b, u_int i0, u_int flag)
ZVEC * zv_mltadd(ZVEC *v1, ZVEC *v2, complex scale, ZVEC *out)
ZVEC * zv_linlist(ZVEC *out, ZVEC *v1, complex a1,...)
ZVEC * zv_add(ZVEC *vec1, ZVEC *vec2, ZVEC *out)
ZVEC * pxinv_zvec(PERM *px, ZVEC *x, ZVEC *out)
ZVEC * zv_lincomb(int n, v, a, *out)