prismp1localbasis.hh

Go to the documentation of this file.
00001 // -*- tab-width: 4; indent-tabs-mode: nil -*-
00002 #ifndef DUNE_PRISM_P1_LOCALBASIS_HH
00003 #define DUNE_PRISM_P1_LOCALBASIS_HH
00004 
00005 #include <dune/common/fmatrix.hh>
00006 
00007 #include <dune/localfunctions/common/localbasis.hh>
00008 
00009 namespace Dune
00010 {
00021   template<class D, class R>
00022   class PrismP1LocalBasis
00023   {
00024   public:
00026         typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,1,Dune::FieldVector<R,1>,
00027                                                            Dune::FieldMatrix<R,1,3> > Traits;
00028 
00030     unsigned int size () const
00031     {
00032       return 6;
00033     }
00034 
00036     inline void evaluateFunction (const typename Traits::DomainType& in,
00037                                   std::vector<typename Traits::RangeType>& out) const
00038     { 
00039       out.resize(6);
00040       out[0] = (1.0-in[0]-in[1])*(1.0-in[2]);
00041       out[1] = in[0]*(1-in[2]);
00042       out[2] = in[1]*(1-in[2]);
00043       out[3] = in[2]*(1.0-in[0]-in[1]);
00044       out[4] = in[0]*in[2];
00045       out[5] = in[1]*in[2];
00046     }
00047 
00049     inline void 
00050     evaluateJacobian (const typename Traits::DomainType& in,         // position
00051                       std::vector<typename Traits::JacobianType>& out) const      // return value
00052     {  
00053       out.resize(6);
00054       out[0][0][0] = in[2]-1; out[0][0][1] = in[2]-1; out[0][0][2] = in[0]+in[1]-1;  // basis function 0
00055       out[1][0][0] = 1-in[2]; out[1][0][1] = 0;       out[1][0][2] = -in[0];         // basis function 1
00056       out[2][0][0] = 0;       out[2][0][1] = 1-in[2]; out[2][0][2] = -in[1];         // basis function 2
00057       out[3][0][0] = -in[2];  out[3][0][1] = -in[2];  out[3][0][2] = 1-in[0]-in[1];  // basis function 3
00058       out[4][0][0] = in[2];   out[4][0][1] = 0;       out[4][0][2] = in[0];          // basis function 4
00059       out[5][0][0] = 0;       out[5][0][1] = in[2];   out[5][0][2] = in[1];          // basis function 5
00060     }
00061 
00063     unsigned int order () const
00064     {
00065       return 1;
00066     }
00067   };
00068 }
00069 #endif
Generated on Sat Apr 24 11:15:35 2010 for dune-localfunctions by  doxygen 1.6.3