]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Implement the second derivative for finite elements in 2D.
authorwolf <wolf@0785d39b-7218-0410-832d-ea1e28bc413d>
Fri, 6 Nov 1998 14:41:34 +0000 (14:41 +0000)
committerwolf <wolf@0785d39b-7218-0410-832d-ea1e28bc413d>
Fri, 6 Nov 1998 14:41:34 +0000 (14:41 +0000)
git-svn-id: https://svn.dealii.org/trunk@645 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/deal.II/include/fe/fe.h
deal.II/deal.II/include/fe/fe_lib.criss_cross.h
deal.II/deal.II/include/fe/fe_lib.lagrange.h
deal.II/deal.II/source/fe/fe_lib.criss_cross.cc
deal.II/deal.II/source/fe/fe_lib.cubic.cc
deal.II/deal.II/source/fe/fe_lib.linear.cc
deal.II/deal.II/source/fe/fe_lib.quadratic.cc
deal.II/deal.II/source/fe/fe_lib.quartic.cc
deal.II/deal.II/source/fe/scripts/2d/postprocess

index 525275ad1d32d9dd8f8a8962a9eb507c7b1a50d9..b48770180b20c107d63acfc0437b738abd6abcb9 100644 (file)
@@ -8,6 +8,7 @@
 #include <base/exceptions.h>
 #include <base/subscriptor.h>
 #include <base/point.h>
+#include <base/tensor.h>
 #include <grid/dof.h>
 #include <grid/geometry_info.h>
 #include <lac/dfmatrix.h>
@@ -549,8 +550,16 @@ class FiniteElement : public FiniteElementBase<dim> {
                                      * function at the point #p#.
                                      * #p# is a point on the reference element,
                                      */
-    virtual Point<dim> shape_grad (const unsigned int i,
-                                  const Point<dim> &p) const = 0;
+    virtual Point<dim> shape_grad (const unsigned int  i,
+                                  const Point<dim>   &p) const = 0;
+
+                                    /**
+                                     * Return the tensor of second derivatives
+                                     * of the #i#th shape function at
+                                     * point #p# on the unit cell.
+                                     */
+    virtual Tensor<2,dim> shape_grad_grad (const unsigned int  i,
+                                          const Point<dim>   &p) const = 0;
 
                                     /**
                                      * Return the value of the #i#th shape
index 6001b5e9c81db0737e29d5bc5c6fd7041a992990..51da24e2c06fe56ce03583f617cf417d994226ff 100644 (file)
@@ -184,6 +184,21 @@ class FECrissCross : public FiniteElement<dim> {
     virtual Point<dim> shape_grad(const unsigned int i,
                                  const Point<dim>& p) const;
 
+                                    /**
+                                     * Return the tensor of second derivatives
+                                     * of the #i#th shape function at
+                                     * point #p# on the unit cell.
+                                     *
+                                     * The second derivatives are zero almost
+                                     * everywhere for this element; however,
+                                     * they are singular at the diagonals, so
+                                     * when trying to use this tensor, you
+                                     * should take special care and you may
+                                     * need to do some evaluation by hand.
+                                     */
+    virtual Tensor<2,dim> shape_grad_grad (const unsigned int  i,
+                                          const Point<dim>   &p) const = 0;
+
                                     /**
                                      * Refer to the base class for detailed
                                      * information on this function.
index d5bc8da53cfb26ea1ee04b444eabcad36111bef4..cc1bf1ed8c026bfb1a3ecd8c70431d3e09a8849b 100644 (file)
@@ -47,6 +47,17 @@ class FELinear : public FELinearMapping<dim> {
     virtual Point<dim> shape_grad(const unsigned int i,
                                  const Point<dim>& p) const;
 
+                                    /**
+                                     * Return the tensor of second derivatives
+                                     * of the #i#th shape function at
+                                     * point #p# on the unit cell.
+                                     *
+                                     * For linear elements, all second
+                                     * derivatives on the unit cell are zero.
+                                     */
+    virtual Tensor<2,dim> shape_grad_grad (const unsigned int  i,
+                                          const Point<dim>   &p) const = 0;
+
                                     /**
                                      * Refer to the base class for detailed
                                      * information on this function.
@@ -110,6 +121,14 @@ class FEQuadraticSub : public FELinearMapping<dim> {
     virtual Point<dim> shape_grad(const unsigned int i,
                                  const Point<dim>& p) const;
 
+                                    /**
+                                     * Return the tensor of second derivatives
+                                     * of the #i#th shape function at
+                                     * point #p# on the unit cell.
+                                     */
+    virtual Tensor<2,dim> shape_grad_grad (const unsigned int  i,
+                                          const Point<dim>   &p) const = 0;
+
                                     /**
                                      * Refer to the base class for detailed
                                      * information on this function.
@@ -192,6 +211,14 @@ class FECubicSub : public FELinearMapping<dim> {
     virtual Point<dim> shape_grad(const unsigned int i,
                                  const Point<dim>& p) const;
 
+                                    /**
+                                     * Return the tensor of second derivatives
+                                     * of the #i#th shape function at
+                                     * point #p# on the unit cell.
+                                     */
+    virtual Tensor<2,dim> shape_grad_grad (const unsigned int  i,
+                                          const Point<dim>   &p) const = 0;
+
                                     /**
                                      * Refer to the base class for detailed
                                      * information on this function.
@@ -275,6 +302,14 @@ class FEQuarticSub : public FELinearMapping<dim> {
     virtual Point<dim> shape_grad(const unsigned int i,
                                  const Point<dim>& p) const;
 
+                                    /**
+                                     * Return the tensor of second derivatives
+                                     * of the #i#th shape function at
+                                     * point #p# on the unit cell.
+                                     */
+    virtual Tensor<2,dim> shape_grad_grad (const unsigned int  i,
+                                          const Point<dim>   &p) const = 0;
+
                                     /**
                                      * Refer to the base class for detailed
                                      * information on this function.
index 7244c61d43dc1fb8c53e7c4bd5ffd1065e5fe584..cb46024d834421f023ceebf7bcc3b3101a155c7e 100644 (file)
@@ -330,6 +330,14 @@ Point<1> FECrissCross<1>::shape_grad (const unsigned int, const Point<1> &) cons
 
 
 
+template <>
+Tensor<2,1> FECrissCross<1>::shape_grad_grad (const unsigned int, const Point<1> &) const {
+  Assert (false, ExcNotUseful());
+  return Tensor<2,1>();
+};
+
+
+
 template <>
 void FECrissCross<1>::get_unit_support_points (vector<Point<1> >&) const {
   Assert (false, ExcNotUseful());
@@ -554,6 +562,21 @@ Point<2> FECrissCross<2>::shape_grad (const unsigned int i, const Point<2> &p) c
 };
 
 
+template <>
+inline
+Tensor<2,2>
+FECrissCross<2>::shape_grad_grad (const unsigned int i,
+                                 const Point<2> &) const
+{
+  Assert((i<total_dofs), ExcInvalidIndex(i));
+                                  // second derivatives on the unit cell
+                                  // are always zero, at least almost
+                                  // everywhere. see the doc for more
+                                  // info
+  return Tensor<2,2>();
+};
+
+
 
 template <>
 void FECrissCross<2>::get_unit_support_points (vector<Point<2> > &unit_points) const {
index 71c5b35670dd3a3254145b1bcccc8d3bae5f704d..654489f5f05455c4364372f52b35127349e5243b 100644 (file)
@@ -861,6 +861,109 @@ FECubicSub<2>::shape_grad (const unsigned int i,
 
 
 
+template <>
+Tensor<2,2>
+FECubicSub<2>::shape_grad_grad (const unsigned int i,
+                               const Point<2>    &p) const
+{
+  Assert (i<total_dofs, ExcInvalidIndex(i));
+
+  const double xi = p(0),
+              eta= p(1);
+  Tensor<2,2> return_value;
+  
+  switch (i)
+    {
+      case 0:
+           return_value[0][0] = 18.0-27.0*xi+(-99.0+297.0/2.0*xi)*eta+(162.0-243.0*xi)*eta*eta+(-81.0+243.0/2.0*xi)*eta*eta*eta;
+           return_value[0][1] = 121.0/4.0-99.0*xi+297.0/4.0*xi*xi+2.0*(-99.0/2.0+162.0*xi-243.0/2.0*xi*xi)*eta+3.0*(99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta*eta;
+           return_value[1][0] = 121.0/4.0-99.0*xi+297.0/4.0*xi*xi+2.0*(-99.0/2.0+162.0*xi-243.0/2.0*xi*xi)*eta+3.0*(99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta*eta;
+           return_value[1][1] = 18.0-99.0*xi+162.0*xi*xi-81.0*xi*xi*xi+6.0*(-9.0/2.0+99.0/4.0*xi-81.0/2.0*xi*xi+81.0/4.0*xi*xi*xi)*eta;
+           break;
+      case 1:
+           return_value[0][0] = -9.0+27.0*xi+(99.0/2.0-297.0/2.0*xi)*eta+(-81.0+243.0*xi)*eta*eta+(81.0/2.0-243.0/2.0*xi)*eta*eta*eta;
+           return_value[0][1] = -11.0/2.0+99.0/2.0*xi-297.0/4.0*xi*xi+2.0*(9.0-81.0*xi+243.0/2.0*xi*xi)*eta+3.0*(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta*eta;
+           return_value[1][0] = -11.0/2.0+99.0/2.0*xi-297.0/4.0*xi*xi+2.0*(9.0-81.0*xi+243.0/2.0*xi*xi)*eta+3.0*(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta*eta;
+           return_value[1][1] = 18.0*xi-81.0*xi*xi+81.0*xi*xi*xi+6.0*(-9.0/2.0*xi+81.0/4.0*xi*xi-81.0/4.0*xi*xi*xi)*eta;
+           break;
+      case 2:
+           return_value[0][0] = (-9.0+27.0*xi)*eta+(81.0/2.0-243.0/2.0*xi)*eta*eta+(-81.0/2.0+243.0/2.0*xi)*eta*eta*eta;
+           return_value[0][1] = 1.0-9.0*xi+27.0/2.0*xi*xi+2.0*(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta+3.0*(9.0/2.0-81.0/2.0*xi+243.0/4.0*xi*xi)*eta*eta;
+           return_value[1][0] = 1.0-9.0*xi+27.0/2.0*xi*xi+2.0*(-9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi)*eta+3.0*(9.0/2.0-81.0/2.0*xi+243.0/4.0*xi*xi)*eta*eta;
+           return_value[1][1] = -9.0*xi+81.0/2.0*xi*xi-81.0/2.0*xi*xi*xi+6.0*(9.0/2.0*xi-81.0/4.0*xi*xi+81.0/4.0*xi*xi*xi)*eta;
+           break;
+      case 3:
+           return_value[0][0] = (18.0-27.0*xi)*eta+(-81.0+243.0/2.0*xi)*eta*eta+(81.0-243.0/2.0*xi)*eta*eta*eta;
+           return_value[0][1] = -11.0/2.0+18.0*xi-27.0/2.0*xi*xi+2.0*(99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta+3.0*(-99.0/4.0+81.0*xi-243.0/4.0*xi*xi)*eta*eta;
+           return_value[1][0] = -11.0/2.0+18.0*xi-27.0/2.0*xi*xi+2.0*(99.0/4.0-81.0*xi+243.0/4.0*xi*xi)*eta+3.0*(-99.0/4.0+81.0*xi-243.0/4.0*xi*xi)*eta*eta;
+           return_value[1][1] = -9.0+99.0/2.0*xi-81.0*xi*xi+81.0/2.0*xi*xi*xi+6.0*(9.0/2.0-99.0/4.0*xi+81.0/2.0*xi*xi-81.0/4.0*xi*xi*xi)*eta;
+           break;
+      case 4:
+           return_value[0][0] = -45.0+81.0*xi+(495.0/2.0-891.0/2.0*xi)*eta+(-405.0+729.0*xi)*eta*eta+(405.0/2.0-729.0/2.0*xi)*eta*eta*eta;
+           return_value[0][1] = -99.0/2.0+495.0/2.0*xi-891.0/4.0*xi*xi+2.0*(81.0-405.0*xi+729.0/2.0*xi*xi)*eta+3.0*(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta*eta;
+           return_value[1][0] = -99.0/2.0+495.0/2.0*xi-891.0/4.0*xi*xi+2.0*(81.0-405.0*xi+729.0/2.0*xi*xi)*eta+3.0*(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta*eta;
+           return_value[1][1] = 162.0*xi-405.0*xi*xi+243.0*xi*xi*xi+6.0*(-81.0/2.0*xi+405.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta;
+           break;
+      case 5:
+           return_value[0][0] = 36.0-81.0*xi+(-198.0+891.0/2.0*xi)*eta+(324.0-729.0*xi)*eta*eta+(-162.0+729.0/2.0*xi)*eta*eta*eta;
+           return_value[0][1] = 99.0/4.0-198.0*xi+891.0/4.0*xi*xi+2.0*(-81.0/2.0+324.0*xi-729.0/2.0*xi*xi)*eta+3.0*(81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta*eta;
+           return_value[1][0] = 99.0/4.0-198.0*xi+891.0/4.0*xi*xi+2.0*(-81.0/2.0+324.0*xi-729.0/2.0*xi*xi)*eta+3.0*(81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta*eta;
+           return_value[1][1] = -81.0*xi+324.0*xi*xi-243.0*xi*xi*xi+6.0*(81.0/4.0*xi-81.0*xi*xi+243.0/4.0*xi*xi*xi)*eta;
+           break;
+      case 6:
+           return_value[0][0] = (-81.0+243.0*xi)*eta+(405.0/2.0-1215.0/2.0*xi)*eta*eta+(-243.0/2.0+729.0/2.0*xi)*eta*eta*eta;
+           return_value[0][1] = 9.0-81.0*xi+243.0/2.0*xi*xi+2.0*(-45.0/2.0+405.0/2.0*xi-1215.0/4.0*xi*xi)*eta+3.0*(27.0/2.0-243.0/2.0*xi+729.0/4.0*xi*xi)*eta*eta;
+           return_value[1][0] = 9.0-81.0*xi+243.0/2.0*xi*xi+2.0*(-45.0/2.0+405.0/2.0*xi-1215.0/4.0*xi*xi)*eta+3.0*(27.0/2.0-243.0/2.0*xi+729.0/4.0*xi*xi)*eta*eta;
+           return_value[1][1] = -45.0*xi+405.0/2.0*xi*xi-405.0/2.0*xi*xi*xi+6.0*(27.0/2.0*xi-243.0/4.0*xi*xi+243.0/4.0*xi*xi*xi)*eta;
+           break;
+      case 7:
+           return_value[0][0] = (81.0/2.0-243.0/2.0*xi)*eta+(-162.0+486.0*xi)*eta*eta+(243.0/2.0-729.0/2.0*xi)*eta*eta*eta;
+           return_value[0][1] = -9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi+2.0*(18.0-162.0*xi+243.0*xi*xi)*eta+3.0*(-27.0/2.0+243.0/2.0*xi-729.0/4.0*xi*xi)*eta*eta;
+           return_value[1][0] = -9.0/2.0+81.0/2.0*xi-243.0/4.0*xi*xi+2.0*(18.0-162.0*xi+243.0*xi*xi)*eta+3.0*(-27.0/2.0+243.0/2.0*xi-729.0/4.0*xi*xi)*eta*eta;
+           return_value[1][1] = 36.0*xi-162.0*xi*xi+162.0*xi*xi*xi+6.0*(-27.0/2.0*xi+243.0/4.0*xi*xi-243.0/4.0*xi*xi*xi)*eta;
+           break;
+      case 8:
+           return_value[0][0] = (-45.0+81.0*xi)*eta+(405.0/2.0-729.0/2.0*xi)*eta*eta+(-405.0/2.0+729.0/2.0*xi)*eta*eta*eta;
+           return_value[0][1] = 9.0-45.0*xi+81.0/2.0*xi*xi+2.0*(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta+3.0*(81.0/2.0-405.0/2.0*xi+729.0/4.0*xi*xi)*eta*eta;
+           return_value[1][0] = 9.0-45.0*xi+81.0/2.0*xi*xi+2.0*(-81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi)*eta+3.0*(81.0/2.0-405.0/2.0*xi+729.0/4.0*xi*xi)*eta*eta;
+           return_value[1][1] = -81.0*xi+405.0/2.0*xi*xi-243.0/2.0*xi*xi*xi+6.0*(81.0/2.0*xi-405.0/4.0*xi*xi+243.0/4.0*xi*xi*xi)*eta;
+           break;
+      case 9:
+           return_value[0][0] = (36.0-81.0*xi)*eta+(-162.0+729.0/2.0*xi)*eta*eta+(162.0-729.0/2.0*xi)*eta*eta*eta;
+           return_value[0][1] = -9.0/2.0+36.0*xi-81.0/2.0*xi*xi+2.0*(81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta+3.0*(-81.0/4.0+162.0*xi-729.0/4.0*xi*xi)*eta*eta;
+           return_value[1][0] = -9.0/2.0+36.0*xi-81.0/2.0*xi*xi+2.0*(81.0/4.0-162.0*xi+729.0/4.0*xi*xi)*eta+3.0*(-81.0/4.0+162.0*xi-729.0/4.0*xi*xi)*eta*eta;
+           return_value[1][1] = 81.0/2.0*xi-162.0*xi*xi+243.0/2.0*xi*xi*xi+6.0*(-81.0/4.0*xi+81.0*xi*xi-243.0/4.0*xi*xi*xi)*eta;
+           return_value[0][0] = (162.0-243.0*xi)*eta+(-405.0+1215.0/2.0*xi)*eta*eta+(243.0-729.0/2.0*xi)*eta*eta*eta;
+           return_value[0][1] = -99.0/2.0+162.0*xi-243.0/2.0*xi*xi+2.0*(495.0/4.0-405.0*xi+1215.0/4.0*xi*xi)*eta+3.0*(-297.0/4.0+243.0*xi-729.0/4.0*xi*xi)*eta*eta;
+           return_value[1][0] = -99.0/2.0+162.0*xi-243.0/2.0*xi*xi+2.0*(495.0/4.0-405.0*xi+1215.0/4.0*xi*xi)*eta+3.0*(-297.0/4.0+243.0*xi-729.0/4.0*xi*xi)*eta*eta;
+           return_value[1][1] = -45.0+495.0/2.0*xi-405.0*xi*xi+405.0/2.0*xi*xi*xi+6.0*(27.0/2.0-297.0/4.0*xi+243.0/2.0*xi*xi-243.0/4.0*xi*xi*xi)*eta;
+           return_value[0][0] = (-81.0+243.0/2.0*xi)*eta+(324.0-486.0*xi)*eta*eta+(-243.0+729.0/2.0*xi)*eta*eta*eta;
+           return_value[0][1] = 99.0/4.0-81.0*xi+243.0/4.0*xi*xi+2.0*(-99.0+324.0*xi-243.0*xi*xi)*eta+3.0*(297.0/4.0-243.0*xi+729.0/4.0*xi*xi)*eta*eta;
+           return_value[1][0] = 99.0/4.0-81.0*xi+243.0/4.0*xi*xi+2.0*(-99.0+324.0*xi-243.0*xi*xi)*eta+3.0*(297.0/4.0-243.0*xi+729.0/4.0*xi*xi)*eta*eta;
+           return_value[1][1] = 36.0-198.0*xi+324.0*xi*xi-162.0*xi*xi*xi+6.0*(-27.0/2.0+297.0/4.0*xi-243.0/2.0*xi*xi+243.0/4.0*xi*xi*xi)*eta;
+           return_value[0][0] = (-405.0+729.0*xi)*eta+(2025.0/2.0-3645.0/2.0*xi)*eta*eta+(-1215.0/2.0+2187.0/2.0*xi)*eta*eta*eta;
+           return_value[0][1] = 81.0-405.0*xi+729.0/2.0*xi*xi+2.0*(-405.0/2.0+2025.0/2.0*xi-3645.0/4.0*xi*xi)*eta+3.0*(243.0/2.0-1215.0/2.0*xi+2187.0/4.0*xi*xi)*eta*eta;
+           return_value[1][0] = 81.0-405.0*xi+729.0/2.0*xi*xi+2.0*(-405.0/2.0+2025.0/2.0*xi-3645.0/4.0*xi*xi)*eta+3.0*(243.0/2.0-1215.0/2.0*xi+2187.0/4.0*xi*xi)*eta*eta;
+           return_value[1][1] = -405.0*xi+2025.0/2.0*xi*xi-1215.0/2.0*xi*xi*xi+6.0*(243.0/2.0*xi-1215.0/4.0*xi*xi+729.0/4.0*xi*xi*xi)*eta;
+           return_value[0][0] = (324.0-729.0*xi)*eta+(-810.0+3645.0/2.0*xi)*eta*eta+(486.0-2187.0/2.0*xi)*eta*eta*eta;
+           return_value[0][1] = -81.0/2.0+324.0*xi-729.0/2.0*xi*xi+2.0*(405.0/4.0-810.0*xi+3645.0/4.0*xi*xi)*eta+3.0*(-243.0/4.0+486.0*xi-2187.0/4.0*xi*xi)*eta*eta;
+           return_value[1][0] = -81.0/2.0+324.0*xi-729.0/2.0*xi*xi+2.0*(405.0/4.0-810.0*xi+3645.0/4.0*xi*xi)*eta+3.0*(-243.0/4.0+486.0*xi-2187.0/4.0*xi*xi)*eta*eta;
+           return_value[1][1] = 405.0/2.0*xi-810.0*xi*xi+1215.0/2.0*xi*xi*xi+6.0*(-243.0/4.0*xi+243.0*xi*xi-729.0/4.0*xi*xi*xi)*eta;
+           return_value[0][0] = (-162.0+729.0/2.0*xi)*eta+(648.0-1458.0*xi)*eta*eta+(-486.0+2187.0/2.0*xi)*eta*eta*eta;
+           return_value[0][1] = 81.0/4.0-162.0*xi+729.0/4.0*xi*xi+2.0*(-81.0+648.0*xi-729.0*xi*xi)*eta+3.0*(243.0/4.0-486.0*xi+2187.0/4.0*xi*xi)*eta*eta;
+           return_value[1][0] = 81.0/4.0-162.0*xi+729.0/4.0*xi*xi+2.0*(-81.0+648.0*xi-729.0*xi*xi)*eta+3.0*(243.0/4.0-486.0*xi+2187.0/4.0*xi*xi)*eta*eta;
+           return_value[1][1] = -162.0*xi+648.0*xi*xi-486.0*xi*xi*xi+6.0*(243.0/4.0*xi-243.0*xi*xi+729.0/4.0*xi*xi*xi)*eta;
+           return_value[0][0] = (405.0/2.0-729.0/2.0*xi)*eta+(-810.0+1458.0*xi)*eta*eta+(1215.0/2.0-2187.0/2.0*xi)*eta*eta*eta;
+           return_value[0][1] = -81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi+2.0*(162.0-810.0*xi+729.0*xi*xi)*eta+3.0*(-243.0/2.0+1215.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta;
+           return_value[1][0] = -81.0/2.0+405.0/2.0*xi-729.0/4.0*xi*xi+2.0*(162.0-810.0*xi+729.0*xi*xi)*eta+3.0*(-243.0/2.0+1215.0/2.0*xi-2187.0/4.0*xi*xi)*eta*eta;
+           return_value[1][1] = 324.0*xi-810.0*xi*xi+486.0*xi*xi*xi+6.0*(-243.0/2.0*xi+1215.0/4.0*xi*xi-729.0/4.0*xi*xi*xi)*eta;
+      break;
+    };
+  return return_value;
+};
+
+
+
 template <>
 void FECubicSub<2>::get_local_mass_matrix (const DoFHandler<2>::cell_iterator &cell,
                                               const Boundary<2> &,
index e8c18dcf3e083153ee4fc5db1ddfa6cb65b1e925..33babbfa5c0c9872120da14736df6007f03a4719 100644 (file)
@@ -77,6 +77,20 @@ FELinear<1>::shape_grad(const unsigned int i,
 
 
 
+template <>
+inline
+Tensor<2,1>
+FELinear<1>::shape_grad_grad (const unsigned int i,
+                             const Point<1> &) const
+{
+  Assert((i<total_dofs), ExcInvalidIndex(i));
+                                  // second derivatives on the unit cell
+                                  // are always zero
+  return Tensor<2,1>();
+};
+
+
+
 template <>
 void FELinear<1>::get_unit_support_points (vector<Point<1> >  &support_points) const {
   FiniteElement<1>::get_unit_support_points (support_points);
@@ -218,6 +232,19 @@ FELinear<2>::shape_grad (const unsigned int i,
 
 
 
+template <>
+inline
+Tensor<2,2>
+FELinear<2>::shape_grad_grad (const unsigned int i,
+                             const Point<2> &) const
+{
+  Assert((i<total_dofs), ExcInvalidIndex(i));
+
+  return Tensor<2,2>();
+};
+
+
+
 template <>
 void FELinear<2>::get_local_mass_matrix (const DoFHandler<2>::cell_iterator &cell,
                                         const Boundary<2> &,
index 5605d05b2873ce24c5a0ab807c5f3ad13aca380e..5ace45a8efd83f27c4d0e6c34892369ade0ccc02 100644 (file)
@@ -641,6 +641,79 @@ FEQuadraticSub<2>::shape_grad (const unsigned int i,
 
 
 
+template <>
+Tensor<2,2>
+FEQuadraticSub<2>::shape_grad_grad (const unsigned int i,
+                                   const Point<2>    &p) const
+{
+  Assert (i<total_dofs, ExcInvalidIndex(i));
+
+  const double xi = p(0),
+              eta= p(1);
+  Tensor<2,2> return_value;
+  
+  switch (i)
+    {
+      case 0:
+           return_value[0][0] = 4.0-12.0*eta+8.0*eta*eta;
+           return_value[0][1] = 9.0-12.0*xi+2.0*(-6.0+8.0*xi)*eta;
+           return_value[1][0] = 9.0-12.0*xi+2.0*(-6.0+8.0*xi)*eta;
+           return_value[1][1] = 4.0-12.0*xi+8.0*xi*xi;
+           break;
+      case 1:
+           return_value[0][0] = 4.0-12.0*eta+8.0*eta*eta;
+           return_value[0][1] = 3.0-12.0*xi+2.0*(-2.0+8.0*xi)*eta;
+           return_value[1][0] = 3.0-12.0*xi+2.0*(-2.0+8.0*xi)*eta;
+           return_value[1][1] = -4.0*xi+8.0*xi*xi;
+           break;
+      case 2:
+           return_value[0][0] = -4.0*eta+8.0*eta*eta;
+           return_value[0][1] = 1.0-4.0*xi+2.0*(-2.0+8.0*xi)*eta;
+           return_value[1][0] = 1.0-4.0*xi+2.0*(-2.0+8.0*xi)*eta;
+           return_value[1][1] = -4.0*xi+8.0*xi*xi;
+           break;
+      case 3:
+           return_value[0][0] = -4.0*eta+8.0*eta*eta;
+           return_value[0][1] = 3.0-4.0*xi+2.0*(-6.0+8.0*xi)*eta;
+           return_value[1][0] = 3.0-4.0*xi+2.0*(-6.0+8.0*xi)*eta;
+           return_value[1][1] = 4.0-12.0*xi+8.0*xi*xi;
+           break;
+      case 4:
+           return_value[0][0] = -8.0+24.0*eta-16.0*eta*eta;
+           return_value[0][1] = -12.0+24.0*xi+2.0*(8.0-16.0*xi)*eta;
+           return_value[1][0] = -12.0+24.0*xi+2.0*(8.0-16.0*xi)*eta;
+           return_value[1][1] = 16.0*xi-16.0*xi*xi;
+           break;
+      case 5:
+           return_value[0][0] = 16.0*eta-16.0*eta*eta;
+           return_value[0][1] = -4.0+16.0*xi+2.0*(4.0-16.0*xi)*eta;
+           return_value[1][0] = -4.0+16.0*xi+2.0*(4.0-16.0*xi)*eta;
+           return_value[1][1] = 8.0*xi-16.0*xi*xi;
+           break;
+      case 6:
+           return_value[0][0] = 8.0*eta-16.0*eta*eta;
+           return_value[0][1] = -4.0+8.0*xi+2.0*(8.0-16.0*xi)*eta;
+           return_value[1][0] = -4.0+8.0*xi+2.0*(8.0-16.0*xi)*eta;
+           return_value[1][1] = 16.0*xi-16.0*xi*xi;
+           break;
+      case 7:
+           return_value[0][0] = 16.0*eta-16.0*eta*eta;
+           return_value[0][1] = -12.0+16.0*xi+2.0*(12.0-16.0*xi)*eta;
+           return_value[1][0] = -12.0+16.0*xi+2.0*(12.0-16.0*xi)*eta;
+           return_value[1][1] = -8.0+24.0*xi-16.0*xi*xi;
+           break;
+      case 8:
+           return_value[0][0] = -32.0*eta+32.0*eta*eta;
+           return_value[0][1] = 16.0-32.0*xi+2.0*(-16.0+32.0*xi)*eta;
+           return_value[1][0] = 16.0-32.0*xi+2.0*(-16.0+32.0*xi)*eta;
+           return_value[1][1] = -32.0*xi+32.0*xi*xi;
+      break;
+    };
+  return return_value;
+};
+
+
+
 template <>
 void FEQuadraticSub<2>::get_local_mass_matrix (const DoFHandler<2>::cell_iterator &cell,
                                               const Boundary<2> &,
index 1bcda503d5bd2122faa95dcf1893b6a491e4e27d..134f9d9faa321c1a595f7910d63540ced4de6a31 100644 (file)
@@ -1252,6 +1252,145 @@ FEQuarticSub<2>::shape_grad (const unsigned int i,
 
 
 
+template <>
+Tensor<2,2>
+FEQuarticSub<2>::shape_grad_grad (const unsigned int i,
+                                 const Point<2>    &p) const
+{
+  Assert (i<total_dofs, ExcInvalidIndex(i));
+
+  const double xi = p(0),
+              eta= p(1);
+  Tensor<2,2> return_value;
+  
+  switch (i)
+    {
+      case 0:
+           return_value[0][0] = 140.0/3.0-160.0*xi+128.0*xi*xi+(-3500.0/9.0+4000.0/3.0*xi-3200.0/3.0*xi*xi)*eta+(9800.0/9.0-11200.0/3.0*xi+8960.0/3.0*xi*xi)*eta*eta+(-11200.0/9.0+12800.0/3.0*xi-10240.0/3.0*xi*xi)*eta*eta*eta+(4480.0/9.0-5120.0/3.0*xi+4096.0/3.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = 625.0/9.0-3500.0/9.0*xi+2000.0/3.0*xi*xi-3200.0/9.0*xi*xi*xi+2.0*(-1750.0/9.0+9800.0/9.0*xi-5600.0/3.0*xi*xi+8960.0/9.0*xi*xi*xi)*eta+3.0*(2000.0/9.0-11200.0/9.0*xi+6400.0/3.0*xi*xi-10240.0/9.0*xi*xi*xi)*eta*eta+4.0*(-800.0/9.0+4480.0/9.0*xi-2560.0/3.0*xi*xi+4096.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = 625.0/9.0-3500.0/9.0*xi+2000.0/3.0*xi*xi-3200.0/9.0*xi*xi*xi+2.0*(-1750.0/9.0+9800.0/9.0*xi-5600.0/3.0*xi*xi+8960.0/9.0*xi*xi*xi)*eta+3.0*(2000.0/9.0-11200.0/9.0*xi+6400.0/3.0*xi*xi-10240.0/9.0*xi*xi*xi)*eta*eta+4.0*(-800.0/9.0+4480.0/9.0*xi-2560.0/3.0*xi*xi+4096.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = 140.0/3.0-3500.0/9.0*xi+9800.0/9.0*xi*xi-11200.0/9.0*xi*xi*xi+4480.0/9.0*xi*xi*xi*xi+6.0*(-80.0/3.0+2000.0/9.0*xi-5600.0/9.0*xi*xi+6400.0/9.0*xi*xi*xi-2560.0/9.0*xi*xi*xi*xi)*eta+12.0*(32.0/3.0-800.0/9.0*xi+2240.0/9.0*xi*xi-2560.0/9.0*xi*xi*xi+1024.0/9.0*xi*xi*xi*xi)*eta*eta;
+           break;
+      case 1:
+           return_value[0][0] = 44.0/3.0-96.0*xi+128.0*xi*xi+(-1100.0/9.0+800.0*xi-3200.0/3.0*xi*xi)*eta+(3080.0/9.0-2240.0*xi+8960.0/3.0*xi*xi)*eta*eta+(-3520.0/9.0+2560.0*xi-10240.0/3.0*xi*xi)*eta*eta*eta+(1408.0/9.0-1024.0*xi+4096.0/3.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = 25.0/3.0-1100.0/9.0*xi+400.0*xi*xi-3200.0/9.0*xi*xi*xi+2.0*(-70.0/3.0+3080.0/9.0*xi-1120.0*xi*xi+8960.0/9.0*xi*xi*xi)*eta+3.0*(80.0/3.0-3520.0/9.0*xi+1280.0*xi*xi-10240.0/9.0*xi*xi*xi)*eta*eta+4.0*(-32.0/3.0+1408.0/9.0*xi-512.0*xi*xi+4096.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = 25.0/3.0-1100.0/9.0*xi+400.0*xi*xi-3200.0/9.0*xi*xi*xi+2.0*(-70.0/3.0+3080.0/9.0*xi-1120.0*xi*xi+8960.0/9.0*xi*xi*xi)*eta+3.0*(80.0/3.0-3520.0/9.0*xi+1280.0*xi*xi-10240.0/9.0*xi*xi*xi)*eta*eta+4.0*(-32.0/3.0+1408.0/9.0*xi-512.0*xi*xi+4096.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = -140.0/3.0*xi+3080.0/9.0*xi*xi-2240.0/3.0*xi*xi*xi+4480.0/9.0*xi*xi*xi*xi+6.0*(80.0/3.0*xi-1760.0/9.0*xi*xi+1280.0/3.0*xi*xi*xi-2560.0/9.0*xi*xi*xi*xi)*eta+12.0*(-32.0/3.0*xi+704.0/9.0*xi*xi-512.0/3.0*xi*xi*xi+1024.0/9.0*xi*xi*xi*xi)*eta*eta;
+           break;
+      case 2:
+           return_value[0][0] = (-44.0/3.0+96.0*xi-128.0*xi*xi)*eta+(968.0/9.0-704.0*xi+2816.0/3.0*xi*xi)*eta*eta+(-704.0/3.0+1536.0*xi-2048.0*xi*xi)*eta*eta*eta+(1408.0/9.0-1024.0*xi+4096.0/3.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = 1.0-44.0/3.0*xi+48.0*xi*xi-128.0/3.0*xi*xi*xi+2.0*(-22.0/3.0+968.0/9.0*xi-352.0*xi*xi+2816.0/9.0*xi*xi*xi)*eta+3.0*(16.0-704.0/3.0*xi+768.0*xi*xi-2048.0/3.0*xi*xi*xi)*eta*eta+4.0*(-32.0/3.0+1408.0/9.0*xi-512.0*xi*xi+4096.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = 1.0-44.0/3.0*xi+48.0*xi*xi-128.0/3.0*xi*xi*xi+2.0*(-22.0/3.0+968.0/9.0*xi-352.0*xi*xi+2816.0/9.0*xi*xi*xi)*eta+3.0*(16.0-704.0/3.0*xi+768.0*xi*xi-2048.0/3.0*xi*xi*xi)*eta*eta+4.0*(-32.0/3.0+1408.0/9.0*xi-512.0*xi*xi+4096.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = -44.0/3.0*xi+968.0/9.0*xi*xi-704.0/3.0*xi*xi*xi+1408.0/9.0*xi*xi*xi*xi+6.0*(16.0*xi-352.0/3.0*xi*xi+256.0*xi*xi*xi-512.0/3.0*xi*xi*xi*xi)*eta+12.0*(-32.0/3.0*xi+704.0/9.0*xi*xi-512.0/3.0*xi*xi*xi+1024.0/9.0*xi*xi*xi*xi)*eta*eta;
+           break;
+      case 3:
+           return_value[0][0] = (-140.0/3.0+160.0*xi-128.0*xi*xi)*eta+(3080.0/9.0-3520.0/3.0*xi+2816.0/3.0*xi*xi)*eta*eta+(-2240.0/3.0+2560.0*xi-2048.0*xi*xi)*eta*eta*eta+(4480.0/9.0-5120.0/3.0*xi+4096.0/3.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = 25.0/3.0-140.0/3.0*xi+80.0*xi*xi-128.0/3.0*xi*xi*xi+2.0*(-550.0/9.0+3080.0/9.0*xi-1760.0/3.0*xi*xi+2816.0/9.0*xi*xi*xi)*eta+3.0*(400.0/3.0-2240.0/3.0*xi+1280.0*xi*xi-2048.0/3.0*xi*xi*xi)*eta*eta+4.0*(-800.0/9.0+4480.0/9.0*xi-2560.0/3.0*xi*xi+4096.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = 25.0/3.0-140.0/3.0*xi+80.0*xi*xi-128.0/3.0*xi*xi*xi+2.0*(-550.0/9.0+3080.0/9.0*xi-1760.0/3.0*xi*xi+2816.0/9.0*xi*xi*xi)*eta+3.0*(400.0/3.0-2240.0/3.0*xi+1280.0*xi*xi-2048.0/3.0*xi*xi*xi)*eta*eta+4.0*(-800.0/9.0+4480.0/9.0*xi-2560.0/3.0*xi*xi+4096.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = 44.0/3.0-1100.0/9.0*xi+3080.0/9.0*xi*xi-3520.0/9.0*xi*xi*xi+1408.0/9.0*xi*xi*xi*xi+6.0*(-16.0+400.0/3.0*xi-1120.0/3.0*xi*xi+1280.0/3.0*xi*xi*xi-512.0/3.0*xi*xi*xi*xi)*eta+12.0*(32.0/3.0-800.0/9.0*xi+2240.0/9.0*xi*xi-2560.0/9.0*xi*xi*xi+1024.0/9.0*xi*xi*xi*xi)*eta*eta;
+           break;
+      case 4:
+           return_value[0][0] = -416.0/3.0+576.0*xi-512.0*xi*xi+(10400.0/9.0-4800.0*xi+12800.0/3.0*xi*xi)*eta+(-29120.0/9.0+13440.0*xi-35840.0/3.0*xi*xi)*eta*eta+(33280.0/9.0-15360.0*xi+40960.0/3.0*xi*xi)*eta*eta*eta+(-13312.0/9.0+6144.0*xi-16384.0/3.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = -400.0/3.0+10400.0/9.0*xi-2400.0*xi*xi+12800.0/9.0*xi*xi*xi+2.0*(1120.0/3.0-29120.0/9.0*xi+6720.0*xi*xi-35840.0/9.0*xi*xi*xi)*eta+3.0*(-1280.0/3.0+33280.0/9.0*xi-7680.0*xi*xi+40960.0/9.0*xi*xi*xi)*eta*eta+4.0*(512.0/3.0-13312.0/9.0*xi+3072.0*xi*xi-16384.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = -400.0/3.0+10400.0/9.0*xi-2400.0*xi*xi+12800.0/9.0*xi*xi*xi+2.0*(1120.0/3.0-29120.0/9.0*xi+6720.0*xi*xi-35840.0/9.0*xi*xi*xi)*eta+3.0*(-1280.0/3.0+33280.0/9.0*xi-7680.0*xi*xi+40960.0/9.0*xi*xi*xi)*eta*eta+4.0*(512.0/3.0-13312.0/9.0*xi+3072.0*xi*xi-16384.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = 2240.0/3.0*xi-29120.0/9.0*xi*xi+4480.0*xi*xi*xi-17920.0/9.0*xi*xi*xi*xi+6.0*(-1280.0/3.0*xi+16640.0/9.0*xi*xi-2560.0*xi*xi*xi+10240.0/9.0*xi*xi*xi*xi)*eta+12.0*(512.0/3.0*xi-6656.0/9.0*xi*xi+1024.0*xi*xi*xi-4096.0/9.0*xi*xi*xi*xi)*eta*eta;
+           break;
+      case 5:
+           return_value[0][0] = 152.0-768.0*xi+768.0*xi*xi+(-3800.0/3.0+6400.0*xi-6400.0*xi*xi)*eta+(10640.0/3.0-17920.0*xi+17920.0*xi*xi)*eta*eta+(-12160.0/3.0+20480.0*xi-20480.0*xi*xi)*eta*eta*eta+(4864.0/3.0-8192.0*xi+8192.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = 100.0-3800.0/3.0*xi+3200.0*xi*xi-6400.0/3.0*xi*xi*xi+2.0*(-280.0+10640.0/3.0*xi-8960.0*xi*xi+17920.0/3.0*xi*xi*xi)*eta+3.0*(320.0-12160.0/3.0*xi+10240.0*xi*xi-20480.0/3.0*xi*xi*xi)*eta*eta+4.0*(-128.0+4864.0/3.0*xi-4096.0*xi*xi+8192.0/3.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = 100.0-3800.0/3.0*xi+3200.0*xi*xi-6400.0/3.0*xi*xi*xi+2.0*(-280.0+10640.0/3.0*xi-8960.0*xi*xi+17920.0/3.0*xi*xi*xi)*eta+3.0*(320.0-12160.0/3.0*xi+10240.0*xi*xi-20480.0/3.0*xi*xi*xi)*eta*eta+4.0*(-128.0+4864.0/3.0*xi-4096.0*xi*xi+8192.0/3.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = -560.0*xi+10640.0/3.0*xi*xi-17920.0/3.0*xi*xi*xi+8960.0/3.0*xi*xi*xi*xi+6.0*(320.0*xi-6080.0/3.0*xi*xi+10240.0/3.0*xi*xi*xi-5120.0/3.0*xi*xi*xi*xi)*eta+12.0*(-128.0*xi+2432.0/3.0*xi*xi-4096.0/3.0*xi*xi*xi+2048.0/3.0*xi*xi*xi*xi)*eta*eta;
+           break;
+      case 6:
+           return_value[0][0] = -224.0/3.0+448.0*xi-512.0*xi*xi+(5600.0/9.0-11200.0/3.0*xi+12800.0/3.0*xi*xi)*eta+(-15680.0/9.0+31360.0/3.0*xi-35840.0/3.0*xi*xi)*eta*eta+(17920.0/9.0-35840.0/3.0*xi+40960.0/3.0*xi*xi)*eta*eta*eta+(-7168.0/9.0+14336.0/3.0*xi-16384.0/3.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = -400.0/9.0+5600.0/9.0*xi-5600.0/3.0*xi*xi+12800.0/9.0*xi*xi*xi+2.0*(1120.0/9.0-15680.0/9.0*xi+15680.0/3.0*xi*xi-35840.0/9.0*xi*xi*xi)*eta+3.0*(-1280.0/9.0+17920.0/9.0*xi-17920.0/3.0*xi*xi+40960.0/9.0*xi*xi*xi)*eta*eta+4.0*(512.0/9.0-7168.0/9.0*xi+7168.0/3.0*xi*xi-16384.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = -400.0/9.0+5600.0/9.0*xi-5600.0/3.0*xi*xi+12800.0/9.0*xi*xi*xi+2.0*(1120.0/9.0-15680.0/9.0*xi+15680.0/3.0*xi*xi-35840.0/9.0*xi*xi*xi)*eta+3.0*(-1280.0/9.0+17920.0/9.0*xi-17920.0/3.0*xi*xi+40960.0/9.0*xi*xi*xi)*eta*eta+4.0*(512.0/9.0-7168.0/9.0*xi+7168.0/3.0*xi*xi-16384.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = 2240.0/9.0*xi-15680.0/9.0*xi*xi+31360.0/9.0*xi*xi*xi-17920.0/9.0*xi*xi*xi*xi+6.0*(-1280.0/9.0*xi+8960.0/9.0*xi*xi-17920.0/9.0*xi*xi*xi+10240.0/9.0*xi*xi*xi*xi)*eta+12.0*(512.0/9.0*xi-3584.0/9.0*xi*xi+7168.0/9.0*xi*xi*xi-4096.0/9.0*xi*xi*xi*xi)*eta*eta;
+           break;
+      case 7:
+           return_value[0][0] = (704.0/3.0-1536.0*xi+2048.0*xi*xi)*eta+(-9152.0/9.0+6656.0*xi-26624.0/3.0*xi*xi)*eta*eta+(1408.0-9216.0*xi+12288.0*xi*xi)*eta*eta*eta+(-5632.0/9.0+4096.0*xi-16384.0/3.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = -16.0+704.0/3.0*xi-768.0*xi*xi+2048.0/3.0*xi*xi*xi+2.0*(208.0/3.0-9152.0/9.0*xi+3328.0*xi*xi-26624.0/9.0*xi*xi*xi)*eta+3.0*(-96.0+1408.0*xi-4608.0*xi*xi+4096.0*xi*xi*xi)*eta*eta+4.0*(128.0/3.0-5632.0/9.0*xi+2048.0*xi*xi-16384.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = -16.0+704.0/3.0*xi-768.0*xi*xi+2048.0/3.0*xi*xi*xi+2.0*(208.0/3.0-9152.0/9.0*xi+3328.0*xi*xi-26624.0/9.0*xi*xi*xi)*eta+3.0*(-96.0+1408.0*xi-4608.0*xi*xi+4096.0*xi*xi*xi)*eta*eta+4.0*(128.0/3.0-5632.0/9.0*xi+2048.0*xi*xi-16384.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = 416.0/3.0*xi-9152.0/9.0*xi*xi+6656.0/3.0*xi*xi*xi-13312.0/9.0*xi*xi*xi*xi+6.0*(-96.0*xi+704.0*xi*xi-1536.0*xi*xi*xi+1024.0*xi*xi*xi*xi)*eta+12.0*(128.0/3.0*xi-2816.0/9.0*xi*xi+2048.0/3.0*xi*xi*xi-4096.0/9.0*xi*xi*xi*xi)*eta*eta;
+           break;
+      case 8:
+           return_value[0][0] = (-176.0+1152.0*xi-1536.0*xi*xi)*eta+(3344.0/3.0-7296.0*xi+9728.0*xi*xi)*eta*eta+(-5632.0/3.0+12288.0*xi-16384.0*xi*xi)*eta*eta*eta+(2816.0/3.0-6144.0*xi+8192.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = 12.0-176.0*xi+576.0*xi*xi-512.0*xi*xi*xi+2.0*(-76.0+3344.0/3.0*xi-3648.0*xi*xi+9728.0/3.0*xi*xi*xi)*eta+3.0*(128.0-5632.0/3.0*xi+6144.0*xi*xi-16384.0/3.0*xi*xi*xi)*eta*eta+4.0*(-64.0+2816.0/3.0*xi-3072.0*xi*xi+8192.0/3.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = 12.0-176.0*xi+576.0*xi*xi-512.0*xi*xi*xi+2.0*(-76.0+3344.0/3.0*xi-3648.0*xi*xi+9728.0/3.0*xi*xi*xi)*eta+3.0*(128.0-5632.0/3.0*xi+6144.0*xi*xi-16384.0/3.0*xi*xi*xi)*eta*eta+4.0*(-64.0+2816.0/3.0*xi-3072.0*xi*xi+8192.0/3.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = -152.0*xi+3344.0/3.0*xi*xi-2432.0*xi*xi*xi+4864.0/3.0*xi*xi*xi*xi+6.0*(128.0*xi-2816.0/3.0*xi*xi+2048.0*xi*xi*xi-4096.0/3.0*xi*xi*xi*xi)*eta+12.0*(-64.0*xi+1408.0/3.0*xi*xi-1024.0*xi*xi*xi+2048.0/3.0*xi*xi*xi*xi)*eta*eta;
+           break;
+      case 9:
+           return_value[0][0] = (704.0/9.0-512.0*xi+2048.0/3.0*xi*xi)*eta+(-4928.0/9.0+3584.0*xi-14336.0/3.0*xi*xi)*eta*eta+(9856.0/9.0-7168.0*xi+28672.0/3.0*xi*xi)*eta*eta*eta+(-5632.0/9.0+4096.0*xi-16384.0/3.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = -16.0/3.0+704.0/9.0*xi-256.0*xi*xi+2048.0/9.0*xi*xi*xi+2.0*(112.0/3.0-4928.0/9.0*xi+1792.0*xi*xi-14336.0/9.0*xi*xi*xi)*eta+3.0*(-224.0/3.0+9856.0/9.0*xi-3584.0*xi*xi+28672.0/9.0*xi*xi*xi)*eta*eta+4.0*(128.0/3.0-5632.0/9.0*xi+2048.0*xi*xi-16384.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = -16.0/3.0+704.0/9.0*xi-256.0*xi*xi+2048.0/9.0*xi*xi*xi+2.0*(112.0/3.0-4928.0/9.0*xi+1792.0*xi*xi-14336.0/9.0*xi*xi*xi)*eta+3.0*(-224.0/3.0+9856.0/9.0*xi-3584.0*xi*xi+28672.0/9.0*xi*xi*xi)*eta*eta+4.0*(128.0/3.0-5632.0/9.0*xi+2048.0*xi*xi-16384.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = 224.0/3.0*xi-4928.0/9.0*xi*xi+3584.0/3.0*xi*xi*xi-7168.0/9.0*xi*xi*xi*xi+6.0*(-224.0/3.0*xi+4928.0/9.0*xi*xi-3584.0/3.0*xi*xi*xi+7168.0/9.0*xi*xi*xi*xi)*eta+12.0*(128.0/3.0*xi-2816.0/9.0*xi*xi+2048.0/3.0*xi*xi*xi-4096.0/9.0*xi*xi*xi*xi)*eta*eta;
+           return_value[0][0] = (416.0/3.0-576.0*xi+512.0*xi*xi)*eta+(-9152.0/9.0+4224.0*xi-11264.0/3.0*xi*xi)*eta*eta+(6656.0/3.0-9216.0*xi+8192.0*xi*xi)*eta*eta*eta+(-13312.0/9.0+6144.0*xi-16384.0/3.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = -16.0+416.0/3.0*xi-288.0*xi*xi+512.0/3.0*xi*xi*xi+2.0*(352.0/3.0-9152.0/9.0*xi+2112.0*xi*xi-11264.0/9.0*xi*xi*xi)*eta+3.0*(-256.0+6656.0/3.0*xi-4608.0*xi*xi+8192.0/3.0*xi*xi*xi)*eta*eta+4.0*(512.0/3.0-13312.0/9.0*xi+3072.0*xi*xi-16384.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = -16.0+416.0/3.0*xi-288.0*xi*xi+512.0/3.0*xi*xi*xi+2.0*(352.0/3.0-9152.0/9.0*xi+2112.0*xi*xi-11264.0/9.0*xi*xi*xi)*eta+3.0*(-256.0+6656.0/3.0*xi-4608.0*xi*xi+8192.0/3.0*xi*xi*xi)*eta*eta+4.0*(512.0/3.0-13312.0/9.0*xi+3072.0*xi*xi-16384.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = 704.0/3.0*xi-9152.0/9.0*xi*xi+1408.0*xi*xi*xi-5632.0/9.0*xi*xi*xi*xi+6.0*(-256.0*xi+3328.0/3.0*xi*xi-1536.0*xi*xi*xi+2048.0/3.0*xi*xi*xi*xi)*eta+12.0*(512.0/3.0*xi-6656.0/9.0*xi*xi+1024.0*xi*xi*xi-4096.0/9.0*xi*xi*xi*xi)*eta*eta;
+           return_value[0][0] = (-152.0+768.0*xi-768.0*xi*xi)*eta+(3344.0/3.0-5632.0*xi+5632.0*xi*xi)*eta*eta+(-2432.0+12288.0*xi-12288.0*xi*xi)*eta*eta*eta+(4864.0/3.0-8192.0*xi+8192.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = 12.0-152.0*xi+384.0*xi*xi-256.0*xi*xi*xi+2.0*(-88.0+3344.0/3.0*xi-2816.0*xi*xi+5632.0/3.0*xi*xi*xi)*eta+3.0*(192.0-2432.0*xi+6144.0*xi*xi-4096.0*xi*xi*xi)*eta*eta+4.0*(-128.0+4864.0/3.0*xi-4096.0*xi*xi+8192.0/3.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = 12.0-152.0*xi+384.0*xi*xi-256.0*xi*xi*xi+2.0*(-88.0+3344.0/3.0*xi-2816.0*xi*xi+5632.0/3.0*xi*xi*xi)*eta+3.0*(192.0-2432.0*xi+6144.0*xi*xi-4096.0*xi*xi*xi)*eta*eta+4.0*(-128.0+4864.0/3.0*xi-4096.0*xi*xi+8192.0/3.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = -176.0*xi+3344.0/3.0*xi*xi-5632.0/3.0*xi*xi*xi+2816.0/3.0*xi*xi*xi*xi+6.0*(192.0*xi-1216.0*xi*xi+2048.0*xi*xi*xi-1024.0*xi*xi*xi*xi)*eta+12.0*(-128.0*xi+2432.0/3.0*xi*xi-4096.0/3.0*xi*xi*xi+2048.0/3.0*xi*xi*xi*xi)*eta*eta;
+           return_value[0][0] = (224.0/3.0-448.0*xi+512.0*xi*xi)*eta+(-4928.0/9.0+9856.0/3.0*xi-11264.0/3.0*xi*xi)*eta*eta+(3584.0/3.0-7168.0*xi+8192.0*xi*xi)*eta*eta*eta+(-7168.0/9.0+14336.0/3.0*xi-16384.0/3.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = -16.0/3.0+224.0/3.0*xi-224.0*xi*xi+512.0/3.0*xi*xi*xi+2.0*(352.0/9.0-4928.0/9.0*xi+4928.0/3.0*xi*xi-11264.0/9.0*xi*xi*xi)*eta+3.0*(-256.0/3.0+3584.0/3.0*xi-3584.0*xi*xi+8192.0/3.0*xi*xi*xi)*eta*eta+4.0*(512.0/9.0-7168.0/9.0*xi+7168.0/3.0*xi*xi-16384.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = -16.0/3.0+224.0/3.0*xi-224.0*xi*xi+512.0/3.0*xi*xi*xi+2.0*(352.0/9.0-4928.0/9.0*xi+4928.0/3.0*xi*xi-11264.0/9.0*xi*xi*xi)*eta+3.0*(-256.0/3.0+3584.0/3.0*xi-3584.0*xi*xi+8192.0/3.0*xi*xi*xi)*eta*eta+4.0*(512.0/9.0-7168.0/9.0*xi+7168.0/3.0*xi*xi-16384.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = 704.0/9.0*xi-4928.0/9.0*xi*xi+9856.0/9.0*xi*xi*xi-5632.0/9.0*xi*xi*xi*xi+6.0*(-256.0/3.0*xi+1792.0/3.0*xi*xi-3584.0/3.0*xi*xi*xi+2048.0/3.0*xi*xi*xi*xi)*eta+12.0*(512.0/9.0*xi-3584.0/9.0*xi*xi+7168.0/9.0*xi*xi*xi-4096.0/9.0*xi*xi*xi*xi)*eta*eta;
+           return_value[0][0] = (2240.0/3.0-2560.0*xi+2048.0*xi*xi)*eta+(-29120.0/9.0+33280.0/3.0*xi-26624.0/3.0*xi*xi)*eta*eta+(4480.0-15360.0*xi+12288.0*xi*xi)*eta*eta*eta+(-17920.0/9.0+20480.0/3.0*xi-16384.0/3.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = -400.0/3.0+2240.0/3.0*xi-1280.0*xi*xi+2048.0/3.0*xi*xi*xi+2.0*(5200.0/9.0-29120.0/9.0*xi+16640.0/3.0*xi*xi-26624.0/9.0*xi*xi*xi)*eta+3.0*(-800.0+4480.0*xi-7680.0*xi*xi+4096.0*xi*xi*xi)*eta*eta+4.0*(3200.0/9.0-17920.0/9.0*xi+10240.0/3.0*xi*xi-16384.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = -400.0/3.0+2240.0/3.0*xi-1280.0*xi*xi+2048.0/3.0*xi*xi*xi+2.0*(5200.0/9.0-29120.0/9.0*xi+16640.0/3.0*xi*xi-26624.0/9.0*xi*xi*xi)*eta+3.0*(-800.0+4480.0*xi-7680.0*xi*xi+4096.0*xi*xi*xi)*eta*eta+4.0*(3200.0/9.0-17920.0/9.0*xi+10240.0/3.0*xi*xi-16384.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = -416.0/3.0+10400.0/9.0*xi-29120.0/9.0*xi*xi+33280.0/9.0*xi*xi*xi-13312.0/9.0*xi*xi*xi*xi+6.0*(96.0-800.0*xi+2240.0*xi*xi-2560.0*xi*xi*xi+1024.0*xi*xi*xi*xi)*eta+12.0*(-128.0/3.0+3200.0/9.0*xi-8960.0/9.0*xi*xi+10240.0/9.0*xi*xi*xi-4096.0/9.0*xi*xi*xi*xi)*eta*eta;
+           return_value[0][0] = (-560.0+1920.0*xi-1536.0*xi*xi)*eta+(10640.0/3.0-12160.0*xi+9728.0*xi*xi)*eta*eta+(-17920.0/3.0+20480.0*xi-16384.0*xi*xi)*eta*eta*eta+(8960.0/3.0-10240.0*xi+8192.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = 100.0-560.0*xi+960.0*xi*xi-512.0*xi*xi*xi+2.0*(-1900.0/3.0+10640.0/3.0*xi-6080.0*xi*xi+9728.0/3.0*xi*xi*xi)*eta+3.0*(3200.0/3.0-17920.0/3.0*xi+10240.0*xi*xi-16384.0/3.0*xi*xi*xi)*eta*eta+4.0*(-1600.0/3.0+8960.0/3.0*xi-5120.0*xi*xi+8192.0/3.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = 100.0-560.0*xi+960.0*xi*xi-512.0*xi*xi*xi+2.0*(-1900.0/3.0+10640.0/3.0*xi-6080.0*xi*xi+9728.0/3.0*xi*xi*xi)*eta+3.0*(3200.0/3.0-17920.0/3.0*xi+10240.0*xi*xi-16384.0/3.0*xi*xi*xi)*eta*eta+4.0*(-1600.0/3.0+8960.0/3.0*xi-5120.0*xi*xi+8192.0/3.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = 152.0-3800.0/3.0*xi+10640.0/3.0*xi*xi-12160.0/3.0*xi*xi*xi+4864.0/3.0*xi*xi*xi*xi+6.0*(-128.0+3200.0/3.0*xi-8960.0/3.0*xi*xi+10240.0/3.0*xi*xi*xi-4096.0/3.0*xi*xi*xi*xi)*eta+12.0*(64.0-1600.0/3.0*xi+4480.0/3.0*xi*xi-5120.0/3.0*xi*xi*xi+2048.0/3.0*xi*xi*xi*xi)*eta*eta;
+           return_value[0][0] = (2240.0/9.0-2560.0/3.0*xi+2048.0/3.0*xi*xi)*eta+(-15680.0/9.0+17920.0/3.0*xi-14336.0/3.0*xi*xi)*eta*eta+(31360.0/9.0-35840.0/3.0*xi+28672.0/3.0*xi*xi)*eta*eta*eta+(-17920.0/9.0+20480.0/3.0*xi-16384.0/3.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = -400.0/9.0+2240.0/9.0*xi-1280.0/3.0*xi*xi+2048.0/9.0*xi*xi*xi+2.0*(2800.0/9.0-15680.0/9.0*xi+8960.0/3.0*xi*xi-14336.0/9.0*xi*xi*xi)*eta+3.0*(-5600.0/9.0+31360.0/9.0*xi-17920.0/3.0*xi*xi+28672.0/9.0*xi*xi*xi)*eta*eta+4.0*(3200.0/9.0-17920.0/9.0*xi+10240.0/3.0*xi*xi-16384.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = -400.0/9.0+2240.0/9.0*xi-1280.0/3.0*xi*xi+2048.0/9.0*xi*xi*xi+2.0*(2800.0/9.0-15680.0/9.0*xi+8960.0/3.0*xi*xi-14336.0/9.0*xi*xi*xi)*eta+3.0*(-5600.0/9.0+31360.0/9.0*xi-17920.0/3.0*xi*xi+28672.0/9.0*xi*xi*xi)*eta*eta+4.0*(3200.0/9.0-17920.0/9.0*xi+10240.0/3.0*xi*xi-16384.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = -224.0/3.0+5600.0/9.0*xi-15680.0/9.0*xi*xi+17920.0/9.0*xi*xi*xi-7168.0/9.0*xi*xi*xi*xi+6.0*(224.0/3.0-5600.0/9.0*xi+15680.0/9.0*xi*xi-17920.0/9.0*xi*xi*xi+7168.0/9.0*xi*xi*xi*xi)*eta+12.0*(-128.0/3.0+3200.0/9.0*xi-8960.0/9.0*xi*xi+10240.0/9.0*xi*xi*xi-4096.0/9.0*xi*xi*xi*xi)*eta*eta;
+           return_value[0][0] = (-6656.0/3.0+9216.0*xi-8192.0*xi*xi)*eta+(86528.0/9.0-39936.0*xi+106496.0/3.0*xi*xi)*eta*eta+(-13312.0+55296.0*xi-49152.0*xi*xi)*eta*eta*eta+(53248.0/9.0-24576.0*xi+65536.0/3.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = 256.0-6656.0/3.0*xi+4608.0*xi*xi-8192.0/3.0*xi*xi*xi+2.0*(-3328.0/3.0+86528.0/9.0*xi-19968.0*xi*xi+106496.0/9.0*xi*xi*xi)*eta+3.0*(1536.0-13312.0*xi+27648.0*xi*xi-16384.0*xi*xi*xi)*eta*eta+4.0*(-2048.0/3.0+53248.0/9.0*xi-12288.0*xi*xi+65536.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = 256.0-6656.0/3.0*xi+4608.0*xi*xi-8192.0/3.0*xi*xi*xi+2.0*(-3328.0/3.0+86528.0/9.0*xi-19968.0*xi*xi+106496.0/9.0*xi*xi*xi)*eta+3.0*(1536.0-13312.0*xi+27648.0*xi*xi-16384.0*xi*xi*xi)*eta*eta+4.0*(-2048.0/3.0+53248.0/9.0*xi-12288.0*xi*xi+65536.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = -6656.0/3.0*xi+86528.0/9.0*xi*xi-13312.0*xi*xi*xi+53248.0/9.0*xi*xi*xi*xi+6.0*(1536.0*xi-6656.0*xi*xi+9216.0*xi*xi*xi-4096.0*xi*xi*xi*xi)*eta+12.0*(-2048.0/3.0*xi+26624.0/9.0*xi*xi-4096.0*xi*xi*xi+16384.0/9.0*xi*xi*xi*xi)*eta*eta;
+           return_value[0][0] = (-3584.0/3.0+7168.0*xi-8192.0*xi*xi)*eta+(46592.0/9.0-93184.0/3.0*xi+106496.0/3.0*xi*xi)*eta*eta+(-7168.0+43008.0*xi-49152.0*xi*xi)*eta*eta*eta+(28672.0/9.0-57344.0/3.0*xi+65536.0/3.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = 256.0/3.0-3584.0/3.0*xi+3584.0*xi*xi-8192.0/3.0*xi*xi*xi+2.0*(-3328.0/9.0+46592.0/9.0*xi-46592.0/3.0*xi*xi+106496.0/9.0*xi*xi*xi)*eta+3.0*(512.0-7168.0*xi+21504.0*xi*xi-16384.0*xi*xi*xi)*eta*eta+4.0*(-2048.0/9.0+28672.0/9.0*xi-28672.0/3.0*xi*xi+65536.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = 256.0/3.0-3584.0/3.0*xi+3584.0*xi*xi-8192.0/3.0*xi*xi*xi+2.0*(-3328.0/9.0+46592.0/9.0*xi-46592.0/3.0*xi*xi+106496.0/9.0*xi*xi*xi)*eta+3.0*(512.0-7168.0*xi+21504.0*xi*xi-16384.0*xi*xi*xi)*eta*eta+4.0*(-2048.0/9.0+28672.0/9.0*xi-28672.0/3.0*xi*xi+65536.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = -6656.0/9.0*xi+46592.0/9.0*xi*xi-93184.0/9.0*xi*xi*xi+53248.0/9.0*xi*xi*xi*xi+6.0*(512.0*xi-3584.0*xi*xi+7168.0*xi*xi*xi-4096.0*xi*xi*xi*xi)*eta+12.0*(-2048.0/9.0*xi+14336.0/9.0*xi*xi-28672.0/9.0*xi*xi*xi+16384.0/9.0*xi*xi*xi*xi)*eta*eta;
+           return_value[0][0] = (-3584.0/9.0+7168.0/3.0*xi-8192.0/3.0*xi*xi)*eta+(25088.0/9.0-50176.0/3.0*xi+57344.0/3.0*xi*xi)*eta*eta+(-50176.0/9.0+100352.0/3.0*xi-114688.0/3.0*xi*xi)*eta*eta*eta+(28672.0/9.0-57344.0/3.0*xi+65536.0/3.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = 256.0/9.0-3584.0/9.0*xi+3584.0/3.0*xi*xi-8192.0/9.0*xi*xi*xi+2.0*(-1792.0/9.0+25088.0/9.0*xi-25088.0/3.0*xi*xi+57344.0/9.0*xi*xi*xi)*eta+3.0*(3584.0/9.0-50176.0/9.0*xi+50176.0/3.0*xi*xi-114688.0/9.0*xi*xi*xi)*eta*eta+4.0*(-2048.0/9.0+28672.0/9.0*xi-28672.0/3.0*xi*xi+65536.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = 256.0/9.0-3584.0/9.0*xi+3584.0/3.0*xi*xi-8192.0/9.0*xi*xi*xi+2.0*(-1792.0/9.0+25088.0/9.0*xi-25088.0/3.0*xi*xi+57344.0/9.0*xi*xi*xi)*eta+3.0*(3584.0/9.0-50176.0/9.0*xi+50176.0/3.0*xi*xi-114688.0/9.0*xi*xi*xi)*eta*eta+4.0*(-2048.0/9.0+28672.0/9.0*xi-28672.0/3.0*xi*xi+65536.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = -3584.0/9.0*xi+25088.0/9.0*xi*xi-50176.0/9.0*xi*xi*xi+28672.0/9.0*xi*xi*xi*xi+6.0*(3584.0/9.0*xi-25088.0/9.0*xi*xi+50176.0/9.0*xi*xi*xi-28672.0/9.0*xi*xi*xi*xi)*eta+12.0*(-2048.0/9.0*xi+14336.0/9.0*xi*xi-28672.0/9.0*xi*xi*xi+16384.0/9.0*xi*xi*xi*xi)*eta*eta;
+           return_value[0][0] = (-6656.0/9.0+3072.0*xi-8192.0/3.0*xi*xi)*eta+(46592.0/9.0-21504.0*xi+57344.0/3.0*xi*xi)*eta*eta+(-93184.0/9.0+43008.0*xi-114688.0/3.0*xi*xi)*eta*eta*eta+(53248.0/9.0-24576.0*xi+65536.0/3.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = 256.0/3.0-6656.0/9.0*xi+1536.0*xi*xi-8192.0/9.0*xi*xi*xi+2.0*(-1792.0/3.0+46592.0/9.0*xi-10752.0*xi*xi+57344.0/9.0*xi*xi*xi)*eta+3.0*(3584.0/3.0-93184.0/9.0*xi+21504.0*xi*xi-114688.0/9.0*xi*xi*xi)*eta*eta+4.0*(-2048.0/3.0+53248.0/9.0*xi-12288.0*xi*xi+65536.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = 256.0/3.0-6656.0/9.0*xi+1536.0*xi*xi-8192.0/9.0*xi*xi*xi+2.0*(-1792.0/3.0+46592.0/9.0*xi-10752.0*xi*xi+57344.0/9.0*xi*xi*xi)*eta+3.0*(3584.0/3.0-93184.0/9.0*xi+21504.0*xi*xi-114688.0/9.0*xi*xi*xi)*eta*eta+4.0*(-2048.0/3.0+53248.0/9.0*xi-12288.0*xi*xi+65536.0/9.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = -3584.0/3.0*xi+46592.0/9.0*xi*xi-7168.0*xi*xi*xi+28672.0/9.0*xi*xi*xi*xi+6.0*(3584.0/3.0*xi-46592.0/9.0*xi*xi+7168.0*xi*xi*xi-28672.0/9.0*xi*xi*xi*xi)*eta+12.0*(-2048.0/3.0*xi+26624.0/9.0*xi*xi-4096.0*xi*xi*xi+16384.0/9.0*xi*xi*xi*xi)*eta*eta;
+           return_value[0][0] = (2432.0-12288.0*xi+12288.0*xi*xi)*eta+(-31616.0/3.0+53248.0*xi-53248.0*xi*xi)*eta*eta+(14592.0-73728.0*xi+73728.0*xi*xi)*eta*eta*eta+(-19456.0/3.0+32768.0*xi-32768.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = -192.0+2432.0*xi-6144.0*xi*xi+4096.0*xi*xi*xi+2.0*(832.0-31616.0/3.0*xi+26624.0*xi*xi-53248.0/3.0*xi*xi*xi)*eta+3.0*(-1152.0+14592.0*xi-36864.0*xi*xi+24576.0*xi*xi*xi)*eta*eta+4.0*(512.0-19456.0/3.0*xi+16384.0*xi*xi-32768.0/3.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = -192.0+2432.0*xi-6144.0*xi*xi+4096.0*xi*xi*xi+2.0*(832.0-31616.0/3.0*xi+26624.0*xi*xi-53248.0/3.0*xi*xi*xi)*eta+3.0*(-1152.0+14592.0*xi-36864.0*xi*xi+24576.0*xi*xi*xi)*eta*eta+4.0*(512.0-19456.0/3.0*xi+16384.0*xi*xi-32768.0/3.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = 1664.0*xi-31616.0/3.0*xi*xi+53248.0/3.0*xi*xi*xi-26624.0/3.0*xi*xi*xi*xi+6.0*(-1152.0*xi+7296.0*xi*xi-12288.0*xi*xi*xi+6144.0*xi*xi*xi*xi)*eta+12.0*(512.0*xi-9728.0/3.0*xi*xi+16384.0/3.0*xi*xi*xi-8192.0/3.0*xi*xi*xi*xi)*eta*eta;
+           return_value[0][0] = (896.0-5376.0*xi+6144.0*xi*xi)*eta+(-17024.0/3.0+34048.0*xi-38912.0*xi*xi)*eta*eta+(28672.0/3.0-57344.0*xi+65536.0*xi*xi)*eta*eta*eta+(-14336.0/3.0+28672.0*xi-32768.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = -64.0+896.0*xi-2688.0*xi*xi+2048.0*xi*xi*xi+2.0*(1216.0/3.0-17024.0/3.0*xi+17024.0*xi*xi-38912.0/3.0*xi*xi*xi)*eta+3.0*(-2048.0/3.0+28672.0/3.0*xi-28672.0*xi*xi+65536.0/3.0*xi*xi*xi)*eta*eta+4.0*(1024.0/3.0-14336.0/3.0*xi+14336.0*xi*xi-32768.0/3.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = -64.0+896.0*xi-2688.0*xi*xi+2048.0*xi*xi*xi+2.0*(1216.0/3.0-17024.0/3.0*xi+17024.0*xi*xi-38912.0/3.0*xi*xi*xi)*eta+3.0*(-2048.0/3.0+28672.0/3.0*xi-28672.0*xi*xi+65536.0/3.0*xi*xi*xi)*eta*eta+4.0*(1024.0/3.0-14336.0/3.0*xi+14336.0*xi*xi-32768.0/3.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = 2432.0/3.0*xi-17024.0/3.0*xi*xi+34048.0/3.0*xi*xi*xi-19456.0/3.0*xi*xi*xi*xi+6.0*(-2048.0/3.0*xi+14336.0/3.0*xi*xi-28672.0/3.0*xi*xi*xi+16384.0/3.0*xi*xi*xi*xi)*eta+12.0*(1024.0/3.0*xi-7168.0/3.0*xi*xi+14336.0/3.0*xi*xi*xi-8192.0/3.0*xi*xi*xi*xi)*eta*eta;
+           return_value[0][0] = (2432.0/3.0-4096.0*xi+4096.0*xi*xi)*eta+(-17024.0/3.0+28672.0*xi-28672.0*xi*xi)*eta*eta+(34048.0/3.0-57344.0*xi+57344.0*xi*xi)*eta*eta*eta+(-19456.0/3.0+32768.0*xi-32768.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = -64.0+2432.0/3.0*xi-2048.0*xi*xi+4096.0/3.0*xi*xi*xi+2.0*(448.0-17024.0/3.0*xi+14336.0*xi*xi-28672.0/3.0*xi*xi*xi)*eta+3.0*(-896.0+34048.0/3.0*xi-28672.0*xi*xi+57344.0/3.0*xi*xi*xi)*eta*eta+4.0*(512.0-19456.0/3.0*xi+16384.0*xi*xi-32768.0/3.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = -64.0+2432.0/3.0*xi-2048.0*xi*xi+4096.0/3.0*xi*xi*xi+2.0*(448.0-17024.0/3.0*xi+14336.0*xi*xi-28672.0/3.0*xi*xi*xi)*eta+3.0*(-896.0+34048.0/3.0*xi-28672.0*xi*xi+57344.0/3.0*xi*xi*xi)*eta*eta+4.0*(512.0-19456.0/3.0*xi+16384.0*xi*xi-32768.0/3.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = 896.0*xi-17024.0/3.0*xi*xi+28672.0/3.0*xi*xi*xi-14336.0/3.0*xi*xi*xi*xi+6.0*(-896.0*xi+17024.0/3.0*xi*xi-28672.0/3.0*xi*xi*xi+14336.0/3.0*xi*xi*xi*xi)*eta+12.0*(512.0*xi-9728.0/3.0*xi*xi+16384.0/3.0*xi*xi*xi-8192.0/3.0*xi*xi*xi*xi)*eta*eta;
+           return_value[0][0] = (1664.0-6912.0*xi+6144.0*xi*xi)*eta+(-31616.0/3.0+43776.0*xi-38912.0*xi*xi)*eta*eta+(53248.0/3.0-73728.0*xi+65536.0*xi*xi)*eta*eta*eta+(-26624.0/3.0+36864.0*xi-32768.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = -192.0+1664.0*xi-3456.0*xi*xi+2048.0*xi*xi*xi+2.0*(1216.0-31616.0/3.0*xi+21888.0*xi*xi-38912.0/3.0*xi*xi*xi)*eta+3.0*(-2048.0+53248.0/3.0*xi-36864.0*xi*xi+65536.0/3.0*xi*xi*xi)*eta*eta+4.0*(1024.0-26624.0/3.0*xi+18432.0*xi*xi-32768.0/3.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = -192.0+1664.0*xi-3456.0*xi*xi+2048.0*xi*xi*xi+2.0*(1216.0-31616.0/3.0*xi+21888.0*xi*xi-38912.0/3.0*xi*xi*xi)*eta+3.0*(-2048.0+53248.0/3.0*xi-36864.0*xi*xi+65536.0/3.0*xi*xi*xi)*eta*eta+4.0*(1024.0-26624.0/3.0*xi+18432.0*xi*xi-32768.0/3.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = 2432.0*xi-31616.0/3.0*xi*xi+14592.0*xi*xi*xi-19456.0/3.0*xi*xi*xi*xi+6.0*(-2048.0*xi+26624.0/3.0*xi*xi-12288.0*xi*xi*xi+16384.0/3.0*xi*xi*xi*xi)*eta+12.0*(1024.0*xi-13312.0/3.0*xi*xi+6144.0*xi*xi*xi-8192.0/3.0*xi*xi*xi*xi)*eta*eta;
+           return_value[0][0] = (-1824.0+9216.0*xi-9216.0*xi*xi)*eta+(11552.0-58368.0*xi+58368.0*xi*xi)*eta*eta+(-19456.0+98304.0*xi-98304.0*xi*xi)*eta*eta*eta+(9728.0-49152.0*xi+49152.0*xi*xi)*eta*eta*eta*eta;
+           return_value[0][1] = 144.0-1824.0*xi+4608.0*xi*xi-3072.0*xi*xi*xi+2.0*(-912.0+11552.0*xi-29184.0*xi*xi+19456.0*xi*xi*xi)*eta+3.0*(1536.0-19456.0*xi+49152.0*xi*xi-32768.0*xi*xi*xi)*eta*eta+4.0*(-768.0+9728.0*xi-24576.0*xi*xi+16384.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][0] = 144.0-1824.0*xi+4608.0*xi*xi-3072.0*xi*xi*xi+2.0*(-912.0+11552.0*xi-29184.0*xi*xi+19456.0*xi*xi*xi)*eta+3.0*(1536.0-19456.0*xi+49152.0*xi*xi-32768.0*xi*xi*xi)*eta*eta+4.0*(-768.0+9728.0*xi-24576.0*xi*xi+16384.0*xi*xi*xi)*eta*eta*eta;
+           return_value[1][1] = -1824.0*xi+11552.0*xi*xi-19456.0*xi*xi*xi+9728.0*xi*xi*xi*xi+6.0*(1536.0*xi-9728.0*xi*xi+16384.0*xi*xi*xi-8192.0*xi*xi*xi*xi)*eta+12.0*(-768.0*xi+4864.0*xi*xi-8192.0*xi*xi*xi+4096.0*xi*xi*xi*xi)*eta*eta;
+           break;
+    };
+  return return_value;
+};
+
+
+
 template <>
 void FEQuarticSub<2>::get_local_mass_matrix (const DoFHandler<2>::cell_iterator &cell,
                                             const Boundary<2> &,
index b56e78696382a28cc3f4847d6f353e624b0c5f43..57425e87fc311fa01cc2bbba78c11205afb70f20 100644 (file)
@@ -5,9 +5,6 @@
 #  Wolfgang Bangerth, 1998
   
 perl -pi -e 's/phi_polynom\[(\d+)\] =/case $1: return/g;' *2d_shape_value
-perl -pi -e 's/([^;])\n/$1/g;' *2d_shape_grad
-perl -pi -e 's/grad_phi_polynom\[(\d+)\]\[0\] = (.*);/case $1: return Point<2>($2,/g;' *2d_shape_grad
-perl -pi -e 's/grad_phi_polynom\[(\d+)\]\[1\] = (.*);/$2);/g;' *2d_shape_grad
 perl -pi -e 's/\[(\d+)\]\[(\d+)\]/($1,$2)/g;' *2d_massmatrix
 perl -pi -e 's/(t\d+) =/const double $1 =/g;' *2d_massmatrix
 perl -pi -e 's/\[(\d+)\]\[(\d+)\]\[(\d+)\]/[$1]($2,$3)/g;' *2d_prolongation
@@ -15,8 +12,27 @@ perl -pi -e 's/.*= 0.0;\n//g;' *2d_prolongation
 perl -pi -e 's/\[(\d+)\]\[(\d+)\]\[(\d+)\]/[$1]($2,$3)/g;' *2d_restriction
 perl -pi -e 's/.*= 0.0;\n//g;' *2d_restriction
 perl -pi -e 's/\[(\d+)\]\[(\d+)\]/($1,$2)/g;' *2d_constraints
+
 perl -pi -e 's/^\s*t/const double t/g;' *2d_inverse_jacobian
 perl -pi -e 's/x\[(\d)\]/vertices[$1](0)/g;' *2d_inverse_jacobian
 perl -pi -e 's/y\[(\d)\]/vertices[$1](1)/g;' *2d_inverse_jacobian
 perl -pi -e 's/inverseJacobian/jacobians[point]/g;' *2d_inverse_jacobian
-perl -pi -e 's/\[(\d)\]\[(\d)\] =/($1,$2) =/g;' *2d_inverse_jacobian
\ No newline at end of file
+perl -pi -e 's/\[(\d)\]\[(\d)\] =/($1,$2) =/g;' *2d_inverse_jacobian
+
+perl -pi -e 's/^\s*t/const double t/g;' *2d_inverse_jacobian_grad
+perl -pi -e 's/x\[(\d)\]/vertices[$1](0)/g;' *2d_inverse_jacobian_grad
+perl -pi -e 's/y\[(\d)\]/vertices[$1](1)/g;' *2d_inverse_jacobian_grad
+
+perl -pi -e 's/([^;])\n/$1/g;' *2d_shape_grad
+perl -pi -e 's/grad_phi_polynom\[(\d+)\]\[0\] = (.*);/case $1: return Point<2>($2,/g;' *2d_shape_grad
+perl -pi -e 's/grad_phi_polynom\[(\d+)\]\[1\] = (.*);/$2);/g;' *2d_shape_grad
+
+
+#    concatenate all lines for each entry
+perl -pi -e 's/([^;])\n/$1/g;' *2d_shape_grad_grad
+#    rename the variable
+perl -pi -e 's/\s*grad_grad_phi_polynom/return_value/g;' *2d_shape_grad_grad
+#    insert 'case' and 'break' statements
+perl -pi -e 's/(return_value\[(\d)\]\[0\]\[0\] = .*;)/break;\ncase $2:\n$1/g;' *2d_shape_grad_grad
+#    eliminate first index, since that one is caught by the 'case' statement
+perl -pi -e 's/return_value\[\d+\]/return_value/g;' *2d_shape_grad_grad

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.