diff --git a/Solver/functionSpace.h b/Solver/functionSpace.h index 49eda185ce8bde8faec71d02a1ce140e4bec7e44..c0faed450bf061c7e8a8764b428999c0e172874b 100644 --- a/Solver/functionSpace.h +++ b/Solver/functionSpace.h @@ -8,6 +8,7 @@ #include "SVector3.h" #include "STensor3.h" +#include "STensor33.h" #include "STensor43.h" #include <vector> #include <iterator> @@ -23,6 +24,7 @@ template<class T> struct TensorialTraits typedef T ValType; typedef T GradType[3]; typedef T HessType[3][3]; + typedef T ThirdDevType[3][3][3]; /* typedef SVoid DivType; typedef SVoid CurlType;*/ }; @@ -33,6 +35,7 @@ template<> struct TensorialTraits<double> typedef SVector3 GradType; typedef STensor3 HessType; typedef double TensProdType; + typedef STensor33 ThirdDevType; /* typedef SVoid DivType; typedef SVoid CurlType;*/ }; @@ -43,6 +46,7 @@ template<> struct TensorialTraits<SVector3> typedef STensor3 GradType; typedef STensor3 HessType; typedef STensor3 TensProdType; + typedef STensor3 ThirdDevType; // typedef double DivType; // typedef SVector3 CurlType; }; @@ -73,12 +77,16 @@ class FunctionSpace : public FunctionSpaceBase typedef typename TensorialTraits<T>::ValType ValType; typedef typename TensorialTraits<T>::GradType GradType; typedef typename TensorialTraits<T>::HessType HessType; + typedef typename TensorialTraits<T>::ThirdDevType ThirdDevType; virtual void f(MElement *ele, double u, double v, double w, std::vector<ValType> &vals) = 0; virtual void fuvw(MElement *ele, double u, double v, double w, std::vector<ValType> &vals) {} // should return to pure virtual once all is done. virtual void gradf(MElement *ele, double u, double v, double w, std::vector<GradType> &grads) = 0; virtual void gradfuvw(MElement *ele, double u, double v, double w, std::vector<GradType> &grads) {} // should return to pure virtual once all is done. virtual void hessfuvw(MElement *ele, double u, double v, double w, std::vector<HessType> &hess) = 0; virtual void hessf(MElement *ele, double u, double v, double w,std::vector<HessType> &hess) {} //need to high order fem + virtual void thirdDevfuvw(MElement *ele, double u, double v, double w,std::vector<ThirdDevType> &third){}; //need to high order fem + virtual void thirdDevf(MElement *ele, double u, double v, double w,std::vector<ThirdDevType> &third){}; //need to high order fem + virtual int getNumKeys(MElement *ele) = 0; // if one needs the number of dofs virtual void getKeys(MElement *ele, std::vector<Dof> &keys) = 0; };