00001 /* Functor class for sum factorization 00002 */ 00003 00004 #ifndef sumfact_hh 00005 #define sumfact_hh 00006 00007 #include "toolbox/array.hh" 00008 00009 namespace concepts { 00010 00011 // forward declarations 00012 template<typename T> 00013 class ElementMatrix; 00014 00015 class InOutParameters; 00016 } // namespace concepts 00017 00018 namespace hp3D { 00019 00020 using concepts::Real; 00021 00022 // forward declarations 00023 template<typename F> 00024 class ShapeFunction3D; 00025 00026 // ****************************************************** SumFactorization ** 00027 00040 class SumFactorization { 00041 public: 00050 template<typename T> 00051 void operator()(concepts::ElementMatrix<Real>& em, 00052 const concepts::Array<Real>& jacobian, T* coeff, 00053 const ShapeFunction3D<Real>& u, 00054 const ShapeFunction3D<Real>& v); 00055 00082 static void setTimings(concepts::InOutParameters* timings); 00086 static bool timings(); 00088 private: 00090 concepts::Array<Real> sumfact1_, sumfact2_; 00091 00093 static concepts::InOutParameters* timings_; 00095 static uint timeCntr_; 00096 }; 00097 00098 } // namespace hp3D 00099 00100 00101 #endif // sumfact_hh