dune-localfunctions  2.2.0
q2localcoefficients.hh
Go to the documentation of this file.
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