1 #include <../../nrnconf.h> 5 #define v_elem(v,i) (*(vector_vec(v) + i)) 58 hoc_execerror(
"Matrix method not implemented for this type matrix", 0);
64 for (
int i = 0;
i <
nrow();
i++) {
65 for (
int j = 0;
j <
ncol();
j++) {
77 for (
int i = 0;
i < m_->m;
i++) {
78 SPROW*
const r = m_->row +
i;
80 for (
int k = 0;
k < r->
len;
k++) {
133 m_mlt(
m_, in->full()->m_, out->full()->m_);
141 m_add(
m_, in->full()->m_, out->full()->m_);
149 m_move(
m_, i0, j0, n0, m0, out->full()->m_, i1, j1);
185 for (i=0, j=k; i < row && j < col; ++
i, ++
j) {
193 for (i= -k, j=0; i < row && j < col; ++
i, ++
j) {
220 for (i=0, j=k; i < row && j < col; ++
i, ++
j) {
228 for (i= -k, j=0; i < row && j < col; ++
i, ++
j) {
240 for (i=0; i < col; ++
i) {
247 for (i=0; i <
row; ++
i) {
257 for (i=0, j=k; i < row && j < col; ++
i, ++
j) {
261 for (i= -k, j=0; i < row && j < col; ++
i, ++
j) {
276 m_exp(
m_, 0., out->full()->m_);
288 bool call_lufac =
true;
315 for (
int i = 0;
i <
n; ++
i) {
316 for (
int j = 0;
j <
n; ++
j) {
324 for (
int i = 0;
i <
n; ++
i) {
326 if (m == 0.0) {
break; }
417 bool call_lufac =
true;
441 for (i=0; i <
n; ++
i) {
445 }
else if (
v_elem(in, i)) {
449 }
else if (in->elem(i)) {
461 for (i=0; i <
n; ++
i) {
465 }
else if (
v_elem(in, i)) {
469 }
else if (in->elem(i)) {
482 for (i=0, j=k; i < row && j < col; ++
i, ++
j) {
486 }
else if (
v_elem(in, i)) {
490 }
else if (in->elem(i)) {
496 for (i= -k, j=0; i < row && j < col; ++
i, ++
j) {
500 }
else if (
v_elem(in, i)) {
504 }
else if (in->elem(i)) {
515 for (i=0; i < col; ++
i) {
522 for (i=0; i <
row; ++
i) {
536 for (i=0, j=k; i < row && j < col; ++
i, ++
j) {
540 for (i= -k, j=0; i < row && j < col; ++
i, ++
j) {
virtual void transpose(Matrix *out)
MAT * LUfactor(MAT *A, PERM *pivot)
virtual void getcol(int, Vect *out)
virtual double getval(int, int)
double sp_set_val(SPMAT *A, int i, int j, double val)
virtual void nonzeros(vector< int > &m, vector< int > &n)
static void Vect2VEC(Vect *v1, VEC &v2)
VEC * symmeig(MAT *A, MAT *Q, VEC *out)
static Object ** m_inverse(void *v)
virtual void copy(Matrix *out)
virtual void bcopy(Matrix *mout, int i0, int j0, int n0, int m0, int i1, int j1)
virtual int sprowlen(int)
virtual double det(int *exponent)
virtual void muls(double, Matrix *out)
SPMAT * sp_resize(SPMAT *A, int m, int n)
virtual void add(Matrix *, Matrix *out)
virtual void setdiag(int, Vect *in)
VEC * svd(MAT *A, MAT *U, MAT *V, VEC *out)
#define m_set_val(A, i, j, val)
virtual double * mep(int, int)
virtual void inverse(Matrix *out)
MAT * sm_mlt(double scalar, MAT *matrix, MAT *out)
virtual void pow(int, Matrix *out)
static philox4x32_key_t k
virtual void mulv(Vect *in, Vect *out)
static Object ** m_exp(void *v)
virtual void solv(Vect *vin, Vect *vout, bool use_lu)
VEC * spLUsolve(SPMAT *, PERM *, VEC *, VEC *)
static OcMatrix * instance(int nrow, int ncol, int type=MFULL)
virtual void resize(int, int)
SPMAT * sp_zero(SPMAT *A)
static Object ** m_add(void *v)
virtual void setrow(int, Vect *in)
virtual void symmeigen(Matrix *mout, Vect *vout)
int const size_t const size_t n
virtual double * mep(int, int)
virtual double getval(int i, int j)
VEC * LUsolve(MAT *A, PERM *pivot, VEC *b, VEC *x)
PERM * px_resize(PERM *, int)
virtual void setdiag(int, Vect *in)
virtual double spgetrowval(int i, int jindx, int *j)
int sprow_idx(SPROW *, int)
SPMAT * sp_get(int m, int n, int maxlen)
void hoc_execerror(const char *, const char *)
virtual ~OcSparseMatrix()
virtual double * pelm(int, int)
#define set_col(mat, col, vec)
static Object ** m_pow(void *v)
virtual void setcol(int, Vect *in)
virtual double getval(int i, int j)
virtual void exp(Matrix *out)
VEC * sp_mv_mlt(SPMAT *A, VEC *x, VEC *out)
SPMAT * spLUfactor(SPMAT *, PERM *, double)
virtual void mulm(Matrix *in, Matrix *out)
int vector_capacity(Vect *v)
int vector_buffer_size(Vect *v)
virtual void setcol(int, Vect *in)
VEC * get_row(MAT *, u_int, VEC *)
virtual void getrow(int, Vect *out)
virtual void getdiag(int, Vect *out)
static Object ** m_resize(void *v)
VEC * mv_mlt(MAT *A, VEC *b, VEC *out)
virtual void mulv(Vect *in, Vect *out)
static Object ** m_zero(void *v)
double * vector_vec(Vect *v)
VEC * get_col(MAT *, u_int, VEC *)
MAT * m_mlt(MAT *A, MAT *B, MAT *OUT)
int nrn_matrix_dim(void *, int)
#define set_row(mat, row, vec)
virtual void solv(Vect *vin, Vect *vout, bool use_lu)
virtual void svd1(Matrix *u, Matrix *v, Vect *d)
double sp_get_val(SPMAT *A, int i, int j)
virtual void nonzeros(vector< int > &m, vector< int > &n)
SPMAT * sp_copy2(SPMAT *A, SPMAT *OUT)
static Object ** m_ident(void *v)
MAT * m_transp(MAT *in, MAT *out)
virtual void setrow(int, Vect *in)