NEURON
matrixmap.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "ocmatrix.h"
4 #include "nrnoc2iv.h"
5 
6 class MatrixMap {
7  public:
10 
11  void alloc(int, int, Node**, int*);
12  void mmfree();
13  void add(double fac);
14 
15  // passthroughs for accessing m_
16  inline void mulv(Vect& in, Vect& out) {
17  m_.mulv(in, out);
18  };
19  inline void mulv(Vect* in, Vect* out) {
20  m_.mulv(in, out);
21  };
22  inline void mulm(Matrix* in, Matrix* out) {
23  m_.mulm(in, out);
24  };
25  inline void muls(double a, Matrix* out) {
26  m_.muls(a, out);
27  };
28  inline void add(Matrix* a, Matrix* out) {
29  m_.add(a, out);
30  };
31  inline void getrow(int r, Vect* out) {
32  m_.getrow(r, out);
33  };
34  inline void getcol(int c, Vect* out) {
35  m_.getcol(c, out);
36  };
37  inline double& operator()(int i, int j) {
38  return m_(i, j);
39  };
40  inline int nrow() {
41  return m_.nrow();
42  };
43  inline int ncol() {
44  return m_.ncol();
45  };
46  inline double* mep(int i, int j) {
47  return m_.mep(i, j);
48  };
49  inline void getdiag(int d, Vect* out) {
50  m_.getdiag(d, out);
51  }
52  inline void setrow(int r, Vect* in) {
53  m_.setrow(r, in);
54  }
55  inline void setcol(int c, Vect* in) {
56  m_.setcol(c, in);
57  }
58  inline void setdiag(int d, Vect* in) {
59  m_.setdiag(d, in);
60  }
61  inline void setrow(int r, double in) {
62  m_.setrow(r, in);
63  }
64  inline void setcol(int c, double in) {
65  m_.setcol(c, in);
66  }
67  inline void setdiag(int d, double in) {
68  m_.setdiag(d, in);
69  }
70  inline void zero() {
71  m_.zero();
72  }
73  inline void ident() {
74  m_.ident();
75  }
76  inline void exp(Matrix* out) {
77  m_.exp(out);
78  }
79  inline void pow(int p, Matrix* out) {
80  m_.pow(p, out);
81  }
82  inline void inverse(Matrix* out) {
83  m_.inverse(out);
84  }
85  inline void solv(Vect* vin, Vect* vout, bool use_lu) {
86  m_.solv(vin, vout, use_lu);
87  }
88  inline void copy(Matrix* out) {
89  m_.copy(out);
90  }
91  inline void bcopy(Matrix* mout, int i0, int j0, int n0, int m0, int i1, int j1) {
92  m_.bcopy(mout, i0, j0, n0, m0, i1, j1);
93  }
94  inline void transpose(Matrix* out) {
95  m_.transpose(out);
96  }
97  inline void symmeigen(Matrix* mout, Vect* vout) {
98  m_.symmeigen(mout, vout);
99  }
100  inline void svd1(Matrix* u, Matrix* v, Vect* d) {
101  m_.svd1(u, v, d);
102  }
103  inline double det(int* e) {
104  return m_.det(e);
105  }
106  inline int sprowlen(int a) {
107  return m_.sprowlen(a);
108  }
109  inline double spgetrowval(int i, int jindx, int* j) {
110  return m_.spgetrowval(i, jindx, j);
111  }
112 
113 
114  private:
116 
117  // the map
118  std::vector<std::pair<int, int>> pm_{};
119  std::vector<double*> ptree_{};
120 
121  int compute_index(int, int, int, Node**, int*) const;
122 };
void add(double fac)
Definition: matrixmap.cpp:20
void svd1(Matrix *u, Matrix *v, Vect *d)
Definition: matrixmap.h:100
void mmfree()
Definition: matrixmap.cpp:13
void ident()
Definition: matrixmap.h:73
void muls(double a, Matrix *out)
Definition: matrixmap.h:25
void getdiag(int d, Vect *out)
Definition: matrixmap.h:49
void alloc(int, int, Node **, int *)
Definition: matrixmap.cpp:40
void inverse(Matrix *out)
Definition: matrixmap.h:82
void solv(Vect *vin, Vect *vout, bool use_lu)
Definition: matrixmap.h:85
int compute_index(int, int, int, Node **, int *) const
Definition: matrixmap.cpp:27
std::vector< std::pair< int, int > > pm_
Definition: matrixmap.h:118
void bcopy(Matrix *mout, int i0, int j0, int n0, int m0, int i1, int j1)
Definition: matrixmap.h:91
void setrow(int r, double in)
Definition: matrixmap.h:61
int nrow()
Definition: matrixmap.h:40
void setcol(int c, double in)
Definition: matrixmap.h:64
void exp(Matrix *out)
Definition: matrixmap.h:76
void getrow(int r, Vect *out)
Definition: matrixmap.h:31
void copy(Matrix *out)
Definition: matrixmap.h:88
void getcol(int c, Vect *out)
Definition: matrixmap.h:34
void pow(int p, Matrix *out)
Definition: matrixmap.h:79
double * mep(int i, int j)
Definition: matrixmap.h:46
void setdiag(int d, Vect *in)
Definition: matrixmap.h:58
void mulm(Matrix *in, Matrix *out)
Definition: matrixmap.h:22
MatrixMap(Matrix *)
Definition: matrixmap.cpp:10
std::vector< double * > ptree_
Definition: matrixmap.h:119
void mulv(Vect &in, Vect &out)
Definition: matrixmap.h:16
void transpose(Matrix *out)
Definition: matrixmap.h:94
int sprowlen(int a)
Definition: matrixmap.h:106
void setdiag(int d, double in)
Definition: matrixmap.h:67
Matrix & m_
Definition: matrixmap.h:115
double det(int *e)
Definition: matrixmap.h:103
void add(Matrix *a, Matrix *out)
Definition: matrixmap.h:28
void mulv(Vect *in, Vect *out)
Definition: matrixmap.h:19
int ncol()
Definition: matrixmap.h:43
void setrow(int r, Vect *in)
Definition: matrixmap.h:52
void zero()
Definition: matrixmap.h:70
void symmeigen(Matrix *mout, Vect *vout)
Definition: matrixmap.h:97
void setcol(int c, Vect *in)
Definition: matrixmap.h:55
double spgetrowval(int i, int jindx, int *j)
Definition: matrixmap.h:109
double & operator()(int i, int j)
Definition: matrixmap.h:37
virtual double det(int *e) const
Definition: ocmatrix.h:139
virtual void mulm(Matrix *in, Matrix *out) const
Definition: ocmatrix.h:70
virtual void transpose(Matrix *out)
Definition: ocmatrix.h:130
virtual int nrow() const
Definition: ocmatrix.h:48
virtual void ident()
Definition: ocmatrix.h:109
virtual void pow(int, Matrix *out) const
Definition: ocmatrix.h:115
virtual double spgetrowval(int i, int jindx, int *j) const
Definition: ocmatrix.h:147
virtual void setcol(int, Vect *in)
Definition: ocmatrix.h:91
virtual void getcol(int, Vect *out) const
Definition: ocmatrix.h:82
virtual void svd1(Matrix *u, Matrix *v, Vect *d) const
Definition: ocmatrix.h:136
virtual void exp(Matrix *out) const
Definition: ocmatrix.h:112
void mulv(Vect &in, Vect &out) const
Definition: ocmatrix.h:64
virtual int sprowlen(int) const
Definition: ocmatrix.h:143
virtual void copy(Matrix *out) const
Definition: ocmatrix.h:124
virtual void setrow(int, Vect *in)
Definition: ocmatrix.h:88
virtual void add(Matrix *, Matrix *out) const
Definition: ocmatrix.h:76
virtual int ncol() const
Definition: ocmatrix.h:52
double * mep(int i, int j)
Definition: ocmatrix.h:26
virtual void inverse(Matrix *out) const
Definition: ocmatrix.h:118
virtual void getdiag(int, Vect *out) const
Definition: ocmatrix.h:85
virtual void muls(double, Matrix *out) const
Definition: ocmatrix.h:73
virtual void solv(Vect *vin, Vect *vout, bool use_lu)
Definition: ocmatrix.h:121
virtual void zero()
Definition: ocmatrix.h:106
virtual void getrow(int, Vect *out) const
Definition: ocmatrix.h:79
virtual void setdiag(int, Vect *in)
Definition: ocmatrix.h:94
virtual void bcopy(Matrix *mout, int i0, int j0, int n0, int m0, int i1, int j1) const
Definition: ocmatrix.h:127
virtual void symmeigen(Matrix *mout, Vect *vout) const
Definition: ocmatrix.h:133
#define v
Definition: md1redef.h:11
#define i
Definition: md1redef.h:19
static int c
Definition: hoc.cpp:169
size_t p
size_t j
Definition: section.h:105