prismp2localbasis.hh

Go to the documentation of this file.
00001 // -*- tab-width: 4; indent-tabs-mode: nil -*-
00002 #ifndef DUNE_PRISM_P2_LOCALBASIS_HH
00003 #define DUNE_PRISM_P2_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 PrismP2LocalBasis
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 18;
00033     }
00034 
00036     inline void evaluateFunction (const typename Traits::DomainType& in,
00037                                   std::vector<typename Traits::RangeType>& out) const
00038     { 
00039         out.resize(18);
00040         
00041         
00042         int coeff;
00043         R a[2], b[2], c[2], a1d, b1d, c1d;
00044 
00045 
00046         // lower triangle:
00047         coeff= 2;
00048         a[0] = 1;
00049         a[1] = 0.5;
00050         b[0] = -1;
00051         b[1] = -1;
00052         c[0] = -1;
00053         c[1] = -1;
00054         a1d  = 1;
00055         b1d  = -3;
00056         c1d  = 2;
00057         out[0] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d);
00058 
00059         
00060         coeff= 2;
00061         a[0] = 0;
00062         a[1] = -0.5;
00063         b[0] = 1;
00064         b[1] = 0;
00065         c[0] = 1;
00066         c[1] = 0;
00067         a1d  = 1;
00068         b1d  = -3;
00069         c1d  = 2;
00070         out[1] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d);
00071 
00072         
00073         coeff= 2;
00074         a[0] = 0;
00075         a[1] = -0.5;
00076         b[0] = 0;
00077         b[1] = 1;
00078         c[0] = 0;
00079         c[1] = 1;
00080         a1d  = 1;
00081         b1d  = -3;
00082         c1d  = 2;
00083         out[2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d);
00084            
00085         //upper triangle
00086         coeff= 2;
00087         a[0] = 1;
00088         a[1] = 0.5;
00089         b[0] = -1;
00090         b[1] = -1;
00091         c[0] = -1;
00092         c[1] = -1;
00093         a1d  = 0;
00094         b1d  = -1;
00095         c1d  = 2;
00096         out[3] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d);
00097 
00098         
00099         coeff= 2;
00100         a[0] = 0;
00101         a[1] = -0.5;
00102         b[0] = 1;
00103         b[1] = 0;
00104         c[0] = 1;
00105         c[1] = 0;
00106         a1d  = 0;
00107         b1d  = -1;
00108         c1d  = 2;
00109         out[4] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d);
00110         
00111         
00112         coeff= 2;
00113         a[0] = 0;
00114         a[1] = -0.5;
00115         b[0] = 0;
00116         b[1] = 1;
00117         c[0] = 0;
00118         c[1] = 1;
00119         a1d  = 0;
00120         b1d  = -1;
00121         c1d  = 2;
00122         out[5] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d);
00123                
00124         // vertical edges
00125         coeff= 2;
00126         a[0] = 1;
00127         a[1] = 0.5;
00128         b[0] = -1;
00129         b[1] = -1;
00130         c[0] = -1;
00131         c[1] = -1;
00132         a1d  = 0;
00133         b1d  = 4;
00134         c1d  = -4;
00135         out[6] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d);
00136 
00137         
00138         coeff= 2;
00139         a[0] = 0;
00140         a[1] = -0.5;
00141         b[0] = 1;
00142         b[1] = 0;
00143         c[0] = 1;
00144         c[1] = 0;
00145         a1d  = 0;
00146         b1d  = 4;
00147         c1d  = -4;
00148         out[7] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d);
00149 
00150         
00151         coeff= 2;
00152         a[0] = 0;
00153         a[1] = -0.5;
00154         b[0] = 0;
00155         b[1] = 1;
00156         c[0] = 0;
00157         c[1] = 1;
00158         a1d  = 0;
00159         b1d  = 4;
00160         c1d  = -4;
00161         out[8] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d);
00162            
00163         // lower triangle edges
00164         coeff= 4;
00165         a[0] = 0;
00166         a[1] = 1;
00167         b[0] = 1;
00168         b[1] = 0;
00169         c[0] = -1;
00170         c[1] = -1;
00171         a1d  = 1;
00172         b1d  = -3;
00173         c1d  = 2;
00174         out[9] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d);
00175 
00176         
00177         coeff= 4;
00178         a[0] = 0;
00179         a[1] = 1;
00180         b[0] = 0;
00181         b[1] = 1;
00182         c[0] = -1;
00183         c[1] = -1;
00184         a1d  = 1;
00185         b1d  = -3;
00186         c1d  = 2;
00187         out[10] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d);
00188         
00189         
00190         coeff= 4;
00191         a[0] = 0;
00192         a[1] = 0;
00193         b[0] = 1;
00194         b[1] = 0;
00195         c[0] = 0;
00196         c[1] = 1;
00197         a1d  = 1;
00198         b1d  = -3;
00199         c1d  = 2;
00200         out[11] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d);
00201                
00202         // upper triangle edges
00203         coeff= 4;
00204         a[0] = 0;
00205         a[1] = 1;
00206         b[0] = 1;
00207         b[1] = 0;
00208         c[0] = -1;
00209         c[1] = -1;
00210         a1d  = 0;
00211         b1d  = -1;
00212         c1d  = 2;
00213         out[12] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d);
00214 
00215         
00216         coeff= 4;
00217         a[0] = 0;
00218         a[1] = 1;
00219         b[0] = 0;
00220         b[1] = 1;
00221         c[0] = -1;
00222         c[1] = -1;
00223         a1d  = 0;
00224         b1d  = -1;
00225         c1d  = 2;
00226         out[13] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d);
00227 
00228         
00229         coeff= 4;
00230         a[0] = 0;
00231         a[1] = 0;
00232         b[0] = 1;
00233         b[1] = 0;
00234         c[0] = 0;
00235         c[1] = 1;
00236         a1d  = 0;
00237         b1d  = -1;
00238         c1d  = 2;
00239         out[14] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d);
00240            
00241         // quadrilateral sides
00242         coeff= 4;
00243         a[0] = 0;
00244         a[1] = 1;
00245         b[0] = 1;
00246         b[1] = 0;
00247         c[0] = -1;
00248         c[1] = -1;
00249         a1d  = 0;
00250         b1d  = 4;
00251         c1d  = -4;
00252         out[15] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d);
00253 
00254        
00255         coeff= 4;
00256         a[0] = 0;
00257         a[1] = 1;
00258         b[0] = 0;
00259         b[1] = 1;
00260         c[0] = -1;
00261         c[1] = -1;
00262         a1d  = 0;
00263         b1d  = 4;
00264         c1d  = -4;
00265         out[16] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d);
00266         
00267         
00268         coeff= 4;
00269         a[0] = 0;
00270         a[1] = 0;
00271         b[0] = 1;
00272         b[1] = 0;
00273         c[0] = 0;
00274         c[1] = 1;
00275         a1d  = 0;
00276         b1d  = 4;
00277         c1d  = -4;
00278         out[17] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1])*(a1d + in[2]*b1d + in[2]*in[2]*c1d);   
00279     }
00280 
00282     inline void 
00283     evaluateJacobian (const typename Traits::DomainType& in,         // position
00284                       std::vector<typename Traits::JacobianType>& out) const      // return value
00285     {  
00286         out.resize(18);
00287 
00288         
00289         
00290         int coeff;
00291          R a[2], b[2], c[2], aa[2], bb[2][2], a1d, b1d, c1d;
00292 
00293 
00294          // lower triangle:
00295          coeff= 2;
00296          a[0] = 1;
00297          a[1] = 0.5;
00298          b[0] = -1;
00299          b[1] = -1;
00300          c[0] = -1;
00301          c[1] = -1;
00302          a1d  = 1;
00303          b1d  = -3;
00304          c1d  = 2;
00305          aa[0] = -3;
00306          aa[1] = -3;    
00307          bb[0][0] = 4;         
00308          bb[0][1] = 4;
00309          bb[1][0] = 4;
00310          bb[1][1] = 4;
00311          out[0][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00312          out[0][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00313          out[0][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]);
00314          
00315          
00316          
00317          coeff= 2;
00318          a[0] = 0;
00319          a[1] = -0.5;
00320          b[0] = 1;
00321          b[1] = 0;
00322          c[0] = 1;
00323          c[1] = 0;
00324          a1d  = 1;
00325          b1d  = -3;
00326          c1d  = 2;
00327          aa[0] = -1;
00328          aa[1] = 0;     
00329          bb[0][0] = 4;         
00330          bb[0][1] = 0;
00331          bb[1][0] = 0;
00332          bb[1][1] = 0;
00333          out[1][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00334          out[1][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00335          out[1][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]);
00336          
00337          
00338          coeff= 2;
00339          a[0] = 0;
00340          a[1] = -0.5;
00341          b[0] = 0;
00342          b[1] = 1;
00343          c[0] = 0;
00344          c[1] = 1;
00345          a1d  = 1;
00346          b1d  = -3;
00347          c1d  = 2;
00348          aa[0] = 0;
00349          aa[1] = -1;    
00350          bb[0][0] = 0;         
00351          bb[0][1] = 0;
00352          bb[1][0] = 0;
00353          bb[1][1] = 4;
00354          out[2][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00355          out[2][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00356          out[2][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]); 
00357                  
00358                          
00359          //upper triangle
00360          coeff= 2;
00361          a[0] = 1;
00362          a[1] = 0.5;
00363          b[0] = -1;
00364          b[1] = -1;
00365          c[0] = -1;
00366          c[1] = -1;
00367          a1d  = 0;
00368          b1d  = -1;
00369          c1d  = 2;
00370          aa[0] = -3;
00371          aa[1] = -3;    
00372          bb[0][0] = 4;         
00373          bb[0][1] = 4;
00374          bb[1][0] = 4;
00375          bb[1][1] = 4;
00376          out[3][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00377          out[3][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00378          out[3][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]);
00379          
00380          
00381          
00382          coeff= 2;
00383          a[0] = 0;
00384          a[1] = -0.5;
00385          b[0] = 1;
00386          b[1] = 0;
00387          c[0] = 1;
00388          c[1] = 0;
00389          a1d  = 0;
00390          b1d  = -1;
00391          c1d  = 2;
00392          aa[0] = -1;
00393          aa[1] = 0;     
00394          bb[0][0] = 4;         
00395          bb[0][1] = 0;
00396          bb[1][0] = 0;
00397          bb[1][1] = 0;
00398          out[4][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00399          out[4][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00400          out[4][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]);
00401          
00402          
00403          
00404          coeff= 2;
00405          a[0] = 0;
00406          a[1] = -0.5;
00407          b[0] = 0;
00408          b[1] = 1;
00409          c[0] = 0;
00410          c[1] = 1;
00411          a1d  = 0;
00412          b1d  = -1;
00413          c1d  = 2;
00414          aa[0] = 0;
00415          aa[1] = -1;    
00416          bb[0][0] = 0;         
00417          bb[0][1] = 0;
00418          bb[1][0] = 0;
00419          bb[1][1] = 4;
00420          out[5][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00421          out[5][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00422          out[5][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]);       
00423                  
00424         
00425          
00426          // vertical edges
00427          coeff= 2;
00428          a[0] = 1;
00429          a[1] = 0.5;
00430          b[0] = -1;
00431          b[1] = -1;
00432          c[0] = -1;
00433          c[1] = -1;
00434          a1d  = 0;
00435          b1d  = 4;
00436          c1d  = -4;
00437          aa[0] = -3;
00438          aa[1] = -3;    
00439          bb[0][0] = 4;         
00440          bb[0][1] = 4;
00441          bb[1][0] = 4;
00442          bb[1][1] = 4;
00443          out[6][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00444          out[6][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00445          out[6][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]);
00446          
00447          
00448          
00449          coeff= 2;
00450          a[0] = 0;
00451          a[1] = -0.5;
00452          b[0] = 1;
00453          b[1] = 0;
00454          c[0] = 1;
00455          c[1] = 0;
00456          a1d  = 0;
00457          b1d  = 4;
00458          c1d  = -4;
00459          aa[0] = -1;
00460          aa[1] = 0;     
00461          bb[0][0] = 4;         
00462          bb[0][1] = 0;
00463          bb[1][0] = 0;
00464          bb[1][1] = 0;
00465          out[7][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00466          out[7][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00467          out[7][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]);
00468          
00469          
00470          
00471          coeff= 2;
00472          a[0] = 0;
00473          a[1] = -0.5;
00474          b[0] = 0;
00475          b[1] = 1;
00476          c[0] = 0;
00477          c[1] = 1;
00478          a1d  = 0;
00479          b1d  = 4;
00480          c1d  = -4;
00481          aa[0] = 0;
00482          aa[1] = -1;    
00483          bb[0][0] = 0;         
00484          bb[0][1] = 0;
00485          bb[1][0] = 0;
00486          bb[1][1] = 4;
00487          out[8][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00488          out[8][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00489          out[8][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]);
00490          
00491          
00492          
00493          
00494          // lower triangle edges
00495          coeff= 4;
00496          a[0] = 0;
00497          a[1] = 1;
00498          b[0] = 1;
00499          b[1] = 0;
00500          c[0] = -1;
00501          c[1] = -1;
00502          a1d  = 1;
00503          b1d  = -3;
00504          c1d  = 2;
00505          aa[0] = 4;
00506          aa[1] = 0;     
00507          bb[0][0] = -8;         
00508          bb[0][1] = -4;
00509          bb[1][0] = -4;
00510          bb[1][1] = 0;
00511          out[9][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00512          out[9][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00513          out[9][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]);
00514          
00515          
00516          
00517          
00518          coeff= 4;
00519          a[0] = 0;
00520          a[1] = 1;
00521          b[0] = 0;
00522          b[1] = 1;
00523          c[0] = -1;
00524          c[1] = -1;
00525          a1d  = 1;
00526          b1d  = -3;
00527          c1d  = 2;
00528          aa[0] = 0;
00529          aa[1] = 4; //changed from zero to 4    
00530          bb[0][0] = 0;         
00531          bb[0][1] = -4;
00532          bb[1][0] = -4;
00533          bb[1][1] = -8;
00534          out[10][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00535          out[10][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00536          out[10][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]);
00537          
00538          
00539          
00540          coeff= 4;
00541          a[0] = 0;
00542          a[1] = 0;
00543          b[0] = 1;
00544          b[1] = 0;
00545          c[0] = 0;
00546          c[1] = 1;
00547          a1d  = 1;
00548          b1d  = -3;
00549          c1d  = 2;
00550          aa[0] = 0;
00551          aa[1] = 0;     
00552          bb[0][0] = 0;         
00553          bb[0][1] = 4;
00554          bb[1][0] = 4;
00555          bb[1][1] = 0;
00556          out[11][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00557          out[11][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00558          out[11][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]);
00559          
00560          
00561          
00562          // upper triangle edges
00563          coeff= 4;
00564          a[0] = 0;
00565          a[1] = 1;
00566          b[0] = 1;
00567          b[1] = 0;
00568          c[0] = -1;
00569          c[1] = -1;
00570          a1d  = 0;
00571          b1d  = -1;
00572          c1d  = 2;
00573          aa[0] = 4;
00574          aa[1] = 0;     
00575          bb[0][0] = -8;         
00576          bb[0][1] = -4;
00577          bb[1][0] = -4;
00578          bb[1][1] = 0;
00579          out[12][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00580          out[12][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00581          out[12][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]);
00582          
00583          
00584              
00585          coeff= 4;
00586          a[0] = 0;
00587          a[1] = 1;
00588          b[0] = 0;
00589          b[1] = 1;
00590          c[0] = -1;
00591          c[1] = -1;
00592          a1d  = 0;
00593          b1d  = -1;
00594          c1d  = 2;
00595          aa[0] = 0;
00596          aa[1] = 4;     
00597          bb[0][0] = 0;         
00598          bb[0][1] = -4;
00599          bb[1][0] = -4;
00600          bb[1][1] = -8;
00601          out[13][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00602          out[13][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00603          out[13][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]);
00604          
00605          
00606          
00607          coeff= 4;
00608          a[0] = 0;
00609          a[1] = 0;
00610          b[0] = 1;
00611          b[1] = 0;
00612          c[0] = 0;
00613          c[1] = 1;
00614          a1d  = 0;
00615          b1d  = -1;
00616          c1d  = 2;
00617          aa[0] = 0;
00618          aa[1] = 0;     
00619          bb[0][0] = 0;         
00620          bb[0][1] = 4;
00621          bb[1][0] = 4;
00622          bb[1][1] = 0;
00623          out[14][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00624          out[14][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00625          out[14][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]);
00626                  
00627                                  
00628                  
00629          // quadrilateral sides
00630          coeff= 4;
00631          a[0] = 0;
00632          a[1] = 1;
00633          b[0] = 1;
00634          b[1] = 0;
00635          c[0] = -1;
00636          c[1] = -1;
00637          a1d  = 0;
00638          b1d  = 4;
00639          c1d  = -4;
00640          aa[0] = 4;
00641          aa[1] = 0;     
00642          bb[0][0] = -8;         
00643          bb[0][1] = -4;
00644          bb[1][0] = -4;
00645          bb[1][1] = 0;
00646          out[15][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00647          out[15][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00648          out[15][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]);
00649          
00650          
00651          
00652          
00653          
00654          coeff= 4;
00655          a[0] = 0;
00656          a[1] = 1;
00657          b[0] = 0;
00658          b[1] = 1;
00659          c[0] = -1;
00660          c[1] = -1;
00661          a1d  = 0;
00662          b1d  = 4;
00663          c1d  = -4;
00664          aa[0] = 0;
00665          aa[1] = 4;     
00666          bb[0][0] = 0;         
00667          bb[0][1] = -4;
00668          bb[1][0] = -4;
00669          bb[1][1] = -8;
00670          out[16][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00671          out[16][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00672          out[16][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]);      
00673          
00674          
00675          
00676          
00677          coeff= 4;
00678          a[0] = 0;
00679          a[1] = 0;
00680          b[0] = 1;
00681          b[1] = 0;
00682          c[0] = 0;
00683          c[1] = 1;
00684          a1d  = 0;
00685          b1d  = 4;
00686          c1d  = -4;
00687          aa[0] = 0;
00688          aa[1] = 0;     
00689          bb[0][0] = 0;         
00690          bb[0][1] = 4;
00691          bb[1][0] = 4;
00692          bb[1][1] = 0;
00693          out[17][0][0] = (aa[0] + bb[0][0]*in[0] + bb[1][0]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00694          out[17][0][1] = (aa[1] + bb[0][1]*in[0] + bb[1][1]*in[1]) * (a1d + in[2]*b1d + in[2]*in[2]*c1d);
00695          out[17][0][2] = coeff * (a[0] + b[0]*in[0] + b[1]*in[1]) * (a[1] + c[0]*in[0] + c[1]*in[1]) * (b1d + 2*c1d*in[2]);
00696         
00697     }
00698 
00700     unsigned int order () const
00701     {
00702       return 2;
00703     }
00704   };
00705 }
00706 #endif
Generated on Sat Apr 24 11:15:35 2010 for dune-localfunctions by  doxygen 1.6.3