grid_matrix.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #if !defined(_GRID_MATRIX_H_)
00028 #define _GRID_MATRIX_H_ 1
00029
00030 #include "sparse_matrix.h"
00031
00032 namespace Dft {
00035 class Matrix {
00036 public:
00037 virtual ergo_real at(int row, int col) const = 0;
00038 virtual bool isSparse() const = 0;
00039 virtual const SparseMatrix* asSparse() const = 0;
00040 virtual const ergo_real* asFull() const = 0;
00041 virtual ~Matrix() {}
00042 };
00043
00044 class FullMatrix {
00045 public:
00046 ergo_real* mat;
00047 int nbast;
00048 bool owned;
00049 explicit FullMatrix(int nbast_)
00050 : mat(new ergo_real[nbast_*nbast_]), nbast(nbast_), owned(true)
00051 {
00052 for(int i= nbast*nbast-1; i >=0; --i) mat[i] = 0.0;
00053 }
00054 FullMatrix(ergo_real *m, int nbast_)
00055 : mat(m), nbast(nbast_), owned(false)
00056 {
00057 }
00059 FullMatrix(const ergo_real *m, int nbast_)
00060 : mat( (ergo_real*)(m)), nbast(nbast_), owned(false)
00061 {
00062 }
00063
00064 ~FullMatrix() { if (owned && mat) delete []mat; }
00065 void add(int row, int col, ergo_real val)
00066 {
00067 mat[row + col*nbast] += val;
00068 }
00069 ergo_real at(int row, int col) const
00070 {
00071 return mat[row + col*nbast];
00072 }
00073 };
00074
00075 };
00076
00077 #endif