dune-localfunctions
2.2.0
|
00001 // -*- tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- 00002 // vi: set et ts=2 sw=2 sts=2: 00003 #ifndef DUNE_Q2_LOCALCOEFFICIENTS_HH 00004 #define DUNE_Q2_LOCALCOEFFICIENTS_HH 00005 00006 #include <cstddef> 00007 #include <vector> 00008 00009 #include <dune/common/exceptions.hh> 00010 00011 #include <dune/localfunctions/common/localkey.hh> 00012 00013 namespace Dune 00014 { 00015 00024 template <int dim> 00025 class Q2LocalCoefficients 00026 { 00027 public: 00029 Q2LocalCoefficients () : li(size()) 00030 { 00031 switch (dim) { 00032 00033 case 1: { 00034 li[0] = LocalKey(0,1,0); // left vertex 00035 li[1] = LocalKey(0,0,0); // element 00036 li[2] = LocalKey(1,1,0); // right vertex 00037 break; 00038 } 00039 00040 case 2: { 00041 00042 li[0] = LocalKey(0,2,0); 00043 li[1] = LocalKey(2,1,0); 00044 li[2] = LocalKey(1,2,0); 00045 li[3] = LocalKey(0,1,0); 00046 li[4] = LocalKey(0,0,0); 00047 li[5] = LocalKey(1,1,0); 00048 li[6] = LocalKey(2,2,0); 00049 li[7] = LocalKey(3,1,0); 00050 li[8] = LocalKey(3,2,0); 00051 00052 break; 00053 } 00054 00055 case 3: { 00056 00057 li[ 0] = LocalKey(0,3,0); 00058 li[ 1] = LocalKey(6,2,0); 00059 li[ 2] = LocalKey(1,3,0); 00060 li[ 3] = LocalKey(4,2,0); 00061 li[ 4] = LocalKey(4,1,0); 00062 li[ 5] = LocalKey(5,2,0); 00063 li[ 6] = LocalKey(2,3,0); 00064 li[ 7] = LocalKey(7,2,0); 00065 li[ 8] = LocalKey(3,3,0); 00066 00067 li[ 9] = LocalKey(0,2,0); 00068 li[10] = LocalKey(2,1,0); 00069 li[11] = LocalKey(1,2,0); 00070 li[12] = LocalKey(0,1,0); 00071 li[13] = LocalKey(0,0,0); 00072 li[14] = LocalKey(1,1,0); 00073 li[15] = LocalKey(2,2,0); 00074 li[16] = LocalKey(3,1,0); 00075 li[17] = LocalKey(3,2,0); 00076 00077 li[18] = LocalKey(4,3,0); 00078 li[19] = LocalKey(10,2,0); 00079 li[20] = LocalKey(5,3,0); 00080 li[21] = LocalKey(8,2,0); 00081 li[22] = LocalKey(5,1,0); 00082 li[23] = LocalKey(9,2,0); 00083 li[24] = LocalKey(6,3,0); 00084 li[25] = LocalKey(11,2,0); 00085 li[26] = LocalKey(7,3,0); 00086 00087 break; 00088 } 00089 default: 00090 DUNE_THROW(NotImplemented, "Q2LocalCoefficients for dim==" << dim); 00091 } 00092 } 00093 00095 std::size_t size () const 00096 { 00097 int size = 1; 00098 for (int i=0; i<dim; i++) 00099 size *= 3; 00100 return size; 00101 } 00102 00104 const LocalKey& localKey (std::size_t i) const 00105 { 00106 return li[i]; 00107 } 00108 00109 private: 00110 std::vector<LocalKey> li; 00111 }; 00112 00113 } 00114 00115 #endif