1 #include <../../nrnconf.h>
34 static char rcsid[] =
"matop.c,v 1.1 1997/12/04 17:55:35 hines Exp";
45 if ( mat1->m != mat2->m || mat1->n != mat2->n )
47 if ( out==(
MAT *)
NULL || out->m != mat1->m || out->n != mat1->n )
49 m = mat1->m;
n = mat1->n;
70 if ( mat1->m != mat2->m || mat1->n != mat2->n )
72 if ( out==(
MAT *)
NULL || out->m != mat1->m || out->n != mat1->n )
74 m = mat1->m;
n = mat1->n;
100 m =
A->m;
n =
A->n;
p =
B->n;
101 A_v =
A->me; B_v =
B->me;
117 for (
i=0;
i<m;
i++ )
118 for (
k=0;
k<
n;
k++ )
120 if ( A_v[
i][
k] != 0.0 )
150 for (
i = 0;
i <
A->m;
i++ )
151 for (
j = 0;
j <
B->m;
j++ )
186 for (
k = 0;
k <
A->m;
k++ )
187 for (
i = 0;
i <
A->n;
i++ )
189 if (
A->me[
k][
i] != 0.0 )
215 if (
A->n != b->
dim )
223 A_v =
A->me; b_v = b->
ve;
224 for (
i=0;
i<m;
i++ )
249 if ( out==(
MAT *)
NULL || out->m != matrix->
m || out->n != matrix->
n )
251 m = matrix->
m;
n = matrix->
n;
252 for (
i=0;
i<m;
i++ )
272 if (
A->m != b->
dim )
282 for (
j = 0;
j < m;
j++ )
283 if ( b->
ve[
j] != 0.0 )
309 if ( in == out && in->n != in->m )
311 in_situ = ( in == out );
312 if ( out == (
MAT *)
NULL || out->m != in->n || out->n != in->m )
316 for (
i = 0;
i < in->m;
i++ )
317 for (
j = 0;
j < in->n;
j++ )
318 out->me[
j][
i] = in->me[
i][
j];
320 for (
i = 1;
i < in->m;
i++ )
321 for (
j = 0;
j <
i;
j++ )
322 { tmp = in->me[
i][
j];
323 in->me[
i][
j] = in->me[
j][
i];
340 if (
i < 0 || j < 0 || i >=
A->m ||
j >=
A->m )
346 for (
k = lo;
k <= hi;
k++ )
349 A_me[
k][
i] = A_me[
k][
j];
365 if (
i < 0 || j < 0 || i >=
A->n ||
j >=
A->n )
371 for (
k = lo;
k <= hi;
k++ )
374 A_me[
i][
k] = A_me[
j][
k];
393 if ( A1->m != A2->m || A1->n != A2->n )
396 if ( out != A1 && out != A2 )
402 return m_add(A1,A2,out);
406 m = A1->m;
n = A1->n;
407 for (
i = 0;
i < m;
i++ )
432 Real *v2_ve, *out_ve;
434 if ( ! v1 || ! v2 || !
A )
438 if ( v1->dim !=
A->m || v2->dim !=
A->n )
443 v2_ve = v2->ve; out_ve = out->
ve;
449 for (
i = 0;
i < m;
i++ )
475 if ( ! v1 || ! v2 || !
A )
479 if ( v1->dim !=
A->n ||
A->m != v2->dim )
484 out_ve = out->
ve; m =
A->m;
n =
A->n;
485 for (
j = 0;
j < m;
j++ )
#define error(err_num, fn_name)
#define tracecatch(ok_part, function)
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)
VEC * vm_mlt(MAT *A, VEC *b, VEC *out)
MAT * swap_rows(MAT *A, int i, int j, int lo, int hi)
MAT * mtrm_mlt(MAT *A, MAT *B, MAT *OUT)
MAT * m_sub(MAT *mat1, MAT *mat2, MAT *out)
MAT * mmtr_mlt(MAT *A, MAT *B, MAT *OUT)
MAT * sm_mlt(double scalar, MAT *matrix, MAT *out)
VEC * mv_mlt(MAT *A, VEC *b, VEC *out)
VEC * mv_mltadd(VEC *v1, VEC *v2, MAT *A, double alpha, VEC *out)
MAT * m_add(MAT *mat1, MAT *mat2, MAT *out)
MAT * swap_cols(MAT *A, int i, int j, int lo, int hi)
MAT * m_transp(MAT *in, MAT *out)
VEC * vm_mltadd(VEC *v1, VEC *v2, MAT *A, double alpha, VEC *out)
MAT * ms_mltadd(MAT *A1, MAT *A2, double s, MAT *out)
MAT * m_mlt(MAT *A, MAT *B, MAT *OUT)
static Object ** m_zero(void *v)
static Object ** m_resize(void *v)
int const size_t const size_t n
static philox4x32_key_t k