From 9112ee4f8db66464e636e115e0a6f2314fc537b7 Mon Sep 17 00:00:00 2001 From: wolf Date: Fri, 6 Nov 1998 14:41:34 +0000 Subject: [PATCH] Implement the second derivative for finite elements in 2D. git-svn-id: https://svn.dealii.org/trunk@645 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/deal.II/include/fe/fe.h | 13 +- .../deal.II/include/fe/fe_lib.criss_cross.h | 15 ++ deal.II/deal.II/include/fe/fe_lib.lagrange.h | 35 +++++ .../deal.II/source/fe/fe_lib.criss_cross.cc | 23 +++ deal.II/deal.II/source/fe/fe_lib.cubic.cc | 103 +++++++++++++ deal.II/deal.II/source/fe/fe_lib.linear.cc | 27 ++++ deal.II/deal.II/source/fe/fe_lib.quadratic.cc | 73 +++++++++ deal.II/deal.II/source/fe/fe_lib.quartic.cc | 139 ++++++++++++++++++ .../deal.II/source/fe/scripts/2d/postprocess | 24 ++- 9 files changed, 446 insertions(+), 6 deletions(-) diff --git a/deal.II/deal.II/include/fe/fe.h b/deal.II/deal.II/include/fe/fe.h index 525275ad1d..b48770180b 100644 --- a/deal.II/deal.II/include/fe/fe.h +++ b/deal.II/deal.II/include/fe/fe.h @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -549,8 +550,16 @@ class FiniteElement : public FiniteElementBase { * function at the point #p#. * #p# is a point on the reference element, */ - virtual Point shape_grad (const unsigned int i, - const Point &p) const = 0; + virtual Point shape_grad (const unsigned int i, + const Point &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 &p) const = 0; /** * Return the value of the #i#th shape diff --git a/deal.II/deal.II/include/fe/fe_lib.criss_cross.h b/deal.II/deal.II/include/fe/fe_lib.criss_cross.h index 6001b5e9c8..51da24e2c0 100644 --- a/deal.II/deal.II/include/fe/fe_lib.criss_cross.h +++ b/deal.II/deal.II/include/fe/fe_lib.criss_cross.h @@ -184,6 +184,21 @@ class FECrissCross : public FiniteElement { virtual Point shape_grad(const unsigned int i, const Point& 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 &p) const = 0; + /** * Refer to the base class for detailed * information on this function. diff --git a/deal.II/deal.II/include/fe/fe_lib.lagrange.h b/deal.II/deal.II/include/fe/fe_lib.lagrange.h index d5bc8da53c..cc1bf1ed8c 100644 --- a/deal.II/deal.II/include/fe/fe_lib.lagrange.h +++ b/deal.II/deal.II/include/fe/fe_lib.lagrange.h @@ -47,6 +47,17 @@ class FELinear : public FELinearMapping { virtual Point shape_grad(const unsigned int i, const Point& 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 &p) const = 0; + /** * Refer to the base class for detailed * information on this function. @@ -110,6 +121,14 @@ class FEQuadraticSub : public FELinearMapping { virtual Point shape_grad(const unsigned int i, const Point& 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 &p) const = 0; + /** * Refer to the base class for detailed * information on this function. @@ -192,6 +211,14 @@ class FECubicSub : public FELinearMapping { virtual Point shape_grad(const unsigned int i, const Point& 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 &p) const = 0; + /** * Refer to the base class for detailed * information on this function. @@ -275,6 +302,14 @@ class FEQuarticSub : public FELinearMapping { virtual Point shape_grad(const unsigned int i, const Point& 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 &p) const = 0; + /** * Refer to the base class for detailed * information on this function. diff --git a/deal.II/deal.II/source/fe/fe_lib.criss_cross.cc b/deal.II/deal.II/source/fe/fe_lib.criss_cross.cc index 7244c61d43..cb46024d83 100644 --- a/deal.II/deal.II/source/fe/fe_lib.criss_cross.cc +++ b/deal.II/deal.II/source/fe/fe_lib.criss_cross.cc @@ -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 >&) 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(); +}; + + template <> void FECrissCross<2>::get_unit_support_points (vector > &unit_points) const { diff --git a/deal.II/deal.II/source/fe/fe_lib.cubic.cc b/deal.II/deal.II/source/fe/fe_lib.cubic.cc index 71c5b35670..654489f5f0 100644 --- a/deal.II/deal.II/source/fe/fe_lib.cubic.cc +++ b/deal.II/deal.II/source/fe/fe_lib.cubic.cc @@ -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 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> &, diff --git a/deal.II/deal.II/source/fe/fe_lib.linear.cc b/deal.II/deal.II/source/fe/fe_lib.linear.cc index e8c18dcf3e..33babbfa5c 100644 --- a/deal.II/deal.II/source/fe/fe_lib.linear.cc +++ b/deal.II/deal.II/source/fe/fe_lib.linear.cc @@ -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(); +}; + + + template <> void FELinear<1>::get_unit_support_points (vector > &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(); +}; + + + template <> void FELinear<2>::get_local_mass_matrix (const DoFHandler<2>::cell_iterator &cell, const Boundary<2> &, diff --git a/deal.II/deal.II/source/fe/fe_lib.quadratic.cc b/deal.II/deal.II/source/fe/fe_lib.quadratic.cc index 5605d05b28..5ace45a8ef 100644 --- a/deal.II/deal.II/source/fe/fe_lib.quadratic.cc +++ b/deal.II/deal.II/source/fe/fe_lib.quadratic.cc @@ -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 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> &, diff --git a/deal.II/deal.II/source/fe/fe_lib.quartic.cc b/deal.II/deal.II/source/fe/fe_lib.quartic.cc index 1bcda503d5..134f9d9faa 100644 --- a/deal.II/deal.II/source/fe/fe_lib.quartic.cc +++ b/deal.II/deal.II/source/fe/fe_lib.quartic.cc @@ -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 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> &, diff --git a/deal.II/deal.II/source/fe/scripts/2d/postprocess b/deal.II/deal.II/source/fe/scripts/2d/postprocess index b56e786963..57425e87fc 100644 --- a/deal.II/deal.II/source/fe/scripts/2d/postprocess +++ b/deal.II/deal.II/source/fe/scripts/2d/postprocess @@ -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 -- 2.39.5