00001 #ifndef __FE_MAT_H_
00002 #define __FE_MAT_H_
00003
00004 #include "petscda.h"
00005 #include "oda.h"
00006
00007 namespace ot {
00008 namespace fem {
00009
00010 class feMat {
00011 public:
00013 enum daType {
00014 PETSC, OCT
00015 };
00016
00018 feMat() { };
00019 feMat(daType da) {
00020 #ifdef __DEBUG__
00021 assert ( ( da == PETSC ) || ( da == OCT ) );
00022 #endif
00023 m_daType = da;
00024
00025
00026 }
00027 ~feMat() {
00028
00029 }
00030
00031 void setDA (_p_DA* da) { m_DA = da; }
00032 void setDA (ot::DA* da) { m_octDA = da; }
00033
00034 _p_DA* getDA() { return m_DA; }
00035 ot::DA* getOctDA() { return m_octDA; }
00049 virtual bool MatVec(Vec _in, Vec _out, double scale=1.0) = 0;
00050 virtual bool MatGetDiagonal(Vec _diag, double scale=1.0) = 0;
00051
00052
00053 void setProblemDimensions(double x, double y, double z) {
00054 m_dLx = x;
00055 m_dLy = y;
00056 m_dLz = z;
00057 }
00058 protected:
00059
00060 daType m_daType;
00061
00062 _p_DA* m_DA;
00063 ot::DA* m_octDA;
00065 double m_dLx;
00066 double m_dLy;
00067 double m_dLz;
00068 };
00069
00070 }
00071 }
00072
00073 #endif
00074