dune-localfunctions  2.2.0
raviartthomas1q3dlocalbasis.hh
Go to the documentation of this file.
00001 #ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1Q3DLOCALBASIS_HH
00002 #define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1Q3DLOCALBASIS_HH
00003 
00004 #include <vector>
00005 
00006 #include <dune/common/fmatrix.hh>
00007 
00008 #include "../../common/localbasis.hh"
00009 
00010 namespace Dune 
00011 {
00021   template<class D, class R>
00022   class RT1Q3DLocalBasis
00023   {
00024 
00025 public:
00026     typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,3,Dune::FieldVector<R,3>,
00027                              Dune::FieldMatrix<R,3,3> > Traits;
00028 
00030     RT1Q3DLocalBasis ()
00031     {
00032       sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0;
00033     }
00034 
00040     RT1Q3DLocalBasis (unsigned int s)
00041     {
00042       sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0;
00043       if (s & 1)
00044       {
00045         sign0 = -1.0;
00046       }
00047       if (s & 2)
00048       {
00049         sign1 = -1.0;
00050       }
00051       if (s & 4)
00052       {
00053         sign2 = -1.0;
00054       }
00055       if (s & 8)
00056       {
00057         sign3 = -1.0;
00058       }
00059       if (s & 16)
00060       {
00061         sign4 = -1.0;
00062       }
00063       if (s & 32)
00064       {
00065         sign5 = -1.0;
00066       }
00067     }
00068 
00070     unsigned int size () const
00071     {
00072       return 36;
00073     }
00074 
00081     inline void evaluateFunction (const typename Traits::DomainType& in,
00082                                   std::vector<typename Traits::RangeType>& out) const
00083     {
00084       out.resize(36);
00085       
00086       out[0][0] = sign0*(-3.0*in[0]*in[0] + 4.0*in[0] - 1.0);
00087       out[0][1] = 0.0;
00088       out[0][2] = 0.0;
00089 
00090       out[1][0] = sign1*(-2.0*in[0] + 3.0*in[0]*in[0]);
00091       out[1][1] = 0.0;
00092       out[1][2] = 0.0;
00093 
00094       out[2][0] = 0.0;                                                
00095       out[2][1] = sign2*(-3.0*in[1]*in[1] + 4.0*in[1] - 1.0);
00096       out[2][2] = 0.0;
00097 
00098       out[3][0] = 0.0;
00099       out[3][1] = sign3*(3.0*in[1]*in[1] - 2.0*in[1]);
00100       out[3][2] = 0.0;
00101 
00102       out[4][0] = 0.0;
00103       out[4][1] = 0.0;
00104       out[4][2] = sign4*(-3.0*in[2]*in[2] + 4.0*in[2] - 1.0);
00105 
00106       out[5][0] = 0.0;
00107       out[5][1] = 0.0;
00108       out[5][2] = sign5*(3.0*in[2]*in[2] - 2.0*in[2]);
00109 
00110       out[6][0]  = -18.0*in[0]*in[0]*in[1] + 9.0*in[0]*in[0] + 24.0*in[0]*in[1] - 6.0*in[1] -12.0*in[0] + 3.0;
00111       out[6][1]  = 0.0;
00112       out[6][2]  = 0.0;
00113 
00114       out[7][0]  = -18.0*in[0]*in[0]*in[1] + 9.0*in[0]*in[0] + 12.0*in[0]*in[1] - 6.0*in[0];
00115       out[7][1]  = 0.0;
00116       out[7][2]  = 0.0;
00117 
00118       out[8][0]  = 0.0;
00119       out[8][1]  = 18.0*in[0]*in[1]*in[1] - 9.0*in[1]*in[1] - 24.0*in[0]*in[1] + 12.0*in[1] + 6.0*in[0] - 3.0;
00120       out[8][2]  = 0.0;
00121 
00122       out[9][0]  = 0.0;
00123       out[9][1]  = 6.0*in[1] - 12.0*in[0]*in[1] - 9.0*in[1]*in[1] + 18.0*in[0]*in[1]*in[1];
00124       out[9][2]  = 0.0;
00125 
00126       out[10][0] = 0.0;
00127       out[10][1] = 0.0;
00128       out[10][2] = -3.0 + 6.0*in[0] + 12.0*in[2] - 24.0*in[0]*in[2] - 9.0*in[2]*in[2] + 18.0*in[0]*in[2]*in[2];
00129 
00130       out[11][0] = 0.0;
00131       out[11][1] = 0.0;
00132       out[11][2] = 6.0*in[2] - 12.0*in[0]*in[2] - 9.0*in[2]*in[2] + 18.0*in[0]*in[2]*in[2];
00133 
00134       out[12][0] = 3.0 - 12.0*in[0] - 6.0*in[2] + 24.0*in[0]*in[2] + 9.0*in[0]*in[0] - 18.0*in[0]*in[0]*in[2];
00135       out[12][1] = 0.0;
00136       out[12][2] = 0.0;
00137 
00138       out[13][0] = -6.0*in[0] + 12.0*in[0]*in[2] + 9.0*in[0]*in[0] - 18.0*in[0]*in[0]*in[2];
00139       out[13][1] = 0.0;
00140       out[13][2] = 0.0;
00141 
00142       out[14][0] = 0.0;
00143       out[14][1] = 3.0 - 12.0*in[1] - 6.0*in[2] + 24.0*in[1]*in[2] + 9.0*in[1]*in[1] - 18.0*in[1]*in[1]*in[2];
00144       out[14][2] = 0.0;
00145 
00146       out[15][0] = 0.0;
00147       out[15][1] = -6.0*in[1] + 12.0*in[1]*in[2] + 9.0*in[1]*in[1] - 18.0*in[1]*in[1]*in[2];
00148       out[15][2] = 0.0;
00149 
00150       out[16][0] = 0.0;
00151       out[16][1] = 0.0;
00152       out[16][2] = -3.0 + 6.0*in[1] + 12.0*in[2] - 24.0*in[1]*in[2] - 9.0*in[2]*in[2] + 18.0*in[1]*in[2]*in[2];
00153 
00154       out[17][0] = 0.0;
00155       out[17][1] = 0.0;
00156       out[17][2] = 6.0*in[2] - 12.0*in[1]*in[2] - 9.0*in[2]*in[2] + 18.0*in[1]*in[2]*in[2];
00157 
00158       out[18][0] = -9.0 + 36.0*in[0] + 18.0*in[1] + 18.0*in[2] - 72.0*in[0]*in[1] - 72.0*in[0]*in[2] - 36.0*in[1]*in[2] + 144.0*in[0]*in[1]*in[2] - 27.0*in[0]*in[0] + 54.0*in[0]*in[0]*in[1] + 54.0*in[0]*in[0]*in[2] - 108.0*in[0]*in[0]*in[1]*in[2];
00159       out[18][1] = 0.0;
00160       out[18][2] = 0.0;
00161 
00162       out[19][0] = 18.0*in[0] - 36.0*in[0]*in[1] - 36.0*in[0]*in[2] + 72.0*in[0]*in[1]*in[2] - 27.0*in[0]*in[0] + 54.0*in[0]*in[0]*in[1] + 54.0*in[0]*in[0]*in[2] - 108.0*in[0]*in[0]*in[1]*in[2];
00163       out[19][1] = 0.0;
00164       out[19][2] = 0.0;
00165 
00166       out[20][0] = 0.0;
00167       out[20][1] = 9.0 - 18.0*in[0] - 36.0*in[1] - 18.0*in[2] + 72.0*in[0]*in[1] + 36.0*in[0]*in[2] + 72.0*in[1]*in[2] - 144.0*in[0]*in[1]*in[2] + 27.0*in[1]*in[1] - 54.0*in[1]*in[1]*in[0] - 54.0*in[1]*in[1]*in[2] + 108.0*in[0]*in[1]*in[1]*in[2];
00168       out[20][2] = 0.0;
00169 
00170       out[21][0] = 0.0;
00171       out[21][1] = -18.0*in[1] + 36.0*in[0]*in[1] + 36.0*in[1]*in[2] - 72.0*in[0]*in[1]*in[2] + 27.0*in[1]*in[1] - 54.0*in[0]*in[1]*in[1] - 54.0*in[1]*in[1]*in[2] + 108.0*in[0]*in[1]*in[1]*in[2];
00172       out[21][2] = 0.0;
00173 
00174       out[22][0] = 0.0;
00175       out[22][1] = 0.0;
00176       out[22][2] = 9.0 - 18.0*in[0] - 18.0*in[1] - 36.0*in[2] + 36.0*in[0]*in[1] + 72.0*in[0]*in[2] + 72.0*in[1]*in[2] - 144.0*in[0]*in[1]*in[2] + 27.0*in[2]*in[2] - 54.0*in[0]*in[2]*in[2] - 54.0*in[1]*in[2]*in[2] + 108.0*in[0]*in[1]*in[2]*in[2];
00177 
00178       out[23][0] = 0.0;
00179       out[23][1] = 0.0;
00180       out[23][2] = -18.0*in[2] + 36.0*in[0]*in[2] + 36.0*in[1]*in[2] - 72.0*in[0]*in[1]*in[2] + 27.0*in[2]*in[2] - 54.0*in[0]*in[2]*in[2] - 54.0*in[1]*in[2]*in[2] + 108.0*in[0]*in[1]*in[2]*in[2];
00181 
00182       out[24][0] = 96.0*in[0] - 144.0*in[0]*in[1] - 144.0*in[0]*in[2] + 216.0*in[0]*in[1]*in[2] - 96.0*in[0]*in[0] + 144.0*in[0]*in[0]*in[1] + 144.0*in[0]*in[0]*in[2] - 216.0*in[0]*in[0]*in[1]*in[2];
00183       out[24][1] = 0.0;
00184       out[24][2] = 0.0;
00185 
00186       out[25][0] = 0.0;
00187       out[25][1] = 96.0*in[1] - 144.0*in[0]*in[1] - 144.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2] - 96.0*in[1]*in[1] + 144.0*in[0]*in[1]*in[1] + 144.0*in[1]*in[1]*in[2] - 216.0*in[0]*in[1]*in[1]*in[2];
00188       out[25][2] = 0.0;
00189 
00190       out[26][0] = 0.0;
00191       out[26][1] = 0.0;
00192       out[26][2] = 96.0*in[2] - 144.0*in[0]*in[2] - 144.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2] - 96.0*in[2]*in[2] + 144.0*in[0]*in[2]*in[2] + 144.0*in[1]*in[2]*in[2] - 216.0*in[0]*in[1]*in[2]*in[2];
00193 
00194       out[27][0] = -144.0*in[0] + 288.0*in[0]*in[1] + 216.0*in[0]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[0]*in[0] - 288.0*in[0]*in[0]*in[1] - 216.0*in[0]*in[0]*in[2] + 432.0*in[0]*in[0]*in[1]*in[2];
00195       out[27][1] = 0.0;
00196       out[27][2] = 0.0;
00197 
00198       out[28][0] = -144.0*in[0] + 216.0*in[0]*in[1] + 288.0*in[0]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[0]*in[0] - 216.0*in[0]*in[0]*in[1] - 288.0*in[0]*in[0]*in[2] + 432.0*in[0]*in[0]*in[1]*in[2];
00199       out[28][1] = 0.0;
00200       out[28][2] = 0.0;
00201 
00202       out[29][0] = 0.0;
00203       out[29][1] = -144.0*in[1] + 288.0*in[0]*in[1] + 216.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[1]*in[1] - 288.0*in[0]*in[1]*in[1] - 216.0*in[1]*in[1]*in[2] + 432.0*in[0]*in[1]*in[1]*in[2];
00204       out[29][2] = 0.0;
00205 
00206       out[30][0] = 0.0;
00207       out[30][1] = -144.0*in[1] + 216.0*in[0]*in[1] + 288.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[1]*in[1] - 216.0*in[0]*in[1]*in[1] - 288.0*in[1]*in[1]*in[2] + 432.0*in[0]*in[1]*in[1]*in[2];
00208       out[30][2] = 0.0;
00209 
00210       out[31][0] = 0.0;
00211       out[31][1] = 0.0;
00212       out[31][2] =-144.0*in[2] + 288.0*in[0]*in[2] + 216.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[2]*in[2] - 288.0*in[0]*in[2]*in[2] - 216.0*in[1]*in[2]*in[2] + 432.0*in[0]*in[1]*in[2]*in[2];
00213 
00214       out[32][0] = 0.0;
00215       out[32][1] = 0.0;
00216       out[32][2] = -144.0*in[2] + 216.0*in[0]*in[2] + 288.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[2]*in[2] - 216.0*in[0]*in[2]*in[2] - 288.0*in[1]*in[2]*in[2] + 432.0*in[0]*in[1]*in[2]*in[2];
00217 
00218       out[33][0] = 216.0*in[0] - 432.0*in[0]*in[1] - 432.0*in[0]*in[2] + 864.0*in[0]*in[1]*in[2] - 216.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[1] + 432.0*in[0]*in[0]*in[2] - 864.0*in[0]*in[0]*in[1]*in[2];
00219       out[33][1] = 0.0;
00220       out[33][2] = 0.0;
00221 
00222       out[34][0] = 0.0;
00223       out[34][1] = 216.0*in[1] - 432.0*in[0]*in[1] - 432.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2] - 216.0*in[1]*in[1] + 432.0*in[0]*in[1]*in[1] + 432.0*in[1]*in[1]*in[2] - 864.0*in[0]*in[1]*in[1]*in[2];
00224       out[34][2] = 0.0;
00225 
00226       out[35][0] = 0.0;
00227       out[35][1] = 0.0;
00228       out[35][2] = 216.0*in[2] - 432.0*in[0]*in[2] - 432.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2] - 216.0*in[2]*in[2] + 432.0*in[0]*in[2]*in[2] + 432.0*in[1]*in[2]*in[2] - 864.0*in[0]*in[1]*in[2]*in[2];
00229     }
00230     
00237     inline void evaluateJacobian (const typename Traits::DomainType& in,
00238                                   std::vector<typename Traits::JacobianType>& out) const
00239     {
00240       out.resize(36);
00241       
00242       out[0][0][0] = sign0*(-6.0*in[0] + 4);
00243       out[0][0][1] = 0;
00244       out[0][0][2] = 0;
00245       out[0][1][0] = 0;
00246       out[0][1][1] = 0;
00247       out[0][1][2] = 0;
00248       out[0][2][0] = 0;
00249       out[0][2][1] = 0;
00250       out[0][2][2] = 0;
00251       
00252       out[1][0][0] = sign1*(-2 + 6.0*in[0]);
00253       out[1][0][1] = 0;
00254       out[1][0][2] = 0;
00255       out[1][1][0] = 0;
00256       out[1][1][1] = 0;
00257       out[1][1][2] = 0;
00258       out[1][2][0] = 0;
00259       out[1][2][1] = 0;
00260       out[1][2][2] = 0;
00261       
00262       out[2][0][0] = 0;
00263       out[2][0][1] = 0;
00264       out[2][0][2] = 0;
00265       out[2][1][0] = 0;
00266       out[2][1][1] = sign2*(-6.0*in[1] + 4);
00267       out[2][1][2] = 0;
00268       out[2][2][0] = 0;
00269       out[2][2][1] = 0;
00270       out[2][2][2] = 0;
00271       
00272       out[3][0][0] = 0;
00273       out[3][0][1] = 0;
00274       out[3][0][2] = 0;
00275       out[3][1][0] = 0;
00276       out[3][1][1] = sign3*(6.0*in[1] - 2);
00277       out[3][1][2] = 0;
00278       out[3][2][0] = 0;
00279       out[3][2][1] = 0;
00280       out[3][2][2] = 0;
00281       
00282       out[4][0][0] = 0;
00283       out[4][0][1] = 0;
00284       out[4][0][2] = 0;
00285       out[4][1][0] = 0;
00286       out[4][1][1] = 0;
00287       out[4][1][2] = 0;
00288       out[4][2][0] = 0;
00289       out[4][2][1] = 0;
00290       out[4][2][2] = sign4*(-6.0*in[2] + 4);
00291       
00292       out[5][0][0] = 0;
00293       out[5][0][1] = 0;
00294       out[5][0][2] = 0;
00295       out[5][1][0] = 0;
00296       out[5][1][1] = 0;
00297       out[5][1][2] = 0;
00298       out[5][2][0] = 0;
00299       out[5][2][1] = 0;
00300       out[5][2][2] = sign5*(6.0*in[2] - 2);
00301 
00302       out[6][0][0] = -36.0*in[0]*in[1] + 18.0*in[0] + 24.0*in[1] - 12.0;
00303       out[6][0][1] = -18.0*in[0]*in[0] + 24.0*in[0] - 6;
00304       out[6][0][2] = 0.0;
00305       out[6][1][0] = 0.0;
00306       out[6][1][1] = 0.0;
00307       out[6][1][2] = 0.0;
00308       out[6][2][0] = 0.0;
00309       out[6][2][1] = 0.0;
00310       out[6][2][2] = 0.0;
00311       
00312       out[7][0][0]  = -36.0*in[0]*in[1] + 18.0*in[0] + 12.0*in[1] - 6.0;
00313       out[7][0][1] = -18.0*in[0]*in[0] + 12.0*in[0];
00314       out[7][0][2] = 0.0;
00315       out[7][1][0]  = 0.0;
00316       out[7][1][1] = 0.0;
00317       out[7][1][2] = 0.0;
00318       out[7][2][0]  = 0.0;
00319       out[7][2][1] = 0.0;
00320       out[7][2][2] = 0.0;
00321       
00322       out[8][0][0]  = 0.0;
00323       out[8][0][1]  = 0.0;
00324       out[8][0][2]  = 0.0;
00325       out[8][1][0]  = 18.0*in[1]*in[1] - 24.0*in[1] + 6.0;
00326       out[8][1][1]  = 36.0*in[0]*in[1] - 18.0*in[1] - 24.0*in[0] + 12.0;
00327       out[8][1][2]  = 0.0;
00328       out[8][2][0]  = 0.0;
00329       out[8][2][1]  = 0.0;
00330       out[8][2][2]  = 0.0;
00331       
00332       out[9][0][0]  = 0.0;
00333       out[9][0][1]  = 0.0;
00334       out[9][0][2]  = 0.0;
00335       out[9][1][0]  = -12.0*in[1] + 18.0*in[1]*in[1];
00336       out[9][1][1]  = 6.0 - 12.0*in[0] - 18.0*in[1] + 36.0*in[0]*in[1];;
00337       out[9][1][2]  = 0.0;
00338       out[9][2][0]  = 0.0;
00339       out[9][2][1]  = 0.0;
00340       out[9][2][2]  = 0.0;
00341       
00342       out[10][0][0] = 0.0;
00343       out[10][0][1] = 0.0;
00344       out[10][0][2] = 0.0;
00345       out[10][1][0] = 0.0;
00346       out[10][1][1] = 0.0;
00347       out[10][1][2] = 0.0;
00348       out[10][2][0] = 6.0 - 24.0*in[2] + 18.0*in[2]*in[2];
00349       out[10][2][1] = 0.0;
00350       out[10][2][2] = 12.0 - 24.0*in[0] - 18.0*in[2] + 36.0*in[0]*in[2];
00351       
00352       out[11][0][0] = 0.0;
00353       out[11][0][1] = 0.0;
00354       out[11][0][2] = 0.0;
00355       out[11][1][0] = 0.0;
00356       out[11][1][1] = 0.0;
00357       out[11][1][2] = 0.0;
00358       out[11][2][0] = -12.0*in[2] + 18.0*in[2]*in[2];
00359       out[11][2][1] = 0.0;
00360       out[11][2][2] = 6.0 - 12.0*in[0] - 18.0*in[2] + 36.0*in[0]*in[2];
00361 
00362       out[12][0][0] = -12.0 + 24.0*in[2] + 18.0*in[0] - 36.0*in[0]*in[2];
00363       out[12][0][1] = 0.0;
00364       out[12][0][2] = -6.0 + 24.0*in[0] - 18.0*in[0]*in[0];
00365       out[12][1][0] = 0.0;
00366       out[12][1][1] = 0.0;
00367       out[12][1][2] = 0.0;
00368       out[12][2][0] = 0.0;
00369       out[12][2][1] = 0.0;
00370       out[12][2][2] = 0.0;
00371       
00372       out[13][0][0] = -6.0 + 12.0*in[2] + 18.0*in[0] - 36.0*in[0]*in[2];
00373       out[13][0][1] = 0.0;
00374       out[13][0][2] = 12.0*in[0] - 18.0*in[0]*in[0];
00375       out[13][1][0] = 0.0;
00376       out[13][1][1] = 0.0;
00377       out[13][1][2] = 0.0;
00378       out[13][2][0] = 0.0;
00379       out[13][2][1] = 0.0;
00380       out[13][2][2] = 0.0;
00381       
00382       out[14][0][0] = 0.0;
00383       out[14][0][1] = 0.0;
00384       out[14][0][2] = 0.0;
00385       out[14][1][0] = 0.0;
00386       out[14][1][1] = -12.0 + 24.0*in[2] + 18.0*in[1] - 36.0*in[1]*in[2];
00387       out[14][1][2] = -6.0 + 24.0*in[1] - 18.0*in[1]*in[1];
00388       out[14][2][0] = 0.0;
00389       out[14][2][1] = 0.0;
00390       out[14][2][2] = 0.0;
00391       
00392       out[15][0][0] = 0.0;
00393       out[15][0][1] = 0.0;
00394       out[15][0][2] = 0.0;
00395       out[15][1][0] = 0.0;
00396       out[15][1][1] = -6.0 + 12.0*in[2] + 18.0*in[1] - 36.0*in[1]*in[2];
00397       out[15][1][2] = 12.0*in[1] - 18.0*in[1]*in[1];
00398       out[15][2][0] = 0.0;
00399       out[15][2][1] = 0.0;
00400       out[15][2][2] = 0.0;
00401       
00402       out[16][0][0] = 0.0;
00403       out[16][0][1] = 0.0;
00404       out[16][0][2] = 0.0;
00405       out[16][1][0] = 0.0;
00406       out[16][1][1] = 0.0;
00407       out[16][1][2] = 0.0;
00408       out[16][2][0] = 0.0;
00409       out[16][2][1] = 6.0 - 24.0*in[2] + 18.0*in[2]*in[2];
00410       out[16][2][2] = 12.0 - 24.0*in[1] - 18.0*in[2] + 36.0*in[1]*in[2];
00411       
00412       out[17][0][0] = 0.0;
00413       out[17][0][1] = 0.0;
00414       out[17][0][2] = 0.0;
00415       out[17][1][0] = 0.0;
00416       out[17][1][1] = 0.0;
00417       out[17][1][2] = 0.0;
00418       out[17][2][0] = 0.0;
00419       out[17][2][1] = -12.0*in[2] + 18.0*in[2]*in[2];
00420       out[17][2][2] =  6.0 - 12.0*in[1] - 18.0*in[2] + 36.0*in[1]*in[2];
00421 
00422       out[18][0][0] = 36.0 - 72.0*in[1] - 72.0*in[2] + 144.0*in[1]*in[2] - 54.0*in[0] + 108.0*in[0]*in[1] + 108.0*in[0]*in[2] - 216.0*in[0]*in[1]*in[2];
00423       out[18][0][1] = 18.0 - 72.0*in[0] - 36.0*in[2] + 144.0*in[0]*in[2] + 54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[2];
00424       out[18][0][2] = 18.0 - 72.0*in[0] - 36.0*in[1] + 144.0*in[0]*in[1] + 54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[1];
00425       out[18][1][0] = 0.0;
00426       out[18][1][1] = 0.0;
00427       out[18][1][2] = 0.0;
00428       out[18][2][0] = 0.0;
00429       out[18][2][1] = 0.0;
00430       out[18][2][2] = 0.0;
00431       
00432       out[19][0][0] = 18 - 36.0*in[1] - 36.0*in[2] + 72.0*in[1]*in[2] - 54.0*in[0] + 108.0*in[0]*in[1] + 108.0*in[0]*in[2] - 216.0*in[0]*in[1]*in[2];
00433       out[19][0][1] = -36.0*in[0] + 72.0*in[0]*in[2] + 54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[2];
00434       out[19][0][2] = -36.0*in[0] + 72.0*in[0]*in[1] + 54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[1];
00435       out[19][1][0] = 0.0;
00436       out[19][1][1] = 0.0;
00437       out[19][1][2] = 0.0;
00438       out[19][2][0] = 0.0;
00439       out[19][2][1] = 0.0;
00440       out[19][2][2] = 0.0;
00441 
00442       out[20][0][0] = 0.0;
00443       out[20][0][1] = 0.0;
00444       out[20][0][2] = 0.0;
00445       out[20][1][0] = -18.0 + 72.0*in[1] + 36.0*in[2] - 144.0*in[1]*in[2] - 54.0*in[1]*in[1] + 108.0*in[1]*in[1]*in[2];
00446       out[20][1][1] = -36.0 + 72.0*in[0] + 72.0*in[2] - 144.0*in[0]*in[2] + 54.0*in[1] - 108.0*in[1]*in[0] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2];
00447       out[20][1][2] = -18.0 + 36.0*in[0] + 72.0*in[1] - 144.0*in[0]*in[1] - 54.0*in[1]*in[1] + 108.0*in[0]*in[1]*in[1];
00448       out[20][2][0] = 0.0;
00449       out[20][2][1] = 0.0;
00450       out[20][2][2] = 0.0;
00451 
00452       out[21][0][0] = 0.0;
00453       out[21][0][1] = 0.0;
00454       out[21][0][2] = 0.0;
00455       out[21][1][0] = 36.0*in[1] - 72.0*in[1]*in[2] - 54.0*in[1]*in[1] + 108.0*in[1]*in[1]*in[2];
00456       out[21][1][1] = -18.0 + 36.0*in[0] + 36.0*in[2] - 72.0*in[0]*in[2] + 54.0*in[1] - 108.0*in[0]*in[1] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2];
00457       out[21][1][2] = 36.0*in[1] - 72.0*in[0]*in[1] - 54.0*in[1]*in[1] + 108.0*in[0]*in[1]*in[1];
00458       out[21][2][0] = 0.0;
00459       out[21][2][1] = 0.0;
00460       out[21][2][2] = 0.0;
00461       
00462       out[22][0][0] = 0.0;
00463       out[22][0][1] = 0.0;
00464       out[22][0][2] = 0.0;
00465       out[22][1][0] = 0.0;
00466       out[22][1][1] = 0.0;
00467       out[22][1][2] = 0.0;
00468       out[22][2][0] = -18.0 + 36.0*in[1] + 72.0*in[2] - 144.0*in[1]*in[2] - 54.0*in[2]*in[2] + 108.0*in[1]*in[2]*in[2];
00469       out[22][2][1] = -18.0 + 36.0*in[0] + 72.0*in[2] - 144.0*in[0]*in[2] - 54.0*in[2]*in[2] + 108.0*in[0]*in[2]*in[2];
00470       out[22][2][2] = -36.0 + 72.0*in[0] + 72.0*in[1] - 144.0*in[0]*in[1] + 54.0*in[2] - 108.0*in[0]*in[2] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2];
00471       
00472       out[23][0][0] = 0.0;
00473       out[23][0][1] = 0.0;
00474       out[23][0][2] = 0.0;
00475       out[23][1][0] = 0.0;
00476       out[23][1][1] = 0.0;
00477       out[23][1][2] = 0.0;
00478       out[23][2][0] = 36.0*in[2] - 72.0*in[1]*in[2] - 54.0*in[2]*in[2] + 108.0*in[1]*in[2]*in[2];
00479       out[23][2][1] = 36.0*in[2] - 72.0*in[0]*in[2] - 54.0*in[2]*in[2] + 108.0*in[0]*in[2]*in[2];
00480       out[23][2][2] = -18.0 + 36.0*in[0] + 36.0*in[1] - 72.0*in[0]*in[1] + 54.0*in[2] - 108.0*in[0]*in[2] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2];
00481       
00482       out[24][0][0] = 96.0 - 144.0*in[1] - 144.0*in[2] + 216.0*in[1]*in[2] - 192.0*in[0] + 288.0*in[0]*in[1] + 288.0*in[0]*in[2] - 432.0*in[0]*in[1]*in[2];
00483       out[24][0][1] = -144.0*in[0] + 216.0*in[0]*in[2] + 144.0*in[0]*in[0] - 216.0*in[0]*in[0]*in[2];
00484       out[24][0][2] = -144.0*in[0] + 216.0*in[0]*in[1] + 144.0*in[0]*in[0] - 216.0*in[0]*in[0]*in[1];
00485       out[24][1][0] = 0.0;
00486       out[24][1][1] = 0.0;
00487       out[24][1][2] = 0.0;
00488       out[24][2][0] = 0.0;
00489       out[24][2][1] = 0.0;
00490       out[24][2][2] = 0.0;
00491       
00492       out[25][0][0] = 0.0;
00493       out[25][0][1] = 0.0;
00494       out[25][0][2] = 0.0;
00495       out[25][1][0] = -144.0*in[1] + 216.0*in[1]*in[2] + 144.0*in[1]*in[1] - 216.0*in[1]*in[1]*in[2];
00496       out[25][1][1] = 96.0 - 144.0*in[0] - 144.0*in[2] + 216.0*in[0]*in[2] - 192.0*in[1] + 288.0*in[0]*in[1] + 288.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2];
00497       out[25][1][2] = -144.0*in[1] + 216.0*in[0]*in[1] + 144.0*in[1]*in[1] - 216.0*in[0]*in[1]*in[1];
00498       out[25][2][0] = 0.0;
00499       out[25][2][1] = 0.0;
00500       out[25][2][2] = 0.0;
00501       
00502       out[26][0][0] = 0.0;
00503       out[26][0][1] = 0.0;
00504       out[26][0][2] = 0.0;
00505       out[26][1][0] = 0.0;
00506       out[26][1][1] = 0.0;
00507       out[26][1][2] = 0.0;
00508       out[26][2][0] = -144.0*in[2] + 216.0*in[1]*in[2] + 144.0*in[2]*in[2] - 216.0*in[1]*in[2]*in[2];
00509       out[26][2][1] = -144.0*in[2] + 216.0*in[0]*in[2] + 144.0*in[2]*in[2] - 216.0*in[0]*in[2]*in[2];
00510       out[26][2][2] = 96.0 - 144.0*in[0] - 144.0*in[1] + 216.0*in[0]*in[1] - 192.0*in[2] + 288.0*in[0]*in[2] + 288.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2];
00511       
00512       out[27][0][0] = -144.0 + 288.0*in[1] + 216.0*in[2] - 432.0*in[1]*in[2] + 288.0*in[0] - 576.0*in[0]*in[1] - 432.0*in[0]*in[2] + 864.0*in[0]*in[1]*in[2];
00513       out[27][0][1] = 288.0*in[0] - 432.0*in[0]*in[2] - 288.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[2];
00514       out[27][0][2] = 216.0*in[0] - 432.0*in[0]*in[1] - 216.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[1];
00515       out[27][1][0] = 0.0;
00516       out[27][1][1] = 0.0;
00517       out[27][1][2] = 0.0;
00518       out[27][2][0] = 0.0;
00519       out[27][2][1] = 0.0;
00520       out[27][2][2] = 0.0;
00521       
00522       out[28][0][0] = -144.0 + 216.0*in[1] + 288.0*in[2] - 432.0*in[1]*in[2] + 288.0*in[0] - 432.0*in[0]*in[1] - 576.0*in[0]*in[2] + 864.0*in[0]*in[1]*in[2];
00523       out[28][0][1] = 216.0*in[0] - 432.0*in[0]*in[2] - 216.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[2];
00524       out[28][0][2] = 288.0*in[0] - 432.0*in[0]*in[1] - 288.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[1];
00525       out[28][1][0] = 0.0;
00526       out[28][1][1] = 0.0;
00527       out[28][1][2] = 0.0;
00528       out[28][2][0] = 0.0;
00529       out[28][2][1] = 0.0;
00530       out[28][2][2] = 0.0;
00531       
00532       out[29][0][0] = 0.0;
00533       out[29][0][1] = 0.0;
00534       out[29][0][2] = 0.0;
00535       out[29][1][0] = 288.0*in[1] - 432.0*in[1]*in[2] - 288.0*in[1]*in[1] + 432.0*in[1]*in[1]*in[2];
00536       out[29][1][1] = -144.0 + 288.0*in[0] + 216.0*in[2] - 432.0*in[0]*in[2] + 288.0*in[1] - 576.0*in[0]*in[1] - 432.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2];
00537       out[29][1][2] = 216.0*in[1] - 432.0*in[0]*in[1] - 216.0*in[1]*in[1] + 432.0*in[0]*in[1]*in[1];
00538       out[29][2][0] = 0.0;
00539       out[29][2][1] = 0.0;
00540       out[29][2][2] = 0.0;
00541       
00542       out[30][0][0] = 0.0;
00543       out[30][0][1] = 0.0;
00544       out[30][0][2] = 0.0;
00545       out[30][1][0] = 216.0*in[1] - 432.0*in[1]*in[2] - 216.0*in[1]*in[1] + 432.0*in[1]*in[1]*in[2];
00546       out[30][1][1] = -144.0 + 216.0*in[0] + 288.0*in[2] - 432.0*in[0]*in[2] + 288.0*in[1] - 432.0*in[0]*in[1] - 576.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2];
00547       out[30][1][2] = 288.0*in[1] - 432.0*in[0]*in[1] - 288.0*in[1]*in[1] + 432.0*in[0]*in[1]*in[1];
00548       out[30][2][0] = 0.0;
00549       out[30][2][1] = 0.0;
00550       out[30][2][2] = 0.0;
00551       
00552       out[31][0][0] = 0.0;
00553       out[31][0][1] = 0.0;
00554       out[31][0][2] = 0.0;
00555       out[31][1][0] = 0.0;
00556       out[31][1][1] = 0.0;
00557       out[31][1][2] = 0.0;
00558       out[31][2][0] = 288.0*in[2] - 432.0*in[1]*in[2] - 288.0*in[2]*in[2] + 432.0*in[1]*in[2]*in[2];
00559       out[31][2][1] = 216.0*in[2] - 432.0*in[0]*in[2] - 216.0*in[2]*in[2] + 432.0*in[0]*in[2]*in[2];
00560       out[31][2][2] = -144.0 + 288.0*in[0] + 216.0*in[1] - 432.0*in[0]*in[1] + 288.0*in[2] - 576.0*in[0]*in[2] - 432.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2];
00561       
00562       out[32][0][0] = 0.0;
00563       out[32][0][1] = 0.0;
00564       out[32][0][2] = 0.0;
00565       out[32][1][0] = 0.0;
00566       out[32][1][1] = 0.0;
00567       out[32][1][2] = 0.0;
00568       out[32][2][0] = 216.0*in[2] - 432.0*in[1]*in[2] - 216.0*in[2]*in[2] + 432.0*in[1]*in[2]*in[2];
00569       out[32][2][1] = 288.0*in[2] - 432.0*in[0]*in[2] - 288.0*in[2]*in[2] + 432.0*in[0]*in[2]*in[2];
00570       out[32][2][2] = -144.0 + 216.0*in[0] + 288.0*in[1] - 432.0*in[0]*in[1] + 288.0*in[2] - 432.0*in[0]*in[2] - 576.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2];
00571       
00572       out[33][0][0] = 216.0 - 432.0*in[1] - 432.0*in[2] + 864.0*in[1]*in[2] - 432.0*in[0] + 864.0*in[0]*in[1] + 864.0*in[0]*in[2] - 1728.0*in[0]*in[1]*in[2];
00573       out[33][0][1] = -432.0*in[0] + 864.0*in[0]*in[2] + 432.0*in[0]*in[0] - 864.0*in[0]*in[0]*in[2];
00574       out[33][0][2] = -432.0*in[0] + 864.0*in[0]*in[1] + 432.0*in[0]*in[0] - 864.0*in[0]*in[0]*in[1];
00575       out[33][1][0] = 0.0;
00576       out[33][1][1] = 0.0;
00577       out[33][1][2] = 0.0;
00578       out[33][2][0] = 0.0;
00579       out[33][2][1] = 0.0;
00580       out[33][2][2] = 0.0;
00581       
00582       out[34][0][0] = 0.0;
00583       out[34][0][1] = 0.0;
00584       out[34][0][2] = 0.0;
00585       out[34][1][0] = -432.0*in[1] + 864.0*in[1]*in[2] + 432.0*in[1]*in[1] - 864.0*in[1]*in[1]*in[2];
00586       out[34][1][1] = 216.0 - 432.0*in[0] - 432.0*in[2] + 864.0*in[0]*in[2] - 432.0*in[1] + 864.0*in[0]*in[1] + 864.0*in[1]*in[2] - 1728.0*in[0]*in[1]*in[2];
00587       out[34][1][2] = -432.0*in[1] + 864.0*in[0]*in[1] + 432.0*in[1]*in[1] - 864.0*in[0]*in[1]*in[1];
00588       out[34][2][0] = 0.0;
00589       out[34][2][1] = 0.0;
00590       out[34][2][2] = 0.0;
00591       
00592       out[35][0][0] = 0.0;
00593       out[35][0][1] = 0.0;
00594       out[35][0][2] = 0.0;
00595       out[35][1][0] = 0.0;
00596       out[35][1][1] = 0.0;
00597       out[35][1][2] = 0.0;
00598       out[35][2][0] = -432.0*in[2] + 864.0*in[1]*in[2] + 432.0*in[2]*in[2] - 864.0*in[1]*in[2]*in[2];
00599       out[35][2][1] = -432.0*in[2] + 864.0*in[0]*in[2] + 432.0*in[2]*in[2] - 864.0*in[0]*in[2]*in[2];
00600       out[35][2][2] = 216.0 - 432.0*in[0] - 432.0*in[1] + 864.0*in[0]*in[1] - 432.0*in[2] + 864.0*in[0]*in[2] + 864.0*in[1]*in[2] - 1728.0*in[0]*in[1]*in[2];
00601   }
00602 
00604   unsigned int order () const
00605   {
00606     return 3;
00607   }
00608 
00609 private:
00610     R sign0, sign1, sign2, sign3, sign4, sign5;
00611   };
00612 }
00613 #endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1Q3DLOCALBASIS_HH