NEURON
ocmatrix.h
Go to the documentation of this file.
1 #ifndef ocmatrix_h
2 #define ocmatrix_h
3 
4 #ifndef MATRIXH
5 #define MAT void
6 #define SPMAT void
7 #define PERM void
8 #endif
9 
10 #include <vector>
11 using std::vector;
12 
13 struct Object;
14 class IvocVect;
15 class OcFullMatrix;
16 #define Vect IvocVect
17 #define Matrix OcMatrix
18 
19 class OcMatrix {
20  public:
21  enum { MFULL = 1, MSPARSE, MBAND };
22  static OcMatrix* instance(int nrow, int ncol, int type = MFULL);
23  virtual ~OcMatrix();
24 
25  virtual double* mep(int i, int j) {
26  unimp();
27  return NULL;
28  } // matrix element pointer
29  inline double& operator()(int i, int j) {
30  return *mep(i, j);
31  };
32 
33  virtual double getval(int i, int j) {
34  unimp();
35  return 0.;
36  }
37  virtual int nrow() {
38  unimp();
39  return 0;
40  }
41  virtual int ncol() {
42  unimp();
43  return 0;
44  }
45  virtual void resize(int, int) {
46  unimp();
47  }
48 
49  virtual void nonzeros(vector<int>& m, vector<int>& n);
50 
51  OcFullMatrix* full();
52 
53  inline void mulv(Vect& in, Vect& out) {
54  mulv(&in, &out);
55  };
56  virtual void mulv(Vect* in, Vect* out) {
57  unimp();
58  }
59  virtual void mulm(Matrix* in, Matrix* out) {
60  unimp();
61  }
62  virtual void muls(double, Matrix* out) {
63  unimp();
64  }
65  virtual void add(Matrix*, Matrix* out) {
66  unimp();
67  }
68  virtual void getrow(int, Vect* out) {
69  unimp();
70  }
71  virtual void getcol(int, Vect* out) {
72  unimp();
73  }
74  virtual void getdiag(int, Vect* out) {
75  unimp();
76  }
77  virtual void setrow(int, Vect* in) {
78  unimp();
79  }
80  virtual void setcol(int, Vect* in) {
81  unimp();
82  }
83  virtual void setdiag(int, Vect* in) {
84  unimp();
85  }
86  virtual void setrow(int, double in) {
87  unimp();
88  }
89  virtual void setcol(int, double in) {
90  unimp();
91  }
92  virtual void setdiag(int, double in) {
93  unimp();
94  }
95  virtual void zero() {
96  unimp();
97  }
98  virtual void ident() {
99  unimp();
100  }
101  virtual void exp(Matrix* out) {
102  unimp();
103  }
104  virtual void pow(int, Matrix* out) {
105  unimp();
106  }
107  virtual void inverse(Matrix* out) {
108  unimp();
109  }
110  virtual void solv(Vect* vin, Vect* vout, bool use_lu) {
111  unimp();
112  }
113  virtual void copy(Matrix* out) {
114  unimp();
115  }
116  virtual void bcopy(Matrix* mout, int i0, int j0, int n0, int m0, int i1, int j1) {
117  unimp();
118  }
119  virtual void transpose(Matrix* out) {
120  unimp();
121  }
122  virtual void symmeigen(Matrix* mout, Vect* vout) {
123  unimp();
124  }
125  virtual void svd1(Matrix* u, Matrix* v, Vect* d) {
126  unimp();
127  }
128  virtual double det(int* e) {
129  unimp();
130  return 0.0;
131  }
132  virtual int sprowlen(int) {
133  unimp();
134  return 0;
135  }
136  virtual double spgetrowval(int i, int jindx, int* j) {
137  unimp();
138  return 0.;
139  }
140 
141  void unimp();
143 
144  protected:
145  OcMatrix(int type);
146 
147  public:
149 
150  private:
151  int type_;
152 };
153 
154 extern Matrix* matrix_arg(int);
155 
156 class OcFullMatrix: public OcMatrix { // type 1
157  public:
158  OcFullMatrix(int, int);
159  virtual ~OcFullMatrix();
160 
161  virtual double* mep(int, int);
162  virtual double getval(int i, int j);
163  virtual int nrow();
164  virtual int ncol();
165  virtual void resize(int, int);
166 
167  virtual void mulv(Vect* in, Vect* out);
168  virtual void mulm(Matrix* in, Matrix* out);
169  virtual void muls(double, Matrix* out);
170  virtual void add(Matrix*, Matrix* out);
171  virtual void getrow(int, Vect* out);
172  virtual void getcol(int, Vect* out);
173  virtual void getdiag(int, Vect* out);
174  virtual void setrow(int, Vect* in);
175  virtual void setcol(int, Vect* in);
176  virtual void setdiag(int, Vect* in);
177  virtual void setrow(int, double in);
178  virtual void setcol(int, double in);
179  virtual void setdiag(int, double in);
180  virtual void zero();
181  virtual void ident();
182  virtual void exp(Matrix* out);
183  virtual void pow(int, Matrix* out);
184  virtual void inverse(Matrix* out);
185  virtual void solv(Vect* vin, Vect* vout, bool use_lu);
186  virtual void copy(Matrix* out);
187  virtual void bcopy(Matrix* mout, int i0, int j0, int n0, int m0, int i1, int j1);
188  virtual void transpose(Matrix* out);
189  virtual void symmeigen(Matrix* mout, Vect* vout);
190  virtual void svd1(Matrix* u, Matrix* v, Vect* d);
191  virtual double det(int* exponent);
192 
193  private:
194  MAT* m_;
197 };
198 
199 class OcSparseMatrix: public OcMatrix { // type 2
200  public:
201  OcSparseMatrix(int, int);
202  virtual ~OcSparseMatrix();
203 
204  virtual double* mep(int, int);
205  virtual double* pelm(int, int); // NULL if element does not exist
206  virtual int nrow();
207  virtual int ncol();
208  virtual double getval(int, int);
209  virtual void ident(void);
210  virtual void mulv(Vect* in, Vect* out);
211  virtual void solv(Vect* vin, Vect* vout, bool use_lu);
212 
213  virtual void setrow(int, Vect* in);
214  virtual void setcol(int, Vect* in);
215  virtual void setdiag(int, Vect* in);
216  virtual void setrow(int, double in);
217  virtual void setcol(int, double in);
218  virtual void setdiag(int, double in);
219 
220  virtual void nonzeros(vector<int>& m, vector<int>& n);
221 
222  virtual int sprowlen(int); // how many elements in row
223  virtual double spgetrowval(int i, int jindx, int* j);
224 
225  virtual void zero();
226 
227  private:
231 };
232 
233 #ifndef MATRIXH
234 #undef MAT
235 #undef SPMAT
236 #endif
237 
238 #endif
short type
Definition: cabvars.h:9
virtual void ident()
Definition: ocmatrix.cpp:275
PERM * lu_pivot_
Definition: ocmatrix.h:196
virtual int ncol()
Definition: ocmatrix.cpp:121
virtual void getdiag(int, Vect *out)
Definition: ocmatrix.cpp:184
virtual void exp(Matrix *out)
Definition: ocmatrix.cpp:279
virtual void pow(int, Matrix *out)
Definition: ocmatrix.cpp:283
virtual void setdiag(int, Vect *in)
Definition: ocmatrix.cpp:219
virtual void getcol(int, Vect *out)
Definition: ocmatrix.cpp:178
MAT * lu_factor_
Definition: ocmatrix.h:195
virtual void setrow(int, Vect *in)
Definition: ocmatrix.cpp:207
virtual void bcopy(Matrix *mout, int i0, int j0, int n0, int m0, int i1, int j1)
Definition: ocmatrix.cpp:152
virtual void setcol(int, Vect *in)
Definition: ocmatrix.cpp:213
MAT * m_
Definition: ocmatrix.h:194
virtual double det(int *exponent)
Definition: ocmatrix.cpp:311
virtual double * mep(int, int)
Definition: ocmatrix.cpp:112
virtual int nrow()
Definition: ocmatrix.cpp:118
virtual void transpose(Matrix *out)
Definition: ocmatrix.cpp:156
virtual double getval(int i, int j)
Definition: ocmatrix.cpp:115
virtual void solv(Vect *vin, Vect *vout, bool use_lu)
Definition: ocmatrix.cpp:291
virtual void getrow(int, Vect *out)
Definition: ocmatrix.cpp:172
virtual void copy(Matrix *out)
Definition: ocmatrix.cpp:148
virtual void zero()
Definition: ocmatrix.cpp:271
virtual void inverse(Matrix *out)
Definition: ocmatrix.cpp:287
virtual void svd1(Matrix *u, Matrix *v, Vect *d)
Definition: ocmatrix.cpp:166
virtual void add(Matrix *, Matrix *out)
Definition: ocmatrix.cpp:144
virtual void symmeigen(Matrix *mout, Vect *vout)
Definition: ocmatrix.cpp:160
virtual void muls(double, Matrix *out)
Definition: ocmatrix.cpp:140
virtual void resize(int, int)
Definition: ocmatrix.cpp:125
virtual void mulv(Vect *in, Vect *out)
Definition: ocmatrix.cpp:129
virtual void mulm(Matrix *in, Matrix *out)
Definition: ocmatrix.cpp:136
virtual ~OcFullMatrix()
Definition: ocmatrix.cpp:105
OcFullMatrix(int, int)
Definition: ocmatrix.cpp:99
Object * obj_
Definition: ocmatrix.h:148
virtual double getval(int i, int j)
Definition: ocmatrix.h:33
virtual void mulm(Matrix *in, Matrix *out)
Definition: ocmatrix.h:59
virtual void mulv(Vect *in, Vect *out)
Definition: ocmatrix.h:56
virtual void transpose(Matrix *out)
Definition: ocmatrix.h:119
void mulv(Vect &in, Vect &out)
Definition: ocmatrix.h:53
virtual void nonzeros(vector< int > &m, vector< int > &n)
Definition: ocmatrix.cpp:64
virtual int ncol()
Definition: ocmatrix.h:41
virtual void getrow(int, Vect *out)
Definition: ocmatrix.h:68
virtual void ident()
Definition: ocmatrix.h:98
@ MFULL
Definition: ocmatrix.h:21
@ MSPARSE
Definition: ocmatrix.h:21
@ MBAND
Definition: ocmatrix.h:21
virtual void bcopy(Matrix *mout, int i0, int j0, int n0, int m0, int i1, int j1)
Definition: ocmatrix.h:116
virtual void setcol(int, Vect *in)
Definition: ocmatrix.h:80
virtual void inverse(Matrix *out)
Definition: ocmatrix.h:107
virtual void resize(int, int)
Definition: ocmatrix.h:45
int type_
Definition: ocmatrix.h:151
virtual void getdiag(int, Vect *out)
Definition: ocmatrix.h:74
virtual double * mep(int i, int j)
Definition: ocmatrix.h:25
virtual void setcol(int, double in)
Definition: ocmatrix.h:89
virtual double det(int *e)
Definition: ocmatrix.h:128
static OcMatrix * instance(int nrow, int ncol, int type=MFULL)
Definition: ocmatrix.cpp:50
OcFullMatrix * full()
Definition: ocmatrix.cpp:92
OcMatrix(int type)
Definition: ocmatrix.cpp:44
void unimp()
Definition: ocmatrix.cpp:60
virtual void svd1(Matrix *u, Matrix *v, Vect *d)
Definition: ocmatrix.h:125
virtual void exp(Matrix *out)
Definition: ocmatrix.h:101
virtual void setrow(int, double in)
Definition: ocmatrix.h:86
virtual void getcol(int, Vect *out)
Definition: ocmatrix.h:71
virtual void setdiag(int, double in)
Definition: ocmatrix.h:92
virtual void setrow(int, Vect *in)
Definition: ocmatrix.h:77
double & operator()(int i, int j)
Definition: ocmatrix.h:29
virtual void muls(double, Matrix *out)
Definition: ocmatrix.h:62
virtual ~OcMatrix()
Definition: ocmatrix.cpp:48
Object ** temp_objvar()
virtual void copy(Matrix *out)
Definition: ocmatrix.h:113
virtual void symmeigen(Matrix *mout, Vect *vout)
Definition: ocmatrix.h:122
virtual void solv(Vect *vin, Vect *vout, bool use_lu)
Definition: ocmatrix.h:110
virtual void add(Matrix *, Matrix *out)
Definition: ocmatrix.h:65
virtual void zero()
Definition: ocmatrix.h:95
virtual int nrow()
Definition: ocmatrix.h:37
virtual int sprowlen(int)
Definition: ocmatrix.h:132
virtual void setdiag(int, Vect *in)
Definition: ocmatrix.h:83
virtual void pow(int, Matrix *out)
Definition: ocmatrix.h:104
virtual double spgetrowval(int i, int jindx, int *j)
Definition: ocmatrix.h:136
virtual void setrow(int, Vect *in)
Definition: ocmatrix.cpp:443
virtual double * mep(int, int)
Definition: ocmatrix.cpp:390
virtual double getval(int, int)
Definition: ocmatrix.cpp:407
virtual void zero()
Definition: ocmatrix.cpp:403
virtual void nonzeros(vector< int > &m, vector< int > &n)
Definition: ocmatrix.cpp:77
virtual double spgetrowval(int i, int jindx, int *j)
Definition: ocmatrix.cpp:556
virtual void mulv(Vect *in, Vect *out)
Definition: ocmatrix.cpp:416
virtual int sprowlen(int)
Definition: ocmatrix.cpp:552
SPMAT * lu_factor_
Definition: ocmatrix.h:229
virtual void solv(Vect *vin, Vect *vout, bool use_lu)
Definition: ocmatrix.cpp:423
virtual int ncol()
Definition: ocmatrix.cpp:413
OcSparseMatrix(int, int)
Definition: ocmatrix.cpp:360
SPMAT * m_
Definition: ocmatrix.h:228
virtual int nrow()
Definition: ocmatrix.cpp:410
virtual void setcol(int, Vect *in)
Definition: ocmatrix.cpp:463
virtual void setdiag(int, Vect *in)
Definition: ocmatrix.cpp:483
virtual double * pelm(int, int)
Definition: ocmatrix.cpp:380
virtual void ident(void)
Definition: ocmatrix.cpp:533
virtual ~OcSparseMatrix()
Definition: ocmatrix.cpp:371
PERM * lu_pivot_
Definition: ocmatrix.h:230
#define v
Definition: md1redef.h:4
#define i
Definition: md1redef.h:12
int const size_t const size_t n
Definition: nrngsl.h:11
size_t j
Matrix * matrix_arg(int)
Definition: matrix.cpp:45
#define Vect
Definition: ocmatrix.h:16
#define Matrix
Definition: ocmatrix.h:17
#define e
Definition: passive0.cpp:22
#define NULL
Definition: sptree.h:16
Definition: matrix.h:73
Definition: hocdec.h:227
Definition: matrix.h:87
Definition: sparse.h:54