1 #include <../../nrnconf.h>
32 static char rcsid[] =
"zmatop.c,v 1.1 1997/12/04 17:56:12 hines Exp";
35 #define is_zero(z) ((z).re == 0.0 && (z).im == 0.0)
39 ZMAT *mat1,*mat2,*out;
45 if ( mat1->m != mat2->m || mat1->n != mat2->n )
47 if ( out==
ZMNULL || out->m != mat1->m || out->n != mat1->n )
49 m = mat1->m;
n = mat1->n;
64 ZMAT *mat1,*mat2,*out;
70 if ( mat1->m != mat2->m || mat1->n != mat2->n )
72 if ( out==
ZMNULL || out->m != mat1->m || out->n != mat1->n )
74 m = mat1->m;
n = mat1->n;
106 m =
A->m;
n =
A->n;
p =
B->n;
107 A_v =
A->me; B_v =
B->me;
123 for (
i=0;
i<m;
i++ )
124 for (
k=0;
k<
n;
k++ )
156 for (
i = 0;
i <
A->m;
i++ )
157 for (
j = 0;
j <
B->m;
j++ )
193 for (
k = 0;
k <
A->m;
k++ )
194 for (
i = 0;
i <
A->n;
i++ )
196 tmp.
re =
A->me[
k][
i].re;
197 tmp.
im = -
A->me[
k][
i].im;
217 if (
A->n != b->
dim )
225 A_v =
A->me; b_v = b->
ve;
226 for (
i=0;
i<m;
i++ )
251 if ( out==
ZMNULL || out->m != matrix->
m || out->n != matrix->
n )
253 m = matrix->
m;
n = matrix->
n;
254 for (
i=0;
i<m;
i++ )
273 if (
A->m != b->
dim )
283 for (
j = 0;
j < m;
j++ )
284 if ( b->
ve[
j].
re != 0.0 || b->
ve[
j].
im != 0.0 )
310 if ( in == out && in->n != in->m )
312 in_situ = ( in == out );
313 if ( out ==
ZMNULL || out->m != in->n || out->n != in->m )
318 for (
i = 0;
i < in->m;
i++ )
319 for (
j = 0;
j < in->n;
j++ )
321 out->me[
j][
i].re = in->me[
i][
j].re;
322 out->me[
j][
i].im = - in->me[
i][
j].im;
327 for (
i = 0 ;
i < in->m;
i++ )
329 for (
j = 0;
j <
i;
j++ )
331 tmp.
re = in->me[
i][
j].re;
332 tmp.
im = in->me[
i][
j].im;
333 in->me[
i][
j].re = in->me[
j][
i].re;
334 in->me[
i][
j].im = - in->me[
j][
i].im;
335 in->me[
j][
i].re = tmp.
re;
336 in->me[
j][
i].im = - tmp.
im;
338 in->me[
i][
i].im = - in->me[
i][
i].im;
355 if (
i < 0 || j < 0 || i >=
A->m ||
j >=
A->m )
361 for (
k = lo;
k <= hi;
k++ )
364 A_me[
k][
i] = A_me[
k][
j];
380 if (
i < 0 || j < 0 || i >=
A->n ||
j >=
A->n )
386 for (
k = lo;
k <= hi;
k++ )
389 A_me[
i][
k] = A_me[
j][
k];
408 if ( A1->m != A2->m || A1->n != A2->n )
411 if ( out != A1 && out != A2 )
414 if ( s.
re == 0.0 && s.
im == 0.0 )
416 if ( s.
re == 1.0 && s.
im == 0.0 )
421 m = A1->m;
n = A1->n;
422 for (
i = 0;
i < m;
i++ )
449 if ( ! v1 || ! v2 || !
A )
453 if ( v1->dim !=
A->m || v2->dim !=
A->
n )
458 v2_ve = v2->ve; out_ve = out->
ve;
464 for (
i = 0;
i < m;
i++ )
492 if ( ! v1 || ! v2 || !
A )
496 if ( v1->dim !=
A->n ||
A->m != v2->dim )
501 out_ve = out->
ve; m =
A->m;
n =
A->n;
502 for (
j = 0;
j < m;
j++ )
507 if ( tmp.
re != 0.0 || tmp.
im != 0.0 )
529 if ( col < 0 || col >= mat->
n )
534 for (
i=0;
i<mat->
m;
i++ )
535 vec->
ve[
i] = mat->
me[
i][col];
550 if ( row < 0 || row >= mat->
m )
574 if ( col < 0 || col >= mat->
n )
577 for (
i=0;
i<lim;
i++ )
578 mat->
me[
i][col] = vec->
ve[
i];
593 if ( row < 0 || row >= mat->
m )
612 for (
i = 0;
i <
A->m;
i++ )
#define error(err_num, fn_name)
#define tracecatch(ok_part, function)
void mrandlist(a, int len)
#define MEMCOPY(from, to, n_items, type)
int const size_t const size_t n
static philox4x32_key_t k
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)
ZMAT * zsm_mlt(complex scalar, ZMAT *matrix, ZMAT *out)
ZVEC * zmv_mltadd(ZVEC *v1, ZVEC *v2, ZMAT *A, complex alpha, ZVEC *out)
ZMAT * zm_adjoint(ZMAT *in, ZMAT *out)
ZMAT * zswap_cols(ZMAT *A, int i, int j, int lo, int hi)
ZMAT * zset_col(ZMAT *mat, int col, ZVEC *vec)
ZMAT * zmma_mlt(ZMAT *A, ZMAT *B, ZMAT *OUT)
ZVEC * zmv_mlt(ZMAT *A, ZVEC *b, ZVEC *out)
ZVEC * zget_col(ZMAT *mat, int col, ZVEC *vec)
ZMAT * zm_add(ZMAT *mat1, ZMAT *mat2, ZMAT *out)
ZVEC * zvm_mltadd(ZVEC *v1, ZVEC *v2, ZMAT *A, complex alpha, ZVEC *out)
ZVEC * zvm_mlt(ZMAT *A, ZVEC *b, ZVEC *out)
ZMAT * zswap_rows(ZMAT *A, int i, int j, int lo, int hi)
ZMAT * mz_mltadd(ZMAT *A1, ZMAT *A2, complex s, ZMAT *out)
ZMAT * zset_row(ZMAT *mat, int row, ZVEC *vec)
ZVEC * zget_row(ZMAT *mat, int row, ZVEC *vec)
ZMAT * zm_mlt(ZMAT *A, ZMAT *B, ZMAT *OUT)
ZMAT * zmam_mlt(ZMAT *A, ZMAT *B, ZMAT *OUT)
ZMAT * zm_sub(ZMAT *mat1, ZMAT *mat2, ZMAT *out)
ZVEC * zv_resize(ZVEC *x, int new_dim)
ZMAT * zm_resize(ZMAT *A, int new_m, int new_n)