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) {unimp(); return NULL;} //matrix element pointer
26  inline double& operator() (int i, int j) {return *mep(i, j);};
27 
28  virtual double getval(int i, int j) { unimp(); return 0.; }
29  virtual int nrow() {unimp(); return 0;}
30  virtual int ncol() {unimp(); return 0;}
31  virtual void resize(int, int) {unimp();}
32 
33  virtual void nonzeros(vector<int>& m, vector<int>& n);
34 
35  OcFullMatrix* full();
36 
37  inline void mulv(Vect& in, Vect& out) {mulv(&in, &out);};
38  virtual void mulv(Vect* in, Vect* out){unimp();}
39  virtual void mulm(Matrix* in, Matrix* out){unimp();}
40  virtual void muls(double, Matrix* out){unimp();}
41  virtual void add(Matrix*, Matrix* out){unimp();}
42  virtual void getrow(int, Vect* out){unimp();}
43  virtual void getcol(int, Vect* out){unimp();}
44  virtual void getdiag(int, Vect* out){unimp();}
45  virtual void setrow(int, Vect* in){unimp();}
46  virtual void setcol(int, Vect* in){unimp();}
47  virtual void setdiag(int, Vect* in){unimp();}
48  virtual void setrow(int, double in){unimp();}
49  virtual void setcol(int, double in){unimp();}
50  virtual void setdiag(int, double in){unimp();}
51  virtual void zero(){unimp();}
52  virtual void ident(){unimp();}
53  virtual void exp(Matrix* out){unimp();}
54  virtual void pow(int, Matrix* out){unimp();}
55  virtual void inverse(Matrix* out){unimp();}
56  virtual void solv(Vect* vin, Vect* vout, bool use_lu) {unimp();}
57  virtual void copy(Matrix* out){unimp();}
58  virtual void bcopy(Matrix* mout, int i0, int j0, int n0, int m0, int i1, int j1){unimp();}
59  virtual void transpose(Matrix* out){unimp();}
60  virtual void symmeigen(Matrix* mout, Vect* vout){unimp();}
61  virtual void svd1(Matrix* u, Matrix* v, Vect* d){unimp();}
62  virtual double det(int* e){unimp(); return 0.0;}
63  virtual int sprowlen(int){unimp(); return 0;}
64  virtual double spgetrowval(int i, int jindx, int* j){unimp(); return 0.;}
65 
66  void unimp();
67  Object** temp_objvar();
68 protected:
69  OcMatrix(int type);
70 public:
72 private:
73  int type_;
74 };
75 
76 extern Matrix* matrix_arg(int);
77 
78 class OcFullMatrix : public OcMatrix { // type 1
79 public:
80  OcFullMatrix(int, int);
81  virtual ~OcFullMatrix();
82 
83  virtual double* mep(int, int);
84  virtual double getval(int i, int j);
85  virtual int nrow();
86  virtual int ncol();
87  virtual void resize(int, int);
88 
89  virtual void mulv(Vect* in, Vect* out);
90  virtual void mulm(Matrix* in, Matrix* out);
91  virtual void muls(double, Matrix* out);
92  virtual void add(Matrix*, Matrix* out);
93  virtual void getrow(int, Vect* out);
94  virtual void getcol(int, Vect* out);
95  virtual void getdiag(int, Vect* out);
96  virtual void setrow(int, Vect* in);
97  virtual void setcol(int, Vect* in);
98  virtual void setdiag(int, Vect* in);
99  virtual void setrow(int, double in);
100  virtual void setcol(int, double in);
101  virtual void setdiag(int, double in);
102  virtual void zero();
103  virtual void ident();
104  virtual void exp(Matrix* out);
105  virtual void pow(int, Matrix* out);
106  virtual void inverse(Matrix* out);
107  virtual void solv(Vect* vin, Vect* vout, bool use_lu);
108  virtual void copy(Matrix* out);
109  virtual void bcopy(Matrix* mout, int i0, int j0, int n0, int m0, int i1, int j1);
110  virtual void transpose(Matrix* out);
111  virtual void symmeigen(Matrix* mout, Vect* vout);
112  virtual void svd1(Matrix* u, Matrix* v, Vect* d);
113  virtual double det(int* exponent);
114 private:
115  MAT* m_;
118 };
119 
120 class OcSparseMatrix : public OcMatrix { // type 2
121 public:
122  OcSparseMatrix(int, int);
123  virtual ~OcSparseMatrix();
124 
125  virtual double* mep(int, int);
126  virtual double* pelm(int, int); // NULL if element does not exist
127  virtual int nrow();
128  virtual int ncol();
129  virtual double getval(int, int);
130  virtual void ident(void);
131  virtual void mulv(Vect* in, Vect* out);
132  virtual void solv(Vect* vin, Vect* vout, bool use_lu);
133 
134  virtual void setrow(int, Vect* in);
135  virtual void setcol(int, Vect* in);
136  virtual void setdiag(int, Vect* in);
137  virtual void setrow(int, double in);
138  virtual void setcol(int, double in);
139  virtual void setdiag(int, double in);
140 
141  virtual void nonzeros(vector<int>& m, vector<int>& n);
142 
143  virtual int sprowlen(int); // how many elements in row
144  virtual double spgetrowval(int i, int jindx, int* j);
145 
146  virtual void zero();
147 
148 private:
152 };
153 
154 #ifndef MATRIXH
155 #undef MAT
156 #undef SPMAT
157 #endif
158 
159 #endif
virtual void mulm(Matrix *in, Matrix *out)
Definition: ocmatrix.h:39
virtual void copy(Matrix *out)
Definition: ocmatrix.h:57
virtual void pow(int, Matrix *out)
Definition: ocmatrix.h:54
virtual void getcol(int, Vect *out)
Definition: ocmatrix.h:43
short type
Definition: cabvars.h:10
Object * obj_
Definition: ocmatrix.h:71
virtual void inverse(Matrix *out)
Definition: ocmatrix.h:55
virtual void svd1(Matrix *u, Matrix *v, Vect *d)
Definition: ocmatrix.h:61
MAT * lu_factor_
Definition: ocmatrix.h:116
virtual int ncol()
Definition: ocmatrix.h:30
void unimp()
Definition: ocmatrix.cpp:57
#define Vect
Definition: ocmatrix.h:16
#define v
Definition: md1redef.h:4
virtual void getdiag(int, Vect *out)
Definition: ocmatrix.h:44
virtual double * mep(int i, int j)
Definition: ocmatrix.h:25
virtual void setrow(int, double in)
Definition: ocmatrix.h:48
#define e
Definition: passive0.cpp:24
virtual void transpose(Matrix *out)
Definition: ocmatrix.h:59
virtual void exp(Matrix *out)
Definition: ocmatrix.h:53
static OcMatrix * instance(int nrow, int ncol, int type=MFULL)
Definition: ocmatrix.cpp:47
virtual void symmeigen(Matrix *mout, Vect *vout)
Definition: ocmatrix.h:60
virtual void mulv(Vect *in, Vect *out)
Definition: ocmatrix.h:38
void mulv(Vect &in, Vect &out)
Definition: ocmatrix.h:37
virtual void setdiag(int, Vect *in)
Definition: ocmatrix.h:47
Definition: sparse.h:54
int const size_t const size_t n
Definition: nrngsl.h:12
OcFullMatrix * full()
Definition: ocmatrix.cpp:89
virtual double getval(int i, int j)
Definition: ocmatrix.h:28
Object ** temp_objvar()
SPMAT * lu_factor_
Definition: ocmatrix.h:150
int type_
Definition: ocmatrix.h:73
virtual int sprowlen(int)
Definition: ocmatrix.h:63
virtual void bcopy(Matrix *mout, int i0, int j0, int n0, int m0, int i1, int j1)
Definition: ocmatrix.h:58
virtual void setcol(int, double in)
Definition: ocmatrix.h:49
virtual double spgetrowval(int i, int jindx, int *j)
Definition: ocmatrix.h:64
size_t j
virtual void ident()
Definition: ocmatrix.h:52
virtual double det(int *e)
Definition: ocmatrix.h:62
SPMAT * m_
Definition: ocmatrix.h:149
virtual void solv(Vect *vin, Vect *vout, bool use_lu)
Definition: ocmatrix.h:56
virtual void getrow(int, Vect *out)
Definition: ocmatrix.h:42
virtual void setcol(int, Vect *in)
Definition: ocmatrix.h:46
double & operator()(int i, int j)
Definition: ocmatrix.h:26
virtual void setdiag(int, double in)
Definition: ocmatrix.h:50
PERM * lu_pivot_
Definition: ocmatrix.h:151
OcMatrix(int type)
Definition: ocmatrix.cpp:44
Definition: hocdec.h:226
#define i
Definition: md1redef.h:12
virtual ~OcMatrix()
Definition: ocmatrix.cpp:45
MAT * m_
Definition: ocmatrix.h:115
virtual void zero()
Definition: ocmatrix.h:51
Matrix * matrix_arg(int)
Definition: matrix.cpp:45
virtual void add(Matrix *, Matrix *out)
Definition: ocmatrix.h:41
virtual int nrow()
Definition: ocmatrix.h:29
virtual void setrow(int, Vect *in)
Definition: ocmatrix.h:45
#define Matrix
Definition: ocmatrix.h:17
virtual void muls(double, Matrix *out)
Definition: ocmatrix.h:40
Definition: matrix.h:87
virtual void nonzeros(vector< int > &m, vector< int > &n)
Definition: ocmatrix.cpp:61
return NULL
Definition: cabcode.cpp:461
Definition: matrix.h:73
PERM * lu_pivot_
Definition: ocmatrix.h:117
virtual void resize(int, int)
Definition: ocmatrix.h:31