From 5158a1717f1d4caee25669a0781602fe64787302 Mon Sep 17 00:00:00 2001 From: Alberto Ruiz Date: Thu, 22 May 2014 11:49:23 +0200 Subject: initial support for sparse matrix --- packages/base/src/C/lapack-aux.h | 2 ++ packages/base/src/C/vector-aux.c | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) (limited to 'packages/base/src/C') diff --git a/packages/base/src/C/lapack-aux.h b/packages/base/src/C/lapack-aux.h index a3f1899..c95a2a3 100644 --- a/packages/base/src/C/lapack-aux.h +++ b/packages/base/src/C/lapack-aux.h @@ -36,6 +36,7 @@ typedef short ftnlen; /********************************************************/ +#define IVEC(A) int A##n, int*A##p #define FVEC(A) int A##n, float*A##p #define DVEC(A) int A##n, double*A##p #define QVEC(A) int A##n, complex*A##p @@ -47,6 +48,7 @@ typedef short ftnlen; #define CMAT(A) int A##r, int A##c, doublecomplex* A##p #define PMAT(A) int A##r, int A##c, void* A##p, int A##s +#define KIVEC(A) int A##n, const int*A##p #define KFVEC(A) int A##n, const float*A##p #define KDVEC(A) int A##n, const double*A##p #define KQVEC(A) int A##n, const complex*A##p diff --git a/packages/base/src/C/vector-aux.c b/packages/base/src/C/vector-aux.c index 5b9c171..53b56aa 100644 --- a/packages/base/src/C/vector-aux.c +++ b/packages/base/src/C/vector-aux.c @@ -744,3 +744,29 @@ int random_vector(int seed, int code, DVEC(r)) { } } +//////////////////////////////////////////////////////////////////////////////// + +int smXv(KDVEC(vals),KIVEC(cols),KIVEC(rows),KDVEC(x),DVEC(r)) { + int r, c; + for (r = 0; r < rowsn - 1; r++) { + rp[r] = 0; + for (c = rowsp[r]; c < rowsp[r+1]; c++) { + rp[r] += valsp[c-1] * xp[colsp[c-1]-1]; + } + } + OK +} + +int smTXv(KDVEC(vals),KIVEC(cols),KIVEC(rows),KDVEC(x),DVEC(r)) { + int r,c; + for (c = 0; c < rn; c++) { + rp[c] = 0; + } + for (r = 0; r < rowsn - 1; r++) { + for (c = rowsp[r]; c < rowsp[r+1]; c++) { + rp[colsp[c-1]-1] += valsp[c-1] * xp[r]; + } + } + OK +} + -- cgit v1.2.3