1 #include <../../nrnconf.h>
5 #define v_elem(v, i) (*(vector_vec(v) + i))
61 hoc_execerror(
"Matrix method not implemented for this type matrix", 0);
67 for (
int i = 0;
i <
nrow();
i++) {
68 for (
int j = 0;
j <
ncol();
j++) {
80 for (
int i = 0;
i <
m_->
m;
i++) {
83 for (
int k = 0;
k < r->
len;
k++) {
137 m_mlt(
m_, in->full()->m_, out->full()->m_);
145 m_add(
m_, in->full()->m_, out->full()->m_);
153 m_move(
m_, i0, j0, n0, m0, out->full()->m_, i1, j1);
189 for (
i = 0,
j =
k;
i <
row &&
j < col; ++
i, ++
j) {
197 for (
i = -
k,
j = 0;
i <
row &&
j < col; ++
i, ++
j) {
224 for (
i = 0,
j =
k;
i <
row &&
j < col; ++
i, ++
j) {
232 for (
i = -
k,
j = 0;
i <
row &&
j < col; ++
i, ++
j) {
244 for (
i = 0;
i < col; ++
i) {
251 for (
i = 0;
i <
row; ++
i) {
261 for (
i = 0,
j =
k;
i <
row &&
j < col; ++
i, ++
j) {
265 for (
i = -
k,
j = 0;
i <
row &&
j < col; ++
i, ++
j) {
280 m_exp(
m_, 0., out->full()->m_);
292 bool call_lufac =
true;
319 for (
int i = 0;
i <
n; ++
i) {
320 for (
int j = 0;
j <
n; ++
j) {
328 for (
int i = 0;
i <
n; ++
i) {
424 bool call_lufac =
true;
448 for (
i = 0;
i <
n; ++
i) {
456 }
else if (in->elem(
i)) {
468 for (
i = 0;
i <
n; ++
i) {
476 }
else if (in->elem(
i)) {
489 for (
i = 0,
j =
k;
i <
row &&
j < col; ++
i, ++
j) {
497 }
else if (in->elem(
i)) {
503 for (
i = -
k,
j = 0;
i <
row &&
j < col; ++
i, ++
j) {
511 }
else if (in->elem(
i)) {
521 for (
i = 0;
i < col; ++
i) {
528 for (
i = 0;
i <
row; ++
i) {
542 for (
i = 0,
j =
k;
i <
row &&
j < col; ++
i, ++
j) {
546 for (
i = -
k,
j = 0;
i <
row &&
j < col; ++
i, ++
j) {
virtual void getdiag(int, Vect *out)
virtual void exp(Matrix *out)
virtual void pow(int, Matrix *out)
virtual void setdiag(int, Vect *in)
virtual void getcol(int, Vect *out)
virtual void setrow(int, Vect *in)
virtual void bcopy(Matrix *mout, int i0, int j0, int n0, int m0, int i1, int j1)
virtual void setcol(int, Vect *in)
virtual double det(int *exponent)
virtual double * mep(int, int)
virtual void transpose(Matrix *out)
virtual double getval(int i, int j)
virtual void solv(Vect *vin, Vect *vout, bool use_lu)
virtual void getrow(int, Vect *out)
virtual void copy(Matrix *out)
virtual void inverse(Matrix *out)
virtual void svd1(Matrix *u, Matrix *v, Vect *d)
virtual void add(Matrix *, Matrix *out)
virtual void symmeigen(Matrix *mout, Vect *vout)
virtual void muls(double, Matrix *out)
virtual void resize(int, int)
virtual void mulv(Vect *in, Vect *out)
virtual void mulm(Matrix *in, Matrix *out)
virtual double getval(int i, int j)
virtual void nonzeros(vector< int > &m, vector< int > &n)
static OcMatrix * instance(int nrow, int ncol, int type=MFULL)
virtual void setrow(int, Vect *in)
virtual double * mep(int, int)
virtual double getval(int, int)
virtual void nonzeros(vector< int > &m, vector< int > &n)
virtual double spgetrowval(int i, int jindx, int *j)
virtual void mulv(Vect *in, Vect *out)
virtual int sprowlen(int)
virtual void solv(Vect *vin, Vect *vout, bool use_lu)
virtual void setcol(int, Vect *in)
virtual void setdiag(int, Vect *in)
virtual double * pelm(int, int)
virtual ~OcSparseMatrix()
void hoc_execerror(const char *, const char *)
int vector_capacity(Vect *v)
int vector_buffer_size(Vect *v)
double * vector_vec(Vect *v)
MAT * LUfactor(MAT *A, PERM *pivot)
VEC * LUsolve(MAT *A, PERM *pivot, VEC *b, VEC *x)
MAT * sm_mlt(double scalar, MAT *matrix, MAT *out)
VEC * mv_mlt(MAT *A, VEC *b, VEC *out)
MAT * m_transp(MAT *in, MAT *out)
MAT * m_mlt(MAT *A, MAT *B, MAT *OUT)
VEC * symmeig(MAT *A, MAT *Q, VEC *out)
VEC * svd(MAT *A, MAT *U, MAT *V, VEC *out)
static Object ** m_pow(void *v)
static Object ** m_zero(void *v)
static Object ** m_exp(void *v)
static Object ** m_ident(void *v)
static Object ** m_resize(void *v)
static Object ** m_add(void *v)
static Object ** m_inverse(void *v)
#define m_set_val(A, i, j, val)
VEC * get_row(MAT *, u_int, VEC *)
#define set_col(mat, col, vec)
PERM * px_resize(PERM *, int)
#define set_row(mat, row, vec)
VEC * get_col(MAT *, u_int, VEC *)
int const size_t const size_t n
static philox4x32_key_t k
static void Vect2VEC(Vect *v1, VEC &v2)
int nrn_matrix_dim(void *, int)
VEC * spLUsolve(SPMAT *, PERM *, VEC *, VEC *)
SPMAT * spLUfactor(SPMAT *, PERM *, double)
SPMAT * sp_zero(SPMAT *A)
SPMAT * sp_resize(SPMAT *A, int m, int n)
double sp_set_val(SPMAT *A, int i, int j, double val)
double sp_get_val(SPMAT *A, int i, int j)
SPMAT * sp_get(int m, int n, int maxlen)
VEC * sp_mv_mlt(SPMAT *A, VEC *x, VEC *out)
SPMAT * sp_copy2(SPMAT *A, SPMAT *OUT)
int sprow_idx(SPROW *, int)