00001
00006 #ifndef _psi_bin_intder_3dmatrix_h_
00007 #define _psi_bin_intder_3dmatrix_h_
00008
00009 #include <libciomr/libciomr.h>
00010
00011 namespace psi { namespace intder {
00012
00013 class C3DMatrix
00014 {
00015 int nx, ny, nz;
00016 int size;
00017
00018 public:
00019 double *array;
00020
00021 C3DMatrix();
00022 C3DMatrix(int, int, int);
00023 ~C3DMatrix();
00024
00025 void Create(int, int, int);
00026
00027 inline double Get(int x, int y, int z)
00028 { return array[Position(x, y, z)]; }
00029 inline int Size(int x, int y, int z)
00030 { return size = Position(x, y, z); }
00031 inline void Set(int x, int y, int z, double value)
00032 { array[Position(x, y, z)] = value; }
00033 inline void PlusEq(int x, int y, int z, double value)
00034 { array[Position(x, y, z)] += value; }
00035 inline int Position(int x, int y, int z)
00036 { return (nz*ny*x + nz*y + z); }
00037 inline void Init(int x, int y, int z)
00038 { array = init_array(size); }
00039 };
00040
00041 class C4DMatrix
00042 {
00043 int nw, nx, ny, nz;
00044 int size;
00045
00046 public:
00047 double *array;
00048
00049 C4DMatrix();
00050 C4DMatrix(int, int, int, int);
00051 ~C4DMatrix();
00052
00053 void Create(int, int, int, int);
00054
00055 inline int Size(int w,int x, int y, int z)
00056 { return size = Position(w, x, y, z); }
00057 inline double Get(int w, int x, int y, int z)
00058 { return array[Position(w, x, y, z)]; }
00059 inline void Set(int w, int x, int y, int z, double value)
00060 { array[Position(w, x, y, z)] = value; }
00061 inline int Position(int w, int x, int y, int z)
00062 { return (nz*ny*nx*w + nz*ny*x + nz*y + z); }
00063 inline void Init(int w,int x, int y, int z)
00064 { array = init_array(size); }
00065 };
00066
00067 class C5DMatrix
00068 {
00069 int nv, nw, nx, ny, nz;
00070 int size;
00071
00072 public:
00073 double *array;
00074
00075 C5DMatrix();
00076 C5DMatrix(int, int, int, int, int);
00077 ~C5DMatrix();
00078
00079 void Create(int, int, int, int, int);
00080
00081 inline int Size(int v, int w,int x, int y, int z)
00082 { return size = Position(v, w, x, y, z); }
00083 inline double Get(int v, int w, int x, int y, int z)
00084 { return array[Position(v, w, x, y, z)]; }
00085 inline void Set(int v, int w, int x, int y, int z, double value)
00086 { array[Position(v, w, x, y, z)] = value; }
00087 inline int Position(int v, int w, int x, int y, int z)
00088 { return (nz*ny*nx*nw*v + nz*ny*nx*w + nz*ny*x + nz*y + z); }
00089 inline void Init(int v, int w, int x, int y, int z)
00090 { array = init_array(size); }
00091 };
00092
00093 }}
00094
00095 #endif // heaer guard